From d9e80b87174b12bad172ef607c26463ab61ded35 Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Fri, 29 Oct 2021 12:55:13 +0100
Subject: [PATCH 01/69] Drupal 9.3.0-alpha1

---
 composer.lock                                      | 14 +++++---------
 composer/Metapackage/CoreRecommended/composer.json |  2 +-
 .../PinnedDevDependencies/composer.json            |  2 +-
 composer/Template/LegacyProject/composer.json      |  2 +-
 composer/Template/RecommendedProject/composer.json |  2 +-
 core/lib/Drupal.php                                |  2 +-
 6 files changed, 10 insertions(+), 14 deletions(-)

diff --git a/composer.lock b/composer.lock
index bd17fb09ea12..bb14932ffe85 100644
--- a/composer.lock
+++ b/composer.lock
@@ -531,7 +531,7 @@
         },
         {
             "name": "drupal/core",
-            "version": "9.3.x-dev",
+            "version": "9.3.0-alpha1",
             "dist": {
                 "type": "path",
                 "url": "core",
@@ -787,7 +787,7 @@
         },
         {
             "name": "drupal/core-project-message",
-            "version": "9.3.x-dev",
+            "version": "9.3.0-alpha1",
             "dist": {
                 "type": "path",
                 "url": "composer/Plugin/ProjectMessage",
@@ -820,7 +820,7 @@
         },
         {
             "name": "drupal/core-vendor-hardening",
-            "version": "9.3.x-dev",
+            "version": "9.3.0-alpha1",
             "dist": {
                 "type": "path",
                 "url": "composer/Plugin/VendorHardening",
@@ -7900,11 +7900,7 @@
     ],
     "aliases": [],
     "minimum-stability": "dev",
-    "stability-flags": {
-        "drupal/core": 20,
-        "drupal/core-project-message": 20,
-        "drupal/core-vendor-hardening": 20
-    },
+    "stability-flags": [],
     "prefer-stable": true,
     "prefer-lowest": false,
     "platform": [],
@@ -7912,5 +7908,5 @@
     "platform-overrides": {
         "php": "7.3.0"
     },
-    "plugin-api-version": "2.1.0"
+    "plugin-api-version": "2.0.0"
 }
diff --git a/composer/Metapackage/CoreRecommended/composer.json b/composer/Metapackage/CoreRecommended/composer.json
index 4c7f7ce41063..284cd31fdd59 100644
--- a/composer/Metapackage/CoreRecommended/composer.json
+++ b/composer/Metapackage/CoreRecommended/composer.json
@@ -7,7 +7,7 @@
         "webflo/drupal-core-strict": "*"
     },
     "require": {
-        "drupal/core": "9.3.x-dev",
+        "drupal/core": "9.3.0-alpha1",
         "asm89/stack-cors": "1.3.0",
         "composer/semver": "3.2.5",
         "doctrine/annotations": "1.13.2",
diff --git a/composer/Metapackage/PinnedDevDependencies/composer.json b/composer/Metapackage/PinnedDevDependencies/composer.json
index 1f0d0884e60b..d290e4a7bc9a 100644
--- a/composer/Metapackage/PinnedDevDependencies/composer.json
+++ b/composer/Metapackage/PinnedDevDependencies/composer.json
@@ -7,7 +7,7 @@
         "webflo/drupal-core-require-dev": "*"
     },
     "require": {
-        "drupal/core": "9.3.x-dev",
+        "drupal/core": "9.3.0-alpha1",
         "behat/mink": "v1.9.0",
         "behat/mink-selenium2-driver": "v1.5.0",
         "composer/ca-bundle": "1.2.11",
diff --git a/composer/Template/LegacyProject/composer.json b/composer/Template/LegacyProject/composer.json
index 1b1a2af337ab..9421705f8d01 100644
--- a/composer/Template/LegacyProject/composer.json
+++ b/composer/Template/LegacyProject/composer.json
@@ -27,7 +27,7 @@
     "conflict": {
         "drupal/drupal": "*"
     },
-    "minimum-stability": "dev",
+    "minimum-stability": "alpha",
     "prefer-stable": true,
     "config": {
         "sort-packages": true
diff --git a/composer/Template/RecommendedProject/composer.json b/composer/Template/RecommendedProject/composer.json
index 99e9f55f2394..b80e0a0f99b1 100644
--- a/composer/Template/RecommendedProject/composer.json
+++ b/composer/Template/RecommendedProject/composer.json
@@ -26,7 +26,7 @@
     "conflict": {
         "drupal/drupal": "*"
     },
-    "minimum-stability": "dev",
+    "minimum-stability": "alpha",
     "prefer-stable": true,
     "config": {
         "sort-packages": true
diff --git a/core/lib/Drupal.php b/core/lib/Drupal.php
index 4ffa6c6f0b0b..be6569cb3c2b 100644
--- a/core/lib/Drupal.php
+++ b/core/lib/Drupal.php
@@ -75,7 +75,7 @@ class Drupal {
   /**
    * The current system version.
    */
-  const VERSION = '9.3.0-dev';
+  const VERSION = '9.3.0-alpha1';
 
   /**
    * Core API compatibility.
-- 
GitLab


From 4d1d79077bcbdafa7f8ec39b47f8584a97fab334 Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Fri, 29 Oct 2021 12:55:13 +0100
Subject: [PATCH 02/69] Back to dev.

---
 composer.lock                                      | 14 +++++++++-----
 composer/Metapackage/CoreRecommended/composer.json |  2 +-
 .../PinnedDevDependencies/composer.json            |  2 +-
 composer/Template/LegacyProject/composer.json      |  2 +-
 composer/Template/RecommendedProject/composer.json |  2 +-
 core/lib/Drupal.php                                |  2 +-
 6 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/composer.lock b/composer.lock
index bb14932ffe85..bd17fb09ea12 100644
--- a/composer.lock
+++ b/composer.lock
@@ -531,7 +531,7 @@
         },
         {
             "name": "drupal/core",
-            "version": "9.3.0-alpha1",
+            "version": "9.3.x-dev",
             "dist": {
                 "type": "path",
                 "url": "core",
@@ -787,7 +787,7 @@
         },
         {
             "name": "drupal/core-project-message",
-            "version": "9.3.0-alpha1",
+            "version": "9.3.x-dev",
             "dist": {
                 "type": "path",
                 "url": "composer/Plugin/ProjectMessage",
@@ -820,7 +820,7 @@
         },
         {
             "name": "drupal/core-vendor-hardening",
-            "version": "9.3.0-alpha1",
+            "version": "9.3.x-dev",
             "dist": {
                 "type": "path",
                 "url": "composer/Plugin/VendorHardening",
@@ -7900,7 +7900,11 @@
     ],
     "aliases": [],
     "minimum-stability": "dev",
-    "stability-flags": [],
+    "stability-flags": {
+        "drupal/core": 20,
+        "drupal/core-project-message": 20,
+        "drupal/core-vendor-hardening": 20
+    },
     "prefer-stable": true,
     "prefer-lowest": false,
     "platform": [],
@@ -7908,5 +7912,5 @@
     "platform-overrides": {
         "php": "7.3.0"
     },
-    "plugin-api-version": "2.0.0"
+    "plugin-api-version": "2.1.0"
 }
diff --git a/composer/Metapackage/CoreRecommended/composer.json b/composer/Metapackage/CoreRecommended/composer.json
index 284cd31fdd59..4c7f7ce41063 100644
--- a/composer/Metapackage/CoreRecommended/composer.json
+++ b/composer/Metapackage/CoreRecommended/composer.json
@@ -7,7 +7,7 @@
         "webflo/drupal-core-strict": "*"
     },
     "require": {
-        "drupal/core": "9.3.0-alpha1",
+        "drupal/core": "9.3.x-dev",
         "asm89/stack-cors": "1.3.0",
         "composer/semver": "3.2.5",
         "doctrine/annotations": "1.13.2",
diff --git a/composer/Metapackage/PinnedDevDependencies/composer.json b/composer/Metapackage/PinnedDevDependencies/composer.json
index d290e4a7bc9a..1f0d0884e60b 100644
--- a/composer/Metapackage/PinnedDevDependencies/composer.json
+++ b/composer/Metapackage/PinnedDevDependencies/composer.json
@@ -7,7 +7,7 @@
         "webflo/drupal-core-require-dev": "*"
     },
     "require": {
-        "drupal/core": "9.3.0-alpha1",
+        "drupal/core": "9.3.x-dev",
         "behat/mink": "v1.9.0",
         "behat/mink-selenium2-driver": "v1.5.0",
         "composer/ca-bundle": "1.2.11",
diff --git a/composer/Template/LegacyProject/composer.json b/composer/Template/LegacyProject/composer.json
index 9421705f8d01..1b1a2af337ab 100644
--- a/composer/Template/LegacyProject/composer.json
+++ b/composer/Template/LegacyProject/composer.json
@@ -27,7 +27,7 @@
     "conflict": {
         "drupal/drupal": "*"
     },
-    "minimum-stability": "alpha",
+    "minimum-stability": "dev",
     "prefer-stable": true,
     "config": {
         "sort-packages": true
diff --git a/composer/Template/RecommendedProject/composer.json b/composer/Template/RecommendedProject/composer.json
index b80e0a0f99b1..99e9f55f2394 100644
--- a/composer/Template/RecommendedProject/composer.json
+++ b/composer/Template/RecommendedProject/composer.json
@@ -26,7 +26,7 @@
     "conflict": {
         "drupal/drupal": "*"
     },
-    "minimum-stability": "alpha",
+    "minimum-stability": "dev",
     "prefer-stable": true,
     "config": {
         "sort-packages": true
diff --git a/core/lib/Drupal.php b/core/lib/Drupal.php
index be6569cb3c2b..4ffa6c6f0b0b 100644
--- a/core/lib/Drupal.php
+++ b/core/lib/Drupal.php
@@ -75,7 +75,7 @@ class Drupal {
   /**
    * The current system version.
    */
-  const VERSION = '9.3.0-alpha1';
+  const VERSION = '9.3.0-dev';
 
   /**
    * Core API compatibility.
-- 
GitLab


From beb3bf6e6ce2aa77647ff2cd5c512aa4f967f9bb Mon Sep 17 00:00:00 2001
From: Alex Pott <alex.a.pott@googlemail.com>
Date: Fri, 29 Oct 2021 19:17:25 +0100
Subject: [PATCH 03/69] Issue #3186992 by hinal05, djsagar, kiran.kadam911,
 hitvika_verma, tushar_sachdeva, chetanbharambe, ranjith_kumar_k_u, bnjmnm,
 BhumikaVarshney, Sakthivel M, Abhijith S, babusaheb.vikas, lauriii: Nav menu
 items can overflow outside of container

(cherry picked from commit 4063e76cbe99607621b2a4b22ee75076a1ff72ec)
---
 .../olivero/css/components/navigation/nav-primary-wide.css    | 4 ++--
 .../css/components/navigation/nav-primary-wide.pcss.css       | 2 +-
 core/themes/olivero/css/components/navigation/nav-primary.css | 1 +
 .../olivero/css/components/navigation/nav-primary.pcss.css    | 1 +
 4 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/core/themes/olivero/css/components/navigation/nav-primary-wide.css b/core/themes/olivero/css/components/navigation/nav-primary-wide.css
index 9b5ef1b5c040..625efe4484b6 100644
--- a/core/themes/olivero/css/components/navigation/nav-primary-wide.css
+++ b/core/themes/olivero/css/components/navigation/nav-primary-wide.css
@@ -111,8 +111,8 @@
     }
 
     body:not(.is-always-mobile-nav) .primary-nav__menu-link-inner {
-      padding-top: 2.25rem;
-      padding-bottom: 2.25rem
+      padding-top: 1.125rem;
+      padding-bottom: 1.125rem
     }
 
       body:not(.is-always-mobile-nav) .primary-nav__menu-link-inner:after {
diff --git a/core/themes/olivero/css/components/navigation/nav-primary-wide.pcss.css b/core/themes/olivero/css/components/navigation/nav-primary-wide.pcss.css
index 65c7019c0d7a..16e196c0b290 100644
--- a/core/themes/olivero/css/components/navigation/nav-primary-wide.pcss.css
+++ b/core/themes/olivero/css/components/navigation/nav-primary-wide.pcss.css
@@ -82,7 +82,7 @@ body:not(.is-always-mobile-nav) {
     }
 
     & .primary-nav__menu-link-inner {
-      padding-block: var(--sp2);
+      padding-block: var(--sp1);
       padding-inline-start: 0;
       padding-inline-end: 0;
 
diff --git a/core/themes/olivero/css/components/navigation/nav-primary.css b/core/themes/olivero/css/components/navigation/nav-primary.css
index 4ef04d9538dd..c66931d62cc4 100644
--- a/core/themes/olivero/css/components/navigation/nav-primary.css
+++ b/core/themes/olivero/css/components/navigation/nav-primary.css
@@ -11,6 +11,7 @@
  */
 
 .primary-nav__menu {
+  flex-wrap: wrap;
   list-style: none;
 }
 
diff --git a/core/themes/olivero/css/components/navigation/nav-primary.pcss.css b/core/themes/olivero/css/components/navigation/nav-primary.pcss.css
index d8c68795dab3..cc7550e9ae66 100644
--- a/core/themes/olivero/css/components/navigation/nav-primary.pcss.css
+++ b/core/themes/olivero/css/components/navigation/nav-primary.pcss.css
@@ -6,6 +6,7 @@
 @import "../../base/variables.pcss.css";
 
 .primary-nav__menu {
+  flex-wrap: wrap;
   list-style: none;
 }
 
-- 
GitLab


From 3d8ead3c02edfd8ae92fb4ada3ab9bf690075b85 Mon Sep 17 00:00:00 2001
From: Alex Pott <alex.a.pott@googlemail.com>
Date: Fri, 29 Oct 2021 19:19:05 +0100
Subject: [PATCH 04/69] Issue #3214170 by Sakthivel M, manojithape,
 mitthukumawat, tushar_sachdeva: Claro:The cancel button is not center-aligned
 in the layout builder

(cherry picked from commit f4ff1b59da0f42edc77b7e5585d1411527cbd831)
---
 core/themes/claro/css/base/off-canvas.theme.css      | 4 ++++
 core/themes/claro/css/base/off-canvas.theme.pcss.css | 4 ++++
 2 files changed, 8 insertions(+)

diff --git a/core/themes/claro/css/base/off-canvas.theme.css b/core/themes/claro/css/base/off-canvas.theme.css
index 5e2c412d5b1f..85074a9e59fd 100644
--- a/core/themes/claro/css/base/off-canvas.theme.css
+++ b/core/themes/claro/css/base/off-canvas.theme.css
@@ -81,3 +81,7 @@
 #drupal-off-canvas .ui-widget-content a {
   color: #85bef4;
 }
+
+#drupal-off-canvas .form-actions {
+  display: block;
+}
diff --git a/core/themes/claro/css/base/off-canvas.theme.pcss.css b/core/themes/claro/css/base/off-canvas.theme.pcss.css
index cafe85fd06d8..ef6ee19cf119 100644
--- a/core/themes/claro/css/base/off-canvas.theme.pcss.css
+++ b/core/themes/claro/css/base/off-canvas.theme.pcss.css
@@ -69,3 +69,7 @@
 #drupal-off-canvas .ui-widget-content a {
   color: #85bef4;
 }
+
+#drupal-off-canvas .form-actions {
+  display: block;
+}
-- 
GitLab


From 52524c98bc711c6bd5d8011919a67be997a80f53 Mon Sep 17 00:00:00 2001
From: Alex Pott <alex.a.pott@googlemail.com>
Date: Fri, 29 Oct 2021 19:26:15 +0100
Subject: [PATCH 05/69] Issue #3246053 by quietone: Fix file_managed table for
 ds9.txt

(cherry picked from commit a911353469be2f5ced57a3dd6d96551bafde5485)
---
 core/modules/migrate_drupal/tests/fixtures/drupal7.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/core/modules/migrate_drupal/tests/fixtures/drupal7.php b/core/modules/migrate_drupal/tests/fixtures/drupal7.php
index 92c1788f8bcb..b7f16908737d 100644
--- a/core/modules/migrate_drupal/tests/fixtures/drupal7.php
+++ b/core/modules/migrate_drupal/tests/fixtures/drupal7.php
@@ -19142,7 +19142,7 @@
   'filename' => 'ds9.txt',
   'uri' => 'public://ds9.txt',
   'filemime' => 'text/plain',
-  'filesize' => '4720',
+  'filesize' => '4',
   'status' => '1',
   'timestamp' => '1421727516',
 ))
-- 
GitLab


From a0f291955f75d6340b9e5aefa0a55e96538829fd Mon Sep 17 00:00:00 2001
From: Alex Pott <alex.a.pott@googlemail.com>
Date: Sat, 30 Oct 2021 00:51:41 +0100
Subject: [PATCH 06/69] Issue #3227821 by wtrv: Broken svg element with "Auto
 convert linebreaks" (autop) filter

(cherry picked from commit b3a30bae55de7c79bc8719a50cd097bf29b8b203)
---
 core/modules/filter/filter.module                         | 2 +-
 core/modules/filter/tests/src/Kernel/FilterKernelTest.php | 2 ++
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/core/modules/filter/filter.module b/core/modules/filter/filter.module
index 70661d97ce86..04d73fce7aaf 100644
--- a/core/modules/filter/filter.module
+++ b/core/modules/filter/filter.module
@@ -690,7 +690,7 @@ function _filter_autop($text) {
   // to avoid messing up code. We look for matched pairs and allow basic
   // nesting. For example:
   // "processed <pre> ignored <script> ignored </script> ignored </pre> processed"
-  $chunks = preg_split('@(<!--.*?-->|</?(?:pre|script|style|object|iframe|drupal-media|!--)[^>]*>)@i', $text, -1, PREG_SPLIT_DELIM_CAPTURE);
+  $chunks = preg_split('@(<!--.*?-->|</?(?:pre|script|style|object|iframe|drupal-media|svg|!--)[^>]*>)@i', $text, -1, PREG_SPLIT_DELIM_CAPTURE);
   // Note: PHP ensures the array consists of alternating delimiters and literals
   // and begins and ends with a literal (inserting NULL as required).
   $ignore = FALSE;
diff --git a/core/modules/filter/tests/src/Kernel/FilterKernelTest.php b/core/modules/filter/tests/src/Kernel/FilterKernelTest.php
index f26a1b4286f1..f51f86a6710d 100644
--- a/core/modules/filter/tests/src/Kernel/FilterKernelTest.php
+++ b/core/modules/filter/tests/src/Kernel/FilterKernelTest.php
@@ -336,12 +336,14 @@ public function testLineBreakFilter() {
 <pre>aaa\nbbb\n\nccc</pre>
 <object>aaa\nbbb\n\nccc</object>
 <iframe>aaa\nbbb\n\nccc</iframe>
+<svg>aaa\nbbb\n\nccc</svg>
 " => [
         "<script>aaa\nbbb\n\nccc</script>" => TRUE,
         "<style>aaa\nbbb\n\nccc</style>" => TRUE,
         "<pre>aaa\nbbb\n\nccc</pre>" => TRUE,
         "<object>aaa\nbbb\n\nccc</object>" => TRUE,
         "<iframe>aaa\nbbb\n\nccc</iframe>" => TRUE,
+        "<svg>aaa\nbbb\n\nccc</svg>" => TRUE,
       ],
       // Skip comments entirely.
       "One. <!-- comment --> Two.\n<!--\nThree.\n-->\n" => [
-- 
GitLab


From 16d107539f5023a14473488f9cbe4fbe266ffed7 Mon Sep 17 00:00:00 2001
From: Alex Pott <alex.a.pott@googlemail.com>
Date: Mon, 1 Nov 2021 08:36:30 +0000
Subject: [PATCH 07/69] Issue #2569381 by alx_benjamin, init90, vasi,
 deepakaryan1988, Munavijayalakshmi, Lendude, DuaelFr, alexpott, dawehner:
 Drupal\views\Plugin\views\area\Result does an unnecessary XSS::adminFilter()

(cherry picked from commit f5fdfe3165da71188e4bcb9a4d8491cc274da853)
---
 core/modules/views/src/Plugin/views/area/Result.php            | 3 +--
 .../test_views/views.view.test_area_result.yml                 | 2 +-
 core/modules/views/tests/src/Kernel/Handler/AreaResultTest.php | 3 +++
 3 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/core/modules/views/src/Plugin/views/area/Result.php b/core/modules/views/src/Plugin/views/area/Result.php
index e8d194773282..6fc6805dbc93 100644
--- a/core/modules/views/src/Plugin/views/area/Result.php
+++ b/core/modules/views/src/Plugin/views/area/Result.php
@@ -3,7 +3,6 @@
 namespace Drupal\views\Plugin\views\area;
 
 use Drupal\Component\Utility\Html;
-use Drupal\Component\Utility\Xss;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\views\Plugin\views\style\DefaultSummary;
 
@@ -114,7 +113,7 @@ public function render($empty = FALSE) {
     $replacements['@page_count'] = $page_count;
     // Send the output.
     if (!empty($total) || !empty($this->options['empty'])) {
-      $output .= Xss::filterAdmin(str_replace(array_keys($replacements), array_values($replacements), $format));
+      $output .= str_replace(array_keys($replacements), array_values($replacements), $format);
       // Return as render array.
       return [
         '#markup' => $output,
diff --git a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_area_result.yml b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_area_result.yml
index 6b47f153f34f..05f574e59dd5 100644
--- a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_area_result.yml
+++ b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_area_result.yml
@@ -50,7 +50,7 @@ display:
           group_type: group
           admin_label: ''
           empty: true
-          content: "start: @start | end: @end | total: @total | label: @label | per page: @per_page | current page: @current_page | current record count: @current_record_count | page count: @page_count"
+          content: "<script />start: @start | end: @end | total: @total | label: @label | per page: @per_page | current page: @current_page | current record count: @current_record_count | page count: @page_count"
           plugin_id: result
     display_plugin: default
     display_title: Default
diff --git a/core/modules/views/tests/src/Kernel/Handler/AreaResultTest.php b/core/modules/views/tests/src/Kernel/Handler/AreaResultTest.php
index 31e252aef2cf..a292e5c6a87a 100644
--- a/core/modules/views/tests/src/Kernel/Handler/AreaResultTest.php
+++ b/core/modules/views/tests/src/Kernel/Handler/AreaResultTest.php
@@ -29,6 +29,9 @@ public function testResult() {
     $output = \Drupal::service('renderer')->renderRoot($output);
     $this->setRawContent($output);
     $this->assertText('start: 1 | end: 5 | total: 5 | label: test_area_result | per page: 0 | current page: 1 | current record count: 5 | page count: 1');
+
+    // Make sure that potentially dangerous content was stripped.
+    $this->assertNoRaw('<script />');
   }
 
   /**
-- 
GitLab


From 9d6d5264586a6e34cb4491233a5e09f7f87e2ff8 Mon Sep 17 00:00:00 2001
From: Alex Pott <alex.a.pott@googlemail.com>
Date: Mon, 1 Nov 2021 09:39:31 +0000
Subject: [PATCH 08/69] Issue #3213644 by Beakerboy, daffie:
 StatementWrapperLegacyTest::testClientStatementMethod() should be less
 specific

(cherry picked from commit 8512e0e93c587f06d82703fa8966635e37364c65)
---
 .../Core/Database/StatementWrapperLegacyTest.php          | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/core/tests/Drupal/KernelTests/Core/Database/StatementWrapperLegacyTest.php b/core/tests/Drupal/KernelTests/Core/Database/StatementWrapperLegacyTest.php
index 56609ee8a6a3..9c7457a58aab 100644
--- a/core/tests/Drupal/KernelTests/Core/Database/StatementWrapperLegacyTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Database/StatementWrapperLegacyTest.php
@@ -20,7 +20,7 @@ class StatementWrapperLegacyTest extends DatabaseTestBase {
    */
   protected function setUp(): void {
     parent::setUp();
-    $this->statement = $this->connection->prepareStatement('SELECT * FROM {test}', []);
+    $this->statement = $this->connection->prepareStatement('SELECT id FROM {test}', []);
     if (!$this->statement instanceof StatementWrapper) {
       $this->markTestSkipped('This test only works for drivers implementing Drupal\Core\Database\StatementWrapper.');
     }
@@ -31,8 +31,8 @@ protected function setUp(): void {
    */
   public function testQueryString() {
     $this->expectDeprecation('StatementWrapper::$queryString should not be accessed in drupal:9.1.0 and will error in drupal:10.0.0. Access the client-level statement object via ::getClientStatement(). See https://www.drupal.org/node/3177488');
-    $this->assertStringContainsString('SELECT * FROM ', $this->statement->queryString);
-    $this->assertStringContainsString('SELECT * FROM ', $this->statement->getQueryString());
+    $this->assertStringContainsString('SELECT id FROM ', $this->statement->queryString);
+    $this->assertStringContainsString('SELECT id FROM ', $this->statement->getQueryString());
   }
 
   /**
@@ -49,7 +49,7 @@ public function testMissingMethod() {
   public function testClientStatementMethod() {
     $this->expectDeprecation('StatementWrapper::columnCount should not be called in drupal:9.1.0 and will error in drupal:10.0.0. Access the client-level statement object via ::getClientStatement(). See https://www.drupal.org/node/3177488');
     $this->statement->execute();
-    $this->assertEquals(4, $this->statement->columnCount());
+    $this->assertEquals(1, $this->statement->columnCount());
   }
 
   /**
-- 
GitLab


From 24644b71a5f09c92f79e9860a3c6a53e73f7573c Mon Sep 17 00:00:00 2001
From: Alex Pott <alex.a.pott@googlemail.com>
Date: Mon, 1 Nov 2021 09:45:20 +0000
Subject: [PATCH 09/69] Issue #3246595 by andypost: Update dependencies for
 9.3.x

(cherry picked from commit 10ca9797ab0a97993f31b8227de9748d0790626c)
---
 composer.lock                                 | 148 +++++++++---------
 .../Metapackage/CoreRecommended/composer.json |  16 +-
 .../PinnedDevDependencies/composer.json       |   8 +-
 3 files changed, 86 insertions(+), 86 deletions(-)

diff --git a/composer.lock b/composer.lock
index bd17fb09ea12..a79552dad19b 100644
--- a/composer.lock
+++ b/composer.lock
@@ -215,16 +215,16 @@
         },
         {
             "name": "composer/semver",
-            "version": "3.2.5",
+            "version": "3.2.6",
             "source": {
                 "type": "git",
                 "url": "https://github.com/composer/semver.git",
-                "reference": "31f3ea725711245195f62e54ffa402d8ef2fdba9"
+                "reference": "83e511e247de329283478496f7a1e114c9517506"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/semver/zipball/31f3ea725711245195f62e54ffa402d8ef2fdba9",
-                "reference": "31f3ea725711245195f62e54ffa402d8ef2fdba9",
+                "url": "https://api.github.com/repos/composer/semver/zipball/83e511e247de329283478496f7a1e114c9517506",
+                "reference": "83e511e247de329283478496f7a1e114c9517506",
                 "shasum": ""
             },
             "require": {
@@ -276,7 +276,7 @@
             "support": {
                 "irc": "irc://irc.freenode.org/composer",
                 "issues": "https://github.com/composer/semver/issues",
-                "source": "https://github.com/composer/semver/tree/3.2.5"
+                "source": "https://github.com/composer/semver/tree/3.2.6"
             },
             "funding": [
                 {
@@ -292,7 +292,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-05-24T12:41:47+00:00"
+            "time": "2021-10-25T11:34:17+00:00"
         },
         {
             "name": "doctrine/annotations",
@@ -2206,16 +2206,16 @@
         },
         {
             "name": "symfony/console",
-            "version": "v4.4.30",
+            "version": "v4.4.33",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "a3f7189a0665ee33b50e9e228c46f50f5acbed22"
+                "reference": "8dbd23ef7a8884051482183ddee8d9061b5feed0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/a3f7189a0665ee33b50e9e228c46f50f5acbed22",
-                "reference": "a3f7189a0665ee33b50e9e228c46f50f5acbed22",
+                "url": "https://api.github.com/repos/symfony/console/zipball/8dbd23ef7a8884051482183ddee8d9061b5feed0",
+                "reference": "8dbd23ef7a8884051482183ddee8d9061b5feed0",
                 "shasum": ""
             },
             "require": {
@@ -2276,7 +2276,7 @@
             "description": "Eases the creation of beautiful and testable command line interfaces",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/console/tree/v4.4.30"
+                "source": "https://github.com/symfony/console/tree/v4.4.33"
             },
             "funding": [
                 {
@@ -2292,7 +2292,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-08-25T19:27:26+00:00"
+            "time": "2021-10-25T16:36:08+00:00"
         },
         {
             "name": "symfony/debug",
@@ -2364,16 +2364,16 @@
         },
         {
             "name": "symfony/dependency-injection",
-            "version": "v4.4.31",
+            "version": "v4.4.33",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/dependency-injection.git",
-                "reference": "75dd7094870feaa5be9ed2b6b1efcfc2b7d3b9b4"
+                "reference": "ad364e599a4059db29c0aa424537e6ba668f54e6"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/75dd7094870feaa5be9ed2b6b1efcfc2b7d3b9b4",
-                "reference": "75dd7094870feaa5be9ed2b6b1efcfc2b7d3b9b4",
+                "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/ad364e599a4059db29c0aa424537e6ba668f54e6",
+                "reference": "ad364e599a4059db29c0aa424537e6ba668f54e6",
                 "shasum": ""
             },
             "require": {
@@ -2430,7 +2430,7 @@
             "description": "Allows you to standardize and centralize the way objects are constructed in your application",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/dependency-injection/tree/v4.4.31"
+                "source": "https://github.com/symfony/dependency-injection/tree/v4.4.33"
             },
             "funding": [
                 {
@@ -2446,7 +2446,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-09-21T06:20:06+00:00"
+            "time": "2021-10-17T07:04:24+00:00"
         },
         {
             "name": "symfony/deprecation-contracts",
@@ -2826,16 +2826,16 @@
         },
         {
             "name": "symfony/http-foundation",
-            "version": "v4.4.30",
+            "version": "v4.4.33",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/http-foundation.git",
-                "reference": "09b3202651ab23ac8dcf455284a48a3500e56731"
+                "reference": "b9a91102f548e0111f4996e8c622fb1d1d479850"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-foundation/zipball/09b3202651ab23ac8dcf455284a48a3500e56731",
-                "reference": "09b3202651ab23ac8dcf455284a48a3500e56731",
+                "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b9a91102f548e0111f4996e8c622fb1d1d479850",
+                "reference": "b9a91102f548e0111f4996e8c622fb1d1d479850",
                 "shasum": ""
             },
             "require": {
@@ -2874,7 +2874,7 @@
             "description": "Defines an object-oriented layer for the HTTP specification",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/http-foundation/tree/v4.4.30"
+                "source": "https://github.com/symfony/http-foundation/tree/v4.4.33"
             },
             "funding": [
                 {
@@ -2890,20 +2890,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-08-26T15:51:23+00:00"
+            "time": "2021-10-07T15:31:35+00:00"
         },
         {
             "name": "symfony/http-kernel",
-            "version": "v4.4.32",
+            "version": "v4.4.33",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/http-kernel.git",
-                "reference": "f7bda3ea8f05ae90627400e58af5179b25ce0f38"
+                "reference": "6f1fcca1154f782796549f4f4e5090bae9525c0e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-kernel/zipball/f7bda3ea8f05ae90627400e58af5179b25ce0f38",
-                "reference": "f7bda3ea8f05ae90627400e58af5179b25ce0f38",
+                "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6f1fcca1154f782796549f4f4e5090bae9525c0e",
+                "reference": "6f1fcca1154f782796549f4f4e5090bae9525c0e",
                 "shasum": ""
             },
             "require": {
@@ -2978,7 +2978,7 @@
             "description": "Provides a structured process for converting a Request into a Response",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/http-kernel/tree/v4.4.32"
+                "source": "https://github.com/symfony/http-kernel/tree/v4.4.33"
             },
             "funding": [
                 {
@@ -2994,7 +2994,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-09-28T10:20:04+00:00"
+            "time": "2021-10-29T08:14:01+00:00"
         },
         {
             "name": "symfony/mime",
@@ -3813,16 +3813,16 @@
         },
         {
             "name": "symfony/serializer",
-            "version": "v4.4.31",
+            "version": "v4.4.33",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/serializer.git",
-                "reference": "a10b610f75349dbee1d3ad05c7a2cbf4f1872e34"
+                "reference": "5cb0dc3028e0f32888fed2d467b7762824fef843"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/serializer/zipball/a10b610f75349dbee1d3ad05c7a2cbf4f1872e34",
-                "reference": "a10b610f75349dbee1d3ad05c7a2cbf4f1872e34",
+                "url": "https://api.github.com/repos/symfony/serializer/zipball/5cb0dc3028e0f32888fed2d467b7762824fef843",
+                "reference": "5cb0dc3028e0f32888fed2d467b7762824fef843",
                 "shasum": ""
             },
             "require": {
@@ -3887,7 +3887,7 @@
             "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/serializer/tree/v4.4.31"
+                "source": "https://github.com/symfony/serializer/tree/v4.4.33"
             },
             "funding": [
                 {
@@ -3903,7 +3903,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-09-17T08:50:49+00:00"
+            "time": "2021-09-27T18:46:41+00:00"
         },
         {
             "name": "symfony/service-contracts",
@@ -4153,16 +4153,16 @@
         },
         {
             "name": "symfony/validator",
-            "version": "v4.4.31",
+            "version": "v4.4.33",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/validator.git",
-                "reference": "9420a2e8874263a684588283e40252209d80e1a5"
+                "reference": "ff0397aa280de38a631660f5aa8067cfbc519e11"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/validator/zipball/9420a2e8874263a684588283e40252209d80e1a5",
-                "reference": "9420a2e8874263a684588283e40252209d80e1a5",
+                "url": "https://api.github.com/repos/symfony/validator/zipball/ff0397aa280de38a631660f5aa8067cfbc519e11",
+                "reference": "ff0397aa280de38a631660f5aa8067cfbc519e11",
                 "shasum": ""
             },
             "require": {
@@ -4239,7 +4239,7 @@
             "description": "Provides tools to validate values",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/validator/tree/v4.4.31"
+                "source": "https://github.com/symfony/validator/tree/v4.4.33"
             },
             "funding": [
                 {
@@ -4255,20 +4255,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-09-20T16:52:24+00:00"
+            "time": "2021-10-28T08:11:47+00:00"
         },
         {
             "name": "symfony/var-dumper",
-            "version": "v5.3.8",
+            "version": "v5.3.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/var-dumper.git",
-                "reference": "eaaea4098be1c90c8285543e1356a09c8aa5c8da"
+                "reference": "875432adb5f5570fff21036fd22aee244636b7d1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/eaaea4098be1c90c8285543e1356a09c8aa5c8da",
-                "reference": "eaaea4098be1c90c8285543e1356a09c8aa5c8da",
+                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/875432adb5f5570fff21036fd22aee244636b7d1",
+                "reference": "875432adb5f5570fff21036fd22aee244636b7d1",
                 "shasum": ""
             },
             "require": {
@@ -4327,7 +4327,7 @@
                 "dump"
             ],
             "support": {
-                "source": "https://github.com/symfony/var-dumper/tree/v5.3.8"
+                "source": "https://github.com/symfony/var-dumper/tree/v5.3.10"
             },
             "funding": [
                 {
@@ -4343,7 +4343,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-09-24T15:59:58+00:00"
+            "time": "2021-10-26T09:30:15+00:00"
         },
         {
             "name": "symfony/yaml",
@@ -4685,16 +4685,16 @@
         },
         {
             "name": "composer/ca-bundle",
-            "version": "1.2.11",
+            "version": "1.3.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/composer/ca-bundle.git",
-                "reference": "0b072d51c5a9c6f3412f7ea3ab043d6603cb2582"
+                "reference": "4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/ca-bundle/zipball/0b072d51c5a9c6f3412f7ea3ab043d6603cb2582",
-                "reference": "0b072d51c5a9c6f3412f7ea3ab043d6603cb2582",
+                "url": "https://api.github.com/repos/composer/ca-bundle/zipball/4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b",
+                "reference": "4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b",
                 "shasum": ""
             },
             "require": {
@@ -4741,7 +4741,7 @@
             "support": {
                 "irc": "irc://irc.freenode.org/composer",
                 "issues": "https://github.com/composer/ca-bundle/issues",
-                "source": "https://github.com/composer/ca-bundle/tree/1.2.11"
+                "source": "https://github.com/composer/ca-bundle/tree/1.3.1"
             },
             "funding": [
                 {
@@ -4757,20 +4757,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-09-25T20:32:43+00:00"
+            "time": "2021-10-28T20:44:15+00:00"
         },
         {
             "name": "composer/composer",
-            "version": "2.1.9",
+            "version": "2.1.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/composer/composer.git",
-                "reference": "e558c88f28d102d497adec4852802c0dc14c7077"
+                "reference": "ea5f64d1a15c66942979b804c9fb3686be852ca0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/composer/zipball/e558c88f28d102d497adec4852802c0dc14c7077",
-                "reference": "e558c88f28d102d497adec4852802c0dc14c7077",
+                "url": "https://api.github.com/repos/composer/composer/zipball/ea5f64d1a15c66942979b804c9fb3686be852ca0",
+                "reference": "ea5f64d1a15c66942979b804c9fb3686be852ca0",
                 "shasum": ""
             },
             "require": {
@@ -4781,7 +4781,7 @@
                 "composer/xdebug-handler": "^2.0",
                 "justinrainbow/json-schema": "^5.2.11",
                 "php": "^5.3.2 || ^7.0 || ^8.0",
-                "psr/log": "^1.0",
+                "psr/log": "^1.0 || ^2.0",
                 "react/promise": "^1.2 || ^2.7",
                 "seld/jsonlint": "^1.4",
                 "seld/phar-utils": "^1.0",
@@ -4805,7 +4805,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.1-dev"
+                    "dev-main": "2.1-dev"
                 }
             },
             "autoload": {
@@ -4839,7 +4839,7 @@
             "support": {
                 "irc": "ircs://irc.libera.chat:6697/composer",
                 "issues": "https://github.com/composer/composer/issues",
-                "source": "https://github.com/composer/composer/tree/2.1.9"
+                "source": "https://github.com/composer/composer/tree/2.1.10"
             },
             "funding": [
                 {
@@ -4855,7 +4855,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-10-05T07:47:38+00:00"
+            "time": "2021-10-29T20:34:57+00:00"
         },
         {
             "name": "composer/metadata-minifier",
@@ -7630,16 +7630,16 @@
         },
         {
             "name": "symfony/lock",
-            "version": "v4.4.27",
+            "version": "v4.4.33",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/lock.git",
-                "reference": "6ca476d4ac992802f2a4043929f68f1818449486"
+                "reference": "567d29b1bc6e3937652054dafc069151d17824a9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/lock/zipball/6ca476d4ac992802f2a4043929f68f1818449486",
-                "reference": "6ca476d4ac992802f2a4043929f68f1818449486",
+                "url": "https://api.github.com/repos/symfony/lock/zipball/567d29b1bc6e3937652054dafc069151d17824a9",
+                "reference": "567d29b1bc6e3937652054dafc069151d17824a9",
                 "shasum": ""
             },
             "require": {
@@ -7688,7 +7688,7 @@
                 "semaphore"
             ],
             "support": {
-                "source": "https://github.com/symfony/lock/tree/v4.4.27"
+                "source": "https://github.com/symfony/lock/tree/v4.4.33"
             },
             "funding": [
                 {
@@ -7704,20 +7704,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-07-23T15:41:52+00:00"
+            "time": "2021-10-05T20:27:01+00:00"
         },
         {
             "name": "symfony/phpunit-bridge",
-            "version": "v5.3.8",
+            "version": "v5.3.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/phpunit-bridge.git",
-                "reference": "e9c0548d8d7abcd257f18f0adc0517895996a9c1"
+                "reference": "325aaf6302501ed3673cffbd3ba88db5949de8ae"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/e9c0548d8d7abcd257f18f0adc0517895996a9c1",
-                "reference": "e9c0548d8d7abcd257f18f0adc0517895996a9c1",
+                "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/325aaf6302501ed3673cffbd3ba88db5949de8ae",
+                "reference": "325aaf6302501ed3673cffbd3ba88db5949de8ae",
                 "shasum": ""
             },
             "require": {
@@ -7771,7 +7771,7 @@
             "description": "Provides utilities for PHPUnit, especially user deprecation notices management",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/phpunit-bridge/tree/v5.3.8"
+                "source": "https://github.com/symfony/phpunit-bridge/tree/v5.3.10"
             },
             "funding": [
                 {
@@ -7787,7 +7787,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-09-14T13:57:08+00:00"
+            "time": "2021-10-28T19:22:18+00:00"
         },
         {
             "name": "theseer/tokenizer",
diff --git a/composer/Metapackage/CoreRecommended/composer.json b/composer/Metapackage/CoreRecommended/composer.json
index 4c7f7ce41063..4a1ebead515c 100644
--- a/composer/Metapackage/CoreRecommended/composer.json
+++ b/composer/Metapackage/CoreRecommended/composer.json
@@ -9,7 +9,7 @@
     "require": {
         "drupal/core": "9.3.x-dev",
         "asm89/stack-cors": "1.3.0",
-        "composer/semver": "3.2.5",
+        "composer/semver": "3.2.6",
         "doctrine/annotations": "1.13.2",
         "doctrine/lexer": "1.2.1",
         "doctrine/reflection": "1.2.2",
@@ -34,16 +34,16 @@
         "ralouphie/getallheaders": "3.0.3",
         "stack/builder": "v1.0.6",
         "symfony-cmf/routing": "2.3.3",
-        "symfony/console": "v4.4.30",
+        "symfony/console": "v4.4.33",
         "symfony/debug": "v4.4.31",
-        "symfony/dependency-injection": "v4.4.31",
+        "symfony/dependency-injection": "v4.4.33",
         "symfony/deprecation-contracts": "v2.4.0",
         "symfony/error-handler": "v4.4.30",
         "symfony/event-dispatcher": "v4.4.30",
         "symfony/event-dispatcher-contracts": "v1.1.9",
         "symfony/http-client-contracts": "v2.4.0",
-        "symfony/http-foundation": "v4.4.30",
-        "symfony/http-kernel": "v4.4.32",
+        "symfony/http-foundation": "v4.4.33",
+        "symfony/http-kernel": "v4.4.33",
         "symfony/mime": "v5.3.8",
         "symfony/polyfill-ctype": "v1.23.0",
         "symfony/polyfill-iconv": "v1.23.0",
@@ -54,12 +54,12 @@
         "symfony/process": "v4.4.30",
         "symfony/psr-http-message-bridge": "v2.1.1",
         "symfony/routing": "v4.4.30",
-        "symfony/serializer": "v4.4.31",
+        "symfony/serializer": "v4.4.33",
         "symfony/service-contracts": "v2.4.0",
         "symfony/translation": "v4.4.32",
         "symfony/translation-contracts": "v2.4.0",
-        "symfony/validator": "v4.4.31",
-        "symfony/var-dumper": "v5.3.8",
+        "symfony/validator": "v4.4.33",
+        "symfony/var-dumper": "v5.3.10",
         "symfony/yaml": "v4.4.29",
         "twig/twig": "v2.14.7",
         "typo3/phar-stream-wrapper": "v3.1.7"
diff --git a/composer/Metapackage/PinnedDevDependencies/composer.json b/composer/Metapackage/PinnedDevDependencies/composer.json
index 1f0d0884e60b..671dc07e5393 100644
--- a/composer/Metapackage/PinnedDevDependencies/composer.json
+++ b/composer/Metapackage/PinnedDevDependencies/composer.json
@@ -10,8 +10,8 @@
         "drupal/core": "9.3.x-dev",
         "behat/mink": "v1.9.0",
         "behat/mink-selenium2-driver": "v1.5.0",
-        "composer/ca-bundle": "1.2.11",
-        "composer/composer": "2.1.9",
+        "composer/ca-bundle": "1.3.1",
+        "composer/composer": "2.1.10",
         "composer/metadata-minifier": "1.0.0",
         "composer/spdx-licenses": "1.5.5",
         "composer/xdebug-handler": "2.0.2",
@@ -57,8 +57,8 @@
         "symfony/dom-crawler": "v4.4.30",
         "symfony/filesystem": "v4.4.27",
         "symfony/finder": "v4.4.30",
-        "symfony/lock": "v4.4.27",
-        "symfony/phpunit-bridge": "v5.3.8",
+        "symfony/lock": "v4.4.33",
+        "symfony/phpunit-bridge": "v5.3.10",
         "theseer/tokenizer": "1.2.1",
         "webmozart/assert": "1.10.0"
     }
-- 
GitLab


From 12658bad82782ab2ddebe5d405cdcd3ec0fa9118 Mon Sep 17 00:00:00 2001
From: Alex Pott <alex.a.pott@googlemail.com>
Date: Mon, 1 Nov 2021 10:17:29 +0000
Subject: [PATCH 10/69] Issue #3245820 by paul121, dww, eojthebrave: Remove
 references to removed node publish actions

(cherry picked from commit 055054d592f935c150494d36285e1e3bed009d74)
---
 core/lib/Drupal/Core/Annotation/Action.php           | 3 +--
 core/lib/Drupal/Core/Field/FieldUpdateActionBase.php | 2 +-
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/core/lib/Drupal/Core/Annotation/Action.php b/core/lib/Drupal/Core/Annotation/Action.php
index 9f215fc87a4d..3a5009cf5965 100644
--- a/core/lib/Drupal/Core/Annotation/Action.php
+++ b/core/lib/Drupal/Core/Annotation/Action.php
@@ -9,11 +9,10 @@
  *
  * Plugin Namespace: Plugin\Action
  *
- * For a working example, see \Drupal\node\Plugin\Action\UnpublishNode
- *
  * @see \Drupal\Core\Action\ActionInterface
  * @see \Drupal\Core\Action\ActionManager
  * @see \Drupal\Core\Action\ActionBase
+ * @see \Drupal\Core\Action\Plugin\Action\UnpublishAction
  * @see plugin_api
  *
  * @Annotation
diff --git a/core/lib/Drupal/Core/Field/FieldUpdateActionBase.php b/core/lib/Drupal/Core/Field/FieldUpdateActionBase.php
index 03b5255b3701..b00872f9bec2 100644
--- a/core/lib/Drupal/Core/Field/FieldUpdateActionBase.php
+++ b/core/lib/Drupal/Core/Field/FieldUpdateActionBase.php
@@ -23,7 +23,7 @@
  * }
  * @endcode
  *
- * @see \Drupal\node\Plugin\Action\PublishNode
+ * @see \Drupal\Core\Action\Plugin\Action\PublishAction
  */
 abstract class FieldUpdateActionBase extends ActionBase {
 
-- 
GitLab


From 32c93c8b9878096261da619b5e0ceb8a56cb4223 Mon Sep 17 00:00:00 2001
From: Alex Pott <alex.a.pott@googlemail.com>
Date: Wed, 3 Nov 2021 10:42:55 +0000
Subject: [PATCH 11/69] Issue #3163663 by mpp, chrisolof, alexpott, quietone:
 Too many open files issue with migrating multiple files using "download"
 process plugin

(cherry picked from commit 76b866462ddd7abe83975e4318eb938ef8a061e7)
---
 .../src/Plugin/migrate/process/Download.php        |  4 ++++
 .../tests/src/Kernel/process/DownloadTest.php      | 14 ++++++++++----
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/core/modules/migrate/src/Plugin/migrate/process/Download.php b/core/modules/migrate/src/Plugin/migrate/process/Download.php
index af7ca4070b17..aedb204d410a 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/Download.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/Download.php
@@ -155,6 +155,10 @@ public function transform($value, MigrateExecutableInterface $migrate_executable
       throw new MigrateException("{$e->getMessage()} ($source)");
     }
 
+    if (is_resource($destination_stream)) {
+      fclose($destination_stream);
+    }
+
     return $final_destination;
   }
 
diff --git a/core/modules/migrate/tests/src/Kernel/process/DownloadTest.php b/core/modules/migrate/tests/src/Kernel/process/DownloadTest.php
index c6d63221a39c..a13f1f54ffa4 100644
--- a/core/modules/migrate/tests/src/Kernel/process/DownloadTest.php
+++ b/core/modules/migrate/tests/src/Kernel/process/DownloadTest.php
@@ -34,7 +34,7 @@ protected function setUp(): void {
    * Tests a download that overwrites an existing local file.
    */
   public function testOverwritingDownload() {
-    // Create a pre-existing file at the destination, to test overwrite behavior.
+    // Create a pre-existing file at the destination.
     $destination_uri = $this->createUri('existing_file.txt');
 
     // Test destructive download.
@@ -47,7 +47,7 @@ public function testOverwritingDownload() {
    * Tests a download that renames the downloaded file if there's a collision.
    */
   public function testNonDestructiveDownload() {
-    // Create a pre-existing file at the destination, to test overwrite behavior.
+    // Create a pre-existing file at the destination.
     $destination_uri = $this->createUri('another_existing_file.txt');
 
     // Test non-destructive download.
@@ -60,7 +60,7 @@ public function testNonDestructiveDownload() {
    * Tests that an exception is thrown if the destination URI is not writable.
    */
   public function testWriteProtectedDestination() {
-    // Create a pre-existing file at the destination, to test overwrite behavior.
+    // Create a pre-existing file at the destination.
     $destination_uri = $this->createUri('not-writable.txt');
 
     // Make the destination non-writable.
@@ -115,7 +115,13 @@ protected function doTransform($destination_uri, $configuration = []) {
       'http://drupal.org/favicon.ico',
       $destination_uri,
     ];
-    return $plugin->transform($value, $executable, $row, 'foo');
+
+    // Assert that number of stream resources in use is the same before and
+    // after the download.
+    $initial_count = count(get_resources('stream'));
+    $return = $plugin->transform($value, $executable, $row, 'foo');
+    $this->assertCount($initial_count, get_resources('stream'));
+    return $return;
   }
 
 }
-- 
GitLab


From c4debe701242cbc8237469b4b042ac4d5a307023 Mon Sep 17 00:00:00 2001
From: Alex Pott <alex.a.pott@googlemail.com>
Date: Wed, 3 Nov 2021 10:51:09 +0000
Subject: [PATCH 12/69] Issue #3087332 by quietone, huzooka, amateescu,
 danflanagan8: Deprecate the 'd6_url_alias_language' migration process plugin

(cherry picked from commit 04f2578519405e5bcf91fe281985402331c8b386)
---
 .../migrate/process/d6/UrlAliasLanguage.php   | 16 +++++++++++-
 .../d6/UrlAliasLanguageDeprecatedTest.php     | 25 +++++++++++++++++++
 2 files changed, 40 insertions(+), 1 deletion(-)
 create mode 100644 core/modules/path/tests/src/Unit/migrate/process/d6/UrlAliasLanguageDeprecatedTest.php

diff --git a/core/modules/path/src/Plugin/migrate/process/d6/UrlAliasLanguage.php b/core/modules/path/src/Plugin/migrate/process/d6/UrlAliasLanguage.php
index b5d527b1877f..774bcf12b57f 100644
--- a/core/modules/path/src/Plugin/migrate/process/d6/UrlAliasLanguage.php
+++ b/core/modules/path/src/Plugin/migrate/process/d6/UrlAliasLanguage.php
@@ -11,11 +11,25 @@
  * Url alias language code process.
  *
  * @MigrateProcessPlugin(
- *   id = "d6_url_alias_language"
+ *   id = "d6_url_alias_language",
+ *   no_ui = TRUE
  * )
+ *
+ * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. No direct
+ *   replacement is provided.
+ *
+ * @see https://www.drupal.org/node/3219051
  */
 class UrlAliasLanguage extends ProcessPluginBase {
 
+  /**
+   * {@inheritdoc}
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition) {
+    @trigger_error(__CLASS__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. No direct replacement is provided. See https://www.drupal.org/node/3219051', E_USER_DEPRECATED);
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+  }
+
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/path/tests/src/Unit/migrate/process/d6/UrlAliasLanguageDeprecatedTest.php b/core/modules/path/tests/src/Unit/migrate/process/d6/UrlAliasLanguageDeprecatedTest.php
new file mode 100644
index 000000000000..46461af3c8c8
--- /dev/null
+++ b/core/modules/path/tests/src/Unit/migrate/process/d6/UrlAliasLanguageDeprecatedTest.php
@@ -0,0 +1,25 @@
+<?php
+
+namespace Drupal\Tests\path\Unit\migrate\process\d6;
+
+use Drupal\path\Plugin\migrate\process\d6\UrlAliasLanguage;
+use Drupal\Tests\migrate\Unit\process\MigrateProcessTestCase;
+
+/**
+ * Tests error message from deprecated UrlAliasLanguage process plugin.
+ *
+ * @group path
+ * @group legacy
+ * @coversDefaultClass \Drupal\path\Plugin\migrate\process\d6\UrlAliasLanguage
+ */
+class UrlAliasLanguageDeprecatedTest extends MigrateProcessTestCase {
+
+  /**
+   * Tests legacy UrlAliasLanguage process plugin.
+   */
+  public function testUrlAliasLanguageDeprecation() {
+    $this->expectDeprecation("Drupal\path\Plugin\migrate\process\d6\UrlAliasLanguage is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. No direct replacement is provided. See https://www.drupal.org/node/3219051");
+    new UrlAliasLanguage([], 'test', []);
+  }
+
+}
-- 
GitLab


From 707121c9cc46266be7d922b5ff096f07cb9461ee Mon Sep 17 00:00:00 2001
From: bnjmnm <bnjmnm@2369194.no-reply.drupal.org>
Date: Thu, 4 Nov 2021 22:37:55 +0000
Subject: [PATCH 13/69] Issue #3239509 by hooroomoo, larowlan, bnjmnm, lauriii:
 Add String.includes polyfill to support IE11 and Opera Mini

(cherry picked from commit 0949c10ccb7d2dd706b1667ccc506c87c95c006d)
---
 core/core.libraries.yml                    |  5 +++++
 core/misc/polyfills/string.includes.es6.js | 26 ++++++++++++++++++++++
 core/misc/polyfills/string.includes.js     | 22 ++++++++++++++++++
 core/modules/block/block.libraries.yml     |  1 +
 core/modules/block/js/block.admin.es6.js   |  2 +-
 core/modules/block/js/block.admin.js       |  2 +-
 6 files changed, 56 insertions(+), 2 deletions(-)
 create mode 100644 core/misc/polyfills/string.includes.es6.js
 create mode 100644 core/misc/polyfills/string.includes.js

diff --git a/core/core.libraries.yml b/core/core.libraries.yml
index 1023741e42e5..f4449213627e 100644
--- a/core/core.libraries.yml
+++ b/core/core.libraries.yml
@@ -381,6 +381,11 @@ drupal.states:
     - core/once
     - core/jquery.once.bc
 
+drupal.string.includes:
+  version: VERSION
+  js:
+    misc/polyfills/string.includes.js: { weight: -20 }
+
 drupal.tabbingmanager:
   version: VERSION
   js:
diff --git a/core/misc/polyfills/string.includes.es6.js b/core/misc/polyfills/string.includes.es6.js
new file mode 100644
index 000000000000..25eebd8d126c
--- /dev/null
+++ b/core/misc/polyfills/string.includes.es6.js
@@ -0,0 +1,26 @@
+/**
+ * @file
+ * Provides a polyfill for String.includes().
+ *
+ * This is needed for Internet Explorer 11 and Opera Mini.
+ *
+ * This has been copied from MDN Web Docs code samples. Code samples in the MDN
+ * Web Docs are licensed under CC0.
+ *
+ * @see https://web.archive.org/web/20210916035058/https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes
+ * @see https://developer.mozilla.org/en-US/docs/MDN/About#Code_samples_and_snippets
+ */
+/* eslint-disable strict, lines-around-directive, no-extend-native */
+if (!String.prototype.includes) {
+  String.prototype.includes = function (search, start) {
+    'use strict';
+
+    if (search instanceof RegExp) {
+      throw TypeError('first argument must not be a RegExp');
+    }
+    if (start === undefined) {
+      start = 0;
+    }
+    return this.indexOf(search, start) !== -1;
+  };
+}
diff --git a/core/misc/polyfills/string.includes.js b/core/misc/polyfills/string.includes.js
new file mode 100644
index 000000000000..1a1ea7cd04cb
--- /dev/null
+++ b/core/misc/polyfills/string.includes.js
@@ -0,0 +1,22 @@
+/**
+* DO NOT EDIT THIS FILE.
+* See the following change record for more information,
+* https://www.drupal.org/node/2815083
+* @preserve
+**/
+
+if (!String.prototype.includes) {
+  String.prototype.includes = function (search, start) {
+    'use strict';
+
+    if (search instanceof RegExp) {
+      throw TypeError('first argument must not be a RegExp');
+    }
+
+    if (start === undefined) {
+      start = 0;
+    }
+
+    return this.indexOf(search, start) !== -1;
+  };
+}
\ No newline at end of file
diff --git a/core/modules/block/block.libraries.yml b/core/modules/block/block.libraries.yml
index 80df74c1c726..b67d33870834 100644
--- a/core/modules/block/block.libraries.yml
+++ b/core/modules/block/block.libraries.yml
@@ -21,5 +21,6 @@ drupal.block.admin:
     - core/drupal.announce
     - core/drupal.debounce
     - core/drupal.dialog.ajax
+    - core/drupal.string.includes
     - core/once
     - core/jquery.once.bc
diff --git a/core/modules/block/js/block.admin.es6.js b/core/modules/block/js/block.admin.es6.js
index d475348b741c..360fcf41ff02 100644
--- a/core/modules/block/js/block.admin.es6.js
+++ b/core/modules/block/js/block.admin.es6.js
@@ -46,7 +46,7 @@
         function toggleBlockEntry(index, label) {
           const $label = $(label);
           const $row = $label.parent().parent();
-          const textMatch = $label.text().toLowerCase().indexOf(query) !== -1;
+          const textMatch = $label.text().toLowerCase().includes(query);
           $row.toggle(textMatch);
         }
 
diff --git a/core/modules/block/js/block.admin.js b/core/modules/block/js/block.admin.js
index 28cdf71769fa..7469333c70ab 100644
--- a/core/modules/block/js/block.admin.js
+++ b/core/modules/block/js/block.admin.js
@@ -18,7 +18,7 @@
         function toggleBlockEntry(index, label) {
           var $label = $(label);
           var $row = $label.parent().parent();
-          var textMatch = $label.text().toLowerCase().indexOf(query) !== -1;
+          var textMatch = $label.text().toLowerCase().includes(query);
           $row.toggle(textMatch);
         }
 
-- 
GitLab


From 8182c97eb8b18f714018e573d2c7f3a0c5169daa Mon Sep 17 00:00:00 2001
From: Alex Pott <alex.a.pott@googlemail.com>
Date: Sun, 7 Nov 2021 14:33:50 +0000
Subject: [PATCH 14/69] Issue #3212891 by vaish, brentgees@gmail.com,
 srilakshmier, mikelutz, quietone, alexpott: Incorrect type declaration in
 docblock for class property

(cherry picked from commit 2aee2c17b3cf58db295f73b5c356be7011a54092)
---
 core/modules/migrate/src/Plugin/Migration.php          | 2 +-
 core/modules/migrate/src/Plugin/migrate/id_map/Sql.php | 6 +++---
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/core/modules/migrate/src/Plugin/Migration.php b/core/modules/migrate/src/Plugin/Migration.php
index 66ab6642cec6..021edfd6ba72 100644
--- a/core/modules/migrate/src/Plugin/Migration.php
+++ b/core/modules/migrate/src/Plugin/Migration.php
@@ -96,7 +96,7 @@ class Migration extends PluginBase implements MigrationInterface, RequirementsIn
    *
    * Used to initialize $idMapPlugin.
    *
-   * @var string
+   * @var array
    */
   protected $idMap = [];
 
diff --git a/core/modules/migrate/src/Plugin/migrate/id_map/Sql.php b/core/modules/migrate/src/Plugin/migrate/id_map/Sql.php
index 6ecc8ed4ea65..d0f31ffa0b4e 100644
--- a/core/modules/migrate/src/Plugin/migrate/id_map/Sql.php
+++ b/core/modules/migrate/src/Plugin/migrate/id_map/Sql.php
@@ -111,9 +111,9 @@ class Sql extends PluginBase implements MigrateIdMapInterface, ContainerFactoryP
   /**
    * The result.
    *
-   * @var null
+   * @var \Drupal\Core\Database\StatementInterface
    */
-  protected $result = NULL;
+  protected $result;
 
   /**
    * The source identifiers.
@@ -132,7 +132,7 @@ class Sql extends PluginBase implements MigrateIdMapInterface, ContainerFactoryP
   /**
    * The current row.
    *
-   * @var null
+   * @var array|false|null
    */
   protected $currentRow = NULL;
 
-- 
GitLab


From 3eccfbd7c9a5584ba301f24809815d1c911963e1 Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Mon, 8 Nov 2021 14:13:59 +0000
Subject: [PATCH 15/69] Issue #3028837 by quietone, joachim, alexpott:
 views_hooks group has nothing in it

(cherry picked from commit 9f6cef72ee3776a2b038ecd7e820616638a04fb7)
---
 core/modules/views/views.api.php | 12 ------------
 1 file changed, 12 deletions(-)

diff --git a/core/modules/views/views.api.php b/core/modules/views/views.api.php
index 215c8ec09475..18a607073326 100644
--- a/core/modules/views/views.api.php
+++ b/core/modules/views/views.api.php
@@ -69,14 +69,6 @@
  * @}
  */
 
-/**
- * @defgroup views_hooks Views hooks
- * @{
- * Hooks that allow other modules to implement the Views API.
- * @ingroup views_overview
- * @}
- */
-
 /**
  * @addtogroup hooks
  * @{
@@ -1249,7 +1241,3 @@ function hook_views_plugins_sort_alter(array &$plugins) {
 /**
  * @} End of "addtogroup hooks".
  */
-
-/**
- * @}
- */
-- 
GitLab


From 19bf95b76ac0498520bad59771bdfcef9b07157e Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Mon, 8 Nov 2021 14:15:41 +0000
Subject: [PATCH 16/69] Issue #3248156 by alexpott, longwave: Update
 dependencies prior to 9.3.0 beta

(cherry picked from commit ea01173e6bce792496cfc05bcf4d2c40da938e73)
---
 composer.lock                                 | 38 +++++++++----------
 .../Metapackage/CoreRecommended/composer.json |  2 +-
 .../PinnedDevDependencies/composer.json       |  2 +-
 3 files changed, 21 insertions(+), 21 deletions(-)

diff --git a/composer.lock b/composer.lock
index a79552dad19b..eb889b008286 100644
--- a/composer.lock
+++ b/composer.lock
@@ -3636,32 +3636,32 @@
         },
         {
             "name": "symfony/psr-http-message-bridge",
-            "version": "v2.1.1",
+            "version": "v2.1.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/psr-http-message-bridge.git",
-                "reference": "c9012994c4b4fb23e7c57dd86b763a417a04feba"
+                "reference": "22b37c8a3f6b5d94e9cdbd88e1270d96e2f97b34"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/c9012994c4b4fb23e7c57dd86b763a417a04feba",
-                "reference": "c9012994c4b4fb23e7c57dd86b763a417a04feba",
+                "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/22b37c8a3f6b5d94e9cdbd88e1270d96e2f97b34",
+                "reference": "22b37c8a3f6b5d94e9cdbd88e1270d96e2f97b34",
                 "shasum": ""
             },
             "require": {
                 "php": ">=7.1",
                 "psr/http-message": "^1.0",
-                "symfony/http-foundation": "^4.4 || ^5.0"
+                "symfony/http-foundation": "^4.4 || ^5.0 || ^6.0"
             },
             "require-dev": {
                 "nyholm/psr7": "^1.1",
                 "psr/log": "^1.1 || ^2 || ^3",
-                "symfony/browser-kit": "^4.4 || ^5.0",
-                "symfony/config": "^4.4 || ^5.0",
-                "symfony/event-dispatcher": "^4.4 || ^5.0",
-                "symfony/framework-bundle": "^4.4 || ^5.0",
-                "symfony/http-kernel": "^4.4 || ^5.0",
-                "symfony/phpunit-bridge": "^4.4.19 || ^5.2"
+                "symfony/browser-kit": "^4.4 || ^5.0 || ^6.0",
+                "symfony/config": "^4.4 || ^5.0 || ^6.0",
+                "symfony/event-dispatcher": "^4.4 || ^5.0 || ^6.0",
+                "symfony/framework-bundle": "^4.4 || ^5.0 || ^6.0",
+                "symfony/http-kernel": "^4.4 || ^5.0 || ^6.0",
+                "symfony/phpunit-bridge": "^5.4@dev || ^6.0"
             },
             "suggest": {
                 "nyholm/psr7": "For a super lightweight PSR-7/17 implementation"
@@ -3704,7 +3704,7 @@
             ],
             "support": {
                 "issues": "https://github.com/symfony/psr-http-message-bridge/issues",
-                "source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.1.1"
+                "source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.1.2"
             },
             "funding": [
                 {
@@ -3720,7 +3720,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-07-27T17:25:39+00:00"
+            "time": "2021-11-05T13:13:39+00:00"
         },
         {
             "name": "symfony/routing",
@@ -4761,16 +4761,16 @@
         },
         {
             "name": "composer/composer",
-            "version": "2.1.10",
+            "version": "2.1.11",
             "source": {
                 "type": "git",
                 "url": "https://github.com/composer/composer.git",
-                "reference": "ea5f64d1a15c66942979b804c9fb3686be852ca0"
+                "reference": "ddc81bb4718747cc93330ccf832e6be8a6c1d015"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/composer/zipball/ea5f64d1a15c66942979b804c9fb3686be852ca0",
-                "reference": "ea5f64d1a15c66942979b804c9fb3686be852ca0",
+                "url": "https://api.github.com/repos/composer/composer/zipball/ddc81bb4718747cc93330ccf832e6be8a6c1d015",
+                "reference": "ddc81bb4718747cc93330ccf832e6be8a6c1d015",
                 "shasum": ""
             },
             "require": {
@@ -4839,7 +4839,7 @@
             "support": {
                 "irc": "ircs://irc.libera.chat:6697/composer",
                 "issues": "https://github.com/composer/composer/issues",
-                "source": "https://github.com/composer/composer/tree/2.1.10"
+                "source": "https://github.com/composer/composer/tree/2.1.11"
             },
             "funding": [
                 {
@@ -4855,7 +4855,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-10-29T20:34:57+00:00"
+            "time": "2021-11-02T11:10:26+00:00"
         },
         {
             "name": "composer/metadata-minifier",
diff --git a/composer/Metapackage/CoreRecommended/composer.json b/composer/Metapackage/CoreRecommended/composer.json
index 4a1ebead515c..adbc407e71a1 100644
--- a/composer/Metapackage/CoreRecommended/composer.json
+++ b/composer/Metapackage/CoreRecommended/composer.json
@@ -52,7 +52,7 @@
         "symfony/polyfill-mbstring": "v1.23.1",
         "symfony/polyfill-php80": "v1.23.1",
         "symfony/process": "v4.4.30",
-        "symfony/psr-http-message-bridge": "v2.1.1",
+        "symfony/psr-http-message-bridge": "v2.1.2",
         "symfony/routing": "v4.4.30",
         "symfony/serializer": "v4.4.33",
         "symfony/service-contracts": "v2.4.0",
diff --git a/composer/Metapackage/PinnedDevDependencies/composer.json b/composer/Metapackage/PinnedDevDependencies/composer.json
index 671dc07e5393..195e0fefa0d9 100644
--- a/composer/Metapackage/PinnedDevDependencies/composer.json
+++ b/composer/Metapackage/PinnedDevDependencies/composer.json
@@ -11,7 +11,7 @@
         "behat/mink": "v1.9.0",
         "behat/mink-selenium2-driver": "v1.5.0",
         "composer/ca-bundle": "1.3.1",
-        "composer/composer": "2.1.10",
+        "composer/composer": "2.1.11",
         "composer/metadata-minifier": "1.0.0",
         "composer/spdx-licenses": "1.5.5",
         "composer/xdebug-handler": "2.0.2",
-- 
GitLab


From 0c936b4f7d49245e771eace8f62a08cf58c96cc1 Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Mon, 8 Nov 2021 14:22:26 +0000
Subject: [PATCH 17/69] Issue #3214921 by daffie, xurizaemon, alexpott,
 mondrake, andypost, Taran2L, Mixologic, longwave: Add a requirements warning
 in Drupal 9 when PostgreSQL is used and the pg_trgm extension is not created

(cherry picked from commit 84e8b971c8d65ac93a3848802a1535d45b1585d3)
---
 .../Core/Database/Driver/pgsql/Schema.php       | 17 +++++++++++++++++
 core/modules/system/system.install              | 15 +++++++++++++++
 .../KernelTests/Core/Database/SchemaTest.php    | 15 +++++++++++++++
 3 files changed, 47 insertions(+)

diff --git a/core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php b/core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php
index 106add49efb0..afb7f604fbde 100644
--- a/core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php
+++ b/core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php
@@ -1060,6 +1060,23 @@ protected function hashBase64($data) {
     return strtr($hash, ['+' => '_', '/' => '_', '=' => '']);
   }
 
+  /**
+   * Determines whether the PostgreSQL extension is created.
+   *
+   * @param string $name
+   *   The name of the extension.
+   *
+   * @return bool
+   *   Return TRUE when the extension is created, FALSE otherwise.
+   *
+   * @internal
+   */
+  public function extensionExists($name): bool {
+    return (bool) $this->connection->query('SELECT installed_version FROM pg_available_extensions WHERE name = :name', [
+      ':name' => $name,
+    ])->fetchField();
+  }
+
 }
 
 /**
diff --git a/core/modules/system/system.install b/core/modules/system/system.install
index e19a96853d93..6eae0bb05095 100644
--- a/core/modules/system/system.install
+++ b/core/modules/system/system.install
@@ -472,6 +472,21 @@ function system_requirements($phase) {
     }
   }
 
+  // Test with PostgreSQL databases for the status of the pg_trgm extension.
+  if ($phase === 'runtime') {
+    if (Database::isActiveConnection() && (Database::getConnection()->driver() == 'pgsql') && !Database::getConnection()->schema()->extensionExists('pg_trgm')) {
+      $requirements['pgsql_extension_pg_trgm'] = [
+        'severity' => REQUIREMENT_WARNING,
+        'title' => t('PostgreSQL pg_trgm extension'),
+        'value' => t('Not created'),
+        'description' => t('The <a href=":pg_trgm">pg_trgm</a> PostgreSQL extension is not present. The extension will be required by Drupal 10 to improve performance when using PostgreSQL. See <a href=":requirements">Drupal database server requirements</a> for more information.', [
+          ':pg_trgm' => 'https://www.postgresql.org/docs/current/pgtrgm.html',
+          ':requirements' => 'https://www.drupal.org/docs/system-requirements/database-server-requirements',
+        ]),
+      ];
+    }
+  }
+
   // Test PHP memory_limit
   $memory_limit = ini_get('memory_limit');
   $requirements['php_memory_limit'] = [
diff --git a/core/tests/Drupal/KernelTests/Core/Database/SchemaTest.php b/core/tests/Drupal/KernelTests/Core/Database/SchemaTest.php
index da8578bc7386..039e916a33ab 100644
--- a/core/tests/Drupal/KernelTests/Core/Database/SchemaTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Database/SchemaTest.php
@@ -1347,4 +1347,19 @@ public function testDefaultAfterAlter() {
     $this->assertSame('default value', $result->column7);
   }
 
+  /**
+   * @covers \Drupal\Core\Database\Driver\pgsql\Schema::extensionExists
+   */
+  public function testPgsqlExtensionExists() {
+    if ($this->connection->databaseType() !== 'pgsql') {
+      $this->markTestSkipped("This test only runs for PostgreSQL.");
+    }
+
+    // Test the method for a non existing extension.
+    $this->assertFalse($this->schema->extensionExists('non_existing_extension'));
+
+    // Test the method for an existing extension.
+    $this->assertTrue($this->schema->extensionExists('pg_trgm'));
+  }
+
 }
-- 
GitLab


From 66047e701924a557b1a8741a1509f1aa6c9e830c Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Mon, 8 Nov 2021 14:27:18 +0000
Subject: [PATCH 18/69] Issue #3231683 by daffie, longwave: [Symfony 6] A
 number of methods of the class
 Drupal\Core\TypedData\Validation\ExecutionContext are considered internal and
 Drupal should not override them

(cherry picked from commit b4a6273ebd009d2a271b49cb64833f5b8cbe2fd3)
---
 .../Core/TypedData/TypedDataManager.php       |   2 +-
 .../Validation/ConstraintViolationBuilder.php |  68 +++++++
 .../TypedData/Validation/ExecutionContext.php | 181 ++++++++++++++++++
 .../Validation/ExecutionContextFactory.php    |  13 ++
 .../Core/Validation/DrupalTranslator.php      |  10 +
 .../Core/Validation/TranslatorInterface.php   |   4 +
 .../RecursiveContextualValidatorTest.php      |   6 +-
 .../Core/TypedData/ValidationLegacyTest.php   |  51 +++++
 8 files changed, 331 insertions(+), 4 deletions(-)
 create mode 100644 core/tests/Drupal/Tests/Core/TypedData/ValidationLegacyTest.php

diff --git a/core/lib/Drupal/Core/TypedData/TypedDataManager.php b/core/lib/Drupal/Core/TypedData/TypedDataManager.php
index aab5850ada17..60270222e4ae 100644
--- a/core/lib/Drupal/Core/TypedData/TypedDataManager.php
+++ b/core/lib/Drupal/Core/TypedData/TypedDataManager.php
@@ -8,11 +8,11 @@
 use Drupal\Core\DependencyInjection\DependencySerializationTrait;
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Plugin\DefaultPluginManager;
-use Drupal\Core\TypedData\Validation\ExecutionContextFactory;
 use Drupal\Core\TypedData\Validation\RecursiveValidator;
 use Drupal\Core\Validation\ConstraintManager;
 use Drupal\Core\Validation\ConstraintValidatorFactory;
 use Drupal\Core\Validation\DrupalTranslator;
+use Symfony\Component\Validator\Context\ExecutionContextFactory;
 use Symfony\Component\Validator\Validator\ValidatorInterface;
 
 /**
diff --git a/core/lib/Drupal/Core/TypedData/Validation/ConstraintViolationBuilder.php b/core/lib/Drupal/Core/TypedData/Validation/ConstraintViolationBuilder.php
index a3e62d0b9757..9d5cdff7fe67 100644
--- a/core/lib/Drupal/Core/TypedData/Validation/ConstraintViolationBuilder.php
+++ b/core/lib/Drupal/Core/TypedData/Validation/ConstraintViolationBuilder.php
@@ -17,6 +17,10 @@
  *
  * We do not use the builder provided by Symfony as it is marked internal.
  *
+ * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use the class
+ *   \Symfony\Component\Validator\Violation\ConstraintViolationBuilder instead.
+ *
+ * @see https://www.drupal.org/node/3238432
  */
 class ConstraintViolationBuilder implements ConstraintViolationBuilderInterface {
 
@@ -121,6 +125,7 @@ class ConstraintViolationBuilder implements ConstraintViolationBuilderInterface
    */
   public function __construct(ConstraintViolationList $violations, Constraint $constraint, $message, array $parameters, $root, $propertyPath, $invalidValue, TranslatorInterface $translator, $translationDomain = null)
     {
+      @trigger_error(__CLASS__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use the class \Symfony\Component\Validator\Violation\ConstraintViolationBuilder instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
       $this->violations = $violations;
       $this->message = $message;
       $this->parameters = $parameters;
@@ -134,9 +139,16 @@ public function __construct(ConstraintViolationList $violations, Constraint $con
 
     /**
      * {@inheritdoc}
+     *
+     * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use
+     *   \Symfony\Component\Validator\Violation\ConstraintViolationBuilder::atPath()
+     *   instead.
+     *
+     * @see https://www.drupal.org/node/3238432
      */
     public function atPath($path)
     {
+      @trigger_error(__METHOD__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use \Symfony\Component\Validator\Violation\ConstraintViolationBuilder::atPath() instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
       $this->propertyPath = PropertyPath::append($this->propertyPath, $path);
 
       return $this;
@@ -144,9 +156,16 @@ public function atPath($path)
 
     /**
      * {@inheritdoc}
+     *
+     * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use
+     *   \Symfony\Component\Validator\Violation\ConstraintViolationBuilder::setParameter()
+     *   instead.
+     *
+     * @see https://www.drupal.org/node/3238432
      */
     public function setParameter($key, $value)
     {
+      @trigger_error(__METHOD__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use \Symfony\Component\Validator\Violation\ConstraintViolationBuilder::setParameter() instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
       $this->parameters[$key] = $value;
 
       return $this;
@@ -154,9 +173,16 @@ public function setParameter($key, $value)
 
     /**
      * {@inheritdoc}
+     *
+     * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use
+     *   \Symfony\Component\Validator\Violation\ConstraintViolationBuilder::setParameters()
+     *   instead.
+     *
+     * @see https://www.drupal.org/node/3238432
      */
     public function setParameters(array $parameters)
     {
+      @trigger_error(__METHOD__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use \Symfony\Component\Validator\Violation\ConstraintViolationBuilder::setParameters() instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
       $this->parameters = $parameters;
 
       return $this;
@@ -164,9 +190,16 @@ public function setParameters(array $parameters)
 
     /**
      * {@inheritdoc}
+     *
+     * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use
+     *   \Symfony\Component\Validator\Violation\ConstraintViolationBuilder::setTranslationDomain()
+     *   instead.
+     *
+     * @see https://www.drupal.org/node/3238432
      */
     public function setTranslationDomain($translationDomain)
     {
+      @trigger_error(__METHOD__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use \Symfony\Component\Validator\Violation\ConstraintViolationBuilder::setTranslationDomain() instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
       $this->translationDomain = $translationDomain;
 
       return $this;
@@ -174,9 +207,16 @@ public function setTranslationDomain($translationDomain)
 
     /**
      * {@inheritdoc}
+     *
+     * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use
+     *   \Symfony\Component\Validator\Violation\ConstraintViolationBuilder::setInvalidValue()
+     *   instead.
+     *
+     * @see https://www.drupal.org/node/3238432
      */
     public function setInvalidValue($invalidValue)
     {
+      @trigger_error(__METHOD__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use \Symfony\Component\Validator\Violation\ConstraintViolationBuilder::setInvalidValue() instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
       $this->invalidValue = $invalidValue;
 
       return $this;
@@ -184,9 +224,16 @@ public function setInvalidValue($invalidValue)
 
     /**
      * {@inheritdoc}
+     *
+     * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use
+     *   \Symfony\Component\Validator\Violation\ConstraintViolationBuilder::setPlural()
+     *   instead.
+     *
+     * @see https://www.drupal.org/node/3238432
      */
     public function setPlural($number)
     {
+      @trigger_error(__METHOD__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use \Symfony\Component\Validator\Violation\ConstraintViolationBuilder::setPlural() instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
       $this->plural = $number;
 
       return $this;
@@ -194,9 +241,16 @@ public function setPlural($number)
 
     /**
      * {@inheritdoc}
+     *
+     * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use
+     *   \Symfony\Component\Validator\Violation\ConstraintViolationBuilder::setCode()
+     *   instead.
+     *
+     * @see https://www.drupal.org/node/3238432
      */
     public function setCode($code)
     {
+      @trigger_error(__METHOD__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use \Symfony\Component\Validator\Violation\ConstraintViolationBuilder::setCode() instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
       $this->code = $code;
 
       return $this;
@@ -204,9 +258,16 @@ public function setCode($code)
 
     /**
      * {@inheritdoc}
+     *
+     * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use
+     *   \Symfony\Component\Validator\Violation\ConstraintViolationBuilder::setCause()
+     *   instead.
+     *
+     * @see https://www.drupal.org/node/3238432
      */
     public function setCause($cause)
     {
+      @trigger_error(__METHOD__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use \Symfony\Component\Validator\Violation\ConstraintViolationBuilder::setCause() instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
       $this->cause = $cause;
 
       return $this;
@@ -214,9 +275,16 @@ public function setCause($cause)
 
     /**
      * {@inheritdoc}
+     *
+     * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use
+     *   \Symfony\Component\Validator\Violation\ConstraintViolationBuilder::addViolation()
+     *   instead.
+     *
+     * @see https://www.drupal.org/node/3238432
      */
     public function addViolation()
     {
+      @trigger_error(__METHOD__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use \Symfony\Component\Validator\Violation\ConstraintViolationBuilder::addViolation() instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
       if (null === $this->plural) {
         $translatedMessage = $this->translator->trans(
           $this->message,
diff --git a/core/lib/Drupal/Core/TypedData/Validation/ExecutionContext.php b/core/lib/Drupal/Core/TypedData/Validation/ExecutionContext.php
index 1d409b72998f..34eda6a71ecb 100644
--- a/core/lib/Drupal/Core/TypedData/Validation/ExecutionContext.php
+++ b/core/lib/Drupal/Core/TypedData/Validation/ExecutionContext.php
@@ -18,6 +18,11 @@
  * We do not use the context provided by Symfony as it is marked internal, so
  * this class is pretty much the same, but has some code style changes as well
  * as exceptions for methods we don't support.
+ *
+ * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use the class
+ *   \Symfony\Component\Validator\Context\ExecutionContext instead.
+ *
+ * @see https://www.drupal.org/node/3238432
  */
 class ExecutionContext implements ExecutionContextInterface {
 
@@ -122,6 +127,7 @@ class ExecutionContext implements ExecutionContextInterface {
    *    Should not be used in user code.
    */
   public function __construct(ValidatorInterface $validator, $root, TranslatorInterface $translator, $translationDomain = NULL) {
+    @trigger_error(__CLASS__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use the class \Symfony\Component\Validator\Context\ExecutionContext instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
     $this->validator = $validator;
     $this->root = $root;
     $this->translator = $translator;
@@ -131,8 +137,15 @@ public function __construct(ValidatorInterface $validator, $root, TranslatorInte
 
   /**
    * {@inheritdoc}
+   *
+   * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use
+   *   \Symfony\Component\Validator\Context\ExecutionContext::setNode()
+   *   instead.
+   *
+   * @see https://www.drupal.org/node/3238432
    */
   public function setNode($value, $object, MetadataInterface $metadata = NULL, $propertyPath) {
+    @trigger_error(__METHOD__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use \Symfony\Component\Validator\Context\ExecutionContext::setNode() instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
     $this->value = $value;
     $this->data = $object;
     $this->metadata = $metadata;
@@ -141,22 +154,43 @@ public function setNode($value, $object, MetadataInterface $metadata = NULL, $pr
 
   /**
    * {@inheritdoc}
+   *
+   * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use
+   *   \Symfony\Component\Validator\Context\ExecutionContext::setGroup()
+   *   instead.
+   *
+   * @see https://www.drupal.org/node/3238432
    */
   public function setGroup($group) {
+    @trigger_error(__METHOD__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use \Symfony\Component\Validator\Context\ExecutionContext::setGroup() instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
     $this->group = $group;
   }
 
   /**
    * {@inheritdoc}
+   *
+   * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use
+   *   \Symfony\Component\Validator\Context\ExecutionContext::setConstraint()
+   *   instead.
+   *
+   * @see https://www.drupal.org/node/3238432
    */
   public function setConstraint(Constraint $constraint) {
+    @trigger_error(__METHOD__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use \Symfony\Component\Validator\Context\ExecutionContext::setConstraint() instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
     $this->constraint = $constraint;
   }
 
   /**
    * {@inheritdoc}
+   *
+   * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use
+   *   \Symfony\Component\Validator\Context\ExecutionContext::addViolation()
+   *   instead.
+   *
+   * @see https://www.drupal.org/node/3238432
    */
   public function addViolation($message, array $parameters = [], $invalidValue = NULL, $plural = NULL, $code = NULL) {
+    @trigger_error(__METHOD__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use \Symfony\Component\Validator\Context\ExecutionContext::addViolation() instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
     // The parameters $invalidValue and following are ignored by the new
     // API, as they are not present in the new interface anymore.
     // You should use buildViolation() instead.
@@ -169,148 +203,295 @@ public function addViolation($message, array $parameters = [], $invalidValue = N
 
   /**
    * {@inheritdoc}
+   *
+   * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use
+   *   \Symfony\Component\Validator\Context\ExecutionContext::buildViolation()
+   *   instead.
+   *
+   * @see https://www.drupal.org/node/3238432
    */
   public function buildViolation($message, array $parameters = []): ConstraintViolationBuilderInterface {
+    @trigger_error(__METHOD__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use \Symfony\Component\Validator\Context\ExecutionContext::buildViolation() instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
     return new ConstraintViolationBuilder($this->violations, $this->constraint, $message, $parameters, $this->root, $this->propertyPath, $this->value, $this->translator, $this->translationDomain);
   }
 
   /**
    * {@inheritdoc}
+   *
+   * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use
+   *   \Symfony\Component\Validator\Context\ExecutionContext::getViolations()
+   *   instead.
+   *
+   * @see https://www.drupal.org/node/3238432
    */
   public function getViolations() {
+    @trigger_error(__METHOD__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use \Symfony\Component\Validator\Context\ExecutionContext::getViolations() instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
     return $this->violations;
   }
 
   /**
    * {@inheritdoc}
+   *
+   * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use
+   *   \Symfony\Component\Validator\Context\ExecutionContext::getValidator()
+   *   instead.
+   *
+   * @see https://www.drupal.org/node/3238432
    */
   public function getValidator() {
+    @trigger_error(__METHOD__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use \Symfony\Component\Validator\Context\ExecutionContext::getValidator() instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
     return $this->validator;
   }
 
   /**
    * {@inheritdoc}
+   *
+   * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use
+   *   \Symfony\Component\Validator\Context\ExecutionContext::getRoot()
+   *   instead.
+   *
+   * @see https://www.drupal.org/node/3238432
    */
   public function getRoot() {
+    @trigger_error(__METHOD__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use \Symfony\Component\Validator\Context\ExecutionContext::getRoot() instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
     return $this->root;
   }
 
   /**
    * {@inheritdoc}
+   *
+   * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use
+   *   \Symfony\Component\Validator\Context\ExecutionContext::getValue()
+   *   instead.
+   *
+   * @see https://www.drupal.org/node/3238432
    */
   public function getValue() {
+    @trigger_error(__METHOD__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use \Symfony\Component\Validator\Context\ExecutionContext::getValue() instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
     return $this->value;
   }
 
   /**
    * {@inheritdoc}
+   *
+   * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use
+   *   \Symfony\Component\Validator\Context\ExecutionContext::getObject()
+   *   instead.
+   *
+   * @see https://www.drupal.org/node/3238432
    */
   public function getObject(): ?object {
+    @trigger_error(__METHOD__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use \Symfony\Component\Validator\Context\ExecutionContext::getObject() instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
     return $this->data;
   }
 
   /**
    * {@inheritdoc}
+   *
+   * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use
+   *   \Symfony\Component\Validator\Context\ExecutionContext::getMetadata()
+   *   instead.
+   *
+   * @see https://www.drupal.org/node/3238432
    */
   public function getMetadata(): ?MetadataInterface {
+    @trigger_error(__METHOD__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use \Symfony\Component\Validator\Context\ExecutionContext::getMetadata() instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
     return $this->metadata;
   }
 
   /**
    * {@inheritdoc}
+   *
+   * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use
+   *   \Symfony\Component\Validator\Context\ExecutionContext::getGroup()
+   *   instead.
+   *
+   * @see https://www.drupal.org/node/3238432
    */
   public function getGroup(): ?string {
+    @trigger_error(__METHOD__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use \Symfony\Component\Validator\Context\ExecutionContext::getGroup() instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
     return Constraint::DEFAULT_GROUP;
   }
 
   /**
    * {@inheritdoc}
+   *
+   * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use
+   *   \Symfony\Component\Validator\Context\ExecutionContext::getClassName()
+   *   instead.
+   *
+   * @see https://www.drupal.org/node/3238432
    */
   public function getClassName(): ?string {
+    @trigger_error(__METHOD__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use \Symfony\Component\Validator\Context\ExecutionContext::getClassName() instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
     return get_class($this->data);
   }
 
   /**
    * {@inheritdoc}
+   *
+   * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use
+   *   \Symfony\Component\Validator\Context\ExecutionContext::getPropertyName()
+   *   instead.
+   *
+   * @see https://www.drupal.org/node/3238432
    */
   public function getPropertyName(): ?string {
+    @trigger_error(__METHOD__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use \Symfony\Component\Validator\Context\ExecutionContext::getPropertyName() instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
     return $this->data->getName();
   }
 
   /**
    * {@inheritdoc}
+   *
+   * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use
+   *   \Symfony\Component\Validator\Context\ExecutionContext::getPropertyPath()
+   *   instead.
+   *
+   * @see https://www.drupal.org/node/3238432
    */
   public function getPropertyPath($sub_path = ''): string {
+    @trigger_error(__METHOD__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use \Symfony\Component\Validator\Context\ExecutionContext::getPropertyPath() instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
     return PropertyPath::append($this->propertyPath, $sub_path);
   }
 
   /**
    * {@inheritdoc}
+   *
+   * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use
+   *   \Symfony\Component\Validator\Context\ExecutionContext::addViolationAt()
+   *   instead.
+   *
+   * @see https://www.drupal.org/node/3238432
    */
   public function addViolationAt($subPath, $message, array $parameters = [], $invalidValue = NULL, $plural = NULL, $code = NULL) {
+    @trigger_error(__METHOD__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use \Symfony\Component\Validator\Context\ExecutionContext::addViolationAt() instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
     throw new \LogicException('Legacy validator API is unsupported.');
   }
 
   /**
    * {@inheritdoc}
+   *
+   * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use
+   *   \Symfony\Component\Validator\Context\ExecutionContext::validate()
+   *   instead.
+   *
+   * @see https://www.drupal.org/node/3238432
    */
   public function validate($value, $subPath = '', $groups = NULL, $traverse = FALSE, $deep = FALSE) {
+    @trigger_error(__METHOD__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use \Symfony\Component\Validator\Context\ExecutionContext::validate() instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
     throw new \LogicException('Legacy validator API is unsupported.');
   }
 
   /**
    * {@inheritdoc}
+   *
+   * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use
+   *   \Symfony\Component\Validator\Context\ExecutionContext::markConstraintAsValidated()
+   *   instead.
+   *
+   * @see https://www.drupal.org/node/3238432
    */
   public function markConstraintAsValidated($cache_key, $constraint_hash) {
+    @trigger_error(__METHOD__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use \Symfony\Component\Validator\Context\ExecutionContext::markConstraintAsValidated() instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
     $this->validatedConstraints[$cache_key . ':' . $constraint_hash] = TRUE;
   }
 
   /**
    * {@inheritdoc}
+   *
+   * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use
+   *   \Symfony\Component\Validator\Context\ExecutionContext::isConstraintValidated()
+   *   instead.
+   *
+   * @see https://www.drupal.org/node/3238432
    */
   public function isConstraintValidated($cache_key, $constraint_hash) {
+    @trigger_error(__METHOD__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use \Symfony\Component\Validator\Context\ExecutionContext::isConstraintValidated() instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
     return isset($this->validatedConstraints[$cache_key . ':' . $constraint_hash]);
   }
 
   /**
    * {@inheritdoc}
+   *
+   * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use
+   *   \Symfony\Component\Validator\Context\ExecutionContext::validateValue()
+   *   instead.
+   *
+   * @see https://www.drupal.org/node/3238432
    */
   public function validateValue($value, $constraints, $subPath = '', $groups = NULL) {
+    @trigger_error(__METHOD__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use \Symfony\Component\Validator\Context\ExecutionContext::validateValue() instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
     throw new \LogicException('Legacy validator API is unsupported.');
   }
 
   /**
    * {@inheritdoc}
+   *
+   * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use
+   *   \Symfony\Component\Validator\Context\ExecutionContext::markGroupAsValidated()
+   *   instead.
+   *
+   * @see https://www.drupal.org/node/3238432
    */
   public function markGroupAsValidated($cache_key, $group_hash) {
+    @trigger_error(__METHOD__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use \Symfony\Component\Validator\Context\ExecutionContext::markGroupAsValidated() instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
     $this->validatedObjects[$cache_key][$group_hash] = TRUE;
   }
 
   /**
    * {@inheritdoc}
+   *
+   * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use
+   *   \Symfony\Component\Validator\Context\ExecutionContext::isGroupValidated()
+   *   instead.
+   *
+   * @see https://www.drupal.org/node/3238432
    */
   public function isGroupValidated($cache_key, $group_hash) {
+    @trigger_error(__METHOD__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use \Symfony\Component\Validator\Context\ExecutionContext::isGroupValidated() instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
     return isset($this->validatedObjects[$cache_key][$group_hash]);
   }
 
   /**
    * {@inheritdoc}
+   *
+   * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use
+   *   \Symfony\Component\Validator\Context\ExecutionContext::markObjectAsInitialized()
+   *   instead.
+   *
+   * @see https://www.drupal.org/node/3238432
    */
   public function markObjectAsInitialized($cache_key) {
+    @trigger_error(__METHOD__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use \Symfony\Component\Validator\Context\ExecutionContext::markObjectAsInitialized() instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
     // Not supported, so nothing todo.
   }
 
   /**
    * {@inheritdoc}
+   *
+   * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use
+   *   \Symfony\Component\Validator\Context\ExecutionContext::isObjectInitialized()
+   *   instead.
+   *
+   * @see https://www.drupal.org/node/3238432
    */
   public function isObjectInitialized($cache_key) {
+    @trigger_error(__METHOD__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use \Symfony\Component\Validator\Context\ExecutionContext::isObjectInitialized() instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
     // Not supported, so nothing todo.
   }
 
   /**
    * {@inheritdoc}
+   *
+   * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use
+   *   \Symfony\Component\Validator\Context\ExecutionContext::getMetadataFactory()
+   *   instead.
+   *
+   * @see https://www.drupal.org/node/3238432
    */
   public function getMetadataFactory() {
+    @trigger_error(__METHOD__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use \Symfony\Component\Validator\Context\ExecutionContext::getMetadataFactory() instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
     throw new \LogicException('Legacy validator API is unsupported.');
   }
 
diff --git a/core/lib/Drupal/Core/TypedData/Validation/ExecutionContextFactory.php b/core/lib/Drupal/Core/TypedData/Validation/ExecutionContextFactory.php
index 5c6a8264cd9c..32cb2abb5bfc 100644
--- a/core/lib/Drupal/Core/TypedData/Validation/ExecutionContextFactory.php
+++ b/core/lib/Drupal/Core/TypedData/Validation/ExecutionContextFactory.php
@@ -11,6 +11,11 @@
  * Defines an execution factory for the Typed Data validator.
  *
  * We do not use the factory provided by Symfony as it is marked internal.
+ *
+ * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use the class
+ *   \Symfony\Component\Validator\Context\ExecutionContextFactory instead.
+ *
+ * @see https://www.drupal.org/node/3238432
  */
 class ExecutionContextFactory implements ExecutionContextFactoryInterface {
 
@@ -33,14 +38,22 @@ class ExecutionContextFactory implements ExecutionContextFactoryInterface {
    *   (optional) The translation domain.
    */
   public function __construct(TranslatorInterface $translator, $translationDomain = NULL) {
+    @trigger_error(__CLASS__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use the class \Symfony\Component\Validator\Context\ExecutionContextFactory instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
     $this->translator = $translator;
     $this->translationDomain = $translationDomain;
   }
 
   /**
    * {@inheritdoc}
+   *
+   * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use
+   *   \Symfony\Component\Validator\Context\ExecutionContextFactory::createContext()
+   *   instead.
+   *
+   * @see https://www.drupal.org/node/3238432
    */
   public function createContext(ValidatorInterface $validator, $root): ExecutionContextInterface {
+    @trigger_error(__METHOD__ . ' is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use \Symfony\Component\Validator\Context\ExecutionContextFactory::createContext() instead. See https://www.drupal.org/node/3238432', E_USER_DEPRECATED);
     return new ExecutionContext(
       $validator,
       $root,
diff --git a/core/lib/Drupal/Core/Validation/DrupalTranslator.php b/core/lib/Drupal/Core/Validation/DrupalTranslator.php
index 4025feda37fd..3003c1737c5b 100644
--- a/core/lib/Drupal/Core/Validation/DrupalTranslator.php
+++ b/core/lib/Drupal/Core/Validation/DrupalTranslator.php
@@ -4,6 +4,7 @@
 
 use Drupal\Component\Render\MarkupInterface;
 use Drupal\Core\StringTranslation\TranslatableMarkup;
+use Symfony\Contracts\Translation\TranslatorInterface;
 
 /**
  * Translates strings using Drupal's translation system.
@@ -28,6 +29,15 @@ public function trans($id, array $parameters = [], $domain = NULL, $locale = NUL
     if ($id instanceof TranslatableMarkup) {
       return $id;
     }
+
+    // Symfony violation messages may separate singular and plural versions
+    // with "|".
+    $ids = explode('|', $id);
+    if (count($ids) > 1) {
+      $number = $parameters['%count%'] ?? 1;
+      return \Drupal::translation()->formatPlural($number, $ids[0], $ids[1], $this->processParameters($parameters), $this->getOptions($domain, $locale));
+    }
+
     return new TranslatableMarkup($id, $this->processParameters($parameters), $this->getOptions($domain, $locale));
   }
 
diff --git a/core/lib/Drupal/Core/Validation/TranslatorInterface.php b/core/lib/Drupal/Core/Validation/TranslatorInterface.php
index e59e766ffdb6..bc679ca2191c 100644
--- a/core/lib/Drupal/Core/Validation/TranslatorInterface.php
+++ b/core/lib/Drupal/Core/Validation/TranslatorInterface.php
@@ -9,6 +9,10 @@
  * to indicate that the Drupal code is actually independent from the
  * Symfony translation component.
  *
+ * @deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use the
+ *   interface \Symfony\Contracts\Translation\TranslatorInterface instead.
+ *
+ * @see https://www.drupal.org/node/3238432
  * @see https://github.com/symfony/symfony/pull/6189
  * @see https://github.com/symfony/symfony/issues/15714
  */
diff --git a/core/tests/Drupal/Tests/Core/TypedData/RecursiveContextualValidatorTest.php b/core/tests/Drupal/Tests/Core/TypedData/RecursiveContextualValidatorTest.php
index 25703e7b734c..7153be5a57e0 100644
--- a/core/tests/Drupal/Tests/Core/TypedData/RecursiveContextualValidatorTest.php
+++ b/core/tests/Drupal/Tests/Core/TypedData/RecursiveContextualValidatorTest.php
@@ -12,11 +12,11 @@
 use Drupal\Core\TypedData\DataDefinition;
 use Drupal\Core\TypedData\MapDataDefinition;
 use Drupal\Core\TypedData\TypedDataManager;
-use Drupal\Core\TypedData\Validation\ExecutionContextFactory;
 use Drupal\Core\TypedData\Validation\RecursiveValidator;
 use Drupal\Core\Validation\ConstraintManager;
 use Drupal\Tests\UnitTestCase;
 use Symfony\Component\Validator\ConstraintValidatorFactory;
+use Symfony\Component\Validator\Context\ExecutionContextFactory;
 use Symfony\Component\Validator\Context\ExecutionContextInterface;
 
 /**
@@ -49,7 +49,7 @@ class RecursiveContextualValidatorTest extends UnitTestCase {
   /**
    * The execution context factory.
    *
-   * @var \Drupal\Core\TypedData\Validation\ExecutionContextFactory
+   * @var \Symfony\Component\Validator\Context\ExecutionContextFactory
    */
   protected $contextFactory;
 
@@ -80,7 +80,7 @@ protected function setUp(): void {
     $container->set('typed_data_manager', $this->typedDataManager);
     \Drupal::setContainer($container);
 
-    $translator = $this->createMock('Drupal\Core\Validation\TranslatorInterface');
+    $translator = $this->createMock('Symfony\Contracts\Translation\TranslatorInterface');
     $translator->expects($this->any())
       ->method('trans')
       ->willReturnCallback(function ($id) {
diff --git a/core/tests/Drupal/Tests/Core/TypedData/ValidationLegacyTest.php b/core/tests/Drupal/Tests/Core/TypedData/ValidationLegacyTest.php
new file mode 100644
index 000000000000..90f626aa0ada
--- /dev/null
+++ b/core/tests/Drupal/Tests/Core/TypedData/ValidationLegacyTest.php
@@ -0,0 +1,51 @@
+<?php
+
+namespace Drupal\Tests\Core\TypedData;
+
+use Drupal\Core\TypedData\Validation\ConstraintViolationBuilder;
+use Drupal\Core\TypedData\Validation\ExecutionContext;
+use Drupal\Core\TypedData\Validation\ExecutionContextFactory;
+use Drupal\Core\Validation\TranslatorInterface;
+use Drupal\Tests\UnitTestCase;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintViolationList;
+use Symfony\Component\Validator\Validator\ValidatorInterface;
+
+/**
+ * Test the deprecation of TypedData classes.
+ * @group typedData
+ * @group legacy
+ */
+class ValidationLegacyTest extends UnitTestCase {
+
+  /**
+   * @covers Drupal\Core\TypedData\Validation\ConstraintViolationBuilder::__construct
+   */
+  public function testConstraintViolationBuilderDeprecated() {
+    $this->expectDeprecation("Drupal\Core\TypedData\Validation\ConstraintViolationBuilder is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use the class \Symfony\Component\Validator\Violation\ConstraintViolationBuilder instead. See https://www.drupal.org/node/3238432");
+    $constraint_violation_list = $this->prophesize(ConstraintViolationList::class)->reveal();
+    $constraint = $this->prophesize(Constraint::class)->reveal();
+    $translator = $this->prophesize(TranslatorInterface::class)->reveal();
+    $this->assertInstanceOf(ConstraintViolationBuilder::class, new ConstraintViolationBuilder($constraint_violation_list, $constraint, '', [], '', '', '', $translator));
+  }
+
+  /**
+   * @covers Drupal\Core\TypedData\Validation\ExecutionContext::__construct
+   */
+  public function testExecutionContextDeprecated() {
+    $this->expectDeprecation("Drupal\Core\TypedData\Validation\ExecutionContext is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use the class \Symfony\Component\Validator\Context\ExecutionContext instead. See https://www.drupal.org/node/3238432");
+    $validator = $this->prophesize(ValidatorInterface::class)->reveal();
+    $translator = $this->prophesize(TranslatorInterface::class)->reveal();
+    $this->assertInstanceOf(ExecutionContext::class, new ExecutionContext($validator, '', $translator));
+  }
+
+  /**
+   * @covers Drupal\Core\TypedData\Validation\ExecutionContextFactory::__construct
+   */
+  public function testExecutionContextFactoryDeprecated() {
+    $this->expectDeprecation("Drupal\Core\TypedData\Validation\ExecutionContextFactory is deprecated in drupal:9.3.0 and is removed from drupal:10.0.0. Use the class \Symfony\Component\Validator\Context\ExecutionContextFactory instead. See https://www.drupal.org/node/3238432");
+    $translator = $this->prophesize(TranslatorInterface::class)->reveal();
+    $this->assertInstanceOf(ExecutionContextFactory::class, new ExecutionContextFactory($translator));
+  }
+
+}
-- 
GitLab


From 3ab612994270ac304afe47f8721acb28a666dfd4 Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Mon, 8 Nov 2021 14:30:37 +0000
Subject: [PATCH 19/69] Issue #3158289 by alexpott, barboza: Deprecate
 hook_init for theme engines

---
 core/lib/Drupal/Core/Theme/ThemeInitialization.php     |  7 +++++++
 .../tests/src/Functional/Theme/EngineNyanCatTest.php   |  7 +++++++
 core/themes/engines/twig/twig.engine                   | 10 ----------
 3 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/core/lib/Drupal/Core/Theme/ThemeInitialization.php b/core/lib/Drupal/Core/Theme/ThemeInitialization.php
index 34b95e955c77..c81be077f54c 100644
--- a/core/lib/Drupal/Core/Theme/ThemeInitialization.php
+++ b/core/lib/Drupal/Core/Theme/ThemeInitialization.php
@@ -140,11 +140,18 @@ public function loadActiveTheme(ActiveTheme $active_theme) {
       include_once $this->root . '/' . $active_theme->getOwner();
 
       if (function_exists($theme_engine . '_init')) {
+        @trigger_error('THEME_ENGINE_init() is deprecated in drupal:9.3.0 and removed in drupal:10.0.0. There is no replacement. See https://www.drupal.org/node/3246978', E_USER_DEPRECATED);
         foreach ($active_theme->getBaseThemeExtensions() as $base) {
           call_user_func($theme_engine . '_init', $base);
         }
         call_user_func($theme_engine . '_init', $active_theme->getExtension());
       }
+      else {
+        foreach ($active_theme->getBaseThemeExtensions() as $base) {
+          $base->load();
+        }
+        $active_theme->getExtension()->load();
+      }
     }
     else {
       // include non-engine theme files
diff --git a/core/modules/system/tests/src/Functional/Theme/EngineNyanCatTest.php b/core/modules/system/tests/src/Functional/Theme/EngineNyanCatTest.php
index 7a227da1ddb2..0b8269a2cd31 100644
--- a/core/modules/system/tests/src/Functional/Theme/EngineNyanCatTest.php
+++ b/core/modules/system/tests/src/Functional/Theme/EngineNyanCatTest.php
@@ -30,8 +30,15 @@ protected function setUp(): void {
 
   /**
    * Ensures a theme's template is overridable based on the 'template' filename.
+   *
+   * @group legacy
+   *
+   * @todo https://www.drupal.org/project/drupal/issues/3246981 Remove
+   *   nyan_cat_init() and the legacy group and expected deprecation from this
+   *   test.
    */
   public function testTemplateOverride() {
+    $this->expectDeprecation('THEME_ENGINE_init() is deprecated in drupal:9.3.0 and removed in drupal:10.0.0. There is no replacement. See https://www.drupal.org/node/3246978');
     $this->config('system.theme')
       ->set('default', 'test_theme_nyan_cat_engine')
       ->save();
diff --git a/core/themes/engines/twig/twig.engine b/core/themes/engines/twig/twig.engine
index 759fafcfb701..bcc984a02e24 100644
--- a/core/themes/engines/twig/twig.engine
+++ b/core/themes/engines/twig/twig.engine
@@ -26,16 +26,6 @@ function twig_extension() {
   return '.html.twig';
 }
 
-/**
- * Includes .theme file from themes.
- *
- * @param \Drupal\Core\Extension\Extension $theme
- *   The theme extension object.
- */
-function twig_init(Extension $theme) {
-  $theme->load();
-}
-
 /**
  * Implements hook_render_template().
  *
-- 
GitLab


From c0dca8d0302420f489d221b76beb2715796d790c Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Mon, 8 Nov 2021 14:36:24 +0000
Subject: [PATCH 20/69] Issue #3247901 by danflanagan8, longwave:
 ContentTranslationUITestBase should not rely on Classy

(cherry picked from commit 84ef68cf9954147789e61d1622a1609b19c27628)
---
 .../tests/src/Functional/BlockContentTranslationUITest.php      | 2 +-
 .../tests/src/Functional/ContentTestTranslationUITest.php       | 2 +-
 .../tests/src/Functional/ContentTranslationUITestBase.php       | 2 +-
 .../media/tests/src/Functional/MediaTranslationUITest.php       | 2 +-
 .../tests/src/Functional/MenuLinkContentTranslationUITest.php   | 2 +-
 .../shortcut/tests/src/Functional/ShortcutTranslationUITest.php | 2 +-
 .../taxonomy/tests/src/Functional/TermTranslationUITest.php     | 2 +-
 .../modules/user/tests/src/Functional/UserTranslationUITest.php | 2 +-
 8 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/core/modules/block_content/tests/src/Functional/BlockContentTranslationUITest.php b/core/modules/block_content/tests/src/Functional/BlockContentTranslationUITest.php
index 3d93ed33e854..3f3fea1c2689 100644
--- a/core/modules/block_content/tests/src/Functional/BlockContentTranslationUITest.php
+++ b/core/modules/block_content/tests/src/Functional/BlockContentTranslationUITest.php
@@ -28,7 +28,7 @@ class BlockContentTranslationUITest extends ContentTranslationUITestBase {
   /**
    * {@inheritdoc}
    */
-  protected $defaultTheme = 'classy';
+  protected $defaultTheme = 'stark';
 
   /**
    * {@inheritdoc}
diff --git a/core/modules/content_translation/tests/src/Functional/ContentTestTranslationUITest.php b/core/modules/content_translation/tests/src/Functional/ContentTestTranslationUITest.php
index 3f644b9a8e5e..ba0cbf67071d 100644
--- a/core/modules/content_translation/tests/src/Functional/ContentTestTranslationUITest.php
+++ b/core/modules/content_translation/tests/src/Functional/ContentTestTranslationUITest.php
@@ -39,7 +39,7 @@ class ContentTestTranslationUITest extends ContentTranslationUITestBase {
   /**
    * {@inheritdoc}
    */
-  protected $defaultTheme = 'classy';
+  protected $defaultTheme = 'stark';
 
   /**
    * {@inheritdoc}
diff --git a/core/modules/content_translation/tests/src/Functional/ContentTranslationUITestBase.php b/core/modules/content_translation/tests/src/Functional/ContentTranslationUITestBase.php
index 776bd654ccdf..e853e595df9d 100644
--- a/core/modules/content_translation/tests/src/Functional/ContentTranslationUITestBase.php
+++ b/core/modules/content_translation/tests/src/Functional/ContentTranslationUITestBase.php
@@ -359,7 +359,7 @@ protected function doTestAuthoringInfo() {
     ];
     $this->drupalGet($entity->toUrl('edit-form'));
     $this->submitForm($edit, $this->getFormSubmitAction($entity, $langcode));
-    $this->assertSession()->elementExists('xpath', '//div[contains(@class, "error")]//ul');
+    $this->assertSession()->elementExists('xpath', '//div[@aria-label="Error message"]//ul');
     $metadata = $this->manager->getTranslationMetadata($entity->getTranslation($langcode));
     $this->assertEquals($values[$langcode]['uid'], $metadata->getAuthor()->id(), 'Translation author correctly kept.');
     $this->assertEquals($values[$langcode]['created'], $metadata->getCreatedTime(), 'Translation date correctly kept.');
diff --git a/core/modules/media/tests/src/Functional/MediaTranslationUITest.php b/core/modules/media/tests/src/Functional/MediaTranslationUITest.php
index 6b1d6442db0e..20d3cd8c6e2c 100644
--- a/core/modules/media/tests/src/Functional/MediaTranslationUITest.php
+++ b/core/modules/media/tests/src/Functional/MediaTranslationUITest.php
@@ -17,7 +17,7 @@ class MediaTranslationUITest extends ContentTranslationUITestBase {
   /**
    * {@inheritdoc}
    */
-  protected $defaultTheme = 'classy';
+  protected $defaultTheme = 'stark';
 
   /**
    * {@inheritdoc}
diff --git a/core/modules/menu_link_content/tests/src/Functional/MenuLinkContentTranslationUITest.php b/core/modules/menu_link_content/tests/src/Functional/MenuLinkContentTranslationUITest.php
index a7ddeed92dd1..8dc2b7865ed7 100644
--- a/core/modules/menu_link_content/tests/src/Functional/MenuLinkContentTranslationUITest.php
+++ b/core/modules/menu_link_content/tests/src/Functional/MenuLinkContentTranslationUITest.php
@@ -32,7 +32,7 @@ class MenuLinkContentTranslationUITest extends ContentTranslationUITestBase {
   /**
    * {@inheritdoc}
    */
-  protected $defaultTheme = 'classy';
+  protected $defaultTheme = 'stark';
 
   /**
    * {@inheritdoc}
diff --git a/core/modules/shortcut/tests/src/Functional/ShortcutTranslationUITest.php b/core/modules/shortcut/tests/src/Functional/ShortcutTranslationUITest.php
index 0d0a80d6a53c..4b059fd0dbd4 100644
--- a/core/modules/shortcut/tests/src/Functional/ShortcutTranslationUITest.php
+++ b/core/modules/shortcut/tests/src/Functional/ShortcutTranslationUITest.php
@@ -35,7 +35,7 @@ class ShortcutTranslationUITest extends ContentTranslationUITestBase {
   /**
    * {@inheritdoc}
    */
-  protected $defaultTheme = 'classy';
+  protected $defaultTheme = 'stark';
 
   /**
    * {@inheritdoc}
diff --git a/core/modules/taxonomy/tests/src/Functional/TermTranslationUITest.php b/core/modules/taxonomy/tests/src/Functional/TermTranslationUITest.php
index 049da47d1483..179b4adea871 100644
--- a/core/modules/taxonomy/tests/src/Functional/TermTranslationUITest.php
+++ b/core/modules/taxonomy/tests/src/Functional/TermTranslationUITest.php
@@ -41,7 +41,7 @@ class TermTranslationUITest extends ContentTranslationUITestBase {
   /**
    * {@inheritdoc}
    */
-  protected $defaultTheme = 'classy';
+  protected $defaultTheme = 'stark';
 
   protected function setUp(): void {
     $this->entityTypeId = 'taxonomy_term';
diff --git a/core/modules/user/tests/src/Functional/UserTranslationUITest.php b/core/modules/user/tests/src/Functional/UserTranslationUITest.php
index 7ba1a2b9ec01..9e7b2ea2489a 100644
--- a/core/modules/user/tests/src/Functional/UserTranslationUITest.php
+++ b/core/modules/user/tests/src/Functional/UserTranslationUITest.php
@@ -44,7 +44,7 @@ class UserTranslationUITest extends ContentTranslationUITestBase {
   /**
    * {@inheritdoc}
    */
-  protected $defaultTheme = 'classy';
+  protected $defaultTheme = 'stark';
 
   protected function setUp(): void {
     $this->entityTypeId = 'user';
-- 
GitLab


From d63941bc1af2e1a31debad1f202e46351eaa149d Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Mon, 8 Nov 2021 14:49:50 +0000
Subject: [PATCH 21/69] Issue #2975461 by quietone, Matroskeen, Lendude:
 Convert query string to array for d6 menu_link migration

(cherry picked from commit 55a804ce67ddf1296a0004303baf69512e3892c5)
---
 .../migrations/d6_menu_links.yml              |  4 +-
 .../Plugin/migrate/process/LinkOptions.php    | 48 +++++++++++++++++++
 .../Kernel/Migrate/d6/MigrateMenuLinkTest.php |  2 +-
 .../d6/MigrateMenuLinkTranslationTest.php     |  4 +-
 .../Kernel/Migrate/d7/MigrateMenuLinkTest.php |  9 +++-
 .../migrate_drupal/tests/fixtures/drupal7.php |  2 +-
 6 files changed, 63 insertions(+), 6 deletions(-)
 create mode 100644 core/modules/menu_link_content/src/Plugin/migrate/process/LinkOptions.php

diff --git a/core/modules/menu_link_content/migrations/d6_menu_links.yml b/core/modules/menu_link_content/migrations/d6_menu_links.yml
index 86dfb8057361..48faf0e28b11 100644
--- a/core/modules/menu_link_content/migrations/d6_menu_links.yml
+++ b/core/modules/menu_link_content/migrations/d6_menu_links.yml
@@ -27,7 +27,9 @@ process:
   'link/uri':
     plugin: link_uri
     source: link_path
-  'link/options': options
+  'link/options':
+    plugin: link_options
+    source: options
   route:
     plugin: route
     source:
diff --git a/core/modules/menu_link_content/src/Plugin/migrate/process/LinkOptions.php b/core/modules/menu_link_content/src/Plugin/migrate/process/LinkOptions.php
new file mode 100644
index 000000000000..af3e0998a994
--- /dev/null
+++ b/core/modules/menu_link_content/src/Plugin/migrate/process/LinkOptions.php
@@ -0,0 +1,48 @@
+<?php
+
+namespace Drupal\menu_link_content\Plugin\migrate\process;
+
+use Drupal\migrate\MigrateExecutableInterface;
+use Drupal\migrate\ProcessPluginBase;
+use Drupal\migrate\Row;
+
+/**
+ * Converts links options.
+ *
+ * Examples:
+ *
+ * @code
+ * process:
+ *   link/options:
+ *     plugin: link_options
+ *     source: options
+ * @endcode
+ *
+ * This will convert the query options of the link.
+ *
+ * @MigrateProcessPlugin(
+ *   id = "link_options",
+ *   handle_multiples = TRUE
+ * )
+ */
+class LinkOptions extends ProcessPluginBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
+    if (isset($value['query'])) {
+      // If the query parameters are stored as a string (as in D6), convert it
+      // into an array.
+      if (is_string($value['query'])) {
+        parse_str($value['query'], $old_query);
+      }
+      else {
+        $old_query = $value['query'];
+      }
+      $value['query'] = $old_query;
+    }
+    return $value;
+  }
+
+}
diff --git a/core/modules/menu_link_content/tests/src/Kernel/Migrate/d6/MigrateMenuLinkTest.php b/core/modules/menu_link_content/tests/src/Kernel/Migrate/d6/MigrateMenuLinkTest.php
index 5ffe4e6cc036..bc72be37598d 100644
--- a/core/modules/menu_link_content/tests/src/Kernel/Migrate/d6/MigrateMenuLinkTest.php
+++ b/core/modules/menu_link_content/tests/src/Kernel/Migrate/d6/MigrateMenuLinkTest.php
@@ -89,7 +89,7 @@ protected function assertEntity($id, $title, $menu, $description, $enabled, $exp
    */
   public function testMenuLinks() {
     $this->assertEntity('138', 'Test 1', 'secondary-links', 'Test menu link 1', TRUE, FALSE, ['attributes' => ['title' => 'Test menu link 1'], 'langcode' => 'en'], 'internal:/user/login', -50);
-    $this->assertEntity('139', 'Test 2', 'secondary-links', 'Test menu link 2', TRUE, TRUE, ['query' => 'foo=bar', 'attributes' => ['title' => 'Test menu link 2']], 'internal:/admin', -49);
+    $this->assertEntity('139', 'Test 2', 'secondary-links', 'Test menu link 2', TRUE, TRUE, ['query' => ['foo' => 'bar'], 'attributes' => ['title' => 'Test menu link 2']], 'internal:/admin', -49);
     $this->assertEntity('140', 'Drupal.org', 'secondary-links', NULL, TRUE, FALSE, ['attributes' => ['title' => '']], 'https://www.drupal.org', -50);
 
     // Assert that missing title attributes don't stop or break migration.
diff --git a/core/modules/menu_link_content/tests/src/Kernel/Migrate/d6/MigrateMenuLinkTranslationTest.php b/core/modules/menu_link_content/tests/src/Kernel/Migrate/d6/MigrateMenuLinkTranslationTest.php
index afdbd7d01215..cedcfbb8fdf5 100644
--- a/core/modules/menu_link_content/tests/src/Kernel/Migrate/d6/MigrateMenuLinkTranslationTest.php
+++ b/core/modules/menu_link_content/tests/src/Kernel/Migrate/d6/MigrateMenuLinkTranslationTest.php
@@ -53,7 +53,7 @@ public function testMenuLinks() {
     $this->assertSame('secondary-links', $menu_link->getMenuName());
     $this->assertTrue($menu_link->isEnabled());
     $this->assertTrue($menu_link->isExpanded());
-    $this->assertSame(['query' => 'foo=bar', 'attributes' => ['title' => 'Test menu link 2']], $menu_link->link->options);
+    $this->assertSame(['query' => ['foo' => 'bar'], 'attributes' => ['title' => 'Test menu link 2']], $menu_link->link->options);
     $this->assertSame('internal:/admin', $menu_link->link->uri);
     $this->assertSame(-49, $menu_link->getWeight());
 
@@ -64,7 +64,7 @@ public function testMenuLinks() {
     $this->assertSame('secondary-links', $menu_link->getMenuName());
     $this->assertTrue($menu_link->isEnabled());
     $this->assertTrue($menu_link->isExpanded());
-    $this->assertSame(['query' => 'foo=bar', 'attributes' => ['title' => 'Test menu link 2']], $menu_link->link->options);
+    $this->assertSame(['query' => ['foo' => 'bar'], 'attributes' => ['title' => 'Test menu link 2']], $menu_link->link->options);
     $this->assertSame('internal:/admin', $menu_link->link->uri);
     $this->assertSame(-49, $menu_link->getWeight());
 
diff --git a/core/modules/menu_link_content/tests/src/Kernel/Migrate/d7/MigrateMenuLinkTest.php b/core/modules/menu_link_content/tests/src/Kernel/Migrate/d7/MigrateMenuLinkTest.php
index dd3cac07dfcd..cd271f89d516 100644
--- a/core/modules/menu_link_content/tests/src/Kernel/Migrate/d7/MigrateMenuLinkTest.php
+++ b/core/modules/menu_link_content/tests/src/Kernel/Migrate/d7/MigrateMenuLinkTest.php
@@ -70,7 +70,14 @@ public function testMenuLinks() {
 
     $this->assertEntity(245, 'und', 'Home', 'main', NULL, TRUE, FALSE, [], 'internal:/', 0);
     $this->assertEntity(478, 'und', 'custom link test', 'admin', NULL, TRUE, FALSE, ['attributes' => ['title' => '']], 'internal:/admin/content', 0);
-    $this->assertEntity(479, 'und', 'node link test', 'tools', 'node 2', TRUE, FALSE, ['attributes' => ['title' => 'node 2']], 'entity:node/2', 3);
+    $this->assertEntity(479, 'und', 'node link test', 'tools', 'node 2', TRUE, FALSE, [
+      'attributes' => ['title' => 'node 2'],
+      'query' => [
+        'name' => 'ferret',
+        'color' => 'purple',
+      ],
+    ],
+      'entity:node/2', 3);
 
     $menu_link_tree_service = \Drupal::service('menu.link_tree');
     $parameters = new MenuTreeParameters();
diff --git a/core/modules/migrate_drupal/tests/fixtures/drupal7.php b/core/modules/migrate_drupal/tests/fixtures/drupal7.php
index b7f16908737d..26a5b50fdd52 100644
--- a/core/modules/migrate_drupal/tests/fixtures/drupal7.php
+++ b/core/modules/migrate_drupal/tests/fixtures/drupal7.php
@@ -34445,7 +34445,7 @@
   'link_path' => 'node/2',
   'router_path' => 'node/%',
   'link_title' => 'node link test',
-  'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:6:"node 2";}}',
+  'options' => 'a:2:{s:10:"attributes";a:1:{s:5:"title";s:6:"node 2";}s:5:"query";a:2:{s:4:"name";s:6:"ferret";s:5:"color";s:6:"purple";}}',
   'module' => 'menu',
   'hidden' => '0',
   'external' => '0',
-- 
GitLab


From bd80b71a6f0539a792b1f925b59d607564706fd1 Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Wed, 10 Nov 2021 15:06:19 +0000
Subject: [PATCH 22/69] Issue #3248600 by andypost, longwave: Update
 dependencies for 9.3.x

(cherry picked from commit 7f6603b627692f987cb27abd0a4caea0f3b677e8)
---
 composer.lock                                 | 26 +++++++++----------
 .../Metapackage/CoreRecommended/composer.json |  2 +-
 .../PinnedDevDependencies/composer.json       |  2 +-
 3 files changed, 15 insertions(+), 15 deletions(-)

diff --git a/composer.lock b/composer.lock
index eb889b008286..effef11be664 100644
--- a/composer.lock
+++ b/composer.lock
@@ -2143,21 +2143,21 @@
         },
         {
             "name": "symfony-cmf/routing",
-            "version": "2.3.3",
+            "version": "2.3.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony-cmf/Routing.git",
-                "reference": "3c97e7b7709b313cecfb76d691ad4cc22acbf3f5"
+                "reference": "bbcdf2f6301d740454ba9ebb8adaefd436c36a6b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony-cmf/Routing/zipball/3c97e7b7709b313cecfb76d691ad4cc22acbf3f5",
-                "reference": "3c97e7b7709b313cecfb76d691ad4cc22acbf3f5",
+                "url": "https://api.github.com/repos/symfony-cmf/Routing/zipball/bbcdf2f6301d740454ba9ebb8adaefd436c36a6b",
+                "reference": "bbcdf2f6301d740454ba9ebb8adaefd436c36a6b",
                 "shasum": ""
             },
             "require": {
                 "php": "^7.2 || ^8.0",
-                "psr/log": "^1.0",
+                "psr/log": "^1.0 || ^2.0 || ^3.0",
                 "symfony/http-kernel": "^4.4 || ^5.0",
                 "symfony/routing": "^4.4 || ^5.0"
             },
@@ -2200,9 +2200,9 @@
             ],
             "support": {
                 "issues": "https://github.com/symfony-cmf/Routing/issues",
-                "source": "https://github.com/symfony-cmf/Routing/tree/2.3.3"
+                "source": "https://github.com/symfony-cmf/Routing/tree/2.3.4"
             },
-            "time": "2020-10-06T10:15:37+00:00"
+            "time": "2021-11-08T16:33:10+00:00"
         },
         {
             "name": "symfony/console",
@@ -4761,16 +4761,16 @@
         },
         {
             "name": "composer/composer",
-            "version": "2.1.11",
+            "version": "2.1.12",
             "source": {
                 "type": "git",
                 "url": "https://github.com/composer/composer.git",
-                "reference": "ddc81bb4718747cc93330ccf832e6be8a6c1d015"
+                "reference": "6e3c2b122e0ec41a7e885fcaf19fa15e2e0819a0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/composer/zipball/ddc81bb4718747cc93330ccf832e6be8a6c1d015",
-                "reference": "ddc81bb4718747cc93330ccf832e6be8a6c1d015",
+                "url": "https://api.github.com/repos/composer/composer/zipball/6e3c2b122e0ec41a7e885fcaf19fa15e2e0819a0",
+                "reference": "6e3c2b122e0ec41a7e885fcaf19fa15e2e0819a0",
                 "shasum": ""
             },
             "require": {
@@ -4839,7 +4839,7 @@
             "support": {
                 "irc": "ircs://irc.libera.chat:6697/composer",
                 "issues": "https://github.com/composer/composer/issues",
-                "source": "https://github.com/composer/composer/tree/2.1.11"
+                "source": "https://github.com/composer/composer/tree/2.1.12"
             },
             "funding": [
                 {
@@ -4855,7 +4855,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-11-02T11:10:26+00:00"
+            "time": "2021-11-09T15:02:04+00:00"
         },
         {
             "name": "composer/metadata-minifier",
diff --git a/composer/Metapackage/CoreRecommended/composer.json b/composer/Metapackage/CoreRecommended/composer.json
index adbc407e71a1..0dc75a816089 100644
--- a/composer/Metapackage/CoreRecommended/composer.json
+++ b/composer/Metapackage/CoreRecommended/composer.json
@@ -33,7 +33,7 @@
         "psr/log": "1.1.4",
         "ralouphie/getallheaders": "3.0.3",
         "stack/builder": "v1.0.6",
-        "symfony-cmf/routing": "2.3.3",
+        "symfony-cmf/routing": "2.3.4",
         "symfony/console": "v4.4.33",
         "symfony/debug": "v4.4.31",
         "symfony/dependency-injection": "v4.4.33",
diff --git a/composer/Metapackage/PinnedDevDependencies/composer.json b/composer/Metapackage/PinnedDevDependencies/composer.json
index 195e0fefa0d9..26eb7a5f52c7 100644
--- a/composer/Metapackage/PinnedDevDependencies/composer.json
+++ b/composer/Metapackage/PinnedDevDependencies/composer.json
@@ -11,7 +11,7 @@
         "behat/mink": "v1.9.0",
         "behat/mink-selenium2-driver": "v1.5.0",
         "composer/ca-bundle": "1.3.1",
-        "composer/composer": "2.1.11",
+        "composer/composer": "2.1.12",
         "composer/metadata-minifier": "1.0.0",
         "composer/spdx-licenses": "1.5.5",
         "composer/xdebug-handler": "2.0.2",
-- 
GitLab


From 5082060fa33017ca52170ba940acfa33eb70218a Mon Sep 17 00:00:00 2001
From: Lauri Eskola <lauri.eskola@acquia.com>
Date: Wed, 10 Nov 2021 18:32:39 +0200
Subject: [PATCH 23/69] =?UTF-8?q?Issue=20#3244621=20by=20mherchel,=20rikki?=
 =?UTF-8?q?=5Fiki,=20catch,=20cathwaldron,=20rachel=5Fnorfolk,=20alexpott,?=
 =?UTF-8?q?=20G=C3=A1bor=20Hojtsy:=20Olivero:=20JS=20error=20when=20second?=
 =?UTF-8?q?ary=20tabs=20are=20present?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

(cherry picked from commit f8a197f52eaf81a6e6b8ff5de03b41d8b459a48a)
---
 .../Tests/Olivero/oliveroPrimaryTabsTest.js   | 50 +++++++++++++++++++
 core/themes/olivero/js/tabs.es6.js            | 20 ++++----
 core/themes/olivero/js/tabs.js                |  4 +-
 .../navigation/menu-local-tasks.html.twig     |  4 +-
 4 files changed, 65 insertions(+), 13 deletions(-)
 create mode 100644 core/tests/Drupal/Nightwatch/Tests/Olivero/oliveroPrimaryTabsTest.js

diff --git a/core/tests/Drupal/Nightwatch/Tests/Olivero/oliveroPrimaryTabsTest.js b/core/tests/Drupal/Nightwatch/Tests/Olivero/oliveroPrimaryTabsTest.js
new file mode 100644
index 000000000000..1cf43fe169ee
--- /dev/null
+++ b/core/tests/Drupal/Nightwatch/Tests/Olivero/oliveroPrimaryTabsTest.js
@@ -0,0 +1,50 @@
+const primaryTabsWrapper = '[data-drupal-nav-primary-tabs]';
+const activeTab = '.tabs__tab.is-active';
+const inactiveTab = '.tabs__tab:not(.is-active)';
+const mobileToggle = `${activeTab} .tabs__trigger`;
+
+module.exports = {
+  '@tags': ['core', 'olivero'],
+  before(browser) {
+    browser
+      .drupalInstall({
+        setupFile:
+          'core/tests/Drupal/TestSite/TestSiteOliveroInstallTestScript.php',
+        installProfile: 'minimal',
+      })
+      .drupalCreateUser({
+        name: 'user',
+        password: '123',
+        permissions: ['administer nodes'],
+      })
+      .drupalLogin({ name: 'user', password: '123' });
+    browser.resizeWindow(1600, 800);
+  },
+  after(browser) {
+    browser.drupalUninstall();
+  },
+  'Verify desktop primary tab display': (browser) => {
+    browser
+      .drupalRelativeURL('/node/1')
+      .waitForElementVisible(primaryTabsWrapper)
+      .assert.visible(activeTab)
+      .assert.visible(inactiveTab)
+      .assert.not.visible(mobileToggle);
+  },
+  'Verify mobile tab display and click functionality': (browser) => {
+    browser
+      .resizeWindow(699, 800)
+      .drupalRelativeURL('/node/1')
+      .waitForElementVisible(primaryTabsWrapper)
+      .assert.visible(activeTab)
+      .assert.not.visible(inactiveTab)
+      .assert.visible(mobileToggle)
+      .assert.attributeEquals(mobileToggle, 'aria-expanded', 'false')
+      .click(mobileToggle)
+      .waitForElementVisible(inactiveTab)
+      .assert.attributeEquals(mobileToggle, 'aria-expanded', 'true')
+      .click(mobileToggle)
+      .waitForElementNotVisible(inactiveTab)
+      .assert.attributeEquals(mobileToggle, 'aria-expanded', 'false');
+  },
+};
diff --git a/core/themes/olivero/js/tabs.es6.js b/core/themes/olivero/js/tabs.es6.js
index 309cdb87f4b1..c5d3e0d52892 100644
--- a/core/themes/olivero/js/tabs.es6.js
+++ b/core/themes/olivero/js/tabs.es6.js
@@ -1,14 +1,14 @@
 /**
  * @file
- * Provides interactivity for showing and hiding the tabs at mobile widths.
+ * Provides interactivity for showing and hiding the primary tabs at mobile widths.
  */
 
 ((Drupal, once) => {
   /**
-   * Initialize the tabs.
+   * Initialize the primary tabs.
    *
    * @param {HTMLElement} el
-   *   The DOM element containing the tabs.
+   *   The DOM element containing the primary tabs.
    */
   function init(el) {
     const tabs = el.querySelector('.tabs');
@@ -16,7 +16,7 @@
     const activeTab = tabs.querySelector('.is-active');
 
     /**
-     * Determines if tabs are expanded for mobile layouts.
+     * Determines if primary tabs are expanded for mobile layouts.
      *
      * @return {boolean}
      *   Whether the tabs trigger element is expanded.
@@ -26,7 +26,7 @@
     }
 
     /**
-     * Controls tab visibility on click events.
+     * Controls primary tab visibility on click events.
      *
      * @param {Event} e
      *   The event object.
@@ -54,16 +54,18 @@
   }
 
   /**
-   * Initialize the tabs.
+   * Initialize the primary tabs.
    *
    * @type {Drupal~behavior}
    *
    * @prop {Drupal~behaviorAttach} attach
-   *   Display tabs according to the screen width.
+   *   Display primary tabs according to the screen width.
    */
-  Drupal.behaviors.tabs = {
+  Drupal.behaviors.primaryTabs = {
     attach(context) {
-      once('olivero-tabs', '[data-drupal-nav-tabs]', context).forEach(init);
+      once('olivero-tabs', '[data-drupal-nav-primary-tabs]', context).forEach(
+        init,
+      );
     },
   };
 })(Drupal, once);
diff --git a/core/themes/olivero/js/tabs.js b/core/themes/olivero/js/tabs.js
index 6932f9b405f1..81d7475d1af3 100644
--- a/core/themes/olivero/js/tabs.js
+++ b/core/themes/olivero/js/tabs.js
@@ -35,9 +35,9 @@
     tabs.querySelector('.tabs__trigger').addEventListener('click', handleTriggerClick);
   }
 
-  Drupal.behaviors.tabs = {
+  Drupal.behaviors.primaryTabs = {
     attach: function attach(context) {
-      once('olivero-tabs', '[data-drupal-nav-tabs]', context).forEach(init);
+      once('olivero-tabs', '[data-drupal-nav-primary-tabs]', context).forEach(init);
     }
   };
 })(Drupal, once);
\ No newline at end of file
diff --git a/core/themes/olivero/templates/navigation/menu-local-tasks.html.twig b/core/themes/olivero/templates/navigation/menu-local-tasks.html.twig
index ad43d52a07fc..0f4d9f7d7120 100644
--- a/core/themes/olivero/templates/navigation/menu-local-tasks.html.twig
+++ b/core/themes/olivero/templates/navigation/menu-local-tasks.html.twig
@@ -18,13 +18,13 @@
 
 {% if primary %}
   <h2 id="primary-tabs-title" class="visually-hidden">{{ 'Primary tabs'|t }}</h2>
-  <nav role="navigation" class="tabs-wrapper" aria-labelledby="primary-tabs-title" data-drupal-nav-tabs>
+  <nav role="navigation" class="tabs-wrapper" aria-labelledby="primary-tabs-title" data-drupal-nav-primary-tabs>
     <ul class="tabs tabs--primary">{{ primary }}</ul>
   </nav>
 {% endif %}
 {% if secondary %}
   <h2 id="secondary-tabs-title" class="visually-hidden">{{ 'Secondary tabs'|t }}</h2>
-  <nav role="navigation" class="tabs-wrapper" aria-labelledby="secondary-tabs-title" data-drupal-nav-tabs>
+  <nav role="navigation" class="tabs-wrapper" aria-labelledby="secondary-tabs-title">
     <ul class="tabs tabs--secondary">{{ secondary }}</ul>
   </nav>
 {% endif %}
-- 
GitLab


From 4ddfac1157436674b1f1ac995c7ca68428d7b9cc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?G=C3=A1bor=20Hojtsy?= <goba@4166.no-reply.drupal.org>
Date: Thu, 11 Nov 2021 20:25:32 +0000
Subject: [PATCH 24/69] =?UTF-8?q?Issue=20#3243041=20by=20G=C3=A1bor=20Hojt?=
 =?UTF-8?q?sy:=20Mark=20Olivero=20stable?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 core/themes/olivero/olivero.info.yml | 1 -
 1 file changed, 1 deletion(-)

diff --git a/core/themes/olivero/olivero.info.yml b/core/themes/olivero/olivero.info.yml
index a551c234e81d..d3043edab608 100644
--- a/core/themes/olivero/olivero.info.yml
+++ b/core/themes/olivero/olivero.info.yml
@@ -17,7 +17,6 @@ description: 'A clean, accessible, and flexible Drupal front-end theme.'
 alt text: 'Screenshot of Olivero, Drupal front-end theme.'
 package: Core
 version: VERSION
-experimental: true
 libraries:
   - olivero/global-styling
 regions:
-- 
GitLab


From 68f2ce3c22dd0e6c9ba11283174b3e74dad7552e Mon Sep 17 00:00:00 2001
From: Lee Rowlands <lee.rowlands@previousnext.com.au>
Date: Thu, 11 Nov 2021 14:06:20 +1000
Subject: [PATCH 25/69] Issue #3248649 by alexpott:
 \Drupal\views\Plugin\views\display\PathPluginBase::alterRoutes() can become
 very slow on a site with lots of entities and JsonAPI

(cherry picked from commit 1e05f8042a8242daf3cda8bba89560eaf60054e2)
---
 .../modules/views/src/Plugin/views/display/PathPluginBase.php | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/core/modules/views/src/Plugin/views/display/PathPluginBase.php b/core/modules/views/src/Plugin/views/display/PathPluginBase.php
index a6d6b81a933d..b733524033cb 100644
--- a/core/modules/views/src/Plugin/views/display/PathPluginBase.php
+++ b/core/modules/views/src/Plugin/views/display/PathPluginBase.php
@@ -245,8 +245,8 @@ public function collectRoutes(RouteCollection $collection) {
    *   TRUE, when the view should override the given route.
    */
   protected function overrideApplies($view_path, Route $view_route, Route $route) {
-    return $this->overrideAppliesPathAndMethod($view_path, $view_route, $route)
-      && (!$route->hasRequirement('_format') || $route->getRequirement('_format') === 'html');
+    return (!$route->hasRequirement('_format') || $route->getRequirement('_format') === 'html')
+      && $this->overrideAppliesPathAndMethod($view_path, $view_route, $route);
   }
 
   /**
-- 
GitLab


From cfb5106312cf2e38521ce2498f558973e4740581 Mon Sep 17 00:00:00 2001
From: effulgentsia <alex.bronstein@acquia.com>
Date: Thu, 11 Nov 2021 14:10:39 -0800
Subject: [PATCH 26/69] Issue #3231364 by Wim Leers, lauriii, bnjmnm, webchick,
 xjm, tim.plunkett, larowlan, Luke.Leber, catch, effulgentsia, longwave,
 gabesullice, caldenjacobs, Reinmar, anand.toshniwal93, Shoshana Mayden,
 zrpnr, yash.rode, nod_, rkoller, antojose, johnwebdev: Add CKEditor 5 module
 to Drupal core

(cherry picked from commit 35972c91956900343a015a74790c1727f9d767e8)
---
 composer.lock                                 |    3 +-
 core/.cspell.json                             |    1 +
 core/.eslintignore                            |    1 +
 core/assets/vendor/ckeditor5/alignment.js     |    5 +
 core/assets/vendor/ckeditor5/basic-styles.js  |    5 +
 core/assets/vendor/ckeditor5/block-quote.js   |    5 +
 core/assets/vendor/ckeditor5/ckeditor5-dll.js |    5 +
 .../assets/vendor/ckeditor5/editor-classic.js |    5 +
 .../vendor/ckeditor5/editor-decoupled.js      |    5 +
 core/assets/vendor/ckeditor5/essentials.js    |    5 +
 core/assets/vendor/ckeditor5/heading.js       |    5 +
 .../vendor/ckeditor5/horizontal-line.js       |    5 +
 core/assets/vendor/ckeditor5/html-support.js  |    5 +
 core/assets/vendor/ckeditor5/image.js         |    5 +
 core/assets/vendor/ckeditor5/indent.js        |    5 +
 core/assets/vendor/ckeditor5/language.js      |    5 +
 core/assets/vendor/ckeditor5/link.js          |    5 +
 core/assets/vendor/ckeditor5/list.js          |    5 +
 .../vendor/ckeditor5/paste-from-office.js     |    5 +
 core/assets/vendor/ckeditor5/remove-format.js |    5 +
 .../assets/vendor/ckeditor5/source-editing.js |    5 +
 .../vendor/ckeditor5/special-characters.js    |    5 +
 core/assets/vendor/ckeditor5/table.js         |    5 +
 .../vendor/ckeditor5/translations/af.js       |    1 +
 .../vendor/ckeditor5/translations/ar.js       |    1 +
 .../vendor/ckeditor5/translations/ast.js      |    1 +
 .../vendor/ckeditor5/translations/az.js       |    1 +
 .../vendor/ckeditor5/translations/bg.js       |    1 +
 .../vendor/ckeditor5/translations/ca.js       |    1 +
 .../vendor/ckeditor5/translations/cs.js       |    1 +
 .../vendor/ckeditor5/translations/da.js       |    1 +
 .../vendor/ckeditor5/translations/de-ch.js    |    1 +
 .../vendor/ckeditor5/translations/de.js       |    1 +
 .../vendor/ckeditor5/translations/el.js       |    1 +
 .../vendor/ckeditor5/translations/en-au.js    |    1 +
 .../vendor/ckeditor5/translations/en-gb.js    |    1 +
 .../vendor/ckeditor5/translations/eo.js       |    1 +
 .../vendor/ckeditor5/translations/es.js       |    1 +
 .../vendor/ckeditor5/translations/et.js       |    1 +
 .../vendor/ckeditor5/translations/eu.js       |    1 +
 .../vendor/ckeditor5/translations/fa.js       |    1 +
 .../vendor/ckeditor5/translations/fi.js       |    1 +
 .../vendor/ckeditor5/translations/fr.js       |    1 +
 .../vendor/ckeditor5/translations/gl.js       |    1 +
 .../vendor/ckeditor5/translations/gu.js       |    1 +
 .../vendor/ckeditor5/translations/he.js       |    1 +
 .../vendor/ckeditor5/translations/hi.js       |    1 +
 .../vendor/ckeditor5/translations/hr.js       |    1 +
 .../vendor/ckeditor5/translations/hu.js       |    1 +
 .../vendor/ckeditor5/translations/id.js       |    1 +
 .../vendor/ckeditor5/translations/it.js       |    1 +
 .../vendor/ckeditor5/translations/ja.js       |    1 +
 .../vendor/ckeditor5/translations/kk.js       |    1 +
 .../vendor/ckeditor5/translations/km.js       |    1 +
 .../vendor/ckeditor5/translations/kn.js       |    1 +
 .../vendor/ckeditor5/translations/ko.js       |    1 +
 .../vendor/ckeditor5/translations/ku.js       |    1 +
 .../vendor/ckeditor5/translations/lt.js       |    1 +
 .../vendor/ckeditor5/translations/lv.js       |    1 +
 .../vendor/ckeditor5/translations/nb.js       |    1 +
 .../vendor/ckeditor5/translations/ne.js       |    1 +
 .../vendor/ckeditor5/translations/nl.js       |    1 +
 .../vendor/ckeditor5/translations/no.js       |    1 +
 .../vendor/ckeditor5/translations/oc.js       |    1 +
 .../vendor/ckeditor5/translations/pl.js       |    1 +
 .../vendor/ckeditor5/translations/pt-br.js    |    1 +
 .../vendor/ckeditor5/translations/pt.js       |    1 +
 .../vendor/ckeditor5/translations/ro.js       |    1 +
 .../vendor/ckeditor5/translations/ru.js       |    1 +
 .../vendor/ckeditor5/translations/si.js       |    1 +
 .../vendor/ckeditor5/translations/sk.js       |    1 +
 .../vendor/ckeditor5/translations/sl.js       |    1 +
 .../vendor/ckeditor5/translations/sq.js       |    1 +
 .../vendor/ckeditor5/translations/sr-latn.js  |    1 +
 .../vendor/ckeditor5/translations/sr.js       |    1 +
 .../vendor/ckeditor5/translations/sv.js       |    1 +
 .../vendor/ckeditor5/translations/th.js       |    1 +
 .../vendor/ckeditor5/translations/tk.js       |    1 +
 .../vendor/ckeditor5/translations/tr.js       |    1 +
 .../vendor/ckeditor5/translations/tt.js       |    1 +
 .../vendor/ckeditor5/translations/ug.js       |    1 +
 .../vendor/ckeditor5/translations/uk.js       |    1 +
 .../vendor/ckeditor5/translations/vi.js       |    1 +
 .../vendor/ckeditor5/translations/zh-cn.js    |    1 +
 .../vendor/ckeditor5/translations/zh.js       |    1 +
 core/composer.json                            |    1 +
 core/core.libraries.yml                       |  228 ++
 core/modules/ckeditor5/ckeditor5.api.php      |  235 ++
 .../modules/ckeditor5/ckeditor5.ckeditor5.yml |  510 +++
 core/modules/ckeditor5/ckeditor5.info.yml     |    8 +
 .../modules/ckeditor5/ckeditor5.libraries.yml |  184 +
 core/modules/ckeditor5/ckeditor5.module       |  398 +++
 core/modules/ckeditor5/ckeditor5.routing.yml  |   27 +
 core/modules/ckeditor5/ckeditor5.services.yml |   15 +
 .../config/schema/ckeditor5.data_types.yml    |   12 +
 .../config/schema/ckeditor5.pair.schema.yml   |   15 +
 .../config/schema/ckeditor5.schema.yml        |   76 +
 .../modules/ckeditor5/css/alignment.admin.css |   45 +
 core/modules/ckeditor5/css/basic.admin.css    |   27 +
 .../ckeditor5/css/blockquote.admin.css        |    3 +
 .../ckeditor5/css/drupalmedia.admin.css       |    4 +
 core/modules/ckeditor5/css/filter.admin.css   |    4 +
 core/modules/ckeditor5/css/heading.admin.css  |   23 +
 .../ckeditor5/css/horizontal-line.admin.css   |    4 +
 core/modules/ckeditor5/css/ie-warnings.css    |   17 +
 .../ckeditor5/css/imageupload.admin.css       |    4 +
 core/modules/ckeditor5/css/indent.admin.css   |    7 +
 core/modules/ckeditor5/css/internal.admin.css |   45 +
 core/modules/ckeditor5/css/language.admin.css |   30 +
 core/modules/ckeditor5/css/language.css       |   19 +
 core/modules/ckeditor5/css/link.admin.css     |    3 +
 core/modules/ckeditor5/css/list.admin.css     |    8 +
 .../ckeditor5/css/quickedit-override.css      |    9 +
 core/modules/ckeditor5/css/quickedit.css      |    4 +
 core/modules/ckeditor5/css/remove-format.css  |    3 +
 .../ckeditor5/css/source-editing.admin.css    |    3 +
 .../ckeditor5/css/special-characters.css      |    3 +
 core/modules/ckeditor5/css/table.admin.css    |    3 +
 core/modules/ckeditor5/css/toolbar.admin.css  |   99 +
 core/modules/ckeditor5/icons/align-center.svg |    1 +
 .../modules/ckeditor5/icons/align-justify.svg |    1 +
 core/modules/ckeditor5/icons/align-left.svg   |    1 +
 core/modules/ckeditor5/icons/align-right.svg  |    1 +
 core/modules/ckeditor5/icons/blockquote.svg   |    1 +
 core/modules/ckeditor5/icons/bold.svg         |    1 +
 core/modules/ckeditor5/icons/bulletedlist.svg |    1 +
 core/modules/ckeditor5/icons/code.svg         |    1 +
 core/modules/ckeditor5/icons/divider.svg      |    1 +
 .../ckeditor5/icons/horizontalline.svg        |    1 +
 core/modules/ckeditor5/icons/imageupload.svg  |    1 +
 core/modules/ckeditor5/icons/indent.svg       |    1 +
 core/modules/ckeditor5/icons/italic.svg       |    1 +
 core/modules/ckeditor5/icons/link.svg         |    1 +
 core/modules/ckeditor5/icons/medialibrary.svg |    1 +
 core/modules/ckeditor5/icons/numberedlist.svg |    1 +
 core/modules/ckeditor5/icons/outdent.svg      |    1 +
 core/modules/ckeditor5/icons/redo.svg         |    1 +
 .../modules/ckeditor5/icons/remove-format.svg |    1 +
 core/modules/ckeditor5/icons/separator.svg    |    1 +
 .../ckeditor5/icons/source-editing.svg        |    1 +
 .../ckeditor5/icons/special-characters.svg    |    1 +
 .../modules/ckeditor5/icons/strikethrough.svg |    1 +
 core/modules/ckeditor5/icons/subscript.svg    |    1 +
 core/modules/ckeditor5/icons/superscript.svg  |    1 +
 core/modules/ckeditor5/icons/table.svg        |    1 +
 core/modules/ckeditor5/icons/underline.svg    |    1 +
 core/modules/ckeditor5/icons/undo.svg         |    1 +
 .../ckeditor5/js/build/drupalEmphasis.js      |    1 +
 .../ckeditor5/js/build/drupalHtmlEngine.js    |    1 +
 .../modules/ckeditor5/js/build/drupalImage.js |    1 +
 .../modules/ckeditor5/js/build/drupalMedia.js |    1 +
 .../ckeditor5/js/ckeditor5.admin.es6.js       | 1025 ++++++
 core/modules/ckeditor5/js/ckeditor5.admin.js  |  584 ++++
 core/modules/ckeditor5/js/ckeditor5.es6.js    |  560 ++++
 .../js/ckeditor5.filter.admin.es6.js          |  156 +
 .../ckeditor5/js/ckeditor5.filter.admin.js    |   87 +
 core/modules/ckeditor5/js/ckeditor5.js        |  348 ++
 .../drupalEmphasis/src/drupalemphasis.js      |   26 +
 .../src/drupalemphasisediting.js              |   30 +
 .../drupalEmphasis/src/index.js               |   10 +
 .../drupalHtmlEngine/src/drupalhtmlbuilder.js |  176 +
 .../drupalHtmlEngine/src/drupalhtmlengine.js  |   35 +
 .../drupalHtmlEngine/src/drupalhtmlwriter.js  |   31 +
 .../drupalHtmlEngine/src/index.js             |    9 +
 .../ckeditor5_plugins/drupalImage/README.md   |   16 +
 .../drupalImage/src/drupalimage.js            |   26 +
 .../drupalImage/src/drupalimageediting.js     |  521 +++
 .../src/imageupload/drupalfilerepository.js   |   47 +
 .../src/imageupload/drupalimageupload.js      |   29 +
 .../imageupload/drupalimageuploadadapter.js   |  148 +
 .../imageupload/drupalimageuploadediting.js   |   36 +
 .../drupalImage/src/index.js                  |   12 +
 .../ckeditor5_plugins/drupalMedia/README.md   |   39 +
 .../src/drupallinkmedia/drupallinkmedia.js    |   25 +
 .../drupallinkmedia/drupallinkmediaediting.js |  230 ++
 .../src/drupallinkmedia/drupallinkmediaui.js  |  112 +
 .../drupalMedia/src/drupalmedia.js            |   25 +
 .../drupalMedia/src/drupalmediaediting.js     |  174 +
 .../src/drupalmediageneralhtmlsupport.js      |  182 +
 .../drupalMedia/src/drupalmediatoolbar.js     |   31 +
 .../drupalMedia/src/drupalmediaui.js          |   49 +
 .../drupalMedia/src/index.js                  |   23 +
 .../drupalMedia/src/insertdrupalmedia.js      |   74 +
 .../src/mediaimagetextalternative.js          |   26 +
 .../mediaimagetextalternativecommand.js       |   77 +
 .../mediaimagetextalternativeediting.js       |   27 +
 .../mediaimagetextalternativeui.js            |  218 ++
 .../ui/textalternativeformview.js             |  173 +
 .../drupalMedia/src/ui/utils.js               |   53 +
 .../drupalMedia/src/utils.js                  |   51 +
 .../drupalMedia/theme/icons/medialibrary.svg  |    1 +
 .../ckeditor5/js/ie11.filter.warnings.es6.js  |  131 +
 .../ckeditor5/js/ie11.filter.warnings.js      |   69 +
 .../ckeditor5/js/ie11.user.warnings.es6.js    |  137 +
 .../ckeditor5/js/ie11.user.warnings.js        |   64 +
 .../js/media_embed_ckeditor5.theme.es6.js     |   19 +
 .../js/media_embed_ckeditor5.theme.js         |   12 +
 .../src/Annotation/CKEditor4To5Upgrade.php    |   50 +
 .../CKEditor5AspectsOfCKEditor5Plugin.php     |   43 +
 .../src/Annotation/CKEditor5Plugin.php        |   88 +
 .../DrupalAspectsOfCKEditor5Plugin.php        |  100 +
 .../Controller/CKEditor5ImageController.php   |  297 ++
 .../Controller/CKEditor5MediaController.php   |  178 +
 .../src/HTMLRestrictionsUtilities.php         |  253 ++
 .../src/Plugin/CKEditor4To5Upgrade/Core.php   |  216 ++
 .../CKEditor4To5UpgradePluginInterface.php    |   93 +
 .../CKEditor4To5UpgradePluginManager.php      |  226 ++
 ...namicPluginConfigWithCsrfTokenUrlTrait.php |   52 +
 .../src/Plugin/CKEditor5Plugin/Heading.php    |  226 ++
 .../Plugin/CKEditor5Plugin/ImageUpload.php    |  106 +
 .../src/Plugin/CKEditor5Plugin/Language.php   |  102 +
 .../src/Plugin/CKEditor5Plugin/Media.php      |   40 +
 .../Plugin/CKEditor5Plugin/MediaLibrary.php   |  102 +
 .../Plugin/CKEditor5Plugin/SourceEditing.php  |   87 +
 .../CKEditor5PluginConfigurableInterface.php  |   26 +
 .../CKEditor5PluginConfigurableTrait.php      |   26 +
 .../src/Plugin/CKEditor5PluginDefault.php     |   40 +
 .../src/Plugin/CKEditor5PluginDefinition.php  |  426 +++
 ...CKEditor5PluginElementsSubsetInterface.php |   25 +
 .../src/Plugin/CKEditor5PluginInterface.php   |   39 +
 .../src/Plugin/CKEditor5PluginManager.php     |  420 +++
 .../CKEditor5PluginManagerInterface.php       |  122 +
 .../ckeditor5/src/Plugin/Editor/CKEditor5.php |  895 +++++
 .../Constraint/CKEditor5ElementConstraint.php |   26 +
 .../CKEditor5ElementConstraintValidator.php   |   37 +
 .../EnabledConfigurablePluginsConstraint.php  |   28 +
 ...ConfigurablePluginsConstraintValidator.php |   78 +
 .../FundamentalCompatibilityConstraint.php    |   56 +
 ...mentalCompatibilityConstraintValidator.php |  293 ++
 .../PluginManagerDependentValidatorTrait.php  |   43 +
 .../SourceEditingRedundantTagsConstraint.php  |   35 +
 ...ditingRedundantTagsConstraintValidator.php |  103 +
 ...extEditorObjectDependentValidatorTrait.php |   55 +
 .../ToolbarItemConditionsMetConstraint.php    |   49 +
 ...arItemConditionsMetConstraintValidator.php |  137 +
 .../Constraint/ToolbarItemConstraint.php      |   28 +
 .../ToolbarItemConstraintValidator.php        |   70 +
 .../ToolbarItemDependencyConstraint.php       |   42 +
 ...olbarItemDependencyConstraintValidator.php |   40 +
 .../ckeditor5/src/SmartDefaultSettings.php    |  663 ++++
 .../ckeditor5-settings-toolbar.html.twig      |   26 +
 .../ckeditor4to5upgrade_plugin_test.info.yml  |    7 +
 .../ckeditor4to5upgrade_plugin_test.module    |   51 +
 ...efinition_supporting_element.ckeditor5.yml |  111 +
 ...or5_definition_supporting_element.info.yml |    7 +
 ...itor5_plugin_conditions_test.ckeditor5.yml |   14 +
 .../ckeditor5_plugin_conditions_test.info.yml |    7 +
 ...itor5_plugin_elements_subset.ckeditor5.yml |    9 +
 .../ckeditor5_plugin_elements_subset.info.yml |    7 +
 ...keditor5_plugin_elements_subset.schema.yml |   10 +
 .../Plugin/CKEditor5Plugin/SneakySuperset.php |   51 +
 ...editor5_plugin_elements_test.ckeditor5.yml |   33 +
 .../ckeditor5_plugin_elements_test.info.yml   |    7 +
 .../ckeditor5_test.ckeditor5.yml              |   16 +
 .../ckeditor5_test/ckeditor5_test.info.yml    |    8 +
 .../ckeditor5_test.libraries.yml              |   10 +
 .../ckeditor5_test/ckeditor5_test.routing.yml |    6 +
 .../modules/ckeditor5_test/css/layout.css     |   14 +
 .../CKEditor5OffCanvasTestController.php      |   35 +
 .../src/Functional/ImageUploadAccessTest.php  |   52 +
 .../tests/src/Functional/ImageUploadTest.php  |  256 ++
 .../tests/src/Functional/MediaImageTest.php   |  188 ++
 .../src/FunctionalJavascript/AdminUiTest.php  |  173 +
 .../CKEditor5AllowedTagsTest.php              |  521 +++
 .../CKEditor5CKEditor4Compatibility.php       |  123 +
 .../CKEditor5OffCanvasTest.php                |   52 +
 .../FunctionalJavascript/CKEditor5Test.php    |  472 +++
 .../CKEditor5TestBase.php                     |  140 +
 .../src/FunctionalJavascript/ImageTest.php    |  313 ++
 .../src/FunctionalJavascript/LanguageTest.php |   74 +
 .../FunctionalJavascript/MediaLibraryTest.php |  253 ++
 .../src/FunctionalJavascript/MediaTest.php    |  704 ++++
 .../QuickEditIntegrationTest.php              |  288 ++
 .../CKEditor4to5UpgradeCompletenessTest.php   |  257 ++
 .../src/Kernel/CKEditor5PluginManagerTest.php | 1117 +++++++
 .../Kernel/CKEditor5ValidationTestTrait.php   |   50 +
 .../src/Kernel/ConfigurablePluginTest.php     |   78 +
 .../tests/src/Kernel/LanguageTest.php         |  122 +
 .../src/Kernel/SmartDefaultSettingsTest.php   |  682 ++++
 .../tests/src/Kernel/ValidatorsTest.php       |  775 +++++
 .../Tests/drupalHtmlBuilderTest.es6.js        |  131 +
 .../Nightwatch/Tests/drupalHtmlBuilderTest.js |  101 +
 .../tests/src/Traits/CKEditor5TestTrait.php   |  127 +
 .../Traits/SynchronizeCsrfTokenSeedTrait.php  |   42 +
 .../tests/src/Unit/CKEditor5Test.php          |  117 +
 core/modules/ckeditor5/webpack.config.js      |   63 +
 core/package.json                             |   34 +-
 core/scripts/dev/commit-code-check.sh         |    4 +-
 core/scripts/js/assets.js                     |  307 +-
 core/yarn.lock                                | 2953 ++++++++++++++++-
 290 files changed, 25137 insertions(+), 131 deletions(-)
 create mode 100644 core/assets/vendor/ckeditor5/alignment.js
 create mode 100644 core/assets/vendor/ckeditor5/basic-styles.js
 create mode 100644 core/assets/vendor/ckeditor5/block-quote.js
 create mode 100644 core/assets/vendor/ckeditor5/ckeditor5-dll.js
 create mode 100644 core/assets/vendor/ckeditor5/editor-classic.js
 create mode 100644 core/assets/vendor/ckeditor5/editor-decoupled.js
 create mode 100644 core/assets/vendor/ckeditor5/essentials.js
 create mode 100644 core/assets/vendor/ckeditor5/heading.js
 create mode 100644 core/assets/vendor/ckeditor5/horizontal-line.js
 create mode 100644 core/assets/vendor/ckeditor5/html-support.js
 create mode 100644 core/assets/vendor/ckeditor5/image.js
 create mode 100644 core/assets/vendor/ckeditor5/indent.js
 create mode 100644 core/assets/vendor/ckeditor5/language.js
 create mode 100644 core/assets/vendor/ckeditor5/link.js
 create mode 100644 core/assets/vendor/ckeditor5/list.js
 create mode 100644 core/assets/vendor/ckeditor5/paste-from-office.js
 create mode 100644 core/assets/vendor/ckeditor5/remove-format.js
 create mode 100644 core/assets/vendor/ckeditor5/source-editing.js
 create mode 100644 core/assets/vendor/ckeditor5/special-characters.js
 create mode 100644 core/assets/vendor/ckeditor5/table.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/af.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/ar.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/ast.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/az.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/bg.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/ca.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/cs.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/da.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/de-ch.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/de.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/el.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/en-au.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/en-gb.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/eo.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/es.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/et.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/eu.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/fa.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/fi.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/fr.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/gl.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/gu.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/he.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/hi.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/hr.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/hu.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/id.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/it.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/ja.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/kk.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/km.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/kn.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/ko.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/ku.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/lt.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/lv.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/nb.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/ne.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/nl.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/no.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/oc.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/pl.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/pt-br.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/pt.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/ro.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/ru.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/si.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/sk.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/sl.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/sq.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/sr-latn.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/sr.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/sv.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/th.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/tk.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/tr.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/tt.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/ug.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/uk.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/vi.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/zh-cn.js
 create mode 100644 core/assets/vendor/ckeditor5/translations/zh.js
 create mode 100644 core/modules/ckeditor5/ckeditor5.api.php
 create mode 100644 core/modules/ckeditor5/ckeditor5.ckeditor5.yml
 create mode 100644 core/modules/ckeditor5/ckeditor5.info.yml
 create mode 100644 core/modules/ckeditor5/ckeditor5.libraries.yml
 create mode 100644 core/modules/ckeditor5/ckeditor5.module
 create mode 100644 core/modules/ckeditor5/ckeditor5.routing.yml
 create mode 100644 core/modules/ckeditor5/ckeditor5.services.yml
 create mode 100644 core/modules/ckeditor5/config/schema/ckeditor5.data_types.yml
 create mode 100644 core/modules/ckeditor5/config/schema/ckeditor5.pair.schema.yml
 create mode 100644 core/modules/ckeditor5/config/schema/ckeditor5.schema.yml
 create mode 100644 core/modules/ckeditor5/css/alignment.admin.css
 create mode 100644 core/modules/ckeditor5/css/basic.admin.css
 create mode 100644 core/modules/ckeditor5/css/blockquote.admin.css
 create mode 100644 core/modules/ckeditor5/css/drupalmedia.admin.css
 create mode 100644 core/modules/ckeditor5/css/filter.admin.css
 create mode 100644 core/modules/ckeditor5/css/heading.admin.css
 create mode 100644 core/modules/ckeditor5/css/horizontal-line.admin.css
 create mode 100644 core/modules/ckeditor5/css/ie-warnings.css
 create mode 100644 core/modules/ckeditor5/css/imageupload.admin.css
 create mode 100644 core/modules/ckeditor5/css/indent.admin.css
 create mode 100644 core/modules/ckeditor5/css/internal.admin.css
 create mode 100644 core/modules/ckeditor5/css/language.admin.css
 create mode 100644 core/modules/ckeditor5/css/language.css
 create mode 100644 core/modules/ckeditor5/css/link.admin.css
 create mode 100644 core/modules/ckeditor5/css/list.admin.css
 create mode 100644 core/modules/ckeditor5/css/quickedit-override.css
 create mode 100644 core/modules/ckeditor5/css/quickedit.css
 create mode 100644 core/modules/ckeditor5/css/remove-format.css
 create mode 100644 core/modules/ckeditor5/css/source-editing.admin.css
 create mode 100644 core/modules/ckeditor5/css/special-characters.css
 create mode 100644 core/modules/ckeditor5/css/table.admin.css
 create mode 100644 core/modules/ckeditor5/css/toolbar.admin.css
 create mode 100644 core/modules/ckeditor5/icons/align-center.svg
 create mode 100644 core/modules/ckeditor5/icons/align-justify.svg
 create mode 100644 core/modules/ckeditor5/icons/align-left.svg
 create mode 100644 core/modules/ckeditor5/icons/align-right.svg
 create mode 100644 core/modules/ckeditor5/icons/blockquote.svg
 create mode 100644 core/modules/ckeditor5/icons/bold.svg
 create mode 100644 core/modules/ckeditor5/icons/bulletedlist.svg
 create mode 100644 core/modules/ckeditor5/icons/code.svg
 create mode 100644 core/modules/ckeditor5/icons/divider.svg
 create mode 100644 core/modules/ckeditor5/icons/horizontalline.svg
 create mode 100644 core/modules/ckeditor5/icons/imageupload.svg
 create mode 100644 core/modules/ckeditor5/icons/indent.svg
 create mode 100644 core/modules/ckeditor5/icons/italic.svg
 create mode 100644 core/modules/ckeditor5/icons/link.svg
 create mode 100644 core/modules/ckeditor5/icons/medialibrary.svg
 create mode 100644 core/modules/ckeditor5/icons/numberedlist.svg
 create mode 100644 core/modules/ckeditor5/icons/outdent.svg
 create mode 100644 core/modules/ckeditor5/icons/redo.svg
 create mode 100644 core/modules/ckeditor5/icons/remove-format.svg
 create mode 100644 core/modules/ckeditor5/icons/separator.svg
 create mode 100644 core/modules/ckeditor5/icons/source-editing.svg
 create mode 100644 core/modules/ckeditor5/icons/special-characters.svg
 create mode 100644 core/modules/ckeditor5/icons/strikethrough.svg
 create mode 100644 core/modules/ckeditor5/icons/subscript.svg
 create mode 100644 core/modules/ckeditor5/icons/superscript.svg
 create mode 100644 core/modules/ckeditor5/icons/table.svg
 create mode 100644 core/modules/ckeditor5/icons/underline.svg
 create mode 100644 core/modules/ckeditor5/icons/undo.svg
 create mode 100644 core/modules/ckeditor5/js/build/drupalEmphasis.js
 create mode 100644 core/modules/ckeditor5/js/build/drupalHtmlEngine.js
 create mode 100644 core/modules/ckeditor5/js/build/drupalImage.js
 create mode 100644 core/modules/ckeditor5/js/build/drupalMedia.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5.admin.es6.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5.admin.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5.es6.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5.filter.admin.es6.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5.filter.admin.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5_plugins/drupalEmphasis/src/drupalemphasis.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5_plugins/drupalEmphasis/src/drupalemphasisediting.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5_plugins/drupalEmphasis/src/index.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5_plugins/drupalHtmlEngine/src/drupalhtmlbuilder.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5_plugins/drupalHtmlEngine/src/drupalhtmlengine.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5_plugins/drupalHtmlEngine/src/drupalhtmlwriter.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5_plugins/drupalHtmlEngine/src/index.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/README.md
 create mode 100644 core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/drupalimage.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/drupalimageediting.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imageupload/drupalfilerepository.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imageupload/drupalimageupload.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imageupload/drupalimageuploadadapter.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imageupload/drupalimageuploadediting.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/index.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/README.md
 create mode 100644 core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupallinkmedia/drupallinkmedia.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupallinkmedia/drupallinkmediaediting.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupallinkmedia/drupallinkmediaui.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmedia.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediaediting.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediageneralhtmlsupport.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediatoolbar.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediaui.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/index.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/insertdrupalmedia.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/mediaimagetextalternative.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/mediaimagetextalternative/mediaimagetextalternativecommand.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/mediaimagetextalternative/mediaimagetextalternativeediting.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/mediaimagetextalternative/mediaimagetextalternativeui.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/mediaimagetextalternative/ui/textalternativeformview.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/ui/utils.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/utils.js
 create mode 100644 core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/theme/icons/medialibrary.svg
 create mode 100644 core/modules/ckeditor5/js/ie11.filter.warnings.es6.js
 create mode 100644 core/modules/ckeditor5/js/ie11.filter.warnings.js
 create mode 100644 core/modules/ckeditor5/js/ie11.user.warnings.es6.js
 create mode 100644 core/modules/ckeditor5/js/ie11.user.warnings.js
 create mode 100644 core/modules/ckeditor5/js/media_embed_ckeditor5.theme.es6.js
 create mode 100644 core/modules/ckeditor5/js/media_embed_ckeditor5.theme.js
 create mode 100644 core/modules/ckeditor5/src/Annotation/CKEditor4To5Upgrade.php
 create mode 100644 core/modules/ckeditor5/src/Annotation/CKEditor5AspectsOfCKEditor5Plugin.php
 create mode 100644 core/modules/ckeditor5/src/Annotation/CKEditor5Plugin.php
 create mode 100644 core/modules/ckeditor5/src/Annotation/DrupalAspectsOfCKEditor5Plugin.php
 create mode 100644 core/modules/ckeditor5/src/Controller/CKEditor5ImageController.php
 create mode 100644 core/modules/ckeditor5/src/Controller/CKEditor5MediaController.php
 create mode 100644 core/modules/ckeditor5/src/HTMLRestrictionsUtilities.php
 create mode 100644 core/modules/ckeditor5/src/Plugin/CKEditor4To5Upgrade/Core.php
 create mode 100644 core/modules/ckeditor5/src/Plugin/CKEditor4To5UpgradePluginInterface.php
 create mode 100644 core/modules/ckeditor5/src/Plugin/CKEditor4To5UpgradePluginManager.php
 create mode 100644 core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/DynamicPluginConfigWithCsrfTokenUrlTrait.php
 create mode 100644 core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/Heading.php
 create mode 100644 core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/ImageUpload.php
 create mode 100644 core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/Language.php
 create mode 100644 core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/Media.php
 create mode 100644 core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/MediaLibrary.php
 create mode 100644 core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/SourceEditing.php
 create mode 100644 core/modules/ckeditor5/src/Plugin/CKEditor5PluginConfigurableInterface.php
 create mode 100644 core/modules/ckeditor5/src/Plugin/CKEditor5PluginConfigurableTrait.php
 create mode 100644 core/modules/ckeditor5/src/Plugin/CKEditor5PluginDefault.php
 create mode 100644 core/modules/ckeditor5/src/Plugin/CKEditor5PluginDefinition.php
 create mode 100644 core/modules/ckeditor5/src/Plugin/CKEditor5PluginElementsSubsetInterface.php
 create mode 100644 core/modules/ckeditor5/src/Plugin/CKEditor5PluginInterface.php
 create mode 100644 core/modules/ckeditor5/src/Plugin/CKEditor5PluginManager.php
 create mode 100644 core/modules/ckeditor5/src/Plugin/CKEditor5PluginManagerInterface.php
 create mode 100644 core/modules/ckeditor5/src/Plugin/Editor/CKEditor5.php
 create mode 100644 core/modules/ckeditor5/src/Plugin/Validation/Constraint/CKEditor5ElementConstraint.php
 create mode 100644 core/modules/ckeditor5/src/Plugin/Validation/Constraint/CKEditor5ElementConstraintValidator.php
 create mode 100644 core/modules/ckeditor5/src/Plugin/Validation/Constraint/EnabledConfigurablePluginsConstraint.php
 create mode 100644 core/modules/ckeditor5/src/Plugin/Validation/Constraint/EnabledConfigurablePluginsConstraintValidator.php
 create mode 100644 core/modules/ckeditor5/src/Plugin/Validation/Constraint/FundamentalCompatibilityConstraint.php
 create mode 100644 core/modules/ckeditor5/src/Plugin/Validation/Constraint/FundamentalCompatibilityConstraintValidator.php
 create mode 100644 core/modules/ckeditor5/src/Plugin/Validation/Constraint/PluginManagerDependentValidatorTrait.php
 create mode 100644 core/modules/ckeditor5/src/Plugin/Validation/Constraint/SourceEditingRedundantTagsConstraint.php
 create mode 100644 core/modules/ckeditor5/src/Plugin/Validation/Constraint/SourceEditingRedundantTagsConstraintValidator.php
 create mode 100644 core/modules/ckeditor5/src/Plugin/Validation/Constraint/TextEditorObjectDependentValidatorTrait.php
 create mode 100644 core/modules/ckeditor5/src/Plugin/Validation/Constraint/ToolbarItemConditionsMetConstraint.php
 create mode 100644 core/modules/ckeditor5/src/Plugin/Validation/Constraint/ToolbarItemConditionsMetConstraintValidator.php
 create mode 100644 core/modules/ckeditor5/src/Plugin/Validation/Constraint/ToolbarItemConstraint.php
 create mode 100644 core/modules/ckeditor5/src/Plugin/Validation/Constraint/ToolbarItemConstraintValidator.php
 create mode 100644 core/modules/ckeditor5/src/Plugin/Validation/Constraint/ToolbarItemDependencyConstraint.php
 create mode 100644 core/modules/ckeditor5/src/Plugin/Validation/Constraint/ToolbarItemDependencyConstraintValidator.php
 create mode 100644 core/modules/ckeditor5/src/SmartDefaultSettings.php
 create mode 100644 core/modules/ckeditor5/templates/ckeditor5-settings-toolbar.html.twig
 create mode 100644 core/modules/ckeditor5/tests/modules/ckeditor4to5upgrade_plugin_test/ckeditor4to5upgrade_plugin_test.info.yml
 create mode 100644 core/modules/ckeditor5/tests/modules/ckeditor4to5upgrade_plugin_test/ckeditor4to5upgrade_plugin_test.module
 create mode 100644 core/modules/ckeditor5/tests/modules/ckeditor5_definition_supporting_element/ckeditor5_definition_supporting_element.ckeditor5.yml
 create mode 100644 core/modules/ckeditor5/tests/modules/ckeditor5_definition_supporting_element/ckeditor5_definition_supporting_element.info.yml
 create mode 100644 core/modules/ckeditor5/tests/modules/ckeditor5_plugin_conditions_test/ckeditor5_plugin_conditions_test.ckeditor5.yml
 create mode 100644 core/modules/ckeditor5/tests/modules/ckeditor5_plugin_conditions_test/ckeditor5_plugin_conditions_test.info.yml
 create mode 100644 core/modules/ckeditor5/tests/modules/ckeditor5_plugin_elements_subset/ckeditor5_plugin_elements_subset.ckeditor5.yml
 create mode 100644 core/modules/ckeditor5/tests/modules/ckeditor5_plugin_elements_subset/ckeditor5_plugin_elements_subset.info.yml
 create mode 100644 core/modules/ckeditor5/tests/modules/ckeditor5_plugin_elements_subset/config/schema/ckeditor5_plugin_elements_subset.schema.yml
 create mode 100644 core/modules/ckeditor5/tests/modules/ckeditor5_plugin_elements_subset/src/Plugin/CKEditor5Plugin/SneakySuperset.php
 create mode 100644 core/modules/ckeditor5/tests/modules/ckeditor5_plugin_elements_test/ckeditor5_plugin_elements_test.ckeditor5.yml
 create mode 100644 core/modules/ckeditor5/tests/modules/ckeditor5_plugin_elements_test/ckeditor5_plugin_elements_test.info.yml
 create mode 100644 core/modules/ckeditor5/tests/modules/ckeditor5_test/ckeditor5_test.ckeditor5.yml
 create mode 100644 core/modules/ckeditor5/tests/modules/ckeditor5_test/ckeditor5_test.info.yml
 create mode 100644 core/modules/ckeditor5/tests/modules/ckeditor5_test/ckeditor5_test.libraries.yml
 create mode 100644 core/modules/ckeditor5/tests/modules/ckeditor5_test/ckeditor5_test.routing.yml
 create mode 100644 core/modules/ckeditor5/tests/modules/ckeditor5_test/css/layout.css
 create mode 100644 core/modules/ckeditor5/tests/modules/ckeditor5_test/src/Controller/CKEditor5OffCanvasTestController.php
 create mode 100644 core/modules/ckeditor5/tests/src/Functional/ImageUploadAccessTest.php
 create mode 100644 core/modules/ckeditor5/tests/src/Functional/ImageUploadTest.php
 create mode 100644 core/modules/ckeditor5/tests/src/Functional/MediaImageTest.php
 create mode 100644 core/modules/ckeditor5/tests/src/FunctionalJavascript/AdminUiTest.php
 create mode 100644 core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5AllowedTagsTest.php
 create mode 100644 core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5CKEditor4Compatibility.php
 create mode 100644 core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5OffCanvasTest.php
 create mode 100644 core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5Test.php
 create mode 100644 core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5TestBase.php
 create mode 100644 core/modules/ckeditor5/tests/src/FunctionalJavascript/ImageTest.php
 create mode 100644 core/modules/ckeditor5/tests/src/FunctionalJavascript/LanguageTest.php
 create mode 100644 core/modules/ckeditor5/tests/src/FunctionalJavascript/MediaLibraryTest.php
 create mode 100644 core/modules/ckeditor5/tests/src/FunctionalJavascript/MediaTest.php
 create mode 100644 core/modules/ckeditor5/tests/src/FunctionalJavascript/QuickEditIntegrationTest.php
 create mode 100644 core/modules/ckeditor5/tests/src/Kernel/CKEditor4to5UpgradeCompletenessTest.php
 create mode 100644 core/modules/ckeditor5/tests/src/Kernel/CKEditor5PluginManagerTest.php
 create mode 100644 core/modules/ckeditor5/tests/src/Kernel/CKEditor5ValidationTestTrait.php
 create mode 100644 core/modules/ckeditor5/tests/src/Kernel/ConfigurablePluginTest.php
 create mode 100644 core/modules/ckeditor5/tests/src/Kernel/LanguageTest.php
 create mode 100644 core/modules/ckeditor5/tests/src/Kernel/SmartDefaultSettingsTest.php
 create mode 100644 core/modules/ckeditor5/tests/src/Kernel/ValidatorsTest.php
 create mode 100644 core/modules/ckeditor5/tests/src/Nightwatch/Tests/drupalHtmlBuilderTest.es6.js
 create mode 100644 core/modules/ckeditor5/tests/src/Nightwatch/Tests/drupalHtmlBuilderTest.js
 create mode 100644 core/modules/ckeditor5/tests/src/Traits/CKEditor5TestTrait.php
 create mode 100644 core/modules/ckeditor5/tests/src/Traits/SynchronizeCsrfTokenSeedTrait.php
 create mode 100644 core/modules/ckeditor5/tests/src/Unit/CKEditor5Test.php
 create mode 100644 core/modules/ckeditor5/webpack.config.js

diff --git a/composer.lock b/composer.lock
index effef11be664..74c5c365ef38 100644
--- a/composer.lock
+++ b/composer.lock
@@ -535,7 +535,7 @@
             "dist": {
                 "type": "path",
                 "url": "core",
-                "reference": "f3d27c6d13a1d3b6b5e3f2bf2074f63d24c17603"
+                "reference": "1349b63771ae6c0b66e9d870c692bf7f51024171"
             },
             "require": {
                 "asm89/stack-cors": "^1.1",
@@ -599,6 +599,7 @@
                 "drupal/book": "self.version",
                 "drupal/breakpoint": "self.version",
                 "drupal/ckeditor": "self.version",
+                "drupal/ckeditor5": "self.version",
                 "drupal/claro": "self.version",
                 "drupal/classy": "self.version",
                 "drupal/color": "self.version",
diff --git a/core/.cspell.json b/core/.cspell.json
index ca08c426d021..56df9c720214 100644
--- a/core/.cspell.json
+++ b/core/.cspell.json
@@ -13,6 +13,7 @@
       "**/LICENSE.txt",
       "../**/LICENSE.txt",
       "modules/**/Migrate*Test.php",
+      "modules/ckeditor5/js/build/*",
       "modules/color/preview.html",
       "modules/color/tests/modules/color_test/themes/color_test_theme/color/preview.html",
       "modules/media/tests/fixtures/oembed/*",
diff --git a/core/.eslintignore b/core/.eslintignore
index 0cf12c6e2554..655ca871470f 100644
--- a/core/.eslintignore
+++ b/core/.eslintignore
@@ -3,6 +3,7 @@ node_modules/**/*
 **/js_test_files/**/*
 *.js
 !*.es6.js
+!modules/ckeditor5/js/ckeditor5_plugins/**/*.js
 modules/locale/tests/locale_test.es6.js
 !tests/Drupal/Nightwatch/**/*.js
 misc/polyfills/array.find.es6.js
diff --git a/core/assets/vendor/ckeditor5/alignment.js b/core/assets/vendor/ckeditor5/alignment.js
new file mode 100644
index 000000000000..9c07cac3f41a
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/alignment.js
@@ -0,0 +1,5 @@
+/*!
+ * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md.
+ */
+!function(t){const e=t.en=t.en||{};e.dictionary=Object.assign(e.dictionary||{},{"Align center":"Align center","Align left":"Align left","Align right":"Align right",Justify:"Justify","Text alignment":"Text alignment","Text alignment toolbar":"Text alignment toolbar"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})),window.CKEditor5=window.CKEditor5||{},window.CKEditor5.alignment=function(t){var e={};function n(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return t[i].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(i,o,function(e){return t[e]}.bind(null,o));return i},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=4)}([function(t,e,n){t.exports=n(3)("./src/core.js")},function(t,e,n){t.exports=n(3)("./src/utils.js")},function(t,e,n){t.exports=n(3)("./src/ui.js")},function(t,e){t.exports=CKEditor5.dll},function(t,e,n){"use strict";n.r(e),n.d(e,"Alignment",(function(){return f})),n.d(e,"AlignmentEditing",(function(){return u})),n.d(e,"AlignmentUI",(function(){return m}));var i=n(0),o=n(1);const r=["left","right","center","justify"];function a(t){return r.includes(t)}function l(t,e){return"rtl"==e.contentLanguageDirection?"right"===t:"left"===t}function s(t){const e=t.map(t=>{let e;return e="string"==typeof t?{name:t}:t,e}).filter(t=>{const e=!!r.includes(t.name);return e||Object(o.logWarning)("alignment-config-name-not-recognized",{option:t}),e}),n=e.filter(t=>!!t.className).length;if(n&&n<e.length)throw new o.CKEditorError("alignment-config-classnames-are-missing",{configuredOptions:t});return e.forEach((e,n,i)=>{const r=i.slice(n+1);if(r.some(t=>t.name==e.name))throw new o.CKEditorError("alignment-config-name-already-defined",{option:e,configuredOptions:t});if(e.className){if(r.some(t=>t.className==e.className))throw new o.CKEditorError("alignment-config-classname-already-defined",{option:e,configuredOptions:t})}}),e}class c extends i.Command{refresh(){const t=this.editor.locale,e=Object(o.first)(this.editor.model.document.selection.getSelectedBlocks());this.isEnabled=!!e&&this._canBeAligned(e),this.isEnabled&&e.hasAttribute("alignment")?this.value=e.getAttribute("alignment"):this.value="rtl"===t.contentLanguageDirection?"right":"left"}execute(t={}){const e=this.editor,n=e.locale,i=e.model,o=i.document,r=t.value;i.change(t=>{const e=Array.from(o.selection.getSelectedBlocks()).filter(t=>this._canBeAligned(t)),i=e[0].getAttribute("alignment");l(r,n)||i===r||!r?function(t,e){for(const n of t)e.removeAttribute("alignment",n)}(e,t):function(t,e,n){for(const i of t)e.setAttribute("alignment",n,i)}(e,t,r)})}_canBeAligned(t){return this.editor.model.schema.checkAttribute(t,"alignment")}}class u extends i.Plugin{static get pluginName(){return"AlignmentEditing"}constructor(t){super(t),t.config.define("alignment",{options:[...r.map(t=>({name:t}))]})}init(){const t=this.editor,e=t.locale,n=t.model.schema,i=s(t.config.get("alignment.options")).filter(t=>a(t.name)&&!l(t.name,e)),o=i.some(t=>!!t.className);n.extend("$block",{allowAttributes:"alignment"}),t.model.schema.setAttributeProperties("alignment",{isFormatting:!0}),o?t.conversion.attributeToAttribute(function(t){const e={model:{key:"alignment",values:t.map(t=>t.name)},view:{}};for(const n of t)e.view[n.name]={key:"class",value:n.className};return e}(i)):t.conversion.for("downcast").attributeToAttribute(function(t){const e={model:{key:"alignment",values:t.map(t=>t.name)},view:{}};for(const{name:n}of t)e.view[n]={key:"style",value:{"text-align":n}};return e}(i));const r=function(t){const e=[];for(const{name:n}of t)e.push({view:{key:"style",value:{"text-align":n}},model:{key:"alignment",value:n}});return e}(i);for(const e of r)t.conversion.for("upcast").attributeToAttribute(e);const u=function(t){const e=[];for(const{name:n}of t)e.push({view:{key:"align",value:n},model:{key:"alignment",value:n}});return e}(i);for(const e of u)t.conversion.for("upcast").attributeToAttribute(e);t.commands.add("alignment",new c(t))}}var g=n(2);const d=new Map([["left",i.icons.alignLeft],["right",i.icons.alignRight],["center",i.icons.alignCenter],["justify",i.icons.alignJustify]]);class m extends i.Plugin{get localizedOptionTitles(){const t=this.editor.t;return{left:t("Align left"),right:t("Align right"),center:t("Align center"),justify:t("Justify")}}static get pluginName(){return"AlignmentUI"}init(){const t=this.editor,e=t.ui.componentFactory,n=t.t,i=s(t.config.get("alignment.options"));i.map(t=>t.name).filter(a).forEach(t=>this._addButton(t)),e.add("alignment",t=>{const o=Object(g.createDropdown)(t),r=i.map(t=>e.create("alignment:"+t.name));Object(g.addToolbarToDropdown)(o,r),o.buttonView.set({label:n("Text alignment"),tooltip:!0}),o.toolbarView.isVertical=!0,o.toolbarView.ariaLabel=n("Text alignment toolbar"),o.extendTemplate({attributes:{class:"ck-alignment-dropdown"}});const a="rtl"===t.contentLanguageDirection?d.get("right"):d.get("left");return o.buttonView.bind("icon").toMany(r,"isOn",(...t)=>{const e=t.findIndex(t=>t);return e<0?a:r[e].icon}),o.bind("isEnabled").toMany(r,"isEnabled",(...t)=>t.some(t=>t)),o})}_addButton(t){const e=this.editor;e.ui.componentFactory.add("alignment:"+t,n=>{const i=e.commands.get("alignment"),o=new g.ButtonView(n);return o.set({label:this.localizedOptionTitles[t],icon:d.get(t),tooltip:!0,isToggleable:!0}),o.bind("isEnabled").to(i),o.bind("isOn").to(i,"value",e=>e===t),this.listenTo(o,"execute",()=>{e.execute("alignment",{value:t}),e.editing.view.focus()}),o})}}class f extends i.Plugin{static get requires(){return[u,m]}static get pluginName(){return"Alignment"}}}]);
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/basic-styles.js b/core/assets/vendor/ckeditor5/basic-styles.js
new file mode 100644
index 000000000000..8a8c7c10d7f4
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/basic-styles.js
@@ -0,0 +1,5 @@
+/*!
+ * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md.
+ */
+!function(t){const e=t.en=t.en||{};e.dictionary=Object.assign(e.dictionary||{},{Bold:"Bold",Code:"Code",Italic:"Italic",Strikethrough:"Strikethrough",Subscript:"Subscript",Superscript:"Superscript",Underline:"Underline"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})),window.CKEditor5=window.CKEditor5||{},window.CKEditor5.basicStyles=function(t){var e={};function i(n){if(e[n])return e[n].exports;var r=e[n]={i:n,l:!1,exports:{}};return t[n].call(r.exports,r,r.exports,i),r.l=!0,r.exports}return i.m=t,i.c=e,i.d=function(t,e,n){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)i.d(n,r,function(e){return t[e]}.bind(null,r));return n},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="",i(i.s=7)}([function(t,e,i){t.exports=i(3)("./src/core.js")},function(t,e,i){t.exports=i(3)("./src/ui.js")},function(t,e,i){t.exports=i(3)("./src/typing.js")},function(t,e){t.exports=CKEditor5.dll},function(t,e,i){var n=i(5),r=i(6);"string"==typeof(r=r.__esModule?r.default:r)&&(r=[[t.i,r,""]]);var s={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};n(r,s);t.exports=r.locals||{}},function(t,e,i){"use strict";var n,r=function(){return void 0===n&&(n=Boolean(window&&document&&document.all&&!window.atob)),n},s=function(){var t={};return function(e){if(void 0===t[e]){var i=document.querySelector(e);if(window.HTMLIFrameElement&&i instanceof window.HTMLIFrameElement)try{i=i.contentDocument.head}catch(t){i=null}t[e]=i}return t[e]}}(),o=[];function c(t){for(var e=-1,i=0;i<o.length;i++)if(o[i].identifier===t){e=i;break}return e}function a(t,e){for(var i={},n=[],r=0;r<t.length;r++){var s=t[r],a=e.base?s[0]+e.base:s[0],u=i[a]||0,l="".concat(a," ").concat(u);i[a]=u+1;var d=c(l),g={css:s[1],media:s[2],sourceMap:s[3]};-1!==d?(o[d].references++,o[d].updater(g)):o.push({identifier:l,updater:b(g,e),references:1}),n.push(l)}return n}function u(t){var e=document.createElement("style"),n=t.attributes||{};if(void 0===n.nonce){var r=i.nc;r&&(n.nonce=r)}if(Object.keys(n).forEach((function(t){e.setAttribute(t,n[t])})),"function"==typeof t.insert)t.insert(e);else{var o=s(t.insert||"head");if(!o)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");o.appendChild(e)}return e}var l,d=(l=[],function(t,e){return l[t]=e,l.filter(Boolean).join("\n")});function g(t,e,i,n){var r=i?"":n.media?"@media ".concat(n.media," {").concat(n.css,"}"):n.css;if(t.styleSheet)t.styleSheet.cssText=d(e,r);else{var s=document.createTextNode(r),o=t.childNodes;o[e]&&t.removeChild(o[e]),o.length?t.insertBefore(s,o[e]):t.appendChild(s)}}function p(t,e,i){var n=i.css,r=i.media,s=i.sourceMap;if(r?t.setAttribute("media",r):t.removeAttribute("media"),s&&"undefined"!=typeof btoa&&(n+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(s))))," */")),t.styleSheet)t.styleSheet.cssText=n;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(n))}}var m=null,h=0;function b(t,e){var i,n,r;if(e.singleton){var s=h++;i=m||(m=u(e)),n=g.bind(null,i,s,!1),r=g.bind(null,i,s,!0)}else i=u(e),n=p.bind(null,i,e),r=function(){!function(t){if(null===t.parentNode)return!1;t.parentNode.removeChild(t)}(i)};return n(t),function(e){if(e){if(e.css===t.css&&e.media===t.media&&e.sourceMap===t.sourceMap)return;n(t=e)}else r()}}t.exports=function(t,e){(e=e||{}).singleton||"boolean"==typeof e.singleton||(e.singleton=r());var i=a(t=t||[],e);return function(t){if(t=t||[],"[object Array]"===Object.prototype.toString.call(t)){for(var n=0;n<i.length;n++){var r=c(i[n]);o[r].references--}for(var s=a(t,e),u=0;u<i.length;u++){var l=c(i[u]);0===o[l].references&&(o[l].updater(),o.splice(l,1))}i=s}}}},function(t,e){t.exports=".ck-content code{background-color:hsla(0,0%,78%,.3);padding:.15em;border-radius:2px}.ck.ck-editor__editable .ck-code_selected{background-color:hsla(0,0%,78%,.5)}"},function(t,e,i){"use strict";i.r(e),i.d(e,"Bold",(function(){return a})),i.d(e,"BoldEditing",(function(){return s})),i.d(e,"BoldUI",(function(){return c})),i.d(e,"Code",(function(){return p})),i.d(e,"CodeEditing",(function(){return d})),i.d(e,"CodeUI",(function(){return g})),i.d(e,"Italic",(function(){return b})),i.d(e,"ItalicEditing",(function(){return m})),i.d(e,"ItalicUI",(function(){return h})),i.d(e,"Strikethrough",(function(){return w})),i.d(e,"StrikethroughEditing",(function(){return f})),i.d(e,"StrikethroughUI",(function(){return v})),i.d(e,"Subscript",(function(){return E})),i.d(e,"SubscriptEditing",(function(){return x})),i.d(e,"SubscriptUI",(function(){return y})),i.d(e,"Superscript",(function(){return k})),i.d(e,"SuperscriptEditing",(function(){return S})),i.d(e,"SuperscriptUI",(function(){return T})),i.d(e,"Underline",(function(){return I})),i.d(e,"UnderlineEditing",(function(){return A})),i.d(e,"UnderlineUI",(function(){return C}));var n=i(0);class r extends n.Command{constructor(t,e){super(t),this.attributeKey=e}refresh(){const t=this.editor.model,e=t.document;this.value=this._getValueFromFirstAllowedNode(),this.isEnabled=t.schema.checkAttributeInSelection(e.selection,this.attributeKey)}execute(t={}){const e=this.editor.model,i=e.document.selection,n=void 0===t.forceValue?!this.value:t.forceValue;e.change(t=>{if(i.isCollapsed)n?t.setSelectionAttribute(this.attributeKey,!0):t.removeSelectionAttribute(this.attributeKey);else{const r=e.schema.getValidRanges(i.getRanges(),this.attributeKey);for(const e of r)n?t.setAttribute(this.attributeKey,n,e):t.removeAttribute(this.attributeKey,e)}})}_getValueFromFirstAllowedNode(){const t=this.editor.model,e=t.schema,i=t.document.selection;if(i.isCollapsed)return i.hasAttribute(this.attributeKey);for(const t of i.getRanges())for(const i of t.getItems())if(e.checkAttribute(i,this.attributeKey))return i.hasAttribute(this.attributeKey);return!1}}class s extends n.Plugin{static get pluginName(){return"BoldEditing"}init(){const t=this.editor;t.model.schema.extend("$text",{allowAttributes:"bold"}),t.model.schema.setAttributeProperties("bold",{isFormatting:!0,copyOnEnter:!0}),t.conversion.attributeToElement({model:"bold",view:"strong",upcastAlso:["b",t=>{const e=t.getStyle("font-weight");return e?"bold"==e||Number(e)>=600?{name:!0,styles:["font-weight"]}:void 0:null}]}),t.commands.add("bold",new r(t,"bold")),t.keystrokes.set("CTRL+B","bold")}}var o=i(1);class c extends n.Plugin{static get pluginName(){return"BoldUI"}init(){const t=this.editor,e=t.t;t.ui.componentFactory.add("bold",i=>{const n=t.commands.get("bold"),r=new o.ButtonView(i);return r.set({label:e("Bold"),icon:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M10.187 17H5.773c-.637 0-1.092-.138-1.364-.415-.273-.277-.409-.718-.409-1.323V4.738c0-.617.14-1.062.419-1.332.279-.27.73-.406 1.354-.406h4.68c.69 0 1.288.041 1.793.124.506.083.96.242 1.36.478.341.197.644.447.906.75a3.262 3.262 0 0 1 .808 2.162c0 1.401-.722 2.426-2.167 3.075C15.05 10.175 16 11.315 16 13.01a3.756 3.756 0 0 1-2.296 3.504 6.1 6.1 0 0 1-1.517.377c-.571.073-1.238.11-2 .11zm-.217-6.217H7v4.087h3.069c1.977 0 2.965-.69 2.965-2.072 0-.707-.256-1.22-.768-1.537-.512-.319-1.277-.478-2.296-.478zM7 5.13v3.619h2.606c.729 0 1.292-.067 1.69-.2a1.6 1.6 0 0 0 .91-.765c.165-.267.247-.566.247-.897 0-.707-.26-1.176-.778-1.409-.519-.232-1.31-.348-2.375-.348H7z"/></svg>',keystroke:"CTRL+B",tooltip:!0,isToggleable:!0}),r.bind("isOn","isEnabled").to(n,"value","isEnabled"),this.listenTo(r,"execute",()=>{t.execute("bold"),t.editing.view.focus()}),r})}}class a extends n.Plugin{static get requires(){return[s,c]}static get pluginName(){return"Bold"}}var u=i(2);const l="code";class d extends n.Plugin{static get pluginName(){return"CodeEditing"}static get requires(){return[u.TwoStepCaretMovement]}init(){const t=this.editor;t.model.schema.extend("$text",{allowAttributes:l}),t.model.schema.setAttributeProperties(l,{isFormatting:!0,copyOnEnter:!1}),t.conversion.attributeToElement({model:l,view:"code",upcastAlso:{styles:{"word-wrap":"break-word"}}}),t.commands.add(l,new r(t,l)),t.plugins.get(u.TwoStepCaretMovement).registerAttribute(l),Object(u.inlineHighlight)(t,l,"code","ck-code_selected")}}i(4);class g extends n.Plugin{static get pluginName(){return"CodeUI"}init(){const t=this.editor,e=t.t;t.ui.componentFactory.add("code",i=>{const n=t.commands.get("code"),r=new o.ButtonView(i);return r.set({label:e("Code"),icon:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="m12.5 5.7 5.2 3.9v1.3l-5.6 4c-.1.2-.3.2-.5.2-.3-.1-.6-.7-.6-1l.3-.4 4.7-3.5L11.5 7l-.2-.2c-.1-.3-.1-.6 0-.8.2-.2.5-.4.8-.4a.8.8 0 0 1 .4.1zm-5.2 0L2 9.6v1.3l5.6 4c.1.2.3.2.5.2.3-.1.7-.7.6-1 0-.1 0-.3-.2-.4l-5-3.5L8.2 7l.2-.2c.1-.3.1-.6 0-.8-.2-.2-.5-.4-.8-.4a.8.8 0 0 0-.3.1z"/></svg>',tooltip:!0,isToggleable:!0}),r.bind("isOn","isEnabled").to(n,"value","isEnabled"),this.listenTo(r,"execute",()=>{t.execute("code"),t.editing.view.focus()}),r})}}class p extends n.Plugin{static get requires(){return[d,g]}static get pluginName(){return"Code"}}class m extends n.Plugin{static get pluginName(){return"ItalicEditing"}init(){const t=this.editor;t.model.schema.extend("$text",{allowAttributes:"italic"}),t.model.schema.setAttributeProperties("italic",{isFormatting:!0,copyOnEnter:!0}),t.conversion.attributeToElement({model:"italic",view:"i",upcastAlso:["em",{styles:{"font-style":"italic"}}]}),t.commands.add("italic",new r(t,"italic")),t.keystrokes.set("CTRL+I","italic")}}class h extends n.Plugin{static get pluginName(){return"ItalicUI"}init(){const t=this.editor,e=t.t;t.ui.componentFactory.add("italic",i=>{const n=t.commands.get("italic"),r=new o.ButtonView(i);return r.set({label:e("Italic"),icon:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="m9.586 14.633.021.004c-.036.335.095.655.393.962.082.083.173.15.274.201h1.474a.6.6 0 1 1 0 1.2H5.304a.6.6 0 0 1 0-1.2h1.15c.474-.07.809-.182 1.005-.334.157-.122.291-.32.404-.597l2.416-9.55a1.053 1.053 0 0 0-.281-.823 1.12 1.12 0 0 0-.442-.296H8.15a.6.6 0 0 1 0-1.2h6.443a.6.6 0 1 1 0 1.2h-1.195c-.376.056-.65.155-.823.296-.215.175-.423.439-.623.79l-2.366 9.347z"/></svg>',keystroke:"CTRL+I",tooltip:!0,isToggleable:!0}),r.bind("isOn","isEnabled").to(n,"value","isEnabled"),this.listenTo(r,"execute",()=>{t.execute("italic"),t.editing.view.focus()}),r})}}class b extends n.Plugin{static get requires(){return[m,h]}static get pluginName(){return"Italic"}}class f extends n.Plugin{static get pluginName(){return"StrikethroughEditing"}init(){const t=this.editor;t.model.schema.extend("$text",{allowAttributes:"strikethrough"}),t.model.schema.setAttributeProperties("strikethrough",{isFormatting:!0,copyOnEnter:!0}),t.conversion.attributeToElement({model:"strikethrough",view:"s",upcastAlso:["del","strike",{styles:{"text-decoration":"line-through"}}]}),t.commands.add("strikethrough",new r(t,"strikethrough")),t.keystrokes.set("CTRL+SHIFT+X","strikethrough")}}class v extends n.Plugin{static get pluginName(){return"StrikethroughUI"}init(){const t=this.editor,e=t.t;t.ui.componentFactory.add("strikethrough",i=>{const n=t.commands.get("strikethrough"),r=new o.ButtonView(i);return r.set({label:e("Strikethrough"),icon:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M7 16.4c-.8-.4-1.5-.9-2.2-1.5a.6.6 0 0 1-.2-.5l.3-.6h1c1 1.2 2.1 1.7 3.7 1.7 1 0 1.8-.3 2.3-.6.6-.4.6-1.2.6-1.3.2-1.2-.9-2.1-.9-2.1h2.1c.3.7.4 1.2.4 1.7v.8l-.6 1.2c-.6.8-1.1 1-1.6 1.2a6 6 0 0 1-2.4.6c-1 0-1.8-.3-2.5-.6zM6.8 9 6 8.3c-.4-.5-.5-.8-.5-1.6 0-.7.1-1.3.5-1.8.4-.6 1-1 1.6-1.3a6.3 6.3 0 0 1 4.7 0 4 4 0 0 1 1.7 1l.3.7c0 .1.2.4-.2.7-.4.2-.9.1-1 0a3 3 0 0 0-1.2-1c-.4-.2-1-.3-2-.4-.7 0-1.4.2-2 .6-.8.6-1 .8-1 1.5 0 .8.5 1 1.2 1.5.6.4 1.1.7 1.9 1H6.8z"/><path d="M3 10.5V9h14v1.5z"/></svg>',keystroke:"CTRL+SHIFT+X",tooltip:!0,isToggleable:!0}),r.bind("isOn","isEnabled").to(n,"value","isEnabled"),this.listenTo(r,"execute",()=>{t.execute("strikethrough"),t.editing.view.focus()}),r})}}class w extends n.Plugin{static get requires(){return[f,v]}static get pluginName(){return"Strikethrough"}}class x extends n.Plugin{static get pluginName(){return"SubscriptEditing"}init(){const t=this.editor;t.model.schema.extend("$text",{allowAttributes:"subscript"}),t.model.schema.setAttributeProperties("subscript",{isFormatting:!0,copyOnEnter:!0}),t.conversion.attributeToElement({model:"subscript",view:"sub",upcastAlso:[{styles:{"vertical-align":"sub"}}]}),t.commands.add("subscript",new r(t,"subscript"))}}class y extends n.Plugin{static get pluginName(){return"SubscriptUI"}init(){const t=this.editor,e=t.t;t.ui.componentFactory.add("subscript",i=>{const n=t.commands.get("subscript"),r=new o.ButtonView(i);return r.set({label:e("Subscript"),icon:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="m7.03 10.349 3.818-3.819a.8.8 0 1 1 1.132 1.132L8.16 11.48l3.819 3.818a.8.8 0 1 1-1.132 1.132L7.03 12.61l-3.818 3.82a.8.8 0 1 1-1.132-1.132L5.9 11.48 2.08 7.662A.8.8 0 1 1 3.212 6.53l3.818 3.82zm8.147 7.829h2.549c.254 0 .447.05.58.152a.49.49 0 0 1 .201.413.54.54 0 0 1-.159.393c-.105.108-.266.162-.48.162h-3.594c-.245 0-.435-.066-.572-.197a.621.621 0 0 1-.205-.463c0-.114.044-.265.132-.453a1.62 1.62 0 0 1 .288-.444c.433-.436.824-.81 1.172-1.122.348-.312.597-.517.747-.615.267-.183.49-.368.667-.553.177-.185.312-.375.405-.57.093-.194.139-.384.139-.57a1.008 1.008 0 0 0-.554-.917 1.197 1.197 0 0 0-.56-.133c-.426 0-.761.182-1.005.546a2.332 2.332 0 0 0-.164.39 1.609 1.609 0 0 1-.258.488c-.096.114-.237.17-.423.17a.558.558 0 0 1-.405-.156.568.568 0 0 1-.161-.427c0-.218.05-.446.151-.683.101-.238.252-.453.452-.646s.454-.349.762-.467a2.998 2.998 0 0 1 1.081-.178c.498 0 .923.076 1.274.228a1.916 1.916 0 0 1 1.004 1.032 1.984 1.984 0 0 1-.156 1.794c-.2.32-.405.572-.613.754-.208.182-.558.468-1.048.857-.49.39-.826.691-1.008.906a2.703 2.703 0 0 0-.24.309z"/></svg>',tooltip:!0,isToggleable:!0}),r.bind("isOn","isEnabled").to(n,"value","isEnabled"),this.listenTo(r,"execute",()=>{t.execute("subscript"),t.editing.view.focus()}),r})}}class E extends n.Plugin{static get requires(){return[x,y]}static get pluginName(){return"Subscript"}}class S extends n.Plugin{static get pluginName(){return"SuperscriptEditing"}init(){const t=this.editor;t.model.schema.extend("$text",{allowAttributes:"superscript"}),t.model.schema.setAttributeProperties("superscript",{isFormatting:!0,copyOnEnter:!0}),t.conversion.attributeToElement({model:"superscript",view:"sup",upcastAlso:[{styles:{"vertical-align":"super"}}]}),t.commands.add("superscript",new r(t,"superscript"))}}class T extends n.Plugin{static get pluginName(){return"SuperscriptUI"}init(){const t=this.editor,e=t.t;t.ui.componentFactory.add("superscript",i=>{const n=t.commands.get("superscript"),r=new o.ButtonView(i);return r.set({label:e("Superscript"),icon:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M15.677 8.678h2.549c.254 0 .447.05.58.152a.49.49 0 0 1 .201.413.54.54 0 0 1-.159.393c-.105.108-.266.162-.48.162h-3.594c-.245 0-.435-.066-.572-.197a.621.621 0 0 1-.205-.463c0-.114.044-.265.132-.453a1.62 1.62 0 0 1 .288-.444c.433-.436.824-.81 1.172-1.122.348-.312.597-.517.747-.615.267-.183.49-.368.667-.553.177-.185.312-.375.405-.57.093-.194.139-.384.139-.57a1.008 1.008 0 0 0-.554-.917 1.197 1.197 0 0 0-.56-.133c-.426 0-.761.182-1.005.546a2.332 2.332 0 0 0-.164.39 1.609 1.609 0 0 1-.258.488c-.096.114-.237.17-.423.17a.558.558 0 0 1-.405-.156.568.568 0 0 1-.161-.427c0-.218.05-.446.151-.683.101-.238.252-.453.452-.646s.454-.349.762-.467a2.998 2.998 0 0 1 1.081-.178c.498 0 .923.076 1.274.228a1.916 1.916 0 0 1 1.004 1.032 1.984 1.984 0 0 1-.156 1.794c-.2.32-.405.572-.613.754-.208.182-.558.468-1.048.857-.49.39-.826.691-1.008.906a2.703 2.703 0 0 0-.24.309zM7.03 10.349l3.818-3.819a.8.8 0 1 1 1.132 1.132L8.16 11.48l3.819 3.818a.8.8 0 1 1-1.132 1.132L7.03 12.61l-3.818 3.82a.8.8 0 1 1-1.132-1.132L5.9 11.48 2.08 7.662A.8.8 0 1 1 3.212 6.53l3.818 3.82z"/></svg>',tooltip:!0,isToggleable:!0}),r.bind("isOn","isEnabled").to(n,"value","isEnabled"),this.listenTo(r,"execute",()=>{t.execute("superscript"),t.editing.view.focus()}),r})}}class k extends n.Plugin{static get requires(){return[S,T]}static get pluginName(){return"Superscript"}}class A extends n.Plugin{static get pluginName(){return"UnderlineEditing"}init(){const t=this.editor;t.model.schema.extend("$text",{allowAttributes:"underline"}),t.model.schema.setAttributeProperties("underline",{isFormatting:!0,copyOnEnter:!0}),t.conversion.attributeToElement({model:"underline",view:"u",upcastAlso:{styles:{"text-decoration":"underline"}}}),t.commands.add("underline",new r(t,"underline")),t.keystrokes.set("CTRL+U","underline")}}class C extends n.Plugin{static get pluginName(){return"UnderlineUI"}init(){const t=this.editor,e=t.t;t.ui.componentFactory.add("underline",i=>{const n=t.commands.get("underline"),r=new o.ButtonView(i);return r.set({label:e("Underline"),icon:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M3 18v-1.5h14V18zm2.2-8V3.6c0-.4.4-.6.8-.6.3 0 .7.2.7.6v6.2c0 2 1.3 2.8 3.2 2.8 1.9 0 3.4-.9 3.4-2.9V3.6c0-.3.4-.5.8-.5.3 0 .7.2.7.5V10c0 2.7-2.2 4-4.9 4-2.6 0-4.7-1.2-4.7-4z"/></svg>',keystroke:"CTRL+U",tooltip:!0,isToggleable:!0}),r.bind("isOn","isEnabled").to(n,"value","isEnabled"),this.listenTo(r,"execute",()=>{t.execute("underline"),t.editing.view.focus()}),r})}}class I extends n.Plugin{static get requires(){return[A,C]}static get pluginName(){return"Underline"}}}]);
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/block-quote.js b/core/assets/vendor/ckeditor5/block-quote.js
new file mode 100644
index 000000000000..8900c3492a41
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/block-quote.js
@@ -0,0 +1,5 @@
+/*!
+ * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md.
+ */
+!function(e){const t=e.en=e.en||{};t.dictionary=Object.assign(t.dictionary||{},{"Block quote":"Block quote"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})),window.CKEditor5=window.CKEditor5||{},window.CKEditor5.blockQuote=function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(o,r,function(t){return e[t]}.bind(null,r));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=9)}([function(e,t,n){e.exports=n(1)("./src/core.js")},function(e,t){e.exports=CKEditor5.dll},function(e,t,n){e.exports=n(1)("./src/utils.js")},function(e,t,n){e.exports=n(1)("./src/enter.js")},function(e,t,n){e.exports=n(1)("./src/typing.js")},function(e,t,n){e.exports=n(1)("./src/ui.js")},function(e,t,n){var o=n(7),r=n(8);"string"==typeof(r=r.__esModule?r.default:r)&&(r=[[e.i,r,""]]);var i={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};o(r,i);e.exports=r.locals||{}},function(e,t,n){"use strict";var o,r=function(){return void 0===o&&(o=Boolean(window&&document&&document.all&&!window.atob)),o},i=function(){var e={};return function(t){if(void 0===e[t]){var n=document.querySelector(t);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}e[t]=n}return e[t]}}(),c=[];function s(e){for(var t=-1,n=0;n<c.length;n++)if(c[n].identifier===e){t=n;break}return t}function l(e,t){for(var n={},o=[],r=0;r<e.length;r++){var i=e[r],l=t.base?i[0]+t.base:i[0],u=n[l]||0,a="".concat(l," ").concat(u);n[l]=u+1;var d=s(a),f={css:i[1],media:i[2],sourceMap:i[3]};-1!==d?(c[d].references++,c[d].updater(f)):c.push({identifier:a,updater:b(f,t),references:1}),o.push(a)}return o}function u(e){var t=document.createElement("style"),o=e.attributes||{};if(void 0===o.nonce){var r=n.nc;r&&(o.nonce=r)}if(Object.keys(o).forEach((function(e){t.setAttribute(e,o[e])})),"function"==typeof e.insert)e.insert(t);else{var c=i(e.insert||"head");if(!c)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");c.appendChild(t)}return t}var a,d=(a=[],function(e,t){return a[e]=t,a.filter(Boolean).join("\n")});function f(e,t,n,o){var r=n?"":o.media?"@media ".concat(o.media," {").concat(o.css,"}"):o.css;if(e.styleSheet)e.styleSheet.cssText=d(t,r);else{var i=document.createTextNode(r),c=e.childNodes;c[t]&&e.removeChild(c[t]),c.length?e.insertBefore(i,c[t]):e.appendChild(i)}}function p(e,t,n){var o=n.css,r=n.media,i=n.sourceMap;if(r?e.setAttribute("media",r):e.removeAttribute("media"),i&&"undefined"!=typeof btoa&&(o+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i))))," */")),e.styleSheet)e.styleSheet.cssText=o;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(o))}}var m=null,h=0;function b(e,t){var n,o,r;if(t.singleton){var i=h++;n=m||(m=u(t)),o=f.bind(null,n,i,!1),r=f.bind(null,n,i,!0)}else n=u(t),o=p.bind(null,n,t),r=function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(n)};return o(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;o(e=t)}else r()}}e.exports=function(e,t){(t=t||{}).singleton||"boolean"==typeof t.singleton||(t.singleton=r());var n=l(e=e||[],t);return function(e){if(e=e||[],"[object Array]"===Object.prototype.toString.call(e)){for(var o=0;o<n.length;o++){var r=s(n[o]);c[r].references--}for(var i=l(e,t),u=0;u<n.length;u++){var a=s(n[u]);0===c[a].references&&(c[a].updater(),c.splice(a,1))}n=i}}}},function(e,t){e.exports=".ck-content blockquote{overflow:hidden;padding-right:1.5em;padding-left:1.5em;margin-left:0;margin-right:0;font-style:italic;border-left:5px solid #ccc}.ck-content[dir=rtl] blockquote{border-left:0;border-right:5px solid #ccc}"},function(e,t,n){"use strict";n.r(t),n.d(t,"BlockQuote",(function(){return m})),n.d(t,"BlockQuoteEditing",(function(){return d})),n.d(t,"BlockQuoteUI",(function(){return p}));var o=n(0),r=n(3),i=n(4),c=n(2);class s extends o.Command{refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(e={}){const t=this.editor.model,n=t.schema,o=t.document.selection,r=Array.from(o.getSelectedBlocks()),i=void 0===e.forceValue?!this.value:e.forceValue;t.change(e=>{if(i){const t=r.filter(e=>l(e)||a(n,e));this._applyQuote(e,t)}else this._removeQuote(e,r.filter(l))})}_getValue(){const e=this.editor.model.document.selection,t=Object(c.first)(e.getSelectedBlocks());return!(!t||!l(t))}_checkEnabled(){if(this.value)return!0;const e=this.editor.model.document.selection,t=this.editor.model.schema,n=Object(c.first)(e.getSelectedBlocks());return!!n&&a(t,n)}_removeQuote(e,t){u(e,t).reverse().forEach(t=>{if(t.start.isAtStart&&t.end.isAtEnd)return void e.unwrap(t.start.parent);if(t.start.isAtStart){const n=e.createPositionBefore(t.start.parent);return void e.move(t,n)}t.end.isAtEnd||e.split(t.end);const n=e.createPositionAfter(t.end.parent);e.move(t,n)})}_applyQuote(e,t){const n=[];u(e,t).reverse().forEach(t=>{let o=l(t.start);o||(o=e.createElement("blockQuote"),e.wrap(t,o)),n.push(o)}),n.reverse().reduce((t,n)=>t.nextSibling==n?(e.merge(e.createPositionAfter(t)),t):n)}}function l(e){return"blockQuote"==e.parent.name?e.parent:null}function u(e,t){let n,o=0;const r=[];for(;o<t.length;){const i=t[o],c=t[o+1];n||(n=e.createPositionBefore(i)),c&&i.nextSibling==c||(r.push(e.createRange(n,e.createPositionAfter(i))),n=null),o++}return r}function a(e,t){const n=e.checkChild(t.parent,"blockQuote"),o=e.checkChild(["$root","blockQuote"],t);return n&&o}class d extends o.Plugin{static get pluginName(){return"BlockQuoteEditing"}static get requires(){return[r.Enter,i.Delete]}init(){const e=this.editor,t=e.model.schema;e.commands.add("blockQuote",new s(e)),t.register("blockQuote",{allowWhere:"$block",allowContentOf:"$root"}),e.conversion.elementToElement({model:"blockQuote",view:"blockquote"}),e.model.document.registerPostFixer(n=>{const o=e.model.document.differ.getChanges();for(const e of o)if("insert"==e.type){const o=e.position.nodeAfter;if(!o)continue;if(o.is("element","blockQuote")&&o.isEmpty)return n.remove(o),!0;if(o.is("element","blockQuote")&&!t.checkChild(e.position,o))return n.unwrap(o),!0;if(o.is("element")){const e=n.createRangeIn(o);for(const o of e.getItems())if(o.is("element","blockQuote")&&!t.checkChild(n.createPositionBefore(o),o))return n.unwrap(o),!0}}else if("remove"==e.type){const t=e.position.parent;if(t.is("element","blockQuote")&&t.isEmpty)return n.remove(t),!0}return!1});const n=this.editor.editing.view.document,o=e.model.document.selection,r=e.commands.get("blockQuote");this.listenTo(n,"enter",(t,n)=>{if(!o.isCollapsed||!r.value)return;o.getLastPosition().parent.isEmpty&&(e.execute("blockQuote"),e.editing.view.scrollToTheSelection(),n.preventDefault(),t.stop())},{context:"blockquote"}),this.listenTo(n,"delete",(t,n)=>{if("backward"!=n.direction||!o.isCollapsed||!r.value)return;const i=o.getLastPosition().parent;i.isEmpty&&!i.previousSibling&&(e.execute("blockQuote"),e.editing.view.scrollToTheSelection(),n.preventDefault(),t.stop())},{context:"blockquote"})}}var f=n(5);n(6);class p extends o.Plugin{static get pluginName(){return"BlockQuoteUI"}init(){const e=this.editor,t=e.t;e.ui.componentFactory.add("blockQuote",n=>{const r=e.commands.get("blockQuote"),i=new f.ButtonView(n);return i.set({label:t("Block quote"),icon:o.icons.quote,tooltip:!0,isToggleable:!0}),i.bind("isOn","isEnabled").to(r,"value","isEnabled"),this.listenTo(i,"execute",()=>{e.execute("blockQuote"),e.editing.view.focus()}),i})}}class m extends o.Plugin{static get requires(){return[d,p]}static get pluginName(){return"BlockQuote"}}}]);
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/ckeditor5-dll.js b/core/assets/vendor/ckeditor5/ckeditor5-dll.js
new file mode 100644
index 000000000000..878b81535de0
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/ckeditor5-dll.js
@@ -0,0 +1,5 @@
+/*!
+ * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md.
+ */
+!function(e){const t=e.en=e.en||{};t.dictionary=Object.assign(t.dictionary||{},{"%0 of %1":"%0 of %1",Aquamarine:"Aquamarine",Black:"Black",Blue:"Blue",Cancel:"Cancel","Dim grey":"Dim grey","Dropdown toolbar":"Dropdown toolbar","Edit block":"Edit block","Editor toolbar":"Editor toolbar",Green:"Green",Grey:"Grey","Insert paragraph after block":"Insert paragraph after block","Insert paragraph before block":"Insert paragraph before block","Light blue":"Light blue","Light green":"Light green","Light grey":"Light grey",Next:"Next",Orange:"Orange",Previous:"Previous",Purple:"Purple",Red:"Red",Redo:"Redo","Remove color":"Remove color","Restore default":"Restore default","Rich Text Editor":"Rich Text Editor","Rich Text Editor, %0":"Rich Text Editor, %0",Save:"Save","Select all":"Select all","Show more items":"Show more items",Turquoise:"Turquoise",Undo:"Undo","Upload in progress":"Upload in progress",White:"White","Widget toolbar":"Widget toolbar",Yellow:"Yellow"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})),window.CKEditor5=window.CKEditor5||{},window.CKEditor5.dll=function(e){var t={};function o(i){if(t[i])return t[i].exports;var s=t[i]={i:i,l:!1,exports:{}};return e[i].call(s.exports,s,s.exports,o),s.l=!0,s.exports}return o.m=e,o.c=t,o.d=function(e,t,i){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(o.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)o.d(i,s,function(t){return e[t]}.bind(null,s));return i},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=0)}({"./node_modules/lodash-es/_ListCache.js":function(e,t,o){"use strict";var i=function(){this.__data__=[],this.size=0},s=o("./node_modules/lodash-es/eq.js");var r=function(e,t){for(var o=e.length;o--;)if(Object(s.a)(e[o][0],t))return o;return-1},n=Array.prototype.splice;var a=function(e){var t=this.__data__,o=r(t,e);return!(o<0)&&(o==t.length-1?t.pop():n.call(t,o,1),--this.size,!0)};var c=function(e){var t=this.__data__,o=r(t,e);return o<0?void 0:t[o][1]};var l=function(e){return r(this.__data__,e)>-1};var d=function(e,t){var o=this.__data__,i=r(o,e);return i<0?(++this.size,o.push([e,t])):o[i][1]=t,this};function u(e){var t=-1,o=null==e?0:e.length;for(this.clear();++t<o;){var i=e[t];this.set(i[0],i[1])}}u.prototype.clear=i,u.prototype.delete=a,u.prototype.get=c,u.prototype.has=l,u.prototype.set=d;t.a=u},"./node_modules/lodash-es/_Map.js":function(e,t,o){"use strict";var i=o("./node_modules/lodash-es/_getNative.js"),s=o("./node_modules/lodash-es/_root.js"),r=Object(i.a)(s.a,"Map");t.a=r},"./node_modules/lodash-es/_MapCache.js":function(e,t,o){"use strict";var i=o("./node_modules/lodash-es/_getNative.js"),s=Object(i.a)(Object,"create");var r=function(){this.__data__=s?s(null):{},this.size=0};var n=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},a=Object.prototype.hasOwnProperty;var c=function(e){var t=this.__data__;if(s){var o=t[e];return"__lodash_hash_undefined__"===o?void 0:o}return a.call(t,e)?t[e]:void 0},l=Object.prototype.hasOwnProperty;var d=function(e){var t=this.__data__;return s?void 0!==t[e]:l.call(t,e)};var u=function(e,t){var o=this.__data__;return this.size+=this.has(e)?0:1,o[e]=s&&void 0===t?"__lodash_hash_undefined__":t,this};function h(e){var t=-1,o=null==e?0:e.length;for(this.clear();++t<o;){var i=e[t];this.set(i[0],i[1])}}h.prototype.clear=r,h.prototype.delete=n,h.prototype.get=c,h.prototype.has=d,h.prototype.set=u;var p=h,g=o("./node_modules/lodash-es/_ListCache.js"),f=o("./node_modules/lodash-es/_Map.js");var m=function(){this.size=0,this.__data__={hash:new p,map:new(f.a||g.a),string:new p}};var k=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e};var b=function(e,t){var o=e.__data__;return k(t)?o["string"==typeof t?"string":"hash"]:o.map};var _=function(e){var t=b(this,e).delete(e);return this.size-=t?1:0,t};var w=function(e){return b(this,e).get(e)};var v=function(e){return b(this,e).has(e)};var y=function(e,t){var o=b(this,e),i=o.size;return o.set(e,t),this.size+=o.size==i?0:1,this};function j(e){var t=-1,o=null==e?0:e.length;for(this.clear();++t<o;){var i=e[t];this.set(i[0],i[1])}}j.prototype.clear=m,j.prototype.delete=_,j.prototype.get=w,j.prototype.has=v,j.prototype.set=y;t.a=j},"./node_modules/lodash-es/_Stack.js":function(e,t,o){"use strict";var i=o("./node_modules/lodash-es/_ListCache.js");var s=function(){this.__data__=new i.a,this.size=0};var r=function(e){var t=this.__data__,o=t.delete(e);return this.size=t.size,o};var n=function(e){return this.__data__.get(e)};var a=function(e){return this.__data__.has(e)},c=o("./node_modules/lodash-es/_Map.js"),l=o("./node_modules/lodash-es/_MapCache.js");var d=function(e,t){var o=this.__data__;if(o instanceof i.a){var s=o.__data__;if(!c.a||s.length<199)return s.push([e,t]),this.size=++o.size,this;o=this.__data__=new l.a(s)}return o.set(e,t),this.size=o.size,this};function u(e){var t=this.__data__=new i.a(e);this.size=t.size}u.prototype.clear=s,u.prototype.delete=r,u.prototype.get=n,u.prototype.has=a,u.prototype.set=d;t.a=u},"./node_modules/lodash-es/_Symbol.js":function(e,t,o){"use strict";var i=o("./node_modules/lodash-es/_root.js").a.Symbol;t.a=i},"./node_modules/lodash-es/_Uint8Array.js":function(e,t,o){"use strict";var i=o("./node_modules/lodash-es/_root.js").a.Uint8Array;t.a=i},"./node_modules/lodash-es/_arrayLikeKeys.js":function(e,t,o){"use strict";var i=function(e,t){for(var o=-1,i=Array(e);++o<e;)i[o]=t(o);return i},s=o("./node_modules/lodash-es/isArguments.js"),r=o("./node_modules/lodash-es/isArray.js"),n=o("./node_modules/lodash-es/isBuffer.js"),a=o("./node_modules/lodash-es/_isIndex.js"),c=o("./node_modules/lodash-es/isTypedArray.js"),l=Object.prototype.hasOwnProperty;t.a=function(e,t){var o=Object(r.a)(e),d=!o&&Object(s.a)(e),u=!o&&!d&&Object(n.a)(e),h=!o&&!d&&!u&&Object(c.a)(e),p=o||d||u||h,g=p?i(e.length,String):[],f=g.length;for(var m in e)!t&&!l.call(e,m)||p&&("length"==m||u&&("offset"==m||"parent"==m)||h&&("buffer"==m||"byteLength"==m||"byteOffset"==m)||Object(a.a)(m,f))||g.push(m);return g}},"./node_modules/lodash-es/_arrayPush.js":function(e,t,o){"use strict";t.a=function(e,t){for(var o=-1,i=t.length,s=e.length;++o<i;)e[s+o]=t[o];return e}},"./node_modules/lodash-es/_assignValue.js":function(e,t,o){"use strict";var i=o("./node_modules/lodash-es/_baseAssignValue.js"),s=o("./node_modules/lodash-es/eq.js"),r=Object.prototype.hasOwnProperty;t.a=function(e,t,o){var n=e[t];r.call(e,t)&&Object(s.a)(n,o)&&(void 0!==o||t in e)||Object(i.a)(e,t,o)}},"./node_modules/lodash-es/_baseAssignValue.js":function(e,t,o){"use strict";var i=o("./node_modules/lodash-es/_defineProperty.js");t.a=function(e,t,o){"__proto__"==t&&i.a?Object(i.a)(e,t,{configurable:!0,enumerable:!0,value:o,writable:!0}):e[t]=o}},"./node_modules/lodash-es/_baseClone.js":function(e,t,o){"use strict";var i=o("./node_modules/lodash-es/_Stack.js");var s=function(e,t){for(var o=-1,i=null==e?0:e.length;++o<i&&!1!==t(e[o],o,e););return e},r=o("./node_modules/lodash-es/_assignValue.js"),n=o("./node_modules/lodash-es/_copyObject.js"),a=o("./node_modules/lodash-es/keys.js");var c=function(e,t){return e&&Object(n.a)(t,Object(a.a)(t),e)},l=o("./node_modules/lodash-es/keysIn.js");var d=function(e,t){return e&&Object(n.a)(t,Object(l.a)(t),e)},u=o("./node_modules/lodash-es/_cloneBuffer.js"),h=o("./node_modules/lodash-es/_copyArray.js"),p=o("./node_modules/lodash-es/_getSymbols.js");var g=function(e,t){return Object(n.a)(e,Object(p.a)(e),t)},f=o("./node_modules/lodash-es/_arrayPush.js"),m=o("./node_modules/lodash-es/_getPrototype.js"),k=o("./node_modules/lodash-es/stubArray.js"),b=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)Object(f.a)(t,Object(p.a)(e)),e=Object(m.a)(e);return t}:k.a;var _=function(e,t){return Object(n.a)(e,b(e),t)},w=o("./node_modules/lodash-es/_getAllKeys.js"),v=o("./node_modules/lodash-es/_baseGetAllKeys.js");var y=function(e){return Object(v.a)(e,l.a,b)},j=o("./node_modules/lodash-es/_getTag.js"),x=Object.prototype.hasOwnProperty;var P=function(e){var t=e.length,o=new e.constructor(t);return t&&"string"==typeof e[0]&&x.call(e,"index")&&(o.index=e.index,o.input=e.input),o},O=o("./node_modules/lodash-es/_cloneArrayBuffer.js");var A=function(e,t){var o=t?Object(O.a)(e.buffer):e.buffer;return new e.constructor(o,e.byteOffset,e.byteLength)},T=/\w*$/;var C=function(e){var t=new e.constructor(e.source,T.exec(e));return t.lastIndex=e.lastIndex,t},E=o("./node_modules/lodash-es/_Symbol.js"),S=E.a?E.a.prototype:void 0,R=S?S.valueOf:void 0;var M=function(e){return R?Object(R.call(e)):{}},N=o("./node_modules/lodash-es/_cloneTypedArray.js");var I=function(e,t,o){var i=e.constructor;switch(t){case"[object ArrayBuffer]":return Object(O.a)(e);case"[object Boolean]":case"[object Date]":return new i(+e);case"[object DataView]":return A(e,o);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return Object(N.a)(e,o);case"[object Map]":return new i;case"[object Number]":case"[object String]":return new i(e);case"[object RegExp]":return C(e);case"[object Set]":return new i;case"[object Symbol]":return M(e)}},z=o("./node_modules/lodash-es/_initCloneObject.js"),V=o("./node_modules/lodash-es/isArray.js"),D=o("./node_modules/lodash-es/isBuffer.js"),B=o("./node_modules/lodash-es/isObjectLike.js");var F=function(e){return Object(B.a)(e)&&"[object Map]"==Object(j.a)(e)},L=o("./node_modules/lodash-es/_baseUnary.js"),W=o("./node_modules/lodash-es/_nodeUtil.js"),H=W.a&&W.a.isMap,q=H?Object(L.a)(H):F,$=o("./node_modules/lodash-es/isObject.js");var U=function(e){return Object(B.a)(e)&&"[object Set]"==Object(j.a)(e)},K=W.a&&W.a.isSet,G=K?Object(L.a)(K):U,J={};J["[object Arguments]"]=J["[object Array]"]=J["[object ArrayBuffer]"]=J["[object DataView]"]=J["[object Boolean]"]=J["[object Date]"]=J["[object Float32Array]"]=J["[object Float64Array]"]=J["[object Int8Array]"]=J["[object Int16Array]"]=J["[object Int32Array]"]=J["[object Map]"]=J["[object Number]"]=J["[object Object]"]=J["[object RegExp]"]=J["[object Set]"]=J["[object String]"]=J["[object Symbol]"]=J["[object Uint8Array]"]=J["[object Uint8ClampedArray]"]=J["[object Uint16Array]"]=J["[object Uint32Array]"]=!0,J["[object Error]"]=J["[object Function]"]=J["[object WeakMap]"]=!1;t.a=function e(t,o,n,p,f,m){var k,b=1&o,v=2&o,x=4&o;if(n&&(k=f?n(t,p,f,m):n(t)),void 0!==k)return k;if(!Object($.a)(t))return t;var O=Object(V.a)(t);if(O){if(k=P(t),!b)return Object(h.a)(t,k)}else{var A=Object(j.a)(t),T="[object Function]"==A||"[object GeneratorFunction]"==A;if(Object(D.a)(t))return Object(u.a)(t,b);if("[object Object]"==A||"[object Arguments]"==A||T&&!f){if(k=v||T?{}:Object(z.a)(t),!b)return v?_(t,d(k,t)):g(t,c(k,t))}else{if(!J[A])return f?t:{};k=I(t,A,b)}}m||(m=new i.a);var C=m.get(t);if(C)return C;m.set(t,k),G(t)?t.forEach((function(i){k.add(e(i,o,n,i,t,m))})):q(t)&&t.forEach((function(i,s){k.set(s,e(i,o,n,s,t,m))}));var E=x?v?y:w.a:v?l.a:a.a,S=O?void 0:E(t);return s(S||t,(function(i,s){S&&(i=t[s=i]),Object(r.a)(k,s,e(i,o,n,s,t,m))})),k}},"./node_modules/lodash-es/_baseGetAllKeys.js":function(e,t,o){"use strict";var i=o("./node_modules/lodash-es/_arrayPush.js"),s=o("./node_modules/lodash-es/isArray.js");t.a=function(e,t,o){var r=t(e);return Object(s.a)(e)?r:Object(i.a)(r,o(e))}},"./node_modules/lodash-es/_baseGetTag.js":function(e,t,o){"use strict";var i=o("./node_modules/lodash-es/_Symbol.js"),s=Object.prototype,r=s.hasOwnProperty,n=s.toString,a=i.a?i.a.toStringTag:void 0;var c=function(e){var t=r.call(e,a),o=e[a];try{e[a]=void 0;var i=!0}catch(e){}var s=n.call(e);return i&&(t?e[a]=o:delete e[a]),s},l=Object.prototype.toString;var d=function(e){return l.call(e)},u=i.a?i.a.toStringTag:void 0;t.a=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":u&&u in Object(e)?c(e):d(e)}},"./node_modules/lodash-es/_baseIsEqual.js":function(e,t,o){"use strict";var i=o("./node_modules/lodash-es/_Stack.js"),s=o("./node_modules/lodash-es/_MapCache.js");var r=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this};var n=function(e){return this.__data__.has(e)};function a(e){var t=-1,o=null==e?0:e.length;for(this.__data__=new s.a;++t<o;)this.add(e[t])}a.prototype.add=a.prototype.push=r,a.prototype.has=n;var c=a;var l=function(e,t){for(var o=-1,i=null==e?0:e.length;++o<i;)if(t(e[o],o,e))return!0;return!1};var d=function(e,t){return e.has(t)};var u=function(e,t,o,i,s,r){var n=1&o,a=e.length,u=t.length;if(a!=u&&!(n&&u>a))return!1;var h=r.get(e),p=r.get(t);if(h&&p)return h==t&&p==e;var g=-1,f=!0,m=2&o?new c:void 0;for(r.set(e,t),r.set(t,e);++g<a;){var k=e[g],b=t[g];if(i)var _=n?i(b,k,g,t,e,r):i(k,b,g,e,t,r);if(void 0!==_){if(_)continue;f=!1;break}if(m){if(!l(t,(function(e,t){if(!d(m,t)&&(k===e||s(k,e,o,i,r)))return m.push(t)}))){f=!1;break}}else if(k!==b&&!s(k,b,o,i,r)){f=!1;break}}return r.delete(e),r.delete(t),f},h=o("./node_modules/lodash-es/_Symbol.js"),p=o("./node_modules/lodash-es/_Uint8Array.js"),g=o("./node_modules/lodash-es/eq.js");var f=function(e){var t=-1,o=Array(e.size);return e.forEach((function(e,i){o[++t]=[i,e]})),o};var m=function(e){var t=-1,o=Array(e.size);return e.forEach((function(e){o[++t]=e})),o},k=h.a?h.a.prototype:void 0,b=k?k.valueOf:void 0;var _=function(e,t,o,i,s,r,n){switch(o){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!r(new p.a(e),new p.a(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return Object(g.a)(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var a=f;case"[object Set]":var c=1&i;if(a||(a=m),e.size!=t.size&&!c)return!1;var l=n.get(e);if(l)return l==t;i|=2,n.set(e,t);var d=u(a(e),a(t),i,s,r,n);return n.delete(e),d;case"[object Symbol]":if(b)return b.call(e)==b.call(t)}return!1},w=o("./node_modules/lodash-es/_getAllKeys.js"),v=Object.prototype.hasOwnProperty;var y=function(e,t,o,i,s,r){var n=1&o,a=Object(w.a)(e),c=a.length;if(c!=Object(w.a)(t).length&&!n)return!1;for(var l=c;l--;){var d=a[l];if(!(n?d in t:v.call(t,d)))return!1}var u=r.get(e),h=r.get(t);if(u&&h)return u==t&&h==e;var p=!0;r.set(e,t),r.set(t,e);for(var g=n;++l<c;){var f=e[d=a[l]],m=t[d];if(i)var k=n?i(m,f,d,t,e,r):i(f,m,d,e,t,r);if(!(void 0===k?f===m||s(f,m,o,i,r):k)){p=!1;break}g||(g="constructor"==d)}if(p&&!g){var b=e.constructor,_=t.constructor;b==_||!("constructor"in e)||!("constructor"in t)||"function"==typeof b&&b instanceof b&&"function"==typeof _&&_ instanceof _||(p=!1)}return r.delete(e),r.delete(t),p},j=o("./node_modules/lodash-es/_getTag.js"),x=o("./node_modules/lodash-es/isArray.js"),P=o("./node_modules/lodash-es/isBuffer.js"),O=o("./node_modules/lodash-es/isTypedArray.js"),A="[object Object]",T=Object.prototype.hasOwnProperty;var C=function(e,t,o,s,r,n){var a=Object(x.a)(e),c=Object(x.a)(t),l=a?"[object Array]":Object(j.a)(e),d=c?"[object Array]":Object(j.a)(t),h=(l="[object Arguments]"==l?A:l)==A,p=(d="[object Arguments]"==d?A:d)==A,g=l==d;if(g&&Object(P.a)(e)){if(!Object(P.a)(t))return!1;a=!0,h=!1}if(g&&!h)return n||(n=new i.a),a||Object(O.a)(e)?u(e,t,o,s,r,n):_(e,t,l,o,s,r,n);if(!(1&o)){var f=h&&T.call(e,"__wrapped__"),m=p&&T.call(t,"__wrapped__");if(f||m){var k=f?e.value():e,b=m?t.value():t;return n||(n=new i.a),r(k,b,o,s,n)}}return!!g&&(n||(n=new i.a),y(e,t,o,s,r,n))},E=o("./node_modules/lodash-es/isObjectLike.js");t.a=function e(t,o,i,s,r){return t===o||(null==t||null==o||!Object(E.a)(t)&&!Object(E.a)(o)?t!=t&&o!=o:C(t,o,i,s,e,r))}},"./node_modules/lodash-es/_baseUnary.js":function(e,t,o){"use strict";t.a=function(e){return function(t){return e(t)}}},"./node_modules/lodash-es/_cloneArrayBuffer.js":function(e,t,o){"use strict";var i=o("./node_modules/lodash-es/_Uint8Array.js");t.a=function(e){var t=new e.constructor(e.byteLength);return new i.a(t).set(new i.a(e)),t}},"./node_modules/lodash-es/_cloneBuffer.js":function(e,t,o){"use strict";(function(e){var i=o("./node_modules/lodash-es/_root.js"),s="object"==typeof exports&&exports&&!exports.nodeType&&exports,r=s&&"object"==typeof e&&e&&!e.nodeType&&e,n=r&&r.exports===s?i.a.Buffer:void 0,a=n?n.allocUnsafe:void 0;t.a=function(e,t){if(t)return e.slice();var o=e.length,i=a?a(o):new e.constructor(o);return e.copy(i),i}}).call(this,o("./node_modules/webpack/buildin/harmony-module.js")(e))},"./node_modules/lodash-es/_cloneTypedArray.js":function(e,t,o){"use strict";var i=o("./node_modules/lodash-es/_cloneArrayBuffer.js");t.a=function(e,t){var o=t?Object(i.a)(e.buffer):e.buffer;return new e.constructor(o,e.byteOffset,e.length)}},"./node_modules/lodash-es/_copyArray.js":function(e,t,o){"use strict";t.a=function(e,t){var o=-1,i=e.length;for(t||(t=Array(i));++o<i;)t[o]=e[o];return t}},"./node_modules/lodash-es/_copyObject.js":function(e,t,o){"use strict";var i=o("./node_modules/lodash-es/_assignValue.js"),s=o("./node_modules/lodash-es/_baseAssignValue.js");t.a=function(e,t,o,r){var n=!o;o||(o={});for(var a=-1,c=t.length;++a<c;){var l=t[a],d=r?r(o[l],e[l],l,o,e):void 0;void 0===d&&(d=e[l]),n?Object(s.a)(o,l,d):Object(i.a)(o,l,d)}return o}},"./node_modules/lodash-es/_createAssigner.js":function(e,t,o){"use strict";var i=function(e){return e};var s=function(e,t,o){switch(o.length){case 0:return e.call(t);case 1:return e.call(t,o[0]);case 2:return e.call(t,o[0],o[1]);case 3:return e.call(t,o[0],o[1],o[2])}return e.apply(t,o)},r=Math.max;var n=function(e,t,o){return t=r(void 0===t?e.length-1:t,0),function(){for(var i=arguments,n=-1,a=r(i.length-t,0),c=Array(a);++n<a;)c[n]=i[t+n];n=-1;for(var l=Array(t+1);++n<t;)l[n]=i[n];return l[t]=o(c),s(e,this,l)}};var a=function(e){return function(){return e}},c=o("./node_modules/lodash-es/_defineProperty.js"),l=c.a?function(e,t){return Object(c.a)(e,"toString",{configurable:!0,enumerable:!1,value:a(t),writable:!0})}:i,d=Date.now;var u=function(e){var t=0,o=0;return function(){var i=d(),s=16-(i-o);if(o=i,s>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(l);var h=function(e,t){return u(n(e,t,i),e+"")},p=o("./node_modules/lodash-es/eq.js"),g=o("./node_modules/lodash-es/isArrayLike.js"),f=o("./node_modules/lodash-es/_isIndex.js"),m=o("./node_modules/lodash-es/isObject.js");var k=function(e,t,o){if(!Object(m.a)(o))return!1;var i=typeof t;return!!("number"==i?Object(g.a)(o)&&Object(f.a)(t,o.length):"string"==i&&t in o)&&Object(p.a)(o[t],e)};t.a=function(e){return h((function(t,o){var i=-1,s=o.length,r=s>1?o[s-1]:void 0,n=s>2?o[2]:void 0;for(r=e.length>3&&"function"==typeof r?(s--,r):void 0,n&&k(o[0],o[1],n)&&(r=s<3?void 0:r,s=1),t=Object(t);++i<s;){var a=o[i];a&&e(t,a,i,r)}return t}))}},"./node_modules/lodash-es/_defineProperty.js":function(e,t,o){"use strict";var i=o("./node_modules/lodash-es/_getNative.js"),s=function(){try{var e=Object(i.a)(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();t.a=s},"./node_modules/lodash-es/_freeGlobal.js":function(e,t,o){"use strict";(function(e){var o="object"==typeof e&&e&&e.Object===Object&&e;t.a=o}).call(this,o("./node_modules/webpack/buildin/global.js"))},"./node_modules/lodash-es/_getAllKeys.js":function(e,t,o){"use strict";var i=o("./node_modules/lodash-es/_baseGetAllKeys.js"),s=o("./node_modules/lodash-es/_getSymbols.js"),r=o("./node_modules/lodash-es/keys.js");t.a=function(e){return Object(i.a)(e,r.a,s.a)}},"./node_modules/lodash-es/_getNative.js":function(e,t,o){"use strict";var i,s=o("./node_modules/lodash-es/isFunction.js"),r=o("./node_modules/lodash-es/_root.js").a["__core-js_shared__"],n=(i=/[^.]+$/.exec(r&&r.keys&&r.keys.IE_PROTO||""))?"Symbol(src)_1."+i:"";var a=function(e){return!!n&&n in e},c=o("./node_modules/lodash-es/isObject.js"),l=o("./node_modules/lodash-es/_toSource.js"),d=/^\[object .+?Constructor\]$/,u=Function.prototype,h=Object.prototype,p=u.toString,g=h.hasOwnProperty,f=RegExp("^"+p.call(g).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");var m=function(e){return!(!Object(c.a)(e)||a(e))&&(Object(s.a)(e)?f:d).test(Object(l.a)(e))};var k=function(e,t){return null==e?void 0:e[t]};t.a=function(e,t){var o=k(e,t);return m(o)?o:void 0}},"./node_modules/lodash-es/_getPrototype.js":function(e,t,o){"use strict";var i=o("./node_modules/lodash-es/_overArg.js"),s=Object(i.a)(Object.getPrototypeOf,Object);t.a=s},"./node_modules/lodash-es/_getSymbols.js":function(e,t,o){"use strict";var i=function(e,t){for(var o=-1,i=null==e?0:e.length,s=0,r=[];++o<i;){var n=e[o];t(n,o,e)&&(r[s++]=n)}return r},s=o("./node_modules/lodash-es/stubArray.js"),r=Object.prototype.propertyIsEnumerable,n=Object.getOwnPropertySymbols,a=n?function(e){return null==e?[]:(e=Object(e),i(n(e),(function(t){return r.call(e,t)})))}:s.a;t.a=a},"./node_modules/lodash-es/_getTag.js":function(e,t,o){"use strict";var i=o("./node_modules/lodash-es/_getNative.js"),s=o("./node_modules/lodash-es/_root.js"),r=Object(i.a)(s.a,"DataView"),n=o("./node_modules/lodash-es/_Map.js"),a=Object(i.a)(s.a,"Promise"),c=Object(i.a)(s.a,"Set"),l=Object(i.a)(s.a,"WeakMap"),d=o("./node_modules/lodash-es/_baseGetTag.js"),u=o("./node_modules/lodash-es/_toSource.js"),h=Object(u.a)(r),p=Object(u.a)(n.a),g=Object(u.a)(a),f=Object(u.a)(c),m=Object(u.a)(l),k=d.a;(r&&"[object DataView]"!=k(new r(new ArrayBuffer(1)))||n.a&&"[object Map]"!=k(new n.a)||a&&"[object Promise]"!=k(a.resolve())||c&&"[object Set]"!=k(new c)||l&&"[object WeakMap]"!=k(new l))&&(k=function(e){var t=Object(d.a)(e),o="[object Object]"==t?e.constructor:void 0,i=o?Object(u.a)(o):"";if(i)switch(i){case h:return"[object DataView]";case p:return"[object Map]";case g:return"[object Promise]";case f:return"[object Set]";case m:return"[object WeakMap]"}return t});t.a=k},"./node_modules/lodash-es/_initCloneObject.js":function(e,t,o){"use strict";var i=o("./node_modules/lodash-es/isObject.js"),s=Object.create,r=function(){function e(){}return function(t){if(!Object(i.a)(t))return{};if(s)return s(t);e.prototype=t;var o=new e;return e.prototype=void 0,o}}(),n=o("./node_modules/lodash-es/_getPrototype.js"),a=o("./node_modules/lodash-es/_isPrototype.js");t.a=function(e){return"function"!=typeof e.constructor||Object(a.a)(e)?{}:r(Object(n.a)(e))}},"./node_modules/lodash-es/_isIndex.js":function(e,t,o){"use strict";var i=/^(?:0|[1-9]\d*)$/;t.a=function(e,t){var o=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==o||"symbol"!=o&&i.test(e))&&e>-1&&e%1==0&&e<t}},"./node_modules/lodash-es/_isPrototype.js":function(e,t,o){"use strict";var i=Object.prototype;t.a=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||i)}},"./node_modules/lodash-es/_nodeUtil.js":function(e,t,o){"use strict";(function(e){var i=o("./node_modules/lodash-es/_freeGlobal.js"),s="object"==typeof exports&&exports&&!exports.nodeType&&exports,r=s&&"object"==typeof e&&e&&!e.nodeType&&e,n=r&&r.exports===s&&i.a.process,a=function(){try{var e=r&&r.require&&r.require("util").types;return e||n&&n.binding&&n.binding("util")}catch(e){}}();t.a=a}).call(this,o("./node_modules/webpack/buildin/harmony-module.js")(e))},"./node_modules/lodash-es/_overArg.js":function(e,t,o){"use strict";t.a=function(e,t){return function(o){return e(t(o))}}},"./node_modules/lodash-es/_root.js":function(e,t,o){"use strict";var i=o("./node_modules/lodash-es/_freeGlobal.js"),s="object"==typeof self&&self&&self.Object===Object&&self,r=i.a||s||Function("return this")();t.a=r},"./node_modules/lodash-es/_toSource.js":function(e,t,o){"use strict";var i=Function.prototype.toString;t.a=function(e){if(null!=e){try{return i.call(e)}catch(e){}try{return e+""}catch(e){}}return""}},"./node_modules/lodash-es/assignIn.js":function(e,t,o){"use strict";var i=o("./node_modules/lodash-es/_copyObject.js"),s=o("./node_modules/lodash-es/_createAssigner.js"),r=o("./node_modules/lodash-es/keysIn.js"),n=Object(s.a)((function(e,t){Object(i.a)(t,Object(r.a)(t),e)}));t.a=n},"./node_modules/lodash-es/clone.js":function(e,t,o){"use strict";var i=o("./node_modules/lodash-es/_baseClone.js");t.a=function(e){return Object(i.a)(e,4)}},"./node_modules/lodash-es/cloneDeep.js":function(e,t,o){"use strict";var i=o("./node_modules/lodash-es/_baseClone.js");t.a=function(e){return Object(i.a)(e,5)}},"./node_modules/lodash-es/cloneDeepWith.js":function(e,t,o){"use strict";var i=o("./node_modules/lodash-es/_baseClone.js");t.a=function(e,t){return t="function"==typeof t?t:void 0,Object(i.a)(e,5,t)}},"./node_modules/lodash-es/debounce.js":function(e,t,o){"use strict";var i=o("./node_modules/lodash-es/isObject.js"),s=o("./node_modules/lodash-es/_root.js"),r=function(){return s.a.Date.now()},n=/\s/;var a=function(e){for(var t=e.length;t--&&n.test(e.charAt(t)););return t},c=/^\s+/;var l=function(e){return e?e.slice(0,a(e)+1).replace(c,""):e},d=o("./node_modules/lodash-es/isSymbol.js"),u=/^[-+]0x[0-9a-f]+$/i,h=/^0b[01]+$/i,p=/^0o[0-7]+$/i,g=parseInt;var f=function(e){if("number"==typeof e)return e;if(Object(d.a)(e))return NaN;if(Object(i.a)(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=Object(i.a)(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=l(e);var o=h.test(e);return o||p.test(e)?g(e.slice(2),o?2:8):u.test(e)?NaN:+e},m=Math.max,k=Math.min;t.a=function(e,t,o){var s,n,a,c,l,d,u=0,h=!1,p=!1,g=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function b(t){var o=s,i=n;return s=n=void 0,u=t,c=e.apply(i,o)}function _(e){return u=e,l=setTimeout(v,t),h?b(e):c}function w(e){var o=e-d;return void 0===d||o>=t||o<0||p&&e-u>=a}function v(){var e=r();if(w(e))return y(e);l=setTimeout(v,function(e){var o=t-(e-d);return p?k(o,a-(e-u)):o}(e))}function y(e){return l=void 0,g&&s?b(e):(s=n=void 0,c)}function j(){var e=r(),o=w(e);if(s=arguments,n=this,d=e,o){if(void 0===l)return _(d);if(p)return clearTimeout(l),l=setTimeout(v,t),b(d)}return void 0===l&&(l=setTimeout(v,t)),c}return t=f(t)||0,Object(i.a)(o)&&(h=!!o.leading,a=(p="maxWait"in o)?m(f(o.maxWait)||0,t):a,g="trailing"in o?!!o.trailing:g),j.cancel=function(){void 0!==l&&clearTimeout(l),u=0,s=d=n=l=void 0},j.flush=function(){return void 0===l?c:y(r())},j}},"./node_modules/lodash-es/eq.js":function(e,t,o){"use strict";t.a=function(e,t){return e===t||e!=e&&t!=t}},"./node_modules/lodash-es/isArguments.js":function(e,t,o){"use strict";var i=o("./node_modules/lodash-es/_baseGetTag.js"),s=o("./node_modules/lodash-es/isObjectLike.js");var r=function(e){return Object(s.a)(e)&&"[object Arguments]"==Object(i.a)(e)},n=Object.prototype,a=n.hasOwnProperty,c=n.propertyIsEnumerable,l=r(function(){return arguments}())?r:function(e){return Object(s.a)(e)&&a.call(e,"callee")&&!c.call(e,"callee")};t.a=l},"./node_modules/lodash-es/isArray.js":function(e,t,o){"use strict";var i=Array.isArray;t.a=i},"./node_modules/lodash-es/isArrayLike.js":function(e,t,o){"use strict";var i=o("./node_modules/lodash-es/isFunction.js"),s=o("./node_modules/lodash-es/isLength.js");t.a=function(e){return null!=e&&Object(s.a)(e.length)&&!Object(i.a)(e)}},"./node_modules/lodash-es/isBuffer.js":function(e,t,o){"use strict";(function(e){var i=o("./node_modules/lodash-es/_root.js"),s=o("./node_modules/lodash-es/stubFalse.js"),r="object"==typeof exports&&exports&&!exports.nodeType&&exports,n=r&&"object"==typeof e&&e&&!e.nodeType&&e,a=n&&n.exports===r?i.a.Buffer:void 0,c=(a?a.isBuffer:void 0)||s.a;t.a=c}).call(this,o("./node_modules/webpack/buildin/harmony-module.js")(e))},"./node_modules/lodash-es/isElement.js":function(e,t,o){"use strict";var i=o("./node_modules/lodash-es/isObjectLike.js"),s=o("./node_modules/lodash-es/isPlainObject.js");t.a=function(e){return Object(i.a)(e)&&1===e.nodeType&&!Object(s.a)(e)}},"./node_modules/lodash-es/isFunction.js":function(e,t,o){"use strict";var i=o("./node_modules/lodash-es/_baseGetTag.js"),s=o("./node_modules/lodash-es/isObject.js");t.a=function(e){if(!Object(s.a)(e))return!1;var t=Object(i.a)(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}},"./node_modules/lodash-es/isLength.js":function(e,t,o){"use strict";t.a=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}},"./node_modules/lodash-es/isObject.js":function(e,t,o){"use strict";t.a=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},"./node_modules/lodash-es/isObjectLike.js":function(e,t,o){"use strict";t.a=function(e){return null!=e&&"object"==typeof e}},"./node_modules/lodash-es/isPlainObject.js":function(e,t,o){"use strict";var i=o("./node_modules/lodash-es/_baseGetTag.js"),s=o("./node_modules/lodash-es/_getPrototype.js"),r=o("./node_modules/lodash-es/isObjectLike.js"),n=Function.prototype,a=Object.prototype,c=n.toString,l=a.hasOwnProperty,d=c.call(Object);t.a=function(e){if(!Object(r.a)(e)||"[object Object]"!=Object(i.a)(e))return!1;var t=Object(s.a)(e);if(null===t)return!0;var o=l.call(t,"constructor")&&t.constructor;return"function"==typeof o&&o instanceof o&&c.call(o)==d}},"./node_modules/lodash-es/isSymbol.js":function(e,t,o){"use strict";var i=o("./node_modules/lodash-es/_baseGetTag.js"),s=o("./node_modules/lodash-es/isObjectLike.js");t.a=function(e){return"symbol"==typeof e||Object(s.a)(e)&&"[object Symbol]"==Object(i.a)(e)}},"./node_modules/lodash-es/isTypedArray.js":function(e,t,o){"use strict";var i=o("./node_modules/lodash-es/_baseGetTag.js"),s=o("./node_modules/lodash-es/isLength.js"),r=o("./node_modules/lodash-es/isObjectLike.js"),n={};n["[object Float32Array]"]=n["[object Float64Array]"]=n["[object Int8Array]"]=n["[object Int16Array]"]=n["[object Int32Array]"]=n["[object Uint8Array]"]=n["[object Uint8ClampedArray]"]=n["[object Uint16Array]"]=n["[object Uint32Array]"]=!0,n["[object Arguments]"]=n["[object Array]"]=n["[object ArrayBuffer]"]=n["[object Boolean]"]=n["[object DataView]"]=n["[object Date]"]=n["[object Error]"]=n["[object Function]"]=n["[object Map]"]=n["[object Number]"]=n["[object Object]"]=n["[object RegExp]"]=n["[object Set]"]=n["[object String]"]=n["[object WeakMap]"]=!1;var a=function(e){return Object(r.a)(e)&&Object(s.a)(e.length)&&!!n[Object(i.a)(e)]},c=o("./node_modules/lodash-es/_baseUnary.js"),l=o("./node_modules/lodash-es/_nodeUtil.js"),d=l.a&&l.a.isTypedArray,u=d?Object(c.a)(d):a;t.a=u},"./node_modules/lodash-es/keys.js":function(e,t,o){"use strict";var i=o("./node_modules/lodash-es/_arrayLikeKeys.js"),s=o("./node_modules/lodash-es/_isPrototype.js"),r=o("./node_modules/lodash-es/_overArg.js"),n=Object(r.a)(Object.keys,Object),a=Object.prototype.hasOwnProperty;var c=function(e){if(!Object(s.a)(e))return n(e);var t=[];for(var o in Object(e))a.call(e,o)&&"constructor"!=o&&t.push(o);return t},l=o("./node_modules/lodash-es/isArrayLike.js");t.a=function(e){return Object(l.a)(e)?Object(i.a)(e):c(e)}},"./node_modules/lodash-es/keysIn.js":function(e,t,o){"use strict";var i=o("./node_modules/lodash-es/_arrayLikeKeys.js"),s=o("./node_modules/lodash-es/isObject.js"),r=o("./node_modules/lodash-es/_isPrototype.js");var n=function(e){var t=[];if(null!=e)for(var o in Object(e))t.push(o);return t},a=Object.prototype.hasOwnProperty;var c=function(e){if(!Object(s.a)(e))return n(e);var t=Object(r.a)(e),o=[];for(var i in e)("constructor"!=i||!t&&a.call(e,i))&&o.push(i);return o},l=o("./node_modules/lodash-es/isArrayLike.js");t.a=function(e){return Object(l.a)(e)?Object(i.a)(e,!0):c(e)}},"./node_modules/lodash-es/stubArray.js":function(e,t,o){"use strict";t.a=function(){return[]}},"./node_modules/lodash-es/stubFalse.js":function(e,t,o){"use strict";t.a=function(){return!1}},"./node_modules/lodash-es/throttle.js":function(e,t,o){"use strict";var i=o("./node_modules/lodash-es/debounce.js"),s=o("./node_modules/lodash-es/isObject.js");t.a=function(e,t,o){var r=!0,n=!0;if("function"!=typeof e)throw new TypeError("Expected a function");return Object(s.a)(o)&&(r="leading"in o?!!o.leading:r,n="trailing"in o?!!o.trailing:n),Object(i.a)(e,t,{leading:r,maxWait:t,trailing:n})}},"./node_modules/lodash-es/toString.js":function(e,t,o){"use strict";var i=o("./node_modules/lodash-es/_Symbol.js");var s=function(e,t){for(var o=-1,i=null==e?0:e.length,s=Array(i);++o<i;)s[o]=t(e[o],o,e);return s},r=o("./node_modules/lodash-es/isArray.js"),n=o("./node_modules/lodash-es/isSymbol.js"),a=i.a?i.a.prototype:void 0,c=a?a.toString:void 0;var l=function e(t){if("string"==typeof t)return t;if(Object(r.a)(t))return s(t,e)+"";if(Object(n.a)(t))return c?c.call(t):"";var o=t+"";return"0"==o&&1/t==-1/0?"-0":o};t.a=function(e){return null==e?"":l(e)}},"./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-clipboard/theme/clipboard.css":function(e,t){e.exports='.ck.ck-editor__editable .ck.ck-clipboard-drop-target-position{display:inline;position:relative;pointer-events:none}.ck.ck-editor__editable .ck.ck-clipboard-drop-target-position span{position:absolute;width:0}.ck.ck-editor__editable .ck-widget:-webkit-drag>.ck-widget__selection-handle,.ck.ck-editor__editable .ck-widget:-webkit-drag>.ck-widget__type-around{display:none}:root{--ck-clipboard-drop-target-dot-width:12px;--ck-clipboard-drop-target-dot-height:8px;--ck-clipboard-drop-target-color:var(--ck-color-focus-border)}.ck.ck-editor__editable .ck.ck-clipboard-drop-target-position span{bottom:calc(var(--ck-clipboard-drop-target-dot-height)*-0.5);top:calc(var(--ck-clipboard-drop-target-dot-height)*-0.5);border:1px solid var(--ck-clipboard-drop-target-color);background:var(--ck-clipboard-drop-target-color);margin-left:-1px}.ck.ck-editor__editable .ck.ck-clipboard-drop-target-position span:after{content:"";width:0;height:0;display:block;position:absolute;left:50%;top:calc(var(--ck-clipboard-drop-target-dot-height)*-0.5);transform:translateX(-50%);border-left:calc(var(--ck-clipboard-drop-target-dot-width)*0.5) solid transparent;border-bottom:0 solid transparent;border-right:calc(var(--ck-clipboard-drop-target-dot-width)*0.5) solid transparent;border-top:calc(var(--ck-clipboard-drop-target-dot-height)) solid var(--ck-clipboard-drop-target-color)}.ck.ck-editor__editable .ck-widget.ck-clipboard-drop-target-range{outline:var(--ck-widget-outline-thickness) solid var(--ck-clipboard-drop-target-color)!important}.ck.ck-editor__editable .ck-widget:-webkit-drag{zoom:.6;outline:none!important}'},"./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-engine/theme/placeholder.css":function(e,t){e.exports=".ck.ck-placeholder,.ck .ck-placeholder{position:relative}.ck.ck-placeholder:before,.ck .ck-placeholder:before{position:absolute;left:0;right:0;content:attr(data-placeholder);pointer-events:none}.ck.ck-read-only .ck-placeholder:before{display:none}.ck.ck-placeholder:before,.ck .ck-placeholder:before{cursor:text;color:var(--ck-color-engine-placeholder-text)}"},"./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-engine/theme/renderer.css":function(e,t){e.exports=".ck.ck-editor__editable span[data-ck-hidden]{display:none}"},"./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/button/button.css":function(e,t){e.exports=".ck.ck-button,a.ck.ck-button{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.ck.ck-button .ck-tooltip,a.ck.ck-button .ck-tooltip{display:block}@media (hover:none){.ck.ck-button .ck-tooltip,a.ck.ck-button .ck-tooltip{display:none}}.ck.ck-button,a.ck.ck-button{position:relative;display:inline-flex;align-items:center;justify-content:left}.ck.ck-button .ck-button__label,a.ck.ck-button .ck-button__label{display:none}.ck.ck-button.ck-button_with-text .ck-button__label,a.ck.ck-button.ck-button_with-text .ck-button__label{display:inline-block}.ck.ck-button:not(.ck-button_with-text),a.ck.ck-button:not(.ck-button_with-text){justify-content:center}.ck.ck-button:hover .ck-tooltip,a.ck.ck-button:hover .ck-tooltip{visibility:visible;opacity:1}.ck.ck-button:focus:not(:hover) .ck-tooltip,a.ck.ck-button:focus:not(:hover) .ck-tooltip{display:none}.ck.ck-button,a.ck.ck-button{background:var(--ck-color-button-default-background)}.ck.ck-button:not(.ck-disabled):hover,a.ck.ck-button:not(.ck-disabled):hover{background:var(--ck-color-button-default-hover-background)}.ck.ck-button:not(.ck-disabled):active,a.ck.ck-button:not(.ck-disabled):active{background:var(--ck-color-button-default-active-background);box-shadow:inset 0 2px 2px var(--ck-color-button-default-active-shadow)}.ck.ck-button.ck-disabled,a.ck.ck-button.ck-disabled{background:var(--ck-color-button-default-disabled-background)}.ck.ck-button,a.ck.ck-button{border-radius:0}.ck-rounded-corners .ck.ck-button,.ck-rounded-corners a.ck.ck-button,.ck.ck-button.ck-rounded-corners,a.ck.ck-button.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-button,a.ck.ck-button{white-space:nowrap;cursor:default;vertical-align:middle;padding:var(--ck-spacing-tiny);text-align:center;min-width:var(--ck-ui-component-min-height);min-height:var(--ck-ui-component-min-height);line-height:1;font-size:inherit;border:1px solid transparent;transition:box-shadow .2s ease-in-out,border .2s ease-in-out;-webkit-appearance:none}.ck.ck-button:active,.ck.ck-button:focus,a.ck.ck-button:active,a.ck.ck-button:focus{outline:none;border:var(--ck-focus-ring);box-shadow:var(--ck-focus-outer-shadow),0 0}.ck.ck-button .ck-button__icon use,.ck.ck-button .ck-button__icon use *,a.ck.ck-button .ck-button__icon use,a.ck.ck-button .ck-button__icon use *{color:inherit}.ck.ck-button .ck-button__label,a.ck.ck-button .ck-button__label{font-size:inherit;font-weight:inherit;color:inherit;cursor:inherit;vertical-align:middle}[dir=ltr] .ck.ck-button .ck-button__label,[dir=ltr] a.ck.ck-button .ck-button__label{text-align:left}[dir=rtl] .ck.ck-button .ck-button__label,[dir=rtl] a.ck.ck-button .ck-button__label{text-align:right}.ck.ck-button .ck-button__keystroke,a.ck.ck-button .ck-button__keystroke{color:inherit}[dir=ltr] .ck.ck-button .ck-button__keystroke,[dir=ltr] a.ck.ck-button .ck-button__keystroke{margin-left:var(--ck-spacing-large)}[dir=rtl] .ck.ck-button .ck-button__keystroke,[dir=rtl] a.ck.ck-button .ck-button__keystroke{margin-right:var(--ck-spacing-large)}.ck.ck-button .ck-button__keystroke,a.ck.ck-button .ck-button__keystroke{font-weight:700;opacity:.7}.ck.ck-button.ck-disabled:active,.ck.ck-button.ck-disabled:focus,a.ck.ck-button.ck-disabled:active,a.ck.ck-button.ck-disabled:focus{box-shadow:var(--ck-focus-disabled-outer-shadow),0 0}.ck.ck-button.ck-disabled .ck-button__icon,a.ck.ck-button.ck-disabled .ck-button__icon{opacity:var(--ck-disabled-opacity)}.ck.ck-button.ck-disabled .ck-button__label,a.ck.ck-button.ck-disabled .ck-button__label{opacity:var(--ck-disabled-opacity)}.ck.ck-button.ck-disabled .ck-button__keystroke,a.ck.ck-button.ck-disabled .ck-button__keystroke{opacity:.3}.ck.ck-button.ck-button_with-text,a.ck.ck-button.ck-button_with-text{padding:var(--ck-spacing-tiny) var(--ck-spacing-standard)}[dir=ltr] .ck.ck-button.ck-button_with-text .ck-button__icon,[dir=ltr] a.ck.ck-button.ck-button_with-text .ck-button__icon{margin-left:calc(var(--ck-spacing-small)*-1);margin-right:var(--ck-spacing-small)}[dir=rtl] .ck.ck-button.ck-button_with-text .ck-button__icon,[dir=rtl] a.ck.ck-button.ck-button_with-text .ck-button__icon{margin-right:calc(var(--ck-spacing-small)*-1);margin-left:var(--ck-spacing-small)}.ck.ck-button.ck-button_with-keystroke .ck-button__label,a.ck.ck-button.ck-button_with-keystroke .ck-button__label{flex-grow:1}.ck.ck-button.ck-on,a.ck.ck-button.ck-on{background:var(--ck-color-button-on-background)}.ck.ck-button.ck-on:not(.ck-disabled):hover,a.ck.ck-button.ck-on:not(.ck-disabled):hover{background:var(--ck-color-button-on-hover-background)}.ck.ck-button.ck-on:not(.ck-disabled):active,a.ck.ck-button.ck-on:not(.ck-disabled):active{background:var(--ck-color-button-on-active-background);box-shadow:inset 0 2px 2px var(--ck-color-button-on-active-shadow)}.ck.ck-button.ck-on.ck-disabled,a.ck.ck-button.ck-on.ck-disabled{background:var(--ck-color-button-on-disabled-background)}.ck.ck-button.ck-button-save,a.ck.ck-button.ck-button-save{color:var(--ck-color-button-save)}.ck.ck-button.ck-button-cancel,a.ck.ck-button.ck-button-cancel{color:var(--ck-color-button-cancel)}.ck.ck-button-action,a.ck.ck-button-action{background:var(--ck-color-button-action-background)}.ck.ck-button-action:not(.ck-disabled):hover,a.ck.ck-button-action:not(.ck-disabled):hover{background:var(--ck-color-button-action-hover-background)}.ck.ck-button-action:not(.ck-disabled):active,a.ck.ck-button-action:not(.ck-disabled):active{background:var(--ck-color-button-action-active-background);box-shadow:inset 0 2px 2px var(--ck-color-button-action-active-shadow)}.ck.ck-button-action.ck-disabled,a.ck.ck-button-action.ck-disabled{background:var(--ck-color-button-action-disabled-background)}.ck.ck-button-action,a.ck.ck-button-action{color:var(--ck-color-button-action-text)}.ck.ck-button-bold,a.ck.ck-button-bold{font-weight:700}"},"./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/button/switchbutton.css":function(e,t){e.exports=".ck.ck-button.ck-switchbutton .ck-button__toggle,.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner{display:block}:root{--ck-switch-button-toggle-width:2.6153846154em;--ck-switch-button-toggle-inner-size:1.0769230769em;--ck-switch-button-toggle-spacing:1px;--ck-switch-button-translation:calc(var(--ck-switch-button-toggle-width) - var(--ck-switch-button-toggle-inner-size) - var(--ck-switch-button-toggle-spacing)*2)}[dir=ltr] .ck.ck-button.ck-switchbutton .ck-button__label{margin-right:calc(var(--ck-spacing-large)*2)}[dir=rtl] .ck.ck-button.ck-switchbutton .ck-button__label{margin-left:calc(var(--ck-spacing-large)*2)}.ck.ck-button.ck-switchbutton .ck-button__toggle{border-radius:0}.ck-rounded-corners .ck.ck-button.ck-switchbutton .ck-button__toggle,.ck.ck-button.ck-switchbutton .ck-button__toggle.ck-rounded-corners{border-radius:var(--ck-border-radius)}[dir=ltr] .ck.ck-button.ck-switchbutton .ck-button__toggle{margin-left:auto}[dir=rtl] .ck.ck-button.ck-switchbutton .ck-button__toggle{margin-right:auto}.ck.ck-button.ck-switchbutton .ck-button__toggle{transition:background .4s ease;width:var(--ck-switch-button-toggle-width);background:var(--ck-color-switch-button-off-background)}.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner{border-radius:0}.ck-rounded-corners .ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner,.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner.ck-rounded-corners{border-radius:var(--ck-border-radius);border-radius:calc(var(--ck-border-radius)*0.5)}.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner{margin:var(--ck-switch-button-toggle-spacing);width:var(--ck-switch-button-toggle-inner-size);height:var(--ck-switch-button-toggle-inner-size);background:var(--ck-color-switch-button-inner-background);transition:all .3s ease}.ck.ck-button.ck-switchbutton .ck-button__toggle:hover{background:var(--ck-color-switch-button-off-hover-background)}.ck.ck-button.ck-switchbutton .ck-button__toggle:hover .ck-button__toggle__inner{box-shadow:0 0 0 5px var(--ck-color-switch-button-inner-shadow)}.ck.ck-button.ck-switchbutton.ck-disabled .ck-button__toggle{opacity:var(--ck-disabled-opacity)}.ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle{background:var(--ck-color-switch-button-on-background)}.ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle:hover{background:var(--ck-color-switch-button-on-hover-background)}[dir=ltr] .ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle .ck-button__toggle__inner{transform:translateX(var(--ck-switch-button-translation))}[dir=rtl] .ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle .ck-button__toggle__inner{transform:translateX(calc(var(--ck-switch-button-translation)*-1))}"},"./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/colorgrid/colorgrid.css":function(e,t){e.exports=".ck.ck-color-grid{display:grid}:root{--ck-color-grid-tile-size:24px;--ck-color-color-grid-check-icon:#000}.ck.ck-color-grid{grid-gap:5px;padding:8px}.ck.ck-color-grid__tile{width:var(--ck-color-grid-tile-size);height:var(--ck-color-grid-tile-size);min-width:var(--ck-color-grid-tile-size);min-height:var(--ck-color-grid-tile-size);padding:0;transition:box-shadow .2s ease;border:0}.ck.ck-color-grid__tile.ck-disabled{cursor:unset;transition:unset}.ck.ck-color-grid__tile.ck-color-table__color-tile_bordered{box-shadow:0 0 0 1px var(--ck-color-base-border)}.ck.ck-color-grid__tile .ck.ck-icon{display:none;color:var(--ck-color-color-grid-check-icon)}.ck.ck-color-grid__tile.ck-on{box-shadow:inset 0 0 0 1px var(--ck-color-base-background),0 0 0 2px var(--ck-color-base-text)}.ck.ck-color-grid__tile.ck-on .ck.ck-icon{display:block}.ck.ck-color-grid__tile.ck-on,.ck.ck-color-grid__tile:focus:not(.ck-disabled),.ck.ck-color-grid__tile:hover:not(.ck-disabled){border:0}.ck.ck-color-grid__tile:focus:not(.ck-disabled),.ck.ck-color-grid__tile:hover:not(.ck-disabled){box-shadow:inset 0 0 0 1px var(--ck-color-base-background),0 0 0 2px var(--ck-color-focus-border)}.ck.ck-color-grid__label{padding:0 var(--ck-spacing-standard)}"},"./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/dropdown/dropdown.css":function(e,t){e.exports=":root{--ck-dropdown-max-width:75vw}.ck.ck-dropdown{display:inline-block;position:relative}.ck.ck-dropdown .ck-dropdown__arrow{pointer-events:none;z-index:var(--ck-z-default)}.ck.ck-dropdown .ck-button.ck-dropdown__button{width:100%}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-on .ck-tooltip{display:none}.ck.ck-dropdown .ck-dropdown__panel{-webkit-backface-visibility:hidden;display:none;z-index:var(--ck-z-modal);max-width:var(--ck-dropdown-max-width);position:absolute}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel-visible{display:inline-block}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_n,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_ne,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nme,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nmw,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nw{bottom:100%}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_s,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_se,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_sme,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_smw,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_sw{top:100%;bottom:auto}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_ne,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_se{left:0}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nw,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_sw{right:0}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_n,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_s{left:50%;transform:translateX(-50%)}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nmw,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_smw{left:75%;transform:translateX(-75%)}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nme,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_sme{left:25%;transform:translateX(-25%)}.ck.ck-toolbar .ck-dropdown__panel{z-index:calc(var(--ck-z-modal) + 1)}:root{--ck-dropdown-arrow-size:calc(var(--ck-icon-size)*0.5)}.ck.ck-dropdown{font-size:inherit}.ck.ck-dropdown .ck-dropdown__arrow{width:var(--ck-dropdown-arrow-size)}[dir=ltr] .ck.ck-dropdown .ck-dropdown__arrow{right:var(--ck-spacing-standard);margin-left:var(--ck-spacing-standard)}[dir=rtl] .ck.ck-dropdown .ck-dropdown__arrow{left:var(--ck-spacing-standard);margin-right:var(--ck-spacing-small)}.ck.ck-dropdown.ck-disabled .ck-dropdown__arrow{opacity:var(--ck-disabled-opacity)}[dir=ltr] .ck.ck-dropdown .ck-button.ck-dropdown__button:not(.ck-button_with-text){padding-left:var(--ck-spacing-small)}[dir=rtl] .ck.ck-dropdown .ck-button.ck-dropdown__button:not(.ck-button_with-text){padding-right:var(--ck-spacing-small)}.ck.ck-dropdown .ck-button.ck-dropdown__button .ck-button__label{width:7em;overflow:hidden;text-overflow:ellipsis}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-disabled .ck-button__label{opacity:var(--ck-disabled-opacity)}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-on{border-bottom-left-radius:0;border-bottom-right-radius:0}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-dropdown__button_label-width_auto .ck-button__label{width:auto}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-off:active,.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-on:active{box-shadow:none}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-off:active:focus,.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-on:active:focus{box-shadow:var(--ck-focus-outer-shadow),0 0}.ck.ck-dropdown__panel{border-radius:0}.ck-rounded-corners .ck.ck-dropdown__panel,.ck.ck-dropdown__panel.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-dropdown__panel{box-shadow:var(--ck-drop-shadow),0 0;background:var(--ck-color-dropdown-panel-background);border:1px solid var(--ck-color-dropdown-panel-border);bottom:0;min-width:100%}.ck.ck-dropdown__panel.ck-dropdown__panel_se{border-top-left-radius:0}.ck.ck-dropdown__panel.ck-dropdown__panel_sw{border-top-right-radius:0}.ck.ck-dropdown__panel.ck-dropdown__panel_ne{border-bottom-left-radius:0}.ck.ck-dropdown__panel.ck-dropdown__panel_nw{border-bottom-right-radius:0}"},"./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/dropdown/listdropdown.css":function(e,t){e.exports=".ck.ck-dropdown .ck-dropdown__panel .ck-list{border-radius:0}.ck-rounded-corners .ck.ck-dropdown .ck-dropdown__panel .ck-list,.ck.ck-dropdown .ck-dropdown__panel .ck-list.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:0}.ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:first-child .ck-button{border-radius:0}.ck-rounded-corners .ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:first-child .ck-button,.ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:first-child .ck-button.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:0;border-bottom-left-radius:0;border-bottom-right-radius:0}.ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:last-child .ck-button{border-radius:0}.ck-rounded-corners .ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:last-child .ck-button,.ck.ck-dropdown .ck-dropdown__panel .ck-list .ck-list__item:last-child .ck-button.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:0;border-top-right-radius:0}"},"./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/dropdown/splitbutton.css":function(e,t){e.exports='.ck.ck-splitbutton{font-size:inherit}.ck.ck-splitbutton .ck-splitbutton__action:focus{z-index:calc(var(--ck-z-default) + 1)}.ck.ck-splitbutton.ck-splitbutton_open>.ck-button .ck-tooltip{display:none}:root{--ck-color-split-button-hover-background:#ebebeb;--ck-color-split-button-hover-border:#b3b3b3}[dir=ltr] .ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__action,[dir=ltr] .ck.ck-splitbutton:hover>.ck-splitbutton__action{border-top-right-radius:unset;border-bottom-right-radius:unset}[dir=rtl] .ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__action,[dir=rtl] .ck.ck-splitbutton:hover>.ck-splitbutton__action{border-top-left-radius:unset;border-bottom-left-radius:unset}.ck.ck-splitbutton>.ck-splitbutton__arrow{min-width:unset}[dir=ltr] .ck.ck-splitbutton>.ck-splitbutton__arrow{border-top-left-radius:unset;border-bottom-left-radius:unset}[dir=rtl] .ck.ck-splitbutton>.ck-splitbutton__arrow{border-top-right-radius:unset;border-bottom-right-radius:unset}.ck.ck-splitbutton>.ck-splitbutton__arrow svg{width:var(--ck-dropdown-arrow-size)}.ck.ck-splitbutton.ck-splitbutton_open>.ck-button:not(.ck-on):not(.ck-disabled):not(:hover),.ck.ck-splitbutton:hover>.ck-button:not(.ck-on):not(.ck-disabled):not(:hover){background:var(--ck-color-split-button-hover-background)}.ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__arrow:not(.ck-disabled):after,.ck.ck-splitbutton:hover>.ck-splitbutton__arrow:not(.ck-disabled):after{content:"";position:absolute;width:1px;height:100%;background-color:var(--ck-color-split-button-hover-border)}[dir=ltr] .ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__arrow:not(.ck-disabled):after,[dir=ltr] .ck.ck-splitbutton:hover>.ck-splitbutton__arrow:not(.ck-disabled):after{left:-1px}[dir=rtl] .ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__arrow:not(.ck-disabled):after,[dir=rtl] .ck.ck-splitbutton:hover>.ck-splitbutton__arrow:not(.ck-disabled):after{right:-1px}.ck.ck-splitbutton.ck-splitbutton_open{border-radius:0}.ck-rounded-corners .ck.ck-splitbutton.ck-splitbutton_open,.ck.ck-splitbutton.ck-splitbutton_open.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck-rounded-corners .ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__action,.ck.ck-splitbutton.ck-splitbutton_open.ck-rounded-corners>.ck-splitbutton__action{border-bottom-left-radius:0}.ck-rounded-corners .ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__arrow,.ck.ck-splitbutton.ck-splitbutton_open.ck-rounded-corners>.ck-splitbutton__arrow{border-bottom-right-radius:0}'},"./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/dropdown/toolbardropdown.css":function(e,t){e.exports=":root{--ck-toolbar-dropdown-max-width:60vw}.ck.ck-toolbar-dropdown>.ck-dropdown__panel{width:max-content;max-width:var(--ck-toolbar-dropdown-max-width)}.ck.ck-toolbar-dropdown>.ck-dropdown__panel .ck-button:focus{z-index:calc(var(--ck-z-default) + 1)}.ck.ck-toolbar-dropdown .ck-toolbar{border:0}"},"./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/editorui/editorui.css":function(e,t){e.exports=":root{--ck-color-editable-blur-selection:#d9d9d9}.ck.ck-editor__editable:not(.ck-editor__nested-editable){border-radius:0}.ck-rounded-corners .ck.ck-editor__editable:not(.ck-editor__nested-editable),.ck.ck-editor__editable:not(.ck-editor__nested-editable).ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-editor__editable:not(.ck-editor__nested-editable).ck-focused{outline:none;border:var(--ck-focus-ring);box-shadow:var(--ck-inner-shadow),0 0}.ck.ck-editor__editable_inline{overflow:auto;padding:0 var(--ck-spacing-standard);border:1px solid transparent}.ck.ck-editor__editable_inline[dir=ltr]{text-align:left}.ck.ck-editor__editable_inline[dir=rtl]{text-align:right}.ck.ck-editor__editable_inline>:first-child{margin-top:var(--ck-spacing-large)}.ck.ck-editor__editable_inline>:last-child{margin-bottom:var(--ck-spacing-large)}.ck.ck-editor__editable_inline.ck-blurred ::selection{background:var(--ck-color-editable-blur-selection)}.ck.ck-balloon-panel.ck-toolbar-container[class*=arrow_n]:after{border-bottom-color:var(--ck-color-base-foreground)}.ck.ck-balloon-panel.ck-toolbar-container[class*=arrow_s]:after{border-top-color:var(--ck-color-base-foreground)}"},"./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/formheader/formheader.css":function(e,t){e.exports=".ck.ck-form__header{display:flex;flex-direction:row;flex-wrap:nowrap;align-items:center;justify-content:space-between}:root{--ck-form-header-height:38px}.ck.ck-form__header{padding:var(--ck-spacing-small) var(--ck-spacing-large);height:var(--ck-form-header-height);line-height:var(--ck-form-header-height);border-bottom:1px solid var(--ck-color-base-border)}.ck.ck-form__header .ck-form__header__label{font-weight:700}"},"./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/icon/icon.css":function(e,t){e.exports=".ck.ck-icon{vertical-align:middle}:root{--ck-icon-size:calc(var(--ck-line-height-base)*var(--ck-font-size-normal))}.ck.ck-icon{width:var(--ck-icon-size);height:var(--ck-icon-size);font-size:.8333350694em;will-change:transform}.ck.ck-icon,.ck.ck-icon *{color:inherit;cursor:inherit}.ck.ck-icon :not([fill]){fill:currentColor}"},"./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/inputtext/inputtext.css":function(e,t){e.exports=":root{--ck-input-text-width:18em}.ck.ck-input-text{border-radius:0}.ck-rounded-corners .ck.ck-input-text,.ck.ck-input-text.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-input-text{background:var(--ck-color-input-background);border:1px solid var(--ck-color-input-border);padding:var(--ck-spacing-extra-tiny) var(--ck-spacing-medium);min-width:var(--ck-input-text-width);min-height:var(--ck-ui-component-min-height);transition:box-shadow .1s ease-in-out,border .1s ease-in-out}.ck.ck-input-text:focus{outline:none;border:var(--ck-focus-ring);box-shadow:var(--ck-focus-outer-shadow),0 0}.ck.ck-input-text[readonly]{border:1px solid var(--ck-color-input-disabled-border);background:var(--ck-color-input-disabled-background);color:var(--ck-color-input-disabled-text)}.ck.ck-input-text[readonly]:focus{box-shadow:var(--ck-focus-disabled-outer-shadow),0 0}.ck.ck-input-text.ck-error{border-color:var(--ck-color-input-error-border);animation:ck-text-input-shake .3s ease both}.ck.ck-input-text.ck-error:focus{box-shadow:var(--ck-focus-error-outer-shadow),0 0}@keyframes ck-text-input-shake{20%{transform:translateX(-2px)}40%{transform:translateX(2px)}60%{transform:translateX(-1px)}80%{transform:translateX(1px)}}"},"./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/label/label.css":function(e,t){e.exports=".ck.ck-label{display:block}.ck.ck-voice-label{display:none}.ck.ck-label{font-weight:700}"},"./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/labeledfield/labeledfieldview.css":function(e,t){e.exports=".ck.ck-labeled-field-view>.ck.ck-labeled-field-view__input-wrapper{display:flex;position:relative}.ck.ck-labeled-field-view .ck.ck-label{display:block;position:absolute}:root{--ck-labeled-field-view-transition:.1s cubic-bezier(0,0,0.24,0.95);--ck-labeled-field-empty-unfocused-max-width:100% - 2 * var(--ck-spacing-medium);--ck-color-labeled-field-label-background:var(--ck-color-base-background)}.ck.ck-labeled-field-view{border-radius:0}.ck-rounded-corners .ck.ck-labeled-field-view,.ck.ck-labeled-field-view.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-labeled-field-view>.ck.ck-labeled-field-view__input-wrapper{width:100%}.ck.ck-labeled-field-view>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label{top:0}[dir=ltr] .ck.ck-labeled-field-view>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label{left:0}[dir=rtl] .ck.ck-labeled-field-view>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label{right:0}.ck.ck-labeled-field-view>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label{pointer-events:none;transform-origin:0 0;transform:translate(var(--ck-spacing-medium),-6px) scale(.75);background:var(--ck-color-labeled-field-label-background);padding:0 calc(var(--ck-font-size-tiny)*0.5);line-height:normal;font-weight:400;text-overflow:ellipsis;overflow:hidden;max-width:100%;transition:transform var(--ck-labeled-field-view-transition),padding var(--ck-labeled-field-view-transition),background var(--ck-labeled-field-view-transition)}.ck.ck-labeled-field-view.ck-error .ck-input:not([readonly])+.ck.ck-label,.ck.ck-labeled-field-view.ck-error>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label{color:var(--ck-color-base-error)}.ck.ck-labeled-field-view .ck-labeled-field-view__status{font-size:var(--ck-font-size-small);margin-top:var(--ck-spacing-small);white-space:normal}.ck.ck-labeled-field-view .ck-labeled-field-view__status.ck-labeled-field-view__status_error{color:var(--ck-color-base-error)}.ck.ck-labeled-field-view.ck-disabled>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label,.ck.ck-labeled-field-view.ck-labeled-field-view_empty:not(.ck-labeled-field-view_focused)>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label{color:var(--ck-color-input-disabled-text)}[dir=ltr] .ck.ck-labeled-field-view.ck-disabled.ck-labeled-field-view_empty>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label,[dir=ltr] .ck.ck-labeled-field-view.ck-labeled-field-view_empty:not(.ck-labeled-field-view_focused):not(.ck-labeled-field-view_placeholder)>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label{transform:translate(var(--ck-spacing-medium),calc(var(--ck-font-size-base)*0.6)) scale(1)}[dir=rtl] .ck.ck-labeled-field-view.ck-disabled.ck-labeled-field-view_empty>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label,[dir=rtl] .ck.ck-labeled-field-view.ck-labeled-field-view_empty:not(.ck-labeled-field-view_focused):not(.ck-labeled-field-view_placeholder)>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label{transform:translate(calc(var(--ck-spacing-medium)*-1),calc(var(--ck-font-size-base)*0.6)) scale(1)}.ck.ck-labeled-field-view.ck-disabled.ck-labeled-field-view_empty>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label,.ck.ck-labeled-field-view.ck-labeled-field-view_empty:not(.ck-labeled-field-view_focused):not(.ck-labeled-field-view_placeholder)>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label{max-width:calc(var(--ck-labeled-field-empty-unfocused-max-width));background:transparent;padding:0}.ck.ck-labeled-field-view>.ck.ck-labeled-field-view__input-wrapper>.ck-dropdown>.ck.ck-button{background:transparent}.ck.ck-labeled-field-view.ck-labeled-field-view_empty>.ck.ck-labeled-field-view__input-wrapper>.ck-dropdown>.ck-button>.ck-button__label{opacity:0}.ck.ck-labeled-field-view.ck-labeled-field-view_empty:not(.ck-labeled-field-view_focused):not(.ck-labeled-field-view_placeholder)>.ck.ck-labeled-field-view__input-wrapper>.ck-dropdown+.ck-label{max-width:calc(var(--ck-labeled-field-empty-unfocused-max-width) - var(--ck-dropdown-arrow-size) - var(--ck-spacing-standard))}"},"./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/list/list.css":function(e,t){e.exports=".ck.ck-list{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;display:flex;flex-direction:column}.ck.ck-list .ck-list__item,.ck.ck-list .ck-list__separator{display:block}.ck.ck-list .ck-list__item>:focus{position:relative;z-index:var(--ck-z-default)}.ck.ck-list{border-radius:0}.ck-rounded-corners .ck.ck-list,.ck.ck-list.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-list{list-style-type:none;background:var(--ck-color-list-background)}.ck.ck-list__item{cursor:default;min-width:12em}.ck.ck-list__item .ck-button{min-height:unset;width:100%;text-align:left;border-radius:0;padding:calc(var(--ck-line-height-base)*0.2*var(--ck-font-size-base)) calc(var(--ck-line-height-base)*0.4*var(--ck-font-size-base))}.ck.ck-list__item .ck-button .ck-button__label{line-height:calc(var(--ck-line-height-base)*1.2*var(--ck-font-size-base))}.ck.ck-list__item .ck-button:active{box-shadow:none}.ck.ck-list__item .ck-button.ck-on{background:var(--ck-color-list-button-on-background);color:var(--ck-color-list-button-on-text)}.ck.ck-list__item .ck-button.ck-on:active{box-shadow:none}.ck.ck-list__item .ck-button.ck-on:hover:not(.ck-disabled){background:var(--ck-color-list-button-on-background-focus)}.ck.ck-list__item .ck-button.ck-on:focus:not(.ck-disabled){border-color:var(--ck-color-base-background)}.ck.ck-list__item .ck-button:hover:not(.ck-disabled){background:var(--ck-color-list-button-hover-background)}.ck.ck-list__item .ck-switchbutton.ck-on{background:var(--ck-color-list-background);color:inherit}.ck.ck-list__item .ck-switchbutton.ck-on:hover:not(.ck-disabled){background:var(--ck-color-list-button-hover-background);color:inherit}.ck.ck-list__separator{height:1px;width:100%;background:var(--ck-color-base-border)}"},"./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/panel/balloonpanel.css":function(e,t){e.exports=':root{--ck-balloon-panel-arrow-z-index:calc(var(--ck-z-default) - 3)}.ck.ck-balloon-panel{display:none;position:absolute;z-index:var(--ck-z-modal)}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:after,.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:before{content:"";position:absolute}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:before{z-index:var(--ck-balloon-panel-arrow-z-index)}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:after{z-index:calc(var(--ck-balloon-panel-arrow-z-index) + 1)}.ck.ck-balloon-panel[class*=arrow_n]:before{z-index:var(--ck-balloon-panel-arrow-z-index)}.ck.ck-balloon-panel[class*=arrow_n]:after{z-index:calc(var(--ck-balloon-panel-arrow-z-index) + 1)}.ck.ck-balloon-panel[class*=arrow_s]:before{z-index:var(--ck-balloon-panel-arrow-z-index)}.ck.ck-balloon-panel[class*=arrow_s]:after{z-index:calc(var(--ck-balloon-panel-arrow-z-index) + 1)}.ck.ck-balloon-panel.ck-balloon-panel_visible{display:block}:root{--ck-balloon-arrow-offset:2px;--ck-balloon-arrow-height:10px;--ck-balloon-arrow-half-width:8px;--ck-balloon-arrow-drop-shadow:0 2px 2px var(--ck-color-shadow-drop)}.ck.ck-balloon-panel{border-radius:0}.ck-rounded-corners .ck.ck-balloon-panel,.ck.ck-balloon-panel.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-balloon-panel{box-shadow:var(--ck-drop-shadow),0 0;min-height:15px;background:var(--ck-color-panel-background);border:1px solid var(--ck-color-panel-border)}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:after,.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:before{width:0;height:0;border-style:solid}.ck.ck-balloon-panel[class*=arrow_n]:after,.ck.ck-balloon-panel[class*=arrow_n]:before{border-left-width:var(--ck-balloon-arrow-half-width);border-bottom-width:var(--ck-balloon-arrow-height);border-right-width:var(--ck-balloon-arrow-half-width);border-top-width:0}.ck.ck-balloon-panel[class*=arrow_n]:before{border-bottom-color:var(--ck-color-panel-border)}.ck.ck-balloon-panel[class*=arrow_n]:after,.ck.ck-balloon-panel[class*=arrow_n]:before{border-left-color:transparent;border-right-color:transparent;border-top-color:transparent}.ck.ck-balloon-panel[class*=arrow_n]:after{border-bottom-color:var(--ck-color-panel-background);margin-top:var(--ck-balloon-arrow-offset)}.ck.ck-balloon-panel[class*=arrow_s]:after,.ck.ck-balloon-panel[class*=arrow_s]:before{border-left-width:var(--ck-balloon-arrow-half-width);border-bottom-width:0;border-right-width:var(--ck-balloon-arrow-half-width);border-top-width:var(--ck-balloon-arrow-height)}.ck.ck-balloon-panel[class*=arrow_s]:before{border-top-color:var(--ck-color-panel-border);filter:drop-shadow(var(--ck-balloon-arrow-drop-shadow))}.ck.ck-balloon-panel[class*=arrow_s]:after,.ck.ck-balloon-panel[class*=arrow_s]:before{border-left-color:transparent;border-bottom-color:transparent;border-right-color:transparent}.ck.ck-balloon-panel[class*=arrow_s]:after{border-top-color:var(--ck-color-panel-background);margin-bottom:var(--ck-balloon-arrow-offset)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_n:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_n:before{left:50%;margin-left:calc(var(--ck-balloon-arrow-half-width)*-1);top:calc(var(--ck-balloon-arrow-height)*-1)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_nw:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_nw:before{left:calc(var(--ck-balloon-arrow-half-width)*2);top:calc(var(--ck-balloon-arrow-height)*-1)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_ne:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_ne:before{right:calc(var(--ck-balloon-arrow-half-width)*2);top:calc(var(--ck-balloon-arrow-height)*-1)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_s:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_s:before{left:50%;margin-left:calc(var(--ck-balloon-arrow-half-width)*-1);bottom:calc(var(--ck-balloon-arrow-height)*-1)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_sw:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_sw:before{left:calc(var(--ck-balloon-arrow-half-width)*2);bottom:calc(var(--ck-balloon-arrow-height)*-1)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_se:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_se:before{right:calc(var(--ck-balloon-arrow-half-width)*2);bottom:calc(var(--ck-balloon-arrow-height)*-1)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_sme:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_sme:before{right:25%;margin-right:calc(var(--ck-balloon-arrow-half-width)*2);bottom:calc(var(--ck-balloon-arrow-height)*-1)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_smw:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_smw:before{left:25%;margin-left:calc(var(--ck-balloon-arrow-half-width)*2);bottom:calc(var(--ck-balloon-arrow-height)*-1)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_nme:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_nme:before{right:25%;margin-right:calc(var(--ck-balloon-arrow-half-width)*2);top:calc(var(--ck-balloon-arrow-height)*-1)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_nmw:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_nmw:before{left:25%;margin-left:calc(var(--ck-balloon-arrow-half-width)*2);top:calc(var(--ck-balloon-arrow-height)*-1)}'},"./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/panel/balloonrotator.css":function(e,t){e.exports=".ck .ck-balloon-rotator__navigation{display:flex;align-items:center;justify-content:center}.ck .ck-balloon-rotator__content .ck-toolbar{justify-content:center}.ck .ck-balloon-rotator__navigation{background:var(--ck-color-toolbar-background);border-bottom:1px solid var(--ck-color-toolbar-border);padding:0 var(--ck-spacing-small)}.ck .ck-balloon-rotator__navigation>*{margin-right:var(--ck-spacing-small);margin-top:var(--ck-spacing-small);margin-bottom:var(--ck-spacing-small)}.ck .ck-balloon-rotator__navigation .ck-balloon-rotator__counter{margin-right:var(--ck-spacing-standard);margin-left:var(--ck-spacing-small)}.ck .ck-balloon-rotator__content .ck.ck-annotation-wrapper{box-shadow:none}"},"./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/panel/fakepanel.css":function(e,t){e.exports=".ck .ck-fake-panel{position:absolute;z-index:calc(var(--ck-z-modal) - 1)}.ck .ck-fake-panel div{position:absolute}.ck .ck-fake-panel div:first-child{z-index:2}.ck .ck-fake-panel div:nth-child(2){z-index:1}:root{--ck-balloon-fake-panel-offset-horizontal:6px;--ck-balloon-fake-panel-offset-vertical:6px}.ck .ck-fake-panel div{box-shadow:var(--ck-drop-shadow),0 0;min-height:15px;background:var(--ck-color-panel-background);border:1px solid var(--ck-color-panel-border);border-radius:var(--ck-border-radius);width:100%;height:100%}.ck .ck-fake-panel div:first-child{margin-left:var(--ck-balloon-fake-panel-offset-horizontal);margin-top:var(--ck-balloon-fake-panel-offset-vertical)}.ck .ck-fake-panel div:nth-child(2){margin-left:calc(var(--ck-balloon-fake-panel-offset-horizontal)*2);margin-top:calc(var(--ck-balloon-fake-panel-offset-vertical)*2)}.ck .ck-fake-panel div:nth-child(3){margin-left:calc(var(--ck-balloon-fake-panel-offset-horizontal)*3);margin-top:calc(var(--ck-balloon-fake-panel-offset-vertical)*3)}.ck .ck-balloon-panel_arrow_s+.ck-fake-panel,.ck .ck-balloon-panel_arrow_se+.ck-fake-panel,.ck .ck-balloon-panel_arrow_sw+.ck-fake-panel{--ck-balloon-fake-panel-offset-vertical:-6px}"},"./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/panel/stickypanel.css":function(e,t){e.exports=".ck.ck-sticky-panel .ck-sticky-panel__content_sticky{z-index:var(--ck-z-modal);position:fixed;top:0}.ck.ck-sticky-panel .ck-sticky-panel__content_sticky_bottom-limit{top:auto;position:absolute}.ck.ck-sticky-panel .ck-sticky-panel__content_sticky{box-shadow:var(--ck-drop-shadow),0 0;border-width:0 1px 1px;border-top-left-radius:0;border-top-right-radius:0}"},"./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/toolbar/blocktoolbar.css":function(e,t){e.exports=".ck.ck-block-toolbar-button{position:absolute;z-index:var(--ck-z-default)}:root{--ck-color-block-toolbar-button:var(--ck-color-text);--ck-block-toolbar-button-size:var(--ck-font-size-normal)}.ck.ck-block-toolbar-button{color:var(--ck-color-block-toolbar-button);font-size:var(--ck-block-toolbar-size)}"},"./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/toolbar/toolbar.css":function(e,t){e.exports=".ck.ck-toolbar{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;display:flex;flex-flow:row nowrap;align-items:center}.ck.ck-toolbar>.ck-toolbar__items{display:flex;flex-flow:row wrap;align-items:center;flex-grow:1}.ck.ck-toolbar .ck.ck-toolbar__separator{display:inline-block}.ck.ck-toolbar .ck.ck-toolbar__separator:first-child,.ck.ck-toolbar .ck.ck-toolbar__separator:last-child{display:none}.ck.ck-toolbar .ck-toolbar__line-break{flex-basis:100%}.ck.ck-toolbar.ck-toolbar_grouping>.ck-toolbar__items{flex-wrap:nowrap}.ck.ck-toolbar.ck-toolbar_vertical>.ck-toolbar__items{flex-direction:column}.ck.ck-toolbar.ck-toolbar_floating>.ck-toolbar__items{flex-wrap:nowrap}.ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown>.ck-dropdown__button .ck-dropdown__arrow{display:none}.ck.ck-toolbar{border-radius:0}.ck-rounded-corners .ck.ck-toolbar,.ck.ck-toolbar.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-toolbar{background:var(--ck-color-toolbar-background);padding:0 var(--ck-spacing-small);border:1px solid var(--ck-color-toolbar-border)}.ck.ck-toolbar .ck.ck-toolbar__separator{align-self:stretch;width:1px;min-width:1px;background:var(--ck-color-toolbar-border);margin-top:var(--ck-spacing-small);margin-bottom:var(--ck-spacing-small)}.ck.ck-toolbar .ck-toolbar__line-break{height:0}.ck.ck-toolbar>.ck-toolbar__items>:not(.ck-toolbar__line-break){margin-right:var(--ck-spacing-small)}.ck.ck-toolbar>.ck-toolbar__items:empty+.ck.ck-toolbar__separator{display:none}.ck.ck-toolbar>.ck-toolbar__items>:not(.ck-toolbar__line-break),.ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown{margin-top:var(--ck-spacing-small);margin-bottom:var(--ck-spacing-small)}.ck.ck-toolbar.ck-toolbar_vertical{padding:0}.ck.ck-toolbar.ck-toolbar_vertical>.ck-toolbar__items>.ck{width:100%;margin:0;border-radius:0;border:0}.ck.ck-toolbar.ck-toolbar_compact{padding:0}.ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>*{margin:0}.ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>:not(:first-child):not(:last-child){border-radius:0}.ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown>.ck.ck-button.ck-dropdown__button{padding-left:var(--ck-spacing-tiny)}.ck-toolbar-container .ck.ck-toolbar{border:0}.ck.ck-toolbar[dir=rtl]>.ck-toolbar__items>.ck,[dir=rtl] .ck.ck-toolbar>.ck-toolbar__items>.ck{margin-right:0}.ck.ck-toolbar[dir=rtl]:not(.ck-toolbar_compact)>.ck-toolbar__items>.ck,[dir=rtl] .ck.ck-toolbar:not(.ck-toolbar_compact)>.ck-toolbar__items>.ck{margin-left:var(--ck-spacing-small)}.ck.ck-toolbar[dir=rtl]>.ck-toolbar__items>.ck:last-child,[dir=rtl] .ck.ck-toolbar>.ck-toolbar__items>.ck:last-child{margin-left:0}.ck.ck-toolbar[dir=rtl].ck-toolbar_compact>.ck-toolbar__items>.ck:first-child,[dir=rtl] .ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>.ck:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.ck.ck-toolbar[dir=rtl].ck-toolbar_compact>.ck-toolbar__items>.ck:last-child,[dir=rtl] .ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>.ck:last-child{border-top-right-radius:0;border-bottom-right-radius:0}.ck.ck-toolbar[dir=rtl]>.ck.ck-toolbar__separator,[dir=rtl] .ck.ck-toolbar>.ck.ck-toolbar__separator{margin-left:var(--ck-spacing-small)}.ck.ck-toolbar[dir=rtl].ck-toolbar_grouping>.ck-toolbar__items:not(:empty):not(:only-child),[dir=rtl] .ck.ck-toolbar.ck-toolbar_grouping>.ck-toolbar__items:not(:empty):not(:only-child){margin-left:var(--ck-spacing-small)}.ck.ck-toolbar[dir=ltr]>.ck-toolbar__items>.ck:last-child,[dir=ltr] .ck.ck-toolbar>.ck-toolbar__items>.ck:last-child{margin-right:0}.ck.ck-toolbar[dir=ltr].ck-toolbar_compact>.ck-toolbar__items>.ck:first-child,[dir=ltr] .ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>.ck:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.ck.ck-toolbar[dir=ltr].ck-toolbar_compact>.ck-toolbar__items>.ck:last-child,[dir=ltr] .ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>.ck:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.ck.ck-toolbar[dir=ltr]>.ck.ck-toolbar__separator,[dir=ltr] .ck.ck-toolbar>.ck.ck-toolbar__separator{margin-right:var(--ck-spacing-small)}.ck.ck-toolbar[dir=ltr].ck-toolbar_grouping>.ck-toolbar__items:not(:empty):not(:only-child),[dir=ltr] .ck.ck-toolbar.ck-toolbar_grouping>.ck-toolbar__items:not(:empty):not(:only-child){margin-right:var(--ck-spacing-small)}"},"./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/tooltip/tooltip.css":function(e,t){e.exports='.ck.ck-tooltip,.ck.ck-tooltip .ck-tooltip__text:after{position:absolute;pointer-events:none;-webkit-backface-visibility:hidden}.ck.ck-tooltip{visibility:hidden;opacity:0;display:none;z-index:var(--ck-z-modal)}.ck.ck-tooltip .ck-tooltip__text{display:inline-block}.ck.ck-tooltip .ck-tooltip__text:after{content:"";width:0;height:0}:root{--ck-tooltip-arrow-size:5px}.ck.ck-tooltip{left:50%;top:0;transition:opacity .2s ease-in-out .2s}.ck.ck-tooltip .ck-tooltip__text{border-radius:0}.ck-rounded-corners .ck.ck-tooltip .ck-tooltip__text,.ck.ck-tooltip .ck-tooltip__text.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-tooltip .ck-tooltip__text{font-size:.9em;line-height:1.5;color:var(--ck-color-tooltip-text);padding:var(--ck-spacing-small) var(--ck-spacing-medium);background:var(--ck-color-tooltip-background);position:relative;left:-50%}.ck.ck-tooltip .ck-tooltip__text:after{transition:opacity .2s ease-in-out .2s;border-style:solid;left:50%}.ck.ck-tooltip.ck-tooltip_s,.ck.ck-tooltip.ck-tooltip_se,.ck.ck-tooltip.ck-tooltip_sw{bottom:calc(var(--ck-tooltip-arrow-size)*-1);transform:translateY(100%)}.ck.ck-tooltip.ck-tooltip_s .ck-tooltip__text:after,.ck.ck-tooltip.ck-tooltip_se .ck-tooltip__text:after,.ck.ck-tooltip.ck-tooltip_sw .ck-tooltip__text:after{top:calc(var(--ck-tooltip-arrow-size)*-1 + 1px);transform:translateX(-50%);border-left-color:transparent;border-bottom-color:var(--ck-color-tooltip-background);border-right-color:transparent;border-top-color:transparent;border-left-width:var(--ck-tooltip-arrow-size);border-bottom-width:var(--ck-tooltip-arrow-size);border-right-width:var(--ck-tooltip-arrow-size);border-top-width:0}.ck.ck-tooltip.ck-tooltip_sw{right:50%;left:auto}.ck.ck-tooltip.ck-tooltip_sw .ck-tooltip__text{left:auto;right:calc(var(--ck-tooltip-arrow-size)*-2)}.ck.ck-tooltip.ck-tooltip_sw .ck-tooltip__text:after{left:auto;right:0}.ck.ck-tooltip.ck-tooltip_se{left:50%;right:auto}.ck.ck-tooltip.ck-tooltip_se .ck-tooltip__text{right:auto;left:calc(var(--ck-tooltip-arrow-size)*-2)}.ck.ck-tooltip.ck-tooltip_se .ck-tooltip__text:after{right:auto;left:0;transform:translateX(50%)}.ck.ck-tooltip.ck-tooltip_n{top:calc(var(--ck-tooltip-arrow-size)*-1);transform:translateY(-100%)}.ck.ck-tooltip.ck-tooltip_n .ck-tooltip__text:after{bottom:calc(var(--ck-tooltip-arrow-size)*-1);transform:translateX(-50%);border-left-color:transparent;border-bottom-color:transparent;border-right-color:transparent;border-top-color:var(--ck-color-tooltip-background);border-left-width:var(--ck-tooltip-arrow-size);border-bottom-width:0;border-right-width:var(--ck-tooltip-arrow-size);border-top-width:var(--ck-tooltip-arrow-size)}.ck.ck-tooltip.ck-tooltip_e{left:calc(100% + var(--ck-tooltip-arrow-size));top:50%}.ck.ck-tooltip.ck-tooltip_e .ck-tooltip__text{left:0;transform:translateY(-50%)}.ck.ck-tooltip.ck-tooltip_e .ck-tooltip__text:after{left:calc(var(--ck-tooltip-arrow-size)*-1);top:calc(50% - var(--ck-tooltip-arrow-size)*1);border-left-color:transparent;border-bottom-color:transparent;border-right-color:var(--ck-color-tooltip-background);border-top-color:transparent;border-left-width:0;border-bottom-width:var(--ck-tooltip-arrow-size);border-right-width:var(--ck-tooltip-arrow-size);border-top-width:var(--ck-tooltip-arrow-size)}.ck.ck-tooltip.ck-tooltip_w{right:calc(100% + var(--ck-tooltip-arrow-size));left:auto;top:50%}.ck.ck-tooltip.ck-tooltip_w .ck-tooltip__text{left:0;transform:translateY(-50%)}.ck.ck-tooltip.ck-tooltip_w .ck-tooltip__text:after{left:100%;top:calc(50% - var(--ck-tooltip-arrow-size)*1);border-left-color:var(--ck-color-tooltip-background);border-bottom-color:transparent;border-right-color:transparent;border-top-color:transparent;border-left-width:var(--ck-tooltip-arrow-size);border-bottom-width:var(--ck-tooltip-arrow-size);border-right-width:0;border-top-width:var(--ck-tooltip-arrow-size)}'},"./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/globals/globals.css":function(e,t){e.exports=".ck-hidden{display:none!important}.ck.ck-reset,.ck.ck-reset_all,.ck.ck-reset_all *{box-sizing:border-box;width:auto;height:auto;position:static}:root{--ck-z-default:1;--ck-z-modal:calc(var(--ck-z-default) + 999)}.ck-transitions-disabled,.ck-transitions-disabled *{transition:none!important}:root{--ck-color-base-foreground:#fafafa;--ck-color-base-background:#fff;--ck-color-base-border:#c4c4c4;--ck-color-base-action:#61b045;--ck-color-base-focus:#6cb5f9;--ck-color-base-text:#333;--ck-color-base-active:#198cf0;--ck-color-base-active-focus:#0e7fe1;--ck-color-base-error:#db3700;--ck-color-focus-border-coordinates:208,79%,51%;--ck-color-focus-border:hsl(var(--ck-color-focus-border-coordinates));--ck-color-focus-outer-shadow:#bcdefb;--ck-color-focus-disabled-shadow:rgba(119,186,248,0.3);--ck-color-focus-error-shadow:rgba(255,64,31,0.3);--ck-color-text:var(--ck-color-base-text);--ck-color-shadow-drop:rgba(0,0,0,0.15);--ck-color-shadow-drop-active:rgba(0,0,0,0.2);--ck-color-shadow-inner:rgba(0,0,0,0.1);--ck-color-button-default-background:transparent;--ck-color-button-default-hover-background:#e6e6e6;--ck-color-button-default-active-background:#d9d9d9;--ck-color-button-default-active-shadow:#bfbfbf;--ck-color-button-default-disabled-background:transparent;--ck-color-button-on-background:#dedede;--ck-color-button-on-hover-background:#c4c4c4;--ck-color-button-on-active-background:#bababa;--ck-color-button-on-active-shadow:#a1a1a1;--ck-color-button-on-disabled-background:#dedede;--ck-color-button-action-background:var(--ck-color-base-action);--ck-color-button-action-hover-background:#579e3d;--ck-color-button-action-active-background:#53973b;--ck-color-button-action-active-shadow:#498433;--ck-color-button-action-disabled-background:#7ec365;--ck-color-button-action-text:var(--ck-color-base-background);--ck-color-button-save:#008a00;--ck-color-button-cancel:#db3700;--ck-color-switch-button-off-background:#b0b0b0;--ck-color-switch-button-off-hover-background:#a3a3a3;--ck-color-switch-button-on-background:var(--ck-color-button-action-background);--ck-color-switch-button-on-hover-background:#579e3d;--ck-color-switch-button-inner-background:var(--ck-color-base-background);--ck-color-switch-button-inner-shadow:rgba(0,0,0,0.1);--ck-color-dropdown-panel-background:var(--ck-color-base-background);--ck-color-dropdown-panel-border:var(--ck-color-base-border);--ck-color-input-background:var(--ck-color-base-background);--ck-color-input-border:#c7c7c7;--ck-color-input-error-border:var(--ck-color-base-error);--ck-color-input-text:var(--ck-color-base-text);--ck-color-input-disabled-background:#f2f2f2;--ck-color-input-disabled-border:#c7c7c7;--ck-color-input-disabled-text:#757575;--ck-color-list-background:var(--ck-color-base-background);--ck-color-list-button-hover-background:var(--ck-color-button-default-hover-background);--ck-color-list-button-on-background:var(--ck-color-base-active);--ck-color-list-button-on-background-focus:var(--ck-color-base-active-focus);--ck-color-list-button-on-text:var(--ck-color-base-background);--ck-color-panel-background:var(--ck-color-base-background);--ck-color-panel-border:var(--ck-color-base-border);--ck-color-toolbar-background:var(--ck-color-base-foreground);--ck-color-toolbar-border:var(--ck-color-base-border);--ck-color-tooltip-background:var(--ck-color-base-text);--ck-color-tooltip-text:var(--ck-color-base-background);--ck-color-engine-placeholder-text:#707070;--ck-color-upload-bar-background:#6cb5f9;--ck-color-link-default:#0000f0;--ck-color-link-selected-background:rgba(31,177,255,0.1);--ck-color-link-fake-selection:rgba(31,177,255,0.3);--ck-disabled-opacity:.5;--ck-focus-outer-shadow-geometry:0 0 0 3px;--ck-focus-outer-shadow:var(--ck-focus-outer-shadow-geometry) var(--ck-color-focus-outer-shadow);--ck-focus-disabled-outer-shadow:var(--ck-focus-outer-shadow-geometry) var(--ck-color-focus-disabled-shadow);--ck-focus-error-outer-shadow:var(--ck-focus-outer-shadow-geometry) var(--ck-color-focus-error-shadow);--ck-focus-ring:1px solid var(--ck-color-focus-border);--ck-font-size-base:13px;--ck-line-height-base:1.84615;--ck-font-face:Helvetica,Arial,Tahoma,Verdana,Sans-Serif;--ck-font-size-tiny:0.7em;--ck-font-size-small:0.75em;--ck-font-size-normal:1em;--ck-font-size-big:1.4em;--ck-font-size-large:1.8em;--ck-ui-component-min-height:2.3em}.ck.ck-reset,.ck.ck-reset_all,.ck.ck-reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;vertical-align:middle;transition:none;word-wrap:break-word}.ck.ck-reset_all,.ck.ck-reset_all *{border-collapse:collapse;font:normal normal normal var(--ck-font-size-base)/var(--ck-line-height-base) var(--ck-font-face);color:var(--ck-color-text);text-align:left;white-space:nowrap;cursor:auto;float:none}.ck.ck-reset_all .ck-rtl *{text-align:right}.ck.ck-reset_all iframe{vertical-align:inherit}.ck.ck-reset_all textarea{white-space:pre-wrap}.ck.ck-reset_all input[type=password],.ck.ck-reset_all input[type=text],.ck.ck-reset_all textarea{cursor:text}.ck.ck-reset_all input[type=password][disabled],.ck.ck-reset_all input[type=text][disabled],.ck.ck-reset_all textarea[disabled]{cursor:default}.ck.ck-reset_all fieldset{padding:10px;border:2px groove #dfdee3}.ck.ck-reset_all button::-moz-focus-inner{padding:0;border:0}.ck[dir=rtl],.ck[dir=rtl] .ck{text-align:right}:root{--ck-border-radius:2px;--ck-inner-shadow:2px 2px 3px var(--ck-color-shadow-inner) inset;--ck-drop-shadow:0 1px 2px 1px var(--ck-color-shadow-drop);--ck-drop-shadow-active:0 3px 6px 1px var(--ck-color-shadow-drop-active);--ck-spacing-unit:0.6em;--ck-spacing-large:calc(var(--ck-spacing-unit)*1.5);--ck-spacing-standard:var(--ck-spacing-unit);--ck-spacing-medium:calc(var(--ck-spacing-unit)*0.8);--ck-spacing-small:calc(var(--ck-spacing-unit)*0.5);--ck-spacing-tiny:calc(var(--ck-spacing-unit)*0.3);--ck-spacing-extra-tiny:calc(var(--ck-spacing-unit)*0.16)}"},"./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-widget/theme/widget.css":function(e,t){e.exports=":root{--ck-color-resizer:var(--ck-color-focus-border);--ck-color-resizer-tooltip-background:#262626;--ck-color-resizer-tooltip-text:#f2f2f2;--ck-resizer-border-radius:var(--ck-border-radius);--ck-resizer-tooltip-offset:10px;--ck-resizer-tooltip-height:calc(var(--ck-spacing-small)*2 + 10px)}.ck .ck-widget,.ck .ck-widget.ck-widget_with-selection-handle{position:relative}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle{position:absolute}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle .ck-icon{display:block}.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected>.ck-widget__selection-handle,.ck .ck-widget.ck-widget_with-selection-handle:hover>.ck-widget__selection-handle{visibility:visible}.ck .ck-size-view{background:var(--ck-color-resizer-tooltip-background);color:var(--ck-color-resizer-tooltip-text);border:1px solid var(--ck-color-resizer-tooltip-text);border-radius:var(--ck-resizer-border-radius);font-size:var(--ck-font-size-tiny);display:block;padding:0 var(--ck-spacing-small);height:var(--ck-resizer-tooltip-height);line-height:var(--ck-resizer-tooltip-height)}.ck .ck-size-view.ck-orientation-above-center,.ck .ck-size-view.ck-orientation-bottom-left,.ck .ck-size-view.ck-orientation-bottom-right,.ck .ck-size-view.ck-orientation-top-left,.ck .ck-size-view.ck-orientation-top-right{position:absolute}.ck .ck-size-view.ck-orientation-top-left{top:var(--ck-resizer-tooltip-offset);left:var(--ck-resizer-tooltip-offset)}.ck .ck-size-view.ck-orientation-top-right{top:var(--ck-resizer-tooltip-offset);right:var(--ck-resizer-tooltip-offset)}.ck .ck-size-view.ck-orientation-bottom-right{bottom:var(--ck-resizer-tooltip-offset);right:var(--ck-resizer-tooltip-offset)}.ck .ck-size-view.ck-orientation-bottom-left{bottom:var(--ck-resizer-tooltip-offset);left:var(--ck-resizer-tooltip-offset)}.ck .ck-size-view.ck-orientation-above-center{top:calc(var(--ck-resizer-tooltip-height)*-1);left:50%;transform:translate(-50%)}:root{--ck-widget-outline-thickness:3px;--ck-widget-handler-icon-size:16px;--ck-widget-handler-animation-duration:200ms;--ck-widget-handler-animation-curve:ease;--ck-color-widget-blurred-border:#dedede;--ck-color-widget-hover-border:#ffc83d;--ck-color-widget-editable-focus-background:var(--ck-color-base-background);--ck-color-widget-drag-handler-icon-color:var(--ck-color-base-background)}.ck .ck-widget{outline-width:var(--ck-widget-outline-thickness);outline-style:solid;outline-color:transparent;transition:outline-color var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve)}.ck .ck-widget.ck-widget_selected,.ck .ck-widget.ck-widget_selected:hover{outline:var(--ck-widget-outline-thickness) solid var(--ck-color-focus-border)}.ck .ck-widget:hover{outline-color:var(--ck-color-widget-hover-border)}.ck .ck-editor__nested-editable{border:1px solid transparent}.ck .ck-editor__nested-editable.ck-editor__nested-editable_focused,.ck .ck-editor__nested-editable:focus{outline:none;border:var(--ck-focus-ring);box-shadow:var(--ck-inner-shadow),0 0;background-color:var(--ck-color-widget-editable-focus-background)}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle{padding:4px;box-sizing:border-box;background-color:transparent;opacity:0;transition:background-color var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve),visibility var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve),opacity var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve);border-radius:var(--ck-border-radius) var(--ck-border-radius) 0 0;transform:translateY(-100%);left:calc(0px - var(--ck-widget-outline-thickness));top:0}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle .ck-icon{width:var(--ck-widget-handler-icon-size);height:var(--ck-widget-handler-icon-size);color:var(--ck-color-widget-drag-handler-icon-color)}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle .ck-icon .ck-icon__selected-indicator{opacity:0;transition:opacity .3s var(--ck-widget-handler-animation-curve)}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle:hover .ck-icon .ck-icon__selected-indicator{opacity:1}.ck .ck-widget.ck-widget_with-selection-handle:hover>.ck-widget__selection-handle{opacity:1;background-color:var(--ck-color-widget-hover-border)}.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected:hover>.ck-widget__selection-handle,.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected>.ck-widget__selection-handle{opacity:1;background-color:var(--ck-color-focus-border)}.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected:hover>.ck-widget__selection-handle .ck-icon .ck-icon__selected-indicator,.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected>.ck-widget__selection-handle .ck-icon .ck-icon__selected-indicator{opacity:1}.ck[dir=rtl] .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle{left:auto;right:calc(0px - var(--ck-widget-outline-thickness))}.ck.ck-editor__editable.ck-read-only .ck-widget{transition:none}.ck.ck-editor__editable.ck-read-only .ck-widget:not(.ck-widget_selected){--ck-widget-outline-thickness:0px}.ck.ck-editor__editable.ck-read-only .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle,.ck.ck-editor__editable.ck-read-only .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle:hover{background:var(--ck-color-widget-blurred-border)}.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected,.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected:hover{outline-color:var(--ck-color-widget-blurred-border)}.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected.ck-widget_with-selection-handle>.ck-widget__selection-handle,.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected.ck-widget_with-selection-handle>.ck-widget__selection-handle:hover,.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected:hover.ck-widget_with-selection-handle>.ck-widget__selection-handle,.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected:hover.ck-widget_with-selection-handle>.ck-widget__selection-handle:hover{background:var(--ck-color-widget-blurred-border)}.ck.ck-editor__editable>.ck-widget.ck-widget_with-selection-handle:first-child,.ck.ck-editor__editable blockquote>.ck-widget.ck-widget_with-selection-handle:first-child{margin-top:calc(1em + var(--ck-widget-handler-icon-size))}"},"./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-widget/theme/widgetresize.css":function(e,t){e.exports=".ck .ck-widget_with-resizer{position:relative}.ck .ck-widget__resizer{display:none;position:absolute;pointer-events:none;left:0;top:0}.ck-focused .ck-widget_with-resizer.ck-widget_selected>.ck-widget__resizer{display:block}.ck .ck-widget__resizer__handle{position:absolute;pointer-events:all}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-bottom-right,.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-top-left{cursor:nwse-resize}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-bottom-left,.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-top-right{cursor:nesw-resize}:root{--ck-resizer-size:10px;--ck-resizer-offset:calc(var(--ck-resizer-size)/-2 - 2px);--ck-resizer-border-width:1px}.ck .ck-widget__resizer{outline:1px solid var(--ck-color-resizer)}.ck .ck-widget__resizer__handle{width:var(--ck-resizer-size);height:var(--ck-resizer-size);background:var(--ck-color-focus-border);border:var(--ck-resizer-border-width) solid #fff;border-radius:var(--ck-resizer-border-radius)}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-top-left{top:var(--ck-resizer-offset);left:var(--ck-resizer-offset)}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-top-right{top:var(--ck-resizer-offset);right:var(--ck-resizer-offset)}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-bottom-right{bottom:var(--ck-resizer-offset);right:var(--ck-resizer-offset)}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-bottom-left{bottom:var(--ck-resizer-offset);left:var(--ck-resizer-offset)}"},"./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-widget/theme/widgettypearound.css":function(e,t){e.exports='.ck .ck-widget .ck-widget__type-around__button{display:block;position:absolute;overflow:hidden;z-index:var(--ck-z-default)}.ck .ck-widget .ck-widget__type-around__button svg{position:absolute;top:50%;left:50%;z-index:calc(var(--ck-z-default) + 2)}.ck .ck-widget .ck-widget__type-around__button.ck-widget__type-around__button_before{top:calc(var(--ck-widget-outline-thickness)*-0.5);left:min(10%,30px);transform:translateY(-50%)}.ck .ck-widget .ck-widget__type-around__button.ck-widget__type-around__button_after{bottom:calc(var(--ck-widget-outline-thickness)*-0.5);right:min(10%,30px);transform:translateY(50%)}.ck .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button:after,.ck .ck-widget>.ck-widget__type-around>.ck-widget__type-around__button:hover:after{content:"";display:block;position:absolute;top:1px;left:1px;z-index:calc(var(--ck-z-default) + 1)}.ck .ck-widget>.ck-widget__type-around>.ck-widget__type-around__fake-caret{display:none;position:absolute;left:0;right:0}.ck .ck-widget:hover>.ck-widget__type-around>.ck-widget__type-around__fake-caret{left:calc(var(--ck-widget-outline-thickness)*-1);right:calc(var(--ck-widget-outline-thickness)*-1)}.ck .ck-widget.ck-widget_type-around_show-fake-caret_before>.ck-widget__type-around>.ck-widget__type-around__fake-caret{top:calc(var(--ck-widget-outline-thickness)*-1 - 1px);display:block}.ck .ck-widget.ck-widget_type-around_show-fake-caret_after>.ck-widget__type-around>.ck-widget__type-around__fake-caret{bottom:calc(var(--ck-widget-outline-thickness)*-1 - 1px);display:block}.ck.ck-editor__editable.ck-read-only .ck-widget__type-around,.ck.ck-editor__editable.ck-restricted-editing_mode_restricted .ck-widget__type-around,.ck.ck-editor__editable.ck-widget__type-around_disabled .ck-widget__type-around{display:none}:root{--ck-widget-type-around-button-size:20px;--ck-color-widget-type-around-button-active:var(--ck-color-focus-border);--ck-color-widget-type-around-button-hover:var(--ck-color-widget-hover-border);--ck-color-widget-type-around-button-blurred-editable:var(--ck-color-widget-blurred-border);--ck-color-widget-type-around-button-radar-start-alpha:0;--ck-color-widget-type-around-button-radar-end-alpha:.3;--ck-color-widget-type-around-button-icon:var(--ck-color-base-background)}.ck .ck-widget .ck-widget__type-around__button{width:var(--ck-widget-type-around-button-size);height:var(--ck-widget-type-around-button-size);background:var(--ck-color-widget-type-around-button);border-radius:100px;transition:opacity var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve),background var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve);opacity:0;pointer-events:none}.ck .ck-widget .ck-widget__type-around__button svg{width:10px;height:8px;transform:translate(-50%,-50%);transition:transform .5s ease;margin-top:1px}.ck .ck-widget .ck-widget__type-around__button svg *{stroke-dasharray:10;stroke-dashoffset:0;fill:none;stroke:var(--ck-color-widget-type-around-button-icon);stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round}.ck .ck-widget .ck-widget__type-around__button svg line{stroke-dasharray:7}.ck .ck-widget .ck-widget__type-around__button:hover{animation:ck-widget-type-around-button-sonar 1s ease infinite}.ck .ck-widget .ck-widget__type-around__button:hover svg polyline{animation:ck-widget-type-around-arrow-dash 2s linear}.ck .ck-widget .ck-widget__type-around__button:hover svg line{animation:ck-widget-type-around-arrow-tip-dash 2s linear}.ck .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button,.ck .ck-widget:hover>.ck-widget__type-around>.ck-widget__type-around__button{opacity:1;pointer-events:auto}.ck .ck-widget:not(.ck-widget_selected)>.ck-widget__type-around>.ck-widget__type-around__button{background:var(--ck-color-widget-type-around-button-hover)}.ck .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button,.ck .ck-widget>.ck-widget__type-around>.ck-widget__type-around__button:hover{background:var(--ck-color-widget-type-around-button-active)}.ck .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button:after,.ck .ck-widget>.ck-widget__type-around>.ck-widget__type-around__button:hover:after{width:calc(var(--ck-widget-type-around-button-size) - 2px);height:calc(var(--ck-widget-type-around-button-size) - 2px);border-radius:100px;background:linear-gradient(135deg,hsla(0,0%,100%,0),hsla(0,0%,100%,.3))}.ck .ck-widget.ck-widget_with-selection-handle>.ck-widget__type-around>.ck-widget__type-around__button_before{margin-left:20px}.ck .ck-widget .ck-widget__type-around__fake-caret{pointer-events:none;height:1px;animation:ck-widget-type-around-fake-caret-pulse 1s linear infinite normal forwards;outline:1px solid hsla(0,0%,100%,.5);background:var(--ck-color-base-text)}.ck .ck-widget.ck-widget_selected.ck-widget_type-around_show-fake-caret_after,.ck .ck-widget.ck-widget_selected.ck-widget_type-around_show-fake-caret_before{outline-color:transparent}.ck .ck-widget.ck-widget_type-around_show-fake-caret_after.ck-widget_selected:hover,.ck .ck-widget.ck-widget_type-around_show-fake-caret_before.ck-widget_selected:hover{outline-color:var(--ck-color-widget-hover-border)}.ck .ck-widget.ck-widget_type-around_show-fake-caret_after>.ck-widget__type-around>.ck-widget__type-around__button,.ck .ck-widget.ck-widget_type-around_show-fake-caret_before>.ck-widget__type-around>.ck-widget__type-around__button{opacity:0;pointer-events:none}.ck .ck-widget.ck-widget_type-around_show-fake-caret_after.ck-widget_with-selection-handle.ck-widget_selected:hover>.ck-widget__selection-handle,.ck .ck-widget.ck-widget_type-around_show-fake-caret_after.ck-widget_with-selection-handle.ck-widget_selected>.ck-widget__selection-handle,.ck .ck-widget.ck-widget_type-around_show-fake-caret_before.ck-widget_with-selection-handle.ck-widget_selected:hover>.ck-widget__selection-handle,.ck .ck-widget.ck-widget_type-around_show-fake-caret_before.ck-widget_with-selection-handle.ck-widget_selected>.ck-widget__selection-handle{opacity:0}.ck .ck-widget.ck-widget_type-around_show-fake-caret_after.ck-widget_selected.ck-widget_with-resizer>.ck-widget__resizer,.ck .ck-widget.ck-widget_type-around_show-fake-caret_before.ck-widget_selected.ck-widget_with-resizer>.ck-widget__resizer{opacity:0}.ck[dir=rtl] .ck-widget.ck-widget_with-selection-handle .ck-widget__type-around>.ck-widget__type-around__button_before{margin-left:0;margin-right:20px}.ck-editor__nested-editable.ck-editor__editable_selected .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button,.ck-editor__nested-editable.ck-editor__editable_selected .ck-widget:hover>.ck-widget__type-around>.ck-widget__type-around__button{opacity:0;pointer-events:none}.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button:not(:hover){background:var(--ck-color-widget-type-around-button-blurred-editable)}.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button:not(:hover) svg *{stroke:#999}@keyframes ck-widget-type-around-arrow-dash{0%{stroke-dashoffset:10}20%,to{stroke-dashoffset:0}}@keyframes ck-widget-type-around-arrow-tip-dash{0%,20%{stroke-dashoffset:7}40%,to{stroke-dashoffset:0}}@keyframes ck-widget-type-around-button-sonar{0%{box-shadow:0 0 0 0 hsla(var(--ck-color-focus-border-coordinates),var(--ck-color-widget-type-around-button-radar-start-alpha))}50%{box-shadow:0 0 0 5px hsla(var(--ck-color-focus-border-coordinates),var(--ck-color-widget-type-around-button-radar-end-alpha))}to{box-shadow:0 0 0 5px hsla(var(--ck-color-focus-border-coordinates),var(--ck-color-widget-type-around-button-radar-start-alpha))}}@keyframes ck-widget-type-around-fake-caret-pulse{0%{opacity:1}49%{opacity:1}50%{opacity:0}99%{opacity:0}to{opacity:1}}'},"./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js":function(e,t,o){"use strict";var i,s=function(){return void 0===i&&(i=Boolean(window&&document&&document.all&&!window.atob)),i},r=function(){var e={};return function(t){if(void 0===e[t]){var o=document.querySelector(t);if(window.HTMLIFrameElement&&o instanceof window.HTMLIFrameElement)try{o=o.contentDocument.head}catch(e){o=null}e[t]=o}return e[t]}}(),n=[];function a(e){for(var t=-1,o=0;o<n.length;o++)if(n[o].identifier===e){t=o;break}return t}function c(e,t){for(var o={},i=[],s=0;s<e.length;s++){var r=e[s],c=t.base?r[0]+t.base:r[0],l=o[c]||0,d="".concat(c," ").concat(l);o[c]=l+1;var u=a(d),h={css:r[1],media:r[2],sourceMap:r[3]};-1!==u?(n[u].references++,n[u].updater(h)):n.push({identifier:d,updater:m(h,t),references:1}),i.push(d)}return i}function l(e){var t=document.createElement("style"),i=e.attributes||{};if(void 0===i.nonce){var s=o.nc;s&&(i.nonce=s)}if(Object.keys(i).forEach((function(e){t.setAttribute(e,i[e])})),"function"==typeof e.insert)e.insert(t);else{var n=r(e.insert||"head");if(!n)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");n.appendChild(t)}return t}var d,u=(d=[],function(e,t){return d[e]=t,d.filter(Boolean).join("\n")});function h(e,t,o,i){var s=o?"":i.media?"@media ".concat(i.media," {").concat(i.css,"}"):i.css;if(e.styleSheet)e.styleSheet.cssText=u(t,s);else{var r=document.createTextNode(s),n=e.childNodes;n[t]&&e.removeChild(n[t]),n.length?e.insertBefore(r,n[t]):e.appendChild(r)}}function p(e,t,o){var i=o.css,s=o.media,r=o.sourceMap;if(s?e.setAttribute("media",s):e.removeAttribute("media"),r&&"undefined"!=typeof btoa&&(i+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(r))))," */")),e.styleSheet)e.styleSheet.cssText=i;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(i))}}var g=null,f=0;function m(e,t){var o,i,s;if(t.singleton){var r=f++;o=g||(g=l(t)),i=h.bind(null,o,r,!1),s=h.bind(null,o,r,!0)}else o=l(t),i=p.bind(null,o,t),s=function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(o)};return i(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;i(e=t)}else s()}}e.exports=function(e,t){(t=t||{}).singleton||"boolean"==typeof t.singleton||(t.singleton=s());var o=c(e=e||[],t);return function(e){if(e=e||[],"[object Array]"===Object.prototype.toString.call(e)){for(var i=0;i<o.length;i++){var s=a(o[i]);n[s].references--}for(var r=c(e,t),l=0;l<o.length;l++){var d=a(o[l]);0===n[d].references&&(n[d].updater(),n.splice(d,1))}o=r}}}},"./node_modules/webpack/buildin/global.js":function(e,t){var o;o=function(){return this}();try{o=o||new Function("return this")()}catch(e){"object"==typeof window&&(o=window)}e.exports=o},"./node_modules/webpack/buildin/harmony-module.js":function(e,t){e.exports=function(e){if(!e.webpackPolyfill){var t=Object.create(e);t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),Object.defineProperty(t,"exports",{enumerable:!0}),t.webpackPolyfill=1}return t}},"./packages/ckeditor5-clipboard/theme/clipboard.css":function(e,t,o){var i=o("./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),s=o("./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-clipboard/theme/clipboard.css");"string"==typeof(s=s.__esModule?s.default:s)&&(s=[[e.i,s,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};i(s,r);e.exports=s.locals||{}},"./packages/ckeditor5-core/src/command.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return r}));var i=o("./packages/ckeditor5-utils/src/observablemixin.js"),s=o("./packages/ckeditor5-utils/src/mix.js");class r{constructor(e){this.editor=e,this.set("value",void 0),this.set("isEnabled",!1),this.affectsData=!0,this._disableStack=new Set,this.decorate("execute"),this.listenTo(this.editor.model.document,"change",()=>{this.refresh()}),this.on("execute",e=>{this.isEnabled||e.stop()},{priority:"high"}),this.listenTo(e,"change:isReadOnly",(e,t,o)=>{o&&this.affectsData?this.forceDisabled("readOnlyMode"):this.clearForceDisabled("readOnlyMode")})}refresh(){this.isEnabled=!0}forceDisabled(e){this._disableStack.add(e),1==this._disableStack.size&&(this.on("set:isEnabled",n,{priority:"highest"}),this.isEnabled=!1)}clearForceDisabled(e){this._disableStack.delete(e),0==this._disableStack.size&&(this.off("set:isEnabled",n),this.refresh())}execute(){}destroy(){this.stopListening()}}function n(e){e.return=!1,e.stop()}Object(s.a)(r,i.a)},"./packages/ckeditor5-core/src/contextplugin.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return r}));var i=o("./packages/ckeditor5-utils/src/observablemixin.js"),s=o("./packages/ckeditor5-utils/src/mix.js");class r{constructor(e){this.context=e}destroy(){this.stopListening()}static get isContextPlugin(){return!0}}Object(s.a)(r,i.a)},"./packages/ckeditor5-core/src/pendingactions.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return a}));var i=o("./packages/ckeditor5-core/src/contextplugin.js"),s=o("./packages/ckeditor5-utils/src/observablemixin.js"),r=o("./packages/ckeditor5-utils/src/collection.js"),n=o("./packages/ckeditor5-utils/src/ckeditorerror.js");class a extends i.a{static get pluginName(){return"PendingActions"}init(){this.set("hasAny",!1),this._actions=new r.a({idProperty:"_id"}),this._actions.delegate("add","remove").to(this)}add(e){if("string"!=typeof e)throw new n.a("pendingactions-add-invalid-message",this);const t=Object.create(s.a);return t.set("message",e),this._actions.add(t),this.hasAny=!0,t}remove(e){this._actions.remove(e),this.hasAny=!!this._actions.length}get first(){return this._actions.get(0)}[Symbol.iterator](){return this._actions[Symbol.iterator]()}}},"./packages/ckeditor5-core/src/plugin.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return r}));var i=o("./packages/ckeditor5-utils/src/observablemixin.js"),s=o("./packages/ckeditor5-utils/src/mix.js");class r{constructor(e){this.editor=e,this.set("isEnabled",!0),this._disableStack=new Set}forceDisabled(e){this._disableStack.add(e),1==this._disableStack.size&&(this.on("set:isEnabled",n,{priority:"highest"}),this.isEnabled=!1)}clearForceDisabled(e){this._disableStack.delete(e),0==this._disableStack.size&&(this.off("set:isEnabled",n),this.isEnabled=!0)}destroy(){this.stopListening()}static get isContextPlugin(){return!1}}function n(e){e.return=!1,e.stop()}Object(s.a)(r,i.a)},"./packages/ckeditor5-core/theme/icons/pilcrow.svg":function(e,t,o){"use strict";t.a='<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M6.999 2H15a1 1 0 0 1 0 2h-1.004v13a1 1 0 1 1-2 0V4H8.999v13a1 1 0 1 1-2 0v-7A4 4 0 0 1 3 6a4 4 0 0 1 3.999-4z"/></svg>'},"./packages/ckeditor5-core/theme/icons/three-vertical-dots.svg":function(e,t,o){"use strict";t.a='<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><circle cx="9.5" cy="4.5" r="1.5"/><circle cx="9.5" cy="10.5" r="1.5"/><circle cx="9.5" cy="16.5" r="1.5"/></svg>'},"./packages/ckeditor5-engine/src/controller/datacontroller.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return j}));var i=o("./packages/ckeditor5-utils/src/mix.js"),s=o("./packages/ckeditor5-utils/src/observablemixin.js"),r=o("./packages/ckeditor5-utils/src/ckeditorerror.js"),n=o("./packages/ckeditor5-engine/src/conversion/mapper.js"),a=o("./packages/ckeditor5-engine/src/conversion/downcastdispatcher.js"),c=o("./packages/ckeditor5-engine/src/conversion/downcasthelpers.js"),l=o("./node_modules/lodash-es/isArray.js");class d{constructor(){this._consumables=new Map}add(e,t){let o;e.is("$text")||e.is("documentFragment")?this._consumables.set(e,!0):(this._consumables.has(e)?o=this._consumables.get(e):(o=new u(e),this._consumables.set(e,o)),o.add(t))}test(e,t){const o=this._consumables.get(e);return void 0===o?null:e.is("$text")||e.is("documentFragment")?o:o.test(t)}consume(e,t){return!!this.test(e,t)&&(e.is("$text")||e.is("documentFragment")?this._consumables.set(e,!1):this._consumables.get(e).consume(t),!0)}revert(e,t){const o=this._consumables.get(e);void 0!==o&&(e.is("$text")||e.is("documentFragment")?this._consumables.set(e,!0):o.revert(t))}static consumablesFromElement(e){const t={element:e,name:!0,attributes:[],classes:[],styles:[]},o=e.getAttributeKeys();for(const e of o)"style"!=e&&"class"!=e&&t.attributes.push(e);const i=e.getClassNames();for(const e of i)t.classes.push(e);const s=e.getStyleNames();for(const e of s)t.styles.push(e);return t}static createFrom(e,t){if(t||(t=new d(e)),e.is("$text"))return t.add(e),t;e.is("element")&&t.add(e,d.consumablesFromElement(e)),e.is("documentFragment")&&t.add(e);for(const o of e.getChildren())t=d.createFrom(o,t);return t}}class u{constructor(e){this.element=e,this._canConsumeName=null,this._consumables={attributes:new Map,styles:new Map,classes:new Map}}add(e){e.name&&(this._canConsumeName=!0);for(const t in this._consumables)t in e&&this._add(t,e[t])}test(e){if(e.name&&!this._canConsumeName)return this._canConsumeName;for(const t in this._consumables)if(t in e){const o=this._test(t,e[t]);if(!0!==o)return o}return!0}consume(e){e.name&&(this._canConsumeName=!1);for(const t in this._consumables)t in e&&this._consume(t,e[t])}revert(e){e.name&&(this._canConsumeName=!0);for(const t in this._consumables)t in e&&this._revert(t,e[t])}_add(e,t){const o=Object(l.a)(t)?t:[t],i=this._consumables[e];for(const t of o){if("attributes"===e&&("class"===t||"style"===t))throw new r.a("viewconsumable-invalid-attribute",this);if(i.set(t,!0),"styles"===e)for(const e of this.element.document.stylesProcessor.getRelatedStyles(t))i.set(e,!0)}}_test(e,t){const o=Object(l.a)(t)?t:[t],i=this._consumables[e];for(const t of o)if("attributes"!==e||"class"!==t&&"style"!==t){const e=i.get(t);if(void 0===e)return null;if(!e)return!1}else{const e="class"==t?"classes":"styles",o=this._test(e,[...this._consumables[e].keys()]);if(!0!==o)return o}return!0}_consume(e,t){const o=Object(l.a)(t)?t:[t],i=this._consumables[e];for(const t of o)if("attributes"!==e||"class"!==t&&"style"!==t){if(i.set(t,!1),"styles"==e)for(const e of this.element.document.stylesProcessor.getRelatedStyles(t))i.set(e,!1)}else{const e="class"==t?"classes":"styles";this._consume(e,[...this._consumables[e].keys()])}}_revert(e,t){const o=Object(l.a)(t)?t:[t],i=this._consumables[e];for(const t of o)if("attributes"!==e||"class"!==t&&"style"!==t){!1===i.get(t)&&i.set(t,!0)}else{const e="class"==t?"classes":"styles";this._revert(e,[...this._consumables[e].keys()])}}}var h=o("./packages/ckeditor5-engine/src/model/range.js"),p=o("./packages/ckeditor5-engine/src/model/position.js"),g=o("./packages/ckeditor5-engine/src/model/schema.js"),f=o("./packages/ckeditor5-engine/src/model/utils/autoparagraphing.js"),m=o("./packages/ckeditor5-utils/src/emittermixin.js");class k{constructor(e={}){this._splitParts=new Map,this._cursorParents=new Map,this._modelCursor=null,this.conversionApi=Object.assign({},e),this.conversionApi.convertItem=this._convertItem.bind(this),this.conversionApi.convertChildren=this._convertChildren.bind(this),this.conversionApi.safeInsert=this._safeInsert.bind(this),this.conversionApi.updateConversionResult=this._updateConversionResult.bind(this),this.conversionApi.splitToAllowedParent=this._splitToAllowedParent.bind(this),this.conversionApi.getSplitParts=this._getSplitParts.bind(this)}convert(e,t,o=["$root"]){this.fire("viewCleanup",e),this._modelCursor=function(e,t){let o;for(const i of new g.a(e)){const e={};for(const t of i.getAttributeKeys())e[t]=i.getAttribute(t);const s=t.createElement(i.name,e);o&&t.append(s,o),o=p.a._createAt(s,0)}return o}(o,t),this.conversionApi.writer=t,this.conversionApi.consumable=d.createFrom(e),this.conversionApi.store={};const{modelRange:i}=this._convertItem(e,this._modelCursor),s=t.createDocumentFragment();if(i){this._removeEmptyElements();for(const e of Array.from(this._modelCursor.parent.getChildren()))t.append(e,s);s.markers=function(e,t){const o=new Set,i=new Map,s=h.a._createIn(e).getItems();for(const e of s)"$marker"==e.name&&o.add(e);for(const e of o){const o=e.getAttribute("data-name"),s=t.createPositionBefore(e);i.has(o)?i.get(o).end=s.clone():i.set(o,new h.a(s.clone())),t.remove(e)}return i}(s,t)}return this._modelCursor=null,this._splitParts.clear(),this._cursorParents.clear(),this.conversionApi.writer=null,this.conversionApi.store=null,s}_convertItem(e,t){const o=Object.assign({viewItem:e,modelCursor:t,modelRange:null});if(e.is("element")?this.fire("element:"+e.name,o,this.conversionApi):e.is("$text")?this.fire("text",o,this.conversionApi):this.fire("documentFragment",o,this.conversionApi),o.modelRange&&!(o.modelRange instanceof h.a))throw new r.a("view-conversion-dispatcher-incorrect-result",this);return{modelRange:o.modelRange,modelCursor:o.modelCursor}}_convertChildren(e,t){let o=t.is("position")?t:p.a._createAt(t,0);const i=new h.a(o);for(const t of Array.from(e.getChildren())){const e=this._convertItem(t,o);e.modelRange instanceof h.a&&(i.end=e.modelRange.end,o=e.modelCursor)}return{modelRange:i,modelCursor:o}}_safeInsert(e,t){const o=this._splitToAllowedParent(e,t);return!!o&&(this.conversionApi.writer.insert(e,o.position),!0)}_updateConversionResult(e,t){const o=this._getSplitParts(e),i=this.conversionApi.writer;t.modelRange||(t.modelRange=i.createRange(i.createPositionBefore(e),i.createPositionAfter(o[o.length-1])));const s=this._cursorParents.get(e);t.modelCursor=s?i.createPositionAt(s,0):t.modelRange.end}_splitToAllowedParent(e,t){const{schema:o,writer:i}=this.conversionApi;let s=o.findAllowedParent(t,e);if(s){if(s===t.parent)return{position:t};this._modelCursor.parent.getAncestors().includes(s)&&(s=null)}if(!s)return Object(f.b)(t,e,o)?{position:Object(f.c)(t,i)}:null;const r=this.conversionApi.writer.split(t,s),n=[];for(const e of r.range.getWalker())if("elementEnd"==e.type)n.push(e.item);else{const t=n.pop(),o=e.item;this._registerSplitPair(t,o)}const a=r.range.end.parent;return this._cursorParents.set(e,a),{position:r.position,cursorParent:a}}_registerSplitPair(e,t){this._splitParts.has(e)||this._splitParts.set(e,[e]);const o=this._splitParts.get(e);this._splitParts.set(t,o),o.push(t)}_getSplitParts(e){let t;return t=this._splitParts.has(e)?this._splitParts.get(e):[e],t}_removeEmptyElements(){let e=!1;for(const t of this._splitParts.keys())t.isEmpty&&(this.conversionApi.writer.remove(t),this._splitParts.delete(t),e=!0);e&&this._removeEmptyElements()}}Object(i.a)(k,m.c);var b=o("./packages/ckeditor5-engine/src/conversion/upcasthelpers.js"),_=o("./packages/ckeditor5-engine/src/view/documentfragment.js"),w=o("./packages/ckeditor5-engine/src/view/document.js"),v=o("./packages/ckeditor5-engine/src/view/downcastwriter.js"),y=o("./packages/ckeditor5-engine/src/dataprocessor/htmldataprocessor.js");class j{constructor(e,t){this.model=e,this.mapper=new n.a,this.downcastDispatcher=new a.a({mapper:this.mapper,schema:e.schema}),this.downcastDispatcher.on("insert:$text",Object(c.e)(),{priority:"lowest"}),this.upcastDispatcher=new k({schema:e.schema}),this.viewDocument=new w.a(t),this.stylesProcessor=t,this.htmlProcessor=new y.a(this.viewDocument),this.processor=this.htmlProcessor,this._viewWriter=new v.a(this.viewDocument),this.upcastDispatcher.on("text",Object(b.b)(),{priority:"lowest"}),this.upcastDispatcher.on("element",Object(b.c)(),{priority:"lowest"}),this.upcastDispatcher.on("documentFragment",Object(b.c)(),{priority:"lowest"}),this.decorate("init"),this.decorate("set"),this.decorate("get"),this.on("init",()=>{this.fire("ready")},{priority:"lowest"}),this.on("ready",()=>{this.model.enqueueChange("transparent",f.a)},{priority:"lowest"})}get(e={}){const{rootName:t="main",trim:o="empty"}=e;if(!this._checkIfRootsExists([t]))throw new r.a("datacontroller-get-non-existent-root",this);const i=this.model.document.getRoot(t);return"empty"!==o||this.model.hasContent(i,{ignoreWhitespaces:!0})?this.stringify(i,e):""}stringify(e,t={}){const o=this.toView(e,t);return this.processor.toData(o)}toView(e,t={}){const o=this.viewDocument,i=this._viewWriter;this.mapper.clearBindings();const s=h.a._createIn(e),r=new _.a(o);this.mapper.bindElements(e,r),this.downcastDispatcher.conversionApi.options=t,this.downcastDispatcher.convertInsert(s,i);const n=e.is("documentFragment")?Array.from(e.markers):function(e){const t=[],o=e.root.document;if(!o)return[];const i=h.a._createIn(e);for(const e of o.model.markers){const o=e.getRange(),s=o.isCollapsed,r=o.start.isEqual(i.start)||o.end.isEqual(i.end);if(s&&r)t.push([e.name,o]);else{const s=i.getIntersection(o);s&&t.push([e.name,s])}}return t.sort(([e,t],[o,i])=>{if("after"!==t.end.compareWith(i.start))return 1;if("before"!==t.start.compareWith(i.end))return-1;switch(t.start.compareWith(i.start)){case"before":return 1;case"after":return-1;default:switch(t.end.compareWith(i.end)){case"before":return 1;case"after":return-1;default:return o.localeCompare(e)}}})}(e);for(const[e,t]of n)this.downcastDispatcher.convertMarkerAdd(e,t,i);return delete this.downcastDispatcher.conversionApi.options,r}init(e){if(this.model.document.version)throw new r.a("datacontroller-init-document-not-empty",this);let t={};if("string"==typeof e?t.main=e:t=e,!this._checkIfRootsExists(Object.keys(t)))throw new r.a("datacontroller-init-non-existent-root",this);return this.model.enqueueChange("transparent",e=>{for(const o of Object.keys(t)){const i=this.model.document.getRoot(o);e.insert(this.parse(t[o],i),i,0)}}),Promise.resolve()}set(e,t={}){let o={};if("string"==typeof e?o.main=e:o=e,!this._checkIfRootsExists(Object.keys(o)))throw new r.a("datacontroller-set-non-existent-root",this);const i=t.batchType||"default";this.model.enqueueChange(i,e=>{e.setSelection(null),e.removeSelectionAttribute(this.model.document.selection.getAttributeKeys());for(const t of Object.keys(o)){const i=this.model.document.getRoot(t);e.remove(e.createRangeIn(i)),e.insert(this.parse(o[t],i),i,0)}})}parse(e,t="$root"){const o=this.processor.toView(e);return this.toModel(o,t)}toModel(e,t="$root"){return this.model.change(o=>this.upcastDispatcher.convert(e,o,t))}addStyleProcessorRules(e){e(this.stylesProcessor)}registerRawContentMatcher(e){this.processor&&this.processor!==this.htmlProcessor&&this.processor.registerRawContentMatcher(e),this.htmlProcessor.registerRawContentMatcher(e)}destroy(){this.stopListening()}_checkIfRootsExists(e){for(const t of e)if(!this.model.document.getRootNames().includes(t))return!1;return!0}}Object(i.a)(j,s.a)},"./packages/ckeditor5-engine/src/controller/editingcontroller.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return Q}));var i=o("./packages/ckeditor5-engine/src/view/editableelement.js");const s=Symbol("rootName");class r extends i.a{constructor(e,t){super(e,t),this.rootName="main"}is(e,t=null){return t?t===this.name&&("rootElement"===e||"view:rootElement"===e||"editableElement"===e||"view:editableElement"===e||"containerElement"===e||"view:containerElement"===e||"element"===e||"view:element"===e):"rootElement"===e||"view:rootElement"===e||"editableElement"===e||"view:editableElement"===e||"containerElement"===e||"view:containerElement"===e||"element"===e||"view:element"===e||"node"===e||"view:node"===e}get rootName(){return this.getCustomProperty(s)}set rootName(e){this._setCustomProperty(s,e)}set _name(e){this.name=e}}var n=o("./packages/ckeditor5-engine/src/view/document.js"),a=o("./packages/ckeditor5-engine/src/view/downcastwriter.js"),c=o("./packages/ckeditor5-engine/src/view/renderer.js"),l=o("./packages/ckeditor5-engine/src/view/domconverter.js"),d=o("./packages/ckeditor5-engine/src/view/position.js"),u=o("./packages/ckeditor5-engine/src/view/range.js"),h=o("./packages/ckeditor5-engine/src/view/selection.js"),p=o("./packages/ckeditor5-engine/src/view/observer/observer.js"),g=o("./packages/ckeditor5-engine/src/view/filler.js"),f=o("./node_modules/lodash-es/_baseIsEqual.js");var m=function(e,t,o){var i=(o="function"==typeof o?o:void 0)?o(e,t):void 0;return void 0===i?Object(f.a)(e,t,void 0,o):!!i};class k extends p.a{constructor(e){super(e),this._config={childList:!0,characterData:!0,characterDataOldValue:!0,subtree:!0},this.domConverter=e.domConverter,this.renderer=e._renderer,this._domElements=[],this._mutationObserver=new window.MutationObserver(this._onMutations.bind(this))}flush(){this._onMutations(this._mutationObserver.takeRecords())}observe(e){this._domElements.push(e),this.isEnabled&&this._mutationObserver.observe(e,this._config)}enable(){super.enable();for(const e of this._domElements)this._mutationObserver.observe(e,this._config)}disable(){super.disable(),this._mutationObserver.disconnect()}destroy(){super.destroy(),this._mutationObserver.disconnect()}_onMutations(e){if(0===e.length)return;const t=this.domConverter,o=new Map,i=new Set;for(const o of e)if("childList"===o.type){const e=t.mapDomToView(o.target);if(e&&(e.is("uiElement")||e.is("rawElement")))continue;e&&!this._isBogusBrMutation(o)&&i.add(e)}for(const s of e){const e=t.mapDomToView(s.target);if((!e||!e.is("uiElement")&&!e.is("rawElement"))&&"characterData"===s.type){const e=t.findCorrespondingViewText(s.target);e&&!i.has(e.parent)?o.set(e,{type:"text",oldText:e.data,newText:Object(g.f)(s.target),node:e}):!e&&Object(g.i)(s.target)&&i.add(t.mapDomToView(s.target.parentNode))}}const s=[];for(const e of o.values())this.renderer.markToSync("text",e.node),s.push(e);for(const e of i){const o=t.mapViewToDom(e),i=Array.from(e.getChildren()),r=Array.from(t.domChildrenToView(o,{withChildren:!1}));m(i,r,a)||(this.renderer.markToSync("children",e),s.push({type:"children",oldChildren:i,newChildren:r,node:e}))}const r=e[0].target.ownerDocument.getSelection();let n=null;if(r&&r.anchorNode){const e=t.domPositionToView(r.anchorNode,r.anchorOffset),o=t.domPositionToView(r.focusNode,r.focusOffset);e&&o&&(n=new h.a(e),n.setFocus(o))}function a(e,t){if(!Array.isArray(e))return e===t||!(!e.is("$text")||!t.is("$text"))&&e.data===t.data}s.length&&(this.document.fire("mutations",s,n),this.view.forceRender())}_isBogusBrMutation(e){let t=null;return null===e.nextSibling&&0===e.removedNodes.length&&1==e.addedNodes.length&&(t=this.domConverter.domToView(e.addedNodes[0],{withChildren:!1})),t&&t.is("element","br")}}var b=o("./packages/ckeditor5-engine/src/view/observer/domeventobserver.js"),_=o("./packages/ckeditor5-utils/src/keyboard.js");class w extends b.a{constructor(e){super(e),this.domEventType=["keydown","keyup"]}onDomEvent(e){this.fire(e.type,e,{keyCode:e.keyCode,altKey:e.altKey,ctrlKey:e.ctrlKey,shiftKey:e.shiftKey,metaKey:e.metaKey,get keystroke(){return Object(_.a)(this)}})}}var v=o("./node_modules/lodash-es/debounce.js");class y extends p.a{constructor(e){super(e),this._fireSelectionChangeDoneDebounced=Object(v.a)(e=>this.document.fire("selectionChangeDone",e),200)}observe(){const e=this.document;e.on("arrowKey",(t,o)=>{e.selection.isFake&&this.isEnabled&&o.preventDefault()},{context:"$capture"}),e.on("arrowKey",(t,o)=>{e.selection.isFake&&this.isEnabled&&this._handleSelectionMove(o.keyCode)},{priority:"lowest"})}destroy(){super.destroy(),this._fireSelectionChangeDoneDebounced.cancel()}_handleSelectionMove(e){const t=this.document.selection,o=new h.a(t.getRanges(),{backward:t.isBackward,fake:!1});e!=_.f.arrowleft&&e!=_.f.arrowup||o.setTo(o.getFirstPosition()),e!=_.f.arrowright&&e!=_.f.arrowdown||o.setTo(o.getLastPosition());const i={oldSelection:t,newSelection:o,domSelection:null};this.document.fire("selectionChange",i),this._fireSelectionChangeDoneDebounced(i)}}class j extends p.a{constructor(e){super(e),this.mutationObserver=e.getObserver(k),this.selection=this.document.selection,this.domConverter=e.domConverter,this._documents=new WeakSet,this._fireSelectionChangeDoneDebounced=Object(v.a)(e=>this.document.fire("selectionChangeDone",e),200),this._clearInfiniteLoopInterval=setInterval(()=>this._clearInfiniteLoop(),1e3),this._documentIsSelectingInactivityTimeoutDebounced=Object(v.a)(()=>this.document.isSelecting=!1,5e3),this._loopbackCounter=0}observe(e){const t=e.ownerDocument,o=()=>{this.document.isSelecting=!1,this._documentIsSelectingInactivityTimeoutDebounced.cancel()};this.listenTo(e,"selectstart",()=>{this.document.isSelecting=!0,this._documentIsSelectingInactivityTimeoutDebounced()},{priority:"highest"}),this.listenTo(e,"keydown",o,{priority:"highest"}),this.listenTo(e,"keyup",o,{priority:"highest"}),this._documents.has(t)||(this.listenTo(t,"mouseup",o,{priority:"highest"}),this.listenTo(t,"selectionchange",(e,o)=>{this._handleSelectionChange(o,t),this._documentIsSelectingInactivityTimeoutDebounced()}),this._documents.add(t))}destroy(){super.destroy(),clearInterval(this._clearInfiniteLoopInterval),this._fireSelectionChangeDoneDebounced.cancel(),this._documentIsSelectingInactivityTimeoutDebounced.cancel()}_handleSelectionChange(e,t){if(!this.isEnabled)return;const o=t.defaultView.getSelection();if(this.checkShouldIgnoreEventFromTarget(o.anchorNode))return;this.mutationObserver.flush();const i=this.domConverter.domSelectionToView(o);if(0!=i.rangeCount){if(this.view.hasDomSelection=!0,!(this.selection.isEqual(i)&&this.domConverter.isDomSelectionCorrect(o)||++this._loopbackCounter>60))if(this.selection.isSimilar(i))this.view.forceRender();else{const e={oldSelection:this.selection,newSelection:i,domSelection:o};this.document.fire("selectionChange",e),this._fireSelectionChangeDoneDebounced(e)}}else this.view.hasDomSelection=!1}_clearInfiniteLoop(){this._loopbackCounter=0}}class x extends b.a{constructor(e){super(e),this.domEventType=["focus","blur"],this.useCapture=!0;const t=this.document;t.on("focus",()=>{t.isFocused=!0,this._renderTimeoutId=setTimeout(()=>e.change(()=>{}),50)}),t.on("blur",(o,i)=>{const s=t.selection.editableElement;null!==s&&s!==i.target||(t.isFocused=!1,e.change(()=>{}))})}onDomEvent(e){this.fire(e.type,e)}destroy(){this._renderTimeoutId&&clearTimeout(this._renderTimeoutId),super.destroy()}}class P extends b.a{constructor(e){super(e),this.domEventType=["compositionstart","compositionupdate","compositionend"];const t=this.document;t.on("compositionstart",()=>{t.isComposing=!0}),t.on("compositionend",()=>{t.isComposing=!1})}onDomEvent(e){this.fire(e.type,e)}}class O extends b.a{constructor(e){super(e),this.domEventType=["beforeinput"]}onDomEvent(e){this.fire(e.type,e)}}var A=o("./packages/ckeditor5-engine/src/view/observer/bubblingeventinfo.js"),T=o("./packages/ckeditor5-utils/src/index.js");class C extends p.a{constructor(e){super(e),this.document.on("keydown",(e,t)=>{if(this.isEnabled&&Object(T.v)(t.keyCode)){const o=new A.a(this.document,"arrowKey",this.document.selection.getFirstRange());this.document.fire(o,t),o.stop.called&&e.stop()}})}observe(){}}var E=o("./packages/ckeditor5-utils/src/observablemixin.js"),S=o("./packages/ckeditor5-utils/src/mix.js"),R=o("./packages/ckeditor5-utils/src/dom/isrange.js"),M=o("./packages/ckeditor5-utils/src/dom/rect.js"),N=o("./packages/ckeditor5-utils/src/dom/istext.js");function I({target:e,viewportOffset:t=0}){const o=W(e);let i=o,s=null;for(;i;){let r;r=H(i==o?e:s),V(r,()=>q(e,i));const n=q(e,i);if(z(i,n,t),i.parent!=i){if(s=i.frameElement,i=i.parent,!s)return}else i=null}}function z(e,t,o){const i=t.clone().moveBy(0,o),s=t.clone().moveBy(0,-o),r=new M.a(e).excludeScrollbarsAndBorders();if(![s,i].every(e=>r.contains(e))){let{scrollX:n,scrollY:a}=e;B(s,r)?a-=r.top-t.top+o:D(i,r)&&(a+=t.bottom-r.bottom+o),F(t,r)?n-=r.left-t.left+o:L(t,r)&&(n+=t.right-r.right+o),e.scrollTo(n,a)}}function V(e,t){const o=W(e);let i,s;for(;e!=o.document.body;)s=t(),i=new M.a(e).excludeScrollbarsAndBorders(),i.contains(s)||(B(s,i)?e.scrollTop-=i.top-s.top:D(s,i)&&(e.scrollTop+=s.bottom-i.bottom),F(s,i)?e.scrollLeft-=i.left-s.left:L(s,i)&&(e.scrollLeft+=s.right-i.right)),e=e.parentNode}function D(e,t){return e.bottom>t.bottom}function B(e,t){return e.top<t.top}function F(e,t){return e.left<t.left}function L(e,t){return e.right>t.right}function W(e){return Object(R.a)(e)?e.startContainer.ownerDocument.defaultView:e.ownerDocument.defaultView}function H(e){if(Object(R.a)(e)){let t=e.commonAncestorContainer;return Object(N.a)(t)&&(t=t.parentNode),t}return e.parentNode}function q(e,t){const o=W(e),i=new M.a(e);if(o===t)return i;{let e=o;for(;e!=t;){const t=e.frameElement,o=new M.a(t).excludeScrollbarsAndBorders();i.moveBy(o.left,o.top),e=e.parent}}return i}Object.assign({},{scrollViewportToShowTarget:I,scrollAncestorsToShowTarget:function(e){V(H(e),()=>new M.a(e))}});var $=o("./packages/ckeditor5-engine/src/view/uielement.js"),U=o("./packages/ckeditor5-utils/src/ckeditorerror.js"),K=o("./packages/ckeditor5-utils/src/env.js");class G{constructor(e){this.document=new n.a(e),this.domConverter=new l.a(this.document),this.domRoots=new Map,this.set("isRenderingInProgress",!1),this.set("hasDomSelection",!1),this._renderer=new c.a(this.domConverter,this.document.selection),this._renderer.bind("isFocused","isSelecting").to(this.document),this._initialDomRootAttributes=new WeakMap,this._observers=new Map,this._ongoingChange=!1,this._postFixersInProgress=!1,this._renderingDisabled=!1,this._hasChangedSinceTheLastRendering=!1,this._writer=new a.a(this.document),this.addObserver(k),this.addObserver(j),this.addObserver(x),this.addObserver(w),this.addObserver(y),this.addObserver(P),this.addObserver(C),K.a.isAndroid&&this.addObserver(O),Object(g.g)(this),Object($.b)(this),this.on("render",()=>{this._render(),this.document.fire("layoutChanged"),this._hasChangedSinceTheLastRendering=!1}),this.listenTo(this.document.selection,"change",()=>{this._hasChangedSinceTheLastRendering=!0}),this.listenTo(this.document,"change:isFocused",()=>{this._hasChangedSinceTheLastRendering=!0})}attachDomRoot(e,t="main"){const o=this.document.getRoot(t);o._name=e.tagName.toLowerCase();const i={};for(const{name:t,value:s}of Array.from(e.attributes))i[t]=s,"class"===t?this._writer.addClass(s.split(" "),o):this._writer.setAttribute(t,s,o);this._initialDomRootAttributes.set(e,i);const s=()=>{this._writer.setAttribute("contenteditable",!o.isReadOnly,o),o.isReadOnly?this._writer.addClass("ck-read-only",o):this._writer.removeClass("ck-read-only",o)};s(),this.domRoots.set(t,e),this.domConverter.bindElements(e,o),this._renderer.markToSync("children",o),this._renderer.markToSync("attributes",o),this._renderer.domDocuments.add(e.ownerDocument),o.on("change:children",(e,t)=>this._renderer.markToSync("children",t)),o.on("change:attributes",(e,t)=>this._renderer.markToSync("attributes",t)),o.on("change:text",(e,t)=>this._renderer.markToSync("text",t)),o.on("change:isReadOnly",()=>this.change(s)),o.on("change",()=>{this._hasChangedSinceTheLastRendering=!0});for(const o of this._observers.values())o.observe(e,t)}detachDomRoot(e){const t=this.domRoots.get(e);Array.from(t.attributes).forEach(({name:e})=>t.removeAttribute(e));const o=this._initialDomRootAttributes.get(t);for(const e in o)t.setAttribute(e,o[e]);this.domRoots.delete(e),this.domConverter.unbindDomElement(t)}getDomRoot(e="main"){return this.domRoots.get(e)}addObserver(e){let t=this._observers.get(e);if(t)return t;t=new e(this),this._observers.set(e,t);for(const[e,o]of this.domRoots)t.observe(o,e);return t.enable(),t}getObserver(e){return this._observers.get(e)}disableObservers(){for(const e of this._observers.values())e.disable()}enableObservers(){for(const e of this._observers.values())e.enable()}scrollToTheSelection(){const e=this.document.selection.getFirstRange();e&&I({target:this.domConverter.viewRangeToDom(e),viewportOffset:20})}focus(){if(!this.document.isFocused){const e=this.document.selection.editableElement;e&&(this.domConverter.focus(e),this.forceRender())}}change(e){if(this.isRenderingInProgress||this._postFixersInProgress)throw new U.a("cannot-change-view-tree",this);try{if(this._ongoingChange)return e(this._writer);this._ongoingChange=!0;const t=e(this._writer);return this._ongoingChange=!1,!this._renderingDisabled&&this._hasChangedSinceTheLastRendering&&(this._postFixersInProgress=!0,this.document._callPostFixers(this._writer),this._postFixersInProgress=!1,this.fire("render")),t}catch(e){U.a.rethrowUnexpectedError(e,this)}}forceRender(){this._hasChangedSinceTheLastRendering=!0,this.change(()=>{})}destroy(){for(const e of this._observers.values())e.destroy();this.document.destroy(),this.stopListening()}createPositionAt(e,t){return d.a._createAt(e,t)}createPositionAfter(e){return d.a._createAfter(e)}createPositionBefore(e){return d.a._createBefore(e)}createRange(e,t){return new u.a(e,t)}createRangeOn(e){return u.a._createOn(e)}createRangeIn(e){return u.a._createIn(e)}createSelection(e,t,o){return new h.a(e,t,o)}_disableRendering(e){this._renderingDisabled=e,0==e&&this.change(()=>{})}_render(){this.isRenderingInProgress=!0,this.disableObservers(),this._renderer.render(),this.enableObservers(),this.isRenderingInProgress=!1}}Object(S.a)(G,E.a);var J=o("./packages/ckeditor5-engine/src/conversion/mapper.js"),Y=o("./packages/ckeditor5-engine/src/conversion/downcastdispatcher.js"),X=o("./packages/ckeditor5-engine/src/conversion/downcasthelpers.js"),Z=o("./packages/ckeditor5-engine/src/conversion/upcasthelpers.js");class Q{constructor(e,t){this.model=e,this.view=new G(t),this.mapper=new J.a,this.downcastDispatcher=new Y.a({mapper:this.mapper,schema:e.schema});const o=this.model.document,i=o.selection,s=this.model.markers;this.listenTo(this.model,"_beforeChanges",()=>{this.view._disableRendering(!0)},{priority:"highest"}),this.listenTo(this.model,"_afterChanges",()=>{this.view._disableRendering(!1)},{priority:"lowest"}),this.listenTo(o,"change",()=>{this.view.change(e=>{this.downcastDispatcher.convertChanges(o.differ,s,e),this.downcastDispatcher.convertSelection(i,s,e)})},{priority:"low"}),this.listenTo(this.view.document,"selectionChange",Object(Z.a)(this.model,this.mapper)),this.downcastDispatcher.on("insert:$text",Object(X.e)(),{priority:"lowest"}),this.downcastDispatcher.on("remove",Object(X.f)(),{priority:"low"}),this.downcastDispatcher.on("selection",Object(X.a)(),{priority:"high"}),this.downcastDispatcher.on("selection",Object(X.c)(),{priority:"low"}),this.downcastDispatcher.on("selection",Object(X.b)(),{priority:"low"}),this.view.document.roots.bindTo(this.model.document.roots).using(e=>{if("$graveyard"==e.rootName)return null;const t=new r(this.view.document,e.name);return t.rootName=e.rootName,this.mapper.bindElements(e,t),t})}destroy(){this.view.destroy(),this.stopListening()}}Object(S.a)(Q,E.a)},"./packages/ckeditor5-engine/src/conversion/conversion.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return a}));var i=o("./packages/ckeditor5-utils/src/ckeditorerror.js"),s=o("./packages/ckeditor5-engine/src/conversion/upcasthelpers.js"),r=o("./packages/ckeditor5-engine/src/conversion/downcasthelpers.js"),n=o("./packages/ckeditor5-utils/src/toarray.js");class a{constructor(e,t){this._helpers=new Map,this._downcast=Object(n.a)(e),this._createConversionHelpers({name:"downcast",dispatchers:this._downcast,isDowncast:!0}),this._upcast=Object(n.a)(t),this._createConversionHelpers({name:"upcast",dispatchers:this._upcast,isDowncast:!1})}addAlias(e,t){const o=this._downcast.includes(t);if(!this._upcast.includes(t)&&!o)throw new i.a("conversion-add-alias-dispatcher-not-registered",this);this._createConversionHelpers({name:e,dispatchers:[t],isDowncast:o})}for(e){if(!this._helpers.has(e))throw new i.a("conversion-for-unknown-group",this);return this._helpers.get(e)}elementToElement(e){this.for("downcast").elementToElement(e);for(const{model:t,view:o}of c(e))this.for("upcast").elementToElement({model:t,view:o,converterPriority:e.converterPriority})}attributeToElement(e){this.for("downcast").attributeToElement(e);for(const{model:t,view:o}of c(e))this.for("upcast").elementToAttribute({view:o,model:t,converterPriority:e.converterPriority})}attributeToAttribute(e){this.for("downcast").attributeToAttribute(e);for(const{model:t,view:o}of c(e))this.for("upcast").attributeToAttribute({view:o,model:t})}_createConversionHelpers({name:e,dispatchers:t,isDowncast:o}){if(this._helpers.has(e))throw new i.a("conversion-group-exists",this);const n=o?new r.d(t):new s.d(t);this._helpers.set(e,n)}}function*c(e){if(e.model.values)for(const t of e.model.values){const o={key:e.model.key,value:t},i=e.view[t],s=e.upcastAlso?e.upcastAlso[t]:void 0;yield*l(o,i,s)}else yield*l(e.model,e.view,e.upcastAlso)}function*l(e,t,o){if(yield{model:e,view:t},o)for(const t of Object(n.a)(o))yield{model:e,view:t}}},"./packages/ckeditor5-engine/src/conversion/conversionhelpers.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return i}));class i{constructor(e){this._dispatchers=e}add(e){for(const t of this._dispatchers)e(t);return this}}},"./packages/ckeditor5-engine/src/conversion/downcastdispatcher.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return d}));var i=o("./packages/ckeditor5-engine/src/model/textproxy.js");class s{constructor(){this._consumable=new Map,this._textProxyRegistry=new Map}add(e,t){t=r(t),e instanceof i.a&&(e=this._getSymbolForTextProxy(e)),this._consumable.has(e)||this._consumable.set(e,new Map),this._consumable.get(e).set(t,!0)}consume(e,t){return t=r(t),e instanceof i.a&&(e=this._getSymbolForTextProxy(e)),!!this.test(e,t)&&(this._consumable.get(e).set(t,!1),!0)}test(e,t){t=r(t),e instanceof i.a&&(e=this._getSymbolForTextProxy(e));const o=this._consumable.get(e);if(void 0===o)return null;const s=o.get(t);return void 0===s?null:s}revert(e,t){t=r(t),e instanceof i.a&&(e=this._getSymbolForTextProxy(e));const o=this.test(e,t);return!1===o?(this._consumable.get(e).set(t,!0),!0):!0!==o&&null}_getSymbolForTextProxy(e){let t=null;const o=this._textProxyRegistry.get(e.startOffset);if(o){const i=o.get(e.endOffset);i&&(t=i.get(e.parent))}return t||(t=this._addSymbolForTextProxy(e.startOffset,e.endOffset,e.parent)),t}_addSymbolForTextProxy(e,t,o){const i=Symbol("textProxySymbol");let s,r;return s=this._textProxyRegistry.get(e),s||(s=new Map,this._textProxyRegistry.set(e,s)),r=s.get(t),r||(r=new Map,s.set(t,r)),r.set(o,i),i}}function r(e){const t=e.split(":");return"addMarker"==t[0]||"removeMarker"==t[0]?e:t.length>1?t[0]+":"+t[1]:t[0]}var n=o("./packages/ckeditor5-engine/src/model/range.js"),a=o("./packages/ckeditor5-engine/src/model/position.js"),c=o("./packages/ckeditor5-utils/src/emittermixin.js"),l=o("./packages/ckeditor5-utils/src/mix.js");class d{constructor(e){this.conversionApi=Object.assign({dispatcher:this},e),this._reconversionEventsMapping=new Map}convertChanges(e,t,o){for(const t of e.getMarkersToRemove())this.convertMarkerRemove(t.name,t.range,o);const i=this._mapChangesWithAutomaticReconversion(e);for(const e of i)"insert"===e.type?this.convertInsert(n.a._createFromPositionAndShift(e.position,e.length),o):"remove"===e.type?this.convertRemove(e.position,e.length,e.name,o):"reconvert"===e.type?this.reconvertElement(e.element,o):this.convertAttribute(e.range,e.attributeKey,e.attributeOldValue,e.attributeNewValue,o);for(const e of this.conversionApi.mapper.flushUnboundMarkerNames()){const i=t.get(e).getRange();this.convertMarkerRemove(e,i,o),this.convertMarkerAdd(e,i,o)}for(const t of e.getMarkersToAdd())this.convertMarkerAdd(t.name,t.range,o)}convertInsert(e,t){this.conversionApi.writer=t,this.conversionApi.consumable=this._createInsertConsumable(e);for(const t of Array.from(e).map(h))this._convertInsertWithAttributes(t);this._clearConversionApi()}convertRemove(e,t,o,i){this.conversionApi.writer=i,this.fire("remove:"+o,{position:e,length:t},this.conversionApi),this._clearConversionApi()}convertAttribute(e,t,o,i,s){this.conversionApi.writer=s,this.conversionApi.consumable=this._createConsumableForRange(e,"attribute:"+t);for(const s of e){const e={item:s.item,range:n.a._createFromPositionAndShift(s.previousPosition,s.length),attributeKey:t,attributeOldValue:o,attributeNewValue:i};this._testAndFire("attribute:"+t,e)}this._clearConversionApi()}reconvertElement(e,t){const o=n.a._createOn(e);this.conversionApi.writer=t,this.conversionApi.consumable=this._createInsertConsumable(o);const i=this.conversionApi.mapper,s=i.toViewElement(e);t.remove(s),this._convertInsertWithAttributes({item:e,range:o});const r=i.toViewElement(e);for(const o of n.a._createIn(e)){const{item:e}=o,s=p(e,i);s?s.root!==r.root&&t.move(t.createRangeOn(s),i.toViewPosition(a.a._createBefore(e))):this._convertInsertWithAttributes(h(o))}i.unbindViewElement(s),this._clearConversionApi()}convertSelection(e,t,o){const i=Array.from(t.getMarkersAtPosition(e.getFirstPosition()));if(this.conversionApi.writer=o,this.conversionApi.consumable=this._createSelectionConsumable(e,i),this.fire("selection",{selection:e},this.conversionApi),e.isCollapsed){for(const t of i){const o=t.getRange();if(!u(e.getFirstPosition(),t,this.conversionApi.mapper))continue;const i={item:e,markerName:t.name,markerRange:o};this.conversionApi.consumable.test(e,"addMarker:"+t.name)&&this.fire("addMarker:"+t.name,i,this.conversionApi)}for(const t of e.getAttributeKeys()){const o={item:e,range:e.getFirstRange(),attributeKey:t,attributeOldValue:null,attributeNewValue:e.getAttribute(t)};this.conversionApi.consumable.test(e,"attribute:"+o.attributeKey)&&this.fire("attribute:"+o.attributeKey+":$text",o,this.conversionApi)}this._clearConversionApi()}else this._clearConversionApi()}convertMarkerAdd(e,t,o){if("$graveyard"==t.root.rootName)return;this.conversionApi.writer=o;const i="addMarker:"+e,r=new s;if(r.add(t,i),this.conversionApi.consumable=r,this.fire(i,{markerName:e,markerRange:t},this.conversionApi),r.test(t,i)){this.conversionApi.consumable=this._createConsumableForRange(t,i);for(const o of t.getItems()){if(!this.conversionApi.consumable.test(o,i))continue;const s={item:o,range:n.a._createOn(o),markerName:e,markerRange:t};this.fire(i,s,this.conversionApi)}this._clearConversionApi()}else this._clearConversionApi()}convertMarkerRemove(e,t,o){"$graveyard"!=t.root.rootName&&(this.conversionApi.writer=o,this.fire("removeMarker:"+e,{markerName:e,markerRange:t},this.conversionApi),this._clearConversionApi())}_mapReconversionTriggerEvent(e,t){this._reconversionEventsMapping.set(t,e)}_createInsertConsumable(e){const t=new s;for(const o of e){const e=o.item;t.add(e,"insert");for(const o of e.getAttributeKeys())t.add(e,"attribute:"+o)}return t}_createConsumableForRange(e,t){const o=new s;for(const i of e.getItems())o.add(i,t);return o}_createSelectionConsumable(e,t){const o=new s;o.add(e,"selection");for(const i of t)o.add(e,"addMarker:"+i.name);for(const t of e.getAttributeKeys())o.add(e,"attribute:"+t);return o}_testAndFire(e,t){this.conversionApi.consumable.test(t.item,e)&&this.fire(function(e,t){const o=t.item.name||"$text";return`${e}:${o}`}(e,t),t,this.conversionApi)}_clearConversionApi(){delete this.conversionApi.writer,delete this.conversionApi.consumable}_convertInsertWithAttributes(e){this._testAndFire("insert",e);for(const t of e.item.getAttributeKeys())e.attributeKey=t,e.attributeOldValue=null,e.attributeNewValue=e.item.getAttribute(t),this._testAndFire("attribute:"+t,e)}_mapChangesWithAutomaticReconversion(e){const t=new Set,o=[];for(const i of e.getChanges()){const e=i.position||i.range.start,s=e.parent;if(Object(a.d)(e,s)){o.push(i);continue}const r="attribute"===i.type?Object(a.b)(e,s,null):s;if(r.is("$text")){o.push(i);continue}let n;if(n="attribute"===i.type?`attribute:${i.attributeKey}:${r.name}`:`${i.type}:${i.name}`,this._isReconvertTriggerEvent(n,r.name)){if(t.has(r))continue;t.add(r),o.push({type:"reconvert",element:r})}else o.push(i)}return o}_isReconvertTriggerEvent(e,t){return this._reconversionEventsMapping.get(e)===t}}function u(e,t,o){const i=t.getRange(),s=Array.from(e.getAncestors());s.shift(),s.reverse();return!s.some(e=>{if(i.containsItem(e)){return!!o.toViewElement(e).getCustomProperty("addHighlight")}})}function h(e){return{item:e.item,range:n.a._createFromPositionAndShift(e.previousPosition,e.length)}}function p(e,t){if(e.is("textProxy")){const o=t.toViewPosition(a.a._createBefore(e)).parent;return o.is("$text")?o:null}return t.toViewElement(e)}Object(l.a)(d,c.c)},"./packages/ckeditor5-engine/src/conversion/downcasthelpers.js":function(e,t,o){"use strict";o.d(t,"d",(function(){return h})),o.d(t,"e",(function(){return p})),o.d(t,"f",(function(){return g})),o.d(t,"c",(function(){return m})),o.d(t,"b",(function(){return k})),o.d(t,"a",(function(){return b}));var i=o("./packages/ckeditor5-engine/src/model/range.js"),s=o("./packages/ckeditor5-engine/src/model/selection.js"),r=o("./packages/ckeditor5-engine/src/model/element.js"),n=o("./packages/ckeditor5-engine/src/view/attributeelement.js"),a=o("./packages/ckeditor5-engine/src/model/documentselection.js"),c=o("./packages/ckeditor5-engine/src/conversion/conversionhelpers.js"),l=o("./node_modules/lodash-es/cloneDeep.js"),d=o("./packages/ckeditor5-utils/src/ckeditorerror.js"),u=o("./packages/ckeditor5-utils/src/toarray.js");class h extends c.a{elementToElement(e){return this.add(function(e){return(e=Object(l.a)(e)).view=w(e.view,"container"),t=>{var o;if(t.on("insert:"+e.model,(o=e.view,(e,t,i)=>{const s=o(t.item,i);if(!s)return;if(!i.consumable.consume(t.item,"insert"))return;const r=i.mapper.toViewPosition(t.range.start);i.mapper.bindElements(t.item,s),i.writer.insert(r,s)}),{priority:e.converterPriority||"normal"}),e.triggerBy){if(e.triggerBy.attributes)for(const o of e.triggerBy.attributes)t._mapReconversionTriggerEvent(e.model,`attribute:${o}:${e.model}`);if(e.triggerBy.children)for(const o of e.triggerBy.children)t._mapReconversionTriggerEvent(e.model,"insert:"+o),t._mapReconversionTriggerEvent(e.model,"remove:"+o)}}}(e))}attributeToElement(e){return this.add(function(e){e=Object(l.a)(e);let t="attribute:"+(e.model.key?e.model.key:e.model);e.model.name&&(t+=":"+e.model.name);if(e.model.values)for(const t of e.model.values)e.view[t]=w(e.view[t],"attribute");else e.view=w(e.view,"attribute");const o=v(e);return i=>{i.on(t,function(e){return(t,o,i)=>{const r=e(o.attributeOldValue,i),n=e(o.attributeNewValue,i);if(!r&&!n)return;if(!i.consumable.consume(o.item,t.name))return;const c=i.writer,l=c.document.selection;if(o.item instanceof s.a||o.item instanceof a.a)c.wrap(l.getFirstRange(),n);else{let e=i.mapper.toViewRange(o.range);null!==o.attributeOldValue&&r&&(e=c.unwrap(e,r)),null!==o.attributeNewValue&&n&&c.wrap(e,n)}}}(o),{priority:e.converterPriority||"normal"})}}(e))}attributeToAttribute(e){return this.add(function(e){e=Object(l.a)(e);let t="attribute:"+(e.model.key?e.model.key:e.model);e.model.name&&(t+=":"+e.model.name);if(e.model.values)for(const t of e.model.values)e.view[t]=y(e.view[t]);else e.view=y(e.view);const o=v(e);return i=>{var s;i.on(t,(s=o,(e,t,o)=>{const i=s(t.attributeOldValue,o),r=s(t.attributeNewValue,o);if(!i&&!r)return;if(!o.consumable.consume(t.item,e.name))return;const n=o.mapper.toViewElement(t.item),a=o.writer;if(!n)throw new d.a("conversion-attribute-to-attribute-on-text",[t,o]);if(null!==t.attributeOldValue&&i)if("class"==i.key){const e=Object(u.a)(i.value);for(const t of e)a.removeClass(t,n)}else if("style"==i.key){const e=Object.keys(i.value);for(const t of e)a.removeStyle(t,n)}else a.removeAttribute(i.key,n);if(null!==t.attributeNewValue&&r)if("class"==r.key){const e=Object(u.a)(r.value);for(const t of e)a.addClass(t,n)}else if("style"==r.key){const e=Object.keys(r.value);for(const t of e)a.setStyle(t,r.value[t],n)}else a.setAttribute(r.key,r.value,n)}),{priority:e.converterPriority||"normal"})}}(e))}markerToElement(e){return this.add(function(e){return(e=Object(l.a)(e)).view=w(e.view,"ui"),t=>{var o;t.on("addMarker:"+e.model,(o=e.view,(e,t,i)=>{t.isOpening=!0;const s=o(t,i);t.isOpening=!1;const r=o(t,i);if(!s||!r)return;const n=t.markerRange;if(n.isCollapsed&&!i.consumable.consume(n,e.name))return;for(const t of n)if(!i.consumable.consume(t.item,e.name))return;const a=i.mapper,c=i.writer;c.insert(a.toViewPosition(n.start),s),i.mapper.bindElementToMarker(s,t.markerName),n.isCollapsed||(c.insert(a.toViewPosition(n.end),r),i.mapper.bindElementToMarker(r,t.markerName)),e.stop()}),{priority:e.converterPriority||"normal"}),t.on("removeMarker:"+e.model,(e.view,(e,t,o)=>{const i=o.mapper.markerNameToElements(t.markerName);if(i){for(const e of i)o.mapper.unbindElementFromMarkerName(e,t.markerName),o.writer.clear(o.writer.createRangeOn(e),e);o.writer.clearClonedElementsGroup(t.markerName),e.stop()}}),{priority:e.converterPriority||"normal"})}}(e))}markerToHighlight(e){return this.add(function(e){return t=>{var o;t.on("addMarker:"+e.model,(o=e.view,(e,t,i)=>{if(!t.item)return;if(!(t.item instanceof s.a||t.item instanceof a.a||t.item.is("$textProxy")))return;const r=j(o,t,i);if(!r)return;if(!i.consumable.consume(t.item,e.name))return;const n=i.writer,c=f(n,r),l=n.document.selection;if(t.item instanceof s.a||t.item instanceof a.a)n.wrap(l.getFirstRange(),c,l);else{const e=i.mapper.toViewRange(t.range),o=n.wrap(e,c);for(const e of o.getItems())if(e.is("attributeElement")&&e.isSimilar(c)){i.mapper.bindElementToMarker(e,t.markerName);break}}}),{priority:e.converterPriority||"normal"}),t.on("addMarker:"+e.model,function(e){return(t,o,s)=>{if(!o.item)return;if(!(o.item instanceof r.a))return;const n=j(e,o,s);if(!n)return;if(!s.consumable.test(o.item,t.name))return;const a=s.mapper.toViewElement(o.item);if(a&&a.getCustomProperty("addHighlight")){s.consumable.consume(o.item,t.name);for(const e of i.a._createIn(o.item))s.consumable.consume(e.item,t.name);a.getCustomProperty("addHighlight")(a,n,s.writer),s.mapper.bindElementToMarker(a,o.markerName)}}}(e.view),{priority:e.converterPriority||"normal"}),t.on("removeMarker:"+e.model,function(e){return(t,o,i)=>{if(o.markerRange.isCollapsed)return;const s=j(e,o,i);if(!s)return;const r=f(i.writer,s),n=i.mapper.markerNameToElements(o.markerName);if(n){for(const e of n)i.mapper.unbindElementFromMarkerName(e,o.markerName),e.is("attributeElement")?i.writer.unwrap(i.writer.createRangeOn(e),r):e.getCustomProperty("removeHighlight")(e,s.id,i.writer);i.writer.clearClonedElementsGroup(o.markerName),t.stop()}}}(e.view),{priority:e.converterPriority||"normal"})}}(e))}markerToData(e){return this.add(function(e){const t=(e=Object(l.a)(e)).model;e.view||(e.view=o=>({group:t,name:o.substr(e.model.length+1)}));return o=>{var i;o.on("addMarker:"+t,(i=e.view,(e,t,o)=>{const s=i(t.markerName,o);if(!s)return;const r=t.markerRange;o.consumable.consume(r,e.name)&&(_(r,!1,o,t,s),_(r,!0,o,t,s),e.stop())}),{priority:e.converterPriority||"normal"}),o.on("removeMarker:"+t,function(e){return(t,o,i)=>{const s=e(o.markerName,i);if(!s)return;const r=i.mapper.markerNameToElements(o.markerName);if(r){for(const e of r)i.mapper.unbindElementFromMarkerName(e,o.markerName),e.is("containerElement")?(n(`data-${s.group}-start-before`,e),n(`data-${s.group}-start-after`,e),n(`data-${s.group}-end-before`,e),n(`data-${s.group}-end-after`,e)):i.writer.clear(i.writer.createRangeOn(e),e);i.writer.clearClonedElementsGroup(o.markerName),t.stop()}function n(e,t){if(t.hasAttribute(e)){const o=new Set(t.getAttribute(e).split(","));o.delete(s.name),0==o.size?i.writer.removeAttribute(e,t):i.writer.setAttribute(e,Array.from(o).join(","),t)}}}}(e.view),{priority:e.converterPriority||"normal"})}}(e))}}function p(){return(e,t,o)=>{if(!o.consumable.consume(t.item,"insert"))return;const i=o.writer,s=o.mapper.toViewPosition(t.range.start),r=i.createText(t.item.data);i.insert(s,r)}}function g(){return(e,t,o)=>{const i=o.mapper.toViewPosition(t.position),s=t.position.getShiftedBy(t.length),r=o.mapper.toViewPosition(s,{isPhantom:!0}),n=o.writer.createRange(i,r),a=o.writer.remove(n.getTrimmed());for(const e of o.writer.createRangeIn(a).getItems())o.mapper.unbindViewElement(e)}}function f(e,t){const o=e.createAttributeElement("span",t.attributes);return t.classes&&o._addClass(t.classes),"number"==typeof t.priority&&(o._priority=t.priority),o._id=t.id,o}function m(){return(e,t,o)=>{const i=t.selection;if(i.isCollapsed)return;if(!o.consumable.consume(i,"selection"))return;const s=[];for(const e of i.getRanges()){const t=o.mapper.toViewRange(e);s.push(t)}o.writer.setSelection(s,{backward:i.isBackward})}}function k(){return(e,t,o)=>{const i=t.selection;if(!i.isCollapsed)return;if(!o.consumable.consume(i,"selection"))return;const s=o.writer,r=i.getFirstPosition(),n=o.mapper.toViewPosition(r),a=s.breakAttributes(n);s.setSelection(a)}}function b(){return(e,t,o)=>{const i=o.writer,s=i.document.selection;for(const e of s.getRanges())e.isCollapsed&&e.end.parent.isAttached()&&o.writer.mergeAttributes(e.start);i.setSelection(null)}}function _(e,t,o,i,s){const r=t?e.start:e.end,n=r.nodeAfter&&r.nodeAfter.is("element")?r.nodeAfter:null,a=r.nodeBefore&&r.nodeBefore.is("element")?r.nodeBefore:null;if(n||a){let e,r;t&&n||!t&&!a?(e=n,r=!0):(e=a,r=!1);const c=o.mapper.toViewElement(e);if(c)return void function(e,t,o,i,s,r){const n=`data-${r.group}-${t?"start":"end"}-${o?"before":"after"}`,a=e.hasAttribute(n)?e.getAttribute(n).split(","):[];a.unshift(r.name),i.writer.setAttribute(n,a.join(","),e),i.mapper.bindElementToMarker(e,s.markerName)}(c,t,r,o,i,s)}!function(e,t,o,i,s){const r=`${s.group}-${t?"start":"end"}`,n=s.name?{name:s.name}:null,a=o.writer.createUIElement(r,n);o.writer.insert(e,a),o.mapper.bindElementToMarker(a,i.markerName)}(o.mapper.toViewPosition(r),t,o,i,s)}function w(e,t){return"function"==typeof e?e:(o,i)=>function(e,t,o){"string"==typeof e&&(e={name:e});let i;const s=t.writer,r=Object.assign({},e.attributes);if("container"==o)i=s.createContainerElement(e.name,r);else if("attribute"==o){const t={priority:e.priority||n.a.DEFAULT_PRIORITY};i=s.createAttributeElement(e.name,r,t)}else i=s.createUIElement(e.name,r);if(e.styles){const t=Object.keys(e.styles);for(const o of t)s.setStyle(o,e.styles[o],i)}if(e.classes){const t=e.classes;if("string"==typeof t)s.addClass(t,i);else for(const e of t)s.addClass(e,i)}return i}(e,i,t)}function v(e){return e.model.values?(t,o)=>{const i=e.view[t];return i?i(t,o):null}:e.view}function y(e){return"string"==typeof e?t=>({key:e,value:t}):"object"==typeof e?e.value?()=>e:t=>({key:e.key,value:t}):e}function j(e,t,o){const i="function"==typeof e?e(t,o):e;return i?(i.priority||(i.priority=10),i.id||(i.id=t.markerName),i):null}},"./packages/ckeditor5-engine/src/conversion/mapper.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return d}));var i=o("./packages/ckeditor5-engine/src/model/position.js"),s=o("./packages/ckeditor5-engine/src/model/range.js"),r=o("./packages/ckeditor5-engine/src/view/position.js"),n=o("./packages/ckeditor5-engine/src/view/range.js"),a=o("./packages/ckeditor5-engine/src/view/text.js"),c=o("./packages/ckeditor5-utils/src/emittermixin.js"),l=o("./packages/ckeditor5-utils/src/mix.js");class d{constructor(){this._modelToViewMapping=new WeakMap,this._viewToModelMapping=new WeakMap,this._viewToModelLengthCallbacks=new Map,this._markerNameToElements=new Map,this._elementToMarkerNames=new Map,this._unboundMarkerNames=new Set,this.on("modelToViewPosition",(e,t)=>{if(t.viewPosition)return;const o=this._modelToViewMapping.get(t.modelPosition.parent);t.viewPosition=this.findPositionIn(o,t.modelPosition.offset)},{priority:"low"}),this.on("viewToModelPosition",(e,t)=>{if(t.modelPosition)return;const o=this.findMappedViewAncestor(t.viewPosition),s=this._viewToModelMapping.get(o),r=this._toModelOffset(t.viewPosition.parent,t.viewPosition.offset,o);t.modelPosition=i.a._createAt(s,r)},{priority:"low"})}bindElements(e,t){this._modelToViewMapping.set(e,t),this._viewToModelMapping.set(t,e)}unbindViewElement(e){const t=this.toModelElement(e);if(this._viewToModelMapping.delete(e),this._elementToMarkerNames.has(e))for(const t of this._elementToMarkerNames.get(e))this._unboundMarkerNames.add(t);this._modelToViewMapping.get(t)==e&&this._modelToViewMapping.delete(t)}unbindModelElement(e){const t=this.toViewElement(e);this._modelToViewMapping.delete(e),this._viewToModelMapping.get(t)==e&&this._viewToModelMapping.delete(t)}bindElementToMarker(e,t){const o=this._markerNameToElements.get(t)||new Set;o.add(e);const i=this._elementToMarkerNames.get(e)||new Set;i.add(t),this._markerNameToElements.set(t,o),this._elementToMarkerNames.set(e,i)}unbindElementFromMarkerName(e,t){const o=this._markerNameToElements.get(t);o&&(o.delete(e),0==o.size&&this._markerNameToElements.delete(t));const i=this._elementToMarkerNames.get(e);i&&(i.delete(t),0==i.size&&this._elementToMarkerNames.delete(e))}flushUnboundMarkerNames(){const e=Array.from(this._unboundMarkerNames);return this._unboundMarkerNames.clear(),e}clearBindings(){this._modelToViewMapping=new WeakMap,this._viewToModelMapping=new WeakMap,this._markerNameToElements=new Map,this._elementToMarkerNames=new Map,this._unboundMarkerNames=new Set}toModelElement(e){return this._viewToModelMapping.get(e)}toViewElement(e){return this._modelToViewMapping.get(e)}toModelRange(e){return new s.a(this.toModelPosition(e.start),this.toModelPosition(e.end))}toViewRange(e){return new n.a(this.toViewPosition(e.start),this.toViewPosition(e.end))}toModelPosition(e){const t={viewPosition:e,mapper:this};return this.fire("viewToModelPosition",t),t.modelPosition}toViewPosition(e,t={isPhantom:!1}){const o={modelPosition:e,mapper:this,isPhantom:t.isPhantom};return this.fire("modelToViewPosition",o),o.viewPosition}markerNameToElements(e){const t=this._markerNameToElements.get(e);if(!t)return null;const o=new Set;for(const e of t)if(e.is("attributeElement"))for(const t of e.getElementsWithSameId())o.add(t);else o.add(e);return o}registerViewToModelLength(e,t){this._viewToModelLengthCallbacks.set(e,t)}findMappedViewAncestor(e){let t=e.parent;for(;!this._viewToModelMapping.has(t);)t=t.parent;return t}_toModelOffset(e,t,o){if(o!=e){return this._toModelOffset(e.parent,e.index,o)+this._toModelOffset(e,t,e)}if(e.is("$text"))return t;let i=0;for(let o=0;o<t;o++)i+=this.getModelLength(e.getChild(o));return i}getModelLength(e){if(this._viewToModelLengthCallbacks.get(e.name)){return this._viewToModelLengthCallbacks.get(e.name)(e)}if(this._viewToModelMapping.has(e))return 1;if(e.is("$text"))return e.data.length;if(e.is("uiElement"))return 0;{let t=0;for(const o of e.getChildren())t+=this.getModelLength(o);return t}}findPositionIn(e,t){let o,i=0,s=0,n=0;if(e.is("$text"))return new r.a(e,t);for(;s<t;)o=e.getChild(n),i=this.getModelLength(o),s+=i,n++;return s==t?this._moveViewPositionToTextNode(new r.a(e,n)):this.findPositionIn(o,t-(s-i))}_moveViewPositionToTextNode(e){const t=e.nodeBefore,o=e.nodeAfter;return t instanceof a.a?new r.a(t,t.data.length):o instanceof a.a?new r.a(o,0):e}}Object(l.a)(d,c.c)},"./packages/ckeditor5-engine/src/conversion/upcasthelpers.js":function(e,t,o){"use strict";o.d(t,"d",(function(){return c})),o.d(t,"c",(function(){return l})),o.d(t,"b",(function(){return d})),o.d(t,"a",(function(){return u}));var i=o("./packages/ckeditor5-engine/src/view/matcher.js"),s=o("./packages/ckeditor5-engine/src/conversion/conversionhelpers.js"),r=o("./node_modules/lodash-es/cloneDeep.js"),n=o("./packages/ckeditor5-utils/src/priorities.js"),a=o("./packages/ckeditor5-engine/src/model/utils/autoparagraphing.js");class c extends s.a{elementToElement(e){return this.add(h(e))}elementToAttribute(e){return this.add(function(e){f(e=Object(r.a)(e));const t=m(e,!1),o=p(e.view),i=o?"element:"+o:"element";return o=>{o.on(i,t,{priority:e.converterPriority||"low"})}}(e))}attributeToAttribute(e){return this.add(function(e){e=Object(r.a)(e);let t=null;("string"==typeof e.view||e.view.key)&&(t=function(e){"string"==typeof e.view&&(e.view={key:e.view});const t=e.view.key;let o;if("class"==t||"style"==t){o={["class"==t?"classes":"styles"]:e.view.value}}else{const i=void 0===e.view.value?/[\s\S]*/:e.view.value;o={attributes:{[t]:i}}}e.view.name&&(o.name=e.view.name);return e.view=o,t}(e));f(e,t);const o=m(e,!0);return t=>{t.on("element",o,{priority:e.converterPriority||"low"})}}(e))}elementToMarker(e){return this.add(function(e){return function(e){const t=e.model;e.model=(e,o)=>{const i="string"==typeof t?t:t(e,o);return o.writer.createElement("$marker",{"data-name":i})}}(e=Object(r.a)(e)),h(e)}(e))}dataToMarker(e){return this.add(function(e){(e=Object(r.a)(e)).model||(e.model=t=>t?e.view+":"+t:e.view);const t=g(k(e,"start")),o=g(k(e,"end"));return i=>{i.on("element:"+e.view+"-start",t,{priority:e.converterPriority||"normal"}),i.on("element:"+e.view+"-end",o,{priority:e.converterPriority||"normal"});const s=n.a.get("low"),r=n.a.get("highest"),a=n.a.get(e.converterPriority)/r;i.on("element",function(e){return(t,o,i)=>{const s="data-"+e.view;function r(t,s){for(const r of s){const s=e.model(r,i),n=i.writer.createElement("$marker",{"data-name":s});i.writer.insert(n,t),o.modelCursor.isEqual(t)?o.modelCursor=o.modelCursor.getShiftedBy(1):o.modelCursor=o.modelCursor._getTransformedByInsertion(t,1),o.modelRange=o.modelRange._getTransformedByInsertion(t,1)[0]}}(i.consumable.test(o.viewItem,{attributes:s+"-end-after"})||i.consumable.test(o.viewItem,{attributes:s+"-start-after"})||i.consumable.test(o.viewItem,{attributes:s+"-end-before"})||i.consumable.test(o.viewItem,{attributes:s+"-start-before"}))&&(o.modelRange||Object.assign(o,i.convertChildren(o.viewItem,o.modelCursor)),i.consumable.consume(o.viewItem,{attributes:s+"-end-after"})&&r(o.modelRange.end,o.viewItem.getAttribute(s+"-end-after").split(",")),i.consumable.consume(o.viewItem,{attributes:s+"-start-after"})&&r(o.modelRange.end,o.viewItem.getAttribute(s+"-start-after").split(",")),i.consumable.consume(o.viewItem,{attributes:s+"-end-before"})&&r(o.modelRange.start,o.viewItem.getAttribute(s+"-end-before").split(",")),i.consumable.consume(o.viewItem,{attributes:s+"-start-before"})&&r(o.modelRange.start,o.viewItem.getAttribute(s+"-start-before").split(",")))}}(e),{priority:s+a})}}(e))}}function l(){return(e,t,o)=>{if(!t.modelRange&&o.consumable.consume(t.viewItem,{name:!0})){const{modelRange:e,modelCursor:i}=o.convertChildren(t.viewItem,t.modelCursor);t.modelRange=e,t.modelCursor=i}}}function d(){return(e,t,{schema:o,consumable:i,writer:s})=>{let r=t.modelCursor;if(!i.test(t.viewItem))return;if(!o.checkChild(r,"$text")){if(!Object(a.b)(r,"$text",o))return;r=Object(a.c)(r,s)}i.consume(t.viewItem);const n=s.createText(t.viewItem.data);s.insert(n,r),t.modelRange=s.createRange(r,r.getShiftedBy(n.offsetSize)),t.modelCursor=t.modelRange.end}}function u(e,t){return(o,i)=>{const s=i.newSelection,r=[];for(const e of s.getRanges())r.push(t.toModelRange(e));const n=e.createSelection(r,{backward:s.isBackward});n.isEqual(e.document.selection)||e.change(e=>{e.setSelection(n)})}}function h(e){const t=g(e=Object(r.a)(e)),o=p(e.view),i=o?"element:"+o:"element";return o=>{o.on(i,t,{priority:e.converterPriority||"normal"})}}function p(e){return"string"==typeof e?e:"object"==typeof e&&"string"==typeof e.name?e.name:null}function g(e){const t=new i.a(e.view);return(o,i,s)=>{const r=t.match(i.viewItem);if(!r)return;const n=r.match;if(n.name=!0,!s.consumable.test(i.viewItem,n))return;const a=function(e,t,o){return e instanceof Function?e(t,o):o.writer.createElement(e)}(e.model,i.viewItem,s);a&&s.safeInsert(a,i.modelCursor)&&(s.consumable.consume(i.viewItem,n),s.convertChildren(i.viewItem,a),s.updateConversionResult(a,i))}}function f(e,t=null){const o=null===t||(e=>e.getAttribute(t)),i="object"!=typeof e.model?e.model:e.model.key,s="object"!=typeof e.model||void 0===e.model.value?o:e.model.value;e.model={key:i,value:s}}function m(e,t){const o=new i.a(e.view);return(i,s,r)=>{const n=o.match(s.viewItem);if(!n)return;if(!function(e,t){const o="function"==typeof e?e(t):e;if("object"==typeof o&&!p(o))return!1;return!o.classes&&!o.attributes&&!o.styles}(e.view,s.viewItem)?delete n.match.name:n.match.name=!0,!r.consumable.test(s.viewItem,n.match))return;const a=e.model.key,c="function"==typeof e.model.value?e.model.value(s.viewItem,r):e.model.value;if(null===c)return;s.modelRange||Object.assign(s,r.convertChildren(s.viewItem,s.modelCursor));(function(e,t,o,i){let s=!1;for(const r of Array.from(e.getItems({shallow:o})))i.schema.checkAttribute(r,t.key)&&(s=!0,r.hasAttribute(t.key)||i.writer.setAttribute(t.key,t.value,r));return s})(s.modelRange,{key:a,value:c},t,r)&&r.consumable.consume(s.viewItem,n.match)}}function k(e,t){const o={};return o.view=e.view+"-"+t,o.model=(t,o)=>{const i=t.getAttribute("name"),s=e.model(i,o);return o.writer.createElement("$marker",{"data-name":s})},o}},"./packages/ckeditor5-engine/src/dataprocessor/htmldataprocessor.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return r}));class i{getHtml(e){const t=document.implementation.createHTMLDocument("").createElement("div");return t.appendChild(e),t.innerHTML}}var s=o("./packages/ckeditor5-engine/src/view/domconverter.js");class r{constructor(e){this.domParser=new DOMParser,this.domConverter=new s.a(e,{renderingMode:"data"}),this.htmlWriter=new i}toData(e){const t=this.domConverter.viewToDom(e,document);return this.htmlWriter.getHtml(t)}toView(e){const t=this._toDom(e);return this.domConverter.domToView(t)}registerRawContentMatcher(e){this.domConverter.registerRawContentMatcher(e)}useFillerType(e){this.domConverter.blockFillerMode="marked"==e?"markedNbsp":"nbsp"}_toDom(e){const t=this.domParser.parseFromString(e,"text/html"),o=t.createDocumentFragment();let i=t.firstChild;for(;!i.isSameNode(t.documentElement);){const e=i;i=i.nextSibling,e.nodeType==Node.COMMENT_NODE&&o.appendChild(e)}const s=t.body.childNodes;for(;s.length>0;)o.appendChild(s[0]);return o}}},"./packages/ckeditor5-engine/src/model/documentfragment.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return c}));var i=o("./packages/ckeditor5-engine/src/model/nodelist.js"),s=o("./packages/ckeditor5-engine/src/model/element.js"),r=o("./packages/ckeditor5-engine/src/model/text.js"),n=o("./packages/ckeditor5-engine/src/model/textproxy.js"),a=o("./packages/ckeditor5-utils/src/isiterable.js");class c{constructor(e){this.markers=new Map,this._children=new i.a,e&&this._insertChild(0,e)}[Symbol.iterator](){return this.getChildren()}get childCount(){return this._children.length}get maxOffset(){return this._children.maxOffset}get isEmpty(){return 0===this.childCount}get root(){return this}get parent(){return null}is(e){return"documentFragment"===e||"model:documentFragment"===e}getChild(e){return this._children.getNode(e)}getChildren(){return this._children[Symbol.iterator]()}getChildIndex(e){return this._children.getNodeIndex(e)}getChildStartOffset(e){return this._children.getNodeStartOffset(e)}getPath(){return[]}getNodeByPath(e){let t=this;for(const o of e)t=t.getChild(t.offsetToIndex(o));return t}offsetToIndex(e){return this._children.offsetToIndex(e)}toJSON(){const e=[];for(const t of this._children)e.push(t.toJSON());return e}static fromJSON(e){const t=[];for(const o of e)o.name?t.push(s.a.fromJSON(o)):t.push(r.a.fromJSON(o));return new c(t)}_appendChild(e){this._insertChild(this.childCount,e)}_insertChild(e,t){const o=function(e){if("string"==typeof e)return[new r.a(e)];Object(a.a)(e)||(e=[e]);return Array.from(e).map(e=>"string"==typeof e?new r.a(e):e instanceof n.a?new r.a(e.data,e.getAttributes()):e)}(t);for(const e of o)null!==e.parent&&e._remove(),e.parent=this;this._children._insertNodes(e,o)}_removeChildren(e,t=1){const o=this._children._removeNodes(e,t);for(const e of o)e.parent=null;return o}}},"./packages/ckeditor5-engine/src/model/documentselection.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return p}));var i=o("./packages/ckeditor5-utils/src/mix.js"),s=o("./packages/ckeditor5-utils/src/emittermixin.js"),r=o("./packages/ckeditor5-engine/src/model/selection.js"),n=o("./packages/ckeditor5-engine/src/model/liverange.js"),a=o("./packages/ckeditor5-engine/src/model/text.js"),c=o("./packages/ckeditor5-engine/src/model/textproxy.js"),l=o("./packages/ckeditor5-utils/src/tomap.js"),d=o("./packages/ckeditor5-utils/src/collection.js"),u=o("./packages/ckeditor5-utils/src/ckeditorerror.js"),h=o("./packages/ckeditor5-utils/src/uid.js");class p{constructor(e){this._selection=new g(e),this._selection.delegate("change:range").to(this),this._selection.delegate("change:attribute").to(this),this._selection.delegate("change:marker").to(this)}get isCollapsed(){return this._selection.isCollapsed}get anchor(){return this._selection.anchor}get focus(){return this._selection.focus}get rangeCount(){return this._selection.rangeCount}get hasOwnRange(){return this._selection.hasOwnRange}get isBackward(){return this._selection.isBackward}get isGravityOverridden(){return this._selection.isGravityOverridden}get markers(){return this._selection.markers}get _ranges(){return this._selection._ranges}getRanges(){return this._selection.getRanges()}getFirstPosition(){return this._selection.getFirstPosition()}getLastPosition(){return this._selection.getLastPosition()}getFirstRange(){return this._selection.getFirstRange()}getLastRange(){return this._selection.getLastRange()}getSelectedBlocks(){return this._selection.getSelectedBlocks()}getSelectedElement(){return this._selection.getSelectedElement()}containsEntireContent(e){return this._selection.containsEntireContent(e)}destroy(){this._selection.destroy()}getAttributeKeys(){return this._selection.getAttributeKeys()}getAttributes(){return this._selection.getAttributes()}getAttribute(e){return this._selection.getAttribute(e)}hasAttribute(e){return this._selection.hasAttribute(e)}refresh(){this._selection._updateMarkers(),this._selection._updateAttributes(!1)}observeMarkers(e){this._selection.observeMarkers(e)}is(e){return"selection"===e||"model:selection"==e||"documentSelection"==e||"model:documentSelection"==e}_setFocus(e,t){this._selection.setFocus(e,t)}_setTo(e,t,o){this._selection.setTo(e,t,o)}_setAttribute(e,t){this._selection.setAttribute(e,t)}_removeAttribute(e){this._selection.removeAttribute(e)}_getStoredAttributes(){return this._selection._getStoredAttributes()}_overrideGravity(){return this._selection.overrideGravity()}_restoreGravity(e){this._selection.restoreGravity(e)}static _getStoreAttributeKey(e){return"selection:"+e}static _isStoreAttributeKey(e){return e.startsWith("selection:")}}Object(i.a)(p,s.c);class g extends r.a{constructor(e){super(),this.markers=new d.a({idProperty:"name"}),this._model=e.model,this._document=e,this._attributePriority=new Map,this._selectionRestorePosition=null,this._hasChangedRange=!1,this._overriddenGravityRegister=new Set,this._observedMarkers=new Set,this.listenTo(this._model,"applyOperation",(e,t)=>{const o=t[0];o.isDocumentOperation&&"marker"!=o.type&&"rename"!=o.type&&"noop"!=o.type&&(0==this._ranges.length&&this._selectionRestorePosition&&this._fixGraveyardSelection(this._selectionRestorePosition),this._selectionRestorePosition=null,this._hasChangedRange&&(this._hasChangedRange=!1,this.fire("change:range",{directChange:!1})))},{priority:"lowest"}),this.on("change:range",()=>{for(const e of this.getRanges())if(!this._document._validateSelectionRange(e))throw new u.a("document-selection-wrong-position",this,{range:e})}),this.listenTo(this._model.markers,"update",(e,t,o,i)=>{this._updateMarker(t,i)}),this.listenTo(this._document,"change",(e,t)=>{!function(e,t){const o=e.document.differ;for(const i of o.getChanges()){if("insert"!=i.type)continue;const o=i.position.parent;i.length===o.maxOffset&&e.enqueueChange(t,e=>{const t=Array.from(o.getAttributeKeys()).filter(e=>e.startsWith("selection:"));for(const i of t)e.removeAttribute(i,o)})}}(this._model,t)})}get isCollapsed(){return 0===this._ranges.length?this._document._getDefaultRange().isCollapsed:super.isCollapsed}get anchor(){return super.anchor||this._document._getDefaultRange().start}get focus(){return super.focus||this._document._getDefaultRange().end}get rangeCount(){return this._ranges.length?this._ranges.length:1}get hasOwnRange(){return this._ranges.length>0}get isGravityOverridden(){return!!this._overriddenGravityRegister.size}destroy(){for(let e=0;e<this._ranges.length;e++)this._ranges[e].detach();this.stopListening()}*getRanges(){this._ranges.length?yield*super.getRanges():yield this._document._getDefaultRange()}getFirstRange(){return super.getFirstRange()||this._document._getDefaultRange()}getLastRange(){return super.getLastRange()||this._document._getDefaultRange()}setTo(e,t,o){super.setTo(e,t,o),this._updateAttributes(!0),this._updateMarkers()}setFocus(e,t){super.setFocus(e,t),this._updateAttributes(!0),this._updateMarkers()}setAttribute(e,t){if(this._setAttribute(e,t)){const t=[e];this.fire("change:attribute",{attributeKeys:t,directChange:!0})}}removeAttribute(e){if(this._removeAttribute(e)){const t=[e];this.fire("change:attribute",{attributeKeys:t,directChange:!0})}}overrideGravity(){const e=Object(h.a)();return this._overriddenGravityRegister.add(e),1===this._overriddenGravityRegister.size&&this._updateAttributes(!0),e}restoreGravity(e){if(!this._overriddenGravityRegister.has(e))throw new u.a("document-selection-gravity-wrong-restore",this,{uid:e});this._overriddenGravityRegister.delete(e),this.isGravityOverridden||this._updateAttributes(!0)}observeMarkers(e){this._observedMarkers.add(e),this._updateMarkers()}_popRange(){this._ranges.pop().detach()}_pushRange(e){const t=this._prepareRange(e);t&&this._ranges.push(t)}_prepareRange(e){if(this._checkRange(e),e.root==this._document.graveyard)return;const t=n.a.fromRange(e);return t.on("change:range",(e,o,i)=>{if(this._hasChangedRange=!0,t.root==this._document.graveyard){this._selectionRestorePosition=i.deletionPosition;const e=this._ranges.indexOf(t);this._ranges.splice(e,1),t.detach()}}),t}_updateMarkers(){if(!this._observedMarkers.size)return;const e=[];let t=!1;for(const t of this._model.markers){const o=t.name.split(":",1)[0];if(!this._observedMarkers.has(o))continue;const i=t.getRange();for(const o of this.getRanges())i.containsRange(o,!o.isCollapsed)&&e.push(t)}const o=Array.from(this.markers);for(const o of e)this.markers.has(o)||(this.markers.add(o),t=!0);for(const o of Array.from(this.markers))e.includes(o)||(this.markers.remove(o),t=!0);t&&this.fire("change:marker",{oldMarkers:o,directChange:!1})}_updateMarker(e,t){const o=e.name.split(":",1)[0];if(!this._observedMarkers.has(o))return;let i=!1;const s=Array.from(this.markers),r=this.markers.has(e);if(t){let o=!1;for(const e of this.getRanges())if(t.containsRange(e,!e.isCollapsed)){o=!0;break}o&&!r?(this.markers.add(e),i=!0):!o&&r&&(this.markers.remove(e),i=!0)}else r&&(this.markers.remove(e),i=!0);i&&this.fire("change:marker",{oldMarkers:s,directChange:!1})}_updateAttributes(e){const t=Object(l.a)(this._getSurroundingAttributes()),o=Object(l.a)(this.getAttributes());if(e)this._attributePriority=new Map,this._attrs=new Map;else for(const[e,t]of this._attributePriority)"low"==t&&(this._attrs.delete(e),this._attributePriority.delete(e));this._setAttributesTo(t);const i=[];for(const[e,t]of this.getAttributes())o.has(e)&&o.get(e)===t||i.push(e);for(const[e]of o)this.hasAttribute(e)||i.push(e);i.length>0&&this.fire("change:attribute",{attributeKeys:i,directChange:!1})}_setAttribute(e,t,o=!0){const i=o?"normal":"low";if("low"==i&&"normal"==this._attributePriority.get(e))return!1;return super.getAttribute(e)!==t&&(this._attrs.set(e,t),this._attributePriority.set(e,i),!0)}_removeAttribute(e,t=!0){const o=t?"normal":"low";return("low"!=o||"normal"!=this._attributePriority.get(e))&&(this._attributePriority.set(e,o),!!super.hasAttribute(e)&&(this._attrs.delete(e),!0))}_setAttributesTo(e){const t=new Set;for(const[t,o]of this.getAttributes())e.get(t)!==o&&this._removeAttribute(t,!1);for(const[o,i]of e){this._setAttribute(o,i,!1)&&t.add(o)}return t}*_getStoredAttributes(){const e=this.getFirstPosition().parent;if(this.isCollapsed&&e.isEmpty)for(const t of e.getAttributeKeys())if(t.startsWith("selection:")){const o=t.substr("selection:".length);yield[o,e.getAttribute(t)]}}_getSurroundingAttributes(){const e=this.getFirstPosition(),t=this._model.schema;let o=null;if(this.isCollapsed){const i=e.textNode?e.textNode:e.nodeBefore,s=e.textNode?e.textNode:e.nodeAfter;if(this.isGravityOverridden||(o=f(i)),o||(o=f(s)),!this.isGravityOverridden&&!o){let e=i;for(;e&&!t.isInline(e)&&!o;)e=e.previousSibling,o=f(e)}if(!o){let e=s;for(;e&&!t.isInline(e)&&!o;)e=e.nextSibling,o=f(e)}o||(o=this._getStoredAttributes())}else{const e=this.getFirstRange();for(const i of e){if(i.item.is("element")&&t.isObject(i.item))break;if("text"==i.type){o=i.item.getAttributes();break}}}return o}_fixGraveyardSelection(e){const t=this._model.schema.getNearestSelectionRange(e);t&&this._pushRange(t)}}function f(e){return e instanceof c.a||e instanceof a.a?e.getAttributes():null}},"./packages/ckeditor5-engine/src/model/element.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return c}));var i=o("./packages/ckeditor5-engine/src/model/node.js"),s=o("./packages/ckeditor5-engine/src/model/nodelist.js"),r=o("./packages/ckeditor5-engine/src/model/text.js"),n=o("./packages/ckeditor5-engine/src/model/textproxy.js"),a=o("./packages/ckeditor5-utils/src/isiterable.js");class c extends i.a{constructor(e,t,o){super(t),this.name=e,this._children=new s.a,o&&this._insertChild(0,o)}get childCount(){return this._children.length}get maxOffset(){return this._children.maxOffset}get isEmpty(){return 0===this.childCount}is(e,t=null){return t?t===this.name&&("element"===e||"model:element"===e):"element"===e||"model:element"===e||"node"===e||"model:node"===e}getChild(e){return this._children.getNode(e)}getChildren(){return this._children[Symbol.iterator]()}getChildIndex(e){return this._children.getNodeIndex(e)}getChildStartOffset(e){return this._children.getNodeStartOffset(e)}offsetToIndex(e){return this._children.offsetToIndex(e)}getNodeByPath(e){let t=this;for(const o of e)t=t.getChild(t.offsetToIndex(o));return t}findAncestor(e,t={includeSelf:!1}){let o=t.includeSelf?this:this.parent;for(;o;){if(o.name===e)return o;o=o.parent}return null}toJSON(){const e=super.toJSON();if(e.name=this.name,this._children.length>0){e.children=[];for(const t of this._children)e.children.push(t.toJSON())}return e}_clone(e=!1){const t=e?Array.from(this._children).map(e=>e._clone(!0)):null;return new c(this.name,this.getAttributes(),t)}_appendChild(e){this._insertChild(this.childCount,e)}_insertChild(e,t){const o=function(e){if("string"==typeof e)return[new r.a(e)];Object(a.a)(e)||(e=[e]);return Array.from(e).map(e=>"string"==typeof e?new r.a(e):e instanceof n.a?new r.a(e.data,e.getAttributes()):e)}(t);for(const e of o)null!==e.parent&&e._remove(),e.parent=this;this._children._insertNodes(e,o)}_removeChildren(e,t=1){const o=this._children._removeNodes(e,t);for(const e of o)e.parent=null;return o}static fromJSON(e){let t=null;if(e.children){t=[];for(const o of e.children)o.name?t.push(c.fromJSON(o)):t.push(r.a.fromJSON(o))}return new c(e.name,e.attributes,t)}}},"./packages/ckeditor5-engine/src/model/liveposition.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return a}));var i=o("./packages/ckeditor5-engine/src/model/position.js"),s=o("./packages/ckeditor5-utils/src/emittermixin.js"),r=o("./packages/ckeditor5-utils/src/mix.js"),n=o("./packages/ckeditor5-utils/src/ckeditorerror.js");class a extends i.a{constructor(e,t,o="toNone"){if(super(e,t,o),!this.root.is("rootElement"))throw new n.a("model-liveposition-root-not-rootelement",e);c.call(this)}detach(){this.stopListening()}is(e){return"livePosition"===e||"model:livePosition"===e||"position"==e||"model:position"===e}toPosition(){return new i.a(this.root,this.path.slice(),this.stickiness)}static fromPosition(e,t){return new this(e.root,e.path.slice(),t||e.stickiness)}}function c(){this.listenTo(this.root.document.model,"applyOperation",(e,t)=>{const o=t[0];o.isDocumentOperation&&l.call(this,o)},{priority:"low"})}function l(e){const t=this.getTransformedByOperation(e);if(!this.isEqual(t)){const e=this.toPosition();this.path=t.path,this.root=t.root,this.fire("change",e)}}Object(r.a)(a,s.c)},"./packages/ckeditor5-engine/src/model/liverange.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return n}));var i=o("./packages/ckeditor5-engine/src/model/range.js"),s=o("./packages/ckeditor5-utils/src/emittermixin.js"),r=o("./packages/ckeditor5-utils/src/mix.js");class n extends i.a{constructor(e,t){super(e,t),a.call(this)}detach(){this.stopListening()}is(e){return"liveRange"===e||"model:liveRange"===e||"range"==e||"model:range"===e}toRange(){return new i.a(this.start,this.end)}static fromRange(e){return new n(e.start,e.end)}}function a(){this.listenTo(this.root.document.model,"applyOperation",(e,t)=>{const o=t[0];o.isDocumentOperation&&c.call(this,o)},{priority:"low"})}function c(e){const t=this.getTransformedByOperation(e),o=i.a._createFromRanges(t),s=!o.isEqual(this),r=function(e,t){switch(t.type){case"insert":return e.containsPosition(t.position);case"move":case"remove":case"reinsert":case"merge":return e.containsPosition(t.sourcePosition)||e.start.isEqual(t.sourcePosition)||e.containsPosition(t.targetPosition);case"split":return e.containsPosition(t.splitPosition)||e.containsPosition(t.insertionPosition)}return!1}(this,e);let n=null;if(s){"$graveyard"==o.root.rootName&&(n="remove"==e.type?e.sourcePosition:e.deletionPosition);const t=this.toRange();this.start=o.start,this.end=o.end,this.fire("change:range",t,{deletionPosition:n})}else r&&this.fire("change:content",this.toRange(),{deletionPosition:n})}Object(r.a)(n,s.c)},"./packages/ckeditor5-engine/src/model/model.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return pe}));class i{constructor(e="default"){this.operations=[],this.type=e}get baseVersion(){for(const e of this.operations)if(null!==e.baseVersion)return e.baseVersion;return null}addOperation(e){return e.batch=this,this.operations.push(e),e}}var s=o("./packages/ckeditor5-engine/src/model/operation/attributeoperation.js"),r=o("./packages/ckeditor5-engine/src/model/operation/operation.js"),n=o("./packages/ckeditor5-engine/src/model/range.js"),a=o("./packages/ckeditor5-engine/src/model/operation/utils.js"),c=o("./packages/ckeditor5-utils/src/ckeditorerror.js");class l extends r.a{constructor(e,t){super(null),this.sourcePosition=e.clone(),this.howMany=t}get type(){return"detach"}toJSON(){const e=super.toJSON();return e.sourcePosition=this.sourcePosition.toJSON(),e}_validate(){if(this.sourcePosition.root.document)throw new c.a("detach-operation-on-document-node",this)}_execute(){Object(a.d)(n.a._createFromPositionAndShift(this.sourcePosition,this.howMany))}static get className(){return"DetachOperation"}}var d=o("./packages/ckeditor5-engine/src/model/operation/insertoperation.js"),u=o("./packages/ckeditor5-engine/src/model/operation/markeroperation.js"),h=o("./packages/ckeditor5-engine/src/model/operation/moveoperation.js"),p=o("./packages/ckeditor5-engine/src/model/operation/renameoperation.js"),g=o("./packages/ckeditor5-engine/src/model/operation/rootattributeoperation.js"),f=o("./packages/ckeditor5-engine/src/model/operation/splitoperation.js"),m=o("./packages/ckeditor5-engine/src/model/operation/mergeoperation.js"),k=o("./packages/ckeditor5-engine/src/model/documentfragment.js"),b=o("./packages/ckeditor5-engine/src/model/text.js"),_=o("./packages/ckeditor5-engine/src/model/element.js");class w extends _.a{constructor(e,t,o="main"){super(t),this._document=e,this.rootName=o}get document(){return this._document}is(e,t){return t?t===this.name&&("rootElement"===e||"model:rootElement"===e||"element"===e||"model:element"===e):"rootElement"===e||"model:rootElement"===e||"element"===e||"model:element"===e||"node"===e||"model:node"===e}toJSON(){return this.rootName}}var v=o("./packages/ckeditor5-engine/src/model/position.js"),y=o("./packages/ckeditor5-engine/src/model/documentselection.js"),j=o("./packages/ckeditor5-utils/src/tomap.js");class x{constructor(e,t){this.model=e,this.batch=t}createText(e,t){return new b.a(e,t)}createElement(e,t){return new _.a(e,t)}createDocumentFragment(){return new k.a}cloneElement(e,t=!0){return e._clone(t)}insert(e,t,o=0){if(this._assertWriterUsedCorrectly(),e instanceof b.a&&""==e.data)return;const i=v.a._createAt(t,o);if(e.parent){if(C(e.root,i.root))return void this.move(n.a._createOn(e),i);if(e.root.document)throw new c.a("model-writer-insert-forbidden-move",this);this.remove(e)}const s=i.root.document?i.root.document.version:null,r=new d.a(i,e,s);if(e instanceof b.a&&(r.shouldReceiveAttributes=!0),this.batch.addOperation(r),this.model.applyOperation(r),e instanceof k.a)for(const[t,o]of e.markers){const e=v.a._createAt(o.root,0),s={range:new n.a(o.start._getCombined(e,i),o.end._getCombined(e,i)),usingOperation:!0,affectsData:!0};this.model.markers.has(t)?this.updateMarker(t,s):this.addMarker(t,s)}}insertText(e,t,o,i){t instanceof k.a||t instanceof _.a||t instanceof v.a?this.insert(this.createText(e),t,o):this.insert(this.createText(e,t),o,i)}insertElement(e,t,o,i){t instanceof k.a||t instanceof _.a||t instanceof v.a?this.insert(this.createElement(e),t,o):this.insert(this.createElement(e,t),o,i)}append(e,t){this.insert(e,t,"end")}appendText(e,t,o){t instanceof k.a||t instanceof _.a?this.insert(this.createText(e),t,"end"):this.insert(this.createText(e,t),o,"end")}appendElement(e,t,o){t instanceof k.a||t instanceof _.a?this.insert(this.createElement(e),t,"end"):this.insert(this.createElement(e,t),o,"end")}setAttribute(e,t,o){if(this._assertWriterUsedCorrectly(),o instanceof n.a){const i=o.getMinimalFlatRanges();for(const o of i)P(this,e,t,o)}else O(this,e,t,o)}setAttributes(e,t){for(const[o,i]of Object(j.a)(e))this.setAttribute(o,i,t)}removeAttribute(e,t){if(this._assertWriterUsedCorrectly(),t instanceof n.a){const o=t.getMinimalFlatRanges();for(const t of o)P(this,e,null,t)}else O(this,e,null,t)}clearAttributes(e){this._assertWriterUsedCorrectly();const t=e=>{for(const t of e.getAttributeKeys())this.removeAttribute(t,e)};if(e instanceof n.a)for(const o of e.getItems())t(o);else t(e)}move(e,t,o){if(this._assertWriterUsedCorrectly(),!(e instanceof n.a))throw new c.a("writer-move-invalid-range",this);if(!e.isFlat)throw new c.a("writer-move-range-not-flat",this);const i=v.a._createAt(t,o);if(i.isEqual(e.start))return;if(this._addOperationForAffectedMarkers("move",e),!C(e.root,i.root))throw new c.a("writer-move-different-document",this);const s=e.root.document?e.root.document.version:null,r=new h.a(e.start,e.end.offset-e.start.offset,i,s);this.batch.addOperation(r),this.model.applyOperation(r)}remove(e){this._assertWriterUsedCorrectly();const t=(e instanceof n.a?e:n.a._createOn(e)).getMinimalFlatRanges().reverse();for(const e of t)this._addOperationForAffectedMarkers("move",e),T(e.start,e.end.offset-e.start.offset,this.batch,this.model)}merge(e){this._assertWriterUsedCorrectly();const t=e.nodeBefore,o=e.nodeAfter;if(this._addOperationForAffectedMarkers("merge",e),!(t instanceof _.a))throw new c.a("writer-merge-no-element-before",this);if(!(o instanceof _.a))throw new c.a("writer-merge-no-element-after",this);e.root.document?this._merge(e):this._mergeDetached(e)}createPositionFromPath(e,t,o){return this.model.createPositionFromPath(e,t,o)}createPositionAt(e,t){return this.model.createPositionAt(e,t)}createPositionAfter(e){return this.model.createPositionAfter(e)}createPositionBefore(e){return this.model.createPositionBefore(e)}createRange(e,t){return this.model.createRange(e,t)}createRangeIn(e){return this.model.createRangeIn(e)}createRangeOn(e){return this.model.createRangeOn(e)}createSelection(e,t,o){return this.model.createSelection(e,t,o)}_mergeDetached(e){const t=e.nodeBefore,o=e.nodeAfter;this.move(n.a._createIn(o),v.a._createAt(t,"end")),this.remove(o)}_merge(e){const t=v.a._createAt(e.nodeBefore,"end"),o=v.a._createAt(e.nodeAfter,0),i=e.root.document.graveyard,s=new v.a(i,[0]),r=e.root.document.version,n=new m.a(o,e.nodeAfter.maxOffset,t,s,r);this.batch.addOperation(n),this.model.applyOperation(n)}rename(e,t){if(this._assertWriterUsedCorrectly(),!(e instanceof _.a))throw new c.a("writer-rename-not-element-instance",this);const o=e.root.document?e.root.document.version:null,i=new p.a(v.a._createBefore(e),e.name,t,o);this.batch.addOperation(i),this.model.applyOperation(i)}split(e,t){this._assertWriterUsedCorrectly();let o,i,s=e.parent;if(!s.parent)throw new c.a("writer-split-element-no-parent",this);if(t||(t=s.parent),!e.parent.getAncestors({includeSelf:!0}).includes(t))throw new c.a("writer-split-invalid-limit-element",this);do{const t=s.root.document?s.root.document.version:null,r=s.maxOffset-e.offset,n=f.a.getInsertionPosition(e),a=new f.a(e,r,n,null,t);this.batch.addOperation(a),this.model.applyOperation(a),o||i||(o=s,i=e.parent.nextSibling),s=(e=this.createPositionAfter(e.parent)).parent}while(s!==t);return{position:e,range:new n.a(v.a._createAt(o,"end"),v.a._createAt(i,0))}}wrap(e,t){if(this._assertWriterUsedCorrectly(),!e.isFlat)throw new c.a("writer-wrap-range-not-flat",this);const o=t instanceof _.a?t:new _.a(t);if(o.childCount>0)throw new c.a("writer-wrap-element-not-empty",this);if(null!==o.parent)throw new c.a("writer-wrap-element-attached",this);this.insert(o,e.start);const i=new n.a(e.start.getShiftedBy(1),e.end.getShiftedBy(1));this.move(i,v.a._createAt(o,0))}unwrap(e){if(this._assertWriterUsedCorrectly(),null===e.parent)throw new c.a("writer-unwrap-element-no-parent",this);this.move(n.a._createIn(e),this.createPositionAfter(e)),this.remove(e)}addMarker(e,t){if(this._assertWriterUsedCorrectly(),!t||"boolean"!=typeof t.usingOperation)throw new c.a("writer-addmarker-no-usingoperation",this);const o=t.usingOperation,i=t.range,s=void 0!==t.affectsData&&t.affectsData;if(this.model.markers.has(e))throw new c.a("writer-addmarker-marker-exists",this);if(!i)throw new c.a("writer-addmarker-no-range",this);return o?(A(this,e,null,i,s),this.model.markers.get(e)):this.model.markers._set(e,i,o,s)}updateMarker(e,t){this._assertWriterUsedCorrectly();const o="string"==typeof e?e:e.name,i=this.model.markers.get(o);if(!i)throw new c.a("writer-updatemarker-marker-not-exists",this);if(!t)return void this.model.markers._refresh(i);const s="boolean"==typeof t.usingOperation,r="boolean"==typeof t.affectsData,n=r?t.affectsData:i.affectsData;if(!s&&!t.range&&!r)throw new c.a("writer-updatemarker-wrong-options",this);const a=i.getRange(),l=t.range?t.range:a;s&&t.usingOperation!==i.managedUsingOperations?t.usingOperation?A(this,o,null,l,n):(A(this,o,a,null,n),this.model.markers._set(o,l,void 0,n)):i.managedUsingOperations?A(this,o,a,l,n):this.model.markers._set(o,l,void 0,n)}removeMarker(e){this._assertWriterUsedCorrectly();const t="string"==typeof e?e:e.name;if(!this.model.markers.has(t))throw new c.a("writer-removemarker-no-marker",this);const o=this.model.markers.get(t);if(!o.managedUsingOperations)return void this.model.markers._remove(t);A(this,t,o.getRange(),null,o.affectsData)}setSelection(e,t,o){this._assertWriterUsedCorrectly(),this.model.document.selection._setTo(e,t,o)}setSelectionFocus(e,t){this._assertWriterUsedCorrectly(),this.model.document.selection._setFocus(e,t)}setSelectionAttribute(e,t){if(this._assertWriterUsedCorrectly(),"string"==typeof e)this._setSelectionAttribute(e,t);else for(const[t,o]of Object(j.a)(e))this._setSelectionAttribute(t,o)}removeSelectionAttribute(e){if(this._assertWriterUsedCorrectly(),"string"==typeof e)this._removeSelectionAttribute(e);else for(const t of e)this._removeSelectionAttribute(t)}overrideSelectionGravity(){return this.model.document.selection._overrideGravity()}restoreSelectionGravity(e){this.model.document.selection._restoreGravity(e)}_setSelectionAttribute(e,t){const o=this.model.document.selection;if(o.isCollapsed&&o.anchor.parent.isEmpty){const i=y.a._getStoreAttributeKey(e);this.setAttribute(i,t,o.anchor.parent)}o._setAttribute(e,t)}_removeSelectionAttribute(e){const t=this.model.document.selection;if(t.isCollapsed&&t.anchor.parent.isEmpty){const o=y.a._getStoreAttributeKey(e);this.removeAttribute(o,t.anchor.parent)}t._removeAttribute(e)}_assertWriterUsedCorrectly(){if(this.model._currentWriter!==this)throw new c.a("writer-incorrect-use",this)}_addOperationForAffectedMarkers(e,t){for(const o of this.model.markers){if(!o.managedUsingOperations)continue;const i=o.getRange();let s=!1;if("move"===e)s=t.containsPosition(i.start)||t.start.isEqual(i.start)||t.containsPosition(i.end)||t.end.isEqual(i.end);else{const e=t.nodeBefore,o=t.nodeAfter,r=i.start.parent==e&&i.start.isAtEnd,n=i.end.parent==o&&0==i.end.offset,a=i.end.nodeAfter==o,c=i.start.nodeAfter==o;s=r||n||a||c}s&&this.updateMarker(o.name,{range:i})}}}function P(e,t,o,i){const r=e.model,a=r.document;let c,l,d,u=i.start;for(const e of i.getWalker({shallow:!0}))d=e.item.getAttribute(t),c&&l!=d&&(l!=o&&h(),u=c),c=e.nextPosition,l=d;function h(){const i=new n.a(u,c),d=i.root.document?a.version:null,h=new s.a(i,t,l,o,d);e.batch.addOperation(h),r.applyOperation(h)}c instanceof v.a&&c!=u&&l!=o&&h()}function O(e,t,o,i){const r=e.model,a=r.document,c=i.getAttribute(t);let l,d;if(c!=o){if(i.root===i){const e=i.document?a.version:null;d=new g.a(i,t,c,o,e)}else{l=new n.a(v.a._createBefore(i),e.createPositionAfter(i));const r=l.root.document?a.version:null;d=new s.a(l,t,c,o,r)}e.batch.addOperation(d),r.applyOperation(d)}}function A(e,t,o,i,s){const r=e.model,n=r.document,a=new u.a(t,o,i,r.markers,s,n.version);e.batch.addOperation(a),r.applyOperation(a)}function T(e,t,o,i){let s;if(e.root.document){const o=i.document,r=new v.a(o.graveyard,[0]);s=new h.a(e,t,r,o.version)}else s=new l(e,t);o.addOperation(s),i.applyOperation(s)}function C(e,t){return e===t||e instanceof w&&t instanceof w}var E=o("./packages/ckeditor5-engine/src/model/schema.js");class S{constructor(e){this._markerCollection=e,this._changesInElement=new Map,this._elementSnapshots=new Map,this._changedMarkers=new Map,this._changeCount=0,this._cachedChanges=null,this._cachedChangesWithGraveyard=null}get isEmpty(){return 0==this._changesInElement.size&&0==this._changedMarkers.size}refreshItem(e){if(this._isInInsertedElement(e.parent))return;this._markRemove(e.parent,e.startOffset,e.offsetSize),this._markInsert(e.parent,e.startOffset,e.offsetSize);const t=n.a._createOn(e);for(const e of this._markerCollection.getMarkersIntersectingRange(t)){const t=e.getRange();this.bufferMarkerChange(e.name,t,t,e.affectsData)}this._cachedChanges=null}bufferOperation(e){switch(e.type){case"insert":if(this._isInInsertedElement(e.position.parent))return;this._markInsert(e.position.parent,e.position.offset,e.nodes.maxOffset);break;case"addAttribute":case"removeAttribute":case"changeAttribute":for(const t of e.range.getItems({shallow:!0}))this._isInInsertedElement(t.parent)||this._markAttribute(t);break;case"remove":case"move":case"reinsert":{if(e.sourcePosition.isEqual(e.targetPosition)||e.sourcePosition.getShiftedBy(e.howMany).isEqual(e.targetPosition))return;const t=this._isInInsertedElement(e.sourcePosition.parent),o=this._isInInsertedElement(e.targetPosition.parent);t||this._markRemove(e.sourcePosition.parent,e.sourcePosition.offset,e.howMany),o||this._markInsert(e.targetPosition.parent,e.getMovedRangeStart().offset,e.howMany);break}case"rename":{if(this._isInInsertedElement(e.position.parent))return;this._markRemove(e.position.parent,e.position.offset,1),this._markInsert(e.position.parent,e.position.offset,1);const t=n.a._createFromPositionAndShift(e.position,1);for(const e of this._markerCollection.getMarkersIntersectingRange(t)){const t=e.getRange();this.bufferMarkerChange(e.name,t,t,e.affectsData)}break}case"split":{const t=e.splitPosition.parent;this._isInInsertedElement(t)||this._markRemove(t,e.splitPosition.offset,e.howMany),this._isInInsertedElement(e.insertionPosition.parent)||this._markInsert(e.insertionPosition.parent,e.insertionPosition.offset,1),e.graveyardPosition&&this._markRemove(e.graveyardPosition.parent,e.graveyardPosition.offset,1);break}case"merge":{const t=e.sourcePosition.parent;this._isInInsertedElement(t.parent)||this._markRemove(t.parent,t.startOffset,1);const o=e.graveyardPosition.parent;this._markInsert(o,e.graveyardPosition.offset,1);const i=e.targetPosition.parent;this._isInInsertedElement(i)||this._markInsert(i,e.targetPosition.offset,t.maxOffset);break}}this._cachedChanges=null}bufferMarkerChange(e,t,o,i){const s=this._changedMarkers.get(e);s?(s.newRange=o,s.affectsData=i,null==s.oldRange&&null==s.newRange&&this._changedMarkers.delete(e)):this._changedMarkers.set(e,{oldRange:t,newRange:o,affectsData:i})}getMarkersToRemove(){const e=[];for(const[t,o]of this._changedMarkers)null!=o.oldRange&&e.push({name:t,range:o.oldRange});return e}getMarkersToAdd(){const e=[];for(const[t,o]of this._changedMarkers)null!=o.newRange&&e.push({name:t,range:o.newRange});return e}getChangedMarkers(){return Array.from(this._changedMarkers).map(e=>({name:e[0],data:{oldRange:e[1].oldRange,newRange:e[1].newRange}}))}hasDataChanges(){for(const[,e]of this._changedMarkers)if(e.affectsData)return!0;return this._changesInElement.size>0}getChanges(e={includeChangesInGraveyard:!1}){if(this._cachedChanges)return e.includeChangesInGraveyard?this._cachedChangesWithGraveyard.slice():this._cachedChanges.slice();let t=[];for(const e of this._changesInElement.keys()){const o=this._changesInElement.get(e).sort((e,t)=>e.offset===t.offset?e.type!=t.type?"remove"==e.type?-1:1:0:e.offset<t.offset?-1:1),i=this._elementSnapshots.get(e),s=R(e.getChildren()),r=M(i.length,o);let a=0,c=0;for(const o of r)if("i"===o)t.push(this._getInsertDiff(e,a,s[a].name)),a++;else if("r"===o)t.push(this._getRemoveDiff(e,a,i[c].name)),c++;else if("a"===o){const o=s[a].attributes,r=i[c].attributes;let l;if("$text"==s[a].name)l=new n.a(v.a._createAt(e,a),v.a._createAt(e,a+1));else{const t=e.offsetToIndex(a);l=new n.a(v.a._createAt(e,a),v.a._createAt(e.getChild(t),0))}t.push(...this._getAttributesDiff(l,r,o)),a++,c++}else a++,c++}t.sort((e,t)=>e.position.root!=t.position.root?e.position.root.rootName<t.position.root.rootName?-1:1:e.position.isEqual(t.position)?e.changeCount-t.changeCount:e.position.isBefore(t.position)?-1:1);for(let e=1,o=0;e<t.length;e++){const i=t[o],s=t[e],r="remove"==i.type&&"remove"==s.type&&"$text"==i.name&&"$text"==s.name&&i.position.isEqual(s.position),n="insert"==i.type&&"insert"==s.type&&"$text"==i.name&&"$text"==s.name&&i.position.parent==s.position.parent&&i.position.offset+i.length==s.position.offset,a="attribute"==i.type&&"attribute"==s.type&&i.position.parent==s.position.parent&&i.range.isFlat&&s.range.isFlat&&i.position.offset+i.length==s.position.offset&&i.attributeKey==s.attributeKey&&i.attributeOldValue==s.attributeOldValue&&i.attributeNewValue==s.attributeNewValue;r||n||a?(i.length++,a&&(i.range.end=i.range.end.getShiftedBy(1)),t[e]=null):o=e}t=t.filter(e=>e);for(const e of t)delete e.changeCount,"attribute"==e.type&&(delete e.position,delete e.length);return this._changeCount=0,this._cachedChangesWithGraveyard=t.slice(),this._cachedChanges=t.filter(N),e.includeChangesInGraveyard?this._cachedChangesWithGraveyard:this._cachedChanges}reset(){this._changesInElement.clear(),this._elementSnapshots.clear(),this._changedMarkers.clear(),this._cachedChanges=null}_markInsert(e,t,o){const i={type:"insert",offset:t,howMany:o,count:this._changeCount++};this._markChange(e,i)}_markRemove(e,t,o){const i={type:"remove",offset:t,howMany:o,count:this._changeCount++};this._markChange(e,i),this._removeAllNestedChanges(e,t,o)}_markAttribute(e){const t={type:"attribute",offset:e.startOffset,howMany:e.offsetSize,count:this._changeCount++};this._markChange(e.parent,t)}_markChange(e,t){this._makeSnapshot(e);const o=this._getChangesForElement(e);this._handleChange(t,o),o.push(t);for(let e=0;e<o.length;e++)o[e].howMany<1&&(o.splice(e,1),e--)}_getChangesForElement(e){let t;return this._changesInElement.has(e)?t=this._changesInElement.get(e):(t=[],this._changesInElement.set(e,t)),t}_makeSnapshot(e){this._elementSnapshots.has(e)||this._elementSnapshots.set(e,R(e.getChildren()))}_handleChange(e,t){e.nodesToHandle=e.howMany;for(const o of t){const i=e.offset+e.howMany,s=o.offset+o.howMany;if("insert"==e.type&&("insert"==o.type&&(e.offset<=o.offset?o.offset+=e.howMany:e.offset<s&&(o.howMany+=e.nodesToHandle,e.nodesToHandle=0)),"remove"==o.type&&e.offset<o.offset&&(o.offset+=e.howMany),"attribute"==o.type))if(e.offset<=o.offset)o.offset+=e.howMany;else if(e.offset<s){const s=o.howMany;o.howMany=e.offset-o.offset,t.unshift({type:"attribute",offset:i,howMany:s-o.howMany,count:this._changeCount++})}if("remove"==e.type){if("insert"==o.type)if(i<=o.offset)o.offset-=e.howMany;else if(i<=s)if(e.offset<o.offset){const t=i-o.offset;o.offset=e.offset,o.howMany-=t,e.nodesToHandle-=t}else o.howMany-=e.nodesToHandle,e.nodesToHandle=0;else if(e.offset<=o.offset)e.nodesToHandle-=o.howMany,o.howMany=0;else if(e.offset<s){const t=s-e.offset;o.howMany-=t,e.nodesToHandle-=t}if("remove"==o.type&&(i<=o.offset?o.offset-=e.howMany:e.offset<o.offset&&(e.nodesToHandle+=o.howMany,o.howMany=0)),"attribute"==o.type)if(i<=o.offset)o.offset-=e.howMany;else if(e.offset<o.offset){const t=i-o.offset;o.offset=e.offset,o.howMany-=t}else if(e.offset<s)if(i<=s){const i=o.howMany;o.howMany=e.offset-o.offset;const s=i-o.howMany-e.nodesToHandle;t.unshift({type:"attribute",offset:e.offset,howMany:s,count:this._changeCount++})}else o.howMany-=s-e.offset}if("attribute"==e.type){if("insert"==o.type)if(e.offset<o.offset&&i>o.offset){if(i>s){const e={type:"attribute",offset:s,howMany:i-s,count:this._changeCount++};this._handleChange(e,t),t.push(e)}e.nodesToHandle=o.offset-e.offset,e.howMany=e.nodesToHandle}else e.offset>=o.offset&&e.offset<s&&(i>s?(e.nodesToHandle=i-s,e.offset=s):e.nodesToHandle=0);if("remove"==o.type&&e.offset<o.offset&&i>o.offset){const s={type:"attribute",offset:o.offset,howMany:i-o.offset,count:this._changeCount++};this._handleChange(s,t),t.push(s),e.nodesToHandle=o.offset-e.offset,e.howMany=e.nodesToHandle}"attribute"==o.type&&(e.offset>=o.offset&&i<=s?(e.nodesToHandle=0,e.howMany=0,e.offset=0):e.offset<=o.offset&&i>=s&&(o.howMany=0))}}e.howMany=e.nodesToHandle,delete e.nodesToHandle}_getInsertDiff(e,t,o){return{type:"insert",position:v.a._createAt(e,t),name:o,length:1,changeCount:this._changeCount++}}_getRemoveDiff(e,t,o){return{type:"remove",position:v.a._createAt(e,t),name:o,length:1,changeCount:this._changeCount++}}_getAttributesDiff(e,t,o){const i=[];o=new Map(o);for(const[s,r]of t){const t=o.has(s)?o.get(s):null;t!==r&&i.push({type:"attribute",position:e.start,range:e.clone(),length:1,attributeKey:s,attributeOldValue:r,attributeNewValue:t,changeCount:this._changeCount++}),o.delete(s)}for(const[t,s]of o)i.push({type:"attribute",position:e.start,range:e.clone(),length:1,attributeKey:t,attributeOldValue:null,attributeNewValue:s,changeCount:this._changeCount++});return i}_isInInsertedElement(e){const t=e.parent;if(!t)return!1;const o=this._changesInElement.get(t),i=e.startOffset;if(o)for(const e of o)if("insert"==e.type&&i>=e.offset&&i<e.offset+e.howMany)return!0;return this._isInInsertedElement(t)}_removeAllNestedChanges(e,t,o){const i=new n.a(v.a._createAt(e,t),v.a._createAt(e,t+o));for(const e of i.getItems({shallow:!0}))e.is("element")&&(this._elementSnapshots.delete(e),this._changesInElement.delete(e),this._removeAllNestedChanges(e,0,e.maxOffset))}}function R(e){const t=[];for(const o of e)if(o.is("$text"))for(let e=0;e<o.data.length;e++)t.push({name:"$text",attributes:new Map(o.getAttributes())});else t.push({name:o.name,attributes:new Map(o.getAttributes())});return t}function M(e,t){const o=[];let i=0,s=0;for(const e of t){if(e.offset>i){for(let t=0;t<e.offset-i;t++)o.push("e");s+=e.offset-i}if("insert"==e.type){for(let t=0;t<e.howMany;t++)o.push("i");i=e.offset+e.howMany}else if("remove"==e.type){for(let t=0;t<e.howMany;t++)o.push("r");i=e.offset,s+=e.howMany}else o.push(..."a".repeat(e.howMany).split("")),i=e.offset+e.howMany,s+=e.howMany}if(s<e)for(let t=0;t<e-s-i;t++)o.push("e");return o}function N(e){const t=e.position&&"$graveyard"==e.position.root.rootName,o=e.range&&"$graveyard"==e.range.root.rootName;return!t&&!o}class I{constructor(){this._operations=[],this._undoPairs=new Map,this._undoneOperations=new Set}addOperation(e){this._operations.includes(e)||this._operations.push(e)}getOperations(e=Number.NEGATIVE_INFINITY,t=Number.POSITIVE_INFINITY){const o=[];for(const i of this._operations)i.baseVersion>=e&&i.baseVersion<t&&o.push(i);return o}getOperation(e){for(const t of this._operations)if(t.baseVersion==e)return t}setOperationAsUndone(e,t){this._undoPairs.set(t,e),this._undoneOperations.add(e)}isUndoingOperation(e){return this._undoPairs.has(e)}isUndoneOperation(e){return this._undoneOperations.has(e)}getUndoneOperation(e){return this._undoPairs.get(e)}}var z=o("./packages/ckeditor5-utils/src/collection.js"),V=o("./packages/ckeditor5-utils/src/emittermixin.js"),D=o("./packages/ckeditor5-utils/src/mix.js");function B(e,t){return!!(o=e.charAt(t-1))&&1==o.length&&/[\ud800-\udbff]/.test(o)&&function(e){return!!e&&1==e.length&&/[\udc00-\udfff]/.test(e)}(e.charAt(t));var o}function F(e,t){return!!(o=e.charAt(t))&&1==o.length&&/[\u0300-\u036f\u1ab0-\u1aff\u1dc0-\u1dff\u20d0-\u20ff\ufe20-\ufe2f]/.test(o);var o}var L=o("./node_modules/lodash-es/clone.js");class W{constructor(e){this.model=e,this.version=0,this.history=new I(this),this.selection=new y.a(this),this.roots=new z.a({idProperty:"rootName"}),this.differ=new S(e.markers),this._postFixers=new Set,this._hasSelectionChangedFromTheLastChangeBlock=!1,this.createRoot("$root","$graveyard"),this.listenTo(e,"applyOperation",(e,t)=>{const o=t[0];if(o.isDocumentOperation&&o.baseVersion!==this.version)throw new c.a("model-document-applyoperation-wrong-version",this,{operation:o})},{priority:"highest"}),this.listenTo(e,"applyOperation",(e,t)=>{const o=t[0];o.isDocumentOperation&&this.differ.bufferOperation(o)},{priority:"high"}),this.listenTo(e,"applyOperation",(e,t)=>{const o=t[0];o.isDocumentOperation&&(this.version++,this.history.addOperation(o))},{priority:"low"}),this.listenTo(this.selection,"change",()=>{this._hasSelectionChangedFromTheLastChangeBlock=!0}),this.listenTo(e.markers,"update",(e,t,o,i)=>{this.differ.bufferMarkerChange(t.name,o,i,t.affectsData),null===o&&t.on("change",(e,o)=>{this.differ.bufferMarkerChange(t.name,o,t.getRange(),t.affectsData)})})}get graveyard(){return this.getRoot("$graveyard")}createRoot(e="$root",t="main"){if(this.roots.get(t))throw new c.a("model-document-createroot-name-exists",this,{name:t});const o=new w(this,e,t);return this.roots.add(o),o}destroy(){this.selection.destroy(),this.stopListening()}getRoot(e="main"){return this.roots.get(e)}getRootNames(){return Array.from(this.roots,e=>e.rootName).filter(e=>"$graveyard"!=e)}registerPostFixer(e){this._postFixers.add(e)}toJSON(){const e=Object(L.a)(this);return e.selection="[engine.model.DocumentSelection]",e.model="[engine.model.Model]",e}_handleChangeBlock(e){this._hasDocumentChangedFromTheLastChangeBlock()&&(this._callPostFixers(e),this.selection.refresh(),this.differ.hasDataChanges()?this.fire("change:data",e.batch):this.fire("change",e.batch),this.selection.refresh(),this.differ.reset()),this._hasSelectionChangedFromTheLastChangeBlock=!1}_hasDocumentChangedFromTheLastChangeBlock(){return!this.differ.isEmpty||this._hasSelectionChangedFromTheLastChangeBlock}_getDefaultRoot(){for(const e of this.roots)if(e!==this.graveyard)return e;return this.graveyard}_getDefaultRange(){const e=this._getDefaultRoot(),t=this.model,o=t.schema,i=t.createPositionFromPath(e,[0]);return o.getNearestSelectionRange(i)||t.createRange(i)}_validateSelectionRange(e){return H(e.start)&&H(e.end)}_callPostFixers(e){let t=!1;do{for(const o of this._postFixers)if(this.selection.refresh(),t=o(e),t)break}while(t)}}function H(e){const t=e.textNode;if(t){const o=t.data,i=e.offset-t.startOffset;return!B(o,i)&&!F(o,i)}return!0}Object(D.a)(W,V.c);var q=o("./packages/ckeditor5-engine/src/model/liverange.js");class ${constructor(){this._markers=new Map}[Symbol.iterator](){return this._markers.values()}has(e){const t=e instanceof U?e.name:e;return this._markers.has(t)}get(e){return this._markers.get(e)||null}_set(e,t,o=!1,i=!1){const s=e instanceof U?e.name:e;if(s.includes(","))throw new c.a("markercollection-incorrect-marker-name",this);const r=this._markers.get(s);if(r){const e=r.getRange();let n=!1;return e.isEqual(t)||(r._attachLiveRange(q.a.fromRange(t)),n=!0),o!=r.managedUsingOperations&&(r._managedUsingOperations=o,n=!0),"boolean"==typeof i&&i!=r.affectsData&&(r._affectsData=i,n=!0),n&&this.fire("update:"+s,r,e,t),r}const n=q.a.fromRange(t),a=new U(s,n,o,i);return this._markers.set(s,a),this.fire("update:"+s,a,null,t),a}_remove(e){const t=e instanceof U?e.name:e,o=this._markers.get(t);return!!o&&(this._markers.delete(t),this.fire("update:"+t,o,o.getRange(),null),this._destroyMarker(o),!0)}_refresh(e){const t=e instanceof U?e.name:e,o=this._markers.get(t);if(!o)throw new c.a("markercollection-refresh-marker-not-exists",this);const i=o.getRange();this.fire("update:"+t,o,i,i,o.managedUsingOperations,o.affectsData)}*getMarkersAtPosition(e){for(const t of this)t.getRange().containsPosition(e)&&(yield t)}*getMarkersIntersectingRange(e){for(const t of this)null!==t.getRange().getIntersection(e)&&(yield t)}destroy(){for(const e of this._markers.values())this._destroyMarker(e);this._markers=null,this.stopListening()}*getMarkersGroup(e){for(const t of this._markers.values())t.name.startsWith(e+":")&&(yield t)}_destroyMarker(e){e.stopListening(),e._detachLiveRange()}}Object(D.a)($,V.c);class U{constructor(e,t,o,i){this.name=e,this._liveRange=this._attachLiveRange(t),this._managedUsingOperations=o,this._affectsData=i}get managedUsingOperations(){if(!this._liveRange)throw new c.a("marker-destroyed",this);return this._managedUsingOperations}get affectsData(){if(!this._liveRange)throw new c.a("marker-destroyed",this);return this._affectsData}getStart(){if(!this._liveRange)throw new c.a("marker-destroyed",this);return this._liveRange.start.clone()}getEnd(){if(!this._liveRange)throw new c.a("marker-destroyed",this);return this._liveRange.end.clone()}getRange(){if(!this._liveRange)throw new c.a("marker-destroyed",this);return this._liveRange.toRange()}is(e){return"marker"===e||"model:marker"===e}_attachLiveRange(e){return this._liveRange&&this._detachLiveRange(),e.delegate("change:range").to(this),e.delegate("change:content").to(this),this._liveRange=e,e}_detachLiveRange(){this._liveRange.stopDelegating("change:range",this),this._liveRange.stopDelegating("change:content",this),this._liveRange.detach(),this._liveRange=null}}Object(D.a)(U,V.c);var K=o("./packages/ckeditor5-utils/src/observablemixin.js"),G=o("./packages/ckeditor5-engine/src/model/selection.js"),J=o("./packages/ckeditor5-engine/src/model/operation/operationfactory.js"),Y=o("./packages/ckeditor5-engine/src/model/liveposition.js");class X{constructor(e,t,o){this.model=e,this.writer=t,this.position=o,this.canMergeWith=new Set([this.position.parent]),this.schema=e.schema,this._documentFragment=t.createDocumentFragment(),this._documentFragmentPosition=t.createPositionAt(this._documentFragment,0),this._firstNode=null,this._lastNode=null,this._lastAutoParagraph=null,this._filterAttributesOf=[],this._affectedStart=null,this._affectedEnd=null}handleNodes(e){for(const t of Array.from(e))this._handleNode(t);this._insertPartialFragment(),this._lastAutoParagraph&&this._updateLastNodeFromAutoParagraph(this._lastAutoParagraph),this._mergeOnRight(),this.schema.removeDisallowedAttributes(this._filterAttributesOf,this.writer),this._filterAttributesOf=[]}_updateLastNodeFromAutoParagraph(e){const t=this.writer.createPositionAfter(this._lastNode),o=this.writer.createPositionAfter(e);if(o.isAfter(t)){if(this._lastNode=e,this.position.parent!=e||!this.position.isAtEnd)throw new c.a("insertcontent-invalid-insertion-position",this);this.position=o,this._setAffectedBoundaries(this.position)}}getSelectionRange(){return this.nodeToSelect?n.a._createOn(this.nodeToSelect):this.model.schema.getNearestSelectionRange(this.position)}getAffectedRange(){return this._affectedStart?new n.a(this._affectedStart,this._affectedEnd):null}destroy(){this._affectedStart&&this._affectedStart.detach(),this._affectedEnd&&this._affectedEnd.detach()}_handleNode(e){if(this.schema.isObject(e))return void this._handleObject(e);let t=this._checkAndAutoParagraphToAllowedPosition(e);t||(t=this._checkAndSplitToAllowedPosition(e),t)?(this._appendToFragment(e),this._firstNode||(this._firstNode=e),this._lastNode=e):this._handleDisallowedNode(e)}_insertPartialFragment(){if(this._documentFragment.isEmpty)return;const e=Y.a.fromPosition(this.position,"toNext");this._setAffectedBoundaries(this.position),this._documentFragment.getChild(0)==this._firstNode&&(this.writer.insert(this._firstNode,this.position),this._mergeOnLeft(),this.position=e.toPosition()),this._documentFragment.isEmpty||this.writer.insert(this._documentFragment,this.position),this._documentFragmentPosition=this.writer.createPositionAt(this._documentFragment,0),this.position=e.toPosition(),e.detach()}_handleObject(e){this._checkAndSplitToAllowedPosition(e)?this._appendToFragment(e):this._tryAutoparagraphing(e)}_handleDisallowedNode(e){e.is("element")?this.handleNodes(e.getChildren()):this._tryAutoparagraphing(e)}_appendToFragment(e){if(!this.schema.checkChild(this.position,e))throw new c.a("insertcontent-wrong-position",this,{node:e,position:this.position});this.writer.insert(e,this._documentFragmentPosition),this._documentFragmentPosition=this._documentFragmentPosition.getShiftedBy(e.offsetSize),this.schema.isObject(e)&&!this.schema.checkChild(this.position,"$text")?this.nodeToSelect=e:this.nodeToSelect=null,this._filterAttributesOf.push(e)}_setAffectedBoundaries(e){this._affectedStart||(this._affectedStart=Y.a.fromPosition(e,"toPrevious")),this._affectedEnd&&!this._affectedEnd.isBefore(e)||(this._affectedEnd&&this._affectedEnd.detach(),this._affectedEnd=Y.a.fromPosition(e,"toNext"))}_mergeOnLeft(){const e=this._firstNode;if(!(e instanceof _.a))return;if(!this._canMergeLeft(e))return;const t=Y.a._createBefore(e);t.stickiness="toNext";const o=Y.a.fromPosition(this.position,"toNext");this._affectedStart.isEqual(t)&&(this._affectedStart.detach(),this._affectedStart=Y.a._createAt(t.nodeBefore,"end","toPrevious")),this._firstNode===this._lastNode&&(this._firstNode=t.nodeBefore,this._lastNode=t.nodeBefore),this.writer.merge(t),t.isEqual(this._affectedEnd)&&this._firstNode===this._lastNode&&(this._affectedEnd.detach(),this._affectedEnd=Y.a._createAt(t.nodeBefore,"end","toNext")),this.position=o.toPosition(),o.detach(),this._filterAttributesOf.push(this.position.parent),t.detach()}_mergeOnRight(){const e=this._lastNode;if(!(e instanceof _.a))return;if(!this._canMergeRight(e))return;const t=Y.a._createAfter(e);if(t.stickiness="toNext",!this.position.isEqual(t))throw new c.a("insertcontent-invalid-insertion-position",this);this.position=v.a._createAt(t.nodeBefore,"end");const o=Y.a.fromPosition(this.position,"toPrevious");this._affectedEnd.isEqual(t)&&(this._affectedEnd.detach(),this._affectedEnd=Y.a._createAt(t.nodeBefore,"end","toNext")),this._firstNode===this._lastNode&&(this._firstNode=t.nodeBefore,this._lastNode=t.nodeBefore),this.writer.merge(t),t.getShiftedBy(-1).isEqual(this._affectedStart)&&this._firstNode===this._lastNode&&(this._affectedStart.detach(),this._affectedStart=Y.a._createAt(t.nodeBefore,0,"toPrevious")),this.position=o.toPosition(),o.detach(),this._filterAttributesOf.push(this.position.parent),t.detach()}_canMergeLeft(e){const t=e.previousSibling;return t instanceof _.a&&this.canMergeWith.has(t)&&this.model.schema.checkMerge(t,e)}_canMergeRight(e){const t=e.nextSibling;return t instanceof _.a&&this.canMergeWith.has(t)&&this.model.schema.checkMerge(e,t)}_tryAutoparagraphing(e){const t=this.writer.createElement("paragraph");this._getAllowedIn(this.position.parent,t)&&this.schema.checkChild(t,e)&&(t._appendChild(e),this._handleNode(t))}_checkAndAutoParagraphToAllowedPosition(e){if(this.schema.checkChild(this.position.parent,e))return!0;if(!this.schema.checkChild(this.position.parent,"paragraph")||!this.schema.checkChild("paragraph",e))return!1;this._insertPartialFragment();const t=this.writer.createElement("paragraph");return this.writer.insert(t,this.position),this._setAffectedBoundaries(this.position),this._lastAutoParagraph=t,this.position=this.writer.createPositionAt(t,0),!0}_checkAndSplitToAllowedPosition(e){const t=this._getAllowedIn(this.position.parent,e);if(!t)return!1;for(t!=this.position.parent&&this._insertPartialFragment();t!=this.position.parent;)if(this.position.isAtStart){const e=this.position.parent;this.position=this.writer.createPositionBefore(e),e.isEmpty&&e.parent===t&&this.writer.remove(e)}else if(this.position.isAtEnd)this.position=this.writer.createPositionAfter(this.position.parent);else{const e=this.writer.createPositionAfter(this.position.parent);this._setAffectedBoundaries(this.position),this.writer.split(this.position),this.position=e,this.canMergeWith.add(this.position.nodeAfter)}return!0}_getAllowedIn(e,t){return this.schema.checkChild(e,t)?e:this.schema.isLimit(e)?null:this._getAllowedIn(e.parent,t)}}function Z(e,t,o={}){if(t.isCollapsed)return;const i=t.getFirstRange();if("$graveyard"==i.root.rootName)return;const s=e.schema;e.change(e=>{if(!o.doNotResetEntireContent&&function(e,t){const o=e.getLimitElement(t);if(!t.containsEntireContent(o))return!1;const i=t.getFirstRange();if(i.start.parent==i.end.parent)return!1;return e.checkChild(o,"paragraph")}(s,t))return void function(e,t){const o=e.model.schema.getLimitElement(t);e.remove(e.createRangeIn(o)),ee(e,e.createPositionAt(o,0),t)}(e,t);const[r,n]=function(e){const t=e.root.document.model,o=e.start;let i=e.end;if(t.hasContent(e,{ignoreMarkers:!0})){const o=function(e){const t=e.parent,o=t.root.document.model.schema,i=t.getAncestors({parentFirst:!0,includeSelf:!0});for(const e of i){if(o.isLimit(e))return null;if(o.isBlock(e))return e}}(i);if(o&&i.isTouching(t.createPositionAt(o,0))){const o=t.createSelection(e);t.modifySelection(o,{direction:"backward"});const s=o.getLastPosition(),r=t.createRange(s,i);t.hasContent(r,{ignoreMarkers:!0})||(i=s)}}return[Y.a.fromPosition(o,"toPrevious"),Y.a.fromPosition(i,"toNext")]}(i);r.isTouching(n)||e.remove(e.createRange(r,n)),o.leaveUnmerged||(!function(e,t,o){const i=e.model;if(!Q(e.model.schema,t,o))return;const[s,r]=function(e,t){const o=e.getAncestors(),i=t.getAncestors();let s=0;for(;o[s]&&o[s]==i[s];)s++;return[o[s],i[s]]}(t,o);if(!s||!r)return;!i.hasContent(s,{ignoreMarkers:!0})&&i.hasContent(r,{ignoreMarkers:!0})?function e(t,o,i,s){const r=o.parent,n=i.parent;if(r==s||n==s)return;o=t.createPositionAfter(r),(i=t.createPositionBefore(n)).isEqual(o)||t.insert(r,i);for(;o.parent.isEmpty;){const e=o.parent;o=t.createPositionBefore(e),t.remove(e)}if(i=t.createPositionBefore(n),function(e,t){const o=t.nodeBefore,i=t.nodeAfter;o.name!=i.name&&e.rename(o,i.name);e.clearAttributes(o),e.setAttributes(Object.fromEntries(i.getAttributes()),o),e.merge(t)}(t,i),!Q(t.model.schema,o,i))return;e(t,o,i,s)}(e,t,o,s.parent):function e(t,o,i,s){const r=o.parent,n=i.parent;if(r==s||n==s)return;o=t.createPositionAfter(r),(i=t.createPositionBefore(n)).isEqual(o)||t.insert(n,o);t.merge(o);for(;i.parent.isEmpty;){const e=i.parent;i=t.createPositionBefore(e),t.remove(e)}if(!Q(t.model.schema,o,i))return;e(t,o,i,s)}(e,t,o,s.parent)}(e,r,n),s.removeDisallowedAttributes(r.parent.getChildren(),e)),te(e,t,r),!o.doNotAutoparagraph&&function(e,t){const o=e.checkChild(t,"$text"),i=e.checkChild(t,"paragraph");return!o&&i}(s,r)&&ee(e,r,t),r.detach(),n.detach()})}function Q(e,t,o){const i=t.parent,s=o.parent;return i!=s&&(!e.isLimit(i)&&!e.isLimit(s)&&function(e,t,o){const i=new n.a(e,t);for(const e of i.getWalker())if(o.isLimit(e.item))return!1;return!0}(t,o,e))}function ee(e,t,o){const i=e.createElement("paragraph");e.insert(i,t),te(e,o,e.createPositionAt(i,0))}function te(e,t,o){t instanceof y.a?e.setSelection(o):t.setTo(o)}var oe=o("./packages/ckeditor5-engine/src/model/treewalker.js");function ie(e,t){const{isForward:o,walker:i,unit:s,schema:r}=e,{type:n,item:a,nextPosition:c}=t;if("text"==n)return"word"===e.unit?function(e,t){let o=e.position.textNode;if(o){let i=e.position.offset-o.startOffset;for(;!re(o.data,i,t)&&!ne(o,i,t);){e.next();const s=t?e.position.nodeAfter:e.position.nodeBefore;if(s&&s.is("$text")){const i=s.data.charAt(t?0:s.data.length-1);' ,.?!:;"-()'.includes(i)||(e.next(),o=e.position.textNode)}i=e.position.offset-o.startOffset}}return e.position}(i,o):function(e,t){const o=e.position.textNode;if(o){const i=o.data;let s=e.position.offset-o.startOffset;for(;B(i,s)||"character"==t&&F(i,s);)e.next(),s=e.position.offset-o.startOffset}return e.position}(i,s);if(n==(o?"elementStart":"elementEnd")){if(r.isSelectable(a))return v.a._createAt(a,o?"after":"before");if(r.checkChild(c,"$text"))return c}else{if(r.isLimit(a))return void i.skip(()=>!0);if(r.checkChild(c,"$text"))return c}}function se(e,t){const o=e.root,i=v.a._createAt(o,t?"end":0);return t?new n.a(e,i):new n.a(i,e)}function re(e,t,o){const i=t+(o?0:-1);return' ,.?!:;"-()'.includes(e.charAt(i))}function ne(e,t,o){return t===(o?e.endOffset:0)}function ae(e,t){const o=[];Array.from(e.getItems({direction:"backward"})).map(e=>t.createRangeOn(e)).filter(t=>(t.start.isAfter(e.start)||t.start.isEqual(e.start))&&(t.end.isBefore(e.end)||t.end.isEqual(e.end))).forEach(e=>{o.push(e.start.parent),t.remove(e)}),o.forEach(e=>{let o=e;for(;o.parent&&o.isEmpty;){const e=t.createRangeOn(o);o=o.parent,t.remove(e)}})}function ce(e){e.document.registerPostFixer(t=>function(e,t){const o=t.document.selection,i=t.schema,s=[];let r=!1;for(const e of o.getRanges()){const t=le(e,i);t&&!t.isEqual(e)?(s.push(t),r=!0):s.push(e)}r&&e.setSelection(function(e){const t=[];t.push(e.shift());for(const o of e){const e=t.pop();if(o.isEqual(e))t.push(e);else if(o.isIntersecting(e)){const i=e.start.isAfter(o.start)?o.start:e.start,s=e.end.isAfter(o.end)?e.end:o.end,r=new n.a(i,s);t.push(r)}else t.push(e),t.push(o)}return t}(s),{backward:o.isBackward})}(t,e))}function le(e,t){return e.isCollapsed?function(e,t){const o=e.start,i=t.getNearestSelectionRange(o);if(!i){const e=o.getAncestors().reverse().find(e=>t.isObject(e));return e?n.a._createOn(e):null}if(!i.isCollapsed)return i;const s=i.start;if(o.isEqual(s))return null;return new n.a(s)}(e,t):function(e,t){const{start:o,end:i}=e,s=t.checkChild(o,"$text"),r=t.checkChild(i,"$text"),a=t.getLimitElement(o),c=t.getLimitElement(i);if(a===c){if(s&&r)return null;if(function(e,t,o){const i=e.nodeAfter&&!o.isLimit(e.nodeAfter)||o.checkChild(e,"$text"),s=t.nodeBefore&&!o.isLimit(t.nodeBefore)||o.checkChild(t,"$text");return i||s}(o,i,t)){const e=o.nodeAfter&&t.isSelectable(o.nodeAfter)?null:t.getNearestSelectionRange(o,"forward"),s=i.nodeBefore&&t.isSelectable(i.nodeBefore)?null:t.getNearestSelectionRange(i,"backward"),r=e?e.start:o,a=s?s.end:i;return new n.a(r,a)}}const l=a&&!a.is("rootElement"),d=c&&!c.is("rootElement");if(l||d){const e=o.nodeAfter&&i.nodeBefore&&o.nodeAfter.parent===i.nodeBefore.parent,s=l&&(!e||!ue(o.nodeAfter,t)),r=d&&(!e||!ue(i.nodeBefore,t));let u=o,h=i;return s&&(u=v.a._createBefore(de(a,t))),r&&(h=v.a._createAfter(de(c,t))),new n.a(u,h)}return null}(e,t)}function de(e,t){let o=e,i=o;for(;t.isLimit(i)&&i.parent;)o=i,i=i.parent;return o}function ue(e,t){return e&&t.isSelectable(e)}var he=o("./packages/ckeditor5-engine/src/model/utils/autoparagraphing.js");class pe{constructor(){this.markers=new $,this.document=new W(this),this.schema=new E.b,this._pendingChanges=[],this._currentWriter=null,["insertContent","deleteContent","modifySelection","getSelectedContent","applyOperation"].forEach(e=>this.decorate(e)),this.on("applyOperation",(e,t)=>{t[0]._validate()},{priority:"highest"}),this.schema.register("$root",{isLimit:!0}),this.schema.register("$block",{allowIn:"$root",isBlock:!0}),this.schema.register("$text",{allowIn:"$block",isInline:!0,isContent:!0}),this.schema.register("$clipboardHolder",{allowContentOf:"$root",allowChildren:"$text",isLimit:!0}),this.schema.register("$documentFragment",{allowContentOf:"$root",allowChildren:"$text",isLimit:!0}),this.schema.register("$marker"),this.schema.addChildCheck((e,t)=>{if("$marker"===t.name)return!0}),ce(this),this.document.registerPostFixer(he.a)}change(e){try{return 0===this._pendingChanges.length?(this._pendingChanges.push({batch:new i,callback:e}),this._runPendingChanges()[0]):e(this._currentWriter)}catch(e){c.a.rethrowUnexpectedError(e,this)}}enqueueChange(e,t){try{"string"==typeof e?e=new i(e):"function"==typeof e&&(t=e,e=new i),this._pendingChanges.push({batch:e,callback:t}),1==this._pendingChanges.length&&this._runPendingChanges()}catch(e){c.a.rethrowUnexpectedError(e,this)}}applyOperation(e){e._execute()}insertContent(e,t,o){return function(e,t,o,i){return e.change(s=>{let r;r=o?o instanceof G.a||o instanceof y.a?o:s.createSelection(o,i):e.document.selection,r.isCollapsed||e.deleteContent(r,{doNotAutoparagraph:!0});const n=new X(e,s,r.anchor);let a;a=t.is("documentFragment")?t.getChildren():[t],n.handleNodes(a);const c=n.getSelectionRange();c&&(r instanceof y.a?s.setSelection(c):r.setTo(c));const l=n.getAffectedRange()||e.createRange(r.anchor);return n.destroy(),l})}(this,e,t,o)}deleteContent(e,t){Z(this,e,t)}modifySelection(e,t){!function(e,t,o={}){const i=e.schema,s="backward"!=o.direction,r=o.unit?o.unit:"character",n=t.focus,a=new oe.a({boundaries:se(n,s),singleCharacters:!0,direction:s?"forward":"backward"}),c={walker:a,schema:i,isForward:s,unit:r};let l;for(;l=a.next();){if(l.done)return;const o=ie(c,l.value);if(o)return void(t instanceof y.a?e.change(e=>{e.setSelectionFocus(o)}):t.setFocus(o))}}(this,e,t)}getSelectedContent(e){return function(e,t){return e.change(e=>{const o=e.createDocumentFragment(),i=t.getFirstRange();if(!i||i.isCollapsed)return o;const s=i.start.root,r=i.start.getCommonPath(i.end),n=s.getNodeByPath(r);let a;a=i.start.parent==i.end.parent?i:e.createRange(e.createPositionAt(n,i.start.path[r.length]),e.createPositionAt(n,i.end.path[r.length]+1));const c=a.end.offset-a.start.offset;for(const t of a.getItems({shallow:!0}))t.is("$textProxy")?e.appendText(t.data,t.getAttributes(),o):e.append(e.cloneElement(t,!0),o);if(a!=i){const t=i._getTransformedByMove(a.start,e.createPositionAt(o,0),c)[0],s=e.createRange(e.createPositionAt(o,0),t.start);ae(e.createRange(t.end,e.createPositionAt(o,"end")),e),ae(s,e)}return o})}(this,e)}hasContent(e,t={}){const o=e instanceof _.a?n.a._createIn(e):e;if(o.isCollapsed)return!1;const{ignoreWhitespaces:i=!1,ignoreMarkers:s=!1}=t;if(!s)for(const e of this.markers.getMarkersIntersectingRange(o))if(e.affectsData)return!0;for(const e of o.getItems())if(this.schema.isContent(e)){if(!e.is("$textProxy"))return!0;if(!i)return!0;if(-1!==e.data.search(/\S/))return!0}return!1}createPositionFromPath(e,t,o){return new v.a(e,t,o)}createPositionAt(e,t){return v.a._createAt(e,t)}createPositionAfter(e){return v.a._createAfter(e)}createPositionBefore(e){return v.a._createBefore(e)}createRange(e,t){return new n.a(e,t)}createRangeIn(e){return n.a._createIn(e)}createRangeOn(e){return n.a._createOn(e)}createSelection(e,t,o){return new G.a(e,t,o)}createBatch(e){return new i(e)}createOperationFromJSON(e){return J.a.fromJSON(e,this.document)}destroy(){this.document.destroy(),this.stopListening()}_runPendingChanges(){const e=[];for(this.fire("_beforeChanges");this._pendingChanges.length;){const t=this._pendingChanges[0].batch;this._currentWriter=new x(this,t);const o=this._pendingChanges[0].callback(this._currentWriter);e.push(o),this.document._handleChangeBlock(this._currentWriter),this._pendingChanges.shift(),this._currentWriter=null}return this.fire("_afterChanges"),e}}Object(D.a)(pe,K.a)},"./packages/ckeditor5-engine/src/model/node.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return n}));var i=o("./packages/ckeditor5-utils/src/tomap.js"),s=o("./packages/ckeditor5-utils/src/ckeditorerror.js"),r=o("./packages/ckeditor5-utils/src/comparearrays.js");o("./packages/ckeditor5-utils/src/version.js");class n{constructor(e){this.parent=null,this._attrs=Object(i.a)(e)}get index(){let e;if(!this.parent)return null;if(null===(e=this.parent.getChildIndex(this)))throw new s.a("model-node-not-found-in-parent",this);return e}get startOffset(){let e;if(!this.parent)return null;if(null===(e=this.parent.getChildStartOffset(this)))throw new s.a("model-node-not-found-in-parent",this);return e}get offsetSize(){return 1}get endOffset(){return this.parent?this.startOffset+this.offsetSize:null}get nextSibling(){const e=this.index;return null!==e&&this.parent.getChild(e+1)||null}get previousSibling(){const e=this.index;return null!==e&&this.parent.getChild(e-1)||null}get root(){let e=this;for(;e.parent;)e=e.parent;return e}isAttached(){return this.root.is("rootElement")}getPath(){const e=[];let t=this;for(;t.parent;)e.unshift(t.startOffset),t=t.parent;return e}getAncestors(e={includeSelf:!1,parentFirst:!1}){const t=[];let o=e.includeSelf?this:this.parent;for(;o;)t[e.parentFirst?"push":"unshift"](o),o=o.parent;return t}getCommonAncestor(e,t={}){const o=this.getAncestors(t),i=e.getAncestors(t);let s=0;for(;o[s]==i[s]&&o[s];)s++;return 0===s?null:o[s-1]}isBefore(e){if(this==e)return!1;if(this.root!==e.root)return!1;const t=this.getPath(),o=e.getPath(),i=Object(r.a)(t,o);switch(i){case"prefix":return!0;case"extension":return!1;default:return t[i]<o[i]}}isAfter(e){return this!=e&&(this.root===e.root&&!this.isBefore(e))}hasAttribute(e){return this._attrs.has(e)}getAttribute(e){return this._attrs.get(e)}getAttributes(){return this._attrs.entries()}getAttributeKeys(){return this._attrs.keys()}toJSON(){const e={};return this._attrs.size&&(e.attributes=Array.from(this._attrs).reduce((e,t)=>(e[t[0]]=t[1],e),{})),e}is(e){return"node"===e||"model:node"===e}_clone(){return new n(this._attrs)}_remove(){this.parent._removeChildren(this.index)}_setAttribute(e,t){this._attrs.set(e,t)}_setAttributesTo(e){this._attrs=Object(i.a)(e)}_removeAttribute(e){return this._attrs.delete(e)}_clearAttributes(){this._attrs.clear()}}},"./packages/ckeditor5-engine/src/model/nodelist.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return r}));var i=o("./packages/ckeditor5-engine/src/model/node.js"),s=o("./packages/ckeditor5-utils/src/ckeditorerror.js");class r{constructor(e){this._nodes=[],e&&this._insertNodes(0,e)}[Symbol.iterator](){return this._nodes[Symbol.iterator]()}get length(){return this._nodes.length}get maxOffset(){return this._nodes.reduce((e,t)=>e+t.offsetSize,0)}getNode(e){return this._nodes[e]||null}getNodeIndex(e){const t=this._nodes.indexOf(e);return-1==t?null:t}getNodeStartOffset(e){const t=this.getNodeIndex(e);return null===t?null:this._nodes.slice(0,t).reduce((e,t)=>e+t.offsetSize,0)}indexToOffset(e){if(e==this._nodes.length)return this.maxOffset;const t=this._nodes[e];if(!t)throw new s.a("model-nodelist-index-out-of-bounds",this);return this.getNodeStartOffset(t)}offsetToIndex(e){let t=0;for(const o of this._nodes){if(e>=t&&e<t+o.offsetSize)return this.getNodeIndex(o);t+=o.offsetSize}if(t!=e)throw new s.a("model-nodelist-offset-out-of-bounds",this,{offset:e,nodeList:this});return this.length}_insertNodes(e,t){for(const e of t)if(!(e instanceof i.a))throw new s.a("model-nodelist-insertnodes-not-node",this);this._nodes.splice(e,0,...t)}_removeNodes(e,t=1){return this._nodes.splice(e,t)}toJSON(){return this._nodes.map(e=>e.toJSON())}}},"./packages/ckeditor5-engine/src/model/operation/attributeoperation.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return l}));var i=o("./packages/ckeditor5-engine/src/model/operation/operation.js"),s=o("./packages/ckeditor5-engine/src/model/range.js"),r=o("./packages/ckeditor5-utils/src/ckeditorerror.js"),n=o("./packages/ckeditor5-engine/src/model/operation/utils.js"),a=o("./node_modules/lodash-es/_baseIsEqual.js");var c=function(e,t){return Object(a.a)(e,t)};class l extends i.a{constructor(e,t,o,i,s){super(s),this.range=e.clone(),this.key=t,this.oldValue=void 0===o?null:o,this.newValue=void 0===i?null:i}get type(){return null===this.oldValue?"addAttribute":null===this.newValue?"removeAttribute":"changeAttribute"}clone(){return new l(this.range,this.key,this.oldValue,this.newValue,this.baseVersion)}getReversed(){return new l(this.range,this.key,this.newValue,this.oldValue,this.baseVersion+1)}toJSON(){const e=super.toJSON();return e.range=this.range.toJSON(),e}_validate(){if(!this.range.isFlat)throw new r.a("attribute-operation-range-not-flat",this);for(const e of this.range.getItems({shallow:!0})){if(null!==this.oldValue&&!c(e.getAttribute(this.key),this.oldValue))throw new r.a("attribute-operation-wrong-old-value",this,{item:e,key:this.key,value:this.oldValue});if(null===this.oldValue&&null!==this.newValue&&e.hasAttribute(this.key))throw new r.a("attribute-operation-attribute-exists",this,{node:e,key:this.key})}}_execute(){c(this.oldValue,this.newValue)||Object(n.e)(this.range,this.key,this.newValue)}static get className(){return"AttributeOperation"}static fromJSON(e,t){return new l(s.a.fromJSON(e.range,t),e.key,e.oldValue,e.newValue,e.baseVersion)}}},"./packages/ckeditor5-engine/src/model/operation/insertoperation.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return u}));var i=o("./packages/ckeditor5-engine/src/model/operation/operation.js"),s=o("./packages/ckeditor5-engine/src/model/position.js"),r=o("./packages/ckeditor5-engine/src/model/nodelist.js"),n=o("./packages/ckeditor5-engine/src/model/operation/moveoperation.js"),a=o("./packages/ckeditor5-engine/src/model/operation/utils.js"),c=o("./packages/ckeditor5-engine/src/model/text.js"),l=o("./packages/ckeditor5-engine/src/model/element.js"),d=o("./packages/ckeditor5-utils/src/ckeditorerror.js");class u extends i.a{constructor(e,t,o){super(o),this.position=e.clone(),this.position.stickiness="toNone",this.nodes=new r.a(Object(a.c)(t)),this.shouldReceiveAttributes=!1}get type(){return"insert"}get howMany(){return this.nodes.maxOffset}clone(){const e=new r.a([...this.nodes].map(e=>e._clone(!0))),t=new u(this.position,e,this.baseVersion);return t.shouldReceiveAttributes=this.shouldReceiveAttributes,t}getReversed(){const e=this.position.root.document.graveyard,t=new s.a(e,[0]);return new n.a(this.position,this.nodes.maxOffset,t,this.baseVersion+1)}_validate(){const e=this.position.parent;if(!e||e.maxOffset<this.position.offset)throw new d.a("insert-operation-position-invalid",this)}_execute(){const e=this.nodes;this.nodes=new r.a([...e].map(e=>e._clone(!0))),Object(a.a)(this.position,e)}toJSON(){const e=super.toJSON();return e.position=this.position.toJSON(),e.nodes=this.nodes.toJSON(),e}static get className(){return"InsertOperation"}static fromJSON(e,t){const o=[];for(const t of e.nodes)t.name?o.push(l.a.fromJSON(t)):o.push(c.a.fromJSON(t));const i=new u(s.a.fromJSON(e.position,t),o,e.baseVersion);return i.shouldReceiveAttributes=e.shouldReceiveAttributes,i}}},"./packages/ckeditor5-engine/src/model/operation/markeroperation.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return r}));var i=o("./packages/ckeditor5-engine/src/model/operation/operation.js"),s=o("./packages/ckeditor5-engine/src/model/range.js");class r extends i.a{constructor(e,t,o,i,s,r){super(r),this.name=e,this.oldRange=t?t.clone():null,this.newRange=o?o.clone():null,this.affectsData=s,this._markers=i}get type(){return"marker"}clone(){return new r(this.name,this.oldRange,this.newRange,this._markers,this.affectsData,this.baseVersion)}getReversed(){return new r(this.name,this.newRange,this.oldRange,this._markers,this.affectsData,this.baseVersion+1)}_execute(){const e=this.newRange?"_set":"_remove";this._markers[e](this.name,this.newRange,!0,this.affectsData)}toJSON(){const e=super.toJSON();return this.oldRange&&(e.oldRange=this.oldRange.toJSON()),this.newRange&&(e.newRange=this.newRange.toJSON()),delete e._markers,e}static get className(){return"MarkerOperation"}static fromJSON(e,t){return new r(e.name,e.oldRange?s.a.fromJSON(e.oldRange,t):null,e.newRange?s.a.fromJSON(e.newRange,t):null,t.model.markers,e.affectsData,e.baseVersion)}}},"./packages/ckeditor5-engine/src/model/operation/mergeoperation.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return l}));var i=o("./packages/ckeditor5-engine/src/model/operation/operation.js"),s=o("./packages/ckeditor5-engine/src/model/operation/splitoperation.js"),r=o("./packages/ckeditor5-engine/src/model/position.js"),n=o("./packages/ckeditor5-engine/src/model/range.js"),a=o("./packages/ckeditor5-engine/src/model/operation/utils.js"),c=o("./packages/ckeditor5-utils/src/ckeditorerror.js");class l extends i.a{constructor(e,t,o,i,s){super(s),this.sourcePosition=e.clone(),this.sourcePosition.stickiness="toPrevious",this.howMany=t,this.targetPosition=o.clone(),this.targetPosition.stickiness="toNext",this.graveyardPosition=i.clone()}get type(){return"merge"}get deletionPosition(){return new r.a(this.sourcePosition.root,this.sourcePosition.path.slice(0,-1))}get movedRange(){const e=this.sourcePosition.getShiftedBy(Number.POSITIVE_INFINITY);return new n.a(this.sourcePosition,e)}clone(){return new this.constructor(this.sourcePosition,this.howMany,this.targetPosition,this.graveyardPosition,this.baseVersion)}getReversed(){const e=this.targetPosition._getTransformedByMergeOperation(this),t=this.sourcePosition.path.slice(0,-1),o=new r.a(this.sourcePosition.root,t)._getTransformedByMergeOperation(this);return new s.a(e,this.howMany,o,this.graveyardPosition,this.baseVersion+1)}_validate(){const e=this.sourcePosition.parent,t=this.targetPosition.parent;if(!e.parent)throw new c.a("merge-operation-source-position-invalid",this);if(!t.parent)throw new c.a("merge-operation-target-position-invalid",this);if(this.howMany!=e.maxOffset)throw new c.a("merge-operation-how-many-invalid",this)}_execute(){const e=this.sourcePosition.parent,t=n.a._createIn(e);Object(a.b)(t,this.targetPosition),Object(a.b)(n.a._createOn(e),this.graveyardPosition)}toJSON(){const e=super.toJSON();return e.sourcePosition=e.sourcePosition.toJSON(),e.targetPosition=e.targetPosition.toJSON(),e.graveyardPosition=e.graveyardPosition.toJSON(),e}static get className(){return"MergeOperation"}static fromJSON(e,t){const o=r.a.fromJSON(e.sourcePosition,t),i=r.a.fromJSON(e.targetPosition,t),s=r.a.fromJSON(e.graveyardPosition,t);return new this(o,e.howMany,i,s,e.baseVersion)}}},"./packages/ckeditor5-engine/src/model/operation/moveoperation.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return l}));var i=o("./packages/ckeditor5-engine/src/model/operation/operation.js"),s=o("./packages/ckeditor5-engine/src/model/position.js"),r=o("./packages/ckeditor5-engine/src/model/range.js"),n=o("./packages/ckeditor5-utils/src/ckeditorerror.js"),a=o("./packages/ckeditor5-utils/src/comparearrays.js"),c=o("./packages/ckeditor5-engine/src/model/operation/utils.js");class l extends i.a{constructor(e,t,o,i){super(i),this.sourcePosition=e.clone(),this.sourcePosition.stickiness="toNext",this.howMany=t,this.targetPosition=o.clone(),this.targetPosition.stickiness="toNone"}get type(){return"$graveyard"==this.targetPosition.root.rootName?"remove":"$graveyard"==this.sourcePosition.root.rootName?"reinsert":"move"}clone(){return new this.constructor(this.sourcePosition,this.howMany,this.targetPosition,this.baseVersion)}getMovedRangeStart(){return this.targetPosition._getTransformedByDeletion(this.sourcePosition,this.howMany)}getReversed(){const e=this.sourcePosition._getTransformedByInsertion(this.targetPosition,this.howMany);return new this.constructor(this.getMovedRangeStart(),this.howMany,e,this.baseVersion+1)}_validate(){const e=this.sourcePosition.parent,t=this.targetPosition.parent,o=this.sourcePosition.offset,i=this.targetPosition.offset;if(o+this.howMany>e.maxOffset)throw new n.a("move-operation-nodes-do-not-exist",this);if(e===t&&o<i&&i<o+this.howMany)throw new n.a("move-operation-range-into-itself",this);if(this.sourcePosition.root==this.targetPosition.root&&"prefix"==Object(a.a)(this.sourcePosition.getParentPath(),this.targetPosition.getParentPath())){const e=this.sourcePosition.path.length-1;if(this.targetPosition.path[e]>=o&&this.targetPosition.path[e]<o+this.howMany)throw new n.a("move-operation-node-into-itself",this)}}_execute(){Object(c.b)(r.a._createFromPositionAndShift(this.sourcePosition,this.howMany),this.targetPosition)}toJSON(){const e=super.toJSON();return e.sourcePosition=this.sourcePosition.toJSON(),e.targetPosition=this.targetPosition.toJSON(),e}static get className(){return"MoveOperation"}static fromJSON(e,t){const o=s.a.fromJSON(e.sourcePosition,t),i=s.a.fromJSON(e.targetPosition,t);return new this(o,e.howMany,i,e.baseVersion)}}},"./packages/ckeditor5-engine/src/model/operation/nooperation.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return s}));var i=o("./packages/ckeditor5-engine/src/model/operation/operation.js");class s extends i.a{get type(){return"noop"}clone(){return new s(this.baseVersion)}getReversed(){return new s(this.baseVersion+1)}_execute(){}static get className(){return"NoOperation"}}},"./packages/ckeditor5-engine/src/model/operation/operation.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return i}));class i{constructor(e){this.baseVersion=e,this.isDocumentOperation=null!==this.baseVersion,this.batch=null}_validate(){}toJSON(){const e=Object.assign({},this);return e.__className=this.constructor.className,delete e.batch,delete e.isDocumentOperation,e}static get className(){return"Operation"}static fromJSON(e){return new this(e.baseVersion)}}},"./packages/ckeditor5-engine/src/model/operation/operationfactory.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return g}));var i=o("./packages/ckeditor5-engine/src/model/operation/attributeoperation.js"),s=o("./packages/ckeditor5-engine/src/model/operation/insertoperation.js"),r=o("./packages/ckeditor5-engine/src/model/operation/markeroperation.js"),n=o("./packages/ckeditor5-engine/src/model/operation/moveoperation.js"),a=o("./packages/ckeditor5-engine/src/model/operation/nooperation.js"),c=o("./packages/ckeditor5-engine/src/model/operation/operation.js"),l=o("./packages/ckeditor5-engine/src/model/operation/renameoperation.js"),d=o("./packages/ckeditor5-engine/src/model/operation/rootattributeoperation.js"),u=o("./packages/ckeditor5-engine/src/model/operation/splitoperation.js"),h=o("./packages/ckeditor5-engine/src/model/operation/mergeoperation.js");const p={};p[i.a.className]=i.a,p[s.a.className]=s.a,p[r.a.className]=r.a,p[n.a.className]=n.a,p[a.a.className]=a.a,p[c.a.className]=c.a,p[l.a.className]=l.a,p[d.a.className]=d.a,p[u.a.className]=u.a,p[h.a.className]=h.a;class g{static fromJSON(e,t){return p[e.__className].fromJSON(e,t)}}},"./packages/ckeditor5-engine/src/model/operation/renameoperation.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return a}));var i=o("./packages/ckeditor5-engine/src/model/operation/operation.js"),s=o("./packages/ckeditor5-engine/src/model/element.js"),r=o("./packages/ckeditor5-utils/src/ckeditorerror.js"),n=o("./packages/ckeditor5-engine/src/model/position.js");class a extends i.a{constructor(e,t,o,i){super(i),this.position=e,this.position.stickiness="toNext",this.oldName=t,this.newName=o}get type(){return"rename"}clone(){return new a(this.position.clone(),this.oldName,this.newName,this.baseVersion)}getReversed(){return new a(this.position.clone(),this.newName,this.oldName,this.baseVersion+1)}_validate(){const e=this.position.nodeAfter;if(!(e instanceof s.a))throw new r.a("rename-operation-wrong-position",this);if(e.name!==this.oldName)throw new r.a("rename-operation-wrong-name",this)}_execute(){this.position.nodeAfter.name=this.newName}toJSON(){const e=super.toJSON();return e.position=this.position.toJSON(),e}static get className(){return"RenameOperation"}static fromJSON(e,t){return new a(n.a.fromJSON(e.position,t),e.oldName,e.newName,e.baseVersion)}}},"./packages/ckeditor5-engine/src/model/operation/rootattributeoperation.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return r}));var i=o("./packages/ckeditor5-engine/src/model/operation/operation.js"),s=o("./packages/ckeditor5-utils/src/ckeditorerror.js");class r extends i.a{constructor(e,t,o,i,s){super(s),this.root=e,this.key=t,this.oldValue=o,this.newValue=i}get type(){return null===this.oldValue?"addRootAttribute":null===this.newValue?"removeRootAttribute":"changeRootAttribute"}clone(){return new r(this.root,this.key,this.oldValue,this.newValue,this.baseVersion)}getReversed(){return new r(this.root,this.key,this.newValue,this.oldValue,this.baseVersion+1)}_validate(){if(this.root!=this.root.root||this.root.is("documentFragment"))throw new s.a("rootattribute-operation-not-a-root",this,{root:this.root,key:this.key});if(null!==this.oldValue&&this.root.getAttribute(this.key)!==this.oldValue)throw new s.a("rootattribute-operation-wrong-old-value",this,{root:this.root,key:this.key});if(null===this.oldValue&&null!==this.newValue&&this.root.hasAttribute(this.key))throw new s.a("rootattribute-operation-attribute-exists",this,{root:this.root,key:this.key})}_execute(){null!==this.newValue?this.root._setAttribute(this.key,this.newValue):this.root._removeAttribute(this.key)}toJSON(){const e=super.toJSON();return e.root=this.root.toJSON(),e}static get className(){return"RootAttributeOperation"}static fromJSON(e,t){if(!t.getRoot(e.root))throw new s.a("rootattribute-operation-fromjson-no-root",this,{rootName:e.root});return new r(t.getRoot(e.root),e.key,e.oldValue,e.newValue,e.baseVersion)}}},"./packages/ckeditor5-engine/src/model/operation/splitoperation.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return l}));var i=o("./packages/ckeditor5-engine/src/model/operation/operation.js"),s=o("./packages/ckeditor5-engine/src/model/operation/mergeoperation.js"),r=o("./packages/ckeditor5-engine/src/model/position.js"),n=o("./packages/ckeditor5-engine/src/model/range.js"),a=o("./packages/ckeditor5-engine/src/model/operation/utils.js"),c=o("./packages/ckeditor5-utils/src/ckeditorerror.js");class l extends i.a{constructor(e,t,o,i,s){super(s),this.splitPosition=e.clone(),this.splitPosition.stickiness="toNext",this.howMany=t,this.insertionPosition=o,this.graveyardPosition=i?i.clone():null,this.graveyardPosition&&(this.graveyardPosition.stickiness="toNext")}get type(){return"split"}get moveTargetPosition(){const e=this.insertionPosition.path.slice();return e.push(0),new r.a(this.insertionPosition.root,e)}get movedRange(){const e=this.splitPosition.getShiftedBy(Number.POSITIVE_INFINITY);return new n.a(this.splitPosition,e)}clone(){return new this.constructor(this.splitPosition,this.howMany,this.insertionPosition,this.graveyardPosition,this.baseVersion)}getReversed(){const e=this.splitPosition.root.document.graveyard,t=new r.a(e,[0]);return new s.a(this.moveTargetPosition,this.howMany,this.splitPosition,t,this.baseVersion+1)}_validate(){const e=this.splitPosition.parent,t=this.splitPosition.offset;if(!e||e.maxOffset<t)throw new c.a("split-operation-position-invalid",this);if(!e.parent)throw new c.a("split-operation-split-in-root",this);if(this.howMany!=e.maxOffset-this.splitPosition.offset)throw new c.a("split-operation-how-many-invalid",this);if(this.graveyardPosition&&!this.graveyardPosition.nodeAfter)throw new c.a("split-operation-graveyard-position-invalid",this)}_execute(){const e=this.splitPosition.parent;if(this.graveyardPosition)Object(a.b)(n.a._createFromPositionAndShift(this.graveyardPosition,1),this.insertionPosition);else{const t=e._clone();Object(a.a)(this.insertionPosition,t)}const t=new n.a(r.a._createAt(e,this.splitPosition.offset),r.a._createAt(e,e.maxOffset));Object(a.b)(t,this.moveTargetPosition)}toJSON(){const e=super.toJSON();return e.splitPosition=this.splitPosition.toJSON(),e.insertionPosition=this.insertionPosition.toJSON(),this.graveyardPosition&&(e.graveyardPosition=this.graveyardPosition.toJSON()),e}static get className(){return"SplitOperation"}static getInsertionPosition(e){const t=e.path.slice(0,-1);return t[t.length-1]++,new r.a(e.root,t,"toPrevious")}static fromJSON(e,t){const o=r.a.fromJSON(e.splitPosition,t),i=r.a.fromJSON(e.insertionPosition,t),s=e.graveyardPosition?r.a.fromJSON(e.graveyardPosition,t):null;return new this(o,e.howMany,i,s,e.baseVersion)}}},"./packages/ckeditor5-engine/src/model/operation/transform.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return _}));var i=o("./packages/ckeditor5-engine/src/model/operation/insertoperation.js"),s=o("./packages/ckeditor5-engine/src/model/operation/attributeoperation.js"),r=o("./packages/ckeditor5-engine/src/model/operation/renameoperation.js"),n=o("./packages/ckeditor5-engine/src/model/operation/markeroperation.js"),a=o("./packages/ckeditor5-engine/src/model/operation/moveoperation.js"),c=o("./packages/ckeditor5-engine/src/model/operation/rootattributeoperation.js"),l=o("./packages/ckeditor5-engine/src/model/operation/mergeoperation.js"),d=o("./packages/ckeditor5-engine/src/model/operation/splitoperation.js"),u=o("./packages/ckeditor5-engine/src/model/operation/nooperation.js"),h=o("./packages/ckeditor5-engine/src/model/range.js"),p=o("./packages/ckeditor5-engine/src/model/position.js"),g=o("./packages/ckeditor5-utils/src/comparearrays.js");const f=new Map;function m(e,t,o){let i=f.get(e);i||(i=new Map,f.set(e,i)),i.set(t,o)}function k(e){return[e]}function b(e,t,o={}){const i=function(e,t){const o=f.get(e);return o&&o.has(t)?o.get(t):k}(e.constructor,t.constructor);try{return i(e=e.clone(),t,o)}catch(e){throw e}}function _(e,t,o){e=e.slice(),t=t.slice();const i=new w(o.document,o.useRelations,o.forceWeakRemove);i.setOriginalOperations(e),i.setOriginalOperations(t);const s=i.originalOperations;if(0==e.length||0==t.length)return{operationsA:e,operationsB:t,originalOperations:s};const r=new WeakMap;for(const t of e)r.set(t,0);const n={nextBaseVersionA:e[e.length-1].baseVersion+1,nextBaseVersionB:t[t.length-1].baseVersion+1,originalOperationsACount:e.length,originalOperationsBCount:t.length};let a=0;for(;a<e.length;){const o=e[a],s=r.get(o);if(s==t.length){a++;continue}const n=t[s],c=b(o,n,i.getContext(o,n,!0)),l=b(n,o,i.getContext(n,o,!1));i.updateRelation(o,n),i.setOriginalOperations(c,o),i.setOriginalOperations(l,n);for(const e of c)r.set(e,s+l.length);e.splice(a,1,...c),t.splice(s,1,...l)}if(o.padWithNoOps){const o=e.length-n.originalOperationsACount,i=t.length-n.originalOperationsBCount;y(e,i-o),y(t,o-i)}return v(e,n.nextBaseVersionB),v(t,n.nextBaseVersionA),{operationsA:e,operationsB:t,originalOperations:s}}class w{constructor(e,t,o=!1){this.originalOperations=new Map,this._history=e.history,this._useRelations=t,this._forceWeakRemove=!!o,this._relations=new Map}setOriginalOperations(e,t=null){const o=t?this.originalOperations.get(t):null;for(const t of e)this.originalOperations.set(t,o||t)}updateRelation(e,t){switch(e.constructor){case a.a:switch(t.constructor){case l.a:e.targetPosition.isEqual(t.sourcePosition)||t.movedRange.containsPosition(e.targetPosition)?this._setRelation(e,t,"insertAtSource"):e.targetPosition.isEqual(t.deletionPosition)?this._setRelation(e,t,"insertBetween"):e.targetPosition.isAfter(t.sourcePosition)&&this._setRelation(e,t,"moveTargetAfter");break;case a.a:e.targetPosition.isEqual(t.sourcePosition)||e.targetPosition.isBefore(t.sourcePosition)?this._setRelation(e,t,"insertBefore"):this._setRelation(e,t,"insertAfter")}break;case d.a:switch(t.constructor){case l.a:e.splitPosition.isBefore(t.sourcePosition)&&this._setRelation(e,t,"splitBefore");break;case a.a:if(e.splitPosition.isEqual(t.sourcePosition)||e.splitPosition.isBefore(t.sourcePosition))this._setRelation(e,t,"splitBefore");else{const o=h.a._createFromPositionAndShift(t.sourcePosition,t.howMany);if(e.splitPosition.hasSameParentAs(t.sourcePosition)&&o.containsPosition(e.splitPosition)){const i=o.end.offset-e.splitPosition.offset,s=e.splitPosition.offset-o.start.offset;this._setRelation(e,t,{howMany:i,offset:s})}}}break;case l.a:switch(t.constructor){case l.a:e.targetPosition.isEqual(t.sourcePosition)||this._setRelation(e,t,"mergeTargetNotMoved"),e.sourcePosition.isEqual(t.targetPosition)&&this._setRelation(e,t,"mergeSourceNotMoved"),e.sourcePosition.isEqual(t.sourcePosition)&&this._setRelation(e,t,"mergeSameElement");break;case d.a:e.sourcePosition.isEqual(t.splitPosition)&&this._setRelation(e,t,"splitAtSource")}break;case n.a:{const o=e.newRange;if(!o)return;switch(t.constructor){case a.a:{const i=h.a._createFromPositionAndShift(t.sourcePosition,t.howMany),s=i.containsPosition(o.start)||i.start.isEqual(o.start),r=i.containsPosition(o.end)||i.end.isEqual(o.end);!s&&!r||i.containsRange(o)||this._setRelation(e,t,{side:s?"left":"right",path:s?o.start.path.slice():o.end.path.slice()});break}case l.a:{const i=o.start.isEqual(t.targetPosition),s=o.start.isEqual(t.deletionPosition),r=o.end.isEqual(t.deletionPosition),n=o.end.isEqual(t.sourcePosition);(i||s||r||n)&&this._setRelation(e,t,{wasInLeftElement:i,wasStartBeforeMergedElement:s,wasEndBeforeMergedElement:r,wasInRightElement:n});break}}break}}}getContext(e,t,o){return{aIsStrong:o,aWasUndone:this._wasUndone(e),bWasUndone:this._wasUndone(t),abRelation:this._useRelations?this._getRelation(e,t):null,baRelation:this._useRelations?this._getRelation(t,e):null,forceWeakRemove:this._forceWeakRemove}}_wasUndone(e){const t=this.originalOperations.get(e);return t.wasUndone||this._history.isUndoneOperation(t)}_getRelation(e,t){const o=this.originalOperations.get(t),i=this._history.getUndoneOperation(o);if(!i)return null;const s=this.originalOperations.get(e),r=this._relations.get(s);return r&&r.get(i)||null}_setRelation(e,t,o){const i=this.originalOperations.get(e),s=this.originalOperations.get(t);let r=this._relations.get(i);r||(r=new Map,this._relations.set(i,r)),r.set(s,o)}}function v(e,t){for(const o of e)o.baseVersion=t++}function y(e,t){for(let o=0;o<t;o++)e.push(new u.a(0))}function j(e,t,o){const i=e.nodes.getNode(0).getAttribute(t);if(i==o)return null;const r=new h.a(e.position,e.position.getShiftedBy(e.howMany));return new s.a(r,t,i,o,0)}function x(e,t){return null===e.targetPosition._getTransformedByDeletion(t.sourcePosition,t.howMany)}function P(e,t){const o=[];for(let i=0;i<e.length;i++){const s=e[i],r=new a.a(s.start,s.end.offset-s.start.offset,t,0);o.push(r);for(let t=i+1;t<e.length;t++)e[t]=e[t]._getTransformedByMove(r.sourcePosition,r.targetPosition,r.howMany)[0];t=t._getTransformedByMove(r.sourcePosition,r.targetPosition,r.howMany)}return o}m(s.a,s.a,(e,t,o)=>{if(e.key===t.key&&e.range.start.hasSameParentAs(t.range.start)){const i=e.range.getDifference(t.range).map(t=>new s.a(t,e.key,e.oldValue,e.newValue,0)),r=e.range.getIntersection(t.range);return r&&o.aIsStrong&&i.push(new s.a(r,t.key,t.newValue,e.newValue,0)),0==i.length?[new u.a(0)]:i}return[e]}),m(s.a,i.a,(e,t)=>{if(e.range.start.hasSameParentAs(t.position)&&e.range.containsPosition(t.position)){const o=e.range._getTransformedByInsertion(t.position,t.howMany,!t.shouldReceiveAttributes).map(t=>new s.a(t,e.key,e.oldValue,e.newValue,e.baseVersion));if(t.shouldReceiveAttributes){const i=j(t,e.key,e.oldValue);i&&o.unshift(i)}return o}return e.range=e.range._getTransformedByInsertion(t.position,t.howMany,!1)[0],[e]}),m(s.a,l.a,(e,t)=>{const o=[];e.range.start.hasSameParentAs(t.deletionPosition)&&(e.range.containsPosition(t.deletionPosition)||e.range.start.isEqual(t.deletionPosition))&&o.push(h.a._createFromPositionAndShift(t.graveyardPosition,1));const i=e.range._getTransformedByMergeOperation(t);return i.isCollapsed||o.push(i),o.map(t=>new s.a(t,e.key,e.oldValue,e.newValue,e.baseVersion))}),m(s.a,a.a,(e,t)=>function(e,t){const o=h.a._createFromPositionAndShift(t.sourcePosition,t.howMany);let i=null,s=[];o.containsRange(e,!0)?i=e:e.start.hasSameParentAs(o.start)?(s=e.getDifference(o),i=e.getIntersection(o)):s=[e];const r=[];for(let e of s){e=e._getTransformedByDeletion(t.sourcePosition,t.howMany);const o=t.getMovedRangeStart(),i=e.start.hasSameParentAs(o);e=e._getTransformedByInsertion(o,t.howMany,i),r.push(...e)}i&&r.push(i._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany,!1)[0]);return r}(e.range,t).map(t=>new s.a(t,e.key,e.oldValue,e.newValue,e.baseVersion))),m(s.a,d.a,(e,t)=>{if(e.range.end.isEqual(t.insertionPosition))return t.graveyardPosition||e.range.end.offset++,[e];if(e.range.start.hasSameParentAs(t.splitPosition)&&e.range.containsPosition(t.splitPosition)){const o=e.clone();return o.range=new h.a(t.moveTargetPosition.clone(),e.range.end._getCombined(t.splitPosition,t.moveTargetPosition)),e.range.end=t.splitPosition.clone(),e.range.end.stickiness="toPrevious",[e,o]}return e.range=e.range._getTransformedBySplitOperation(t),[e]}),m(i.a,s.a,(e,t)=>{const o=[e];if(e.shouldReceiveAttributes&&e.position.hasSameParentAs(t.range.start)&&t.range.containsPosition(e.position)){const i=j(e,t.key,t.newValue);i&&o.push(i)}return o}),m(i.a,i.a,(e,t,o)=>(e.position.isEqual(t.position)&&o.aIsStrong||(e.position=e.position._getTransformedByInsertOperation(t)),[e])),m(i.a,a.a,(e,t)=>(e.position=e.position._getTransformedByMoveOperation(t),[e])),m(i.a,d.a,(e,t)=>(e.position=e.position._getTransformedBySplitOperation(t),[e])),m(i.a,l.a,(e,t)=>(e.position=e.position._getTransformedByMergeOperation(t),[e])),m(n.a,i.a,(e,t)=>(e.oldRange&&(e.oldRange=e.oldRange._getTransformedByInsertOperation(t)[0]),e.newRange&&(e.newRange=e.newRange._getTransformedByInsertOperation(t)[0]),[e])),m(n.a,n.a,(e,t,o)=>{if(e.name==t.name){if(!o.aIsStrong)return[new u.a(0)];e.oldRange=t.newRange?t.newRange.clone():null}return[e]}),m(n.a,l.a,(e,t)=>(e.oldRange&&(e.oldRange=e.oldRange._getTransformedByMergeOperation(t)),e.newRange&&(e.newRange=e.newRange._getTransformedByMergeOperation(t)),[e])),m(n.a,a.a,(e,t,o)=>{if(e.oldRange&&(e.oldRange=h.a._createFromRanges(e.oldRange._getTransformedByMoveOperation(t))),e.newRange){if(o.abRelation){const i=h.a._createFromRanges(e.newRange._getTransformedByMoveOperation(t));if("left"==o.abRelation.side&&t.targetPosition.isEqual(e.newRange.start))return e.newRange.start.path=o.abRelation.path,e.newRange.end=i.end,[e];if("right"==o.abRelation.side&&t.targetPosition.isEqual(e.newRange.end))return e.newRange.start=i.start,e.newRange.end.path=o.abRelation.path,[e]}e.newRange=h.a._createFromRanges(e.newRange._getTransformedByMoveOperation(t))}return[e]}),m(n.a,d.a,(e,t,o)=>{if(e.oldRange&&(e.oldRange=e.oldRange._getTransformedBySplitOperation(t)),e.newRange){if(o.abRelation){const i=e.newRange._getTransformedBySplitOperation(t);return e.newRange.start.isEqual(t.splitPosition)&&o.abRelation.wasStartBeforeMergedElement?e.newRange.start=p.a._createAt(t.insertionPosition):e.newRange.start.isEqual(t.splitPosition)&&!o.abRelation.wasInLeftElement&&(e.newRange.start=p.a._createAt(t.moveTargetPosition)),e.newRange.end.isEqual(t.splitPosition)&&o.abRelation.wasInRightElement?e.newRange.end=p.a._createAt(t.moveTargetPosition):e.newRange.end.isEqual(t.splitPosition)&&o.abRelation.wasEndBeforeMergedElement?e.newRange.end=p.a._createAt(t.insertionPosition):e.newRange.end=i.end,[e]}e.newRange=e.newRange._getTransformedBySplitOperation(t)}return[e]}),m(l.a,i.a,(e,t)=>(e.sourcePosition.hasSameParentAs(t.position)&&(e.howMany+=t.howMany),e.sourcePosition=e.sourcePosition._getTransformedByInsertOperation(t),e.targetPosition=e.targetPosition._getTransformedByInsertOperation(t),[e])),m(l.a,l.a,(e,t,o)=>{if(e.sourcePosition.isEqual(t.sourcePosition)&&e.targetPosition.isEqual(t.targetPosition)){if(o.bWasUndone){const o=t.graveyardPosition.path.slice();return o.push(0),e.sourcePosition=new p.a(t.graveyardPosition.root,o),e.howMany=0,[e]}return[new u.a(0)]}if(e.sourcePosition.isEqual(t.sourcePosition)&&!e.targetPosition.isEqual(t.targetPosition)&&!o.bWasUndone&&"splitAtSource"!=o.abRelation){const i="$graveyard"==e.targetPosition.root.rootName,s="$graveyard"==t.targetPosition.root.rootName,r=i&&!s;if(s&&!i||!r&&o.aIsStrong){const o=t.targetPosition._getTransformedByMergeOperation(t),i=e.targetPosition._getTransformedByMergeOperation(t);return[new a.a(o,e.howMany,i,0)]}return[new u.a(0)]}return e.sourcePosition.hasSameParentAs(t.targetPosition)&&(e.howMany+=t.howMany),e.sourcePosition=e.sourcePosition._getTransformedByMergeOperation(t),e.targetPosition=e.targetPosition._getTransformedByMergeOperation(t),e.graveyardPosition.isEqual(t.graveyardPosition)&&o.aIsStrong||(e.graveyardPosition=e.graveyardPosition._getTransformedByMergeOperation(t)),[e]}),m(l.a,a.a,(e,t,o)=>{const i=h.a._createFromPositionAndShift(t.sourcePosition,t.howMany);return"remove"==t.type&&!o.bWasUndone&&!o.forceWeakRemove&&e.deletionPosition.hasSameParentAs(t.sourcePosition)&&i.containsPosition(e.sourcePosition)?[new u.a(0)]:(e.sourcePosition.hasSameParentAs(t.targetPosition)&&(e.howMany+=t.howMany),e.sourcePosition.hasSameParentAs(t.sourcePosition)&&(e.howMany-=t.howMany),e.sourcePosition=e.sourcePosition._getTransformedByMoveOperation(t),e.targetPosition=e.targetPosition._getTransformedByMoveOperation(t),e.graveyardPosition.isEqual(t.targetPosition)||(e.graveyardPosition=e.graveyardPosition._getTransformedByMoveOperation(t)),[e])}),m(l.a,d.a,(e,t,o)=>{if(t.graveyardPosition&&(e.graveyardPosition=e.graveyardPosition._getTransformedByDeletion(t.graveyardPosition,1),e.deletionPosition.isEqual(t.graveyardPosition)&&(e.howMany=t.howMany)),e.targetPosition.isEqual(t.splitPosition)){const i=0!=t.howMany,s=t.graveyardPosition&&e.deletionPosition.isEqual(t.graveyardPosition);if(i||s||"mergeTargetNotMoved"==o.abRelation)return e.sourcePosition=e.sourcePosition._getTransformedBySplitOperation(t),[e]}if(e.sourcePosition.isEqual(t.splitPosition)){if("mergeSourceNotMoved"==o.abRelation)return e.howMany=0,e.targetPosition=e.targetPosition._getTransformedBySplitOperation(t),[e];if("mergeSameElement"==o.abRelation||e.sourcePosition.offset>0)return e.sourcePosition=t.moveTargetPosition.clone(),e.targetPosition=e.targetPosition._getTransformedBySplitOperation(t),[e]}return e.sourcePosition.hasSameParentAs(t.splitPosition)&&(e.howMany=t.splitPosition.offset),e.sourcePosition=e.sourcePosition._getTransformedBySplitOperation(t),e.targetPosition=e.targetPosition._getTransformedBySplitOperation(t),[e]}),m(a.a,i.a,(e,t)=>{const o=h.a._createFromPositionAndShift(e.sourcePosition,e.howMany)._getTransformedByInsertOperation(t,!1)[0];return e.sourcePosition=o.start,e.howMany=o.end.offset-o.start.offset,e.targetPosition.isEqual(t.position)||(e.targetPosition=e.targetPosition._getTransformedByInsertOperation(t)),[e]}),m(a.a,a.a,(e,t,o)=>{const i=h.a._createFromPositionAndShift(e.sourcePosition,e.howMany),s=h.a._createFromPositionAndShift(t.sourcePosition,t.howMany);let r,n=o.aIsStrong,a=!o.aIsStrong;if("insertBefore"==o.abRelation||"insertAfter"==o.baRelation?a=!0:"insertAfter"!=o.abRelation&&"insertBefore"!=o.baRelation||(a=!1),r=e.targetPosition.isEqual(t.targetPosition)&&a?e.targetPosition._getTransformedByDeletion(t.sourcePosition,t.howMany):e.targetPosition._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany),x(e,t)&&x(t,e))return[t.getReversed()];if(i.containsPosition(t.targetPosition)&&i.containsRange(s,!0))return i.start=i.start._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany),i.end=i.end._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany),P([i],r);if(s.containsPosition(e.targetPosition)&&s.containsRange(i,!0))return i.start=i.start._getCombined(t.sourcePosition,t.getMovedRangeStart()),i.end=i.end._getCombined(t.sourcePosition,t.getMovedRangeStart()),P([i],r);const c=Object(g.a)(e.sourcePosition.getParentPath(),t.sourcePosition.getParentPath());if("prefix"==c||"extension"==c)return i.start=i.start._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany),i.end=i.end._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany),P([i],r);"remove"!=e.type||"remove"==t.type||o.aWasUndone||o.forceWeakRemove?"remove"==e.type||"remove"!=t.type||o.bWasUndone||o.forceWeakRemove||(n=!1):n=!0;const l=[],d=i.getDifference(s);for(const e of d){e.start=e.start._getTransformedByDeletion(t.sourcePosition,t.howMany),e.end=e.end._getTransformedByDeletion(t.sourcePosition,t.howMany);const o="same"==Object(g.a)(e.start.getParentPath(),t.getMovedRangeStart().getParentPath()),i=e._getTransformedByInsertion(t.getMovedRangeStart(),t.howMany,o);l.push(...i)}const p=i.getIntersection(s);return null!==p&&n&&(p.start=p.start._getCombined(t.sourcePosition,t.getMovedRangeStart()),p.end=p.end._getCombined(t.sourcePosition,t.getMovedRangeStart()),0===l.length?l.push(p):1==l.length?s.start.isBefore(i.start)||s.start.isEqual(i.start)?l.unshift(p):l.push(p):l.splice(1,0,p)),0===l.length?[new u.a(e.baseVersion)]:P(l,r)}),m(a.a,d.a,(e,t,o)=>{let i=e.targetPosition.clone();e.targetPosition.isEqual(t.insertionPosition)&&t.graveyardPosition&&"moveTargetAfter"!=o.abRelation||(i=e.targetPosition._getTransformedBySplitOperation(t));const s=h.a._createFromPositionAndShift(e.sourcePosition,e.howMany);if(s.end.isEqual(t.insertionPosition))return t.graveyardPosition||e.howMany++,e.targetPosition=i,[e];if(s.start.hasSameParentAs(t.splitPosition)&&s.containsPosition(t.splitPosition)){let e=new h.a(t.splitPosition,s.end);e=e._getTransformedBySplitOperation(t);return P([new h.a(s.start,t.splitPosition),e],i)}e.targetPosition.isEqual(t.splitPosition)&&"insertAtSource"==o.abRelation&&(i=t.moveTargetPosition),e.targetPosition.isEqual(t.insertionPosition)&&"insertBetween"==o.abRelation&&(i=e.targetPosition);const r=[s._getTransformedBySplitOperation(t)];if(t.graveyardPosition){const i=s.start.isEqual(t.graveyardPosition)||s.containsPosition(t.graveyardPosition);e.howMany>1&&i&&!o.aWasUndone&&r.push(h.a._createFromPositionAndShift(t.insertionPosition,1))}return P(r,i)}),m(a.a,l.a,(e,t,o)=>{const i=h.a._createFromPositionAndShift(e.sourcePosition,e.howMany);if(t.deletionPosition.hasSameParentAs(e.sourcePosition)&&i.containsPosition(t.sourcePosition))if("remove"!=e.type||o.forceWeakRemove){if(1==e.howMany)return o.bWasUndone?(e.sourcePosition=t.graveyardPosition.clone(),e.targetPosition=e.targetPosition._getTransformedByMergeOperation(t),[e]):[new u.a(0)]}else if(!o.aWasUndone){const o=[];let i=t.graveyardPosition.clone(),s=t.targetPosition._getTransformedByMergeOperation(t);e.howMany>1&&(o.push(new a.a(e.sourcePosition,e.howMany-1,e.targetPosition,0)),i=i._getTransformedByMove(e.sourcePosition,e.targetPosition,e.howMany-1),s=s._getTransformedByMove(e.sourcePosition,e.targetPosition,e.howMany-1));const r=t.deletionPosition._getCombined(e.sourcePosition,e.targetPosition),n=new a.a(i,1,r,0),c=n.getMovedRangeStart().path.slice();c.push(0);const l=new p.a(n.targetPosition.root,c);s=s._getTransformedByMove(i,r,1);const d=new a.a(s,t.howMany,l,0);return o.push(n),o.push(d),o}const s=h.a._createFromPositionAndShift(e.sourcePosition,e.howMany)._getTransformedByMergeOperation(t);return e.sourcePosition=s.start,e.howMany=s.end.offset-s.start.offset,e.targetPosition=e.targetPosition._getTransformedByMergeOperation(t),[e]}),m(r.a,i.a,(e,t)=>(e.position=e.position._getTransformedByInsertOperation(t),[e])),m(r.a,l.a,(e,t)=>e.position.isEqual(t.deletionPosition)?(e.position=t.graveyardPosition.clone(),e.position.stickiness="toNext",[e]):(e.position=e.position._getTransformedByMergeOperation(t),[e])),m(r.a,a.a,(e,t)=>(e.position=e.position._getTransformedByMoveOperation(t),[e])),m(r.a,r.a,(e,t,o)=>{if(e.position.isEqual(t.position)){if(!o.aIsStrong)return[new u.a(0)];e.oldName=t.newName}return[e]}),m(r.a,d.a,(e,t)=>{const o=e.position.path,i=t.splitPosition.getParentPath();if("same"==Object(g.a)(o,i)&&!t.graveyardPosition){const t=new r.a(e.position.getShiftedBy(1),e.oldName,e.newName,0);return[e,t]}return e.position=e.position._getTransformedBySplitOperation(t),[e]}),m(c.a,c.a,(e,t,o)=>{if(e.root===t.root&&e.key===t.key){if(!o.aIsStrong||e.newValue===t.newValue)return[new u.a(0)];e.oldValue=t.newValue}return[e]}),m(d.a,i.a,(e,t)=>(e.splitPosition.hasSameParentAs(t.position)&&e.splitPosition.offset<t.position.offset&&(e.howMany+=t.howMany),e.splitPosition=e.splitPosition._getTransformedByInsertOperation(t),e.insertionPosition=e.insertionPosition._getTransformedByInsertOperation(t),[e])),m(d.a,l.a,(e,t,o)=>{if(!e.graveyardPosition&&!o.bWasUndone&&e.splitPosition.hasSameParentAs(t.sourcePosition)){const o=t.graveyardPosition.path.slice();o.push(0);const i=new p.a(t.graveyardPosition.root,o),s=d.a.getInsertionPosition(new p.a(t.graveyardPosition.root,o)),r=new d.a(i,0,s,null,0);return e.splitPosition=e.splitPosition._getTransformedByMergeOperation(t),e.insertionPosition=d.a.getInsertionPosition(e.splitPosition),e.graveyardPosition=r.insertionPosition.clone(),e.graveyardPosition.stickiness="toNext",[r,e]}return e.splitPosition.hasSameParentAs(t.deletionPosition)&&!e.splitPosition.isAfter(t.deletionPosition)&&e.howMany--,e.splitPosition.hasSameParentAs(t.targetPosition)&&(e.howMany+=t.howMany),e.splitPosition=e.splitPosition._getTransformedByMergeOperation(t),e.insertionPosition=d.a.getInsertionPosition(e.splitPosition),e.graveyardPosition&&(e.graveyardPosition=e.graveyardPosition._getTransformedByMergeOperation(t)),[e]}),m(d.a,a.a,(e,t,o)=>{const i=h.a._createFromPositionAndShift(t.sourcePosition,t.howMany);if(e.graveyardPosition){const s=i.start.isEqual(e.graveyardPosition)||i.containsPosition(e.graveyardPosition);if(!o.bWasUndone&&s){const o=e.splitPosition._getTransformedByMoveOperation(t),i=e.graveyardPosition._getTransformedByMoveOperation(t),s=i.path.slice();s.push(0);const r=new p.a(i.root,s);return[new a.a(o,e.howMany,r,0)]}e.graveyardPosition=e.graveyardPosition._getTransformedByMoveOperation(t)}const s=e.splitPosition.isEqual(t.targetPosition);if(s&&("insertAtSource"==o.baRelation||"splitBefore"==o.abRelation))return e.howMany+=t.howMany,e.splitPosition=e.splitPosition._getTransformedByDeletion(t.sourcePosition,t.howMany),e.insertionPosition=d.a.getInsertionPosition(e.splitPosition),[e];if(s&&o.abRelation&&o.abRelation.howMany){const{howMany:t,offset:i}=o.abRelation;return e.howMany+=t,e.splitPosition=e.splitPosition.getShiftedBy(i),[e]}if(e.splitPosition.hasSameParentAs(t.sourcePosition)&&i.containsPosition(e.splitPosition)){const o=t.howMany-(e.splitPosition.offset-t.sourcePosition.offset);return e.howMany-=o,e.splitPosition.hasSameParentAs(t.targetPosition)&&e.splitPosition.offset<t.targetPosition.offset&&(e.howMany+=t.howMany),e.splitPosition=t.sourcePosition.clone(),e.insertionPosition=d.a.getInsertionPosition(e.splitPosition),[e]}return t.sourcePosition.isEqual(t.targetPosition)||(e.splitPosition.hasSameParentAs(t.sourcePosition)&&e.splitPosition.offset<=t.sourcePosition.offset&&(e.howMany-=t.howMany),e.splitPosition.hasSameParentAs(t.targetPosition)&&e.splitPosition.offset<t.targetPosition.offset&&(e.howMany+=t.howMany)),e.splitPosition.stickiness="toNone",e.splitPosition=e.splitPosition._getTransformedByMoveOperation(t),e.splitPosition.stickiness="toNext",e.graveyardPosition?e.insertionPosition=e.insertionPosition._getTransformedByMoveOperation(t):e.insertionPosition=d.a.getInsertionPosition(e.splitPosition),[e]}),m(d.a,d.a,(e,t,o)=>{if(e.splitPosition.isEqual(t.splitPosition)){if(!e.graveyardPosition&&!t.graveyardPosition)return[new u.a(0)];if(e.graveyardPosition&&t.graveyardPosition&&e.graveyardPosition.isEqual(t.graveyardPosition))return[new u.a(0)];if("splitBefore"==o.abRelation)return e.howMany=0,e.graveyardPosition=e.graveyardPosition._getTransformedBySplitOperation(t),[e]}if(e.graveyardPosition&&t.graveyardPosition&&e.graveyardPosition.isEqual(t.graveyardPosition)){const i="$graveyard"==e.splitPosition.root.rootName,s="$graveyard"==t.splitPosition.root.rootName,r=i&&!s;if(s&&!i||!r&&o.aIsStrong){const o=[];return t.howMany&&o.push(new a.a(t.moveTargetPosition,t.howMany,t.splitPosition,0)),e.howMany&&o.push(new a.a(e.splitPosition,e.howMany,e.moveTargetPosition,0)),o}return[new u.a(0)]}if(e.graveyardPosition&&(e.graveyardPosition=e.graveyardPosition._getTransformedBySplitOperation(t)),e.splitPosition.isEqual(t.insertionPosition)&&"splitBefore"==o.abRelation)return e.howMany++,[e];if(t.splitPosition.isEqual(e.insertionPosition)&&"splitBefore"==o.baRelation){const o=t.insertionPosition.path.slice();o.push(0);const i=new p.a(t.insertionPosition.root,o);return[e,new a.a(e.insertionPosition,1,i,0)]}return e.splitPosition.hasSameParentAs(t.splitPosition)&&e.splitPosition.offset<t.splitPosition.offset&&(e.howMany-=t.howMany),e.splitPosition=e.splitPosition._getTransformedBySplitOperation(t),e.insertionPosition=d.a.getInsertionPosition(e.splitPosition),[e]})},"./packages/ckeditor5-engine/src/model/operation/utils.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return d})),o.d(t,"d",(function(){return u})),o.d(t,"b",(function(){return h})),o.d(t,"e",(function(){return p})),o.d(t,"c",(function(){return g}));var i=o("./packages/ckeditor5-engine/src/model/node.js"),s=o("./packages/ckeditor5-engine/src/model/text.js"),r=o("./packages/ckeditor5-engine/src/model/textproxy.js"),n=o("./packages/ckeditor5-engine/src/model/range.js"),a=o("./packages/ckeditor5-engine/src/model/documentfragment.js"),c=o("./packages/ckeditor5-engine/src/model/nodelist.js"),l=o("./packages/ckeditor5-utils/src/ckeditorerror.js");function d(e,t){const o=(t=g(t)).reduce((e,t)=>e+t.offsetSize,0),i=e.parent;m(e);const s=e.index;return i._insertChild(s,t),f(i,s+t.length),f(i,s),new n.a(e,e.getShiftedBy(o))}function u(e){if(!e.isFlat)throw new l.a("operation-utils-remove-range-not-flat",this);const t=e.start.parent;m(e.start),m(e.end);const o=t._removeChildren(e.start.index,e.end.index-e.start.index);return f(t,e.start.index),o}function h(e,t){if(!e.isFlat)throw new l.a("operation-utils-move-range-not-flat",this);const o=u(e);return d(t=t._getTransformedByDeletion(e.start,e.end.offset-e.start.offset),o)}function p(e,t,o){m(e.start),m(e.end);for(const i of e.getItems({shallow:!0})){const e=i.is("$textProxy")?i.textNode:i;null!==o?e._setAttribute(t,o):e._removeAttribute(t),f(e.parent,e.index)}f(e.end.parent,e.end.index)}function g(e){const t=[];e instanceof Array||(e=[e]);for(let o=0;o<e.length;o++)if("string"==typeof e[o])t.push(new s.a(e[o]));else if(e[o]instanceof r.a)t.push(new s.a(e[o].data,e[o].getAttributes()));else if(e[o]instanceof a.a||e[o]instanceof c.a)for(const i of e[o])t.push(i);else e[o]instanceof i.a&&t.push(e[o]);for(let e=1;e<t.length;e++){const o=t[e],i=t[e-1];o instanceof s.a&&i instanceof s.a&&k(o,i)&&(t.splice(e-1,2,new s.a(i.data+o.data,i.getAttributes())),e--)}return t}function f(e,t){const o=e.getChild(t-1),i=e.getChild(t);if(o&&i&&o.is("$text")&&i.is("$text")&&k(o,i)){const r=new s.a(o.data+i.data,o.getAttributes());e._removeChildren(t-1,2),e._insertChild(t-1,r)}}function m(e){const t=e.textNode,o=e.parent;if(t){const i=e.offset-t.startOffset,r=t.index;o._removeChildren(r,1);const n=new s.a(t.data.substr(0,i),t.getAttributes()),a=new s.a(t.data.substr(i),t.getAttributes());o._insertChild(r,[n,a])}}function k(e,t){const o=e.getAttributes(),i=t.getAttributes();for(const e of o){if(e[1]!==t.getAttribute(e[0]))return!1;i.next()}return i.next().done}},"./packages/ckeditor5-engine/src/model/position.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return n})),o.d(t,"d",(function(){return a})),o.d(t,"b",(function(){return c})),o.d(t,"c",(function(){return l}));var i=o("./packages/ckeditor5-engine/src/model/treewalker.js"),s=o("./packages/ckeditor5-utils/src/comparearrays.js"),r=o("./packages/ckeditor5-utils/src/ckeditorerror.js");o("./packages/ckeditor5-utils/src/version.js");class n{constructor(e,t,o="toNone"){if(!e.is("element")&&!e.is("documentFragment"))throw new r.a("model-position-root-invalid",e);if(!(t instanceof Array)||0===t.length)throw new r.a("model-position-path-incorrect-format",e,{path:t});e.is("rootElement")?t=t.slice():(t=[...e.getPath(),...t],e=e.root),this.root=e,this.path=t,this.stickiness=o}get offset(){return this.path[this.path.length-1]}set offset(e){this.path[this.path.length-1]=e}get parent(){let e=this.root;for(let t=0;t<this.path.length-1;t++)if(e=e.getChild(e.offsetToIndex(this.path[t])),!e)throw new r.a("model-position-path-incorrect",this,{position:this});if(e.is("$text"))throw new r.a("model-position-path-incorrect",this,{position:this});return e}get index(){return this.parent.offsetToIndex(this.offset)}get textNode(){return a(this,this.parent)}get nodeAfter(){const e=this.parent;return c(this,e,a(this,e))}get nodeBefore(){const e=this.parent;return l(this,e,a(this,e))}get isAtStart(){return 0===this.offset}get isAtEnd(){return this.offset==this.parent.maxOffset}compareWith(e){if(this.root!=e.root)return"different";const t=Object(s.a)(this.path,e.path);switch(t){case"same":return"same";case"prefix":return"before";case"extension":return"after";default:return this.path[t]<e.path[t]?"before":"after"}}getLastMatchingPosition(e,t={}){t.startPosition=this;const o=new i.a(t);return o.skip(e),o.position}getParentPath(){return this.path.slice(0,-1)}getAncestors(){const e=this.parent;return e.is("documentFragment")?[e]:e.getAncestors({includeSelf:!0})}findAncestor(e){const t=this.parent;return t.is("element")?t.findAncestor(e,{includeSelf:!0}):null}getCommonPath(e){if(this.root!=e.root)return[];const t=Object(s.a)(this.path,e.path),o="string"==typeof t?Math.min(this.path.length,e.path.length):t;return this.path.slice(0,o)}getCommonAncestor(e){const t=this.getAncestors(),o=e.getAncestors();let i=0;for(;t[i]==o[i]&&t[i];)i++;return 0===i?null:t[i-1]}getShiftedBy(e){const t=this.clone(),o=t.offset+e;return t.offset=o<0?0:o,t}isAfter(e){return"after"==this.compareWith(e)}isBefore(e){return"before"==this.compareWith(e)}isEqual(e){return"same"==this.compareWith(e)}isTouching(e){let t=null,o=null;switch(this.compareWith(e)){case"same":return!0;case"before":t=n._createAt(this),o=n._createAt(e);break;case"after":t=n._createAt(e),o=n._createAt(this);break;default:return!1}let i=t.parent;for(;t.path.length+o.path.length;){if(t.isEqual(o))return!0;if(t.path.length>o.path.length){if(t.offset!==i.maxOffset)return!1;t.path=t.path.slice(0,-1),i=i.parent,t.offset++}else{if(0!==o.offset)return!1;o.path=o.path.slice(0,-1)}}}is(e){return"position"===e||"model:position"===e}hasSameParentAs(e){if(this.root!==e.root)return!1;const t=this.getParentPath(),o=e.getParentPath();return"same"==Object(s.a)(t,o)}getTransformedByOperation(e){let t;switch(e.type){case"insert":t=this._getTransformedByInsertOperation(e);break;case"move":case"remove":case"reinsert":t=this._getTransformedByMoveOperation(e);break;case"split":t=this._getTransformedBySplitOperation(e);break;case"merge":t=this._getTransformedByMergeOperation(e);break;default:t=n._createAt(this)}return t}_getTransformedByInsertOperation(e){return this._getTransformedByInsertion(e.position,e.howMany)}_getTransformedByMoveOperation(e){return this._getTransformedByMove(e.sourcePosition,e.targetPosition,e.howMany)}_getTransformedBySplitOperation(e){const t=e.movedRange;return t.containsPosition(this)||t.start.isEqual(this)&&"toNext"==this.stickiness?this._getCombined(e.splitPosition,e.moveTargetPosition):e.graveyardPosition?this._getTransformedByMove(e.graveyardPosition,e.insertionPosition,1):this._getTransformedByInsertion(e.insertionPosition,1)}_getTransformedByMergeOperation(e){const t=e.movedRange;let o;return t.containsPosition(this)||t.start.isEqual(this)?(o=this._getCombined(e.sourcePosition,e.targetPosition),e.sourcePosition.isBefore(e.targetPosition)&&(o=o._getTransformedByDeletion(e.deletionPosition,1))):o=this.isEqual(e.deletionPosition)?n._createAt(e.deletionPosition):this._getTransformedByMove(e.deletionPosition,e.graveyardPosition,1),o}_getTransformedByDeletion(e,t){const o=n._createAt(this);if(this.root!=e.root)return o;if("same"==Object(s.a)(e.getParentPath(),this.getParentPath())){if(e.offset<this.offset){if(e.offset+t>this.offset)return null;o.offset-=t}}else if("prefix"==Object(s.a)(e.getParentPath(),this.getParentPath())){const i=e.path.length-1;if(e.offset<=this.path[i]){if(e.offset+t>this.path[i])return null;o.path[i]-=t}}return o}_getTransformedByInsertion(e,t){const o=n._createAt(this);if(this.root!=e.root)return o;if("same"==Object(s.a)(e.getParentPath(),this.getParentPath()))(e.offset<this.offset||e.offset==this.offset&&"toPrevious"!=this.stickiness)&&(o.offset+=t);else if("prefix"==Object(s.a)(e.getParentPath(),this.getParentPath())){const i=e.path.length-1;e.offset<=this.path[i]&&(o.path[i]+=t)}return o}_getTransformedByMove(e,t,o){if(t=t._getTransformedByDeletion(e,o),e.isEqual(t))return n._createAt(this);const i=this._getTransformedByDeletion(e,o);return null===i||e.isEqual(this)&&"toNext"==this.stickiness||e.getShiftedBy(o).isEqual(this)&&"toPrevious"==this.stickiness?this._getCombined(e,t):i._getTransformedByInsertion(t,o)}_getCombined(e,t){const o=e.path.length-1,i=n._createAt(t);return i.stickiness=this.stickiness,i.offset=i.offset+this.path[o]-e.offset,i.path=[...i.path,...this.path.slice(o+1)],i}toJSON(){return{root:this.root.toJSON(),path:Array.from(this.path),stickiness:this.stickiness}}clone(){return new this.constructor(this.root,this.path,this.stickiness)}static _createAt(e,t,o="toNone"){if(e instanceof n)return new n(e.root,e.path,e.stickiness);{const i=e;if("end"==t)t=i.maxOffset;else{if("before"==t)return this._createBefore(i,o);if("after"==t)return this._createAfter(i,o);if(0!==t&&!t)throw new r.a("model-createpositionat-offset-required",[this,e])}if(!i.is("element")&&!i.is("documentFragment"))throw new r.a("model-position-parent-incorrect",[this,e]);const s=i.getPath();return s.push(t),new this(i.root,s,o)}}static _createAfter(e,t){if(!e.parent)throw new r.a("model-position-after-root",[this,e],{root:e});return this._createAt(e.parent,e.endOffset,t)}static _createBefore(e,t){if(!e.parent)throw new r.a("model-position-before-root",e,{root:e});return this._createAt(e.parent,e.startOffset,t)}static fromJSON(e,t){if("$graveyard"===e.root){const o=new n(t.graveyard,e.path);return o.stickiness=e.stickiness,o}if(!t.getRoot(e.root))throw new r.a("model-position-fromjson-no-root",t,{rootName:e.root});return new n(t.getRoot(e.root),e.path,e.stickiness)}}function a(e,t){const o=t.getChild(t.offsetToIndex(e.offset));return o&&o.is("$text")&&o.startOffset<e.offset?o:null}function c(e,t,o){return null!==o?null:t.getChild(t.offsetToIndex(e.offset))}function l(e,t,o){return null!==o?null:t.getChild(t.offsetToIndex(e.offset)-1)}},"./packages/ckeditor5-engine/src/model/range.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return a}));var i=o("./packages/ckeditor5-engine/src/model/position.js"),s=o("./packages/ckeditor5-engine/src/model/treewalker.js"),r=o("./packages/ckeditor5-utils/src/ckeditorerror.js"),n=o("./packages/ckeditor5-utils/src/comparearrays.js");class a{constructor(e,t=null){this.start=i.a._createAt(e),this.end=t?i.a._createAt(t):i.a._createAt(e),this.start.stickiness=this.isCollapsed?"toNone":"toNext",this.end.stickiness=this.isCollapsed?"toNone":"toPrevious"}*[Symbol.iterator](){yield*new s.a({boundaries:this,ignoreElementEnd:!0})}get isCollapsed(){return this.start.isEqual(this.end)}get isFlat(){const e=this.start.getParentPath(),t=this.end.getParentPath();return"same"==Object(n.a)(e,t)}get root(){return this.start.root}containsPosition(e){return e.isAfter(this.start)&&e.isBefore(this.end)}containsRange(e,t=!1){e.isCollapsed&&(t=!1);const o=this.containsPosition(e.start)||t&&this.start.isEqual(e.start),i=this.containsPosition(e.end)||t&&this.end.isEqual(e.end);return o&&i}containsItem(e){const t=i.a._createBefore(e);return this.containsPosition(t)||this.start.isEqual(t)}is(e){return"range"===e||"model:range"===e}isEqual(e){return this.start.isEqual(e.start)&&this.end.isEqual(e.end)}isIntersecting(e){return this.start.isBefore(e.end)&&this.end.isAfter(e.start)}getDifference(e){const t=[];return this.isIntersecting(e)?(this.containsPosition(e.start)&&t.push(new a(this.start,e.start)),this.containsPosition(e.end)&&t.push(new a(e.end,this.end))):t.push(new a(this.start,this.end)),t}getIntersection(e){if(this.isIntersecting(e)){let t=this.start,o=this.end;return this.containsPosition(e.start)&&(t=e.start),this.containsPosition(e.end)&&(o=e.end),new a(t,o)}return null}getJoined(e,t=!1){let o=this.isIntersecting(e);if(o||(o=this.start.isBefore(e.start)?t?this.end.isTouching(e.start):this.end.isEqual(e.start):t?e.end.isTouching(this.start):e.end.isEqual(this.start)),!o)return null;let i=this.start,s=this.end;return e.start.isBefore(i)&&(i=e.start),e.end.isAfter(s)&&(s=e.end),new a(i,s)}getMinimalFlatRanges(){const e=[],t=this.start.getCommonPath(this.end).length,o=i.a._createAt(this.start);let s=o.parent;for(;o.path.length>t+1;){const t=s.maxOffset-o.offset;0!==t&&e.push(new a(o,o.getShiftedBy(t))),o.path=o.path.slice(0,-1),o.offset++,s=s.parent}for(;o.path.length<=this.end.path.length;){const t=this.end.path[o.path.length-1],i=t-o.offset;0!==i&&e.push(new a(o,o.getShiftedBy(i))),o.offset=t,o.path.push(0)}return e}getWalker(e={}){return e.boundaries=this,new s.a(e)}*getItems(e={}){e.boundaries=this,e.ignoreElementEnd=!0;const t=new s.a(e);for(const e of t)yield e.item}*getPositions(e={}){e.boundaries=this;const t=new s.a(e);yield t.position;for(const e of t)yield e.nextPosition}getTransformedByOperation(e){switch(e.type){case"insert":return this._getTransformedByInsertOperation(e);case"move":case"remove":case"reinsert":return this._getTransformedByMoveOperation(e);case"split":return[this._getTransformedBySplitOperation(e)];case"merge":return[this._getTransformedByMergeOperation(e)]}return[new a(this.start,this.end)]}getTransformedByOperations(e){const t=[new a(this.start,this.end)];for(const o of e)for(let e=0;e<t.length;e++){const i=t[e].getTransformedByOperation(o);t.splice(e,1,...i),e+=i.length-1}for(let e=0;e<t.length;e++){const o=t[e];for(let i=e+1;i<t.length;i++){const e=t[i];(o.containsRange(e)||e.containsRange(o)||o.isEqual(e))&&t.splice(i,1)}}return t}getCommonAncestor(){return this.start.getCommonAncestor(this.end)}getContainedElement(){if(this.isCollapsed)return null;const e=this.start.nodeAfter,t=this.end.nodeBefore;return e&&e.is("element")&&e===t?e:null}toJSON(){return{start:this.start.toJSON(),end:this.end.toJSON()}}clone(){return new this.constructor(this.start,this.end)}_getTransformedByInsertOperation(e,t=!1){return this._getTransformedByInsertion(e.position,e.howMany,t)}_getTransformedByMoveOperation(e,t=!1){const o=e.sourcePosition,i=e.howMany,s=e.targetPosition;return this._getTransformedByMove(o,s,i,t)}_getTransformedBySplitOperation(e){const t=this.start._getTransformedBySplitOperation(e);let o=this.end._getTransformedBySplitOperation(e);return this.end.isEqual(e.insertionPosition)&&(o=this.end.getShiftedBy(1)),t.root!=o.root&&(o=this.end.getShiftedBy(-1)),new a(t,o)}_getTransformedByMergeOperation(e){if(this.start.isEqual(e.targetPosition)&&this.end.isEqual(e.deletionPosition))return new a(this.start);let t=this.start._getTransformedByMergeOperation(e),o=this.end._getTransformedByMergeOperation(e);return t.root!=o.root&&(o=this.end.getShiftedBy(-1)),t.isAfter(o)?(e.sourcePosition.isBefore(e.targetPosition)?(t=i.a._createAt(o),t.offset=0):(e.deletionPosition.isEqual(t)||(o=e.deletionPosition),t=e.targetPosition),new a(t,o)):new a(t,o)}_getTransformedByInsertion(e,t,o=!1){if(o&&this.containsPosition(e))return[new a(this.start,e),new a(e.getShiftedBy(t),this.end._getTransformedByInsertion(e,t))];{const o=new a(this.start,this.end);return o.start=o.start._getTransformedByInsertion(e,t),o.end=o.end._getTransformedByInsertion(e,t),[o]}}_getTransformedByMove(e,t,o,i=!1){if(this.isCollapsed){const i=this.start._getTransformedByMove(e,t,o);return[new a(i)]}const s=a._createFromPositionAndShift(e,o),r=t._getTransformedByDeletion(e,o);if(this.containsPosition(t)&&!i&&(s.containsPosition(this.start)||s.containsPosition(this.end))){const i=this.start._getTransformedByMove(e,t,o),s=this.end._getTransformedByMove(e,t,o);return[new a(i,s)]}let n;const c=this.getDifference(s);let l=null;const d=this.getIntersection(s);if(1==c.length?l=new a(c[0].start._getTransformedByDeletion(e,o),c[0].end._getTransformedByDeletion(e,o)):2==c.length&&(l=new a(this.start,this.end._getTransformedByDeletion(e,o))),n=l?l._getTransformedByInsertion(r,o,null!==d||i):[],d){const e=new a(d.start._getCombined(s.start,r),d.end._getCombined(s.start,r));2==n.length?n.splice(1,0,e):n.push(e)}return n}_getTransformedByDeletion(e,t){let o=this.start._getTransformedByDeletion(e,t),i=this.end._getTransformedByDeletion(e,t);return null==o&&null==i?null:(null==o&&(o=e),null==i&&(i=e),new a(o,i))}static _createFromPositionAndShift(e,t){const o=e,i=e.getShiftedBy(t);return t>0?new this(o,i):new this(i,o)}static _createIn(e){return new this(i.a._createAt(e,0),i.a._createAt(e,e.maxOffset))}static _createOn(e){return this._createFromPositionAndShift(i.a._createBefore(e),e.offsetSize)}static _createFromRanges(e){if(0===e.length)throw new r.a("range-create-from-ranges-empty-array",null);if(1==e.length)return e[0].clone();const t=e[0];e.sort((e,t)=>e.start.isAfter(t.start)?1:-1);const o=e.indexOf(t),s=new this(t.start,t.end);if(o>0)for(let t=o-1;e[t].end.isEqual(s.start);t++)s.start=i.a._createAt(e[t].start);for(let t=o+1;t<e.length&&e[t].start.isEqual(s.end);t++)s.end=i.a._createAt(e[t].end);return s}static fromJSON(e,t){return new this(i.a.fromJSON(e.start,t),i.a.fromJSON(e.end,t))}}},"./packages/ckeditor5-engine/src/model/schema.js":function(e,t,o){"use strict";o.d(t,"b",(function(){return u})),o.d(t,"a",(function(){return h}));var i=o("./packages/ckeditor5-utils/src/ckeditorerror.js"),s=o("./packages/ckeditor5-utils/src/observablemixin.js"),r=o("./packages/ckeditor5-utils/src/mix.js"),n=o("./packages/ckeditor5-engine/src/model/range.js"),a=o("./packages/ckeditor5-engine/src/model/position.js"),c=o("./packages/ckeditor5-engine/src/model/element.js"),l=o("./packages/ckeditor5-engine/src/model/text.js"),d=o("./packages/ckeditor5-engine/src/model/treewalker.js");class u{constructor(){this._sourceDefinitions={},this._attributeProperties={},this.decorate("checkChild"),this.decorate("checkAttribute"),this.on("checkAttribute",(e,t)=>{t[0]=new h(t[0])},{priority:"highest"}),this.on("checkChild",(e,t)=>{t[0]=new h(t[0]),t[1]=this.getDefinition(t[1])},{priority:"highest"})}register(e,t){if(this._sourceDefinitions[e])throw new i.a("schema-cannot-register-item-twice",this,{itemName:e});this._sourceDefinitions[e]=[Object.assign({},t)],this._clearCache()}extend(e,t){if(!this._sourceDefinitions[e])throw new i.a("schema-cannot-extend-missing-item",this,{itemName:e});this._sourceDefinitions[e].push(Object.assign({},t)),this._clearCache()}getDefinitions(){return this._compiledDefinitions||this._compile(),this._compiledDefinitions}getDefinition(e){let t;return t="string"==typeof e?e:e.is&&(e.is("$text")||e.is("$textProxy"))?"$text":e.name,this.getDefinitions()[t]}isRegistered(e){return!!this.getDefinition(e)}isBlock(e){const t=this.getDefinition(e);return!(!t||!t.isBlock)}isLimit(e){const t=this.getDefinition(e);return!!t&&!(!t.isLimit&&!t.isObject)}isObject(e){const t=this.getDefinition(e);return!!t&&!!(t.isObject||t.isLimit&&t.isSelectable&&t.isContent)}isInline(e){const t=this.getDefinition(e);return!(!t||!t.isInline)}isSelectable(e){const t=this.getDefinition(e);return!!t&&!(!t.isSelectable&&!t.isObject)}isContent(e){const t=this.getDefinition(e);return!!t&&!(!t.isContent&&!t.isObject)}checkChild(e,t){return!!t&&this._checkContextMatch(t,e)}checkAttribute(e,t){const o=this.getDefinition(e.last);return!!o&&o.allowAttributes.includes(t)}checkMerge(e,t=null){if(e instanceof a.a){const t=e.nodeBefore,o=e.nodeAfter;if(!(t instanceof c.a))throw new i.a("schema-check-merge-no-element-before",this);if(!(o instanceof c.a))throw new i.a("schema-check-merge-no-element-after",this);return this.checkMerge(t,o)}for(const o of t.getChildren())if(!this.checkChild(e,o))return!1;return!0}addChildCheck(e){this.on("checkChild",(t,[o,i])=>{if(!i)return;const s=e(o,i);"boolean"==typeof s&&(t.stop(),t.return=s)},{priority:"high"})}addAttributeCheck(e){this.on("checkAttribute",(t,[o,i])=>{const s=e(o,i);"boolean"==typeof s&&(t.stop(),t.return=s)},{priority:"high"})}setAttributeProperties(e,t){this._attributeProperties[e]=Object.assign(this.getAttributeProperties(e),t)}getAttributeProperties(e){return this._attributeProperties[e]||{}}getLimitElement(e){let t;if(e instanceof a.a)t=e.parent;else{t=(e instanceof n.a?[e]:Array.from(e.getRanges())).reduce((e,t)=>{const o=t.getCommonAncestor();return e?e.getCommonAncestor(o,{includeSelf:!0}):o},null)}for(;!this.isLimit(t)&&t.parent;)t=t.parent;return t}checkAttributeInSelection(e,t){if(e.isCollapsed){const o=[...e.getFirstPosition().getAncestors(),new l.a("",e.getAttributes())];return this.checkAttribute(o,t)}{const o=e.getRanges();for(const e of o)for(const o of e)if(this.checkAttribute(o.item,t))return!0}return!1}*getValidRanges(e,t){e=function*(e){for(const t of e)yield*t.getMinimalFlatRanges()}(e);for(const o of e)yield*this._getValidRangesForRange(o,t)}getNearestSelectionRange(e,t="both"){if(this.checkChild(e,"$text"))return new n.a(e);let o,i;const s=e.getAncestors().reverse().find(e=>this.isLimit(e))||e.root;"both"!=t&&"backward"!=t||(o=new d.a({boundaries:n.a._createIn(s),startPosition:e,direction:"backward"})),"both"!=t&&"forward"!=t||(i=new d.a({boundaries:n.a._createIn(s),startPosition:e}));for(const e of function*(e,t){let o=!1;for(;!o;){if(o=!0,e){const t=e.next();t.done||(o=!1,yield{walker:e,value:t.value})}if(t){const e=t.next();e.done||(o=!1,yield{walker:t,value:e.value})}}}(o,i)){const t=e.walker==o?"elementEnd":"elementStart",i=e.value;if(i.type==t&&this.isObject(i.item))return n.a._createOn(i.item);if(this.checkChild(i.nextPosition,"$text"))return new n.a(i.nextPosition)}return null}findAllowedParent(e,t){let o=e.parent;for(;o;){if(this.checkChild(o,t))return o;if(this.isLimit(o))return null;o=o.parent}return null}removeDisallowedAttributes(e,t){for(const o of e)if(o.is("$text"))P(this,o,t);else{const e=n.a._createIn(o).getPositions();for(const o of e){P(this,o.nodeBefore||o.parent,t)}}}createContext(e){return new h(e)}_clearCache(){this._compiledDefinitions=null}_compile(){const e={},t=this._sourceDefinitions,o=Object.keys(t);for(const i of o)e[i]=p(t[i],i);for(const t of o)g(e,t);for(const t of o)f(e,t);for(const t of o)m(e,t);for(const t of o)k(e,t),b(e,t);for(const t of o)_(e,t),w(e,t),v(e,t);this._compiledDefinitions=e}_checkContextMatch(e,t,o=t.length-1){const i=t.getItem(o);if(e.allowIn.includes(i.name)){if(0==o)return!0;{const e=this.getDefinition(i);return this._checkContextMatch(e,t,o-1)}}return!1}*_getValidRangesForRange(e,t){let o=e.start,i=e.start;for(const s of e.getItems({shallow:!0}))s.is("element")&&(yield*this._getValidRangesForRange(n.a._createIn(s),t)),this.checkAttribute(s,t)||(o.isEqual(i)||(yield new n.a(o,i)),o=a.a._createAfter(s)),i=a.a._createAfter(s);o.isEqual(i)||(yield new n.a(o,i))}}Object(r.a)(u,s.a);class h{constructor(e){if(e instanceof h)return e;"string"==typeof e?e=[e]:Array.isArray(e)||(e=e.getAncestors({includeSelf:!0})),this._items=e.map(x)}get length(){return this._items.length}get last(){return this._items[this._items.length-1]}[Symbol.iterator](){return this._items[Symbol.iterator]()}push(e){const t=new h([e]);return t._items=[...this._items,...t._items],t}getItem(e){return this._items[e]}*getNames(){yield*this._items.map(e=>e.name)}endsWith(e){return Array.from(this.getNames()).join(" ").endsWith(e)}startsWith(e){return Array.from(this.getNames()).join(" ").startsWith(e)}}function p(e,t){const o={name:t,allowIn:[],allowContentOf:[],allowWhere:[],allowAttributes:[],allowAttributesOf:[],allowChildren:[],inheritTypesFrom:[]};return function(e,t){for(const o of e){const e=Object.keys(o).filter(e=>e.startsWith("is"));for(const i of e)t[i]=o[i]}}(e,o),y(e,o,"allowIn"),y(e,o,"allowContentOf"),y(e,o,"allowWhere"),y(e,o,"allowAttributes"),y(e,o,"allowAttributesOf"),y(e,o,"allowChildren"),y(e,o,"inheritTypesFrom"),function(e,t){for(const o of e){const e=o.inheritAllFrom;e&&(t.allowContentOf.push(e),t.allowWhere.push(e),t.allowAttributesOf.push(e),t.inheritTypesFrom.push(e))}}(e,o),o}function g(e,t){const o=e[t];for(const i of o.allowChildren){const o=e[i];o&&o.allowIn.push(t)}o.allowChildren.length=0}function f(e,t){for(const o of e[t].allowContentOf)if(e[o]){j(e,o).forEach(e=>{e.allowIn.push(t)})}delete e[t].allowContentOf}function m(e,t){for(const o of e[t].allowWhere){const i=e[o];if(i){const o=i.allowIn;e[t].allowIn.push(...o)}}delete e[t].allowWhere}function k(e,t){for(const o of e[t].allowAttributesOf){const i=e[o];if(i){const o=i.allowAttributes;e[t].allowAttributes.push(...o)}}delete e[t].allowAttributesOf}function b(e,t){const o=e[t];for(const t of o.inheritTypesFrom){const i=e[t];if(i){const e=Object.keys(i).filter(e=>e.startsWith("is"));for(const t of e)t in o||(o[t]=i[t])}}delete o.inheritTypesFrom}function _(e,t){const o=e[t],i=o.allowIn.filter(t=>e[t]);o.allowIn=Array.from(new Set(i))}function w(e,t){const o=e[t];for(const i of o.allowIn){e[i].allowChildren.push(t)}}function v(e,t){const o=e[t];o.allowAttributes=Array.from(new Set(o.allowAttributes))}function y(e,t,o){for(const i of e)"string"==typeof i[o]?t[o].push(i[o]):Array.isArray(i[o])&&t[o].push(...i[o])}function j(e,t){const o=e[t];return(i=e,Object.keys(i).map(e=>i[e])).filter(e=>e.allowIn.includes(o.name));var i}function x(e){return"string"==typeof e||e.is("documentFragment")?{name:"string"==typeof e?e:"$documentFragment",*getAttributeKeys(){},getAttribute(){}}:{name:e.is("element")?e.name:"$text",*getAttributeKeys(){yield*e.getAttributeKeys()},getAttribute:t=>e.getAttribute(t)}}function P(e,t,o){for(const i of t.getAttributeKeys())e.checkAttribute(t,i)||o.removeAttribute(i,t)}},"./packages/ckeditor5-engine/src/model/selection.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return d}));var i=o("./packages/ckeditor5-engine/src/model/position.js"),s=o("./packages/ckeditor5-engine/src/model/node.js"),r=o("./packages/ckeditor5-engine/src/model/range.js"),n=o("./packages/ckeditor5-utils/src/emittermixin.js"),a=o("./packages/ckeditor5-utils/src/ckeditorerror.js"),c=o("./packages/ckeditor5-utils/src/mix.js"),l=o("./packages/ckeditor5-utils/src/isiterable.js");class d{constructor(e,t,o){this._lastRangeBackward=!1,this._ranges=[],this._attrs=new Map,e&&this.setTo(e,t,o)}get anchor(){if(this._ranges.length>0){const e=this._ranges[this._ranges.length-1];return this._lastRangeBackward?e.end:e.start}return null}get focus(){if(this._ranges.length>0){const e=this._ranges[this._ranges.length-1];return this._lastRangeBackward?e.start:e.end}return null}get isCollapsed(){return 1===this._ranges.length&&this._ranges[0].isCollapsed}get rangeCount(){return this._ranges.length}get isBackward(){return!this.isCollapsed&&this._lastRangeBackward}isEqual(e){if(this.rangeCount!=e.rangeCount)return!1;if(0===this.rangeCount)return!0;if(!this.anchor.isEqual(e.anchor)||!this.focus.isEqual(e.focus))return!1;for(const t of this._ranges){let o=!1;for(const i of e._ranges)if(t.isEqual(i)){o=!0;break}if(!o)return!1}return!0}*getRanges(){for(const e of this._ranges)yield new r.a(e.start,e.end)}getFirstRange(){let e=null;for(const t of this._ranges)e&&!t.start.isBefore(e.start)||(e=t);return e?new r.a(e.start,e.end):null}getLastRange(){let e=null;for(const t of this._ranges)e&&!t.end.isAfter(e.end)||(e=t);return e?new r.a(e.start,e.end):null}getFirstPosition(){const e=this.getFirstRange();return e?e.start.clone():null}getLastPosition(){const e=this.getLastRange();return e?e.end.clone():null}setTo(e,t,o){if(null===e)this._setRanges([]);else if(e instanceof d)this._setRanges(e.getRanges(),e.isBackward);else if(e&&"function"==typeof e.getRanges)this._setRanges(e.getRanges(),e.isBackward);else if(e instanceof r.a)this._setRanges([e],!!t&&!!t.backward);else if(e instanceof i.a)this._setRanges([new r.a(e)]);else if(e instanceof s.a){const s=!!o&&!!o.backward;let n;if("in"==t)n=r.a._createIn(e);else if("on"==t)n=r.a._createOn(e);else{if(void 0===t)throw new a.a("model-selection-setto-required-second-parameter",[this,e]);n=new r.a(i.a._createAt(e,t))}this._setRanges([n],s)}else{if(!Object(l.a)(e))throw new a.a("model-selection-setto-not-selectable",[this,e]);this._setRanges(e,t&&!!t.backward)}}_setRanges(e,t=!1){const o=(e=Array.from(e)).some(t=>{if(!(t instanceof r.a))throw new a.a("model-selection-set-ranges-not-range",[this,e]);return this._ranges.every(e=>!e.isEqual(t))});if(e.length!==this._ranges.length||o){this._removeAllRanges();for(const t of e)this._pushRange(t);this._lastRangeBackward=!!t,this.fire("change:range",{directChange:!0})}}setFocus(e,t){if(null===this.anchor)throw new a.a("model-selection-setfocus-no-ranges",[this,e]);const o=i.a._createAt(e,t);if("same"==o.compareWith(this.focus))return;const s=this.anchor;this._ranges.length&&this._popRange(),"before"==o.compareWith(s)?(this._pushRange(new r.a(o,s)),this._lastRangeBackward=!0):(this._pushRange(new r.a(s,o)),this._lastRangeBackward=!1),this.fire("change:range",{directChange:!0})}getAttribute(e){return this._attrs.get(e)}getAttributes(){return this._attrs.entries()}getAttributeKeys(){return this._attrs.keys()}hasAttribute(e){return this._attrs.has(e)}removeAttribute(e){this.hasAttribute(e)&&(this._attrs.delete(e),this.fire("change:attribute",{attributeKeys:[e],directChange:!0}))}setAttribute(e,t){this.getAttribute(e)!==t&&(this._attrs.set(e,t),this.fire("change:attribute",{attributeKeys:[e],directChange:!0}))}getSelectedElement(){return 1!==this.rangeCount?null:this.getFirstRange().getContainedElement()}is(e){return"selection"===e||"model:selection"===e}*getSelectedBlocks(){const e=new WeakSet;for(const t of this.getRanges()){const o=p(t.start,e);o&&g(o,t)&&(yield o);for(const o of t.getWalker()){const i=o.item;"elementEnd"==o.type&&h(i,e,t)&&(yield i)}const s=p(t.end,e);s&&!t.end.isTouching(i.a._createAt(s,0))&&g(s,t)&&(yield s)}}containsEntireContent(e=this.anchor.root){const t=i.a._createAt(e,0),o=i.a._createAt(e,"end");return t.isTouching(this.getFirstPosition())&&o.isTouching(this.getLastPosition())}_pushRange(e){this._checkRange(e),this._ranges.push(new r.a(e.start,e.end))}_checkRange(e){for(let t=0;t<this._ranges.length;t++)if(e.isIntersecting(this._ranges[t]))throw new a.a("model-selection-range-intersects",[this,e],{addedRange:e,intersectingRange:this._ranges[t]})}_removeAllRanges(){for(;this._ranges.length>0;)this._popRange()}_popRange(){this._ranges.pop()}}function u(e,t){return!t.has(e)&&(t.add(e),e.root.document.model.schema.isBlock(e)&&e.parent)}function h(e,t,o){return u(e,t)&&g(e,o)}function p(e,t){const o=e.parent.root.document.model.schema,i=e.parent.getAncestors({parentFirst:!0,includeSelf:!0});let s=!1;const r=i.find(e=>!s&&(s=o.isLimit(e),!s&&u(e,t)));return i.forEach(e=>t.add(e)),r}function g(e,t){const o=function(e){const t=e.root.document.model.schema;let o=e.parent;for(;o;){if(t.isBlock(o))return o;o=o.parent}}(e);if(!o)return!0;return!t.containsRange(r.a._createOn(o),!0)}Object(c.a)(d,n.c)},"./packages/ckeditor5-engine/src/model/text.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return s}));var i=o("./packages/ckeditor5-engine/src/model/node.js");class s extends i.a{constructor(e,t){super(t),this._data=e||""}get offsetSize(){return this.data.length}get data(){return this._data}is(e){return"$text"===e||"model:$text"===e||"text"===e||"model:text"===e||"node"===e||"model:node"===e}toJSON(){const e=super.toJSON();return e.data=this.data,e}_clone(){return new s(this.data,this.getAttributes())}static fromJSON(e){return new s(e.data,e.attributes)}}},"./packages/ckeditor5-engine/src/model/textproxy.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return s}));var i=o("./packages/ckeditor5-utils/src/ckeditorerror.js");class s{constructor(e,t,o){if(this.textNode=e,t<0||t>e.offsetSize)throw new i.a("model-textproxy-wrong-offsetintext",this);if(o<0||t+o>e.offsetSize)throw new i.a("model-textproxy-wrong-length",this);this.data=e.data.substring(t,t+o),this.offsetInText=t}get startOffset(){return null!==this.textNode.startOffset?this.textNode.startOffset+this.offsetInText:null}get offsetSize(){return this.data.length}get endOffset(){return null!==this.startOffset?this.startOffset+this.offsetSize:null}get isPartial(){return this.offsetSize!==this.textNode.offsetSize}get parent(){return this.textNode.parent}get root(){return this.textNode.root}is(e){return"$textProxy"===e||"model:$textProxy"===e||"textProxy"===e||"model:textProxy"===e}getPath(){const e=this.textNode.getPath();return e.length>0&&(e[e.length-1]+=this.offsetInText),e}getAncestors(e={includeSelf:!1,parentFirst:!1}){const t=[];let o=e.includeSelf?this:this.parent;for(;o;)t[e.parentFirst?"push":"unshift"](o),o=o.parent;return t}hasAttribute(e){return this.textNode.hasAttribute(e)}getAttribute(e){return this.textNode.getAttribute(e)}getAttributes(){return this.textNode.getAttributes()}getAttributeKeys(){return this.textNode.getAttributeKeys()}}},"./packages/ckeditor5-engine/src/model/treewalker.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return c}));var i=o("./packages/ckeditor5-engine/src/model/text.js"),s=o("./packages/ckeditor5-engine/src/model/textproxy.js"),r=o("./packages/ckeditor5-engine/src/model/element.js"),n=o("./packages/ckeditor5-engine/src/model/position.js"),a=o("./packages/ckeditor5-utils/src/ckeditorerror.js");class c{constructor(e={}){if(!e.boundaries&&!e.startPosition)throw new a.a("model-tree-walker-no-start-position",null);const t=e.direction||"forward";if("forward"!=t&&"backward"!=t)throw new a.a("model-tree-walker-unknown-direction",e,{direction:t});this.direction=t,this.boundaries=e.boundaries||null,e.startPosition?this.position=e.startPosition.clone():this.position=n.a._createAt(this.boundaries["backward"==this.direction?"end":"start"]),this.position.stickiness="toNone",this.singleCharacters=!!e.singleCharacters,this.shallow=!!e.shallow,this.ignoreElementEnd=!!e.ignoreElementEnd,this._boundaryStartParent=this.boundaries?this.boundaries.start.parent:null,this._boundaryEndParent=this.boundaries?this.boundaries.end.parent:null,this._visitedParent=this.position.parent}[Symbol.iterator](){return this}skip(e){let t,o,i,s;do{i=this.position,s=this._visitedParent,({done:t,value:o}=this.next())}while(!t&&e(o));t||(this.position=i,this._visitedParent=s)}next(){return"forward"==this.direction?this._next():this._previous()}_next(){const e=this.position,t=this.position.clone(),o=this._visitedParent;if(null===o.parent&&t.offset===o.maxOffset)return{done:!0};if(o===this._boundaryEndParent&&t.offset==this.boundaries.end.offset)return{done:!0};const a=t.parent,c=Object(n.d)(t,a),d=c||Object(n.b)(t,a,c);if(d instanceof r.a)return this.shallow?t.offset++:(t.path.push(0),this._visitedParent=d),this.position=t,l("elementStart",d,e,t,1);if(d instanceof i.a){let i;if(this.singleCharacters)i=1;else{let e=d.endOffset;this._boundaryEndParent==o&&this.boundaries.end.offset<e&&(e=this.boundaries.end.offset),i=e-t.offset}const r=t.offset-d.startOffset,n=new s.a(d,r,i);return t.offset+=i,this.position=t,l("text",n,e,t,i)}return t.path.pop(),t.offset++,this.position=t,this._visitedParent=o.parent,this.ignoreElementEnd?this._next():l("elementEnd",o,e,t)}_previous(){const e=this.position,t=this.position.clone(),o=this._visitedParent;if(null===o.parent&&0===t.offset)return{done:!0};if(o==this._boundaryStartParent&&t.offset==this.boundaries.start.offset)return{done:!0};const a=t.parent,c=Object(n.d)(t,a),d=c||Object(n.c)(t,a,c);if(d instanceof r.a)return t.offset--,this.shallow?(this.position=t,l("elementStart",d,e,t,1)):(t.path.push(d.maxOffset),this.position=t,this._visitedParent=d,this.ignoreElementEnd?this._previous():l("elementEnd",d,e,t));if(d instanceof i.a){let i;if(this.singleCharacters)i=1;else{let e=d.startOffset;this._boundaryStartParent==o&&this.boundaries.start.offset>e&&(e=this.boundaries.start.offset),i=t.offset-e}const r=t.offset-d.startOffset,n=new s.a(d,r-i,i);return t.offset-=i,this.position=t,l("text",n,e,t,i)}return t.path.pop(),this.position=t,this._visitedParent=o.parent,l("elementStart",o,e,t,1)}}function l(e,t,o,i,s){return{done:!1,value:{type:e,item:t,previousPosition:o,nextPosition:i,length:s}}}},"./packages/ckeditor5-engine/src/model/utils/autoparagraphing.js":function(e,t,o){"use strict";function i(e){const{schema:t,document:o}=e.model;for(const i of o.getRootNames()){const s=o.getRoot(i);if(s.isEmpty&&!t.checkChild(s,"$text")&&t.checkChild(s,"paragraph"))return e.insertElement("paragraph",s),!0}return!1}function s(e,t,o){const i=o.createContext(e);return!!o.checkChild(i,"paragraph")&&!!o.checkChild(i.push("paragraph"),t)}function r(e,t){const o=t.createElement("paragraph");return t.insert(o,e),t.createPositionAt(o,0)}o.d(t,"a",(function(){return i})),o.d(t,"b",(function(){return s})),o.d(t,"c",(function(){return r}))},"./packages/ckeditor5-engine/src/view/attributeelement.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return r}));var i=o("./packages/ckeditor5-engine/src/view/element.js"),s=o("./packages/ckeditor5-utils/src/ckeditorerror.js");class r extends i.a{constructor(e,t,o,i){super(e,t,o,i),this.getFillerOffset=n,this._priority=10,this._id=null,this._clonesGroup=null}get priority(){return this._priority}get id(){return this._id}getElementsWithSameId(){if(null===this.id)throw new s.a("attribute-element-get-elements-with-same-id-no-id",this);return new Set(this._clonesGroup)}is(e,t=null){return t?t===this.name&&("attributeElement"===e||"view:attributeElement"===e||"element"===e||"view:element"===e):"attributeElement"===e||"view:attributeElement"===e||"element"===e||"view:element"===e||"node"===e||"view:node"===e}isSimilar(e){return null!==this.id||null!==e.id?this.id===e.id:super.isSimilar(e)&&this.priority==e.priority}_clone(e){const t=super._clone(e);return t._priority=this._priority,t._id=this._id,t}}function n(){if(a(this))return null;let e=this.parent;for(;e&&e.is("attributeElement");){if(a(e)>1)return null;e=e.parent}return!e||a(e)>1?null:this.childCount}function a(e){return Array.from(e.getChildren()).filter(e=>!e.is("uiElement")).length}r.DEFAULT_PRIORITY=10},"./packages/ckeditor5-engine/src/view/containerelement.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return s})),o.d(t,"b",(function(){return r}));var i=o("./packages/ckeditor5-engine/src/view/element.js");class s extends i.a{constructor(e,t,o,i){super(e,t,o,i),this.getFillerOffset=r}is(e,t=null){return t?t===this.name&&("containerElement"===e||"view:containerElement"===e||"element"===e||"view:element"===e):"containerElement"===e||"view:containerElement"===e||"element"===e||"view:element"===e||"node"===e||"view:node"===e}}function r(){const e=[...this.getChildren()],t=e[this.childCount-1];if(t&&t.is("element","br"))return this.childCount;for(const t of e)if(!t.is("uiElement"))return null;return this.childCount}},"./packages/ckeditor5-engine/src/view/document.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return b}));var i=o("./packages/ckeditor5-engine/src/view/documentselection.js"),s=o("./packages/ckeditor5-utils/src/collection.js"),r=o("./packages/ckeditor5-utils/src/mix.js"),n=o("./packages/ckeditor5-utils/src/eventinfo.js"),a=o("./packages/ckeditor5-utils/src/ckeditorerror.js"),c=o("./packages/ckeditor5-utils/src/emittermixin.js"),l=o("./packages/ckeditor5-utils/src/toarray.js"),d=o("./packages/ckeditor5-engine/src/view/observer/bubblingeventinfo.js");const u=Symbol("bubbling contexts");var h={fire(e,...t){try{const o=e instanceof n.a?e:new n.a(this,e),i=m(this);if(!i.size)return;if(p(o,"capturing",this),g(i,"$capture",o,...t))return o.return;const s=o.startRange||this.selection.getFirstRange(),r=s?s.getContainedElement():null,a=!!r&&Boolean(f(i,r));let c=r||function(e){if(!e)return null;const t=e.start.parent,o=e.end.parent,i=t.getPath(),s=o.getPath();return i.length>s.length?t:o}(s);if(p(o,"atTarget",c),!a){if(g(i,"$text",o,...t))return o.return;p(o,"bubbling",c)}for(;c;){if(c.is("rootElement")){if(g(i,"$root",o,...t))return o.return}else if(c.is("element")&&g(i,c.name,o,...t))return o.return;if(g(i,c,o,...t))return o.return;c=c.parent,p(o,"bubbling",c)}return p(o,"bubbling",this),g(i,"$document",o,...t),o.return}catch(e){a.a.rethrowUnexpectedError(e,this)}},_addEventListener(e,t,o){const i=Object(l.a)(o.context||"$document"),s=m(this);for(const r of i){let i=s.get(r);i||(i=Object.create(c.c),s.set(r,i)),this.listenTo(i,e,t,o)}},_removeEventListener(e,t){const o=m(this);for(const i of o.values())this.stopListening(i,e,t)}};function p(e,t,o){e instanceof d.a&&(e._eventPhase=t,e._currentTarget=o)}function g(e,t,o,...i){const s="string"==typeof t?e.get(t):f(e,t);return!!s&&(s.fire(o,...i),o.stop.called)}function f(e,t){for(const[o,i]of e)if("function"==typeof o&&o(t))return i;return null}function m(e){return e[u]||(e[u]=new Map),e[u]}var k=o("./packages/ckeditor5-utils/src/observablemixin.js");class b{constructor(e){this.selection=new i.a,this.roots=new s.a({idProperty:"rootName"}),this.stylesProcessor=e,this.set("isReadOnly",!1),this.set("isFocused",!1),this.set("isSelecting",!1),this.set("isComposing",!1),this._postFixers=new Set}getRoot(e="main"){return this.roots.get(e)}registerPostFixer(e){this._postFixers.add(e)}destroy(){this.roots.map(e=>e.destroy()),this.stopListening()}_callPostFixers(e){let t=!1;do{for(const o of this._postFixers)if(t=o(e),t)break}while(t)}}Object(r.a)(b,h),Object(r.a)(b,k.a)},"./packages/ckeditor5-engine/src/view/documentfragment.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return c}));var i=o("./packages/ckeditor5-engine/src/view/text.js"),s=o("./packages/ckeditor5-engine/src/view/textproxy.js"),r=o("./packages/ckeditor5-utils/src/mix.js"),n=o("./packages/ckeditor5-utils/src/isiterable.js"),a=o("./packages/ckeditor5-utils/src/emittermixin.js");class c{constructor(e,t){this.document=e,this._children=[],t&&this._insertChild(0,t)}[Symbol.iterator](){return this._children[Symbol.iterator]()}get childCount(){return this._children.length}get isEmpty(){return 0===this.childCount}get root(){return this}get parent(){return null}is(e){return"documentFragment"===e||"view:documentFragment"===e}_appendChild(e){return this._insertChild(this.childCount,e)}getChild(e){return this._children[e]}getChildIndex(e){return this._children.indexOf(e)}getChildren(){return this._children[Symbol.iterator]()}_insertChild(e,t){this._fireChange("children",this);let o=0;const r=function(e,t){if("string"==typeof t)return[new i.a(e,t)];Object(n.a)(t)||(t=[t]);return Array.from(t).map(t=>"string"==typeof t?new i.a(e,t):t instanceof s.a?new i.a(e,t.data):t)}(this.document,t);for(const t of r)null!==t.parent&&t._remove(),t.parent=this,this._children.splice(e,0,t),e++,o++;return o}_removeChildren(e,t=1){this._fireChange("children",this);for(let o=e;o<e+t;o++)this._children[o].parent=null;return this._children.splice(e,t)}_fireChange(e,t){this.fire("change:"+e,t)}}Object(r.a)(c,a.c)},"./packages/ckeditor5-engine/src/view/documentselection.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return n}));var i=o("./packages/ckeditor5-engine/src/view/selection.js"),s=o("./packages/ckeditor5-utils/src/mix.js"),r=o("./packages/ckeditor5-utils/src/emittermixin.js");class n{constructor(e=null,t,o){this._selection=new i.a,this._selection.delegate("change").to(this),this._selection.setTo(e,t,o)}get isFake(){return this._selection.isFake}get fakeSelectionLabel(){return this._selection.fakeSelectionLabel}get anchor(){return this._selection.anchor}get focus(){return this._selection.focus}get isCollapsed(){return this._selection.isCollapsed}get rangeCount(){return this._selection.rangeCount}get isBackward(){return this._selection.isBackward}get editableElement(){return this._selection.editableElement}get _ranges(){return this._selection._ranges}*getRanges(){yield*this._selection.getRanges()}getFirstRange(){return this._selection.getFirstRange()}getLastRange(){return this._selection.getLastRange()}getFirstPosition(){return this._selection.getFirstPosition()}getLastPosition(){return this._selection.getLastPosition()}getSelectedElement(){return this._selection.getSelectedElement()}isEqual(e){return this._selection.isEqual(e)}isSimilar(e){return this._selection.isSimilar(e)}is(e){return"selection"===e||"documentSelection"==e||"view:selection"==e||"view:documentSelection"==e}_setTo(e,t,o){this._selection.setTo(e,t,o)}_setFocus(e,t){this._selection.setFocus(e,t)}}Object(s.a)(n,r.c)},"./packages/ckeditor5-engine/src/view/domconverter.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return w}));var i=o("./packages/ckeditor5-engine/src/view/text.js"),s=o("./packages/ckeditor5-engine/src/view/element.js"),r=o("./packages/ckeditor5-engine/src/view/uielement.js"),n=o("./packages/ckeditor5-engine/src/view/position.js"),a=o("./packages/ckeditor5-engine/src/view/range.js"),c=o("./packages/ckeditor5-engine/src/view/selection.js"),l=o("./packages/ckeditor5-engine/src/view/documentfragment.js"),d=o("./packages/ckeditor5-engine/src/view/treewalker.js"),u=o("./packages/ckeditor5-engine/src/view/matcher.js"),h=o("./packages/ckeditor5-engine/src/view/filler.js"),p=o("./packages/ckeditor5-utils/src/dom/global.js");function g(e){let t=0;for(;e.previousSibling;)e=e.previousSibling,t++;return t}function f(e){const t=[];for(;e&&e.nodeType!=Node.DOCUMENT_NODE;)t.unshift(e),e=e.parentNode;return t}var m=o("./packages/ckeditor5-utils/src/dom/istext.js");const k=Object(h.a)(document),b=Object(h.e)(document),_=Object(h.d)(document);class w{constructor(e,t={}){this.document=e,this.renderingMode=t.renderingMode||"editing",this.experimentalRenderingMode=!1,this.blockFillerMode=t.blockFillerMode||("editing"===this.renderingMode?"br":"nbsp"),this.preElements=["pre"],this.blockElements=["address","article","aside","blockquote","caption","center","dd","details","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","legend","li","main","menu","nav","ol","p","pre","section","summary","table","tbody","td","tfoot","th","thead","tr","ul"],this.inlineObjectElements=["object","iframe","input","button","textarea","select","option","video","embed","audio","img","canvas"],this._domToViewMapping=new WeakMap,this._viewToDomMapping=new WeakMap,this._fakeSelectionMapping=new WeakMap,this._rawContentElementMatcher=new u.a,this._encounteredRawContentDomNodes=new WeakSet}bindFakeSelection(e,t){this._fakeSelectionMapping.set(e,new c.a(t))}fakeSelectionToView(e){return this._fakeSelectionMapping.get(e)}bindElements(e,t){this._domToViewMapping.set(e,t),this._viewToDomMapping.set(t,e)}unbindDomElement(e){const t=this._domToViewMapping.get(e);if(t){this._domToViewMapping.delete(e),this._viewToDomMapping.delete(t);for(const t of e.childNodes)this.unbindDomElement(t)}}bindDocumentFragments(e,t){this._domToViewMapping.set(e,t),this._viewToDomMapping.set(t,e)}shouldRenderAttribute(e,t){return!this.experimentalRenderingMode||"data"===this.renderingMode||!(e.toLowerCase().startsWith("on")||t.match(/(\b)(on\S+)(\s*)=|javascript:|(<\s*)(\/*)script/i)||t.match(/data:(?!image\/(png|jpeg|gif|webp))/i))}setContentOf(e,t){if(!this.experimentalRenderingMode||"data"===this.renderingMode)return void(e.innerHTML=t);const o=(new DOMParser).parseFromString(t,"text/html"),i=o.createDocumentFragment(),s=o.body.childNodes;for(;s.length>0;)i.appendChild(s[0]);const r=o.createTreeWalker(i,NodeFilter.SHOW_ELEMENT),n=[];let a;for(;a=r.nextNode();)n.push(a);for(const e of n){for(const t of e.getAttributeNames()){const o=e.getAttribute(t);this.shouldRenderAttribute(t,o)||e.removeAttribute(t)}const t=e.tagName.toLowerCase();this._shouldRenameElement(t)&&e.replaceWith(this._createReplacementDomElement(t,e))}for(;e.firstChild;)e.firstChild.remove();e.append(i)}viewToDom(e,t,o={}){if(e.is("$text")){const o=this._processDataFromViewText(e);return t.createTextNode(o)}{if(this.mapViewToDom(e))return this.mapViewToDom(e);let i;if(e.is("documentFragment"))i=t.createDocumentFragment(),o.bind&&this.bindDocumentFragments(i,e);else{if(e.is("uiElement"))return i="$comment"===e.name?t.createComment(e.getCustomProperty("$rawContent")):e.render(t,this),o.bind&&this.bindElements(i,e),i;i=this._shouldRenameElement(e.name)?this._createReplacementDomElement(e.name):e.hasAttribute("xmlns")?t.createElementNS(e.getAttribute("xmlns"),e.name):t.createElement(e.name),e.is("rawElement")&&e.render(i,this),o.bind&&this.bindElements(i,e);for(const t of e.getAttributeKeys()){const o=e.getAttribute(t);this.shouldRenderAttribute(t,o)&&i.setAttribute(t,o)}}if(!1!==o.withChildren)for(const s of this.viewChildrenToDom(e,t,o))i.appendChild(s);return i}}*viewChildrenToDom(e,t,o={}){const i=e.getFillerOffset&&e.getFillerOffset();let s=0;for(const r of e.getChildren())i===s&&(yield this._getBlockFiller(t)),yield this.viewToDom(r,t,o),s++;i===s&&(yield this._getBlockFiller(t))}viewRangeToDom(e){const t=this.viewPositionToDom(e.start),o=this.viewPositionToDom(e.end),i=document.createRange();return i.setStart(t.parent,t.offset),i.setEnd(o.parent,o.offset),i}viewPositionToDom(e){const t=e.parent;if(t.is("$text")){const o=this.findCorrespondingDomText(t);if(!o)return null;let i=e.offset;return Object(h.i)(o)&&(i+=h.c),{parent:o,offset:i}}{let o,i,s;if(0===e.offset){if(o=this.mapViewToDom(t),!o)return null;s=o.childNodes[0]}else{const t=e.nodeBefore;if(i=t.is("$text")?this.findCorrespondingDomText(t):this.mapViewToDom(e.nodeBefore),!i)return null;o=i.parentNode,s=i.nextSibling}if(Object(m.a)(s)&&Object(h.i)(s))return{parent:s,offset:h.c};return{parent:o,offset:i?g(i)+1:0}}}domToView(e,t={}){if(this.isBlockFiller(e))return null;const o=this.getHostViewElement(e);if(o)return o;if(this.isComment(e)&&t.skipComments)return null;if(Object(m.a)(e)){if(Object(h.h)(e))return null;{const t=this._processDataFromDomText(e);return""===t?null:new i.a(this.document,t)}}{if(this.mapDomToView(e))return this.mapDomToView(e);let o;if(this.isDocumentFragment(e))o=new l.a(this.document),t.bind&&this.bindDocumentFragments(e,o);else{o=this._createViewElement(e,t),t.bind&&this.bindElements(e,o);const i=e.attributes;if(i)for(let e=i.length-1;e>=0;e--)o._setAttribute(i[e].name,i[e].value);if(this._isViewElementWithRawContent(o,t)||this.isComment(e)){const t=this.isComment(e)?e.data:e.innerHTML;return o._setCustomProperty("$rawContent",t),this._encounteredRawContentDomNodes.add(e),o}}if(!1!==t.withChildren)for(const i of this.domChildrenToView(e,t))o._appendChild(i);return o}}*domChildrenToView(e,t={}){for(let o=0;o<e.childNodes.length;o++){const i=e.childNodes[o],s=this.domToView(i,t);null!==s&&(yield s)}}domSelectionToView(e){if(1===e.rangeCount){let t=e.getRangeAt(0).startContainer;Object(m.a)(t)&&(t=t.parentNode);const o=this.fakeSelectionToView(t);if(o)return o}const t=this.isDomSelectionBackward(e),o=[];for(let t=0;t<e.rangeCount;t++){const i=e.getRangeAt(t),s=this.domRangeToView(i);s&&o.push(s)}return new c.a(o,{backward:t})}domRangeToView(e){const t=this.domPositionToView(e.startContainer,e.startOffset),o=this.domPositionToView(e.endContainer,e.endOffset);return t&&o?new a.a(t,o):null}domPositionToView(e,t=0){if(this.isBlockFiller(e))return this.domPositionToView(e.parentNode,g(e));const o=this.mapDomToView(e);if(o&&(o.is("uiElement")||o.is("rawElement")))return n.a._createBefore(o);if(Object(m.a)(e)){if(Object(h.h)(e))return this.domPositionToView(e.parentNode,g(e));const o=this.findCorrespondingViewText(e);let i=t;return o?(Object(h.i)(e)&&(i-=h.c,i=i<0?0:i),new n.a(o,i)):null}if(0===t){const t=this.mapDomToView(e);if(t)return new n.a(t,0)}else{const o=e.childNodes[t-1],i=Object(m.a)(o)?this.findCorrespondingViewText(o):this.mapDomToView(o);if(i&&i.parent)return new n.a(i.parent,i.index+1)}return null}mapDomToView(e){return this.getHostViewElement(e)||this._domToViewMapping.get(e)}findCorrespondingViewText(e){if(Object(h.h)(e))return null;const t=this.getHostViewElement(e);if(t)return t;const o=e.previousSibling;if(o){if(!this.isElement(o))return null;const e=this.mapDomToView(o);if(e){return e.nextSibling instanceof i.a?e.nextSibling:null}}else{const t=this.mapDomToView(e.parentNode);if(t){const e=t.getChild(0);return e instanceof i.a?e:null}}return null}mapViewToDom(e){return this._viewToDomMapping.get(e)}findCorrespondingDomText(e){const t=e.previousSibling;return t&&this.mapViewToDom(t)?this.mapViewToDom(t).nextSibling:!t&&e.parent&&this.mapViewToDom(e.parent)?this.mapViewToDom(e.parent).childNodes[0]:null}focus(e){const t=this.mapViewToDom(e);if(t&&t.ownerDocument.activeElement!==t){const{scrollX:e,scrollY:o}=p.a.window,i=[];v(t,e=>{const{scrollLeft:t,scrollTop:o}=e;i.push([t,o])}),t.focus(),v(t,e=>{const[t,o]=i.shift();e.scrollLeft=t,e.scrollTop=o}),p.a.window.scrollTo(e,o)}}isElement(e){return e&&e.nodeType==Node.ELEMENT_NODE}isDocumentFragment(e){return e&&e.nodeType==Node.DOCUMENT_FRAGMENT_NODE}isComment(e){return e&&e.nodeType==Node.COMMENT_NODE}isBlockFiller(e){return"br"==this.blockFillerMode?e.isEqualNode(k):!("BR"!==e.tagName||!y(e,this.blockElements)||1!==e.parentNode.childNodes.length)||(e.isEqualNode(_)||function(e,t){return e.isEqualNode(b)&&y(e,t)&&1===e.parentNode.childNodes.length}(e,this.blockElements))}isDomSelectionBackward(e){if(e.isCollapsed)return!1;const t=document.createRange();t.setStart(e.anchorNode,e.anchorOffset),t.setEnd(e.focusNode,e.focusOffset);const o=t.collapsed;return t.detach(),o}getHostViewElement(e){const t=f(e);for(t.pop();t.length;){const e=t.pop(),o=this._domToViewMapping.get(e);if(o&&(o.is("uiElement")||o.is("rawElement")))return o}return null}isDomSelectionCorrect(e){return this._isDomSelectionPositionCorrect(e.anchorNode,e.anchorOffset)&&this._isDomSelectionPositionCorrect(e.focusNode,e.focusOffset)}registerRawContentMatcher(e){this._rawContentElementMatcher.add(e)}_getBlockFiller(e){switch(this.blockFillerMode){case"nbsp":return Object(h.e)(e);case"markedNbsp":return Object(h.d)(e);case"br":return Object(h.a)(e)}}_isDomSelectionPositionCorrect(e,t){if(Object(m.a)(e)&&Object(h.i)(e)&&t<h.c)return!1;if(this.isElement(e)&&Object(h.i)(e.childNodes[t]))return!1;const o=this.mapDomToView(e);return!o||!o.is("uiElement")&&!o.is("rawElement")}_processDataFromViewText(e){let t=e.data;if(e.getAncestors().some(e=>this.preElements.includes(e.name)))return t;if(" "==t.charAt(0)){const o=this._getTouchingInlineViewNode(e,!1);!(o&&o.is("$textProxy")&&this._nodeEndsWithSpace(o))&&o||(t=" "+t.substr(1))}if(" "==t.charAt(t.length-1)){const o=this._getTouchingInlineViewNode(e,!0),i=o&&o.is("$textProxy")&&" "==o.data.charAt(0);" "!=t.charAt(t.length-2)&&o&&!i||(t=t.substr(0,t.length-1)+" ")}return t.replace(/ {2}/g,"  ")}_nodeEndsWithSpace(e){if(e.getAncestors().some(e=>this.preElements.includes(e.name)))return!1;const t=this._processDataFromViewText(e);return" "==t.charAt(t.length-1)}_processDataFromDomText(e){let t=e.data;if(function(e,t){return f(e).some(e=>e.tagName&&t.includes(e.tagName.toLowerCase()))}(e,this.preElements))return Object(h.f)(e);t=t.replace(/[ \n\t\r]{1,}/g," ");const o=this._getTouchingInlineDomNode(e,!1),i=this._getTouchingInlineDomNode(e,!0),s=this._checkShouldLeftTrimDomText(e,o),r=this._checkShouldRightTrimDomText(e,i);s&&(t=t.replace(/^ /,"")),r&&(t=t.replace(/ $/,"")),t=Object(h.f)(new Text(t)),t=t.replace(/ \u00A0/g,"  ");const n=i&&this.isElement(i)&&"BR"!=i.tagName,a=i&&Object(m.a)(i)&&" "==i.data.charAt(0);return(/( |\u00A0)\u00A0$/.test(t)||!i||n||a)&&(t=t.replace(/\u00A0$/," ")),(s||o&&this.isElement(o)&&"BR"!=o.tagName)&&(t=t.replace(/^\u00A0/," ")),t}_checkShouldLeftTrimDomText(e,t){return!t||(this.isElement(t)?"BR"===t.tagName:!this._encounteredRawContentDomNodes.has(e.previousSibling)&&/[^\S\u00A0]/.test(t.data.charAt(t.data.length-1)))}_checkShouldRightTrimDomText(e,t){return!t&&!Object(h.i)(e)}_getTouchingInlineViewNode(e,t){const o=new d.a({startPosition:t?n.a._createAfter(e):n.a._createBefore(e),direction:t?"forward":"backward"});for(const e of o){if(e.item.is("element")&&this.inlineObjectElements.includes(e.item.name))return e.item;if(e.item.is("containerElement"))return null;if(e.item.is("element","br"))return null;if(e.item.is("$textProxy"))return e.item}return null}_getTouchingInlineDomNode(e,t){if(!e.parentNode)return null;const o=t?"firstChild":"lastChild",i=t?"nextSibling":"previousSibling";let s=!0;do{if(!s&&e[o]?e=e[o]:e[i]?(e=e[i],s=!1):(e=e.parentNode,s=!0),!e||this._isBlockElement(e))return null}while(!Object(m.a)(e)&&"BR"!=e.tagName&&!this._isInlineObjectElement(e));return e}_isBlockElement(e){return this.isElement(e)&&this.blockElements.includes(e.tagName.toLowerCase())}_isInlineObjectElement(e){return this.isElement(e)&&this.inlineObjectElements.includes(e.tagName.toLowerCase())}_createViewElement(e,t){if(this.isComment(e))return new r.a(this.document,"$comment");const o=t.keepOriginalCase?e.tagName:e.tagName.toLowerCase();return new s.a(this.document,o)}_isViewElementWithRawContent(e,t){return!1!==t.withChildren&&this._rawContentElementMatcher.match(e)}_shouldRenameElement(e){return this.experimentalRenderingMode&&"editing"==this.renderingMode&&"script"==e}_createReplacementDomElement(e,t=null){const o=document.createElement("span");if(o.setAttribute("data-ck-hidden",e),t){for(;t.firstChild;)o.appendChild(t.firstChild);for(const e of t.getAttributeNames())o.setAttribute(e,t.getAttribute(e))}return o}}function v(e,t){for(;e&&e!=p.a.document;)t(e),e=e.parentNode}function y(e,t){const o=e.parentNode;return o&&o.tagName&&t.includes(o.tagName.toLowerCase())}},"./packages/ckeditor5-engine/src/view/downcastwriter.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return v}));var i=o("./packages/ckeditor5-engine/src/view/position.js"),s=o("./packages/ckeditor5-engine/src/view/range.js"),r=o("./packages/ckeditor5-engine/src/view/selection.js"),n=o("./packages/ckeditor5-engine/src/view/containerelement.js"),a=o("./packages/ckeditor5-engine/src/view/attributeelement.js"),c=o("./packages/ckeditor5-engine/src/view/element.js"),l=o("./packages/ckeditor5-utils/src/ckeditorerror.js"),d=o("./packages/ckeditor5-engine/src/view/node.js");class u extends c.a{constructor(e,t,o,i){super(e,t,o,i),this._isAllowedInsideAttributeElement=!0,this.getFillerOffset=h}is(e,t=null){return t?t===this.name&&("emptyElement"===e||"view:emptyElement"===e||"element"===e||"view:element"===e):"emptyElement"===e||"view:emptyElement"===e||"element"===e||"view:element"===e||"node"===e||"view:node"===e}_insertChild(e,t){if(t&&(t instanceof d.a||Array.from(t).length>0))throw new l.a("view-emptyelement-cannot-add",[this,t])}}function h(){return null}var p=o("./packages/ckeditor5-engine/src/view/uielement.js");class g extends c.a{constructor(e,t,o,i){super(e,t,o,i),this._isAllowedInsideAttributeElement=!0,this.getFillerOffset=f}is(e,t=null){return t?t===this.name&&("rawElement"===e||"view:rawElement"===e||"element"===e||"view:element"===e):"rawElement"===e||"view:rawElement"===e||e===this.name||e==="view:"+this.name||"element"===e||"view:element"===e||"node"===e||"view:node"===e}_insertChild(e,t){if(t&&(t instanceof d.a||Array.from(t).length>0))throw new l.a("view-rawelement-cannot-add",[this,t])}}function f(){return null}var m=o("./packages/ckeditor5-engine/src/view/documentfragment.js"),k=o("./packages/ckeditor5-utils/src/isiterable.js"),b=o("./packages/ckeditor5-engine/src/view/text.js"),_=o("./packages/ckeditor5-engine/src/view/editableelement.js"),w=o("./node_modules/lodash-es/isPlainObject.js");class v{constructor(e){this.document=e,this._cloneGroups=new Map}setSelection(e,t,o){this.document.selection._setTo(e,t,o)}setSelectionFocus(e,t){this.document.selection._setFocus(e,t)}createDocumentFragment(e){return new m.a(this.document,e)}createText(e){return new b.a(this.document,e)}createAttributeElement(e,t,o={}){const i=new a.a(this.document,e,t);return"number"==typeof o.priority&&(i._priority=o.priority),o.id&&(i._id=o.id),i}createContainerElement(e,t,o={}){const i=new n.a(this.document,e,t);return void 0!==o.isAllowedInsideAttributeElement&&(i._isAllowedInsideAttributeElement=o.isAllowedInsideAttributeElement),i}createEditableElement(e,t){const o=new _.a(this.document,e,t);return o._document=this.document,o}createEmptyElement(e,t,o={}){const i=new u(this.document,e,t);return void 0!==o.isAllowedInsideAttributeElement&&(i._isAllowedInsideAttributeElement=o.isAllowedInsideAttributeElement),i}createUIElement(e,t,o,i={}){const s=new p.a(this.document,e,t);return o&&(s.render=o),void 0!==i.isAllowedInsideAttributeElement&&(s._isAllowedInsideAttributeElement=i.isAllowedInsideAttributeElement),s}createRawElement(e,t,o,i={}){const s=new g(this.document,e,t);return s.render=o||(()=>{}),void 0!==i.isAllowedInsideAttributeElement&&(s._isAllowedInsideAttributeElement=i.isAllowedInsideAttributeElement),s}setAttribute(e,t,o){o._setAttribute(e,t)}removeAttribute(e,t){t._removeAttribute(e)}addClass(e,t){t._addClass(e)}removeClass(e,t){t._removeClass(e)}setStyle(e,t,o){Object(w.a)(e)&&void 0===o&&(o=t),o._setStyle(e,t)}removeStyle(e,t){t._removeStyle(e)}setCustomProperty(e,t,o){o._setCustomProperty(e,t)}removeCustomProperty(e,t){return t._removeCustomProperty(e)}breakAttributes(e){return e instanceof i.a?this._breakAttributes(e):this._breakAttributesRange(e)}breakContainer(e){const t=e.parent;if(!t.is("containerElement"))throw new l.a("view-writer-break-non-container-element",this.document);if(!t.parent)throw new l.a("view-writer-break-root",this.document);if(e.isAtStart)return i.a._createBefore(t);if(!e.isAtEnd){const o=t._clone(!1);this.insert(i.a._createAfter(t),o);const r=new s.a(e,i.a._createAt(t,"end")),n=new i.a(o,0);this.move(r,n)}return i.a._createAfter(t)}mergeAttributes(e){const t=e.offset,o=e.parent;if(o.is("$text"))return e;if(o.is("attributeElement")&&0===o.childCount){const e=o.parent,t=o.index;return o._remove(),this._removeFromClonedElementsGroup(o),this.mergeAttributes(new i.a(e,t))}const s=o.getChild(t-1),r=o.getChild(t);if(!s||!r)return e;if(s.is("$text")&&r.is("$text"))return O(s,r);if(s.is("attributeElement")&&r.is("attributeElement")&&s.isSimilar(r)){const e=s.childCount;return s._appendChild(r.getChildren()),r._remove(),this._removeFromClonedElementsGroup(r),this.mergeAttributes(new i.a(s,e))}return e}mergeContainers(e){const t=e.nodeBefore,o=e.nodeAfter;if(!(t&&o&&t.is("containerElement")&&o.is("containerElement")))throw new l.a("view-writer-merge-containers-invalid-position",this.document);const r=t.getChild(t.childCount-1),n=r instanceof b.a?i.a._createAt(r,"end"):i.a._createAt(t,"end");return this.move(s.a._createIn(o),i.a._createAt(t,"end")),this.remove(s.a._createOn(o)),n}insert(e,t){(function e(t,o){for(const i of t){if(!A.some(e=>i instanceof e))throw new l.a("view-writer-insert-invalid-node-type",o);i.is("$text")||e(i.getChildren(),o)}})(t=Object(k.a)(t)?[...t]:[t],this.document);const o=t.reduce((e,t)=>{const o=e[e.length-1],i=!(t.is("uiElement")&&t.isAllowedInsideAttributeElement);return o&&o.breakAttributes==i?o.nodes.push(t):e.push({breakAttributes:i,nodes:[t]}),e},[]);let i=null,r=e;for(const{nodes:e,breakAttributes:t}of o){const o=this._insertNodes(r,e,t);i||(i=o.start),r=o.end}return i?new s.a(i,r):new s.a(e)}remove(e){const t=e instanceof s.a?e:s.a._createOn(e);if(C(t,this.document),t.isCollapsed)return new m.a(this.document);const{start:o,end:i}=this._breakAttributesRange(t,!0),r=o.parent,n=i.offset-o.offset,a=r._removeChildren(o.offset,n);for(const e of a)this._removeFromClonedElementsGroup(e);const c=this.mergeAttributes(o);return t.start=c,t.end=c.clone(),new m.a(this.document,a)}clear(e,t){C(e,this.document);const o=e.getWalker({direction:"backward",ignoreElementEnd:!0});for(const i of o){const o=i.item;let r;if(o.is("element")&&t.isSimilar(o))r=s.a._createOn(o);else if(!i.nextPosition.isAfter(e.start)&&o.is("$textProxy")){const e=o.getAncestors().find(e=>e.is("element")&&t.isSimilar(e));e&&(r=s.a._createIn(e))}r&&(r.end.isAfter(e.end)&&(r.end=e.end),r.start.isBefore(e.start)&&(r.start=e.start),this.remove(r))}}move(e,t){let o;if(t.isAfter(e.end)){const i=(t=this._breakAttributes(t,!0)).parent,s=i.childCount;e=this._breakAttributesRange(e,!0),o=this.remove(e),t.offset+=i.childCount-s}else o=this.remove(e);return this.insert(t,o)}wrap(e,t){if(!(t instanceof a.a))throw new l.a("view-writer-wrap-invalid-attribute",this.document);if(C(e,this.document),e.isCollapsed){let i=e.start;i.parent.is("element")&&(o=i.parent,!Array.from(o.getChildren()).some(e=>!e.is("uiElement")))&&(i=i.getLastMatchingPosition(e=>e.item.is("uiElement"))),i=this._wrapPosition(i,t);const r=this.document.selection;return r.isCollapsed&&r.getFirstPosition().isEqual(e.start)&&this.setSelection(i),new s.a(i)}return this._wrapRange(e,t);var o}unwrap(e,t){if(!(t instanceof a.a))throw new l.a("view-writer-unwrap-invalid-attribute",this.document);if(C(e,this.document),e.isCollapsed)return e;const{start:o,end:i}=this._breakAttributesRange(e,!0),r=o.parent,n=this._unwrapChildren(r,o.offset,i.offset,t),c=this.mergeAttributes(n.start);c.isEqual(n.start)||n.end.offset--;const d=this.mergeAttributes(n.end);return new s.a(c,d)}rename(e,t){const o=new n.a(this.document,e,t.getAttributes());return this.insert(i.a._createAfter(t),o),this.move(s.a._createIn(t),i.a._createAt(o,0)),this.remove(s.a._createOn(t)),o}clearClonedElementsGroup(e){this._cloneGroups.delete(e)}createPositionAt(e,t){return i.a._createAt(e,t)}createPositionAfter(e){return i.a._createAfter(e)}createPositionBefore(e){return i.a._createBefore(e)}createRange(e,t){return new s.a(e,t)}createRangeOn(e){return s.a._createOn(e)}createRangeIn(e){return s.a._createIn(e)}createSelection(e,t,o){return new r.a(e,t,o)}_insertNodes(e,t,o){let i,r;if(i=o?y(e):e.parent.is("$text")?e.parent.parent:e.parent,!i)throw new l.a("view-writer-invalid-position-container",this.document);r=o?this._breakAttributes(e,!0):e.parent.is("$text")?P(e):e;const n=i._insertChild(r.offset,t);for(const e of t)this._addToClonedElementsGroup(e);const a=r.getShiftedBy(n),c=this.mergeAttributes(r);c.isEqual(r)||a.offset--;const d=this.mergeAttributes(a);return new s.a(c,d)}_wrapChildren(e,t,o,r){let n=t;const a=[];for(;n<o;){const t=e.getChild(n),o=t.is("$text"),s=t.is("attributeElement"),c=t.isAllowedInsideAttributeElement;if(s&&this._wrapAttributeElement(r,t))a.push(new i.a(e,n));else if(o||c||s&&j(r,t)){const o=r._clone();t._remove(),o._appendChild(t),e._insertChild(n,o),this._addToClonedElementsGroup(o),a.push(new i.a(e,n))}else s&&this._wrapChildren(t,0,t.childCount,r);n++}let c=0;for(const e of a){if(e.offset-=c,e.offset==t)continue;this.mergeAttributes(e).isEqual(e)||(c++,o--)}return s.a._createFromParentsAndOffsets(e,t,e,o)}_unwrapChildren(e,t,o,r){let n=t;const a=[];for(;n<o;){const t=e.getChild(n);if(t.is("attributeElement"))if(t.isSimilar(r)){const s=t.getChildren(),r=t.childCount;t._remove(),e._insertChild(n,s),this._removeFromClonedElementsGroup(t),a.push(new i.a(e,n),new i.a(e,n+r)),n+=r,o+=r-1}else this._unwrapAttributeElement(r,t)?(a.push(new i.a(e,n),new i.a(e,n+1)),n++):(this._unwrapChildren(t,0,t.childCount,r),n++);else n++}let c=0;for(const e of a){if(e.offset-=c,e.offset==t||e.offset==o)continue;this.mergeAttributes(e).isEqual(e)||(c++,o--)}return s.a._createFromParentsAndOffsets(e,t,e,o)}_wrapRange(e,t){const{start:o,end:i}=this._breakAttributesRange(e,!0),r=o.parent,n=this._wrapChildren(r,o.offset,i.offset,t),a=this.mergeAttributes(n.start);a.isEqual(n.start)||n.end.offset--;const c=this.mergeAttributes(n.end);return new s.a(a,c)}_wrapPosition(e,t){if(t.isSimilar(e.parent))return x(e.clone());e.parent.is("$text")&&(e=P(e));const o=this.createAttributeElement();o._priority=Number.POSITIVE_INFINITY,o.isSimilar=()=>!1,e.parent._insertChild(e.offset,o);const r=new s.a(e,e.getShiftedBy(1));this.wrap(r,t);const n=new i.a(o.parent,o.index);o._remove();const a=n.nodeBefore,c=n.nodeAfter;return a instanceof b.a&&c instanceof b.a?O(a,c):x(n)}_wrapAttributeElement(e,t){if(!E(e,t))return!1;if(e.name!==t.name||e.priority!==t.priority)return!1;for(const o of e.getAttributeKeys())if("class"!==o&&"style"!==o&&t.hasAttribute(o)&&t.getAttribute(o)!==e.getAttribute(o))return!1;for(const o of e.getStyleNames())if(t.hasStyle(o)&&t.getStyle(o)!==e.getStyle(o))return!1;for(const o of e.getAttributeKeys())"class"!==o&&"style"!==o&&(t.hasAttribute(o)||this.setAttribute(o,e.getAttribute(o),t));for(const o of e.getStyleNames())t.hasStyle(o)||this.setStyle(o,e.getStyle(o),t);for(const o of e.getClassNames())t.hasClass(o)||this.addClass(o,t);return!0}_unwrapAttributeElement(e,t){if(!E(e,t))return!1;if(e.name!==t.name||e.priority!==t.priority)return!1;for(const o of e.getAttributeKeys())if("class"!==o&&"style"!==o&&(!t.hasAttribute(o)||t.getAttribute(o)!==e.getAttribute(o)))return!1;if(!t.hasClass(...e.getClassNames()))return!1;for(const o of e.getStyleNames())if(!t.hasStyle(o)||t.getStyle(o)!==e.getStyle(o))return!1;for(const o of e.getAttributeKeys())"class"!==o&&"style"!==o&&this.removeAttribute(o,t);return this.removeClass(Array.from(e.getClassNames()),t),this.removeStyle(Array.from(e.getStyleNames()),t),!0}_breakAttributesRange(e,t=!1){const o=e.start,i=e.end;if(C(e,this.document),e.isCollapsed){const o=this._breakAttributes(e.start,t);return new s.a(o,o)}const r=this._breakAttributes(i,t),n=r.parent.childCount,a=this._breakAttributes(o,t);return r.offset+=r.parent.childCount-n,new s.a(a,r)}_breakAttributes(e,t=!1){const o=e.offset,s=e.parent;if(e.parent.is("emptyElement"))throw new l.a("view-writer-cannot-break-empty-element",this.document);if(e.parent.is("uiElement"))throw new l.a("view-writer-cannot-break-ui-element",this.document);if(e.parent.is("rawElement"))throw new l.a("view-writer-cannot-break-raw-element",this.document);if(!t&&s.is("$text")&&T(s.parent))return e.clone();if(T(s))return e.clone();if(s.is("$text"))return this._breakAttributes(P(e),t);if(o==s.childCount){const e=new i.a(s.parent,s.index+1);return this._breakAttributes(e,t)}if(0===o){const e=new i.a(s.parent,s.index);return this._breakAttributes(e,t)}{const e=s.index+1,r=s._clone();s.parent._insertChild(e,r),this._addToClonedElementsGroup(r);const n=s.childCount-o,a=s._removeChildren(o,n);r._appendChild(a);const c=new i.a(s.parent,e);return this._breakAttributes(c,t)}}_addToClonedElementsGroup(e){if(!e.root.is("rootElement"))return;if(e.is("element"))for(const t of e.getChildren())this._addToClonedElementsGroup(t);const t=e.id;if(!t)return;let o=this._cloneGroups.get(t);o||(o=new Set,this._cloneGroups.set(t,o)),o.add(e),e._clonesGroup=o}_removeFromClonedElementsGroup(e){if(e.is("element"))for(const t of e.getChildren())this._removeFromClonedElementsGroup(t);const t=e.id;if(!t)return;const o=this._cloneGroups.get(t);o&&o.delete(e)}}function y(e){let t=e.parent;for(;!T(t);){if(!t)return;t=t.parent}return t}function j(e,t){return e.priority<t.priority||!(e.priority>t.priority)&&e.getIdentity()<t.getIdentity()}function x(e){const t=e.nodeBefore;if(t&&t.is("$text"))return new i.a(t,t.data.length);const o=e.nodeAfter;return o&&o.is("$text")?new i.a(o,0):e}function P(e){if(e.offset==e.parent.data.length)return new i.a(e.parent.parent,e.parent.index+1);if(0===e.offset)return new i.a(e.parent.parent,e.parent.index);const t=e.parent.data.slice(e.offset);return e.parent._data=e.parent.data.slice(0,e.offset),e.parent.parent._insertChild(e.parent.index+1,new b.a(e.root.document,t)),new i.a(e.parent.parent,e.parent.index+1)}function O(e,t){const o=e.data.length;return e._data+=t.data,t._remove(),new i.a(e,o)}const A=[b.a,a.a,n.a,u,g,p.a];function T(e){return e&&(e.is("containerElement")||e.is("documentFragment"))}function C(e,t){const o=y(e.start),i=y(e.end);if(!o||!i||o!==i)throw new l.a("view-writer-invalid-range-container",t)}function E(e,t){return null===e.id&&null===t.id}},"./packages/ckeditor5-engine/src/view/editableelement.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return n}));var i=o("./packages/ckeditor5-engine/src/view/containerelement.js"),s=o("./packages/ckeditor5-utils/src/mix.js"),r=o("./packages/ckeditor5-utils/src/observablemixin.js");class n extends i.a{constructor(e,t,o,i){super(e,t,o,i),this.set("isReadOnly",!1),this.set("isFocused",!1),this.bind("isReadOnly").to(e),this.bind("isFocused").to(e,"isFocused",t=>t&&e.selection.editableElement==this),this.listenTo(e.selection,"change",()=>{this.isFocused=e.isFocused&&e.selection.editableElement==this})}is(e,t=null){return t?t===this.name&&("editableElement"===e||"view:editableElement"===e||"containerElement"===e||"view:containerElement"===e||"element"===e||"view:element"===e):"editableElement"===e||"view:editableElement"===e||"containerElement"===e||"view:containerElement"===e||"element"===e||"view:element"===e||"node"===e||"view:node"===e}destroy(){this.stopListening()}}Object(s.a)(n,r.a)},"./packages/ckeditor5-engine/src/view/element.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return u}));var i=o("./packages/ckeditor5-engine/src/view/node.js"),s=o("./packages/ckeditor5-engine/src/view/text.js"),r=o("./packages/ckeditor5-engine/src/view/textproxy.js"),n=o("./packages/ckeditor5-utils/src/tomap.js"),a=o("./packages/ckeditor5-utils/src/toarray.js"),c=o("./packages/ckeditor5-utils/src/isiterable.js"),l=o("./packages/ckeditor5-engine/src/view/matcher.js"),d=o("./packages/ckeditor5-engine/src/view/stylesmap.js");class u extends i.a{constructor(e,t,o,i){if(super(e),this.name=t,this._attrs=function(e){e=Object(n.a)(e);for(const[t,o]of e)null===o?e.delete(t):"string"!=typeof o&&e.set(t,String(o));return e}(o),this._children=[],i&&this._insertChild(0,i),this._classes=new Set,this._attrs.has("class")){const e=this._attrs.get("class");h(this._classes,e),this._attrs.delete("class")}this._styles=new d.b(this.document.stylesProcessor),this._attrs.has("style")&&(this._styles.setTo(this._attrs.get("style")),this._attrs.delete("style")),this._customProperties=new Map,this._isAllowedInsideAttributeElement=!1}get childCount(){return this._children.length}get isEmpty(){return 0===this._children.length}get isAllowedInsideAttributeElement(){return this._isAllowedInsideAttributeElement}is(e,t=null){return t?t===this.name&&("element"===e||"view:element"===e):"element"===e||"view:element"===e||"node"===e||"view:node"===e}getChild(e){return this._children[e]}getChildIndex(e){return this._children.indexOf(e)}getChildren(){return this._children[Symbol.iterator]()}*getAttributeKeys(){this._classes.size>0&&(yield"class"),this._styles.isEmpty||(yield"style"),yield*this._attrs.keys()}*getAttributes(){yield*this._attrs.entries(),this._classes.size>0&&(yield["class",this.getAttribute("class")]),this._styles.isEmpty||(yield["style",this.getAttribute("style")])}getAttribute(e){if("class"==e)return this._classes.size>0?[...this._classes].join(" "):void 0;if("style"==e){const e=this._styles.toString();return""==e?void 0:e}return this._attrs.get(e)}hasAttribute(e){return"class"==e?this._classes.size>0:"style"==e?!this._styles.isEmpty:this._attrs.has(e)}isSimilar(e){if(!(e instanceof u))return!1;if(this===e)return!0;if(this.name!=e.name)return!1;if(this.isAllowedInsideAttributeElement!=e.isAllowedInsideAttributeElement)return!1;if(this._attrs.size!==e._attrs.size||this._classes.size!==e._classes.size||this._styles.size!==e._styles.size)return!1;for(const[t,o]of this._attrs)if(!e._attrs.has(t)||e._attrs.get(t)!==o)return!1;for(const t of this._classes)if(!e._classes.has(t))return!1;for(const t of this._styles.getStyleNames())if(!e._styles.has(t)||e._styles.getAsString(t)!==this._styles.getAsString(t))return!1;return!0}hasClass(...e){for(const t of e)if(!this._classes.has(t))return!1;return!0}getClassNames(){return this._classes.keys()}getStyle(e){return this._styles.getAsString(e)}getNormalizedStyle(e){return this._styles.getNormalized(e)}getStyleNames(e=!1){return this._styles.getStyleNames(e)}hasStyle(...e){for(const t of e)if(!this._styles.has(t))return!1;return!0}findAncestor(...e){const t=new l.a(...e);let o=this.parent;for(;o;){if(t.match(o))return o;o=o.parent}return null}getCustomProperty(e){return this._customProperties.get(e)}*getCustomProperties(){yield*this._customProperties.entries()}getIdentity(){const e=Array.from(this._classes).sort().join(","),t=this._styles.toString(),o=Array.from(this._attrs).map(e=>`${e[0]}="${e[1]}"`).sort().join(" ");return this.name+(""==e?"":` class="${e}"`)+(t?` style="${t}"`:"")+(""==o?"":" "+o)}_clone(e=!1){const t=[];if(e)for(const o of this.getChildren())t.push(o._clone(e));const o=new this.constructor(this.document,this.name,this._attrs,t);return o._classes=new Set(this._classes),o._styles.set(this._styles.getNormalized()),o._customProperties=new Map(this._customProperties),o.getFillerOffset=this.getFillerOffset,o._isAllowedInsideAttributeElement=this.isAllowedInsideAttributeElement,o}_appendChild(e){return this._insertChild(this.childCount,e)}_insertChild(e,t){this._fireChange("children",this);let o=0;const i=function(e,t){if("string"==typeof t)return[new s.a(e,t)];Object(c.a)(t)||(t=[t]);return Array.from(t).map(t=>"string"==typeof t?new s.a(e,t):t instanceof r.a?new s.a(e,t.data):t)}(this.document,t);for(const t of i)null!==t.parent&&t._remove(),t.parent=this,t.document=this.document,this._children.splice(e,0,t),e++,o++;return o}_removeChildren(e,t=1){this._fireChange("children",this);for(let o=e;o<e+t;o++)this._children[o].parent=null;return this._children.splice(e,t)}_setAttribute(e,t){t=String(t),this._fireChange("attributes",this),"class"==e?h(this._classes,t):"style"==e?this._styles.setTo(t):this._attrs.set(e,t)}_removeAttribute(e){return this._fireChange("attributes",this),"class"==e?this._classes.size>0&&(this._classes.clear(),!0):"style"==e?!this._styles.isEmpty&&(this._styles.clear(),!0):this._attrs.delete(e)}_addClass(e){this._fireChange("attributes",this);for(const t of Object(a.a)(e))this._classes.add(t)}_removeClass(e){this._fireChange("attributes",this);for(const t of Object(a.a)(e))this._classes.delete(t)}_setStyle(e,t){this._fireChange("attributes",this),this._styles.set(e,t)}_removeStyle(e){this._fireChange("attributes",this);for(const t of Object(a.a)(e))this._styles.remove(t)}_setCustomProperty(e,t){this._customProperties.set(e,t)}_removeCustomProperty(e){return this._customProperties.delete(e)}}function h(e,t){const o=t.split(/\s+/);e.clear(),o.forEach(t=>e.add(t))}},"./packages/ckeditor5-engine/src/view/filler.js":function(e,t,o){"use strict";o.d(t,"e",(function(){return r})),o.d(t,"d",(function(){return n})),o.d(t,"a",(function(){return a})),o.d(t,"c",(function(){return c})),o.d(t,"b",(function(){return l})),o.d(t,"i",(function(){return d})),o.d(t,"h",(function(){return u})),o.d(t,"f",(function(){return h})),o.d(t,"g",(function(){return p}));var i=o("./packages/ckeditor5-utils/src/keyboard.js"),s=o("./packages/ckeditor5-utils/src/dom/istext.js");const r=e=>e.createTextNode(" "),n=e=>{const t=e.createElement("span");return t.dataset.ckeFiller=!0,t.innerHTML=" ",t},a=e=>{const t=e.createElement("br");return t.dataset.ckeFiller=!0,t},c=7,l="⁠".repeat(c);function d(e){return Object(s.a)(e)&&e.data.substr(0,c)===l}function u(e){return e.data.length==c&&d(e)}function h(e){return d(e)?e.data.slice(c):e.data}function p(e){e.document.on("arrowKey",g,{priority:"low"})}function g(e,t){if(t.keyCode==i.f.arrowleft){const e=t.domTarget.ownerDocument.defaultView.getSelection();if(1==e.rangeCount&&e.getRangeAt(0).collapsed){const t=e.getRangeAt(0).startContainer,o=e.getRangeAt(0).startOffset;d(t)&&o<=c&&e.collapse(t,0)}}}},"./packages/ckeditor5-engine/src/view/matcher.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return r}));var i=o("./node_modules/lodash-es/isPlainObject.js"),s=o("./packages/ckeditor5-utils/src/ckeditorerror.js");class r{constructor(...e){this._patterns=[],this.add(...e)}add(...e){for(let t of e)("string"==typeof t||t instanceof RegExp)&&(t={name:t}),this._patterns.push(t)}match(...e){for(const t of e)for(const e of this._patterns){const o=n(t,e);if(o)return{element:t,pattern:e,match:o}}return null}matchAll(...e){const t=[];for(const o of e)for(const e of this._patterns){const i=n(o,e);i&&t.push({element:o,pattern:e,match:i})}return t.length>0?t:null}getElementName(){if(1!==this._patterns.length)return null;const e=this._patterns[0],t=e.name;return"function"==typeof e||!t||t instanceof RegExp?null:t}}function n(e,t){if("function"==typeof t)return t(e);const o={};return t.name&&(o.name=function(e,t){if(e instanceof RegExp)return!!t.match(e);return e===t}(t.name,e.name),!o.name)||t.attributes&&(o.attributes=function(e,t){const o=new Set(t.getAttributeKeys());Object(i.a)(e)?(void 0!==e.style&&Object(s.c)("matcher-pattern-deprecated-attributes-style-key",e),void 0!==e.class&&Object(s.c)("matcher-pattern-deprecated-attributes-class-key",e)):(o.delete("style"),o.delete("class"));return a(e,o,e=>t.getAttribute(e))}(t.attributes,e),!o.attributes)?null:!(t.classes&&(o.classes=function(e,t){return a(e,t.getClassNames())}(t.classes,e),!o.classes))&&(!(t.styles&&(o.styles=function(e,t){return a(e,t.getStyleNames(!0),e=>t.getStyle(e))}(t.styles,e),!o.styles))&&o)}function a(e,t,o){const r=function(e){if(Array.isArray(e))return e.map(e=>Object(i.a)(e)?(void 0!==e.key&&void 0!==e.value||Object(s.c)("matcher-pattern-missing-key-or-value",e),[e.key,e.value]):[e,!0]);if(Object(i.a)(e))return Object.entries(e);return[[e,!0]]}(e),n=Array.from(t),a=[];return r.forEach(([e,t])=>{n.forEach(i=>{(function(e,t){return!0===e||e===t||e instanceof RegExp&&t.match(e)})(e,i)&&function(e,t,o){if(!0===e)return!0;const i=o(t);return e===i||e instanceof RegExp&&!!String(i).match(e)}(t,i,o)&&a.push(i)})}),!r.length||a.length<r.length?null:a}},"./packages/ckeditor5-engine/src/view/node.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return c}));var i=o("./packages/ckeditor5-utils/src/ckeditorerror.js"),s=o("./packages/ckeditor5-utils/src/emittermixin.js"),r=o("./packages/ckeditor5-utils/src/mix.js"),n=o("./packages/ckeditor5-utils/src/comparearrays.js"),a=o("./node_modules/lodash-es/clone.js");o("./packages/ckeditor5-utils/src/version.js");class c{constructor(e){this.document=e,this.parent=null}get index(){let e;if(!this.parent)return null;if(-1==(e=this.parent.getChildIndex(this)))throw new i.a("view-node-not-found-in-parent",this);return e}get nextSibling(){const e=this.index;return null!==e&&this.parent.getChild(e+1)||null}get previousSibling(){const e=this.index;return null!==e&&this.parent.getChild(e-1)||null}get root(){let e=this;for(;e.parent;)e=e.parent;return e}isAttached(){return this.root.is("rootElement")}getPath(){const e=[];let t=this;for(;t.parent;)e.unshift(t.index),t=t.parent;return e}getAncestors(e={includeSelf:!1,parentFirst:!1}){const t=[];let o=e.includeSelf?this:this.parent;for(;o;)t[e.parentFirst?"push":"unshift"](o),o=o.parent;return t}getCommonAncestor(e,t={}){const o=this.getAncestors(t),i=e.getAncestors(t);let s=0;for(;o[s]==i[s]&&o[s];)s++;return 0===s?null:o[s-1]}isBefore(e){if(this==e)return!1;if(this.root!==e.root)return!1;const t=this.getPath(),o=e.getPath(),i=Object(n.a)(t,o);switch(i){case"prefix":return!0;case"extension":return!1;default:return t[i]<o[i]}}isAfter(e){return this!=e&&(this.root===e.root&&!this.isBefore(e))}_remove(){this.parent._removeChildren(this.index)}_fireChange(e,t){this.fire("change:"+e,t),this.parent&&this.parent._fireChange(e,t)}toJSON(){const e=Object(a.a)(this);return delete e.parent,e}is(e){return"node"===e||"view:node"===e}}Object(r.a)(c,s.c)},"./packages/ckeditor5-engine/src/view/observer/bubblingeventinfo.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return s}));var i=o("./packages/ckeditor5-utils/src/eventinfo.js");class s extends i.a{constructor(e,t,o){super(e,t),this.startRange=o,this._eventPhase="none",this._currentTarget=null}get eventPhase(){return this._eventPhase}get currentTarget(){return this._currentTarget}}},"./packages/ckeditor5-engine/src/view/observer/domeventdata.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return s}));var i=o("./node_modules/lodash-es/assignIn.js");class s{constructor(e,t,o){this.view=e,this.document=e.document,this.domEvent=t,this.domTarget=t.target,Object(i.a)(this,o)}get target(){return this.view.domConverter.mapDomToView(this.domTarget)}preventDefault(){this.domEvent.preventDefault()}stopPropagation(){this.domEvent.stopPropagation()}}},"./packages/ckeditor5-engine/src/view/observer/domeventobserver.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return r}));var i=o("./packages/ckeditor5-engine/src/view/observer/observer.js"),s=o("./packages/ckeditor5-engine/src/view/observer/domeventdata.js");class r extends i.a{constructor(e){super(e),this.useCapture=!1}observe(e){("string"==typeof this.domEventType?[this.domEventType]:this.domEventType).forEach(t=>{this.listenTo(e,t,(e,t)=>{this.isEnabled&&!this.checkShouldIgnoreEventFromTarget(t.target)&&this.onDomEvent(t)},{useCapture:this.useCapture})})}fire(e,t,o){this.isEnabled&&this.document.fire(e,new s.a(this.view,t,o))}}},"./packages/ckeditor5-engine/src/view/observer/mouseobserver.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return s}));var i=o("./packages/ckeditor5-engine/src/view/observer/domeventobserver.js");class s extends i.a{constructor(e){super(e),this.domEventType=["mousedown","mouseup","mouseover","mouseout"]}onDomEvent(e){this.fire(e.type,e)}}},"./packages/ckeditor5-engine/src/view/observer/observer.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return r}));var i=o("./packages/ckeditor5-utils/src/dom/emittermixin.js"),s=o("./packages/ckeditor5-utils/src/mix.js");class r{constructor(e){this.view=e,this.document=e.document,this.isEnabled=!1}enable(){this.isEnabled=!0}disable(){this.isEnabled=!1}destroy(){this.disable(),this.stopListening()}checkShouldIgnoreEventFromTarget(e){return e&&3===e.nodeType&&(e=e.parentNode),!(!e||1!==e.nodeType)&&e.matches("[data-cke-ignore-events], [data-cke-ignore-events] *")}}Object(s.a)(r,i.a)},"./packages/ckeditor5-engine/src/view/position.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return a}));var i=o("./packages/ckeditor5-engine/src/view/treewalker.js"),s=o("./packages/ckeditor5-utils/src/comparearrays.js"),r=o("./packages/ckeditor5-utils/src/ckeditorerror.js"),n=o("./packages/ckeditor5-engine/src/view/editableelement.js");o("./packages/ckeditor5-utils/src/version.js");class a{constructor(e,t){this.parent=e,this.offset=t}get nodeAfter(){return this.parent.is("$text")?null:this.parent.getChild(this.offset)||null}get nodeBefore(){return this.parent.is("$text")?null:this.parent.getChild(this.offset-1)||null}get isAtStart(){return 0===this.offset}get isAtEnd(){const e=this.parent.is("$text")?this.parent.data.length:this.parent.childCount;return this.offset===e}get root(){return this.parent.root}get editableElement(){let e=this.parent;for(;!(e instanceof n.a);){if(!e.parent)return null;e=e.parent}return e}getShiftedBy(e){const t=a._createAt(this),o=t.offset+e;return t.offset=o<0?0:o,t}getLastMatchingPosition(e,t={}){t.startPosition=this;const o=new i.a(t);return o.skip(e),o.position}getAncestors(){return this.parent.is("documentFragment")?[this.parent]:this.parent.getAncestors({includeSelf:!0})}getCommonAncestor(e){const t=this.getAncestors(),o=e.getAncestors();let i=0;for(;t[i]==o[i]&&t[i];)i++;return 0===i?null:t[i-1]}is(e){return"position"===e||"view:position"===e}isEqual(e){return this.parent==e.parent&&this.offset==e.offset}isBefore(e){return"before"==this.compareWith(e)}isAfter(e){return"after"==this.compareWith(e)}compareWith(e){if(this.root!==e.root)return"different";if(this.isEqual(e))return"same";const t=this.parent.is("node")?this.parent.getPath():[],o=e.parent.is("node")?e.parent.getPath():[];t.push(this.offset),o.push(e.offset);const i=Object(s.a)(t,o);switch(i){case"prefix":return"before";case"extension":return"after";default:return t[i]<o[i]?"before":"after"}}getWalker(e={}){return e.startPosition=this,new i.a(e)}clone(){return new a(this.parent,this.offset)}static _createAt(e,t){if(e instanceof a)return new this(e.parent,e.offset);{const o=e;if("end"==t)t=o.is("$text")?o.data.length:o.childCount;else{if("before"==t)return this._createBefore(o);if("after"==t)return this._createAfter(o);if(0!==t&&!t)throw new r.a("view-createpositionat-offset-required",o)}return new a(o,t)}}static _createAfter(e){if(e.is("$textProxy"))return new a(e.textNode,e.offsetInText+e.data.length);if(!e.parent)throw new r.a("view-position-after-root",e,{root:e});return new a(e.parent,e.index+1)}static _createBefore(e){if(e.is("$textProxy"))return new a(e.textNode,e.offsetInText);if(!e.parent)throw new r.a("view-position-before-root",e,{root:e});return new a(e.parent,e.index)}}},"./packages/ckeditor5-engine/src/view/range.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return r}));var i=o("./packages/ckeditor5-engine/src/view/position.js"),s=o("./packages/ckeditor5-engine/src/view/treewalker.js");class r{constructor(e,t=null){this.start=e.clone(),this.end=t?t.clone():e.clone()}*[Symbol.iterator](){yield*new s.a({boundaries:this,ignoreElementEnd:!0})}get isCollapsed(){return this.start.isEqual(this.end)}get isFlat(){return this.start.parent===this.end.parent}get root(){return this.start.root}getEnlarged(){let e=this.start.getLastMatchingPosition(n,{direction:"backward"}),t=this.end.getLastMatchingPosition(n);return e.parent.is("$text")&&e.isAtStart&&(e=i.a._createBefore(e.parent)),t.parent.is("$text")&&t.isAtEnd&&(t=i.a._createAfter(t.parent)),new r(e,t)}getTrimmed(){let e=this.start.getLastMatchingPosition(n);if(e.isAfter(this.end)||e.isEqual(this.end))return new r(e,e);let t=this.end.getLastMatchingPosition(n,{direction:"backward"});const o=e.nodeAfter,s=t.nodeBefore;return o&&o.is("$text")&&(e=new i.a(o,0)),s&&s.is("$text")&&(t=new i.a(s,s.data.length)),new r(e,t)}isEqual(e){return this==e||this.start.isEqual(e.start)&&this.end.isEqual(e.end)}containsPosition(e){return e.isAfter(this.start)&&e.isBefore(this.end)}containsRange(e,t=!1){e.isCollapsed&&(t=!1);const o=this.containsPosition(e.start)||t&&this.start.isEqual(e.start),i=this.containsPosition(e.end)||t&&this.end.isEqual(e.end);return o&&i}getDifference(e){const t=[];return this.isIntersecting(e)?(this.containsPosition(e.start)&&t.push(new r(this.start,e.start)),this.containsPosition(e.end)&&t.push(new r(e.end,this.end))):t.push(this.clone()),t}getIntersection(e){if(this.isIntersecting(e)){let t=this.start,o=this.end;return this.containsPosition(e.start)&&(t=e.start),this.containsPosition(e.end)&&(o=e.end),new r(t,o)}return null}getWalker(e={}){return e.boundaries=this,new s.a(e)}getCommonAncestor(){return this.start.getCommonAncestor(this.end)}getContainedElement(){if(this.isCollapsed)return null;let e=this.start.nodeAfter,t=this.end.nodeBefore;return this.start.parent.is("$text")&&this.start.isAtEnd&&this.start.parent.nextSibling&&(e=this.start.parent.nextSibling),this.end.parent.is("$text")&&this.end.isAtStart&&this.end.parent.previousSibling&&(t=this.end.parent.previousSibling),e&&e.is("element")&&e===t?e:null}clone(){return new r(this.start,this.end)}*getItems(e={}){e.boundaries=this,e.ignoreElementEnd=!0;const t=new s.a(e);for(const e of t)yield e.item}*getPositions(e={}){e.boundaries=this;const t=new s.a(e);yield t.position;for(const e of t)yield e.nextPosition}is(e){return"range"===e||"view:range"===e}isIntersecting(e){return this.start.isBefore(e.end)&&this.end.isAfter(e.start)}static _createFromParentsAndOffsets(e,t,o,s){return new this(new i.a(e,t),new i.a(o,s))}static _createFromPositionAndShift(e,t){const o=e,i=e.getShiftedBy(t);return t>0?new this(o,i):new this(i,o)}static _createIn(e){return this._createFromParentsAndOffsets(e,0,e,e.childCount)}static _createOn(e){const t=e.is("$textProxy")?e.offsetSize:1;return this._createFromPositionAndShift(i.a._createBefore(e),t)}}function n(e){return!(!e.item.is("attributeElement")&&!e.item.is("uiElement"))}},"./packages/ckeditor5-engine/src/view/renderer.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return m}));var i=o("./packages/ckeditor5-engine/src/view/text.js"),s=o("./packages/ckeditor5-engine/src/view/position.js"),r=o("./packages/ckeditor5-engine/src/view/filler.js"),n=o("./packages/ckeditor5-utils/src/mix.js"),a=o("./packages/ckeditor5-utils/src/diff.js");function c(e,t,o){e.insertBefore(o,e.childNodes[t]||null)}function l(e){const t=e.parentNode;t&&t.removeChild(e)}var d=o("./packages/ckeditor5-utils/src/observablemixin.js"),u=o("./packages/ckeditor5-utils/src/ckeditorerror.js"),h=o("./packages/ckeditor5-utils/src/dom/istext.js"),p=o("./packages/ckeditor5-utils/src/dom/isnode.js"),g=o("./packages/ckeditor5-utils/src/fastdiff.js"),f=o("./packages/ckeditor5-utils/src/env.js");o("./packages/ckeditor5-engine/theme/renderer.css");class m{constructor(e,t){this.domDocuments=new Set,this.domConverter=e,this.markedAttributes=new Set,this.markedChildren=new Set,this.markedTexts=new Set,this.selection=t,this.set("isFocused",!1),this.set("isSelecting",!1),f.a.isBlink&&!f.a.isAndroid&&this.on("change:isSelecting",()=>{this.isSelecting||this.render()}),this._inlineFiller=null,this._fakeSelectionContainer=null}markToSync(e,t){if("text"===e)this.domConverter.mapViewToDom(t.parent)&&this.markedTexts.add(t);else{if(!this.domConverter.mapViewToDom(t))return;if("attributes"===e)this.markedAttributes.add(t);else{if("children"!==e)throw new u.a("view-renderer-unknown-type",this);this.markedChildren.add(t)}}}render(){let e;const t=!(f.a.isBlink&&!f.a.isAndroid)||!this.isSelecting;for(const e of this.markedChildren)this._updateChildrenMappings(e);t?(this._inlineFiller&&!this._isSelectionInInlineFiller()&&this._removeInlineFiller(),this._inlineFiller?e=this._getInlineFillerPosition():this._needsInlineFillerAtSelection()&&(e=this.selection.getFirstPosition(),this.markedChildren.add(e.parent))):this._inlineFiller&&this._inlineFiller.parentNode&&(e=this.domConverter.domPositionToView(this._inlineFiller));for(const e of this.markedAttributes)this._updateAttrs(e);for(const t of this.markedChildren)this._updateChildren(t,{inlineFillerPosition:e});for(const t of this.markedTexts)!this.markedChildren.has(t.parent)&&this.domConverter.mapViewToDom(t.parent)&&this._updateText(t,{inlineFillerPosition:e});if(t)if(e){const t=this.domConverter.viewPositionToDom(e),o=t.parent.ownerDocument;Object(r.i)(t.parent)?this._inlineFiller=t.parent:this._inlineFiller=k(o,t.parent,t.offset)}else this._inlineFiller=null;this._updateFocus(),this._updateSelection(),this.markedTexts.clear(),this.markedAttributes.clear(),this.markedChildren.clear()}_updateChildrenMappings(e){const t=this.domConverter.mapViewToDom(e);if(!t)return;const o=Array.from(this.domConverter.mapViewToDom(e).childNodes),i=Array.from(this.domConverter.viewChildrenToDom(e,t.ownerDocument,{withChildren:!1})),s=this._diffNodeLists(o,i),r=this._findReplaceActions(s,o,i);if(-1!==r.indexOf("replace")){const t={equal:0,insert:0,delete:0};for(const s of r)if("replace"===s){const s=t.equal+t.insert,r=t.equal+t.delete,n=e.getChild(s);!n||n.is("uiElement")||n.is("rawElement")||this._updateElementMappings(n,o[r]),l(i[s]),t.equal++}else t[s]++}}_updateElementMappings(e,t){this.domConverter.unbindDomElement(t),this.domConverter.bindElements(t,e),this.markedChildren.add(e),this.markedAttributes.add(e)}_getInlineFillerPosition(){const e=this.selection.getFirstPosition();return e.parent.is("$text")?s.a._createBefore(this.selection.getFirstPosition().parent):e}_isSelectionInInlineFiller(){if(1!=this.selection.rangeCount||!this.selection.isCollapsed)return!1;const e=this.selection.getFirstPosition(),t=this.domConverter.viewPositionToDom(e);return!!(t&&Object(h.a)(t.parent)&&Object(r.i)(t.parent))}_removeInlineFiller(){const e=this._inlineFiller;if(!Object(r.i)(e))throw new u.a("view-renderer-filler-was-lost",this);Object(r.h)(e)?e.remove():e.data=e.data.substr(r.c),this._inlineFiller=null}_needsInlineFillerAtSelection(){if(1!=this.selection.rangeCount||!this.selection.isCollapsed)return!1;const e=this.selection.getFirstPosition(),t=e.parent,o=e.offset;if(!this.domConverter.mapViewToDom(t.root))return!1;if(!t.is("element"))return!1;if(!function(e){if("false"==e.getAttribute("contenteditable"))return!1;const t=e.findAncestor(e=>e.hasAttribute("contenteditable"));return!t||"true"==t.getAttribute("contenteditable")}(t))return!1;if(o===t.getFillerOffset())return!1;const s=e.nodeBefore,r=e.nodeAfter;return!(s instanceof i.a||r instanceof i.a)}_updateText(e,t){const o=this.domConverter.findCorrespondingDomText(e),i=this.domConverter.viewToDom(e,o.ownerDocument),s=o.data;let n=i.data;const a=t.inlineFillerPosition;if(a&&a.parent==e.parent&&a.offset==e.index&&(n=r.b+n),s!=n){const e=Object(g.a)(s,n);for(const t of e)"insert"===t.type?o.insertData(t.index,t.values.join("")):o.deleteData(t.index,t.howMany)}}_updateAttrs(e){const t=this.domConverter.mapViewToDom(e);if(!t)return;const o=Array.from(t.attributes).map(e=>e.name),i=e.getAttributeKeys();for(const o of i){const i=e.getAttribute(o);this.domConverter.shouldRenderAttribute(o,i)?t.setAttribute(o,i):t.removeAttribute(o)}for(const i of o)"script"===e.name&&"data-ck-hidden"===i||e.hasAttribute(i)||t.removeAttribute(i)}_updateChildren(e,t){const o=this.domConverter.mapViewToDom(e);if(!o)return;const i=t.inlineFillerPosition,s=this.domConverter.mapViewToDom(e).childNodes,r=Array.from(this.domConverter.viewChildrenToDom(e,o.ownerDocument,{bind:!0}));i&&i.parent===e&&k(o.ownerDocument,r,i.offset);const n=this._diffNodeLists(s,r);let a=0;const d=new Set;for(const e of n)"delete"===e?(d.add(s[a]),l(s[a])):"equal"===e&&a++;a=0;for(const e of n)"insert"===e?(c(o,a,r[a]),a++):"equal"===e&&(this._markDescendantTextToSync(this.domConverter.domToView(r[a])),a++);for(const e of d)e.parentNode||this.domConverter.unbindDomElement(e)}_diffNodeLists(e,t){return e=function(e,t){const o=Array.from(e);if(0==o.length||!t)return o;o[o.length-1]==t&&o.pop();return o}(e,this._fakeSelectionContainer),Object(a.a)(e,t,_.bind(null,this.domConverter))}_findReplaceActions(e,t,o){if(-1===e.indexOf("insert")||-1===e.indexOf("delete"))return e;let i=[],s=[],r=[];const n={equal:0,insert:0,delete:0};for(const c of e)"insert"===c?r.push(o[n.equal+n.insert]):"delete"===c?s.push(t[n.equal+n.delete]):(i=i.concat(Object(a.a)(s,r,b).map(e=>"equal"===e?"replace":e)),i.push("equal"),s=[],r=[]),n[c]++;return i.concat(Object(a.a)(s,r,b).map(e=>"equal"===e?"replace":e))}_markDescendantTextToSync(e){if(e)if(e.is("$text"))this.markedTexts.add(e);else if(e.is("element"))for(const t of e.getChildren())this._markDescendantTextToSync(t)}_updateSelection(){if(f.a.isBlink&&!f.a.isAndroid&&this.isSelecting&&!this.markedChildren.size)return;if(0===this.selection.rangeCount)return this._removeDomSelection(),void this._removeFakeSelection();const e=this.domConverter.mapViewToDom(this.selection.editableElement);this.isFocused&&e&&(this.selection.isFake?this._updateFakeSelection(e):(this._removeFakeSelection(),this._updateDomSelection(e)))}_updateFakeSelection(e){const t=e.ownerDocument;this._fakeSelectionContainer||(this._fakeSelectionContainer=function(e){const t=e.createElement("div");return t.className="ck-fake-selection-container",Object.assign(t.style,{position:"fixed",top:0,left:"-9999px",width:"42px"}),t.textContent=" ",t}(t));const o=this._fakeSelectionContainer;if(this.domConverter.bindFakeSelection(o,this.selection),!this._fakeSelectionNeedsUpdate(e))return;o.parentElement&&o.parentElement==e||e.appendChild(o),o.textContent=this.selection.fakeSelectionLabel||" ";const i=t.getSelection(),s=t.createRange();i.removeAllRanges(),s.selectNodeContents(o),i.addRange(s)}_updateDomSelection(e){const t=e.ownerDocument.defaultView.getSelection();if(!this._domSelectionNeedsUpdate(t))return;const o=this.domConverter.viewPositionToDom(this.selection.anchor),i=this.domConverter.viewPositionToDom(this.selection.focus);t.collapse(o.parent,o.offset),t.extend(i.parent,i.offset),f.a.isGecko&&function(e,t){const o=e.parent;if(o.nodeType!=Node.ELEMENT_NODE||e.offset!=o.childNodes.length-1)return;const i=o.childNodes[e.offset];i&&"BR"==i.tagName&&t.addRange(t.getRangeAt(0))}(i,t)}_domSelectionNeedsUpdate(e){if(!this.domConverter.isDomSelectionCorrect(e))return!0;const t=e&&this.domConverter.domSelectionToView(e);return(!t||!this.selection.isEqual(t))&&!(!this.selection.isCollapsed&&this.selection.isSimilar(t))}_fakeSelectionNeedsUpdate(e){const t=this._fakeSelectionContainer,o=e.ownerDocument.getSelection();return!t||t.parentElement!==e||(o.anchorNode!==t&&!t.contains(o.anchorNode)||t.textContent!==this.selection.fakeSelectionLabel)}_removeDomSelection(){for(const e of this.domDocuments){if(e.getSelection().rangeCount){const t=e.activeElement,o=this.domConverter.mapDomToView(t);t&&o&&e.getSelection().removeAllRanges()}}}_removeFakeSelection(){const e=this._fakeSelectionContainer;e&&e.remove()}_updateFocus(){if(this.isFocused){const e=this.selection.editableElement;e&&this.domConverter.focus(e)}}}function k(e,t,o){const i=t instanceof Array?t:t.childNodes,s=i[o];if(Object(h.a)(s))return s.data=r.b+s.data,s;{const s=e.createTextNode(r.b);return Array.isArray(t)?i.splice(o,0,s):c(t,o,s),s}}function b(e,t){return Object(p.a)(e)&&Object(p.a)(t)&&!Object(h.a)(e)&&!Object(h.a)(t)&&e.nodeType!==Node.COMMENT_NODE&&t.nodeType!==Node.COMMENT_NODE&&e.tagName.toLowerCase()===t.tagName.toLowerCase()}function _(e,t,o){return t===o||(Object(h.a)(t)&&Object(h.a)(o)?t.data===o.data:!(!e.isBlockFiller(t)||!e.isBlockFiller(o)))}Object(n.a)(m,d.a)},"./packages/ckeditor5-engine/src/view/selection.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return h}));var i=o("./packages/ckeditor5-utils/src/ckeditorerror.js"),s=o("./packages/ckeditor5-engine/src/view/range.js"),r=o("./packages/ckeditor5-engine/src/view/position.js"),n=o("./packages/ckeditor5-utils/src/mix.js"),a=o("./packages/ckeditor5-utils/src/emittermixin.js"),c=o("./packages/ckeditor5-engine/src/view/node.js"),l=o("./packages/ckeditor5-utils/src/count.js"),d=o("./packages/ckeditor5-utils/src/isiterable.js"),u=o("./packages/ckeditor5-engine/src/view/documentselection.js");class h{constructor(e=null,t,o){this._ranges=[],this._lastRangeBackward=!1,this._isFake=!1,this._fakeSelectionLabel="",this.setTo(e,t,o)}get isFake(){return this._isFake}get fakeSelectionLabel(){return this._fakeSelectionLabel}get anchor(){if(!this._ranges.length)return null;const e=this._ranges[this._ranges.length-1];return(this._lastRangeBackward?e.end:e.start).clone()}get focus(){if(!this._ranges.length)return null;const e=this._ranges[this._ranges.length-1];return(this._lastRangeBackward?e.start:e.end).clone()}get isCollapsed(){return 1===this.rangeCount&&this._ranges[0].isCollapsed}get rangeCount(){return this._ranges.length}get isBackward(){return!this.isCollapsed&&this._lastRangeBackward}get editableElement(){return this.anchor?this.anchor.editableElement:null}*getRanges(){for(const e of this._ranges)yield e.clone()}getFirstRange(){let e=null;for(const t of this._ranges)e&&!t.start.isBefore(e.start)||(e=t);return e?e.clone():null}getLastRange(){let e=null;for(const t of this._ranges)e&&!t.end.isAfter(e.end)||(e=t);return e?e.clone():null}getFirstPosition(){const e=this.getFirstRange();return e?e.start.clone():null}getLastPosition(){const e=this.getLastRange();return e?e.end.clone():null}isEqual(e){if(this.isFake!=e.isFake)return!1;if(this.isFake&&this.fakeSelectionLabel!=e.fakeSelectionLabel)return!1;if(this.rangeCount!=e.rangeCount)return!1;if(0===this.rangeCount)return!0;if(!this.anchor.isEqual(e.anchor)||!this.focus.isEqual(e.focus))return!1;for(const t of this._ranges){let o=!1;for(const i of e._ranges)if(t.isEqual(i)){o=!0;break}if(!o)return!1}return!0}isSimilar(e){if(this.isBackward!=e.isBackward)return!1;const t=Object(l.a)(this.getRanges());if(t!=Object(l.a)(e.getRanges()))return!1;if(0==t)return!0;for(let t of this.getRanges()){t=t.getTrimmed();let o=!1;for(let i of e.getRanges())if(i=i.getTrimmed(),t.start.isEqual(i.start)&&t.end.isEqual(i.end)){o=!0;break}if(!o)return!1}return!0}getSelectedElement(){return 1!==this.rangeCount?null:this.getFirstRange().getContainedElement()}setTo(e,t,o){if(null===e)this._setRanges([]),this._setFakeOptions(t);else if(e instanceof h||e instanceof u.a)this._setRanges(e.getRanges(),e.isBackward),this._setFakeOptions({fake:e.isFake,label:e.fakeSelectionLabel});else if(e instanceof s.a)this._setRanges([e],t&&t.backward),this._setFakeOptions(t);else if(e instanceof r.a)this._setRanges([new s.a(e)]),this._setFakeOptions(t);else if(e instanceof c.a){const n=!!o&&!!o.backward;let a;if(void 0===t)throw new i.a("view-selection-setto-required-second-parameter",this);a="in"==t?s.a._createIn(e):"on"==t?s.a._createOn(e):new s.a(r.a._createAt(e,t)),this._setRanges([a],n),this._setFakeOptions(o)}else{if(!Object(d.a)(e))throw new i.a("view-selection-setto-not-selectable",this);this._setRanges(e,t&&t.backward),this._setFakeOptions(t)}this.fire("change")}setFocus(e,t){if(null===this.anchor)throw new i.a("view-selection-setfocus-no-ranges",this);const o=r.a._createAt(e,t);if("same"==o.compareWith(this.focus))return;const n=this.anchor;this._ranges.pop(),"before"==o.compareWith(n)?this._addRange(new s.a(o,n),!0):this._addRange(new s.a(n,o)),this.fire("change")}is(e){return"selection"===e||"view:selection"===e}_setRanges(e,t=!1){e=Array.from(e),this._ranges=[];for(const t of e)this._addRange(t);this._lastRangeBackward=!!t}_setFakeOptions(e={}){this._isFake=!!e.fake,this._fakeSelectionLabel=e.fake&&e.label||""}_addRange(e,t=!1){if(!(e instanceof s.a))throw new i.a("view-selection-add-range-not-range",this);this._pushRange(e),this._lastRangeBackward=!!t}_pushRange(e){for(const t of this._ranges)if(e.isIntersecting(t))throw new i.a("view-selection-range-intersects",this,{addedRange:e,intersectingRange:t});this._ranges.push(new s.a(e.start,e.end))}}Object(n.a)(h,a.c)},"./packages/ckeditor5-engine/src/view/stylesmap.js":function(e,t,o){"use strict";o.d(t,"b",(function(){return ee})),o.d(t,"a",(function(){return te}));var i=o("./node_modules/lodash-es/isObject.js"),s=o("./node_modules/lodash-es/isArray.js"),r=o("./node_modules/lodash-es/isSymbol.js"),n=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,a=/^\w*$/;var c=function(e,t){if(Object(s.a)(e))return!1;var o=typeof e;return!("number"!=o&&"symbol"!=o&&"boolean"!=o&&null!=e&&!Object(r.a)(e))||(a.test(e)||!n.test(e)||null!=t&&e in Object(t))},l=o("./node_modules/lodash-es/_MapCache.js");function d(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var o=function(){var i=arguments,s=t?t.apply(this,i):i[0],r=o.cache;if(r.has(s))return r.get(s);var n=e.apply(this,i);return o.cache=r.set(s,n)||r,n};return o.cache=new(d.Cache||l.a),o}d.Cache=l.a;var u=d;var h=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,p=/\\(\\)?/g,g=function(e){var t=u(e,(function(e){return 500===o.size&&o.clear(),e})),o=t.cache;return t}((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(h,(function(e,o,i,s){t.push(i?s.replace(p,"$1"):o||e)})),t})),f=o("./node_modules/lodash-es/toString.js");var m=function(e,t){return Object(s.a)(e)?e:c(e,t)?[e]:g(Object(f.a)(e))};var k=function(e){var t=null==e?0:e.length;return t?e[t-1]:void 0};var b=function(e){if("string"==typeof e||Object(r.a)(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t};var _=function(e,t){for(var o=0,i=(t=m(t,e)).length;null!=e&&o<i;)e=e[b(t[o++])];return o&&o==i?e:void 0};var w=function(e,t,o){var i=-1,s=e.length;t<0&&(t=-t>s?0:s+t),(o=o>s?s:o)<0&&(o+=s),s=t>o?0:o-t>>>0,t>>>=0;for(var r=Array(s);++i<s;)r[i]=e[i+t];return r};var v=function(e,t){return t.length<2?e:_(e,w(t,0,-1))};var y=function(e,t){return t=m(t,e),null==(e=v(e,t))||delete e[b(k(t))]};var j=function(e,t){return null==e||y(e,t)};var x=function(e,t,o){var i=null==e?void 0:_(e,t);return void 0===i?o:i},P=o("./node_modules/lodash-es/_Stack.js"),O=o("./node_modules/lodash-es/_baseAssignValue.js"),A=o("./node_modules/lodash-es/eq.js");var T=function(e,t,o){(void 0!==o&&!Object(A.a)(e[t],o)||void 0===o&&!(t in e))&&Object(O.a)(e,t,o)};var C=function(e){return function(t,o,i){for(var s=-1,r=Object(t),n=i(t),a=n.length;a--;){var c=n[e?a:++s];if(!1===o(r[c],c,r))break}return t}}(),E=o("./node_modules/lodash-es/_cloneBuffer.js"),S=o("./node_modules/lodash-es/_cloneTypedArray.js"),R=o("./node_modules/lodash-es/_copyArray.js"),M=o("./node_modules/lodash-es/_initCloneObject.js"),N=o("./node_modules/lodash-es/isArguments.js"),I=o("./node_modules/lodash-es/isArrayLike.js"),z=o("./node_modules/lodash-es/isObjectLike.js");var V=function(e){return Object(z.a)(e)&&Object(I.a)(e)},D=o("./node_modules/lodash-es/isBuffer.js"),B=o("./node_modules/lodash-es/isFunction.js"),F=o("./node_modules/lodash-es/isPlainObject.js"),L=o("./node_modules/lodash-es/isTypedArray.js");var W=function(e,t){if(("constructor"!==t||"function"!=typeof e[t])&&"__proto__"!=t)return e[t]},H=o("./node_modules/lodash-es/_copyObject.js"),q=o("./node_modules/lodash-es/keysIn.js");var $=function(e){return Object(H.a)(e,Object(q.a)(e))};var U=function(e,t,o,r,n,a,c){var l=W(e,o),d=W(t,o),u=c.get(d);if(u)T(e,o,u);else{var h=a?a(l,d,o+"",e,t,c):void 0,p=void 0===h;if(p){var g=Object(s.a)(d),f=!g&&Object(D.a)(d),m=!g&&!f&&Object(L.a)(d);h=d,g||f||m?Object(s.a)(l)?h=l:V(l)?h=Object(R.a)(l):f?(p=!1,h=Object(E.a)(d,!0)):m?(p=!1,h=Object(S.a)(d,!0)):h=[]:Object(F.a)(d)||Object(N.a)(d)?(h=l,Object(N.a)(l)?h=$(l):Object(i.a)(l)&&!Object(B.a)(l)||(h=Object(M.a)(d))):p=!1}p&&(c.set(d,h),n(h,d,r,a,c),c.delete(d)),T(e,o,h)}};var K=function e(t,o,s,r,n){t!==o&&C(o,(function(a,c){if(n||(n=new P.a),Object(i.a)(a))U(t,o,c,s,e,r,n);else{var l=r?r(W(t,c),a,c+"",t,o,n):void 0;void 0===l&&(l=a),T(t,c,l)}}),q.a)},G=o("./node_modules/lodash-es/_createAssigner.js"),J=Object(G.a)((function(e,t,o){K(e,t,o)})),Y=o("./node_modules/lodash-es/_assignValue.js"),X=o("./node_modules/lodash-es/_isIndex.js");var Z=function(e,t,o,s){if(!Object(i.a)(e))return e;for(var r=-1,n=(t=m(t,e)).length,a=n-1,c=e;null!=c&&++r<n;){var l=b(t[r]),d=o;if("__proto__"===l||"constructor"===l||"prototype"===l)return e;if(r!=a){var u=c[l];void 0===(d=s?s(u,l,c):void 0)&&(d=Object(i.a)(u)?u:Object(X.a)(t[r+1])?[]:{})}Object(Y.a)(c,l,d),c=c[l]}return e};var Q=function(e,t,o){return null==e?e:Z(e,t,o)};class ee{constructor(e){this._styles={},this._styleProcessor=e}get isEmpty(){const e=Object.entries(this._styles);return!Array.from(e).length}get size(){return this.isEmpty?0:this.getStyleNames().length}setTo(e){this.clear();const t=Array.from(function(e){let t=null,o=0,i=0,s=null;const r=new Map;if(""===e)return r;";"!=e.charAt(e.length-1)&&(e+=";");for(let n=0;n<e.length;n++){const a=e.charAt(n);if(null===t)switch(a){case":":s||(s=e.substr(o,n-o),i=n+1);break;case'"':case"'":t=a;break;case";":{const t=e.substr(i,n-i);s&&r.set(s.trim(),t.trim()),s=null,o=n+1;break}}else a===t&&(t=null)}return r}(e).entries());for(const[e,o]of t)this._styleProcessor.toNormalizedForm(e,o,this._styles)}has(e){if(this.isEmpty)return!1;const t=this._styleProcessor.getReducedForm(e,this._styles).find(([t])=>t===e);return Array.isArray(t)}set(e,t){if(Object(i.a)(e))for(const[t,o]of Object.entries(e))this._styleProcessor.toNormalizedForm(t,o,this._styles);else this._styleProcessor.toNormalizedForm(e,t,this._styles)}remove(e){const t=oe(e);j(this._styles,t),delete this._styles[e],this._cleanEmptyObjectsOnPath(t)}getNormalized(e){return this._styleProcessor.getNormalized(e,this._styles)}toString(){return this.isEmpty?"":this._getStylesEntries().map(e=>e.join(":")).sort().join(";")+";"}getAsString(e){if(this.isEmpty)return;if(this._styles[e]&&!Object(i.a)(this._styles[e]))return this._styles[e];const t=this._styleProcessor.getReducedForm(e,this._styles).find(([t])=>t===e);return Array.isArray(t)?t[1]:void 0}getStyleNames(e=!1){if(this.isEmpty)return[];if(e)return this._styleProcessor.getStyleNames(this._styles);return this._getStylesEntries().map(([e])=>e)}clear(){this._styles={}}_getStylesEntries(){const e=[],t=Object.keys(this._styles);for(const o of t)e.push(...this._styleProcessor.getReducedForm(o,this._styles));return e}_cleanEmptyObjectsOnPath(e){const t=e.split(".");if(!(t.length>1))return;const o=t.splice(0,t.length-1).join("."),i=x(this._styles,o);if(!i)return;!Array.from(Object.keys(i)).length&&this.remove(o)}}class te{constructor(){this._normalizers=new Map,this._extractors=new Map,this._reducers=new Map,this._consumables=new Map}toNormalizedForm(e,t,o){if(Object(i.a)(t))ie(o,oe(e),t);else if(this._normalizers.has(e)){const i=this._normalizers.get(e),{path:s,value:r}=i(t);ie(o,s,r)}else ie(o,e,t)}getNormalized(e,t){if(!e)return J({},t);if(void 0!==t[e])return t[e];if(this._extractors.has(e)){const o=this._extractors.get(e);if("string"==typeof o)return x(t,o);const i=o(e,t);if(i)return i}return x(t,oe(e))}getReducedForm(e,t){const o=this.getNormalized(e,t);if(void 0===o)return[];if(this._reducers.has(e)){return this._reducers.get(e)(o)}return[[e,o]]}getStyleNames(e){const t=Array.from(this._consumables.keys()).filter(t=>{const o=this.getNormalized(t,e);return o&&"object"==typeof o?Object.keys(o).length:o}),o=new Set([...t,...Object.keys(e)]);return Array.from(o.values())}getRelatedStyles(e){return this._consumables.get(e)||[]}setNormalizer(e,t){this._normalizers.set(e,t)}setExtractor(e,t){this._extractors.set(e,t)}setReducer(e,t){this._reducers.set(e,t)}setStyleRelation(e,t){this._mapStyleNames(e,t);for(const o of t)this._mapStyleNames(o,[e])}_mapStyleNames(e,t){this._consumables.has(e)||this._consumables.set(e,[]),this._consumables.get(e).push(...t)}}function oe(e){return e.replace("-",".")}function ie(e,t,o){let s=o;Object(i.a)(o)&&(s=J({},x(e,t),o)),Q(e,t,s)}},"./packages/ckeditor5-engine/src/view/text.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return s}));var i=o("./packages/ckeditor5-engine/src/view/node.js");class s extends i.a{constructor(e,t){super(e),this._textData=t}is(e){return"$text"===e||"view:$text"===e||"text"===e||"view:text"===e||"node"===e||"view:node"===e}get data(){return this._textData}get _data(){return this.data}set _data(e){this._fireChange("text",this),this._textData=e}isSimilar(e){return e instanceof s&&(this===e||this.data===e.data)}_clone(){return new s(this.document,this.data)}}},"./packages/ckeditor5-engine/src/view/textproxy.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return s}));var i=o("./packages/ckeditor5-utils/src/ckeditorerror.js");class s{constructor(e,t,o){if(this.textNode=e,t<0||t>e.data.length)throw new i.a("view-textproxy-wrong-offsetintext",this);if(o<0||t+o>e.data.length)throw new i.a("view-textproxy-wrong-length",this);this.data=e.data.substring(t,t+o),this.offsetInText=t}get offsetSize(){return this.data.length}get isPartial(){return this.data.length!==this.textNode.data.length}get parent(){return this.textNode.parent}get root(){return this.textNode.root}get document(){return this.textNode.document}is(e){return"$textProxy"===e||"view:$textProxy"===e||"textProxy"===e||"view:textProxy"===e}getAncestors(e={includeSelf:!1,parentFirst:!1}){const t=[];let o=e.includeSelf?this.textNode:this.parent;for(;null!==o;)t[e.parentFirst?"push":"unshift"](o),o=o.parent;return t}}},"./packages/ckeditor5-engine/src/view/treewalker.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return c}));var i=o("./packages/ckeditor5-engine/src/view/element.js"),s=o("./packages/ckeditor5-engine/src/view/text.js"),r=o("./packages/ckeditor5-engine/src/view/textproxy.js"),n=o("./packages/ckeditor5-engine/src/view/position.js"),a=o("./packages/ckeditor5-utils/src/ckeditorerror.js");class c{constructor(e={}){if(!e.boundaries&&!e.startPosition)throw new a.a("view-tree-walker-no-start-position",null);if(e.direction&&"forward"!=e.direction&&"backward"!=e.direction)throw new a.a("view-tree-walker-unknown-direction",e.startPosition,{direction:e.direction});this.boundaries=e.boundaries||null,e.startPosition?this.position=n.a._createAt(e.startPosition):this.position=n.a._createAt(e.boundaries["backward"==e.direction?"end":"start"]),this.direction=e.direction||"forward",this.singleCharacters=!!e.singleCharacters,this.shallow=!!e.shallow,this.ignoreElementEnd=!!e.ignoreElementEnd,this._boundaryStartParent=this.boundaries?this.boundaries.start.parent:null,this._boundaryEndParent=this.boundaries?this.boundaries.end.parent:null}[Symbol.iterator](){return this}skip(e){let t,o,i;do{i=this.position,({done:t,value:o}=this.next())}while(!t&&e(o));t||(this.position=i)}next(){return"forward"==this.direction?this._next():this._previous()}_next(){let e=this.position.clone();const t=this.position,o=e.parent;if(null===o.parent&&e.offset===o.childCount)return{done:!0};if(o===this._boundaryEndParent&&e.offset==this.boundaries.end.offset)return{done:!0};let a;if(o instanceof s.a){if(e.isAtEnd)return this.position=n.a._createAfter(o),this._next();a=o.data[e.offset]}else a=o.getChild(e.offset);if(a instanceof i.a)return this.shallow?e.offset++:e=new n.a(a,0),this.position=e,this._formatReturnValue("elementStart",a,t,e,1);if(a instanceof s.a){if(this.singleCharacters)return e=new n.a(a,0),this.position=e,this._next();{let o,i=a.data.length;return a==this._boundaryEndParent?(i=this.boundaries.end.offset,o=new r.a(a,0,i),e=n.a._createAfter(o)):(o=new r.a(a,0,a.data.length),e.offset++),this.position=e,this._formatReturnValue("text",o,t,e,i)}}if("string"==typeof a){let i;if(this.singleCharacters)i=1;else{i=(o===this._boundaryEndParent?this.boundaries.end.offset:o.data.length)-e.offset}const s=new r.a(o,e.offset,i);return e.offset+=i,this.position=e,this._formatReturnValue("text",s,t,e,i)}return e=n.a._createAfter(o),this.position=e,this.ignoreElementEnd?this._next():this._formatReturnValue("elementEnd",o,t,e)}_previous(){let e=this.position.clone();const t=this.position,o=e.parent;if(null===o.parent&&0===e.offset)return{done:!0};if(o==this._boundaryStartParent&&e.offset==this.boundaries.start.offset)return{done:!0};let a;if(o instanceof s.a){if(e.isAtStart)return this.position=n.a._createBefore(o),this._previous();a=o.data[e.offset-1]}else a=o.getChild(e.offset-1);if(a instanceof i.a)return this.shallow?(e.offset--,this.position=e,this._formatReturnValue("elementStart",a,t,e,1)):(e=new n.a(a,a.childCount),this.position=e,this.ignoreElementEnd?this._previous():this._formatReturnValue("elementEnd",a,t,e));if(a instanceof s.a){if(this.singleCharacters)return e=new n.a(a,a.data.length),this.position=e,this._previous();{let o,i=a.data.length;if(a==this._boundaryStartParent){const t=this.boundaries.start.offset;o=new r.a(a,t,a.data.length-t),i=o.data.length,e=n.a._createBefore(o)}else o=new r.a(a,0,a.data.length),e.offset--;return this.position=e,this._formatReturnValue("text",o,t,e,i)}}if("string"==typeof a){let i;if(this.singleCharacters)i=1;else{const t=o===this._boundaryStartParent?this.boundaries.start.offset:0;i=e.offset-t}e.offset-=i;const s=new r.a(o,e.offset,i);return this.position=e,this._formatReturnValue("text",s,t,e,i)}return e=n.a._createBefore(o),this.position=e,this._formatReturnValue("elementStart",o,t,e,1)}_formatReturnValue(e,t,o,i,s){return t instanceof r.a&&(t.offsetInText+t.data.length==t.textNode.data.length&&("forward"!=this.direction||this.boundaries&&this.boundaries.end.isEqual(this.position)?o=n.a._createAfter(t.textNode):(i=n.a._createAfter(t.textNode),this.position=i)),0===t.offsetInText&&("backward"!=this.direction||this.boundaries&&this.boundaries.start.isEqual(this.position)?o=n.a._createBefore(t.textNode):(i=n.a._createBefore(t.textNode),this.position=i))),{done:!1,value:{type:e,item:t,previousPosition:o,nextPosition:i,length:s}}}}},"./packages/ckeditor5-engine/src/view/uielement.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return a})),o.d(t,"b",(function(){return c}));var i=o("./packages/ckeditor5-engine/src/view/element.js"),s=o("./packages/ckeditor5-utils/src/ckeditorerror.js"),r=o("./packages/ckeditor5-engine/src/view/node.js"),n=o("./packages/ckeditor5-utils/src/keyboard.js");class a extends i.a{constructor(e,t,o,i){super(e,t,o,i),this._isAllowedInsideAttributeElement=!0,this.getFillerOffset=l}is(e,t=null){return t?t===this.name&&("uiElement"===e||"view:uiElement"===e||"element"===e||"view:element"===e):"uiElement"===e||"view:uiElement"===e||"element"===e||"view:element"===e||"node"===e||"view:node"===e}_insertChild(e,t){if(t&&(t instanceof r.a||Array.from(t).length>0))throw new s.a("view-uielement-cannot-add",this)}render(e){return this.toDomElement(e)}toDomElement(e){const t=e.createElement(this.name);for(const e of this.getAttributeKeys())t.setAttribute(e,this.getAttribute(e));return t}}function c(e){e.document.on("arrowKey",(t,o)=>function(e,t,o){if(t.keyCode==n.f.arrowright){const e=t.domTarget.ownerDocument.defaultView.getSelection(),i=1==e.rangeCount&&e.getRangeAt(0).collapsed;if(i||t.shiftKey){const t=e.focusNode,s=e.focusOffset,r=o.domPositionToView(t,s);if(null===r)return;let n=!1;const a=r.getLastMatchingPosition(e=>(e.item.is("uiElement")&&(n=!0),!(!e.item.is("uiElement")&&!e.item.is("attributeElement"))));if(n){const t=o.viewPositionToDom(a);i?e.collapse(t.parent,t.offset):e.extend(t.parent,t.offset)}}}}(0,o,e.domConverter),{priority:"low"})}function l(){return null}},"./packages/ckeditor5-engine/theme/placeholder.css":function(e,t,o){var i=o("./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),s=o("./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-engine/theme/placeholder.css");"string"==typeof(s=s.__esModule?s.default:s)&&(s=[[e.i,s,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};i(s,r);e.exports=s.locals||{}},"./packages/ckeditor5-engine/theme/renderer.css":function(e,t,o){var i=o("./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),s=o("./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-engine/theme/renderer.css");"string"==typeof(s=s.__esModule?s.default:s)&&(s=[[e.i,s,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};i(s,r);e.exports=s.locals||{}},"./packages/ckeditor5-enter/src/enter.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return l}));var i=o("./packages/ckeditor5-core/src/plugin.js"),s=o("./packages/ckeditor5-core/src/command.js"),r=o("./packages/ckeditor5-enter/src/utils.js");class n extends s.a{execute(){const e=this.editor.model,t=e.document;e.change(o=>{!function(e,t,o,i){const s=o.isCollapsed,n=o.getFirstRange(),c=n.start.parent,l=n.end.parent;if(i.isLimit(c)||i.isLimit(l))return void(s||c!=l||e.deleteContent(o));if(s){const e=Object(r.a)(t.model.schema,o.getAttributes());a(t,n.start),t.setSelectionAttribute(e)}else{const i=!(n.start.isAtStart&&n.end.isAtEnd),s=c==l;e.deleteContent(o,{leaveUnmerged:i}),i&&(s?a(t,o.focus):t.setSelection(l,0))}}(this.editor.model,o,t.selection,e.schema),this.fire("afterExecute",{writer:o})})}}function a(e,t){e.split(t),e.setSelection(t.parent.nextSibling,0)}var c=o("./packages/ckeditor5-enter/src/enterobserver.js");class l extends i.a{static get pluginName(){return"Enter"}init(){const e=this.editor,t=e.editing.view,o=t.document;t.addObserver(c.a),e.commands.add("enter",new n(e)),this.listenTo(o,"enter",(o,i)=>{i.preventDefault(),i.isSoft||(e.execute("enter"),t.scrollToTheSelection())},{priority:"low"})}}},"./packages/ckeditor5-enter/src/enterobserver.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return a}));var i=o("./packages/ckeditor5-engine/src/view/observer/observer.js"),s=o("./packages/ckeditor5-engine/src/view/observer/domeventdata.js"),r=o("./packages/ckeditor5-engine/src/view/observer/bubblingeventinfo.js"),n=o("./packages/ckeditor5-utils/src/keyboard.js");class a extends i.a{constructor(e){super(e);const t=this.document;t.on("keydown",(e,o)=>{if(this.isEnabled&&o.keyCode==n.f.enter){const i=new r.a(t,"enter",t.selection.getFirstRange());t.fire(i,new s.a(t,o.domEvent,{isSoft:o.shiftKey})),i.stop.called&&e.stop()}})}observe(){}}},"./packages/ckeditor5-enter/src/utils.js":function(e,t,o){"use strict";function*i(e,t){for(const o of t)o&&e.getAttributeProperties(o[0]).copyOnEnter&&(yield o)}o.d(t,"a",(function(){return i}))},"./packages/ckeditor5-typing/src/delete.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return g}));var i=o("./packages/ckeditor5-core/src/plugin.js"),s=o("./packages/ckeditor5-core/src/command.js"),r=o("./packages/ckeditor5-utils/src/count.js"),n=o("./packages/ckeditor5-typing/src/utils/changebuffer.js");class a extends s.a{constructor(e,t){super(e),this.direction=t,this._buffer=new n.a(e.model,e.config.get("typing.undoStep"))}get buffer(){return this._buffer}execute(e={}){const t=this.editor.model,o=t.document;t.enqueueChange(this._buffer.batch,i=>{this._buffer.lock();const s=i.createSelection(e.selection||o.selection),n=e.sequence||1,a=s.isCollapsed;if(s.isCollapsed&&t.modifySelection(s,{direction:this.direction,unit:e.unit}),this._shouldEntireContentBeReplacedWithParagraph(n))return void this._replaceEntireContentWithParagraph(i);if(this._shouldReplaceFirstBlockWithParagraph(s,n))return void this.editor.execute("paragraph",{selection:s});if(s.isCollapsed)return;let c=0;s.getFirstRange().getMinimalFlatRanges().forEach(e=>{c+=Object(r.a)(e.getWalker({singleCharacters:!0,ignoreElementEnd:!0,shallow:!0}))}),t.deleteContent(s,{doNotResetEntireContent:a,direction:this.direction}),this._buffer.input(c),i.setSelection(s),this._buffer.unlock()})}_shouldEntireContentBeReplacedWithParagraph(e){if(e>1)return!1;const t=this.editor.model,o=t.document.selection,i=t.schema.getLimitElement(o);if(!(o.isCollapsed&&o.containsEntireContent(i)))return!1;if(!t.schema.checkChild(i,"paragraph"))return!1;const s=i.getChild(0);return!s||"paragraph"!==s.name}_replaceEntireContentWithParagraph(e){const t=this.editor.model,o=t.document.selection,i=t.schema.getLimitElement(o),s=e.createElement("paragraph");e.remove(e.createRangeIn(i)),e.insert(s,i),e.setSelection(s,0)}_shouldReplaceFirstBlockWithParagraph(e,t){const o=this.editor.model;if(t>1||"backward"!=this.direction)return!1;if(!e.isCollapsed)return!1;const i=e.getFirstPosition(),s=o.schema.getLimitElement(i),r=s.getChild(0);return i.parent==r&&(!!e.containsEntireContent(r)&&(!!o.schema.checkChild(s,"paragraph")&&"paragraph"!=r.name))}}var c=o("./packages/ckeditor5-engine/src/view/observer/observer.js"),l=o("./packages/ckeditor5-engine/src/view/observer/domeventdata.js"),d=o("./packages/ckeditor5-engine/src/view/observer/bubblingeventinfo.js"),u=o("./packages/ckeditor5-utils/src/keyboard.js"),h=o("./packages/ckeditor5-utils/src/env.js");class p extends c.a{constructor(e){super(e);const t=e.document;let o=0;function i(e,o,i){const s=new d.a(t,"delete",t.selection.getFirstRange());t.fire(s,new l.a(t,o,i)),s.stop.called&&e.stop()}t.on("keyup",(e,t)=>{t.keyCode!=u.f.delete&&t.keyCode!=u.f.backspace||(o=0)}),t.on("keydown",(e,t)=>{const s={};if(t.keyCode==u.f.delete)s.direction="forward",s.unit="character";else{if(t.keyCode!=u.f.backspace)return;s.direction="backward",s.unit="codePoint"}const r=h.a.isMac?t.altKey:t.ctrlKey;s.unit=r?"word":s.unit,s.sequence=++o,i(e,t.domEvent,s)}),h.a.isAndroid&&t.on("beforeinput",(t,o)=>{if("deleteContentBackward"!=o.domEvent.inputType)return;const s={unit:"codepoint",direction:"backward",sequence:1},r=o.domTarget.ownerDocument.defaultView.getSelection();r.anchorNode==r.focusNode&&r.anchorOffset+1!=r.focusOffset&&(s.selectionToRemove=e.domConverter.domSelectionToView(r)),i(t,o.domEvent,s)})}observe(){}}class g extends i.a{static get pluginName(){return"Delete"}init(){const e=this.editor,t=e.editing.view,o=t.document,i=e.model.document;t.addObserver(p),this._undoOnBackspace=!1;const s=new a(e,"forward");if(e.commands.add("deleteForward",s),e.commands.add("forwardDelete",s),e.commands.add("delete",new a(e,"backward")),this.listenTo(o,"delete",(o,i)=>{const s={unit:i.unit,sequence:i.sequence};if(i.selectionToRemove){const t=e.model.createSelection(),o=[];for(const t of i.selectionToRemove.getRanges())o.push(e.editing.mapper.toModelRange(t));t.setTo(o),s.selection=t}e.execute("forward"==i.direction?"deleteForward":"delete",s),i.preventDefault(),t.scrollToTheSelection()},{priority:"low"}),h.a.isAndroid){let e=null;this.listenTo(o,"delete",(t,o)=>{const i=o.domTarget.ownerDocument.defaultView.getSelection();e={anchorNode:i.anchorNode,anchorOffset:i.anchorOffset,focusNode:i.focusNode,focusOffset:i.focusOffset}},{priority:"lowest"}),this.listenTo(o,"keyup",(t,o)=>{if(e){const t=o.domTarget.ownerDocument.defaultView.getSelection();t.collapse(e.anchorNode,e.anchorOffset),t.extend(e.focusNode,e.focusOffset),e=null}})}this.editor.plugins.has("UndoEditing")&&(this.listenTo(o,"delete",(t,o)=>{this._undoOnBackspace&&"backward"==o.direction&&1==o.sequence&&"codePoint"==o.unit&&(this._undoOnBackspace=!1,e.execute("undo"),o.preventDefault(),t.stop())},{context:"$capture"}),this.listenTo(i,"change",()=>{this._undoOnBackspace=!1}))}requestUndoOnBackspace(){this.editor.plugins.has("UndoEditing")&&(this._undoOnBackspace=!0)}}},"./packages/ckeditor5-typing/src/utils/changebuffer.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return i}));class i{constructor(e,t=20){this.model=e,this.size=0,this.limit=t,this.isLocked=!1,this._changeCallback=(e,t)=>{"transparent"!=t.type&&t!==this._batch&&this._reset(!0)},this._selectionChangeCallback=()=>{this._reset()},this.model.document.on("change",this._changeCallback),this.model.document.selection.on("change:range",this._selectionChangeCallback),this.model.document.selection.on("change:attribute",this._selectionChangeCallback)}get batch(){return this._batch||(this._batch=this.model.createBatch()),this._batch}input(e){this.size+=e,this.size>=this.limit&&this._reset(!0)}lock(){this.isLocked=!0}unlock(){this.isLocked=!1}destroy(){this.model.document.off("change",this._changeCallback),this.model.document.selection.off("change:range",this._selectionChangeCallback),this.model.document.selection.off("change:attribute",this._selectionChangeCallback)}_reset(e){this.isLocked&&!e||(this._batch=null,this.size=0)}}},"./packages/ckeditor5-typing/src/utils/injectunsafekeystrokeshandling.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return r})),o.d(t,"b",(function(){return a}));var i=o("./packages/ckeditor5-utils/src/keyboard.js"),s=o("./packages/ckeditor5-utils/src/env.js");function r(e){let t=null;const o=e.model,i=e.editing.view,r=e.commands.get("input");function n(e){const s=o.document,n=i.document.isComposing,l=t&&t.isEqual(s.selection);t=null,r.isEnabled&&(a(e)||s.selection.isCollapsed||n&&229===e.keyCode||!n&&229===e.keyCode&&l||c())}function c(){const e=r.buffer;e.lock();const t=e.batch;r._batches.add(t),o.enqueueChange(t,()=>{o.deleteContent(o.document.selection)}),e.unlock()}s.a.isAndroid?i.document.on("beforeinput",(e,t)=>n(t),{priority:"lowest"}):i.document.on("keydown",(e,t)=>n(t),{priority:"lowest"}),i.document.on("compositionstart",(function(){const e=o.document,t=1!==e.selection.rangeCount||e.selection.getFirstRange().isFlat;if(e.selection.isCollapsed||t)return;c()}),{priority:"lowest"}),i.document.on("compositionend",()=>{t=o.createSelection(o.document.selection)},{priority:"lowest"})}const n=[Object(i.a)("arrowUp"),Object(i.a)("arrowRight"),Object(i.a)("arrowDown"),Object(i.a)("arrowLeft"),9,16,17,18,19,20,27,33,34,35,36,45,91,93,144,145,173,174,175,176,177,178,179,255];for(let e=112;e<=135;e++)n.push(e);function a(e){return!(!e.ctrlKey&&!e.metaKey)||n.includes(e.keyCode)}},"./packages/ckeditor5-ui/src/bindings/clickoutsidehandler.js":function(e,t,o){"use strict";function i({emitter:e,activator:t,callback:o,contextElements:i}){e.listenTo(document,"mousedown",(e,s)=>{if(!t())return;const r="function"==typeof s.composedPath?s.composedPath():[];for(const e of i)if(e.contains(s.target)||r.includes(e))return;o()})}o.d(t,"a",(function(){return i}))},"./packages/ckeditor5-ui/src/button/buttonview.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return c}));var i=o("./packages/ckeditor5-ui/src/view.js"),s=o("./packages/ckeditor5-ui/src/icon/iconview.js"),r=o("./packages/ckeditor5-ui/src/tooltip/tooltipview.js"),n=o("./packages/ckeditor5-utils/src/uid.js"),a=o("./packages/ckeditor5-utils/src/keyboard.js");o("./packages/ckeditor5-ui/theme/components/button/button.css");class c extends i.a{constructor(e){super(e);const t=this.bindTemplate,o=Object(n.a)();this.set("class"),this.set("labelStyle"),this.set("icon"),this.set("isEnabled",!0),this.set("isOn",!1),this.set("isVisible",!0),this.set("isToggleable",!1),this.set("keystroke"),this.set("label"),this.set("tabindex",-1),this.set("tooltip"),this.set("tooltipPosition","s"),this.set("type","button"),this.set("withText",!1),this.set("withKeystroke",!1),this.children=this.createCollection(),this.tooltipView=this._createTooltipView(),this.labelView=this._createLabelView(o),this.iconView=new s.a,this.iconView.extendTemplate({attributes:{class:"ck-button__icon"}}),this.keystrokeView=this._createKeystrokeView(),this.bind("_tooltipString").to(this,"tooltip",this,"label",this,"keystroke",this._getTooltipString.bind(this)),this.setTemplate({tag:"button",attributes:{class:["ck","ck-button",t.to("class"),t.if("isEnabled","ck-disabled",e=>!e),t.if("isVisible","ck-hidden",e=>!e),t.to("isOn",e=>e?"ck-on":"ck-off"),t.if("withText","ck-button_with-text"),t.if("withKeystroke","ck-button_with-keystroke")],type:t.to("type",e=>e||"button"),tabindex:t.to("tabindex"),"aria-labelledby":"ck-editor__aria-label_"+o,"aria-disabled":t.if("isEnabled",!0,e=>!e),"aria-pressed":t.to("isOn",e=>!!this.isToggleable&&String(e))},children:this.children,on:{mousedown:t.to(e=>{e.preventDefault()}),click:t.to(e=>{this.isEnabled?this.fire("execute"):e.preventDefault()})}})}render(){super.render(),this.icon&&(this.iconView.bind("content").to(this,"icon"),this.children.add(this.iconView)),this.children.add(this.tooltipView),this.children.add(this.labelView),this.withKeystroke&&this.keystroke&&this.children.add(this.keystrokeView)}focus(){this.element.focus()}_createTooltipView(){const e=new r.a;return e.bind("text").to(this,"_tooltipString"),e.bind("position").to(this,"tooltipPosition"),e}_createLabelView(e){const t=new i.a,o=this.bindTemplate;return t.setTemplate({tag:"span",attributes:{class:["ck","ck-button__label"],style:o.to("labelStyle"),id:"ck-editor__aria-label_"+e},children:[{text:this.bindTemplate.to("label")}]}),t}_createKeystrokeView(){const e=new i.a;return e.setTemplate({tag:"span",attributes:{class:["ck","ck-button__keystroke"]},children:[{text:this.bindTemplate.to("keystroke",e=>Object(a.b)(e))}]}),e}_getTooltipString(e,t,o){return e?"string"==typeof e?e:(o&&(o=Object(a.b)(o)),e instanceof Function?e(t,o):`${t}${o?` (${o})`:""}`):""}}},"./packages/ckeditor5-ui/src/button/switchbuttonview.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return r}));var i=o("./packages/ckeditor5-ui/src/view.js"),s=o("./packages/ckeditor5-ui/src/button/buttonview.js");o("./packages/ckeditor5-ui/theme/components/button/switchbutton.css");class r extends s.a{constructor(e){super(e),this.isToggleable=!0,this.toggleSwitchView=this._createToggleView(),this.extendTemplate({attributes:{class:"ck-switchbutton"}})}render(){super.render(),this.children.add(this.toggleSwitchView)}_createToggleView(){const e=new i.a;return e.setTemplate({tag:"span",attributes:{class:["ck","ck-button__toggle"]},children:[{tag:"span",attributes:{class:["ck","ck-button__toggle__inner"]}}]}),e}}},"./packages/ckeditor5-ui/src/dropdown/button/dropdownbuttonview.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return n}));var i=o("./packages/ckeditor5-ui/src/button/buttonview.js"),s=o("./packages/ckeditor5-ui/theme/icons/dropdown-arrow.svg"),r=o("./packages/ckeditor5-ui/src/icon/iconview.js");class n extends i.a{constructor(e){super(e),this.arrowView=this._createArrowView(),this.extendTemplate({attributes:{"aria-haspopup":!0}}),this.delegate("execute").to(this,"open")}render(){super.render(),this.children.add(this.arrowView)}_createArrowView(){const e=new r.a;return e.content=s.a,e.extendTemplate({attributes:{class:"ck-dropdown__arrow"}}),e}}},"./packages/ckeditor5-ui/src/dropdown/utils.js":function(e,t,o){"use strict";o.d(t,"c",(function(){return m})),o.d(t,"b",(function(){return k})),o.d(t,"a",(function(){return b}));var i=o("./packages/ckeditor5-ui/src/view.js");class s extends i.a{constructor(e){super(e);const t=this.bindTemplate;this.set("isVisible",!1),this.set("position","se"),this.children=this.createCollection(),this.setTemplate({tag:"div",attributes:{class:["ck","ck-reset","ck-dropdown__panel",t.to("position",e=>"ck-dropdown__panel_"+e),t.if("isVisible","ck-dropdown__panel-visible")]},children:this.children,on:{selectstart:t.to(e=>e.preventDefault())}})}focus(){this.children.length&&this.children.first.focus()}focusLast(){if(this.children.length){const e=this.children.last;"function"==typeof e.focusLast?e.focusLast():e.focus()}}}var r=o("./packages/ckeditor5-utils/src/keystrokehandler.js"),n=(o("./packages/ckeditor5-ui/theme/components/dropdown/dropdown.css"),o("./packages/ckeditor5-utils/src/dom/position.js"));class a extends i.a{constructor(e,t,o){super(e);const i=this.bindTemplate;this.buttonView=t,this.panelView=o,this.set("isOpen",!1),this.set("isEnabled",!0),this.set("class"),this.set("id"),this.set("panelPosition","auto"),this.keystrokes=new r.a,this.setTemplate({tag:"div",attributes:{class:["ck","ck-dropdown",i.to("class"),i.if("isEnabled","ck-disabled",e=>!e)],id:i.to("id"),"aria-describedby":i.to("ariaDescribedById")},children:[t,o]}),t.extendTemplate({attributes:{class:["ck-dropdown__button"]}})}render(){super.render(),this.listenTo(this.buttonView,"open",()=>{this.isOpen=!this.isOpen}),this.panelView.bind("isVisible").to(this,"isOpen"),this.on("change:isOpen",()=>{this.isOpen&&("auto"===this.panelPosition?this.panelView.position=a._getOptimalPosition({element:this.panelView.element,target:this.buttonView.element,fitInViewport:!0,positions:this._panelPositions}).name:this.panelView.position=this.panelPosition)}),this.keystrokes.listenTo(this.element);const e=(e,t)=>{this.isOpen&&(this.buttonView.focus(),this.isOpen=!1,t())};this.keystrokes.set("arrowdown",(e,t)=>{this.buttonView.isEnabled&&!this.isOpen&&(this.isOpen=!0,t())}),this.keystrokes.set("arrowright",(e,t)=>{this.isOpen&&t()}),this.keystrokes.set("arrowleft",e),this.keystrokes.set("esc",e)}focus(){this.buttonView.focus()}get _panelPositions(){const{south:e,north:t,southEast:o,southWest:i,northEast:s,northWest:r,southMiddleEast:n,southMiddleWest:c,northMiddleEast:l,northMiddleWest:d}=a.defaultPanelPositions;return"rtl"!==this.locale.uiLanguageDirection?[o,i,n,c,e,s,r,l,d,t]:[i,o,c,n,e,r,s,d,l,t]}}a.defaultPanelPositions={south:(e,t)=>({top:e.bottom,left:e.left-(t.width-e.width)/2,name:"s"}),southEast:e=>({top:e.bottom,left:e.left,name:"se"}),southWest:(e,t)=>({top:e.bottom,left:e.left-t.width+e.width,name:"sw"}),southMiddleEast:(e,t)=>({top:e.bottom,left:e.left-(t.width-e.width)/4,name:"sme"}),southMiddleWest:(e,t)=>({top:e.bottom,left:e.left-3*(t.width-e.width)/4,name:"smw"}),north:(e,t)=>({top:e.top-t.height,left:e.left-(t.width-e.width)/2,name:"n"}),northEast:(e,t)=>({top:e.top-t.height,left:e.left,name:"ne"}),northWest:(e,t)=>({top:e.top-t.height,left:e.left-t.width+e.width,name:"nw"}),northMiddleEast:(e,t)=>({top:e.top-t.height,left:e.left-(t.width-e.width)/4,name:"nme"}),northMiddleWest:(e,t)=>({top:e.top-t.height,left:e.left-3*(t.width-e.width)/4,name:"nmw"})},a._getOptimalPosition=n.a;var c=o("./packages/ckeditor5-ui/src/dropdown/button/dropdownbuttonview.js"),l=o("./packages/ckeditor5-ui/src/toolbar/toolbarview.js"),d=o("./packages/ckeditor5-ui/src/list/listview.js"),u=o("./packages/ckeditor5-ui/src/list/listitemview.js");class h extends i.a{constructor(e){super(e),this.setTemplate({tag:"li",attributes:{class:["ck","ck-list__separator"]}})}}var p=o("./packages/ckeditor5-ui/src/button/buttonview.js"),g=o("./packages/ckeditor5-ui/src/button/switchbuttonview.js"),f=o("./packages/ckeditor5-ui/src/bindings/clickoutsidehandler.js");o("./packages/ckeditor5-ui/theme/components/dropdown/toolbardropdown.css"),o("./packages/ckeditor5-ui/theme/components/dropdown/listdropdown.css");function m(e,t=c.a){const o=new t(e),i=new s(e),r=new a(e,o,i);return o.bind("isEnabled").to(r),o instanceof c.a?o.bind("isOn").to(r,"isOpen"):o.arrowView.bind("isOn").to(r,"isOpen"),function(e){(function(e){e.on("render",()=>{Object(f.a)({emitter:e,activator:()=>e.isOpen,callback:()=>{e.isOpen=!1},contextElements:[e.element]})})})(e),function(e){e.on("execute",t=>{t.source instanceof g.a||(e.isOpen=!1)})}(e),function(e){e.keystrokes.set("arrowdown",(t,o)=>{e.isOpen&&(e.panelView.focus(),o())}),e.keystrokes.set("arrowup",(t,o)=>{e.isOpen&&(e.panelView.focusLast(),o())})}(e)}(r),r}function k(e,t){const o=e.locale,i=o.t,s=e.toolbarView=new l.a(o);s.set("ariaLabel",i("Dropdown toolbar")),e.extendTemplate({attributes:{class:["ck-toolbar-dropdown"]}}),t.map(e=>s.items.add(e)),e.panelView.children.add(s),s.items.delegate("execute").to(e)}function b(e,t){const o=e.locale,i=e.listView=new d.a(o);i.items.bindTo(t).using(({type:e,model:t})=>{if("separator"===e)return new h(o);if("button"===e||"switchbutton"===e){const i=new u.a(o);let s;return s="button"===e?new p.a(o):new g.a(o),s.bind(...Object.keys(t)).to(t),s.delegate("execute").to(i),i.children.add(s),i}}),e.panelView.children.add(i),i.items.delegate("execute").to(e)}},"./packages/ckeditor5-ui/src/focuscycler.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return s}));var i=o("./packages/ckeditor5-utils/src/dom/global.js");class s{constructor(e){if(Object.assign(this,e),e.actions&&e.keystrokeHandler)for(const t in e.actions){let o=e.actions[t];"string"==typeof o&&(o=[o]);for(const i of o)e.keystrokeHandler.set(i,(e,o)=>{this[t](),o()})}}get first(){return this.focusables.find(r)||null}get last(){return this.focusables.filter(r).slice(-1)[0]||null}get next(){return this._getFocusableItem(1)}get previous(){return this._getFocusableItem(-1)}get current(){let e=null;return null===this.focusTracker.focusedElement?null:(this.focusables.find((t,o)=>{const i=t.element===this.focusTracker.focusedElement;return i&&(e=o),i}),e)}focusFirst(){this._focus(this.first)}focusLast(){this._focus(this.last)}focusNext(){this._focus(this.next)}focusPrevious(){this._focus(this.previous)}_focus(e){e&&e.focus()}_getFocusableItem(e){const t=this.current,o=this.focusables.length;if(!o)return null;if(null===t)return this[1===e?"first":"last"];let i=(t+o+e)%o;do{const t=this.focusables.get(i);if(r(t))return t;i=(i+o+e)%o}while(i!==t);return null}}function r(e){return!(!e.focus||"none"==i.a.window.getComputedStyle(e.element).display)}},"./packages/ckeditor5-ui/src/icon/iconview.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return s}));var i=o("./packages/ckeditor5-ui/src/view.js");o("./packages/ckeditor5-ui/theme/components/icon/icon.css");class s extends i.a{constructor(){super();const e=this.bindTemplate;this.set("content",""),this.set("viewBox","0 0 20 20"),this.set("fillColor",""),this.setTemplate({tag:"svg",ns:"http://www.w3.org/2000/svg",attributes:{class:["ck","ck-icon"],viewBox:e.to("viewBox")}})}render(){super.render(),this._updateXMLContent(),this._colorFillPaths(),this.on("change:content",()=>{this._updateXMLContent(),this._colorFillPaths()}),this.on("change:fillColor",()=>{this._colorFillPaths()})}_updateXMLContent(){if(this.content){const e=(new DOMParser).parseFromString(this.content.trim(),"image/svg+xml").querySelector("svg"),t=e.getAttribute("viewBox");for(t&&(this.viewBox=t),this.element.innerHTML="";e.childNodes.length>0;)this.element.appendChild(e.childNodes[0])}}_colorFillPaths(){this.fillColor&&this.element.querySelectorAll(".ck-icon__fill").forEach(e=>{e.style.fill=this.fillColor})}}},"./packages/ckeditor5-ui/src/list/listitemview.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return s}));var i=o("./packages/ckeditor5-ui/src/view.js");class s extends i.a{constructor(e){super(e),this.children=this.createCollection(),this.setTemplate({tag:"li",attributes:{class:["ck","ck-list__item"]},children:this.children})}focus(){this.children.first.focus()}}},"./packages/ckeditor5-ui/src/list/listview.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return a}));var i=o("./packages/ckeditor5-ui/src/view.js"),s=o("./packages/ckeditor5-utils/src/focustracker.js"),r=o("./packages/ckeditor5-ui/src/focuscycler.js"),n=o("./packages/ckeditor5-utils/src/keystrokehandler.js");o("./packages/ckeditor5-ui/theme/components/list/list.css");class a extends i.a{constructor(){super(),this.items=this.createCollection(),this.focusTracker=new s.a,this.keystrokes=new n.a,this._focusCycler=new r.a({focusables:this.items,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"arrowup",focusNext:"arrowdown"}}),this.setTemplate({tag:"ul",attributes:{class:["ck","ck-reset","ck-list"]},children:this.items})}render(){super.render();for(const e of this.items)this.focusTracker.add(e.element);this.items.on("add",(e,t)=>{this.focusTracker.add(t.element)}),this.items.on("remove",(e,t)=>{this.focusTracker.remove(t.element)}),this.keystrokes.listenTo(this.element)}focus(){this._focusCycler.focusFirst()}focusLast(){this._focusCycler.focusLast()}}},"./packages/ckeditor5-ui/src/panel/balloon/balloonpanelview.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return u}));var i=o("./packages/ckeditor5-ui/src/view.js"),s=o("./packages/ckeditor5-utils/src/dom/position.js"),r=o("./packages/ckeditor5-utils/src/dom/isrange.js"),n=o("./packages/ckeditor5-utils/src/dom/tounit.js"),a=o("./packages/ckeditor5-utils/src/dom/global.js"),c=o("./node_modules/lodash-es/isElement.js");o("./packages/ckeditor5-ui/theme/components/panel/balloonpanel.css");const l=Object(n.a)("px"),d=a.a.document.body;class u extends i.a{constructor(e){super(e);const t=this.bindTemplate;this.set("top",0),this.set("left",0),this.set("position","arrow_nw"),this.set("isVisible",!1),this.set("withArrow",!0),this.set("class"),this.content=this.createCollection(),this.setTemplate({tag:"div",attributes:{class:["ck","ck-balloon-panel",t.to("position",e=>"ck-balloon-panel_"+e),t.if("isVisible","ck-balloon-panel_visible"),t.if("withArrow","ck-balloon-panel_with-arrow"),t.to("class")],style:{top:t.to("top",l),left:t.to("left",l)}},children:this.content})}show(){this.isVisible=!0}hide(){this.isVisible=!1}attachTo(e){this.show();const t=u.defaultPositions,o=Object.assign({},{element:this.element,positions:[t.southArrowNorth,t.southArrowNorthMiddleWest,t.southArrowNorthMiddleEast,t.southArrowNorthWest,t.southArrowNorthEast,t.northArrowSouth,t.northArrowSouthMiddleWest,t.northArrowSouthMiddleEast,t.northArrowSouthWest,t.northArrowSouthEast,t.viewportStickyNorth],limiter:d,fitInViewport:!0},e),i=u._getOptimalPosition(o),s=parseInt(i.left),r=parseInt(i.top),{name:n,config:a={}}=i,{withArrow:c=!0}=a;Object.assign(this,{top:r,left:s,position:n,withArrow:c})}pin(e){this.unpin(),this._pinWhenIsVisibleCallback=()=>{this.isVisible?this._startPinning(e):this._stopPinning()},this._startPinning(e),this.listenTo(this,"change:isVisible",this._pinWhenIsVisibleCallback)}unpin(){this._pinWhenIsVisibleCallback&&(this._stopPinning(),this.stopListening(this,"change:isVisible",this._pinWhenIsVisibleCallback),this._pinWhenIsVisibleCallback=null,this.hide())}_startPinning(e){this.attachTo(e);const t=h(e.target),o=e.limiter?h(e.limiter):d;this.listenTo(a.a.document,"scroll",(i,s)=>{const r=s.target,n=t&&r.contains(t),a=o&&r.contains(o);!n&&!a&&t&&o||this.attachTo(e)},{useCapture:!0}),this.listenTo(a.a.window,"resize",()=>{this.attachTo(e)})}_stopPinning(){this.stopListening(a.a.document,"scroll"),this.stopListening(a.a.window,"resize")}}function h(e){return Object(c.a)(e)?e:Object(r.a)(e)?e.commonAncestorContainer:"function"==typeof e?h(e()):null}function p(e,t){return e.top-t.height-u.arrowVerticalOffset}function g(e){return e.bottom+u.arrowVerticalOffset}u.arrowHorizontalOffset=25,u.arrowVerticalOffset=10,u.stickyVerticalOffset=20,u._getOptimalPosition=s.a,u.defaultPositions={northWestArrowSouthWest:(e,t)=>({top:p(e,t),left:e.left-u.arrowHorizontalOffset,name:"arrow_sw"}),northWestArrowSouthMiddleWest:(e,t)=>({top:p(e,t),left:e.left-.25*t.width-u.arrowHorizontalOffset,name:"arrow_smw"}),northWestArrowSouth:(e,t)=>({top:p(e,t),left:e.left-t.width/2,name:"arrow_s"}),northWestArrowSouthMiddleEast:(e,t)=>({top:p(e,t),left:e.left-.75*t.width+u.arrowHorizontalOffset,name:"arrow_sme"}),northWestArrowSouthEast:(e,t)=>({top:p(e,t),left:e.left-t.width+u.arrowHorizontalOffset,name:"arrow_se"}),northArrowSouthWest:(e,t)=>({top:p(e,t),left:e.left+e.width/2-u.arrowHorizontalOffset,name:"arrow_sw"}),northArrowSouthMiddleWest:(e,t)=>({top:p(e,t),left:e.left+e.width/2-.25*t.width-u.arrowHorizontalOffset,name:"arrow_smw"}),northArrowSouth:(e,t)=>({top:p(e,t),left:e.left+e.width/2-t.width/2,name:"arrow_s"}),northArrowSouthMiddleEast:(e,t)=>({top:p(e,t),left:e.left+e.width/2-.75*t.width+u.arrowHorizontalOffset,name:"arrow_sme"}),northArrowSouthEast:(e,t)=>({top:p(e,t),left:e.left+e.width/2-t.width+u.arrowHorizontalOffset,name:"arrow_se"}),northEastArrowSouthWest:(e,t)=>({top:p(e,t),left:e.right-u.arrowHorizontalOffset,name:"arrow_sw"}),northEastArrowSouthMiddleWest:(e,t)=>({top:p(e,t),left:e.right-.25*t.width-u.arrowHorizontalOffset,name:"arrow_smw"}),northEastArrowSouth:(e,t)=>({top:p(e,t),left:e.right-t.width/2,name:"arrow_s"}),northEastArrowSouthMiddleEast:(e,t)=>({top:p(e,t),left:e.right-.75*t.width+u.arrowHorizontalOffset,name:"arrow_sme"}),northEastArrowSouthEast:(e,t)=>({top:p(e,t),left:e.right-t.width+u.arrowHorizontalOffset,name:"arrow_se"}),southWestArrowNorthWest:(e,t)=>({top:g(e),left:e.left-u.arrowHorizontalOffset,name:"arrow_nw"}),southWestArrowNorthMiddleWest:(e,t)=>({top:g(e),left:e.left-.25*t.width-u.arrowHorizontalOffset,name:"arrow_nmw"}),southWestArrowNorth:(e,t)=>({top:g(e),left:e.left-t.width/2,name:"arrow_n"}),southWestArrowNorthMiddleEast:(e,t)=>({top:g(e),left:e.left-.75*t.width+u.arrowHorizontalOffset,name:"arrow_nme"}),southWestArrowNorthEast:(e,t)=>({top:g(e),left:e.left-t.width+u.arrowHorizontalOffset,name:"arrow_ne"}),southArrowNorthWest:(e,t)=>({top:g(e),left:e.left+e.width/2-u.arrowHorizontalOffset,name:"arrow_nw"}),southArrowNorthMiddleWest:(e,t)=>({top:g(e),left:e.left+e.width/2-.25*t.width-u.arrowHorizontalOffset,name:"arrow_nmw"}),southArrowNorth:(e,t)=>({top:g(e),left:e.left+e.width/2-t.width/2,name:"arrow_n"}),southArrowNorthMiddleEast:(e,t)=>({top:g(e),left:e.left+e.width/2-.75*t.width+u.arrowHorizontalOffset,name:"arrow_nme"}),southArrowNorthEast:(e,t)=>({top:g(e),left:e.left+e.width/2-t.width+u.arrowHorizontalOffset,name:"arrow_ne"}),southEastArrowNorthWest:(e,t)=>({top:g(e),left:e.right-u.arrowHorizontalOffset,name:"arrow_nw"}),southEastArrowNorthMiddleWest:(e,t)=>({top:g(e),left:e.right-.25*t.width-u.arrowHorizontalOffset,name:"arrow_nmw"}),southEastArrowNorth:(e,t)=>({top:g(e),left:e.right-t.width/2,name:"arrow_n"}),southEastArrowNorthMiddleEast:(e,t)=>({top:g(e),left:e.right-.75*t.width+u.arrowHorizontalOffset,name:"arrow_nme"}),southEastArrowNorthEast:(e,t)=>({top:g(e),left:e.right-t.width+u.arrowHorizontalOffset,name:"arrow_ne"}),viewportStickyNorth:(e,t,o)=>e.getIntersection(o)?{top:o.top+u.stickyVerticalOffset,left:e.left+e.width/2-t.width/2,name:"arrowless",config:{withArrow:!1}}:null}},"./packages/ckeditor5-ui/src/panel/balloon/contextualballoon.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return h}));var i=o("./packages/ckeditor5-core/src/plugin.js"),s=o("./packages/ckeditor5-ui/src/panel/balloon/balloonpanelview.js"),r=o("./packages/ckeditor5-ui/src/view.js"),n=o("./packages/ckeditor5-ui/src/button/buttonview.js"),a=o("./packages/ckeditor5-utils/src/ckeditorerror.js"),c=o("./packages/ckeditor5-utils/src/focustracker.js"),l=o("./packages/ckeditor5-utils/src/dom/tounit.js"),d=o("./packages/ckeditor5-utils/src/dom/rect.js");o("./packages/ckeditor5-ui/theme/components/panel/balloonrotator.css"),o("./packages/ckeditor5-ui/theme/components/panel/fakepanel.css");const u=Object(l.a)("px");class h extends i.a{static get pluginName(){return"ContextualBalloon"}constructor(e){super(e),this.positionLimiter=()=>{const e=this.editor.editing.view,t=e.document.selection.editableElement;return t?e.domConverter.mapViewToDom(t.root):null},this.set("visibleView",null),this.view=new s.a(e.locale),e.ui.view.body.add(this.view),e.ui.focusTracker.add(this.view.element),this._viewToStack=new Map,this._idToStack=new Map,this.set("_numberOfStacks",0),this.set("_singleViewMode",!1),this._rotatorView=this._createRotatorView(),this._fakePanelsView=this._createFakePanelsView()}hasView(e){return Array.from(this._viewToStack.keys()).includes(e)}add(e){if(this.hasView(e.view))throw new a.a("contextualballoon-add-view-exist",[this,e]);const t=e.stackId||"main";if(!this._idToStack.has(t))return this._idToStack.set(t,new Map([[e.view,e]])),this._viewToStack.set(e.view,this._idToStack.get(t)),this._numberOfStacks=this._idToStack.size,void(this._visibleStack&&!e.singleViewMode||this.showStack(t));const o=this._idToStack.get(t);e.singleViewMode&&this.showStack(t),o.set(e.view,e),this._viewToStack.set(e.view,o),o===this._visibleStack&&this._showView(e)}remove(e){if(!this.hasView(e))throw new a.a("contextualballoon-remove-view-not-exist",[this,e]);const t=this._viewToStack.get(e);this._singleViewMode&&this.visibleView===e&&(this._singleViewMode=!1),this.visibleView===e&&(1===t.size?this._idToStack.size>1?this._showNextStack():(this.view.hide(),this.visibleView=null,this._rotatorView.hideView()):this._showView(Array.from(t.values())[t.size-2])),1===t.size?(this._idToStack.delete(this._getStackId(t)),this._numberOfStacks=this._idToStack.size):t.delete(e),this._viewToStack.delete(e)}updatePosition(e){e&&(this._visibleStack.get(this.visibleView).position=e),this.view.pin(this._getBalloonPosition()),this._fakePanelsView.updatePosition()}showStack(e){this.visibleStack=e;const t=this._idToStack.get(e);if(!t)throw new a.a("contextualballoon-showstack-stack-not-exist",this);this._visibleStack!==t&&this._showView(Array.from(t.values()).pop())}get _visibleStack(){return this._viewToStack.get(this.visibleView)}_getStackId(e){return Array.from(this._idToStack.entries()).find(t=>t[1]===e)[0]}_showNextStack(){const e=Array.from(this._idToStack.values());let t=e.indexOf(this._visibleStack)+1;e[t]||(t=0),this.showStack(this._getStackId(e[t]))}_showPrevStack(){const e=Array.from(this._idToStack.values());let t=e.indexOf(this._visibleStack)-1;e[t]||(t=e.length-1),this.showStack(this._getStackId(e[t]))}_createRotatorView(){const e=new p(this.editor.locale),t=this.editor.locale.t;return this.view.content.add(e),e.bind("isNavigationVisible").to(this,"_numberOfStacks",this,"_singleViewMode",(e,t)=>!t&&e>1),e.on("change:isNavigationVisible",()=>this.updatePosition(),{priority:"low"}),e.bind("counter").to(this,"visibleView",this,"_numberOfStacks",(e,o)=>{if(o<2)return"";const i=Array.from(this._idToStack.values()).indexOf(this._visibleStack)+1;return t("%0 of %1",[i,o])}),e.buttonNextView.on("execute",()=>{e.focusTracker.isFocused&&this.editor.editing.view.focus(),this._showNextStack()}),e.buttonPrevView.on("execute",()=>{e.focusTracker.isFocused&&this.editor.editing.view.focus(),this._showPrevStack()}),e}_createFakePanelsView(){const e=new g(this.editor.locale,this.view);return e.bind("numberOfPanels").to(this,"_numberOfStacks",this,"_singleViewMode",(e,t)=>!t&&e>=2?Math.min(e-1,2):0),e.listenTo(this.view,"change:top",()=>e.updatePosition()),e.listenTo(this.view,"change:left",()=>e.updatePosition()),this.editor.ui.view.body.add(e),e}_showView({view:e,balloonClassName:t="",withArrow:o=!0,singleViewMode:i=!1}){this.view.class=t,this.view.withArrow=o,this._rotatorView.showView(e),this.visibleView=e,this.view.pin(this._getBalloonPosition()),this._fakePanelsView.updatePosition(),i&&(this._singleViewMode=!0)}_getBalloonPosition(){let e=Array.from(this._visibleStack.values()).pop().position;return e&&(e.limiter||(e=Object.assign({},e,{limiter:this.positionLimiter})),e=Object.assign({},e,{viewportOffsetConfig:this.editor.ui.viewportOffset})),e}}class p extends r.a{constructor(e){super(e);const t=e.t,o=this.bindTemplate;this.set("isNavigationVisible",!0),this.focusTracker=new c.a,this.buttonPrevView=this._createButtonView(t("Previous"),'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M11.463 5.187a.888.888 0 1 1 1.254 1.255L9.16 10l3.557 3.557a.888.888 0 1 1-1.254 1.255L7.26 10.61a.888.888 0 0 1 .16-1.382l4.043-4.042z"/></svg>'),this.buttonNextView=this._createButtonView(t("Next"),'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M8.537 14.813a.888.888 0 1 1-1.254-1.255L10.84 10 7.283 6.442a.888.888 0 1 1 1.254-1.255L12.74 9.39a.888.888 0 0 1-.16 1.382l-4.043 4.042z"/></svg>'),this.content=this.createCollection(),this.setTemplate({tag:"div",attributes:{class:["ck","ck-balloon-rotator"],"z-index":"-1"},children:[{tag:"div",attributes:{class:["ck-balloon-rotator__navigation",o.to("isNavigationVisible",e=>e?"":"ck-hidden")]},children:[this.buttonPrevView,{tag:"span",attributes:{class:["ck-balloon-rotator__counter"]},children:[{text:o.to("counter")}]},this.buttonNextView]},{tag:"div",attributes:{class:"ck-balloon-rotator__content"},children:this.content}]})}render(){super.render(),this.focusTracker.add(this.element)}showView(e){this.hideView(),this.content.add(e)}hideView(){this.content.clear()}_createButtonView(e,t){const o=new n.a(this.locale);return o.set({label:e,icon:t,tooltip:!0}),o}}class g extends r.a{constructor(e,t){super(e);const o=this.bindTemplate;this.set("top",0),this.set("left",0),this.set("height",0),this.set("width",0),this.set("numberOfPanels",0),this.content=this.createCollection(),this._balloonPanelView=t,this.setTemplate({tag:"div",attributes:{class:["ck-fake-panel",o.to("numberOfPanels",e=>e?"":"ck-hidden")],style:{top:o.to("top",u),left:o.to("left",u),width:o.to("width",u),height:o.to("height",u)}},children:this.content}),this.on("change:numberOfPanels",(e,t,o,i)=>{o>i?this._addPanels(o-i):this._removePanels(i-o),this.updatePosition()})}_addPanels(e){for(;e--;){const e=new r.a;e.setTemplate({tag:"div"}),this.content.add(e),this.registerChild(e)}}_removePanels(e){for(;e--;){const e=this.content.last;this.content.remove(e),this.deregisterChild(e),e.destroy()}}updatePosition(){if(this.numberOfPanels){const{top:e,left:t}=this._balloonPanelView,{width:o,height:i}=new d.a(this._balloonPanelView.element);Object.assign(this,{top:e,left:t,width:o,height:i})}}}},"./packages/ckeditor5-ui/src/template.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return h}));var i=o("./packages/ckeditor5-utils/src/ckeditorerror.js"),s=o("./packages/ckeditor5-utils/src/mix.js"),r=o("./packages/ckeditor5-utils/src/emittermixin.js"),n=o("./packages/ckeditor5-ui/src/view.js"),a=o("./packages/ckeditor5-ui/src/viewcollection.js"),c=o("./packages/ckeditor5-utils/src/dom/isnode.js"),l=o("./node_modules/lodash-es/isObject.js"),d=o("./node_modules/lodash-es/cloneDeepWith.js"),u=o("./packages/ckeditor5-utils/src/toarray.js");class h{constructor(e){Object.assign(this,y(v(e))),this._isRendered=!1,this._revertData=null}render(){const e=this._renderNode({intoFragment:!0});return this._isRendered=!0,e}apply(e){return this._revertData={children:[],bindings:[],attributes:{}},this._renderNode({node:e,isApplying:!0,revertData:this._revertData}),e}revert(e){if(!this._revertData)throw new i.a("ui-template-revert-not-applied",[this,e]);this._revertTemplateFromNode(e,this._revertData)}*getViews(){yield*function*e(t){if(t.children)for(const o of t.children)A(o)?yield o:T(o)&&(yield*e(o))}(this)}static bind(e,t){return{to:(o,i)=>new g({eventNameOrFunction:o,attribute:o,observable:e,emitter:t,callback:i}),if:(o,i,s)=>new f({observable:e,emitter:t,attribute:o,valueIfTrue:i,callback:s})}}static extend(e,t){if(e._isRendered)throw new i.a("template-extend-render",[this,e]);!function e(t,o){o.attributes&&(t.attributes||(t.attributes={}),P(t.attributes,o.attributes));o.eventListeners&&(t.eventListeners||(t.eventListeners={}),P(t.eventListeners,o.eventListeners));o.text&&t.text.push(...o.text);if(o.children&&o.children.length){if(t.children.length!=o.children.length)throw new i.a("ui-template-extend-children-mismatch",t);let s=0;for(const i of o.children)e(t.children[s++],i)}}(e,y(v(t)))}_renderNode(e){let t;if(t=e.node?this.tag&&this.text:this.tag?this.text:!this.text,t)throw new i.a("ui-template-wrong-syntax",this);return this.text?this._renderText(e):this._renderElement(e)}_renderElement(e){let t=e.node;return t||(t=e.node=document.createElementNS(this.ns||"http://www.w3.org/1999/xhtml",this.tag)),this._renderAttributes(e),this._renderElementChildren(e),this._setUpListeners(e),t}_renderText(e){let t=e.node;return t?e.revertData.text=t.textContent:t=e.node=document.createTextNode(""),m(this.text)?this._bindToObservable({schema:this.text,updater:b(t),data:e}):t.textContent=this.text.join(""),t}_renderAttributes(e){let t,o,i,s;if(!this.attributes)return;const r=e.node,n=e.revertData;for(t in this.attributes)if(i=r.getAttribute(t),o=this.attributes[t],n&&(n.attributes[t]=i),s=Object(l.a)(o[0])&&o[0].ns?o[0].ns:null,m(o)){const a=s?o[0].value:o;n&&E(t)&&a.unshift(i),this._bindToObservable({schema:a,updater:_(r,t,s),data:e})}else"style"==t&&"string"!=typeof o[0]?this._renderStyleAttribute(o[0],e):(n&&i&&E(t)&&o.unshift(i),o=o.map(e=>e&&e.value||e).reduce((e,t)=>e.concat(t),[]).reduce(x,""),O(o)||r.setAttributeNS(s,t,o))}_renderStyleAttribute(e,t){const o=t.node;for(const i in e){const s=e[i];m(s)?this._bindToObservable({schema:[s],updater:w(o,i),data:t}):o.style[i]=s}}_renderElementChildren(e){const t=e.node,o=e.intoFragment?document.createDocumentFragment():t,i=e.isApplying;let s=0;for(const r of this.children)if(C(r)){if(!i){r.setParent(t);for(const e of r)o.appendChild(e.element)}}else if(A(r))i||(r.isRendered||r.render(),o.appendChild(r.element));else if(Object(c.a)(r))o.appendChild(r);else if(i){const t={children:[],bindings:[],attributes:{}};e.revertData.children.push(t),r._renderNode({node:o.childNodes[s++],isApplying:!0,revertData:t})}else o.appendChild(r.render());e.intoFragment&&t.appendChild(o)}_setUpListeners(e){if(this.eventListeners)for(const t in this.eventListeners){const o=this.eventListeners[t].map(o=>{const[i,s]=t.split("@");return o.activateDomEventListener(i,s,e)});e.revertData&&e.revertData.bindings.push(o)}}_bindToObservable({schema:e,updater:t,data:o}){const i=o.revertData;k(e,t,o);const s=e.filter(e=>!O(e)).filter(e=>e.observable).map(i=>i.activateAttributeListener(e,t,o));i&&i.bindings.push(s)}_revertTemplateFromNode(e,t){for(const e of t.bindings)for(const t of e)t();if(t.text)e.textContent=t.text;else{for(const o in t.attributes){const i=t.attributes[o];null===i?e.removeAttribute(o):e.setAttribute(o,i)}for(let o=0;o<t.children.length;++o)this._revertTemplateFromNode(e.childNodes[o],t.children[o])}}}Object(s.a)(h,r.c);class p{constructor(e){Object.assign(this,e)}getValue(e){const t=this.observable[this.attribute];return this.callback?this.callback(t,e):t}activateAttributeListener(e,t,o){const i=()=>k(e,t,o);return this.emitter.listenTo(this.observable,"change:"+this.attribute,i),()=>{this.emitter.stopListening(this.observable,"change:"+this.attribute,i)}}}class g extends p{activateDomEventListener(e,t,o){const i=(e,o)=>{t&&!o.target.matches(t)||("function"==typeof this.eventNameOrFunction?this.eventNameOrFunction(o):this.observable.fire(this.eventNameOrFunction,o))};return this.emitter.listenTo(o.node,e,i),()=>{this.emitter.stopListening(o.node,e,i)}}}class f extends p{getValue(e){return!O(super.getValue(e))&&(this.valueIfTrue||!0)}}function m(e){return!!e&&(e.value&&(e=e.value),Array.isArray(e)?e.some(m):e instanceof p)}function k(e,t,{node:o}){let i=function(e,t){return e.map(e=>e instanceof p?e.getValue(t):e)}(e,o);i=1==e.length&&e[0]instanceof f?i[0]:i.reduce(x,""),O(i)?t.remove():t.set(i)}function b(e){return{set(t){e.textContent=t},remove(){e.textContent=""}}}function _(e,t,o){return{set(i){e.setAttributeNS(o,t,i)},remove(){e.removeAttributeNS(o,t)}}}function w(e,t){return{set(o){e.style[t]=o},remove(){e.style[t]=null}}}function v(e){return Object(d.a)(e,e=>{if(e&&(e instanceof p||T(e)||A(e)||C(e)))return e})}function y(e){if("string"==typeof e?e=function(e){return{text:[e]}}(e):e.text&&function(e){e.text=Object(u.a)(e.text)}(e),e.on&&(e.eventListeners=function(e){for(const t in e)j(e,t);return e}(e.on),delete e.on),!e.text){e.attributes&&function(e){for(const t in e)e[t].value&&(e[t].value=Object(u.a)(e[t].value)),j(e,t)}(e.attributes);const t=[];if(e.children)if(C(e.children))t.push(e.children);else for(const o of e.children)T(o)||A(o)||Object(c.a)(o)?t.push(o):t.push(new h(o));e.children=t}return e}function j(e,t){e[t]=Object(u.a)(e[t])}function x(e,t){return O(t)?e:O(e)?t:`${e} ${t}`}function P(e,t){for(const o in t)e[o]?e[o].push(...t[o]):e[o]=t[o]}function O(e){return!e&&0!==e}function A(e){return e instanceof n.a}function T(e){return e instanceof h}function C(e){return e instanceof a.a}function E(e){return"class"==e||"style"==e}},"./packages/ckeditor5-ui/src/toolbar/normalizetoolbarconfig.js":function(e,t,o){"use strict";function i(e){return Array.isArray(e)?{items:e,removeItems:[]}:e?Object.assign({items:[],removeItems:[]},e):{items:[],removeItems:[]}}o.d(t,"a",(function(){return i}))},"./packages/ckeditor5-ui/src/toolbar/toolbarseparatorview.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return s}));var i=o("./packages/ckeditor5-ui/src/view.js");class s extends i.a{constructor(e){super(e),this.setTemplate({tag:"span",attributes:{class:["ck","ck-toolbar__separator"]}})}}},"./packages/ckeditor5-ui/src/toolbar/toolbarview.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return k}));var i=o("./packages/ckeditor5-ui/src/view.js"),s=o("./packages/ckeditor5-utils/src/focustracker.js"),r=o("./packages/ckeditor5-ui/src/focuscycler.js"),n=o("./packages/ckeditor5-utils/src/keystrokehandler.js"),a=o("./packages/ckeditor5-ui/src/toolbar/toolbarseparatorview.js");class c extends i.a{constructor(e){super(e),this.setTemplate({tag:"span",attributes:{class:["ck","ck-toolbar__line-break"]}})}}var l=o("./packages/ckeditor5-utils/src/dom/resizeobserver.js");function d(e){return e.bindTemplate.to(t=>{t.target===e.element&&t.preventDefault()})}var u=o("./packages/ckeditor5-utils/src/dom/rect.js"),h=o("./packages/ckeditor5-utils/src/dom/global.js"),p=o("./packages/ckeditor5-ui/src/dropdown/utils.js"),g=o("./packages/ckeditor5-utils/src/ckeditorerror.js"),f=o("./packages/ckeditor5-ui/src/toolbar/normalizetoolbarconfig.js"),m=o("./packages/ckeditor5-core/theme/icons/three-vertical-dots.svg");o("./packages/ckeditor5-ui/theme/components/toolbar/toolbar.css");class k extends i.a{constructor(e,t){super(e);const o=this.bindTemplate,i=this.t;this.options=t||{},this.set("ariaLabel",i("Editor toolbar")),this.set("maxWidth","auto"),this.items=this.createCollection(),this.focusTracker=new s.a,this.keystrokes=new n.a,this.set("class"),this.set("isCompact",!1),this.itemsView=new b(e),this.children=this.createCollection(),this.children.add(this.itemsView),this.focusables=this.createCollection();const a="rtl"===e.uiLanguageDirection;this._focusCycler=new r.a({focusables:this.focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:[a?"arrowright":"arrowleft","arrowup"],focusNext:[a?"arrowleft":"arrowright","arrowdown"]}});const c=["ck","ck-toolbar",o.to("class"),o.if("isCompact","ck-toolbar_compact")];this.options.shouldGroupWhenFull&&this.options.isFloating&&c.push("ck-toolbar_floating"),this.setTemplate({tag:"div",attributes:{class:c,role:"toolbar","aria-label":o.to("ariaLabel"),style:{maxWidth:o.to("maxWidth")}},children:this.children,on:{mousedown:d(this)}}),this._behavior=this.options.shouldGroupWhenFull?new w(this):new _(this)}render(){super.render();for(const e of this.items)this.focusTracker.add(e.element);this.items.on("add",(e,t)=>{this.focusTracker.add(t.element)}),this.items.on("remove",(e,t)=>{this.focusTracker.remove(t.element)}),this.keystrokes.listenTo(this.element),this._behavior.render(this)}destroy(){return this._behavior.destroy(),super.destroy()}focus(){this._focusCycler.focusFirst()}focusLast(){this._focusCycler.focusLast()}fillFromConfig(e,t){const o=Object(f.a)(e),i=o.items.filter((e,i,s)=>"|"===e||-1===o.removeItems.indexOf(e)&&("-"===e?!this.options.shouldGroupWhenFull||(Object(g.c)("toolbarview-line-break-ignored-when-grouping-items",s),!1):!!t.has(e)||(Object(g.c)("toolbarview-item-unavailable",{name:e}),!1))),s=this._cleanSeparators(i).map(e=>"|"===e?new a.a:"-"===e?new c:t.create(e));this.items.addMany(s)}_cleanSeparators(e){const t=e=>"-"!==e&&"|"!==e,o=e.length,i=e.findIndex(t),s=o-e.slice().reverse().findIndex(t);return e.slice(i,s).filter((e,o,i)=>{if(t(e))return!0;return!(o>0&&i[o-1]===e)})}}class b extends i.a{constructor(e){super(e),this.children=this.createCollection(),this.setTemplate({tag:"div",attributes:{class:["ck","ck-toolbar__items"]},children:this.children})}}class _{constructor(e){const t=e.bindTemplate;e.set("isVertical",!1),e.itemsView.children.bindTo(e.items).using(e=>e),e.focusables.bindTo(e.items).using(e=>e),e.extendTemplate({attributes:{class:[t.if("isVertical","ck-toolbar_vertical")]}})}render(){}destroy(){}}class w{constructor(e){this.view=e,this.viewChildren=e.children,this.viewFocusables=e.focusables,this.viewItemsView=e.itemsView,this.viewFocusTracker=e.focusTracker,this.viewLocale=e.locale,this.ungroupedItems=e.createCollection(),this.groupedItems=e.createCollection(),this.groupedItemsDropdown=this._createGroupedItemsDropdown(),this.resizeObserver=null,this.cachedPadding=null,this.shouldUpdateGroupingOnNextResize=!1,e.itemsView.children.bindTo(this.ungroupedItems).using(e=>e),this.ungroupedItems.on("add",this._updateFocusCycleableItems.bind(this)),this.ungroupedItems.on("remove",this._updateFocusCycleableItems.bind(this)),e.children.on("add",this._updateFocusCycleableItems.bind(this)),e.children.on("remove",this._updateFocusCycleableItems.bind(this)),e.items.on("change",(e,t)=>{const o=t.index;for(const e of t.removed)o>=this.ungroupedItems.length?this.groupedItems.remove(e):this.ungroupedItems.remove(e);for(let e=o;e<o+t.added.length;e++){const i=t.added[e-o];e>this.ungroupedItems.length?this.groupedItems.add(i,e-this.ungroupedItems.length):this.ungroupedItems.add(i,e)}this._updateGrouping()}),e.extendTemplate({attributes:{class:["ck-toolbar_grouping"]}})}render(e){this.viewElement=e.element,this._enableGroupingOnResize(),this._enableGroupingOnMaxWidthChange(e)}destroy(){this.groupedItemsDropdown.destroy(),this.resizeObserver.destroy()}_updateGrouping(){if(!this.viewElement.ownerDocument.body.contains(this.viewElement))return;if(!this.viewElement.offsetParent)return void(this.shouldUpdateGroupingOnNextResize=!0);const e=this.groupedItems.length;let t;for(;this._areItemsOverflowing;)this._groupLastItem(),t=!0;if(!t&&this.groupedItems.length){for(;this.groupedItems.length&&!this._areItemsOverflowing;)this._ungroupFirstItem();this._areItemsOverflowing&&this._groupLastItem()}this.groupedItems.length!==e&&this.view.fire("groupedItemsUpdate")}get _areItemsOverflowing(){if(!this.ungroupedItems.length)return!1;const e=this.viewElement,t=this.viewLocale.uiLanguageDirection,o=new u.a(e.lastChild),i=new u.a(e);if(!this.cachedPadding){const o=h.a.window.getComputedStyle(e),i="ltr"===t?"paddingRight":"paddingLeft";this.cachedPadding=Number.parseInt(o[i])}return"ltr"===t?o.right>i.right-this.cachedPadding:o.left<i.left+this.cachedPadding}_enableGroupingOnResize(){let e;this.resizeObserver=new l.a(this.viewElement,t=>{e&&e===t.contentRect.width&&!this.shouldUpdateGroupingOnNextResize||(this.shouldUpdateGroupingOnNextResize=!1,this._updateGrouping(),e=t.contentRect.width)}),this._updateGrouping()}_enableGroupingOnMaxWidthChange(e){e.on("change:maxWidth",()=>{this._updateGrouping()})}_groupLastItem(){this.groupedItems.length||(this.viewChildren.add(new a.a),this.viewChildren.add(this.groupedItemsDropdown),this.viewFocusTracker.add(this.groupedItemsDropdown.element)),this.groupedItems.add(this.ungroupedItems.remove(this.ungroupedItems.last),0)}_ungroupFirstItem(){this.ungroupedItems.add(this.groupedItems.remove(this.groupedItems.first)),this.groupedItems.length||(this.viewChildren.remove(this.groupedItemsDropdown),this.viewChildren.remove(this.viewChildren.last),this.viewFocusTracker.remove(this.groupedItemsDropdown.element))}_createGroupedItemsDropdown(){const e=this.viewLocale,t=e.t,o=Object(p.c)(e);return o.class="ck-toolbar__grouped-dropdown",o.panelPosition="ltr"===e.uiLanguageDirection?"sw":"se",Object(p.b)(o,[]),o.buttonView.set({label:t("Show more items"),tooltip:!0,tooltipPosition:"rtl"===e.uiLanguageDirection?"se":"sw",icon:m.a}),o.toolbarView.items.bindTo(this.groupedItems).using(e=>e),o}_updateFocusCycleableItems(){this.viewFocusables.clear(),this.ungroupedItems.map(e=>{this.viewFocusables.add(e)}),this.groupedItems.length&&this.viewFocusables.add(this.groupedItemsDropdown)}}},"./packages/ckeditor5-ui/src/tooltip/tooltipview.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return s}));var i=o("./packages/ckeditor5-ui/src/view.js");o("./packages/ckeditor5-ui/theme/components/tooltip/tooltip.css");class s extends i.a{constructor(e){super(e),this.set("text",""),this.set("position","s");const t=this.bindTemplate;this.setTemplate({tag:"span",attributes:{class:["ck","ck-tooltip",t.to("position",e=>"ck-tooltip_"+e),t.if("text","ck-hidden",e=>!e.trim())]},children:[{tag:"span",attributes:{class:["ck","ck-tooltip__text"]},children:[{text:t.to("text")}]}]})}}},"./packages/ckeditor5-ui/src/view.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return u}));var i=o("./packages/ckeditor5-utils/src/ckeditorerror.js"),s=o("./packages/ckeditor5-ui/src/viewcollection.js"),r=o("./packages/ckeditor5-ui/src/template.js"),n=o("./packages/ckeditor5-utils/src/dom/emittermixin.js"),a=o("./packages/ckeditor5-utils/src/observablemixin.js"),c=o("./packages/ckeditor5-utils/src/collection.js"),l=o("./packages/ckeditor5-utils/src/mix.js"),d=o("./packages/ckeditor5-utils/src/isiterable.js");o("./packages/ckeditor5-ui/theme/globals/globals.css");class u{constructor(e){this.element=null,this.isRendered=!1,this.locale=e,this.t=e&&e.t,this._viewCollections=new c.a,this._unboundChildren=this.createCollection(),this._viewCollections.on("add",(t,o)=>{o.locale=e}),this.decorate("render")}get bindTemplate(){return this._bindTemplate?this._bindTemplate:this._bindTemplate=r.a.bind(this,this)}createCollection(e){const t=new s.a(e);return this._viewCollections.add(t),t}registerChild(e){Object(d.a)(e)||(e=[e]);for(const t of e)this._unboundChildren.add(t)}deregisterChild(e){Object(d.a)(e)||(e=[e]);for(const t of e)this._unboundChildren.remove(t)}setTemplate(e){this.template=new r.a(e)}extendTemplate(e){r.a.extend(this.template,e)}render(){if(this.isRendered)throw new i.a("ui-view-render-already-rendered",this);this.template&&(this.element=this.template.render(),this.registerChild(this.template.getViews())),this.isRendered=!0}destroy(){this.stopListening(),this._viewCollections.map(e=>e.destroy()),this.template&&this.template._revertData&&this.template.revert(this.element)}}Object(l.a)(u,n.a),Object(l.a)(u,a.a)},"./packages/ckeditor5-ui/src/viewcollection.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return r}));var i=o("./packages/ckeditor5-utils/src/ckeditorerror.js"),s=o("./packages/ckeditor5-utils/src/collection.js");class r extends s.a{constructor(e=[]){super(e,{idProperty:"viewUid"}),this.on("add",(e,t,o)=>{this._renderViewIntoCollectionParent(t,o)}),this.on("remove",(e,t)=>{t.element&&this._parentElement&&t.element.remove()}),this._parentElement=null}destroy(){this.map(e=>e.destroy())}setParent(e){this._parentElement=e;for(const e of this)this._renderViewIntoCollectionParent(e)}delegate(...e){if(!e.length||!e.every(e=>"string"==typeof e))throw new i.a("ui-viewcollection-delegate-wrong-events",this);return{to:t=>{for(const o of this)for(const i of e)o.delegate(i).to(t);this.on("add",(o,i)=>{for(const o of e)i.delegate(o).to(t)}),this.on("remove",(o,i)=>{for(const o of e)i.stopDelegating(o,t)})}}}_renderViewIntoCollectionParent(e,t){e.isRendered||e.render(),e.element&&this._parentElement&&this._parentElement.insertBefore(e.element,this._parentElement.children[t])}}},"./packages/ckeditor5-ui/theme/components/button/button.css":function(e,t,o){var i=o("./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),s=o("./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/button/button.css");"string"==typeof(s=s.__esModule?s.default:s)&&(s=[[e.i,s,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};i(s,r);e.exports=s.locals||{}},"./packages/ckeditor5-ui/theme/components/button/switchbutton.css":function(e,t,o){var i=o("./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),s=o("./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/button/switchbutton.css");"string"==typeof(s=s.__esModule?s.default:s)&&(s=[[e.i,s,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};i(s,r);e.exports=s.locals||{}},"./packages/ckeditor5-ui/theme/components/colorgrid/colorgrid.css":function(e,t,o){var i=o("./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),s=o("./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/colorgrid/colorgrid.css");"string"==typeof(s=s.__esModule?s.default:s)&&(s=[[e.i,s,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};i(s,r);e.exports=s.locals||{}},"./packages/ckeditor5-ui/theme/components/dropdown/dropdown.css":function(e,t,o){var i=o("./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),s=o("./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/dropdown/dropdown.css");"string"==typeof(s=s.__esModule?s.default:s)&&(s=[[e.i,s,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};i(s,r);e.exports=s.locals||{}},"./packages/ckeditor5-ui/theme/components/dropdown/listdropdown.css":function(e,t,o){var i=o("./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),s=o("./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/dropdown/listdropdown.css");"string"==typeof(s=s.__esModule?s.default:s)&&(s=[[e.i,s,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};i(s,r);e.exports=s.locals||{}},"./packages/ckeditor5-ui/theme/components/dropdown/splitbutton.css":function(e,t,o){var i=o("./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),s=o("./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/dropdown/splitbutton.css");"string"==typeof(s=s.__esModule?s.default:s)&&(s=[[e.i,s,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};i(s,r);e.exports=s.locals||{}},"./packages/ckeditor5-ui/theme/components/dropdown/toolbardropdown.css":function(e,t,o){var i=o("./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),s=o("./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/dropdown/toolbardropdown.css");"string"==typeof(s=s.__esModule?s.default:s)&&(s=[[e.i,s,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};i(s,r);e.exports=s.locals||{}},"./packages/ckeditor5-ui/theme/components/editorui/editorui.css":function(e,t,o){var i=o("./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),s=o("./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/editorui/editorui.css");"string"==typeof(s=s.__esModule?s.default:s)&&(s=[[e.i,s,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};i(s,r);e.exports=s.locals||{}},"./packages/ckeditor5-ui/theme/components/formheader/formheader.css":function(e,t,o){var i=o("./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),s=o("./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/formheader/formheader.css");"string"==typeof(s=s.__esModule?s.default:s)&&(s=[[e.i,s,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};i(s,r);e.exports=s.locals||{}},"./packages/ckeditor5-ui/theme/components/icon/icon.css":function(e,t,o){var i=o("./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),s=o("./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/icon/icon.css");"string"==typeof(s=s.__esModule?s.default:s)&&(s=[[e.i,s,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};i(s,r);e.exports=s.locals||{}},"./packages/ckeditor5-ui/theme/components/inputtext/inputtext.css":function(e,t,o){var i=o("./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),s=o("./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/inputtext/inputtext.css");"string"==typeof(s=s.__esModule?s.default:s)&&(s=[[e.i,s,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};i(s,r);e.exports=s.locals||{}},"./packages/ckeditor5-ui/theme/components/label/label.css":function(e,t,o){var i=o("./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),s=o("./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/label/label.css");"string"==typeof(s=s.__esModule?s.default:s)&&(s=[[e.i,s,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};i(s,r);e.exports=s.locals||{}},"./packages/ckeditor5-ui/theme/components/labeledfield/labeledfieldview.css":function(e,t,o){var i=o("./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),s=o("./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/labeledfield/labeledfieldview.css");"string"==typeof(s=s.__esModule?s.default:s)&&(s=[[e.i,s,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};i(s,r);e.exports=s.locals||{}},"./packages/ckeditor5-ui/theme/components/list/list.css":function(e,t,o){var i=o("./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),s=o("./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/list/list.css");"string"==typeof(s=s.__esModule?s.default:s)&&(s=[[e.i,s,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};i(s,r);e.exports=s.locals||{}},"./packages/ckeditor5-ui/theme/components/panel/balloonpanel.css":function(e,t,o){var i=o("./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),s=o("./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/panel/balloonpanel.css");"string"==typeof(s=s.__esModule?s.default:s)&&(s=[[e.i,s,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};i(s,r);e.exports=s.locals||{}},"./packages/ckeditor5-ui/theme/components/panel/balloonrotator.css":function(e,t,o){var i=o("./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),s=o("./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/panel/balloonrotator.css");"string"==typeof(s=s.__esModule?s.default:s)&&(s=[[e.i,s,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};i(s,r);e.exports=s.locals||{}},"./packages/ckeditor5-ui/theme/components/panel/fakepanel.css":function(e,t,o){var i=o("./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),s=o("./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/panel/fakepanel.css");"string"==typeof(s=s.__esModule?s.default:s)&&(s=[[e.i,s,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};i(s,r);e.exports=s.locals||{}},"./packages/ckeditor5-ui/theme/components/panel/stickypanel.css":function(e,t,o){var i=o("./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),s=o("./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/panel/stickypanel.css");"string"==typeof(s=s.__esModule?s.default:s)&&(s=[[e.i,s,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};i(s,r);e.exports=s.locals||{}},"./packages/ckeditor5-ui/theme/components/toolbar/blocktoolbar.css":function(e,t,o){var i=o("./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),s=o("./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/toolbar/blocktoolbar.css");"string"==typeof(s=s.__esModule?s.default:s)&&(s=[[e.i,s,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};i(s,r);e.exports=s.locals||{}},"./packages/ckeditor5-ui/theme/components/toolbar/toolbar.css":function(e,t,o){var i=o("./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),s=o("./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/toolbar/toolbar.css");"string"==typeof(s=s.__esModule?s.default:s)&&(s=[[e.i,s,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};i(s,r);e.exports=s.locals||{}},"./packages/ckeditor5-ui/theme/components/tooltip/tooltip.css":function(e,t,o){var i=o("./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),s=o("./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/components/tooltip/tooltip.css");"string"==typeof(s=s.__esModule?s.default:s)&&(s=[[e.i,s,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};i(s,r);e.exports=s.locals||{}},"./packages/ckeditor5-ui/theme/globals/globals.css":function(e,t,o){var i=o("./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),s=o("./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-ui/theme/globals/globals.css");"string"==typeof(s=s.__esModule?s.default:s)&&(s=[[e.i,s,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};i(s,r);e.exports=s.locals||{}},"./packages/ckeditor5-ui/theme/icons/dropdown-arrow.svg":function(e,t,o){"use strict";t.a='<svg viewBox="0 0 10 10" xmlns="http://www.w3.org/2000/svg"><path d="M.941 4.523a.75.75 0 1 1 1.06-1.06l3.006 3.005 3.005-3.005a.75.75 0 1 1 1.06 1.06l-3.549 3.55a.75.75 0 0 1-1.168-.136L.941 4.523z"/></svg>'},"./packages/ckeditor5-utils/src/ckeditorerror.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return i})),o.d(t,"c",(function(){return s})),o.d(t,"b",(function(){return r}));class i extends Error{constructor(e,t,o){super(function(e,t){const o=new WeakSet,i=t?" "+JSON.stringify(t,(e,t)=>{if("object"==typeof t&&null!==t){if(o.has(t))return`[object ${t.constructor.name}]`;o.add(t)}return t}):"",s=n(e);return e+i+s}(e,o)),this.name="CKEditorError",this.context=t,this.data=o}is(e){return"CKEditorError"===e}static rethrowUnexpectedError(e,t){if(e.is&&e.is("CKEditorError"))throw e;const o=new i(e.message,t);throw o.stack=e.stack,o}}function s(e,t){console.warn(...a(e,t))}function r(e,t){console.error(...a(e,t))}function n(e){return"\nRead more: https://ckeditor.com/docs/ckeditor5/latest/framework/guides/support/error-codes.html#error-"+e}function a(e,t){const o=n(e);return t?[e,t,o]:[e,o]}},"./packages/ckeditor5-utils/src/collection.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return c}));var i=o("./packages/ckeditor5-utils/src/emittermixin.js"),s=o("./packages/ckeditor5-utils/src/ckeditorerror.js"),r=o("./packages/ckeditor5-utils/src/uid.js"),n=o("./packages/ckeditor5-utils/src/isiterable.js"),a=o("./packages/ckeditor5-utils/src/mix.js");class c{constructor(e={},t={}){const o=Object(n.a)(e);if(o||(t=e),this._items=[],this._itemMap=new Map,this._idProperty=t.idProperty||"id",this._bindToExternalToInternalMap=new WeakMap,this._bindToInternalToExternalMap=new WeakMap,this._skippedIndexesFromExternal=[],o)for(const t of e)this._items.push(t),this._itemMap.set(this._getItemIdBeforeAdding(t),t)}get length(){return this._items.length}get first(){return this._items[0]||null}get last(){return this._items[this.length-1]||null}add(e,t){return this.addMany([e],t)}addMany(e,t){if(void 0===t)t=this._items.length;else if(t>this._items.length||t<0)throw new s.a("collection-add-item-invalid-index",this);for(let o=0;o<e.length;o++){const i=e[o],s=this._getItemIdBeforeAdding(i),r=t+o;this._items.splice(r,0,i),this._itemMap.set(s,i),this.fire("add",i,r)}return this.fire("change",{added:e,removed:[],index:t}),this}get(e){let t;if("string"==typeof e)t=this._itemMap.get(e);else{if("number"!=typeof e)throw new s.a("collection-get-invalid-arg",this);t=this._items[e]}return t||null}has(e){if("string"==typeof e)return this._itemMap.has(e);{const t=e[this._idProperty];return this._itemMap.has(t)}}getIndex(e){let t;return t="string"==typeof e?this._itemMap.get(e):e,this._items.indexOf(t)}remove(e){const[t,o]=this._remove(e);return this.fire("change",{added:[],removed:[t],index:o}),t}map(e,t){return this._items.map(e,t)}find(e,t){return this._items.find(e,t)}filter(e,t){return this._items.filter(e,t)}clear(){this._bindToCollection&&(this.stopListening(this._bindToCollection),this._bindToCollection=null);const e=Array.from(this._items);for(;this.length;)this._remove(0);this.fire("change",{added:[],removed:e,index:0})}bindTo(e){if(this._bindToCollection)throw new s.a("collection-bind-to-rebind",this);return this._bindToCollection=e,{as:e=>{this._setUpBindToBinding(t=>new e(t))},using:e=>{"function"==typeof e?this._setUpBindToBinding(t=>e(t)):this._setUpBindToBinding(t=>t[e])}}}_setUpBindToBinding(e){const t=this._bindToCollection,o=(o,i,s)=>{const r=t._bindToCollection==this,n=t._bindToInternalToExternalMap.get(i);if(r&&n)this._bindToExternalToInternalMap.set(i,n),this._bindToInternalToExternalMap.set(n,i);else{const o=e(i);if(!o)return void this._skippedIndexesFromExternal.push(s);let r=s;for(const e of this._skippedIndexesFromExternal)s>e&&r--;for(const e of t._skippedIndexesFromExternal)r>=e&&r++;this._bindToExternalToInternalMap.set(i,o),this._bindToInternalToExternalMap.set(o,i),this.add(o,r);for(let e=0;e<t._skippedIndexesFromExternal.length;e++)r<=t._skippedIndexesFromExternal[e]&&t._skippedIndexesFromExternal[e]++}};for(const e of t)o(0,e,t.getIndex(e));this.listenTo(t,"add",o),this.listenTo(t,"remove",(e,t,o)=>{const i=this._bindToExternalToInternalMap.get(t);i&&this.remove(i),this._skippedIndexesFromExternal=this._skippedIndexesFromExternal.reduce((e,t)=>(o<t&&e.push(t-1),o>t&&e.push(t),e),[])})}_getItemIdBeforeAdding(e){const t=this._idProperty;let o;if(t in e){if(o=e[t],"string"!=typeof o)throw new s.a("collection-add-invalid-id",this);if(this.get(o))throw new s.a("collection-add-item-already-exists",this)}else e[t]=o=Object(r.a)();return o}_remove(e){let t,o,i,r=!1;const n=this._idProperty;if("string"==typeof e?(o=e,i=this._itemMap.get(o),r=!i,i&&(t=this._items.indexOf(i))):"number"==typeof e?(t=e,i=this._items[t],r=!i,i&&(o=i[n])):(i=e,o=i[n],t=this._items.indexOf(i),r=-1==t||!this._itemMap.get(o)),r)throw new s.a("collection-remove-404",this);this._items.splice(t,1),this._itemMap.delete(o);const a=this._bindToInternalToExternalMap.get(i);return this._bindToInternalToExternalMap.delete(i),this._bindToExternalToInternalMap.delete(a),this.fire("remove",i,t),[i,t]}[Symbol.iterator](){return this._items[Symbol.iterator]()}}Object(a.a)(c,i.c)},"./packages/ckeditor5-utils/src/comparearrays.js":function(e,t,o){"use strict";function i(e,t){const o=Math.min(e.length,t.length);for(let i=0;i<o;i++)if(e[i]!=t[i])return i;return e.length==t.length?"same":e.length<t.length?"prefix":"extension"}o.d(t,"a",(function(){return i}))},"./packages/ckeditor5-utils/src/count.js":function(e,t,o){"use strict";function i(e){let t=0;for(const o of e)t++;return t}o.d(t,"a",(function(){return i}))},"./packages/ckeditor5-utils/src/diff.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return s}));var i=o("./packages/ckeditor5-utils/src/fastdiff.js");function s(e,t,o){o=o||function(e,t){return e===t};const i=e.length,r=t.length;if(i>200||r>200||i+r>300)return s.fastDiff(e,t,o,!0);let n,a;if(r<i){const o=e;e=t,t=o,n="delete",a="insert"}else n="insert",a="delete";const c=e.length,l=t.length,d=l-c,u={},h={};function p(i){const s=(void 0!==h[i-1]?h[i-1]:-1)+1,r=void 0!==h[i+1]?h[i+1]:-1,d=s>r?-1:1;u[i+d]&&(u[i]=u[i+d].slice(0)),u[i]||(u[i]=[]),u[i].push(s>r?n:a);let p=Math.max(s,r),g=p-i;for(;g<c&&p<l&&o(e[g],t[p]);)g++,p++,u[i].push("equal");return p}let g,f=0;do{for(g=-f;g<d;g++)h[g]=p(g);for(g=d+f;g>d;g--)h[g]=p(g);h[d]=p(d),f++}while(h[d]!==l);return u[d].slice(1)}s.fastDiff=i.a},"./packages/ckeditor5-utils/src/dom/createelement.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return c}));var i=o("./packages/ckeditor5-utils/src/isiterable.js"),s=o("./node_modules/lodash-es/_baseGetTag.js"),r=o("./node_modules/lodash-es/isArray.js"),n=o("./node_modules/lodash-es/isObjectLike.js");var a=function(e){return"string"==typeof e||!Object(r.a)(e)&&Object(n.a)(e)&&"[object String]"==Object(s.a)(e)};function c(e,t,o={},s=[]){const r=o&&o.xmlns,n=r?e.createElementNS(r,t):e.createElement(t);for(const e in o)n.setAttribute(e,o[e]);!a(s)&&Object(i.a)(s)||(s=[s]);for(let t of s)a(t)&&(t=e.createTextNode(t)),n.appendChild(t);return n}},"./packages/ckeditor5-utils/src/dom/emittermixin.js":function(e,t,o){"use strict";var i=o("./packages/ckeditor5-utils/src/emittermixin.js"),s=o("./packages/ckeditor5-utils/src/uid.js"),r=o("./packages/ckeditor5-utils/src/dom/isnode.js"),n=o("./packages/ckeditor5-utils/src/dom/iswindow.js"),a=o("./node_modules/lodash-es/assignIn.js");const c=Object(a.a)({},i.c,{listenTo(e,...t){if(Object(r.a)(e)||Object(n.a)(e)){const o=this._getProxyEmitter(e)||new l(e);o.attach(...t),e=o}i.c.listenTo.call(this,e,...t)},stopListening(e,t,o){if(Object(r.a)(e)||Object(n.a)(e)){const t=this._getProxyEmitter(e);if(!t)return;e=t}i.c.stopListening.call(this,e,t,o),e instanceof l&&e.detach(t)},_getProxyEmitter(e){return Object(i.a)(this,d(e))}});t.a=c;class l{constructor(e){Object(i.b)(this,d(e)),this._domNode=e}}function d(e){return e["data-ck-expando"]||(e["data-ck-expando"]=Object(s.a)())}Object(a.a)(l.prototype,i.c,{attach(e,t,o={}){if(this._domListeners&&this._domListeners[e])return;const i={capture:!!o.useCapture,passive:!!o.usePassive},s=this._createDomListener(e,i);this._domNode.addEventListener(e,s,i),this._domListeners||(this._domListeners={}),this._domListeners[e]=s},detach(e){let t;!this._domListeners[e]||(t=this._events[e])&&t.callbacks.length||this._domListeners[e].removeListener()},_createDomListener(e,t){const o=t=>{this.fire(e,t)};return o.removeListener=()=>{this._domNode.removeEventListener(e,o,t),delete this._domListeners[e]},o}})},"./packages/ckeditor5-utils/src/dom/getborderwidths.js":function(e,t,o){"use strict";function i(e){const t=e.ownerDocument.defaultView.getComputedStyle(e);return{top:parseInt(t.borderTopWidth,10),right:parseInt(t.borderRightWidth,10),bottom:parseInt(t.borderBottomWidth,10),left:parseInt(t.borderLeftWidth,10)}}o.d(t,"a",(function(){return i}))},"./packages/ckeditor5-utils/src/dom/global.js":function(e,t,o){"use strict";t.a={window:window,document:document}},"./packages/ckeditor5-utils/src/dom/isnode.js":function(e,t,o){"use strict";function i(e){if(e){if(e.defaultView)return e instanceof e.defaultView.Document;if(e.ownerDocument&&e.ownerDocument.defaultView)return e instanceof e.ownerDocument.defaultView.Node}return!1}o.d(t,"a",(function(){return i}))},"./packages/ckeditor5-utils/src/dom/isrange.js":function(e,t,o){"use strict";function i(e){return"[object Range]"==Object.prototype.toString.apply(e)}o.d(t,"a",(function(){return i}))},"./packages/ckeditor5-utils/src/dom/istext.js":function(e,t,o){"use strict";function i(e){return"[object Text]"==Object.prototype.toString.call(e)}o.d(t,"a",(function(){return i}))},"./packages/ckeditor5-utils/src/dom/iswindow.js":function(e,t,o){"use strict";function i(e){const t=Object.prototype.toString.apply(e);return"[object Window]"==t||"[object global]"==t}o.d(t,"a",(function(){return i}))},"./packages/ckeditor5-utils/src/dom/position.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return a}));var i=o("./packages/ckeditor5-utils/src/dom/global.js"),s=o("./packages/ckeditor5-utils/src/dom/rect.js");var r=o("./packages/ckeditor5-utils/src/dom/getborderwidths.js"),n=o("./node_modules/lodash-es/isFunction.js");function a({element:e,target:t,positions:o,limiter:r,fitInViewport:a,viewportOffsetConfig:c}){Object(n.a)(t)&&(t=t()),Object(n.a)(r)&&(r=r());const d=function(e){return e&&e.parentNode?e.offsetParent===i.a.document.body?null:e.offsetParent:null}(e),u=new s.a(e);let h;const p={targetRect:new s.a(t),elementRect:u,positionedElementAncestor:d};if(r||a){const e=r&&new s.a(r).getVisible(),t=a&&function(e){e=Object.assign({top:0,bottom:0,left:0,right:0},e);const t=new s.a(i.a.window);return t.top+=e.top,t.height-=e.top,t.bottom-=e.bottom,t.height-=e.bottom,t}(c);Object.assign(p,{limiterRect:e,viewportRect:t}),h=function(e,t){const{elementRect:o}=t,i=o.getArea(),s=e.map(e=>new l(e,t)).filter(e=>!!e.name);let r=0,n=null;for(const e of s){const{_limiterIntersectionArea:t,_viewportIntersectionArea:o}=e;if(t===i)return e;const s=o**2+t**2;s>r&&(r=s,n=e)}return n}(o,p)||new l(o[0],p)}else h=new l(o[0],p);return h}function c(e){const{scrollX:t,scrollY:o}=i.a.window;return e.clone().moveBy(t,o)}class l{constructor(e,t){const o=e(t.targetRect,t.elementRect,t.viewportRect);if(!o)return;const{left:i,top:s,name:r,config:n}=o;Object.assign(this,{name:r,config:n}),this._positioningFunctionCorrdinates={left:i,top:s},this._options=t}get left(){return this._absoluteRect.left}get top(){return this._absoluteRect.top}get _limiterIntersectionArea(){const e=this._options.limiterRect;if(e){const t=this._options.viewportRect;if(!t)return e.getIntersectionArea(this._rect);{const o=e.getIntersection(t);if(o)return o.getIntersectionArea(this._rect)}}return 0}get _viewportIntersectionArea(){const e=this._options.viewportRect;return e?e.getIntersectionArea(this._rect):0}get _rect(){return this._cachedRect||(this._cachedRect=this._options.elementRect.clone().moveTo(this._positioningFunctionCorrdinates.left,this._positioningFunctionCorrdinates.top)),this._cachedRect}get _absoluteRect(){return this._cachedAbsoluteRect||(this._cachedAbsoluteRect=c(this._rect),this._options.positionedElementAncestor&&function(e,t){const o=c(new s.a(t)),i=Object(r.a)(t);let n=0,a=0;n-=o.left,a-=o.top,n+=t.scrollLeft,a+=t.scrollTop,n-=i.left,a-=i.top,e.moveBy(n,a)}(this._cachedAbsoluteRect,this._options.positionedElementAncestor)),this._cachedAbsoluteRect}}},"./packages/ckeditor5-utils/src/dom/rect.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return l}));var i=o("./packages/ckeditor5-utils/src/dom/isrange.js"),s=o("./packages/ckeditor5-utils/src/dom/iswindow.js"),r=o("./packages/ckeditor5-utils/src/dom/getborderwidths.js"),n=o("./packages/ckeditor5-utils/src/dom/istext.js"),a=o("./node_modules/lodash-es/isElement.js");const c=["top","right","bottom","left","width","height"];class l{constructor(e){const t=Object(i.a)(e);if(Object.defineProperty(this,"_source",{value:e._source||e,writable:!0,enumerable:!1}),Object(a.a)(e)||t)if(t){const t=l.getDomRangeRects(e);d(this,l.getBoundingRect(t))}else d(this,e.getBoundingClientRect());else if(Object(s.a)(e)){const{innerWidth:t,innerHeight:o}=e;d(this,{top:0,right:t,bottom:o,left:0,width:t,height:o})}else d(this,e)}clone(){return new l(this)}moveTo(e,t){return this.top=t,this.right=e+this.width,this.bottom=t+this.height,this.left=e,this}moveBy(e,t){return this.top+=t,this.right+=e,this.left+=e,this.bottom+=t,this}getIntersection(e){const t={top:Math.max(this.top,e.top),right:Math.min(this.right,e.right),bottom:Math.min(this.bottom,e.bottom),left:Math.max(this.left,e.left)};return t.width=t.right-t.left,t.height=t.bottom-t.top,t.width<0||t.height<0?null:new l(t)}getIntersectionArea(e){const t=this.getIntersection(e);return t?t.getArea():0}getArea(){return this.width*this.height}getVisible(){const e=this._source;let t=this.clone();if(!u(e)){let o=e.parentNode||e.commonAncestorContainer;for(;o&&!u(o);){const e=new l(o),i=t.getIntersection(e);if(!i)return null;i.getArea()<t.getArea()&&(t=i),o=o.parentNode}}return t}isEqual(e){for(const t of c)if(this[t]!==e[t])return!1;return!0}contains(e){const t=this.getIntersection(e);return!(!t||!t.isEqual(e))}excludeScrollbarsAndBorders(){const e=this._source;let t,o,i;if(Object(s.a)(e))t=e.innerWidth-e.document.documentElement.clientWidth,o=e.innerHeight-e.document.documentElement.clientHeight,i=e.getComputedStyle(e.document.documentElement).direction;else{const s=Object(r.a)(this._source);t=e.offsetWidth-e.clientWidth-s.left-s.right,o=e.offsetHeight-e.clientHeight-s.top-s.bottom,i=e.ownerDocument.defaultView.getComputedStyle(e).direction,this.left+=s.left,this.top+=s.top,this.right-=s.right,this.bottom-=s.bottom,this.width=this.right-this.left,this.height=this.bottom-this.top}return this.width-=t,"ltr"===i?this.right-=t:this.left+=t,this.height-=o,this.bottom-=o,this}static getDomRangeRects(e){const t=[],o=Array.from(e.getClientRects());if(o.length)for(const e of o)t.push(new l(e));else{let o=e.startContainer;Object(n.a)(o)&&(o=o.parentNode);const i=new l(o.getBoundingClientRect());i.right=i.left,i.width=0,t.push(i)}return t}static getBoundingRect(e){const t={left:Number.POSITIVE_INFINITY,top:Number.POSITIVE_INFINITY,right:Number.NEGATIVE_INFINITY,bottom:Number.NEGATIVE_INFINITY};let o=0;for(const i of e)o++,t.left=Math.min(t.left,i.left),t.top=Math.min(t.top,i.top),t.right=Math.max(t.right,i.right),t.bottom=Math.max(t.bottom,i.bottom);return 0==o?null:(t.width=t.right-t.left,t.height=t.bottom-t.top,new l(t))}}function d(e,t){for(const o of c)e[o]=t[o]}function u(e){return!!Object(a.a)(e)&&e===e.ownerDocument.body}},"./packages/ckeditor5-utils/src/dom/resizeobserver.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return a}));var i=o("./packages/ckeditor5-utils/src/mix.js"),s=o("./packages/ckeditor5-utils/src/dom/global.js"),r=o("./packages/ckeditor5-utils/src/dom/rect.js"),n=o("./packages/ckeditor5-utils/src/dom/emittermixin.js");class a{constructor(e,t){a._observerInstance||a._createObserver(),this._element=e,this._callback=t,a._addElementCallback(e,t),a._observerInstance.observe(e)}destroy(){a._deleteElementCallback(this._element,this._callback)}static _addElementCallback(e,t){a._elementCallbacks||(a._elementCallbacks=new Map);let o=a._elementCallbacks.get(e);o||(o=new Set,a._elementCallbacks.set(e,o)),o.add(t)}static _deleteElementCallback(e,t){const o=a._getElementCallbacks(e);o&&(o.delete(t),o.size||(a._elementCallbacks.delete(e),a._observerInstance.unobserve(e))),a._elementCallbacks&&!a._elementCallbacks.size&&(a._observerInstance=null,a._elementCallbacks=null)}static _getElementCallbacks(e){return a._elementCallbacks?a._elementCallbacks.get(e):null}static _createObserver(){let e;e="function"==typeof s.a.window.ResizeObserver?s.a.window.ResizeObserver:c,a._observerInstance=new e(e=>{for(const t of e){const e=a._getElementCallbacks(t.target);if(e)for(const o of e)o(t)}})}}a._observerInstance=null,a._elementCallbacks=null;class c{constructor(e){this._callback=e,this._elements=new Set,this._previousRects=new Map,this._periodicCheckTimeout=null}observe(e){this._elements.add(e),this._checkElementRectsAndExecuteCallback(),1===this._elements.size&&this._startPeriodicCheck()}unobserve(e){this._elements.delete(e),this._previousRects.delete(e),this._elements.size||this._stopPeriodicCheck()}_startPeriodicCheck(){const e=()=>{this._checkElementRectsAndExecuteCallback(),this._periodicCheckTimeout=setTimeout(e,100)};this.listenTo(s.a.window,"resize",()=>{this._checkElementRectsAndExecuteCallback()}),this._periodicCheckTimeout=setTimeout(e,100)}_stopPeriodicCheck(){clearTimeout(this._periodicCheckTimeout),this.stopListening(),this._previousRects.clear()}_checkElementRectsAndExecuteCallback(){const e=[];for(const t of this._elements)this._hasRectChanged(t)&&e.push({target:t,contentRect:this._previousRects.get(t)});e.length&&this._callback(e)}_hasRectChanged(e){if(!e.ownerDocument.body.contains(e))return!1;const t=new r.a(e),o=this._previousRects.get(e),i=!o||!o.isEqual(t);return this._previousRects.set(e,t),i}}Object(i.a)(c,n.a)},"./packages/ckeditor5-utils/src/dom/setdatainelement.js":function(e,t,o){"use strict";function i(e,t){e instanceof HTMLTextAreaElement&&(e.value=t),e.innerHTML=t}o.d(t,"a",(function(){return i}))},"./packages/ckeditor5-utils/src/dom/tounit.js":function(e,t,o){"use strict";function i(e){return t=>t+e}o.d(t,"a",(function(){return i}))},"./packages/ckeditor5-utils/src/emittermixin.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return d})),o.d(t,"b",(function(){return u}));var i=o("./packages/ckeditor5-utils/src/eventinfo.js"),s=o("./packages/ckeditor5-utils/src/uid.js"),r=o("./packages/ckeditor5-utils/src/priorities.js"),n=(o("./packages/ckeditor5-utils/src/version.js"),o("./packages/ckeditor5-utils/src/ckeditorerror.js"));const a=Symbol("listeningTo"),c=Symbol("emitterId"),l={on(e,t,o={}){this.listenTo(this,e,t,o)},once(e,t,o){let i=!1;this.listenTo(this,e,(function(e,...o){i||(i=!0,e.off(),t.call(this,e,...o))}),o)},off(e,t){this.stopListening(this,e,t)},listenTo(e,t,o,i={}){let s,r;this[a]||(this[a]={});const n=this[a];h(e)||u(e);const c=h(e);(s=n[c])||(s=n[c]={emitter:e,callbacks:{}}),(r=s.callbacks[t])||(r=s.callbacks[t]=[]),r.push(o),function(e,t,o,i,s){t._addEventListener?t._addEventListener(o,i,s):e._addEventListener.call(t,o,i,s)}(this,e,t,o,i)},stopListening(e,t,o){const i=this[a];let s=e&&h(e);const r=i&&s&&i[s],n=r&&t&&r.callbacks[t];if(!(!i||e&&!r||t&&!n))if(o){m(this,e,t,o);-1!==n.indexOf(o)&&(1===n.length?delete r.callbacks[t]:m(this,e,t,o))}else if(n){for(;o=n.pop();)m(this,e,t,o);delete r.callbacks[t]}else if(r){for(t in r.callbacks)this.stopListening(e,t);delete i[s]}else{for(s in i)this.stopListening(i[s].emitter);delete this[a]}},fire(e,...t){try{const o=e instanceof i.a?e:new i.a(this,e),s=o.name;let r=function e(t,o){let i;if(!t._events||!(i=t._events[o])||!i.callbacks.length)return o.indexOf(":")>-1?e(t,o.substr(0,o.lastIndexOf(":"))):null;return i.callbacks}(this,s);if(o.path.push(this),r){const e=[o,...t];r=Array.from(r);for(let t=0;t<r.length&&(r[t].callback.apply(this,e),o.off.called&&(delete o.off.called,this._removeEventListener(s,r[t].callback)),!o.stop.called);t++);}if(this._delegations){const e=this._delegations.get(s),i=this._delegations.get("*");e&&f(e,o,t),i&&f(i,o,t)}return o.return}catch(e){n.a.rethrowUnexpectedError(e,this)}},delegate(...e){return{to:(t,o)=>{this._delegations||(this._delegations=new Map),e.forEach(e=>{const i=this._delegations.get(e);i?i.set(t,o):this._delegations.set(e,new Map([[t,o]]))})}}},stopDelegating(e,t){if(this._delegations)if(e)if(t){const o=this._delegations.get(e);o&&o.delete(t)}else this._delegations.delete(e);else this._delegations.clear()},_addEventListener(e,t,o){!function(e,t){const o=p(e);if(o[t])return;let i=t,s=null;const r=[];for(;""!==i&&!o[i];)o[i]={callbacks:[],childEvents:[]},r.push(o[i]),s&&o[i].childEvents.push(s),s=i,i=i.substr(0,i.lastIndexOf(":"));if(""!==i){for(const e of r)e.callbacks=o[i].callbacks.slice();o[i].childEvents.push(s)}}(this,e);const i=g(this,e),s=r.a.get(o.priority),n={callback:t,priority:s};for(const e of i){let t=!1;for(let o=0;o<e.length;o++)if(e[o].priority<s){e.splice(o,0,n),t=!0;break}t||e.push(n)}},_removeEventListener(e,t){const o=g(this,e);for(const e of o)for(let o=0;o<e.length;o++)e[o].callback==t&&(e.splice(o,1),o--)}};function d(e,t){return e[a]&&e[a][t]?e[a][t].emitter:null}function u(e,t){e[c]||(e[c]=t||Object(s.a)())}function h(e){return e[c]}function p(e){return e._events||Object.defineProperty(e,"_events",{value:{}}),e._events}function g(e,t){const o=p(e)[t];if(!o)return[];let i=[o.callbacks];for(let t=0;t<o.childEvents.length;t++){const s=g(e,o.childEvents[t]);i=i.concat(s)}return i}function f(e,t,o){for(let[s,r]of e){r?"function"==typeof r&&(r=r(t.name)):r=t.name;const e=new i.a(t.source,r);e.path=[...t.path],s.fire(e,...o)}}function m(e,t,o,i){t._removeEventListener?t._removeEventListener(o,i):e._removeEventListener.call(t,o,i)}t.c=l},"./packages/ckeditor5-utils/src/env.js":function(e,t,o){"use strict";const i=navigator.userAgent.toLowerCase(),s={isMac:function(e){return e.indexOf("macintosh")>-1}(i),isGecko:function(e){return!!e.match(/gecko\/\d+/)}(i),isSafari:function(e){return e.indexOf(" applewebkit/")>-1&&-1===e.indexOf("chrome")}(i),isAndroid:function(e){return e.indexOf("android")>-1}(i),isBlink:function(e){return e.indexOf("chrome/")>-1&&e.indexOf("edge/")<0}(i),features:{isRegExpUnicodePropertySupported:function(){let e=!1;try{e=0==="ć".search(new RegExp("[\\p{L}]","u"))}catch(e){}return e}()}};t.a=s},"./packages/ckeditor5-utils/src/eventinfo.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return s}));var i=function(){return function e(){e.called=!0}};class s{constructor(e,t){this.source=e,this.name=t,this.path=[],this.stop=i(),this.off=i()}}},"./packages/ckeditor5-utils/src/fastdiff.js":function(e,t,o){"use strict";function i(e,t,o,i=!1){o=o||function(e,t){return e===t},Array.isArray(e)||(e=Array.prototype.slice.call(e)),Array.isArray(t)||(t=Array.prototype.slice.call(t));const n=function(e,t,o){const i=s(e,t,o);if(-1===i)return{firstIndex:-1,lastIndexOld:-1,lastIndexNew:-1};const n=r(e,i),a=r(t,i),c=s(n,a,o),l=e.length-c,d=t.length-c;return{firstIndex:i,lastIndexOld:l,lastIndexNew:d}}(e,t,o);return i?function(e,t){const{firstIndex:o,lastIndexOld:i,lastIndexNew:s}=e;if(-1===o)return Array(t).fill("equal");let r=[];o>0&&(r=r.concat(Array(o).fill("equal")));s-o>0&&(r=r.concat(Array(s-o).fill("insert")));i-o>0&&(r=r.concat(Array(i-o).fill("delete")));s<t&&(r=r.concat(Array(t-s).fill("equal")));return r}(n,t.length):function(e,t){const o=[],{firstIndex:i,lastIndexOld:s,lastIndexNew:r}=t;r-i>0&&o.push({index:i,type:"insert",values:e.slice(i,r)});s-i>0&&o.push({index:i+(r-i),type:"delete",howMany:s-i});return o}(t,n)}function s(e,t,o){for(let i=0;i<Math.max(e.length,t.length);i++)if(void 0===e[i]||void 0===t[i]||!o(e[i],t[i]))return i;return-1}function r(e,t){return e.slice(t).reverse()}o.d(t,"a",(function(){return i}))},"./packages/ckeditor5-utils/src/first.js":function(e,t,o){"use strict";function i(e){const t=e.next();return t.done?null:t.value}o.d(t,"a",(function(){return i}))},"./packages/ckeditor5-utils/src/focustracker.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return a}));var i=o("./packages/ckeditor5-utils/src/dom/emittermixin.js"),s=o("./packages/ckeditor5-utils/src/observablemixin.js"),r=o("./packages/ckeditor5-utils/src/ckeditorerror.js"),n=o("./packages/ckeditor5-utils/src/mix.js");class a{constructor(){this.set("isFocused",!1),this.set("focusedElement",null),this._elements=new Set,this._nextEventLoopTimeout=null}add(e){if(this._elements.has(e))throw new r.a("focustracker-add-element-already-exist",this);this.listenTo(e,"focus",()=>this._focus(e),{useCapture:!0}),this.listenTo(e,"blur",()=>this._blur(),{useCapture:!0}),this._elements.add(e)}remove(e){e===this.focusedElement&&this._blur(e),this._elements.has(e)&&(this.stopListening(e),this._elements.delete(e))}destroy(){this.stopListening()}_focus(e){clearTimeout(this._nextEventLoopTimeout),this.focusedElement=e,this.isFocused=!0}_blur(){clearTimeout(this._nextEventLoopTimeout),this._nextEventLoopTimeout=setTimeout(()=>{this.focusedElement=null,this.isFocused=!1},0)}}Object(n.a)(a,i.a),Object(n.a)(a,s.a)},"./packages/ckeditor5-utils/src/index.js":function(e,t,o){"use strict";o.d(t,"n",(function(){return i.a})),o.d(t,"m",(function(){return s.a})),o.d(t,"A",(function(){return r.a})),o.d(t,"e",(function(){return n.c})),o.d(t,"i",(function(){return a.a})),o.d(t,"a",(function(){return c.a})),o.d(t,"y",(function(){return c.b})),o.d(t,"z",(function(){return c.c})),o.d(t,"d",(function(){return l})),o.d(t,"l",(function(){return d.a})),o.d(t,"c",(function(){return u.a})),o.d(t,"u",(function(){return h.a})),o.d(t,"q",(function(){return p})),o.d(t,"j",(function(){return g.a})),o.d(t,"k",(function(){return f.a})),o.d(t,"D",(function(){return m.a})),o.d(t,"G",(function(){return k.a})),o.d(t,"x",(function(){return b.f})),o.d(t,"p",(function(){return b.a})),o.d(t,"B",(function(){return b.g})),o.d(t,"r",(function(){return b.b})),o.d(t,"v",(function(){return b.d})),o.d(t,"t",(function(){return b.c})),o.d(t,"w",(function(){return b.e})),o.d(t,"s",(function(){return _.a})),o.d(t,"h",(function(){return w.a})),o.d(t,"b",(function(){return v.a})),o.d(t,"o",(function(){return y.a})),o.d(t,"f",(function(){return j.a})),o.d(t,"g",(function(){return x.a})),o.d(t,"E",(function(){return P.a})),o.d(t,"F",(function(){return O.a})),o.d(t,"C",(function(){return A.a})),o.d(t,"H",(function(){return T.a})),o.d(t,"I",(function(){return C.a}));var i=o("./packages/ckeditor5-utils/src/env.js"),s=o("./packages/ckeditor5-utils/src/diff.js"),r=o("./packages/ckeditor5-utils/src/mix.js"),n=o("./packages/ckeditor5-utils/src/emittermixin.js"),a=o("./packages/ckeditor5-utils/src/observablemixin.js"),c=o("./packages/ckeditor5-utils/src/ckeditorerror.js");class l{constructor(){this._replacedElements=[]}replace(e,t){this._replacedElements.push({element:e,newElement:t}),e.style.display="none",t&&e.parentNode.insertBefore(t,e.nextSibling)}restore(){this._replacedElements.forEach(({element:e,newElement:t})=>{e.style.display="",t&&t.remove()}),this._replacedElements=[]}}var d=o("./packages/ckeditor5-utils/src/dom/createelement.js"),u=o("./packages/ckeditor5-utils/src/dom/emittermixin.js"),h=o("./packages/ckeditor5-utils/src/dom/global.js");function p(e){return e instanceof HTMLTextAreaElement?e.value:e.innerHTML}var g=o("./packages/ckeditor5-utils/src/dom/rect.js"),f=o("./packages/ckeditor5-utils/src/dom/resizeobserver.js"),m=o("./packages/ckeditor5-utils/src/dom/setdatainelement.js"),k=o("./packages/ckeditor5-utils/src/dom/tounit.js"),b=o("./packages/ckeditor5-utils/src/keyboard.js"),_=o("./packages/ckeditor5-utils/src/language.js"),w=o("./packages/ckeditor5-utils/src/locale.js"),v=o("./packages/ckeditor5-utils/src/collection.js"),y=o("./packages/ckeditor5-utils/src/first.js"),j=o("./packages/ckeditor5-utils/src/focustracker.js"),x=o("./packages/ckeditor5-utils/src/keystrokehandler.js"),P=o("./packages/ckeditor5-utils/src/toarray.js"),O=o("./packages/ckeditor5-utils/src/tomap.js"),A=o("./packages/ckeditor5-utils/src/priorities.js"),T=o("./packages/ckeditor5-utils/src/uid.js"),C=o("./packages/ckeditor5-utils/src/version.js")},"./packages/ckeditor5-utils/src/isiterable.js":function(e,t,o){"use strict";function i(e){return!(!e||!e[Symbol.iterator])}o.d(t,"a",(function(){return i}))},"./packages/ckeditor5-utils/src/keyboard.js":function(e,t,o){"use strict";o.d(t,"f",(function(){return a})),o.d(t,"a",(function(){return l})),o.d(t,"g",(function(){return d})),o.d(t,"b",(function(){return u})),o.d(t,"d",(function(){return h})),o.d(t,"c",(function(){return p})),o.d(t,"e",(function(){return g}));var i=o("./packages/ckeditor5-utils/src/ckeditorerror.js"),s=o("./packages/ckeditor5-utils/src/env.js");const r={ctrl:"⌃",cmd:"⌘",alt:"⌥",shift:"⇧"},n={ctrl:"Ctrl+",alt:"Alt+",shift:"Shift+"},a=function(){const e={arrowleft:37,arrowup:38,arrowright:39,arrowdown:40,backspace:8,delete:46,enter:13,space:32,esc:27,tab:9,ctrl:1114112,shift:2228224,alt:4456448,cmd:8912896};for(let t=65;t<=90;t++){const o=String.fromCharCode(t);e[o.toLowerCase()]=t}for(let t=48;t<=57;t++)e[t-48]=t;for(let t=112;t<=123;t++)e["f"+(t-111)]=t;for(const t of"`-=[];',./\\")e[t]=t.charCodeAt(0);return e}(),c=Object.fromEntries(Object.entries(a).map(([e,t])=>[t,e.charAt(0).toUpperCase()+e.slice(1)]));function l(e){let t;if("string"==typeof e){if(t=a[e.toLowerCase()],!t)throw new i.a("keyboard-unknown-key",null,{key:e})}else t=e.keyCode+(e.altKey?a.alt:0)+(e.ctrlKey?a.ctrl:0)+(e.shiftKey?a.shift:0)+(e.metaKey?a.cmd:0);return t}function d(e){return"string"==typeof e&&(e=function(e){return e.split("+").map(e=>e.trim())}(e)),e.map(e=>"string"==typeof e?function(e){if(e.endsWith("!"))return l(e.slice(0,-1));const t=l(e);return s.a.isMac&&t==a.ctrl?a.cmd:t}(e):e).reduce((e,t)=>t+e,0)}function u(e){let t=d(e);return Object.entries(s.a.isMac?r:n).reduce((e,[o,i])=>(0!=(t&a[o])&&(t&=~a[o],e+=i),e),"")+(t?c[t]:"")}function h(e){return e==a.arrowright||e==a.arrowleft||e==a.arrowup||e==a.arrowdown}function p(e,t){const o="ltr"===t;switch(e){case a.arrowleft:return o?"left":"right";case a.arrowright:return o?"right":"left";case a.arrowup:return"up";case a.arrowdown:return"down"}}function g(e,t){const o=p(e,t);return"down"===o||"right"===o}},"./packages/ckeditor5-utils/src/keystrokehandler.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return r}));var i=o("./packages/ckeditor5-utils/src/dom/emittermixin.js"),s=o("./packages/ckeditor5-utils/src/keyboard.js");class r{constructor(){this._listener=Object.create(i.a)}listenTo(e){this._listener.listenTo(e,"keydown",(e,t)=>{this._listener.fire("_keydown:"+Object(s.a)(t),t)})}set(e,t,o={}){const i=Object(s.g)(e),r=o.priority;this._listener.listenTo(this._listener,"_keydown:"+i,(e,o)=>{t(o,()=>{o.preventDefault(),o.stopPropagation(),e.stop()}),e.return=!0},{priority:r})}press(e){return!!this._listener.fire("_keydown:"+Object(s.a)(e),e)}destroy(){this._listener.stopListening()}}},"./packages/ckeditor5-utils/src/language.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return s}));const i=["ar","ara","fa","per","fas","he","heb","ku","kur","ug","uig"];function s(e){return i.includes(e)?"rtl":"ltr"}},"./packages/ckeditor5-utils/src/locale.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return a}));var i=o("./packages/ckeditor5-utils/src/toarray.js"),s=o("./packages/ckeditor5-utils/src/ckeditorerror.js");function r(e,t,o=1){if("number"!=typeof o)throw new s.a("translation-service-quantity-not-a-number",null,{quantity:o});const i=Object.keys(window.CKEDITOR_TRANSLATIONS).length;1===i&&(e=Object.keys(window.CKEDITOR_TRANSLATIONS)[0]);const r=t.id||t.string;if(0===i||!function(e,t){return!!window.CKEDITOR_TRANSLATIONS[e]&&!!window.CKEDITOR_TRANSLATIONS[e].dictionary[t]}(e,r))return 1!==o?t.plural:t.string;const n=window.CKEDITOR_TRANSLATIONS[e].dictionary,a=window.CKEDITOR_TRANSLATIONS[e].getPluralForm||(e=>1===e?0:1);if("string"==typeof n[r])return n[r];const c=Number(a(o));return n[r][c]}window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={});var n=o("./packages/ckeditor5-utils/src/language.js");class a{constructor(e={}){this.uiLanguage=e.uiLanguage||"en",this.contentLanguage=e.contentLanguage||this.uiLanguage,this.uiLanguageDirection=Object(n.a)(this.uiLanguage),this.contentLanguageDirection=Object(n.a)(this.contentLanguage),this.t=(e,t)=>this._t(e,t)}get language(){return console.warn("locale-deprecated-language-property: The Locale#language property has been deprecated and will be removed in the near future. Please use #uiLanguage and #contentLanguage properties instead."),this.uiLanguage}_t(e,t=[]){t=Object(i.a)(t),"string"==typeof e&&(e={string:e});const o=!!e.plural?t[0]:1;return function(e,t){return e.replace(/%(\d+)/g,(e,o)=>o<t.length?t[o]:e)}(r(this.uiLanguage,e,o),t)}}},"./packages/ckeditor5-utils/src/mix.js":function(e,t,o){"use strict";function i(e,...t){t.forEach(t=>{Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t)).forEach(o=>{if(o in e.prototype)return;const i=Object.getOwnPropertyDescriptor(t,o);i.enumerable=!1,Object.defineProperty(e.prototype,o,i)})})}o.d(t,"a",(function(){return i}))},"./packages/ckeditor5-utils/src/observablemixin.js":function(e,t,o){"use strict";var i=o("./packages/ckeditor5-utils/src/emittermixin.js"),s=o("./packages/ckeditor5-utils/src/ckeditorerror.js"),r=o("./node_modules/lodash-es/isObject.js"),n=o("./node_modules/lodash-es/assignIn.js");const a=Symbol("observableProperties"),c=Symbol("boundObservables"),l=Symbol("boundProperties"),d=Symbol("decoratedMethods"),u=Symbol("decoratedOriginal"),h={set(e,t){if(Object(r.a)(e))return void Object.keys(e).forEach(t=>{this.set(t,e[t])},this);p(this);const o=this[a];if(e in this&&!o.has(e))throw new s.a("observable-set-cannot-override",this);Object.defineProperty(this,e,{enumerable:!0,configurable:!0,get:()=>o.get(e),set(t){const i=o.get(e);let s=this.fire("set:"+e,e,t,i);void 0===s&&(s=t),i===s&&o.has(e)||(o.set(e,s),this.fire("change:"+e,e,s,i))}}),this[e]=t},bind(...e){if(!e.length||!m(e))throw new s.a("observable-bind-wrong-properties",this);if(new Set(e).size!==e.length)throw new s.a("observable-bind-duplicate-properties",this);p(this);const t=this[l];e.forEach(e=>{if(t.has(e))throw new s.a("observable-bind-rebind",this)});const o=new Map;return e.forEach(e=>{const i={property:e,to:[]};t.set(e,i),o.set(e,i)}),{to:g,toMany:f,_observable:this,_bindProperties:e,_to:[],_bindings:o}},unbind(...e){if(!this[a])return;const t=this[l],o=this[c];if(e.length){if(!m(e))throw new s.a("observable-unbind-wrong-properties",this);e.forEach(e=>{const i=t.get(e);if(!i)return;let s,r,n,a;i.to.forEach(e=>{s=e[0],r=e[1],n=o.get(s),a=n[r],a.delete(i),a.size||delete n[r],Object.keys(n).length||(o.delete(s),this.stopListening(s,"change"))}),t.delete(e)})}else o.forEach((e,t)=>{this.stopListening(t,"change")}),o.clear(),t.clear()},decorate(e){const t=this[e];if(!t)throw new s.a("observablemixin-cannot-decorate-undefined",this,{object:this,methodName:e});this.on(e,(e,o)=>{e.return=t.apply(this,o)}),this[e]=function(...t){return this.fire(e,t)},this[e][u]=t,this[d]||(this[d]=[]),this[d].push(e)}};function p(e){e[a]||(Object.defineProperty(e,a,{value:new Map}),Object.defineProperty(e,c,{value:new Map}),Object.defineProperty(e,l,{value:new Map}))}function g(...e){const t=function(...e){if(!e.length)throw new s.a("observable-bind-to-parse-error",null);const t={to:[]};let o;"function"==typeof e[e.length-1]&&(t.callback=e.pop());return e.forEach(e=>{if("string"==typeof e)o.properties.push(e);else{if("object"!=typeof e)throw new s.a("observable-bind-to-parse-error",null);o={observable:e,properties:[]},t.to.push(o)}}),t}(...e),o=Array.from(this._bindings.keys()),i=o.length;if(!t.callback&&t.to.length>1)throw new s.a("observable-bind-to-no-callback",this);if(i>1&&t.callback)throw new s.a("observable-bind-to-extra-callback",this);var r;t.to.forEach(e=>{if(e.properties.length&&e.properties.length!==i)throw new s.a("observable-bind-to-properties-length",this);e.properties.length||(e.properties=this._bindProperties)}),this._to=t.to,t.callback&&(this._bindings.get(o[0]).callback=t.callback),r=this._observable,this._to.forEach(e=>{const t=r[c];let o;t.get(e.observable)||r.listenTo(e.observable,"change",(i,s)=>{o=t.get(e.observable)[s],o&&o.forEach(e=>{k(r,e.property)})})}),function(e){let t;e._bindings.forEach((o,i)=>{e._to.forEach(s=>{t=s.properties[o.callback?0:e._bindProperties.indexOf(i)],o.to.push([s.observable,t]),function(e,t,o,i){const s=e[c],r=s.get(o),n=r||{};n[i]||(n[i]=new Set);n[i].add(t),r||s.set(o,n)}(e._observable,o,s.observable,t)})})}(this),this._bindProperties.forEach(e=>{k(this._observable,e)})}function f(e,t,o){if(this._bindings.size>1)throw new s.a("observable-bind-to-many-not-one-binding",this);this.to(...function(e,t){const o=e.map(e=>[e,t]);return Array.prototype.concat.apply([],o)}(e,t),o)}function m(e){return e.every(e=>"string"==typeof e)}function k(e,t){const o=e[l].get(t);let i;o.callback?i=o.callback.apply(e,o.to.map(e=>e[0][e[1]])):(i=o.to[0],i=i[0][i[1]]),Object.prototype.hasOwnProperty.call(e,t)?e[t]=i:e.set(t,i)}Object(n.a)(h,i.c),h.stopListening=function(e,t,o){if(!e&&this[d]){for(const e of this[d])this[e]=this[e][u];delete this[d]}i.c.stopListening.call(this,e,t,o)},t.a=h},"./packages/ckeditor5-utils/src/priorities.js":function(e,t,o){"use strict";const i={get(e){return"number"!=typeof e?this[e]||this.normal:e},highest:1e5,high:1e3,normal:0,low:-1e3,lowest:-1e5};t.a=i},"./packages/ckeditor5-utils/src/toarray.js":function(e,t,o){"use strict";function i(e){return Array.isArray(e)?e:[e]}o.d(t,"a",(function(){return i}))},"./packages/ckeditor5-utils/src/tomap.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return s}));var i=o("./packages/ckeditor5-utils/src/isiterable.js");function s(e){return Object(i.a)(e)?new Map(e):function(e){const t=new Map;for(const o in e)t.set(o,e[o]);return t}(e)}},"./packages/ckeditor5-utils/src/uid.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return s}));const i=new Array(256).fill().map((e,t)=>("0"+t.toString(16)).slice(-2));function s(){const e=4294967296*Math.random()>>>0,t=4294967296*Math.random()>>>0,o=4294967296*Math.random()>>>0,s=4294967296*Math.random()>>>0;return"e"+i[e>>0&255]+i[e>>8&255]+i[e>>16&255]+i[e>>24&255]+i[t>>0&255]+i[t>>8&255]+i[t>>16&255]+i[t>>24&255]+i[o>>0&255]+i[o>>8&255]+i[o>>16&255]+i[o>>24&255]+i[s>>0&255]+i[s>>8&255]+i[s>>16&255]+i[s>>24&255]}},"./packages/ckeditor5-utils/src/version.js":function(e,t,o){"use strict";(function(e){var i=o("./packages/ckeditor5-utils/src/ckeditorerror.js");t.a="31.0.0";const s="object"==typeof window?window:e;if(s.CKEDITOR_VERSION)throw new i.a("ckeditor-duplicated-modules",null);s.CKEDITOR_VERSION="31.0.0"}).call(this,o("./node_modules/webpack/buildin/global.js"))},"./packages/ckeditor5-widget/src/utils.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return p})),o.d(t,"b",(function(){return g})),o.d(t,"e",(function(){return f})),o.d(t,"h",(function(){return m})),o.d(t,"f",(function(){return _})),o.d(t,"g",(function(){return w})),o.d(t,"d",(function(){return v})),o.d(t,"i",(function(){return y})),o.d(t,"c",(function(){return j})),o.d(t,"j",(function(){return x}));var i=o("./packages/ckeditor5-utils/src/ckeditorerror.js"),s=o("./packages/ckeditor5-utils/src/toarray.js"),r=o("./packages/ckeditor5-utils/src/emittermixin.js"),n=o("./packages/ckeditor5-utils/src/mix.js");class a{constructor(){this._stack=[]}add(e,t){const o=this._stack,i=o[0];this._insertDescriptor(e);const s=o[0];i===s||c(i,s)||this.fire("change:top",{oldDescriptor:i,newDescriptor:s,writer:t})}remove(e,t){const o=this._stack,i=o[0];this._removeDescriptor(e);const s=o[0];i===s||c(i,s)||this.fire("change:top",{oldDescriptor:i,newDescriptor:s,writer:t})}_insertDescriptor(e){const t=this._stack,o=t.findIndex(t=>t.id===e.id);if(c(e,t[o]))return;o>-1&&t.splice(o,1);let i=0;for(;t[i]&&l(t[i],e);)i++;t.splice(i,0,e)}_removeDescriptor(e){const t=this._stack,o=t.findIndex(t=>t.id===e);o>-1&&t.splice(o,1)}}function c(e,t){return e&&t&&e.priority==t.priority&&d(e.classes)==d(t.classes)}function l(e,t){return e.priority>t.priority||!(e.priority<t.priority)&&d(e.classes)>d(t.classes)}function d(e){return Array.isArray(e)?e.sort().join(","):e}Object(n.a)(a,r.c);var u=o("./packages/ckeditor5-widget/src/widgettypearound/utils.js"),h=o("./packages/ckeditor5-ui/src/icon/iconview.js");const p="ck-widget",g="ck-widget_selected";function f(e){return!!e.is("element")&&!!e.getCustomProperty("widget")}function m(e,t,o={}){if(!e.is("containerElement"))throw new i.a("widget-to-widget-wrong-element-type",null,{element:e});return t.setAttribute("contenteditable","false",e),t.addClass(p,e),t.setCustomProperty("widget",!0,e),e.getFillerOffset=P,o.label&&w(e,o.label,t),o.hasSelectionHandle&&function(e,t){const o=t.createUIElement("div",{class:"ck ck-widget__selection-handle"},(function(e){const t=this.toDomElement(e),o=new h.a;return o.set("content",'<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M4 0v1H1v3H0V.5A.5.5 0 0 1 .5 0H4zm8 0h3.5a.5.5 0 0 1 .5.5V4h-1V1h-3V0zM4 16H.5a.5.5 0 0 1-.5-.5V12h1v3h3v1zm8 0v-1h3v-3h1v3.5a.5.5 0 0 1-.5.5H12z"/><path fill-opacity=".256" d="M1 1h14v14H1z"/><g class="ck-icon__selected-indicator"><path d="M7 0h2v1H7V0zM0 7h1v2H0V7zm15 0h1v2h-1V7zm-8 8h2v1H7v-1z"/><path fill-opacity=".254" d="M1 1h14v14H1z"/></g></svg>'),o.render(),t.appendChild(o.element),t}));t.insert(t.createPositionAt(e,0),o),t.addClass(["ck-widget_with-selection-handle"],e)}(e,t),_(e,t),e}function k(e,t,o){if(t.classes&&o.addClass(Object(s.a)(t.classes),e),t.attributes)for(const i in t.attributes)o.setAttribute(i,t.attributes[i],e)}function b(e,t,o){if(t.classes&&o.removeClass(Object(s.a)(t.classes),e),t.attributes)for(const i in t.attributes)o.removeAttribute(i,e)}function _(e,t,o=k,i=b){const s=new a;s.on("change:top",(t,s)=>{s.oldDescriptor&&i(e,s.oldDescriptor,s.writer),s.newDescriptor&&o(e,s.newDescriptor,s.writer)}),t.setCustomProperty("addHighlight",(e,t,o)=>s.add(t,o),e),t.setCustomProperty("removeHighlight",(e,t,o)=>s.remove(t,o),e)}function w(e,t,o){o.setCustomProperty("widgetLabel",t,e)}function v(e){const t=e.getCustomProperty("widgetLabel");return t?"function"==typeof t?t():t:""}function y(e,t){return t.addClass(["ck-editor__editable","ck-editor__nested-editable"],e),t.setAttribute("contenteditable",e.isReadOnly?"false":"true",e),e.on("change:isReadOnly",(o,i,s)=>{t.setAttribute("contenteditable",s?"false":"true",e)}),e.on("change:isFocused",(o,i,s)=>{s?t.addClass("ck-editor__nested-editable_focused",e):t.removeClass("ck-editor__nested-editable_focused",e)}),_(e,t),e}function j(e,t){const o=e.getSelectedElement();if(o){const i=Object(u.e)(e);if(i)return t.createRange(t.createPositionAt(o,i));if(t.schema.isObject(o)&&!t.schema.isInline(o))return t.createRangeOn(o)}const i=e.getSelectedBlocks().next().value;if(i){if(i.isEmpty)return t.createRange(t.createPositionAt(i,0));const o=t.createPositionAfter(i);return e.focus.isTouching(o)?t.createRange(o):t.createRange(t.createPositionBefore(i))}return t.createRange(e.focus)}function x(e,t){return(o,i)=>{const{mapper:s,viewPosition:r}=i,n=s.findMappedViewAncestor(r);if(!t(n))return;const a=s.toModelElement(n);i.modelPosition=e.createPositionAt(a,r.isAtStart?"before":"after")}}function P(){return null}},"./packages/ckeditor5-widget/src/widget.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return g}));var i=o("./packages/ckeditor5-core/src/plugin.js"),s=o("./packages/ckeditor5-engine/src/view/observer/mouseobserver.js"),r=o("./packages/ckeditor5-widget/src/widgettypearound/widgettypearound.js"),n=o("./packages/ckeditor5-typing/src/delete.js"),a=o("./packages/ckeditor5-utils/src/env.js"),c=o("./packages/ckeditor5-utils/src/keyboard.js"),l=o("./packages/ckeditor5-utils/src/dom/rect.js");function d(e){const t=e.model;return(o,i)=>{const s=i.keyCode==c.f.arrowup,r=i.keyCode==c.f.arrowdown,n=i.shiftKey,a=t.document.selection;if(!s&&!r)return;const d=r;if(n&&function(e,t){return!e.isCollapsed&&e.isBackward==t}(a,d))return;const p=function(e,t,o){const i=e.model;if(o){const e=t.isCollapsed?t.focus:t.getLastPosition(),o=u(i,e,"forward");if(!o)return null;const s=i.createRange(e,o),r=h(i.schema,s,"backward");return r?i.createRange(e,r):null}{const e=t.isCollapsed?t.focus:t.getFirstPosition(),o=u(i,e,"backward");if(!o)return null;const s=i.createRange(o,e),r=h(i.schema,s,"forward");return r?i.createRange(r,e):null}}(e,a,d);if(p){if(p.isCollapsed){if(a.isCollapsed)return;if(n)return}(p.isCollapsed||function(e,t,o){const i=e.model,s=e.view.domConverter;if(o){const e=i.createSelection(t.start);i.modifySelection(e),e.focus.isAtEnd||t.start.isEqual(e.focus)||(t=i.createRange(e.focus,t.end))}const r=e.mapper.toViewRange(t),n=s.viewRangeToDom(r),a=l.a.getDomRangeRects(n);let c;for(const e of a)if(void 0!==c){if(Math.round(e.top)>=c)return!1;c=Math.max(c,Math.round(e.bottom))}else c=Math.round(e.bottom);return!0}(e,p,d))&&(t.change(e=>{const o=d?p.end:p.start;if(n){const i=t.createSelection(a.anchor);i.setFocus(o),e.setSelection(i)}else e.setSelection(o)}),o.stop(),i.preventDefault(),i.stopPropagation())}}}function u(e,t,o){const i=e.schema,s=e.createRangeIn(t.root),r="forward"==o?"elementStart":"elementEnd";for(const{previousPosition:e,item:n,type:a}of s.getWalker({startPosition:t,direction:o})){if(i.isLimit(n)&&!i.isInline(n))return e;if(a==r&&i.isBlock(n))return null}return null}function h(e,t,o){const i="backward"==o?t.end:t.start;if(e.checkChild(i,"$text"))return i;for(const{nextPosition:i}of t.getWalker({direction:o}))if(e.checkChild(i,"$text"))return i;return null}var p=o("./packages/ckeditor5-widget/src/utils.js");o("./packages/ckeditor5-widget/theme/widget.css");class g extends i.a{static get pluginName(){return"Widget"}static get requires(){return[r.a,n.a]}init(){const e=this.editor,t=e.editing.view,o=t.document;this._previouslySelected=new Set,this.editor.editing.downcastDispatcher.on("selection",(t,o,i)=>{const s=i.writer,r=o.selection;if(r.isCollapsed)return;const n=r.getSelectedElement();if(!n)return;const a=e.editing.mapper.toViewElement(n);Object(p.e)(a)&&i.consumable.consume(r,"selection")&&s.setSelection(s.createRangeOn(a),{fake:!0,label:Object(p.d)(a)})}),this.editor.editing.downcastDispatcher.on("selection",(e,t,o)=>{this._clearPreviouslySelectedWidgets(o.writer);const i=o.writer,s=i.document.selection;let r=null;for(const e of s.getRanges())for(const t of e){const e=t.item;Object(p.e)(e)&&!f(e,r)&&(i.addClass(p.b,e),this._previouslySelected.add(e),r=e)}},{priority:"low"}),t.addObserver(s.a),this.listenTo(o,"mousedown",(...e)=>this._onMousedown(...e)),this.listenTo(o,"arrowKey",(...e)=>{this._handleSelectionChangeOnArrowKeyPress(...e)},{context:[p.e,"$text"]}),this.listenTo(o,"arrowKey",(...e)=>{this._preventDefaultOnArrowKeyPress(...e)},{context:"$root"}),this.listenTo(o,"arrowKey",d(this.editor.editing),{context:"$text"}),this.listenTo(o,"delete",(e,t)=>{this._handleDelete("forward"==t.direction)&&(t.preventDefault(),e.stop())},{context:"$root"})}_onMousedown(e,t){const o=this.editor,i=o.editing.view,s=i.document;let r=t.target;if(function(e){for(;e;){if(e.is("editableElement")&&!e.is("rootElement"))return!0;if(Object(p.e)(e))return!1;e=e.parent}return!1}(r)){if((a.a.isSafari||a.a.isGecko)&&t.domEvent.detail>=3){const e=o.editing.mapper,i=r.is("attributeElement")?r.findAncestor(e=>!e.is("attributeElement")):r,s=e.toModelElement(i);t.preventDefault(),this.editor.model.change(e=>{e.setSelection(s,"in")})}return}if(!Object(p.e)(r)&&(r=r.findAncestor(p.e),!r))return;a.a.isAndroid&&t.preventDefault(),s.isFocused||i.focus();const n=o.editing.mapper.toModelElement(r);this._setSelectionOverElement(n)}_handleSelectionChangeOnArrowKeyPress(e,t){const o=t.keyCode,i=this.editor.model,s=i.schema,r=i.document.selection,n=r.getSelectedElement(),a=Object(c.c)(o,this.editor.locale.contentLanguageDirection),l="down"==a||"right"==a,d="up"==a||"down"==a;if(n&&s.isObject(n)){const o=l?r.getLastPosition():r.getFirstPosition(),n=s.getNearestSelectionRange(o,l?"forward":"backward");return void(n&&(i.change(e=>{e.setSelection(n)}),t.preventDefault(),e.stop()))}if(!r.isCollapsed&&!t.shiftKey){const o=r.getFirstPosition(),n=r.getLastPosition(),a=o.nodeAfter,c=n.nodeBefore;return void((a&&s.isObject(a)||c&&s.isObject(c))&&(i.change(e=>{e.setSelection(l?n:o)}),t.preventDefault(),e.stop()))}if(!r.isCollapsed)return;const u=this._getObjectElementNextToSelection(l);if(u&&s.isObject(u)){if(s.isInline(u)&&d)return;this._setSelectionOverElement(u),t.preventDefault(),e.stop()}}_preventDefaultOnArrowKeyPress(e,t){const o=this.editor.model,i=o.schema,s=o.document.selection.getSelectedElement();s&&i.isObject(s)&&(t.preventDefault(),e.stop())}_handleDelete(e){if(this.editor.isReadOnly)return;const t=this.editor.model.document.selection;if(!t.isCollapsed)return;const o=this._getObjectElementNextToSelection(e);return o?(this.editor.model.change(e=>{let i=t.anchor.parent;for(;i.isEmpty;){const t=i;i=t.parent,e.remove(t)}this._setSelectionOverElement(o)}),!0):void 0}_setSelectionOverElement(e){this.editor.model.change(t=>{t.setSelection(t.createRangeOn(e))})}_getObjectElementNextToSelection(e){const t=this.editor.model,o=t.schema,i=t.document.selection,s=t.createSelection(i);if(t.modifySelection(s,{direction:e?"forward":"backward"}),s.isEqual(i))return null;const r=e?s.focus.nodeBefore:s.focus.nodeAfter;return r&&o.isObject(r)?r:null}_clearPreviouslySelectedWidgets(e){for(const t of this._previouslySelected)e.removeClass(p.b,t);this._previouslySelected.clear()}}function f(e,t){return!!t&&Array.from(e.getAncestors()).includes(t)}},"./packages/ckeditor5-widget/src/widgettypearound/utils.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return s})),o.d(t,"f",(function(){return r})),o.d(t,"b",(function(){return n})),o.d(t,"d",(function(){return a})),o.d(t,"c",(function(){return c})),o.d(t,"e",(function(){return l}));var i=o("./packages/ckeditor5-widget/src/utils.js");const s="widget-type-around";function r(e,t,o){return e&&Object(i.e)(e)&&!o.isInline(t)}function n(e){return e.closest(".ck-widget__type-around__button")}function a(e){return e.classList.contains("ck-widget__type-around__button_before")?"before":"after"}function c(e,t){const o=e.closest(".ck-widget");return t.mapDomToView(o)}function l(e){return e.getAttribute(s)}},"./packages/ckeditor5-widget/src/widgettypearound/widgettypearound.js":function(e,t,o){"use strict";o.d(t,"a",(function(){return p}));var i=o("./packages/ckeditor5-core/src/plugin.js"),s=o("./packages/ckeditor5-ui/src/template.js"),r=o("./packages/ckeditor5-enter/src/enter.js"),n=o("./packages/ckeditor5-typing/src/delete.js"),a=o("./packages/ckeditor5-utils/src/keyboard.js"),c=o("./packages/ckeditor5-widget/src/widgettypearound/utils.js"),l=o("./packages/ckeditor5-typing/src/utils/injectunsafekeystrokeshandling.js"),d=o("./packages/ckeditor5-widget/src/utils.js");o("./packages/ckeditor5-widget/theme/widgettypearound.css");const u=["before","after"],h=(new DOMParser).parseFromString('<svg viewBox="0 0 10 8" xmlns="http://www.w3.org/2000/svg"><path d="M9.055.263v3.972h-6.77M1 4.216l2-2.038m-2 2 2 2.038"/></svg>',"image/svg+xml").firstChild;class p extends i.a{static get pluginName(){return"WidgetTypeAround"}static get requires(){return[r.a,n.a]}constructor(e){super(e),this._currentFakeCaretModelElement=null}init(){const e=this.editor,t=e.editing.view;this.on("change:isEnabled",(o,i,s)=>{t.change(e=>{for(const o of t.document.roots)s?e.removeClass("ck-widget__type-around_disabled",o):e.addClass("ck-widget__type-around_disabled",o)}),s||e.model.change(e=>{e.removeSelectionAttribute(c.a)})}),this._enableTypeAroundUIInjection(),this._enableInsertingParagraphsOnButtonClick(),this._enableInsertingParagraphsOnEnterKeypress(),this._enableInsertingParagraphsOnTypingKeystroke(),this._enableTypeAroundFakeCaretActivationUsingKeyboardArrows(),this._enableDeleteIntegration(),this._enableInsertContentIntegration(),this._enableDeleteContentIntegration()}destroy(){this._currentFakeCaretModelElement=null}_insertParagraph(e,t){const o=this.editor,i=o.editing.view;o.execute("insertParagraph",{position:o.model.createPositionAt(e,t)}),i.focus(),i.scrollToTheSelection()}_listenToIfEnabled(e,t,o,i){this.listenTo(e,t,(...e)=>{this.isEnabled&&o(...e)},i)}_insertParagraphAccordingToFakeCaretPosition(){const e=this.editor.model.document.selection,t=Object(c.e)(e);if(!t)return!1;const o=e.getSelectedElement();return this._insertParagraph(o,t),!0}_enableTypeAroundUIInjection(){const e=this.editor,t=e.model.schema,o=e.locale.t,i={before:o("Insert paragraph before block"),after:o("Insert paragraph after block")};e.editing.downcastDispatcher.on("insert",(e,o,r)=>{const n=r.mapper.toViewElement(o.item);Object(c.f)(n,o.item,t)&&function(e,t,o){const i=e.createUIElement("div",{class:"ck ck-reset_all ck-widget__type-around"},(function(e){const o=this.toDomElement(e);return function(e,t){for(const o of u){const i=new s.a({tag:"div",attributes:{class:["ck","ck-widget__type-around__button","ck-widget__type-around__button_"+o],title:t[o]},children:[e.ownerDocument.importNode(h,!0)]});e.appendChild(i.render())}}(o,t),function(e){const t=new s.a({tag:"div",attributes:{class:["ck","ck-widget__type-around__fake-caret"]}});e.appendChild(t.render())}(o),o}));e.insert(e.createPositionAt(o,"end"),i)}(r.writer,i,n)},{priority:"low"})}_enableTypeAroundFakeCaretActivationUsingKeyboardArrows(){const e=this.editor,t=e.model,o=t.document.selection,i=t.schema,s=e.editing.view;function r(e){return"ck-widget_type-around_show-fake-caret_"+e}this._listenToIfEnabled(s.document,"arrowKey",(e,t)=>{this._handleArrowKeyPress(e,t)},{context:[d.e,"$text"],priority:"high"}),this._listenToIfEnabled(o,"change:range",(t,o)=>{o.directChange&&e.model.change(e=>{e.removeSelectionAttribute(c.a)})}),this._listenToIfEnabled(t.document,"change:data",()=>{const t=o.getSelectedElement();if(t){const o=e.editing.mapper.toViewElement(t);if(Object(c.f)(o,t,i))return}e.model.change(e=>{e.removeSelectionAttribute(c.a)})}),this._listenToIfEnabled(e.editing.downcastDispatcher,"selection",(e,t,o)=>{const s=o.writer;if(this._currentFakeCaretModelElement){const e=o.mapper.toViewElement(this._currentFakeCaretModelElement);e&&(s.removeClass(u.map(r),e),this._currentFakeCaretModelElement=null)}const n=t.selection.getSelectedElement();if(!n)return;const a=o.mapper.toViewElement(n);if(!Object(c.f)(a,n,i))return;const l=Object(c.e)(t.selection);l&&(s.addClass(r(l),a),this._currentFakeCaretModelElement=n)}),this._listenToIfEnabled(e.ui.focusTracker,"change:isFocused",(t,o,i)=>{i||e.model.change(e=>{e.removeSelectionAttribute(c.a)})})}_handleArrowKeyPress(e,t){const o=this.editor,i=o.model,s=i.document.selection,r=i.schema,n=o.editing.view,l=t.keyCode,d=Object(a.e)(l,o.locale.contentLanguageDirection),u=n.document.selection.getSelectedElement(),h=o.editing.mapper.toModelElement(u);let p;Object(c.f)(u,h,r)?p=this._handleArrowKeyPressOnSelectedWidget(d):s.isCollapsed?p=this._handleArrowKeyPressWhenSelectionNextToAWidget(d):t.shiftKey||(p=this._handleArrowKeyPressWhenNonCollapsedSelection(d)),p&&(t.preventDefault(),e.stop())}_handleArrowKeyPressOnSelectedWidget(e){const t=this.editor.model,o=t.document.selection,i=Object(c.e)(o);return t.change(t=>{if(!i)return t.setSelectionAttribute(c.a,e?"after":"before"),!0;if(!(i===(e?"after":"before")))return t.removeSelectionAttribute(c.a),!0;return!1})}_handleArrowKeyPressWhenSelectionNextToAWidget(e){const t=this.editor,o=t.model,i=o.schema,s=t.plugins.get("Widget"),r=s._getObjectElementNextToSelection(e),n=t.editing.mapper.toViewElement(r);return!!Object(c.f)(n,r,i)&&(o.change(t=>{s._setSelectionOverElement(r),t.setSelectionAttribute(c.a,e?"before":"after")}),!0)}_handleArrowKeyPressWhenNonCollapsedSelection(e){const t=this.editor,o=t.model,i=o.schema,s=t.editing.mapper,r=o.document.selection,n=e?r.getLastPosition().nodeBefore:r.getFirstPosition().nodeAfter,a=s.toViewElement(n);return!!Object(c.f)(a,n,i)&&(o.change(t=>{t.setSelection(n,"on"),t.setSelectionAttribute(c.a,e?"after":"before")}),!0)}_enableInsertingParagraphsOnButtonClick(){const e=this.editor,t=e.editing.view;this._listenToIfEnabled(t.document,"mousedown",(o,i)=>{const s=Object(c.b)(i.domTarget);if(!s)return;const r=Object(c.d)(s),n=Object(c.c)(s,t.domConverter),a=e.editing.mapper.toModelElement(n);this._insertParagraph(a,r),i.preventDefault(),o.stop()})}_enableInsertingParagraphsOnEnterKeypress(){const e=this.editor,t=e.model.document.selection,o=e.editing.view;this._listenToIfEnabled(o.document,"enter",(o,i)=>{if("atTarget"!=o.eventPhase)return;const s=t.getSelectedElement(),r=e.editing.mapper.toViewElement(s),n=e.model.schema;let a;this._insertParagraphAccordingToFakeCaretPosition()?a=!0:Object(c.f)(r,s,n)&&(this._insertParagraph(s,i.isSoft?"before":"after"),a=!0),a&&(i.preventDefault(),o.stop())},{context:d.e})}_enableInsertingParagraphsOnTypingKeystroke(){const e=this.editor.editing.view,t=[a.f.enter,a.f.delete,a.f.backspace];this._listenToIfEnabled(e.document,"keydown",(e,o)=>{t.includes(o.keyCode)||Object(l.b)(o)||this._insertParagraphAccordingToFakeCaretPosition()},{priority:"high"})}_enableDeleteIntegration(){const e=this.editor,t=e.editing.view,o=e.model,i=o.schema;this._listenToIfEnabled(t.document,"delete",(t,s)=>{if("atTarget"!=t.eventPhase)return;const r=Object(c.e)(o.document.selection);if(!r)return;const n=s.direction,a=o.document.selection.getSelectedElement(),l="forward"==n;if("before"===r===l)e.execute("delete",{selection:o.createSelection(a,"on")});else{const t=i.getNearestSelectionRange(o.createPositionAt(a,r),n);if(t)if(t.isCollapsed){const s=o.createSelection(t.start);if(o.modifySelection(s,{direction:n}),s.focus.isEqual(t.start)){const e=function(e,t){let o=t;for(const i of t.getAncestors({parentFirst:!0})){if(i.childCount>1||e.isLimit(i))break;o=i}return o}(i,t.start.parent);o.deleteContent(o.createSelection(e,"on"),{doNotAutoparagraph:!0})}else o.change(o=>{o.setSelection(t),e.execute(l?"deleteForward":"delete")})}else o.change(o=>{o.setSelection(t),e.execute(l?"deleteForward":"delete")})}s.preventDefault(),t.stop()},{context:d.e})}_enableInsertContentIntegration(){const e=this.editor,t=this.editor.model,o=t.document.selection;this._listenToIfEnabled(e.model,"insertContent",(e,[i,s])=>{if(s&&!s.is("documentSelection"))return;const r=Object(c.e)(o);return r?(e.stop(),t.change(e=>{const s=o.getSelectedElement(),n=t.createPositionAt(s,r),a=e.createSelection(n),c=t.insertContent(i,a);return e.setSelection(a),c})):void 0},{priority:"high"})}_enableDeleteContentIntegration(){const e=this.editor,t=this.editor.model.document.selection;this._listenToIfEnabled(e.model,"deleteContent",(e,[o])=>{if(o&&!o.is("documentSelection"))return;Object(c.e)(t)&&e.stop()},{priority:"high"})}}},"./packages/ckeditor5-widget/theme/widget.css":function(e,t,o){var i=o("./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),s=o("./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-widget/theme/widget.css");"string"==typeof(s=s.__esModule?s.default:s)&&(s=[[e.i,s,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};i(s,r);e.exports=s.locals||{}},"./packages/ckeditor5-widget/theme/widgetresize.css":function(e,t,o){var i=o("./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),s=o("./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-widget/theme/widgetresize.css");"string"==typeof(s=s.__esModule?s.default:s)&&(s=[[e.i,s,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};i(s,r);e.exports=s.locals||{}},"./packages/ckeditor5-widget/theme/widgettypearound.css":function(e,t,o){var i=o("./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),s=o("./node_modules/postcss-loader/src/index.js?!./packages/ckeditor5-widget/theme/widgettypearound.css");"string"==typeof(s=s.__esModule?s.default:s)&&(s=[[e.i,s,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};i(s,r);e.exports=s.locals||{}},"./src/clipboard.js":function(e,t,o){"use strict";o.r(t),o.d(t,"Clipboard",(function(){return j})),o.d(t,"ClipboardPipeline",(function(){return l})),o.d(t,"DragDrop",(function(){return k})),o.d(t,"PastePlainText",(function(){return y}));var i=o("./packages/ckeditor5-core/src/plugin.js"),s=o("./packages/ckeditor5-utils/src/eventinfo.js"),r=o("./packages/ckeditor5-engine/src/view/observer/domeventobserver.js");class n{constructor(e){this.files=function(e){const t=Array.from(e.files||[]),o=Array.from(e.items||[]);if(t.length)return t;return o.filter(e=>"file"===e.kind).map(e=>e.getAsFile())}(e),this._native=e}get types(){return this._native.types}getData(e){return this._native.getData(e)}setData(e,t){this._native.setData(e,t)}set effectAllowed(e){this._native.effectAllowed=e}get effectAllowed(){return this._native.effectAllowed}set dropEffect(e){this._native.dropEffect=e}get dropEffect(){return this._native.dropEffect}get isCanceled(){return"none"==this._native.dropEffect||!!this._native.mozUserCancelled}}class a extends r.a{constructor(e){super(e);const t=this.document;function o(e){return(o,i)=>{i.preventDefault();const r=i.dropRange?[i.dropRange]:null,n=new s.a(t,e);t.fire(n,{dataTransfer:i.dataTransfer,method:o.name,targetRanges:r,target:i.target}),n.stop.called&&i.stopPropagation()}}this.domEventType=["paste","copy","cut","drop","dragover","dragstart","dragend","dragenter","dragleave"],this.listenTo(t,"paste",o("clipboardInput"),{priority:"low"}),this.listenTo(t,"drop",o("clipboardInput"),{priority:"low"}),this.listenTo(t,"dragover",o("dragging"),{priority:"low"})}onDomEvent(e){const t={dataTransfer:new n(e.clipboardData?e.clipboardData:e.dataTransfer)};"drop"!=e.type&&"dragover"!=e.type||(t.dropRange=function(e,t){const o=t.target.ownerDocument,i=t.clientX,s=t.clientY;let r;o.caretRangeFromPoint&&o.caretRangeFromPoint(i,s)?r=o.caretRangeFromPoint(i,s):t.rangeParent&&(r=o.createRange(),r.setStart(t.rangeParent,t.rangeOffset),r.collapse(!0));if(r)return e.domConverter.domRangeToView(r);return null}(this.view,e)),this.fire(e.type,e,t)}}const c=["figcaption","li"];class l extends i.a{static get pluginName(){return"ClipboardPipeline"}init(){this.editor.editing.view.addObserver(a),this._setupPasteDrop(),this._setupCopyCut()}_setupPasteDrop(){const e=this.editor,t=e.model,o=e.editing.view,i=o.document;this.listenTo(i,"clipboardInput",t=>{e.isReadOnly&&t.stop()},{priority:"highest"}),this.listenTo(i,"clipboardInput",(e,t)=>{const i=t.dataTransfer;let r=t.content||"";var n;r||(i.getData("text/html")?r=function(e){return e.replace(/<span(?: class="Apple-converted-space"|)>(\s+)<\/span>/g,(e,t)=>1==t.length?" ":t).replace(/<!--[\s\S]*?-->/g,"")}(i.getData("text/html")):i.getData("text/plain")&&(((n=(n=i.getData("text/plain")).replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\r?\n\r?\n/g,"</p><p>").replace(/\r?\n/g,"<br>").replace(/^\s/,"&nbsp;").replace(/\s$/,"&nbsp;").replace(/\s\s/g," &nbsp;")).includes("</p><p>")||n.includes("<br>"))&&(n=`<p>${n}</p>`),r=n),r=this.editor.data.htmlProcessor.toView(r));const a=new s.a(this,"inputTransformation");this.fire(a,{content:r,dataTransfer:i,targetRanges:t.targetRanges,method:t.method}),a.stop.called&&e.stop(),o.scrollToTheSelection()},{priority:"low"}),this.listenTo(this,"inputTransformation",(e,o)=>{if(o.content.isEmpty)return;const i=this.editor.data.toModel(o.content,"$clipboardHolder");0!=i.childCount&&(e.stop(),t.change(()=>{this.fire("contentInsertion",{content:i,method:o.method,dataTransfer:o.dataTransfer,targetRanges:o.targetRanges})}))},{priority:"low"}),this.listenTo(this,"contentInsertion",(e,o)=>{o.resultRange=t.insertContent(o.content)},{priority:"low"})}_setupCopyCut(){const e=this.editor,t=e.model.document,o=e.editing.view.document;function i(i,s){const r=s.dataTransfer;s.preventDefault();const n=e.data.toView(e.model.getSelectedContent(t.selection));o.fire("clipboardOutput",{dataTransfer:r,content:n,method:i.name})}this.listenTo(o,"copy",i,{priority:"low"}),this.listenTo(o,"cut",(t,o)=>{e.isReadOnly?o.preventDefault():i(t,o)},{priority:"low"}),this.listenTo(o,"clipboardOutput",(o,i)=>{i.content.isEmpty||(i.dataTransfer.setData("text/html",this.editor.data.htmlProcessor.toData(i.content)),i.dataTransfer.setData("text/plain",function e(t){let o="";if(t.is("$text")||t.is("$textProxy"))o=t.data;else if(t.is("element","img")&&t.hasAttribute("alt"))o=t.getAttribute("alt");else if(t.is("element","br"))o="\n";else{let i=null;for(const s of t.getChildren()){const t=e(s);i&&(i.is("containerElement")||s.is("containerElement"))&&(c.includes(i.name)||c.includes(s.name)?o+="\n":o+="\n\n"),o+=t,i=s}}return o}(i.content))),"cut"==i.method&&e.model.deleteContent(t.selection)},{priority:"low"})}}var d=o("./packages/ckeditor5-engine/src/model/liverange.js"),u=o("./packages/ckeditor5-engine/src/view/observer/mouseobserver.js"),h=o("./packages/ckeditor5-widget/src/widget.js"),p=o("./packages/ckeditor5-utils/src/uid.js"),g=o("./packages/ckeditor5-utils/src/env.js"),f=o("./packages/ckeditor5-widget/src/utils.js"),m=o("./node_modules/lodash-es/throttle.js");o("./packages/ckeditor5-clipboard/theme/clipboard.css");class k extends i.a{static get pluginName(){return"DragDrop"}static get requires(){return[l,h.a]}init(){const e=this.editor,t=e.editing.view;this._draggedRange=null,this._draggingUid="",this._draggableElement=null,this._updateDropMarkerThrottled=Object(m.a)(e=>this._updateDropMarker(e),40),this._removeDropMarkerDelayed=w(()=>this._removeDropMarker(),40),this._clearDraggableAttributesDelayed=w(()=>this._clearDraggableAttributes(),40),t.addObserver(a),t.addObserver(u.a),this._setupDragging(),this._setupContentInsertionIntegration(),this._setupClipboardInputIntegration(),this._setupDropMarker(),this._setupDraggableAttributeHandling(),this.listenTo(e,"change:isReadOnly",(e,t,o)=>{o?this.forceDisabled("readOnlyMode"):this.clearForceDisabled("readOnlyMode")}),this.on("change:isEnabled",(e,t,o)=>{o||this._finalizeDragging(!1)}),g.a.isAndroid&&this.forceDisabled("noAndroidSupport")}destroy(){return this._draggedRange&&(this._draggedRange.detach(),this._draggedRange=null),this._updateDropMarkerThrottled.cancel(),this._removeDropMarkerDelayed.cancel(),this._clearDraggableAttributesDelayed.cancel(),super.destroy()}_setupDragging(){const e=this.editor,t=e.model,o=t.document,i=e.editing.view,s=i.document;this.listenTo(s,"dragstart",(i,r)=>{const n=o.selection;if(r.target&&r.target.is("editableElement"))return void r.preventDefault();const a=r.target?v(r.target):null;if(a){const o=e.editing.mapper.toModelElement(a);this._draggedRange=d.a.fromRange(t.createRangeOn(o)),e.plugins.has("WidgetToolbarRepository")&&e.plugins.get("WidgetToolbarRepository").forceDisabled("dragDrop")}else if(!s.selection.isCollapsed){const e=s.selection.getSelectedElement();e&&Object(f.e)(e)||(this._draggedRange=d.a.fromRange(n.getFirstRange()))}if(!this._draggedRange)return void r.preventDefault();this._draggingUid=Object(p.a)(),r.dataTransfer.effectAllowed=this.isEnabled?"copyMove":"copy",r.dataTransfer.setData("application/ckeditor5-dragging-uid",this._draggingUid);const c=t.createSelection(this._draggedRange.toRange()),l=e.data.toView(t.getSelectedContent(c));s.fire("clipboardOutput",{dataTransfer:r.dataTransfer,content:l,method:i.name}),this.isEnabled||(this._draggedRange.detach(),this._draggedRange=null,this._draggingUid="")},{priority:"low"}),this.listenTo(s,"dragend",(e,t)=>{this._finalizeDragging(!t.dataTransfer.isCanceled&&"move"==t.dataTransfer.dropEffect)},{priority:"low"}),this.listenTo(s,"dragenter",()=>{this.isEnabled&&i.focus()}),this.listenTo(s,"dragleave",()=>{this._removeDropMarkerDelayed()}),this.listenTo(s,"dragging",(t,o)=>{if(!this.isEnabled)return void(o.dataTransfer.dropEffect="none");this._removeDropMarkerDelayed.cancel();const i=b(e,o.targetRanges,o.target);this._draggedRange||(o.dataTransfer.dropEffect="copy"),g.a.isGecko||("copy"==o.dataTransfer.effectAllowed?o.dataTransfer.dropEffect="copy":["all","copyMove"].includes(o.dataTransfer.effectAllowed)&&(o.dataTransfer.dropEffect="move")),i&&this._updateDropMarkerThrottled(i)},{priority:"low"})}_setupClipboardInputIntegration(){const e=this.editor,t=e.editing.view.document;this.listenTo(t,"clipboardInput",(t,o)=>{if("drop"!=o.method)return;const i=b(e,o.targetRanges,o.target);if(this._removeDropMarker(),!i)return this._finalizeDragging(!1),void t.stop();this._draggedRange&&this._draggingUid!=o.dataTransfer.getData("application/ckeditor5-dragging-uid")&&(this._draggedRange.detach(),this._draggedRange=null,this._draggingUid="");if("move"==_(o.dataTransfer)&&this._draggedRange&&this._draggedRange.containsRange(i,!0))return this._finalizeDragging(!1),void t.stop();o.targetRanges=[e.editing.mapper.toViewRange(i)]},{priority:"high"})}_setupContentInsertionIntegration(){const e=this.editor.plugins.get(l);e.on("contentInsertion",(e,t)=>{if(!this.isEnabled||"drop"!==t.method)return;const o=t.targetRanges.map(e=>this.editor.editing.mapper.toModelRange(e));this.editor.model.change(e=>e.setSelection(o))},{priority:"high"}),e.on("contentInsertion",(e,t)=>{if(!this.isEnabled||"drop"!==t.method)return;const o="move"==_(t.dataTransfer),i=!t.resultRange||!t.resultRange.isCollapsed;this._finalizeDragging(i&&o)},{priority:"lowest"})}_setupDraggableAttributeHandling(){const e=this.editor,t=e.editing.view,o=t.document;this.listenTo(o,"mousedown",(i,s)=>{if(g.a.isAndroid||!s)return;this._clearDraggableAttributesDelayed.cancel();let r=v(s.target);if(g.a.isBlink&&!e.isReadOnly&&!r&&!o.selection.isCollapsed){const e=o.selection.getSelectedElement();e&&Object(f.e)(e)||(r=o.selection.editableElement)}r&&(t.change(e=>{e.setAttribute("draggable","true",r)}),this._draggableElement=e.editing.mapper.toModelElement(r))}),this.listenTo(o,"mouseup",()=>{g.a.isAndroid||this._clearDraggableAttributesDelayed()})}_clearDraggableAttributes(){const e=this.editor.editing;e.view.change(t=>{this._draggableElement&&"$graveyard"!=this._draggableElement.root.rootName&&t.removeAttribute("draggable",e.mapper.toViewElement(this._draggableElement)),this._draggableElement=null})}_setupDropMarker(){const e=this.editor;e.conversion.for("editingDowncast").markerToHighlight({model:"drop-target",view:{classes:["ck-clipboard-drop-target-range"]}}),e.conversion.for("editingDowncast").markerToElement({model:"drop-target",view:(t,{writer:o})=>{if(e.model.schema.checkChild(t.markerRange.start,"$text"))return o.createUIElement("span",{class:"ck ck-clipboard-drop-target-position"},(function(e){const t=this.toDomElement(e);return t.innerHTML="&NoBreak;<span></span>&NoBreak;",t}))}})}_updateDropMarker(e){const t=this.editor,o=t.model.markers;t.model.change(t=>{o.has("drop-target")?o.get("drop-target").getRange().isEqual(e)||t.updateMarker("drop-target",{range:e}):t.addMarker("drop-target",{range:e,usingOperation:!1,affectsData:!1})})}_removeDropMarker(){const e=this.editor.model;this._removeDropMarkerDelayed.cancel(),this._updateDropMarkerThrottled.cancel(),e.markers.has("drop-target")&&e.change(e=>{e.removeMarker("drop-target")})}_finalizeDragging(e){const t=this.editor,o=t.model;this._removeDropMarker(),this._clearDraggableAttributes(),t.plugins.has("WidgetToolbarRepository")&&t.plugins.get("WidgetToolbarRepository").clearForceDisabled("dragDrop"),this._draggingUid="",this._draggedRange&&(e&&this.isEnabled&&o.deleteContent(o.createSelection(this._draggedRange),{doNotAutoparagraph:!0}),this._draggedRange.detach(),this._draggedRange=null)}}function b(e,t,o){const i=e.model,s=e.editing.mapper;let r=null;const n=t?t[0].start:null;if(o.is("uiElement")&&(o=o.parent),r=function(e,t){const o=e.model,i=e.editing.mapper;if(Object(f.e)(t))return o.createRangeOn(i.toModelElement(t));if(!t.is("editableElement")){const e=t.findAncestor(e=>Object(f.e)(e)||e.is("editableElement"));if(Object(f.e)(e))return o.createRangeOn(i.toModelElement(e))}return null}(e,o),r)return r;const a=function(e,t){const o=e.editing.mapper,i=e.editing.view,s=o.toModelElement(t);if(s)return s;const r=i.createPositionBefore(t),n=o.findMappedViewAncestor(r);return o.toModelElement(n)}(e,o),c=n?s.toModelPosition(n):null;return c?(r=function(e,t,o){const i=e.model;if(!i.schema.checkChild(o,"$block"))return null;const s=i.createPositionAt(o,0),r=t.path.slice(0,s.path.length),n=i.createPositionFromPath(t.root,r).nodeAfter;if(n&&i.schema.isObject(n))return i.createRangeOn(n);return null}(e,c,a),r||(r=i.schema.getNearestSelectionRange(c,g.a.isGecko?"forward":"backward"),r||function(e,t){const o=e.model;for(;t;){if(o.schema.isObject(t))return o.createRangeOn(t);t=t.parent}}(e,c.parent))):function(e,t){const o=e.model,i=o.schema,s=o.createPositionAt(t,0);return i.getNearestSelectionRange(s,"forward")}(e,a)}function _(e){return g.a.isGecko?e.dropEffect:["all","copyMove"].includes(e.effectAllowed)?"move":"copy"}function w(e,t){let o;function i(...s){i.cancel(),o=setTimeout(()=>e(...s),t)}return i.cancel=()=>{clearTimeout(o)},i}function v(e){if(e.is("editableElement"))return null;if(e.hasClass("ck-widget__selection-handle"))return e.findAncestor(f.e);if(Object(f.e)(e))return e;const t=e.findAncestor(e=>Object(f.e)(e)||e.is("editableElement"));return Object(f.e)(t)?t:null}class y extends i.a{static get pluginName(){return"PastePlainText"}static get requires(){return[l]}init(){const e=this.editor,t=e.model,o=e.editing.view,i=o.document,s=t.document.selection;let r=!1;o.addObserver(a),this.listenTo(i,"keydown",(e,t)=>{r=t.shiftKey}),e.plugins.get(l).on("contentInsertion",(e,o)=>{(r||function(e,t){if(e.childCount>1)return!1;const o=e.getChild(0);if(t.isObject(o))return!1;return 0==[...o.getAttributeKeys()].length}(o.content,t.schema))&&t.change(e=>{const i=Array.from(s.getAttributes()).filter(([e])=>t.schema.getAttributeProperties(e).isFormatting);s.isCollapsed||t.deleteContent(s,{doNotAutoparagraph:!0}),i.push(...s.getAttributes());const r=e.createRangeIn(o.content);for(const t of r.getItems())t.is("$textProxy")&&e.setAttributes(i,t)})})}}class j extends i.a{static get pluginName(){return"Clipboard"}static get requires(){return[l,k,y]}}},"./src/core.js":function(e,t,o){"use strict";o.r(t),o.d(t,"Plugin",(function(){return i.a})),o.d(t,"Command",(function(){return s.a})),o.d(t,"MultiCommand",(function(){return r})),o.d(t,"Context",(function(){return b})),o.d(t,"ContextPlugin",(function(){return _.a})),o.d(t,"Editor",(function(){return C})),o.d(t,"EditorUI",(function(){return M})),o.d(t,"attachToForm",(function(){return I})),o.d(t,"DataApiMixin",(function(){return z})),o.d(t,"ElementApiMixin",(function(){return D})),o.d(t,"secureSourceElement",(function(){return B})),o.d(t,"PendingActions",(function(){return F.a})),o.d(t,"icons",(function(){return H}));var i=o("./packages/ckeditor5-core/src/plugin.js"),s=o("./packages/ckeditor5-core/src/command.js");class r extends s.a{constructor(e){super(e),this._childCommands=[]}refresh(){}execute(...e){const t=this._getFirstEnabledCommand();return null!=t&&t.execute(e)}registerChildCommand(e){this._childCommands.push(e),e.on("change:isEnabled",()=>this._checkEnabled()),this._checkEnabled()}_checkEnabled(){this.isEnabled=!!this._getFirstEnabledCommand()}_getFirstEnabledCommand(){return this._childCommands.find(e=>e.isEnabled)}}var n=o("./node_modules/lodash-es/isPlainObject.js"),a=o("./node_modules/lodash-es/cloneDeepWith.js"),c=o("./node_modules/lodash-es/isElement.js");class l{constructor(e,t){this._config={},t&&this.define(d(t)),e&&this._setObjectToTarget(this._config,e)}set(e,t){this._setToTarget(this._config,e,t)}define(e,t){this._setToTarget(this._config,e,t,!0)}get(e){return this._getFromSource(this._config,e)}*names(){for(const e of Object.keys(this._config))yield e}_setToTarget(e,t,o,i=!1){if(Object(n.a)(t))return void this._setObjectToTarget(e,t,i);const s=t.split(".");t=s.pop();for(const t of s)Object(n.a)(e[t])||(e[t]={}),e=e[t];if(Object(n.a)(o))return Object(n.a)(e[t])||(e[t]={}),e=e[t],void this._setObjectToTarget(e,o,i);i&&void 0!==e[t]||(e[t]=o)}_getFromSource(e,t){const o=t.split(".");t=o.pop();for(const t of o){if(!Object(n.a)(e[t])){e=null;break}e=e[t]}return e?d(e[t]):void 0}_setObjectToTarget(e,t,o){Object.keys(t).forEach(i=>{this._setToTarget(e,i,t[i],o)})}}function d(e){return Object(a.a)(e,u)}function u(e){return Object(c.a)(e)?e:void 0}var h=o("./packages/ckeditor5-utils/src/collection.js"),p=o("./packages/ckeditor5-utils/src/ckeditorerror.js"),g=o("./packages/ckeditor5-utils/src/emittermixin.js"),f=o("./packages/ckeditor5-utils/src/mix.js");class m{constructor(e,t=[],o=[]){this._context=e,this._plugins=new Map,this._availablePlugins=new Map;for(const e of t)e.pluginName&&this._availablePlugins.set(e.pluginName,e);this._contextPlugins=new Map;for(const[e,t]of o)this._contextPlugins.set(e,t),this._contextPlugins.set(t,e),e.pluginName&&this._availablePlugins.set(e.pluginName,e)}*[Symbol.iterator](){for(const e of this._plugins)"function"==typeof e[0]&&(yield e)}get(e){const t=this._plugins.get(e);if(!t){let t=e;throw"function"==typeof e&&(t=e.pluginName||e.name),new p.a("plugincollection-plugin-not-loaded",this._context,{plugin:t})}return t}has(e){return this._plugins.has(e)}init(e,t=[],o=[]){const i=this,s=this._context;!function e(t,o=new Set){t.forEach(t=>{a(t)&&(o.has(t)||(o.add(t),t.pluginName&&!i._availablePlugins.has(t.pluginName)&&i._availablePlugins.set(t.pluginName,t),t.requires&&e(t.requires,o)))})}(e),u(e);const r=[...function e(t,o=new Set){return t.map(e=>a(e)?e:i._availablePlugins.get(e)).reduce((t,i)=>o.has(i)?t:(o.add(i),i.requires&&(u(i.requires,i),e(i.requires,o).forEach(e=>t.add(e))),t.add(i)),new Set)}(e.filter(e=>!l(e,t)))];!function(e,t){for(const o of t){if("function"!=typeof o)throw new p.a("plugincollection-replace-plugin-invalid-type",null,{pluginItem:o});const t=o.pluginName;if(!t)throw new p.a("plugincollection-replace-plugin-missing-name",null,{pluginItem:o});if(o.requires&&o.requires.length)throw new p.a("plugincollection-plugin-for-replacing-cannot-have-dependencies",null,{pluginName:t});const s=i._availablePlugins.get(t);if(!s)throw new p.a("plugincollection-plugin-for-replacing-not-exist",null,{pluginName:t});const r=e.indexOf(s);if(-1===r){if(i._contextPlugins.has(s))return;throw new p.a("plugincollection-plugin-for-replacing-not-loaded",null,{pluginName:t})}if(s.requires&&s.requires.length)throw new p.a("plugincollection-replaced-plugin-cannot-have-dependencies",null,{pluginName:t});e.splice(r,1,o),i._availablePlugins.set(t,o)}}(r,o);const n=function(e){return e.map(e=>{const t=i._contextPlugins.get(e)||new e(s);return i._add(e,t),t})}(r);return h(n,"init").then(()=>h(n,"afterInit")).then(()=>n);function a(e){return"function"==typeof e}function c(e){return a(e)&&e.isContextPlugin}function l(e,t){return t.some(t=>t===e||(d(e)===t||d(t)===e))}function d(e){return a(e)?e.pluginName||e.name:e}function u(e,o=null){e.map(e=>a(e)?e:i._availablePlugins.get(e)||e).forEach(e=>{!function(e,t){if(a(e))return;if(t)throw new p.a("plugincollection-soft-required",s,{missingPlugin:e,requiredBy:d(t)});throw new p.a("plugincollection-plugin-not-found",s,{plugin:e})}(e,o),function(e,t){if(!c(t))return;if(c(e))return;throw new p.a("plugincollection-context-required",s,{plugin:d(e),requiredBy:d(t)})}(e,o),function(e,o){if(!o)return;if(!l(e,t))return;throw new p.a("plugincollection-required",s,{plugin:d(e),requiredBy:d(o)})}(e,o)})}function h(e,t){return e.reduce((e,o)=>o[t]?i._contextPlugins.has(o)?e:e.then(o[t].bind(o)):e,Promise.resolve())}}destroy(){const e=[];for(const[,t]of this)"function"!=typeof t.destroy||this._contextPlugins.has(t)||e.push(t.destroy());return Promise.all(e)}_add(e,t){this._plugins.set(e,t);const o=e.pluginName;if(o){if(this._plugins.has(o))throw new p.a("plugincollection-plugin-name-conflict",null,{pluginName:o,plugin1:this._plugins.get(o).constructor,plugin2:e});this._plugins.set(o,t)}}}Object(f.a)(m,g.c);var k=o("./packages/ckeditor5-utils/src/locale.js");class b{constructor(e){this.config=new l(e,this.constructor.defaultConfig);const t=this.constructor.builtinPlugins;this.config.define("plugins",t),this.plugins=new m(this,t);const o=this.config.get("language")||{};this.locale=new k.a({uiLanguage:"string"==typeof o?o:o.ui,contentLanguage:this.config.get("language.content")}),this.t=this.locale.t,this.editors=new h.a,this._contextOwner=null}initPlugins(){const e=this.config.get("plugins")||[],t=this.config.get("substitutePlugins")||[];for(const o of e.concat(t)){if("function"!=typeof o)throw new p.a("context-initplugins-constructor-only",null,{Plugin:o});if(!0!==o.isContextPlugin)throw new p.a("context-initplugins-invalid-plugin",null,{Plugin:o})}return this.plugins.init(e,[],t)}destroy(){return Promise.all(Array.from(this.editors,e=>e.destroy())).then(()=>this.plugins.destroy())}_addEditor(e,t){if(this._contextOwner)throw new p.a("context-addeditor-private-context");this.editors.add(e),t&&(this._contextOwner=e)}_removeEditor(e){return this.editors.has(e)&&this.editors.remove(e),this._contextOwner===e?this.destroy():Promise.resolve()}_getEditorConfig(){const e={};for(const t of this.config.names())["plugins","removePlugins","extraPlugins"].includes(t)||(e[t]=this.config.get(t));return e}static create(e){return new Promise(t=>{const o=new this(e);t(o.initPlugins().then(()=>o))})}}var _=o("./packages/ckeditor5-core/src/contextplugin.js"),w=o("./packages/ckeditor5-engine/src/controller/editingcontroller.js");class v{constructor(){this._commands=new Map}add(e,t){this._commands.set(e,t)}get(e){return this._commands.get(e)}execute(e,...t){const o=this.get(e);if(!o)throw new p.a("commandcollection-command-not-found",this,{commandName:e});return o.execute(...t)}*names(){yield*this._commands.keys()}*commands(){yield*this._commands.values()}[Symbol.iterator](){return this._commands[Symbol.iterator]()}destroy(){for(const e of this.commands())e.destroy()}}var y=o("./packages/ckeditor5-engine/src/controller/datacontroller.js"),j=o("./packages/ckeditor5-engine/src/conversion/conversion.js"),x=o("./packages/ckeditor5-engine/src/model/model.js"),P=o("./packages/ckeditor5-utils/src/keystrokehandler.js");class O extends P.a{constructor(e){super(),this.editor=e}set(e,t,o={}){if("string"==typeof t){const e=t;t=(t,o)=>{this.editor.execute(e),o()}}super.set(e,t,o)}}var A=o("./packages/ckeditor5-utils/src/observablemixin.js"),T=o("./packages/ckeditor5-engine/src/view/stylesmap.js");class C{constructor(e={}){this._context=e.context||new b({language:e.language}),this._context._addEditor(this,!e.context);const t=Array.from(this.constructor.builtinPlugins||[]);this.config=new l(e,this.constructor.defaultConfig),this.config.define("plugins",t),this.config.define(this._context._getEditorConfig()),this.plugins=new m(this,t,this._context.plugins),this.locale=this._context.locale,this.t=this.locale.t,this.commands=new v,this.set("state","initializing"),this.once("ready",()=>this.state="ready",{priority:"high"}),this.once("destroy",()=>this.state="destroyed",{priority:"high"}),this.set("isReadOnly",!1),this.model=new x.a;const o=new T.a;this.data=new y.a(this.model,o),this.editing=new w.a(this.model,o),this.editing.view.document.bind("isReadOnly").to(this),this.conversion=new j.a([this.editing.downcastDispatcher,this.data.downcastDispatcher],this.data.upcastDispatcher),this.conversion.addAlias("dataDowncast",this.data.downcastDispatcher),this.conversion.addAlias("editingDowncast",this.editing.downcastDispatcher),this.keystrokes=new O(this),this.keystrokes.listenTo(this.editing.view.document)}initPlugins(){const e=this.config,t=e.get("plugins"),o=e.get("removePlugins")||[],i=e.get("extraPlugins")||[],s=e.get("substitutePlugins")||[];return this.plugins.init(t.concat(i),o,s)}destroy(){let e=Promise.resolve();return"initializing"==this.state&&(e=new Promise(e=>this.once("ready",e))),e.then(()=>{this.fire("destroy"),this.stopListening(),this.commands.destroy()}).then(()=>this.plugins.destroy()).then(()=>{this.model.destroy(),this.data.destroy(),this.editing.destroy(),this.keystrokes.destroy()}).then(()=>this._context._removeEditor(this))}execute(...e){try{return this.commands.execute(...e)}catch(e){p.a.rethrowUnexpectedError(e,this)}}focus(){this.editing.view.focus()}}Object(f.a)(C,A.a);class E{constructor(e){this.editor=e,this._components=new Map}*names(){for(const e of this._components.values())yield e.originalName}add(e,t){this._components.set(S(e),{callback:t,originalName:e})}create(e){if(!this.has(e))throw new p.a("componentfactory-item-missing",this,{name:e});return this._components.get(S(e)).callback(this.editor.locale)}has(e){return this._components.has(S(e))}}function S(e){return String(e).toLowerCase()}var R=o("./packages/ckeditor5-utils/src/focustracker.js");class M{constructor(e){this.editor=e,this.componentFactory=new E(e),this.focusTracker=new R.a,this.set("viewportOffset",this._readViewportOffsetFromConfig()),this._editableElementsMap=new Map,this.listenTo(e.editing.view.document,"layoutChanged",()=>this.update())}get element(){return null}update(){this.fire("update")}destroy(){this.stopListening(),this.focusTracker.destroy();for(const e of this._editableElementsMap.values())e.ckeditorInstance=null;this._editableElementsMap=new Map}setEditableElement(e,t){this._editableElementsMap.set(e,t),t.ckeditorInstance||(t.ckeditorInstance=this.editor)}getEditableElement(e="main"){return this._editableElementsMap.get(e)}getEditableElementsNames(){return this._editableElementsMap.keys()}get _editableElements(){return console.warn("editor-ui-deprecated-editable-elements: The EditorUI#_editableElements property has been deprecated and will be removed in the near future.",{editorUI:this}),this._editableElementsMap}_readViewportOffsetFromConfig(){const e=this.editor,t=e.config.get("ui.viewportOffset");if(t)return t;const o=e.config.get("toolbar.viewportTopOffset");return o?(console.warn("editor-ui-deprecated-viewport-offset-config: The `toolbar.vieportTopOffset` configuration option is deprecated. It will be removed from future CKEditor versions. Use `ui.viewportOffset.top` instead."),{top:o}):{top:0}}}Object(f.a)(M,A.a);var N=o("./node_modules/lodash-es/isFunction.js");function I(e){if(!Object(N.a)(e.updateSourceElement))throw new p.a("attachtoform-missing-elementapi-interface",e);const t=e.sourceElement;if(t&&"textarea"===t.tagName.toLowerCase()&&t.form){let o;const i=t.form,s=()=>e.updateSourceElement();Object(N.a)(i.submit)&&(o=i.submit,i.submit=()=>{s(),o.apply(i)}),i.addEventListener("submit",s),e.on("destroy",()=>{i.removeEventListener("submit",s),o&&(i.submit=o)})}}var z={setData(e){this.data.set(e)},getData(e){return this.data.get(e)}},V=o("./packages/ckeditor5-utils/src/dom/setdatainelement.js");var D={updateSourceElement(){if(!this.sourceElement)throw new p.a("editor-missing-sourceelement",this);Object(V.a)(this.sourceElement,this.data.get())}};function B(e){const t=e.sourceElement;if(t){if(t.ckeditorInstance)throw new p.a("editor-source-element-already-used",e);t.ckeditorInstance=e,e.once("destroy",()=>{delete t.ckeditorInstance})}}var F=o("./packages/ckeditor5-core/src/pendingactions.js"),L=o("./packages/ckeditor5-core/theme/icons/pilcrow.svg"),W=o("./packages/ckeditor5-core/theme/icons/three-vertical-dots.svg");const H={cancel:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="m11.591 10.177 4.243 4.242a1 1 0 0 1-1.415 1.415l-4.242-4.243-4.243 4.243a1 1 0 0 1-1.414-1.415l4.243-4.242L4.52 5.934A1 1 0 0 1 5.934 4.52l4.243 4.243 4.242-4.243a1 1 0 1 1 1.415 1.414l-4.243 4.243z"/></svg>',caption:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M2 16h9a1 1 0 0 1 0 2H2a1 1 0 0 1 0-2z"/><path d="M17 1a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h14zm0 1.5H3a.5.5 0 0 0-.492.41L2.5 3v9a.5.5 0 0 0 .41.492L3 12.5h14a.5.5 0 0 0 .492-.41L17.5 12V3a.5.5 0 0 0-.41-.492L17 2.5z" fill-opacity=".6"/></svg>',check:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M6.972 16.615a.997.997 0 0 1-.744-.292l-4.596-4.596a1 1 0 1 1 1.414-1.414l3.926 3.926 9.937-9.937a1 1 0 0 1 1.414 1.415L7.717 16.323a.997.997 0 0 1-.745.292z"/></svg>',cog:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="m11.333 2 .19 2.263a5.899 5.899 0 0 1 1.458.604L14.714 3.4 16.6 5.286l-1.467 1.733c.263.452.468.942.605 1.46L18 8.666v2.666l-2.263.19a5.899 5.899 0 0 1-.604 1.458l1.467 1.733-1.886 1.886-1.733-1.467a5.899 5.899 0 0 1-1.46.605L11.334 18H8.667l-.19-2.263a5.899 5.899 0 0 1-1.458-.604L5.286 16.6 3.4 14.714l1.467-1.733a5.899 5.899 0 0 1-.604-1.458L2 11.333V8.667l2.262-.189a5.899 5.899 0 0 1 .605-1.459L3.4 5.286 5.286 3.4l1.733 1.467a5.899 5.899 0 0 1 1.46-.605L8.666 2h2.666zM10 6.267a3.733 3.733 0 1 0 0 7.466 3.733 3.733 0 0 0 0-7.466z"/></svg>',eraser:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="m8.636 9.531-2.758 3.94a.5.5 0 0 0 .122.696l3.224 2.284h1.314l2.636-3.736L8.636 9.53zm.288 8.451L5.14 15.396a2 2 0 0 1-.491-2.786l6.673-9.53a2 2 0 0 1 2.785-.49l3.742 2.62a2 2 0 0 1 .491 2.785l-7.269 10.053-2.147-.066z"/><path d="M4 18h5.523v-1H4zm-2 0h1v-1H2z"/></svg>',lowVision:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M5.085 6.22 2.943 4.078a.75.75 0 1 1 1.06-1.06l2.592 2.59A11.094 11.094 0 0 1 10 5.068c4.738 0 8.578 3.101 8.578 5.083 0 1.197-1.401 2.803-3.555 3.887l1.714 1.713a.75.75 0 0 1-.09 1.138.488.488 0 0 1-.15.084.75.75 0 0 1-.821-.16L6.17 7.304c-.258.11-.51.233-.757.365l6.239 6.24-.006.005.78.78c-.388.094-.78.166-1.174.215l-1.11-1.11h.011L4.55 8.197a7.2 7.2 0 0 0-.665.514l-.112.098 4.897 4.897-.005.006 1.276 1.276a10.164 10.164 0 0 1-1.477-.117l-.479-.479-.009.009-4.863-4.863-.022.031a2.563 2.563 0 0 0-.124.2c-.043.077-.08.158-.108.241a.534.534 0 0 0-.028.133.29.29 0 0 0 .008.072.927.927 0 0 0 .082.226c.067.133.145.26.234.379l3.242 3.365.025.01.59.623c-3.265-.918-5.59-3.155-5.59-4.668 0-1.194 1.448-2.838 3.663-3.93zm7.07.531a4.632 4.632 0 0 1 1.108 5.992l.345.344.046-.018a9.313 9.313 0 0 0 2-1.112c.256-.187.5-.392.727-.613.137-.134.27-.277.392-.431.072-.091.141-.185.203-.286.057-.093.107-.19.148-.292a.72.72 0 0 0 .036-.12.29.29 0 0 0 .008-.072.492.492 0 0 0-.028-.133.999.999 0 0 0-.036-.096 2.165 2.165 0 0 0-.071-.145 2.917 2.917 0 0 0-.125-.2 3.592 3.592 0 0 0-.263-.335 5.444 5.444 0 0 0-.53-.523 7.955 7.955 0 0 0-1.054-.768 9.766 9.766 0 0 0-1.879-.891c-.337-.118-.68-.219-1.027-.301zm-2.85.21-.069.002a.508.508 0 0 0-.254.097.496.496 0 0 0-.104.679.498.498 0 0 0 .326.199l.045.005c.091.003.181.003.272.012a2.45 2.45 0 0 1 2.017 1.513c.024.061.043.125.069.185a.494.494 0 0 0 .45.287h.008a.496.496 0 0 0 .35-.158.482.482 0 0 0 .13-.335.638.638 0 0 0-.048-.219 3.379 3.379 0 0 0-.36-.723 3.438 3.438 0 0 0-2.791-1.543l-.028-.001h-.013z"/></svg>',image:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M6.91 10.54c.26-.23.64-.21.88.03l3.36 3.14 2.23-2.06a.64.64 0 0 1 .87 0l2.52 2.97V4.5H3.2v10.12l3.71-4.08zm10.27-7.51c.6 0 1.09.47 1.09 1.05v11.84c0 .59-.49 1.06-1.09 1.06H2.79c-.6 0-1.09-.47-1.09-1.06V4.08c0-.58.49-1.05 1.1-1.05h14.38zm-5.22 5.56a1.96 1.96 0 1 1 3.4-1.96 1.96 1.96 0 0 1-3.4 1.96z"/></svg>',alignBottom:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="m9.239 13.938-2.88-1.663a.75.75 0 0 1 .75-1.3L9 12.067V4.75a.75.75 0 1 1 1.5 0v7.318l1.89-1.093a.75.75 0 0 1 .75 1.3l-2.879 1.663a.752.752 0 0 1-.511.187.752.752 0 0 1-.511-.187zM4.25 17a.75.75 0 1 1 0-1.5h10.5a.75.75 0 0 1 0 1.5H4.25z"/></svg>',alignMiddle:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M9.75 11.875a.752.752 0 0 1 .508.184l2.883 1.666a.75.75 0 0 1-.659 1.344l-.091-.044-1.892-1.093.001 4.318a.75.75 0 1 1-1.5 0v-4.317l-1.89 1.092a.75.75 0 0 1-.75-1.3l2.879-1.663a.752.752 0 0 1 .51-.187zM15.25 9a.75.75 0 1 1 0 1.5H4.75a.75.75 0 1 1 0-1.5h10.5zM9.75.375a.75.75 0 0 1 .75.75v4.318l1.89-1.093.092-.045a.75.75 0 0 1 .659 1.344l-2.883 1.667a.752.752 0 0 1-.508.184.752.752 0 0 1-.511-.187L6.359 5.65a.75.75 0 0 1 .75-1.299L9 5.442V1.125a.75.75 0 0 1 .75-.75z"/></svg>',alignTop:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="m10.261 7.062 2.88 1.663a.75.75 0 0 1-.75 1.3L10.5 8.933v7.317a.75.75 0 1 1-1.5 0V8.932l-1.89 1.093a.75.75 0 0 1-.75-1.3l2.879-1.663a.752.752 0 0 1 .511-.187.752.752 0 0 1 .511.187zM15.25 4a.75.75 0 1 1 0 1.5H4.75a.75.75 0 0 1 0-1.5h10.5z"/></svg>',alignLeft:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M2 3.75c0 .414.336.75.75.75h14.5a.75.75 0 1 0 0-1.5H2.75a.75.75 0 0 0-.75.75zm0 8c0 .414.336.75.75.75h14.5a.75.75 0 1 0 0-1.5H2.75a.75.75 0 0 0-.75.75zm0 4c0 .414.336.75.75.75h9.929a.75.75 0 1 0 0-1.5H2.75a.75.75 0 0 0-.75.75zm0-8c0 .414.336.75.75.75h9.929a.75.75 0 1 0 0-1.5H2.75a.75.75 0 0 0-.75.75z"/></svg>',alignCenter:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M2 3.75c0 .414.336.75.75.75h14.5a.75.75 0 1 0 0-1.5H2.75a.75.75 0 0 0-.75.75zm0 8c0 .414.336.75.75.75h14.5a.75.75 0 1 0 0-1.5H2.75a.75.75 0 0 0-.75.75zm2.286 4c0 .414.336.75.75.75h9.928a.75.75 0 1 0 0-1.5H5.036a.75.75 0 0 0-.75.75zm0-8c0 .414.336.75.75.75h9.928a.75.75 0 1 0 0-1.5H5.036a.75.75 0 0 0-.75.75z"/></svg>',alignRight:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M18 3.75a.75.75 0 0 1-.75.75H2.75a.75.75 0 1 1 0-1.5h14.5a.75.75 0 0 1 .75.75zm0 8a.75.75 0 0 1-.75.75H2.75a.75.75 0 1 1 0-1.5h14.5a.75.75 0 0 1 .75.75zm0 4a.75.75 0 0 1-.75.75H7.321a.75.75 0 1 1 0-1.5h9.929a.75.75 0 0 1 .75.75zm0-8a.75.75 0 0 1-.75.75H7.321a.75.75 0 1 1 0-1.5h9.929a.75.75 0 0 1 .75.75z"/></svg>',alignJustify:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M2 3.75c0 .414.336.75.75.75h14.5a.75.75 0 1 0 0-1.5H2.75a.75.75 0 0 0-.75.75zm0 8c0 .414.336.75.75.75h14.5a.75.75 0 1 0 0-1.5H2.75a.75.75 0 0 0-.75.75zm0 4c0 .414.336.75.75.75h9.929a.75.75 0 1 0 0-1.5H2.75a.75.75 0 0 0-.75.75zm0-8c0 .414.336.75.75.75h14.5a.75.75 0 1 0 0-1.5H2.75a.75.75 0 0 0-.75.75z"/></svg>',objectLeft:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path opacity=".5" d="M2 3h16v1.5H2zm11.5 9H18v1.5h-4.5zm0-3H18v1.5h-4.5zm0-3H18v1.5h-4.5zM2 15h16v1.5H2z"/><path d="M12.003 7v5.5a1 1 0 0 1-1 1H2.996a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h8.007a1 1 0 0 1 1 1zm-1.506.5H3.5V12h6.997V7.5z"/></svg>',objectCenter:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path opacity=".5" d="M2 3h16v1.5H2zm0 12h16v1.5H2z"/><path d="M15.003 7v5.5a1 1 0 0 1-1 1H5.996a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h8.007a1 1 0 0 1 1 1zm-1.506.5H6.5V12h6.997V7.5z"/></svg>',objectRight:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path opacity=".5" d="M2 3h16v1.5H2zm0 12h16v1.5H2zm0-9h5v1.5H2zm0 3h5v1.5H2zm0 3h5v1.5H2z"/><path d="M18.003 7v5.5a1 1 0 0 1-1 1H8.996a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h8.007a1 1 0 0 1 1 1zm-1.506.5H9.5V12h6.997V7.5z"/></svg>',objectFullWidth:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path opacity=".5" d="M2 3h16v1.5H2zm0 12h16v1.5H2z"/><path d="M18 7v5.5a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1zm-1.505.5H3.504V12h12.991V7.5z"/></svg>',objectInline:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path opacity=".5" d="M2 3h16v1.5H2zm11.5 9H18v1.5h-4.5zM2 15h16v1.5H2z"/><path d="M12.003 7v5.5a1 1 0 0 1-1 1H2.996a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h8.007a1 1 0 0 1 1 1zm-1.506.5H3.5V12h6.997V7.5z"/></svg>',objectBlockLeft:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path opacity=".5" d="M2 3h16v1.5H2zm0 12h16v1.5H2z"/><path d="M12.003 7v5.5a1 1 0 0 1-1 1H2.996a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h8.007a1 1 0 0 1 1 1zm-1.506.5H3.5V12h6.997V7.5z"/></svg>',objectBlockRight:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path opacity=".5" d="M2 3h16v1.5H2zm0 12h16v1.5H2z"/><path d="M18.003 7v5.5a1 1 0 0 1-1 1H8.996a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h8.007a1 1 0 0 1 1 1zm-1.506.5H9.5V12h6.997V7.5z"/></svg>',objectSizeFull:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M2.5 17v1h-1v-1h1zm2 0v1h-1v-1h1zm2 0v1h-1v-1h1zm2 0v1h-1v-1h1zm2 0v1h-1v-1h1zm2 0v1h-1v-1h1zm2 0v1h-1v-1h1zm2 0v1h-1v-1h1zm2 0v1h-1v-1h1zM1 15.5v1H0v-1h1zm19 0v1h-1v-1h1zm-19-2v1H0v-1h1zm19 0v1h-1v-1h1zm-19-2v1H0v-1h1zm19 0v1h-1v-1h1zm-19-2v1H0v-1h1zm19 0v1h-1v-1h1zm-19-2v1H0v-1h1zm19 0v1h-1v-1h1zm-19-2v1H0v-1h1zm19 0v1h-1v-1h1zm0-2v1h-1v-1h1zm-19 0v1H0v-1h1zM14.5 2v1h-1V2h1zm2 0v1h-1V2h1zm2 0v1h-1V2h1zm-8 0v1h-1V2h1zm-2 0v1h-1V2h1zm-2 0v1h-1V2h1zm-2 0v1h-1V2h1zm8 0v1h-1V2h1zm-10 0v1h-1V2h1z"/><path d="M18.095 2H1.905C.853 2 0 2.895 0 4v12c0 1.105.853 2 1.905 2h16.19C19.147 18 20 17.105 20 16V4c0-1.105-.853-2-1.905-2zm0 1.5c.263 0 .476.224.476.5v12c0 .276-.213.5-.476.5H1.905a.489.489 0 0 1-.476-.5V4c0-.276.213-.5.476-.5h16.19z"/></svg>',objectSizeLarge:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M2.5 17v1h-1v-1h1zm2 0v1h-1v-1h1zm2 0v1h-1v-1h1zm2 0v1h-1v-1h1zm2 0v1h-1v-1h1zm2 0v1h-1v-1h1zm2 0v1h-1v-1h1zm2 0v1h-1v-1h1zm2 0v1h-1v-1h1zM1 15.5v1H0v-1h1zm19 0v1h-1v-1h1zm-19-2v1H0v-1h1zm19 0v1h-1v-1h1zm-19-2v1H0v-1h1zm19 0v1h-1v-1h1zm-19-2v1H0v-1h1zm19 0v1h-1v-1h1zm-19-2v1H0v-1h1zm19 0v1h-1v-1h1zm-19-2v1H0v-1h1zm19 0v1h-1v-1h1zm0-2v1h-1v-1h1zm-19 0v1H0v-1h1zM14.5 2v1h-1V2h1zm2 0v1h-1V2h1zm2 0v1h-1V2h1zm-8 0v1h-1V2h1zm-2 0v1h-1V2h1zm-2 0v1h-1V2h1zm-2 0v1h-1V2h1zm8 0v1h-1V2h1zm-10 0v1h-1V2h1z"/><path d="M13 6H2a2 2 0 0 0-2 2v8a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2zm0 1.5a.5.5 0 0 1 .5.5v8a.5.5 0 0 1-.5.5H2a.5.5 0 0 1-.5-.5V8a.5.5 0 0 1 .5-.5h11z"/></svg>',objectSizeSmall:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M2.5 17v1h-1v-1h1zm2 0v1h-1v-1h1zm2 0v1h-1v-1h1zm2 0v1h-1v-1h1zm2 0v1h-1v-1h1zm2 0v1h-1v-1h1zm2 0v1h-1v-1h1zm2 0v1h-1v-1h1zm2 0v1h-1v-1h1zM1 15.5v1H0v-1h1zm19 0v1h-1v-1h1zm-19-2v1H0v-1h1zm19 0v1h-1v-1h1zm-19-2v1H0v-1h1zm19 0v1h-1v-1h1zm-19-2v1H0v-1h1zm19 0v1h-1v-1h1zm-19-2v1H0v-1h1zm19 0v1h-1v-1h1zm-19-2v1H0v-1h1zm19 0v1h-1v-1h1zm0-2v1h-1v-1h1zm-19 0v1H0v-1h1zM14.5 2v1h-1V2h1zm2 0v1h-1V2h1zm2 0v1h-1V2h1zm-8 0v1h-1V2h1zm-2 0v1h-1V2h1zm-2 0v1h-1V2h1zm-2 0v1h-1V2h1zm8 0v1h-1V2h1zm-10 0v1h-1V2h1z"/><path d="M7 10H2a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h5a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2zm0 1.5a.5.5 0 0 1 .5.5v4a.5.5 0 0 1-.5.5H2a.5.5 0 0 1-.5-.5v-4a.5.5 0 0 1 .5-.5h5z"/></svg>',objectSizeMedium:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M2.5 17v1h-1v-1h1zm2 0v1h-1v-1h1zm2 0v1h-1v-1h1zm2 0v1h-1v-1h1zm2 0v1h-1v-1h1zm2 0v1h-1v-1h1zm2 0v1h-1v-1h1zm2 0v1h-1v-1h1zm2 0v1h-1v-1h1zM1 15.5v1H0v-1h1zm19 0v1h-1v-1h1zm-19-2v1H0v-1h1zm19 0v1h-1v-1h1zm-19-2v1H0v-1h1zm19 0v1h-1v-1h1zm-19-2v1H0v-1h1zm19 0v1h-1v-1h1zm-19-2v1H0v-1h1zm19 0v1h-1v-1h1zm-19-2v1H0v-1h1zm19 0v1h-1v-1h1zm0-2v1h-1v-1h1zm-19 0v1H0v-1h1zM14.5 2v1h-1V2h1zm2 0v1h-1V2h1zm2 0v1h-1V2h1zm-8 0v1h-1V2h1zm-2 0v1h-1V2h1zm-2 0v1h-1V2h1zm-2 0v1h-1V2h1zm8 0v1h-1V2h1zm-10 0v1h-1V2h1z"/><path d="M10 8H2a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2v-6a2 2 0 0 0-2-2zm0 1.5a.5.5 0 0 1 .5.5v6a.5.5 0 0 1-.5.5H2a.5.5 0 0 1-.5-.5v-6a.5.5 0 0 1 .5-.5h8z"/></svg>',pencil:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="m7.3 17.37-.061.088a1.518 1.518 0 0 1-.934.535l-4.178.663-.806-4.153a1.495 1.495 0 0 1 .187-1.058l.056-.086L8.77 2.639c.958-1.351 2.803-1.076 4.296-.03 1.497 1.047 2.387 2.693 1.433 4.055L7.3 17.37zM9.14 4.728l-5.545 8.346 3.277 2.294 5.544-8.346L9.14 4.728zM6.07 16.512l-3.276-2.295.53 2.73 2.746-.435zM9.994 3.506 13.271 5.8c.316-.452-.16-1.333-1.065-1.966-.905-.634-1.895-.78-2.212-.328zM8 18.5 9.375 17H19v1.5H8z"/></svg>',pilcrow:L.a,quote:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M3 10.423a6.5 6.5 0 0 1 6.056-6.408l.038.67C6.448 5.423 5.354 7.663 5.22 10H9c.552 0 .5.432.5.986v4.511c0 .554-.448.503-1 .503h-5c-.552 0-.5-.449-.5-1.003v-4.574zm8 0a6.5 6.5 0 0 1 6.056-6.408l.038.67c-2.646.739-3.74 2.979-3.873 5.315H17c.552 0 .5.432.5.986v4.511c0 .554-.448.503-1 .503h-5c-.552 0-.5-.449-.5-1.003v-4.574z"/></svg>',threeVerticalDots:W.a}},"./src/engine.js":function(e,t,o){"use strict";o.r(t),o.d(t,"enablePlaceholder",(function(){return s})),o.d(t,"disablePlaceholder",(function(){return r})),o.d(t,"showPlaceholder",(function(){return n})),o.d(t,"hidePlaceholder",(function(){return a})),o.d(t,"needsPlaceholder",(function(){return c})),o.d(t,"EditingController",(function(){return h.a})),o.d(t,"DataController",(function(){return p.a})),o.d(t,"Conversion",(function(){return g.a})),o.d(t,"HtmlDataProcessor",(function(){return f.a})),o.d(t,"InsertOperation",(function(){return m.a})),o.d(t,"MarkerOperation",(function(){return k.a})),o.d(t,"OperationFactory",(function(){return b.a})),o.d(t,"transformSets",(function(){return _.a})),o.d(t,"DocumentSelection",(function(){return w.a})),o.d(t,"Range",(function(){return v.a})),o.d(t,"LiveRange",(function(){return y.a})),o.d(t,"LivePosition",(function(){return j.a})),o.d(t,"Model",(function(){return x.a})),o.d(t,"TreeWalker",(function(){return P.a})),o.d(t,"Element",(function(){return O.a})),o.d(t,"DomConverter",(function(){return A.a})),o.d(t,"Renderer",(function(){return T.a})),o.d(t,"ViewDocument",(function(){return C.a})),o.d(t,"getFillerOffset",(function(){return E.b})),o.d(t,"Observer",(function(){return S.a})),o.d(t,"ClickObserver",(function(){return M})),o.d(t,"DomEventObserver",(function(){return R.a})),o.d(t,"MouseObserver",(function(){return N.a})),o.d(t,"DowncastWriter",(function(){return I.a})),o.d(t,"UpcastWriter",(function(){return H})),o.d(t,"Matcher",(function(){return q.a})),o.d(t,"DomEventData",(function(){return $.a})),o.d(t,"StylesProcessor",(function(){return U.a})),o.d(t,"addBackgroundRules",(function(){return _e})),o.d(t,"addBorderRules",(function(){return ve})),o.d(t,"addMarginRules",(function(){return Re})),o.d(t,"addPaddingRules",(function(){return Me})),o.d(t,"isColor",(function(){return Q})),o.d(t,"isLineStyle",(function(){return te})),o.d(t,"isLength",(function(){return ie})),o.d(t,"isPercentage",(function(){return re})),o.d(t,"isRepeat",(function(){return ae})),o.d(t,"isPosition",(function(){return le})),o.d(t,"isAttachment",(function(){return ue})),o.d(t,"isURL",(function(){return pe})),o.d(t,"getBoxSidesValues",(function(){return ge})),o.d(t,"getBoxSidesValueReducer",(function(){return fe})),o.d(t,"getBoxSidesShorthandValue",(function(){return me})),o.d(t,"getPositionShorthandNormalizer",(function(){return ke})),o.d(t,"getShorthandValues",(function(){return be}));o("./packages/ckeditor5-engine/theme/placeholder.css");const i=new WeakMap;function s(e){const{view:t,element:o,text:s,isDirectHost:r=!0,keepOnFocus:n=!1}=e,a=t.document;i.has(a)||(i.set(a,new Map),a.registerPostFixer(e=>l(a,e))),i.get(a).set(o,{text:s,isDirectHost:r,keepOnFocus:n,hostElement:r?o:null}),t.change(e=>l(a,e))}function r(e,t){const o=t.document;e.change(e=>{if(!i.has(o))return;const s=i.get(o),r=s.get(t);e.removeAttribute("data-placeholder",r.hostElement),a(e,r.hostElement),s.delete(t)})}function n(e,t){return!t.hasClass("ck-placeholder")&&(e.addClass("ck-placeholder",t),!0)}function a(e,t){return!!t.hasClass("ck-placeholder")&&(e.removeClass("ck-placeholder",t),!0)}function c(e,t){if(!e.isAttached())return!1;if(Array.from(e.getChildren()).some(e=>!e.is("uiElement")))return!1;if(t)return!0;const o=e.document;if(!o.isFocused)return!0;const i=o.selection.anchor;return i&&i.parent!==e}function l(e,t){const o=i.get(e),s=[];let r=!1;for(const[e,i]of o)i.isDirectHost&&(s.push(e),d(t,e,i)&&(r=!0));for(const[e,i]of o){if(i.isDirectHost)continue;const o=u(e);o&&(s.includes(o)||(i.hostElement=o,d(t,e,i)&&(r=!0)))}return r}function d(e,t,o){const{text:i,isDirectHost:s,hostElement:r}=o;let l=!1;r.getAttribute("data-placeholder")!==i&&(e.setAttribute("data-placeholder",i,r),l=!0);return(s||1==t.childCount)&&c(r,o.keepOnFocus)?n(e,r)&&(l=!0):a(e,r)&&(l=!0),l}function u(e){if(e.childCount){const t=e.getChild(0);if(t.is("element")&&!t.is("uiElement"))return t}return null}var h=o("./packages/ckeditor5-engine/src/controller/editingcontroller.js"),p=o("./packages/ckeditor5-engine/src/controller/datacontroller.js"),g=o("./packages/ckeditor5-engine/src/conversion/conversion.js"),f=o("./packages/ckeditor5-engine/src/dataprocessor/htmldataprocessor.js"),m=o("./packages/ckeditor5-engine/src/model/operation/insertoperation.js"),k=o("./packages/ckeditor5-engine/src/model/operation/markeroperation.js"),b=o("./packages/ckeditor5-engine/src/model/operation/operationfactory.js"),_=o("./packages/ckeditor5-engine/src/model/operation/transform.js"),w=o("./packages/ckeditor5-engine/src/model/documentselection.js"),v=o("./packages/ckeditor5-engine/src/model/range.js"),y=o("./packages/ckeditor5-engine/src/model/liverange.js"),j=o("./packages/ckeditor5-engine/src/model/liveposition.js"),x=o("./packages/ckeditor5-engine/src/model/model.js"),P=o("./packages/ckeditor5-engine/src/model/treewalker.js"),O=o("./packages/ckeditor5-engine/src/model/element.js"),A=o("./packages/ckeditor5-engine/src/view/domconverter.js"),T=o("./packages/ckeditor5-engine/src/view/renderer.js"),C=o("./packages/ckeditor5-engine/src/view/document.js"),E=o("./packages/ckeditor5-engine/src/view/containerelement.js"),S=o("./packages/ckeditor5-engine/src/view/observer/observer.js"),R=o("./packages/ckeditor5-engine/src/view/observer/domeventobserver.js");class M extends R.a{constructor(e){super(e),this.domEventType="click"}onDomEvent(e){this.fire(e.type,e)}}var N=o("./packages/ckeditor5-engine/src/view/observer/mouseobserver.js"),I=o("./packages/ckeditor5-engine/src/view/downcastwriter.js"),z=o("./packages/ckeditor5-engine/src/view/documentfragment.js"),V=o("./packages/ckeditor5-engine/src/view/element.js"),D=o("./packages/ckeditor5-engine/src/view/text.js"),B=o("./node_modules/lodash-es/isPlainObject.js"),F=o("./packages/ckeditor5-engine/src/view/position.js"),L=o("./packages/ckeditor5-engine/src/view/range.js"),W=o("./packages/ckeditor5-engine/src/view/selection.js");class H{constructor(e){this.document=e}createDocumentFragment(e){return new z.a(this.document,e)}createElement(e,t,o){return new V.a(this.document,e,t,o)}createText(e){return new D.a(this.document,e)}clone(e,t=!1){return e._clone(t)}appendChild(e,t){return t._appendChild(e)}insertChild(e,t,o){return o._insertChild(e,t)}removeChildren(e,t,o){return o._removeChildren(e,t)}remove(e){const t=e.parent;return t?this.removeChildren(t.getChildIndex(e),1,t):[]}replace(e,t){const o=e.parent;if(o){const i=o.getChildIndex(e);return this.removeChildren(i,1,o),this.insertChild(i,t,o),!0}return!1}unwrapElement(e){const t=e.parent;if(t){const o=t.getChildIndex(e);this.remove(e),this.insertChild(o,e.getChildren(),t)}}rename(e,t){const o=new V.a(this.document,e,t.getAttributes(),t.getChildren());return this.replace(t,o)?o:null}setAttribute(e,t,o){o._setAttribute(e,t)}removeAttribute(e,t){t._removeAttribute(e)}addClass(e,t){t._addClass(e)}removeClass(e,t){t._removeClass(e)}setStyle(e,t,o){Object(B.a)(e)&&void 0===o&&(o=t),o._setStyle(e,t)}removeStyle(e,t){t._removeStyle(e)}setCustomProperty(e,t,o){o._setCustomProperty(e,t)}removeCustomProperty(e,t){return t._removeCustomProperty(e)}createPositionAt(e,t){return F.a._createAt(e,t)}createPositionAfter(e){return F.a._createAfter(e)}createPositionBefore(e){return F.a._createBefore(e)}createRange(e,t){return new L.a(e,t)}createRangeOn(e){return L.a._createOn(e)}createRangeIn(e){return L.a._createIn(e)}createSelection(e,t,o){return new W.a(e,t,o)}}var q=o("./packages/ckeditor5-engine/src/view/matcher.js"),$=o("./packages/ckeditor5-engine/src/view/observer/domeventdata.js"),U=o("./packages/ckeditor5-engine/src/view/stylesmap.js");const K=/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,G=/^rgb\([ ]?([0-9]{1,3}[ %]?,[ ]?){2,3}[0-9]{1,3}[ %]?\)$/i,J=/^rgba\([ ]?([0-9]{1,3}[ %]?,[ ]?){3}(1|[0-9]+%|[0]?\.?[0-9]+)\)$/i,Y=/^hsl\([ ]?([0-9]{1,3}[ %]?[,]?[ ]*){3}(1|[0-9]+%|[0]?\.?[0-9]+)?\)$/i,X=/^hsla\([ ]?([0-9]{1,3}[ %]?,[ ]?){2,3}(1|[0-9]+%|[0]?\.?[0-9]+)\)$/i,Z=new Set(["black","silver","gray","white","maroon","red","purple","fuchsia","green","lime","olive","yellow","navy","blue","teal","aqua","orange","aliceblue","antiquewhite","aquamarine","azure","beige","bisque","blanchedalmond","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","gainsboro","ghostwhite","gold","goldenrod","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","limegreen","linen","magenta","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","oldlace","olivedrab","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","thistle","tomato","turquoise","violet","wheat","whitesmoke","yellowgreen","activeborder","activecaption","appworkspace","background","buttonface","buttonhighlight","buttonshadow","buttontext","captiontext","graytext","highlight","highlighttext","inactiveborder","inactivecaption","inactivecaptiontext","infobackground","infotext","menu","menutext","scrollbar","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","window","windowframe","windowtext","rebeccapurple","currentcolor","transparent"]);function Q(e){return e.startsWith("#")?K.test(e):e.startsWith("rgb")?G.test(e)||J.test(e):e.startsWith("hsl")?Y.test(e)||X.test(e):Z.has(e.toLowerCase())}const ee=["none","hidden","dotted","dashed","solid","double","groove","ridge","inset","outset"];function te(e){return ee.includes(e)}const oe=/^([+-]?[0-9]*([.][0-9]+)?(px|cm|mm|in|pc|pt|ch|em|ex|rem|vh|vw|vmin|vmax)|0)$/;function ie(e){return oe.test(e)}const se=/^[+-]?[0-9]*([.][0-9]+)?%$/;function re(e){return se.test(e)}const ne=["repeat-x","repeat-y","repeat","space","round","no-repeat"];function ae(e){return ne.includes(e)}const ce=["center","top","bottom","left","right"];function le(e){return ce.includes(e)}const de=["fixed","scroll","local"];function ue(e){return de.includes(e)}const he=/^url\(/;function pe(e){return he.test(e)}function ge(e=""){if(""===e)return{top:void 0,right:void 0,bottom:void 0,left:void 0};const t=be(e),o=t[0],i=t[2]||o,s=t[1]||o;return{top:o,bottom:i,right:s,left:t[3]||s}}function fe(e){return t=>{const{top:o,right:i,bottom:s,left:r}=t,n=[];return[o,i,r,s].every(e=>!!e)?n.push([e,me(t)]):(o&&n.push([e+"-top",o]),i&&n.push([e+"-right",i]),s&&n.push([e+"-bottom",s]),r&&n.push([e+"-left",r])),n}}function me({top:e,right:t,bottom:o,left:i}){const s=[];return i!==t?s.push(e,t,o,i):o!==e?s.push(e,t,o):t!==e?s.push(e,t):s.push(e),s.join(" ")}function ke(e){return t=>({path:e,value:ge(t)})}function be(e){return e.replace(/, /g,",").split(" ").map(e=>e.replace(/,/g,", "))}function _e(e){e.setNormalizer("background",we),e.setNormalizer("background-color",e=>({path:"background.color",value:e})),e.setReducer("background",e=>{const t=[];return t.push(["background-color",e.color]),t}),e.setStyleRelation("background",["background-color"])}function we(e){const t={},o=be(e);for(const e of o)ae(e)?(t.repeat=t.repeat||[],t.repeat.push(e)):le(e)?(t.position=t.position||[],t.position.push(e)):ue(e)?t.attachment=e:Q(e)?t.color=e:pe(e)&&(t.image=e);return{path:"background",value:t}}function ve(e){e.setNormalizer("border",ye),e.setNormalizer("border-top",je("top")),e.setNormalizer("border-right",je("right")),e.setNormalizer("border-bottom",je("bottom")),e.setNormalizer("border-left",je("left")),e.setNormalizer("border-color",xe("color")),e.setNormalizer("border-width",xe("width")),e.setNormalizer("border-style",xe("style")),e.setNormalizer("border-top-color",Oe("color","top")),e.setNormalizer("border-top-style",Oe("style","top")),e.setNormalizer("border-top-width",Oe("width","top")),e.setNormalizer("border-right-color",Oe("color","right")),e.setNormalizer("border-right-style",Oe("style","right")),e.setNormalizer("border-right-width",Oe("width","right")),e.setNormalizer("border-bottom-color",Oe("color","bottom")),e.setNormalizer("border-bottom-style",Oe("style","bottom")),e.setNormalizer("border-bottom-width",Oe("width","bottom")),e.setNormalizer("border-left-color",Oe("color","left")),e.setNormalizer("border-left-style",Oe("style","left")),e.setNormalizer("border-left-width",Oe("width","left")),e.setExtractor("border-top",Ae("top")),e.setExtractor("border-right",Ae("right")),e.setExtractor("border-bottom",Ae("bottom")),e.setExtractor("border-left",Ae("left")),e.setExtractor("border-top-color","border.color.top"),e.setExtractor("border-right-color","border.color.right"),e.setExtractor("border-bottom-color","border.color.bottom"),e.setExtractor("border-left-color","border.color.left"),e.setExtractor("border-top-width","border.width.top"),e.setExtractor("border-right-width","border.width.right"),e.setExtractor("border-bottom-width","border.width.bottom"),e.setExtractor("border-left-width","border.width.left"),e.setExtractor("border-top-style","border.style.top"),e.setExtractor("border-right-style","border.style.right"),e.setExtractor("border-bottom-style","border.style.bottom"),e.setExtractor("border-left-style","border.style.left"),e.setReducer("border-color",fe("border-color")),e.setReducer("border-style",fe("border-style")),e.setReducer("border-width",fe("border-width")),e.setReducer("border-top",Ee("top")),e.setReducer("border-right",Ee("right")),e.setReducer("border-bottom",Ee("bottom")),e.setReducer("border-left",Ee("left")),e.setReducer("border",function(){return t=>{const o=Te(t,"top"),i=Te(t,"right"),s=Te(t,"bottom"),r=Te(t,"left"),n=[o,i,s,r],a={width:e(n,"width"),style:e(n,"style"),color:e(n,"color")},c=Se(a,"all");if(c.length)return c;return[...Object.entries(a).reduce((e,[t,o])=>(o&&(e.push(["border-"+t,o]),n.forEach(e=>e[t]=null)),e),[]),...Se(o,"top"),...Se(i,"right"),...Se(s,"bottom"),...Se(r,"left")]};function e(e,t){return e.map(e=>e[t]).reduce((e,t)=>e==t?e:null)}}()),e.setStyleRelation("border",["border-color","border-style","border-width","border-top","border-right","border-bottom","border-left","border-top-color","border-right-color","border-bottom-color","border-left-color","border-top-style","border-right-style","border-bottom-style","border-left-style","border-top-width","border-right-width","border-bottom-width","border-left-width"]),e.setStyleRelation("border-color",["border-top-color","border-right-color","border-bottom-color","border-left-color"]),e.setStyleRelation("border-style",["border-top-style","border-right-style","border-bottom-style","border-left-style"]),e.setStyleRelation("border-width",["border-top-width","border-right-width","border-bottom-width","border-left-width"]),e.setStyleRelation("border-top",["border-top-color","border-top-style","border-top-width"]),e.setStyleRelation("border-right",["border-right-color","border-right-style","border-right-width"]),e.setStyleRelation("border-bottom",["border-bottom-color","border-bottom-style","border-bottom-width"]),e.setStyleRelation("border-left",["border-left-color","border-left-style","border-left-width"])}function ye(e){const{color:t,style:o,width:i}=Ce(e);return{path:"border",value:{color:ge(t),style:ge(o),width:ge(i)}}}function je(e){return t=>{const{color:o,style:i,width:s}=Ce(t),r={};return void 0!==o&&(r.color={[e]:o}),void 0!==i&&(r.style={[e]:i}),void 0!==s&&(r.width={[e]:s}),{path:"border",value:r}}}function xe(e){return t=>({path:"border",value:Pe(t,e)})}function Pe(e,t){return{[t]:ge(e)}}function Oe(e,t){return o=>({path:"border",value:{[e]:{[t]:o}}})}function Ae(e){return(t,o)=>{if(o.border)return Te(o.border,e)}}function Te(e,t){const o={};return e.width&&e.width[t]&&(o.width=e.width[t]),e.style&&e.style[t]&&(o.style=e.style[t]),e.color&&e.color[t]&&(o.color=e.color[t]),o}function Ce(e){const t={},o=be(e);for(const e of o)ie(e)||/thin|medium|thick/.test(e)?t.width=e:te(e)?t.style=e:t.color=e;return t}function Ee(e){return t=>Se(t,e)}function Se(e,t){const o=[];if(e&&e.width&&o.push("width"),e&&e.style&&o.push("style"),e&&e.color&&o.push("color"),3==o.length){const i=o.map(t=>e[t]).join(" ");return["all"==t?["border",i]:["border-"+t,i]]}return"all"==t?[]:o.map(o=>[`border-${t}-${o}`,e[o]])}function Re(e){e.setNormalizer("margin",ke("margin")),e.setNormalizer("margin-top",e=>({path:"margin.top",value:e})),e.setNormalizer("margin-right",e=>({path:"margin.right",value:e})),e.setNormalizer("margin-bottom",e=>({path:"margin.bottom",value:e})),e.setNormalizer("margin-left",e=>({path:"margin.left",value:e})),e.setReducer("margin",fe("margin")),e.setStyleRelation("margin",["margin-top","margin-right","margin-bottom","margin-left"])}function Me(e){e.setNormalizer("padding",ke("padding")),e.setNormalizer("padding-top",e=>({path:"padding.top",value:e})),e.setNormalizer("padding-right",e=>({path:"padding.right",value:e})),e.setNormalizer("padding-bottom",e=>({path:"padding.bottom",value:e})),e.setNormalizer("padding-left",e=>({path:"padding.left",value:e})),e.setReducer("padding",fe("padding")),e.setStyleRelation("padding",["padding-top","padding-right","padding-bottom","padding-left"])}},"./src/enter.js":function(e,t,o){"use strict";o.r(t),o.d(t,"Enter",(function(){return i.a})),o.d(t,"ShiftEnter",(function(){return u}));var i=o("./packages/ckeditor5-enter/src/enter.js"),s=o("./packages/ckeditor5-core/src/command.js"),r=o("./packages/ckeditor5-enter/src/utils.js");class n extends s.a{execute(){const e=this.editor.model,t=e.document;e.change(o=>{!function(e,t,o){const i=o.isCollapsed,s=o.getFirstRange(),n=s.start.parent,c=s.end.parent,l=n==c;if(i){const i=Object(r.a)(e.schema,o.getAttributes());a(e,t,s.end),t.removeSelectionAttribute(o.getAttributeKeys()),t.setSelectionAttribute(i)}else{const i=!(s.start.isAtStart&&s.end.isAtEnd);e.deleteContent(o,{leaveUnmerged:i}),l?a(e,t,o.focus):i&&t.setSelection(c,0)}}(e,o,t.selection),this.fire("afterExecute",{writer:o})})}refresh(){const e=this.editor.model,t=e.document;this.isEnabled=function(e,t){if(t.rangeCount>1)return!1;const o=t.anchor;if(!o||!e.checkChild(o,"softBreak"))return!1;const i=t.getFirstRange(),s=i.start.parent,r=i.end.parent;if((c(s,e)||c(r,e))&&s!==r)return!1;return!0}(e.schema,t.selection)}}function a(e,t,o){const i=t.createElement("softBreak");e.insertContent(i,o),t.setSelection(i,"after")}function c(e,t){return!e.is("rootElement")&&(t.isLimit(e)||c(e.parent,t))}var l=o("./packages/ckeditor5-enter/src/enterobserver.js"),d=o("./packages/ckeditor5-core/src/plugin.js");class u extends d.a{static get pluginName(){return"ShiftEnter"}init(){const e=this.editor,t=e.model.schema,o=e.conversion,i=e.editing.view,s=i.document;t.register("softBreak",{allowWhere:"$text",isInline:!0}),o.for("upcast").elementToElement({model:"softBreak",view:"br"}),o.for("downcast").elementToElement({model:"softBreak",view:(e,{writer:t})=>t.createEmptyElement("br")}),i.addObserver(l.a),e.commands.add("shiftEnter",new n(e)),this.listenTo(s,"enter",(t,o)=>{o.preventDefault(),o.isSoft&&(e.execute("shiftEnter"),i.scrollToTheSelection())},{priority:"low"})}}},"./src/paragraph.js":function(e,t,o){"use strict";o.r(t),o.d(t,"Paragraph",(function(){return l})),o.d(t,"ParagraphButtonUI",(function(){return u}));var i=o("./packages/ckeditor5-core/src/command.js"),s=o("./packages/ckeditor5-utils/src/first.js");class r extends i.a{refresh(){const e=this.editor.model,t=e.document,o=Object(s.a)(t.selection.getSelectedBlocks());this.value=!!o&&o.is("element","paragraph"),this.isEnabled=!!o&&n(o,e.schema)}execute(e={}){const t=this.editor.model,o=t.document;t.change(i=>{const s=(e.selection||o.selection).getSelectedBlocks();for(const e of s)!e.is("element","paragraph")&&n(e,t.schema)&&i.rename(e,"paragraph")})}}function n(e,t){return t.checkChild(e.parent,"paragraph")&&!t.isObject(e)}class a extends i.a{execute(e){const t=this.editor.model;let o=e.position;t.change(e=>{const i=e.createElement("paragraph");if(!t.schema.checkChild(o.parent,i)){const s=t.schema.findAllowedParent(o,i);if(!s)return;o=e.split(o,s).position}t.insertContent(i,o),e.setSelection(i,"in")})}}var c=o("./packages/ckeditor5-core/src/plugin.js");class l extends c.a{static get pluginName(){return"Paragraph"}init(){const e=this.editor,t=e.model;e.commands.add("paragraph",new r(e)),e.commands.add("insertParagraph",new a(e)),t.schema.register("paragraph",{inheritAllFrom:"$block"}),e.conversion.elementToElement({model:"paragraph",view:"p"}),e.conversion.for("upcast").elementToElement({model:(e,{writer:t})=>l.paragraphLikeElements.has(e.name)?e.isEmpty?null:t.createElement("paragraph"):null,view:/.+/,converterPriority:"low"})}}l.paragraphLikeElements=new Set(["blockquote","dd","div","dt","h1","h2","h3","h4","h5","h6","li","p","td","th"]);var d=o("./packages/ckeditor5-ui/src/button/buttonview.js");class u extends c.a{init(){const e=this.editor,t=e.t;e.ui.componentFactory.add("paragraph",o=>{const i=new d.a(o),s=e.commands.get("paragraph");return i.label=t("Paragraph"),i.icon='<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M10.5 5.5H7v5h3.5a2.5 2.5 0 1 0 0-5zM5 3h6.5v.025a5 5 0 0 1 0 9.95V13H7v4a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1z"/></svg>',i.tooltip=!0,i.isToggleable=!0,i.bind("isEnabled").to(s),i.bind("isOn").to(s,"value"),i.on("execute",()=>{e.execute("paragraph")}),i})}}},"./src/select-all.js":function(e,t,o){"use strict";o.r(t),o.d(t,"SelectAll",(function(){return h})),o.d(t,"SelectAllEditing",(function(){return l})),o.d(t,"SelectAllUI",(function(){return u}));var i=o("./packages/ckeditor5-core/src/plugin.js"),s=o("./packages/ckeditor5-utils/src/keyboard.js"),r=o("./packages/ckeditor5-core/src/command.js");class n extends r.a{constructor(e){super(e),this.affectsData=!1}execute(){const e=this.editor.model,t=e.document.selection;let o=e.schema.getLimitElement(t);if(t.containsEntireContent(o)||!a(e.schema,o))do{if(o=o.parent,!o)return}while(!a(e.schema,o));e.change(e=>{e.setSelection(o,"in")})}}function a(e,t){return e.isLimit(t)&&(e.checkChild(t,"$text")||e.checkChild(t,"paragraph"))}const c=Object(s.g)("Ctrl+A");class l extends i.a{static get pluginName(){return"SelectAllEditing"}init(){const e=this.editor,t=e.editing.view.document;e.commands.add("selectAll",new n(e)),this.listenTo(t,"keydown",(t,o)=>{Object(s.a)(o)===c&&(e.execute("selectAll"),o.preventDefault())})}}var d=o("./packages/ckeditor5-ui/src/button/buttonview.js");class u extends i.a{static get pluginName(){return"SelectAllUI"}init(){const e=this.editor;e.ui.componentFactory.add("selectAll",t=>{const o=e.commands.get("selectAll"),i=new d.a(t),s=t.t;return i.set({label:s("Select all"),icon:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M.75 15.5a.75.75 0 0 1 .75.75V18l.008.09A.5.5 0 0 0 2 18.5h1.75a.75.75 0 1 1 0 1.5H1.5l-.144-.007a1.5 1.5 0 0 1-1.35-1.349L0 18.5v-2.25a.75.75 0 0 1 .75-.75zm18.5 0a.75.75 0 0 1 .75.75v2.25l-.007.144a1.5 1.5 0 0 1-1.349 1.35L18.5 20h-2.25a.75.75 0 1 1 0-1.5H18a.5.5 0 0 0 .492-.41L18.5 18v-1.75a.75.75 0 0 1 .75-.75zm-10.45 3c.11 0 .2.09.2.2v1.1a.2.2 0 0 1-.2.2H7.2a.2.2 0 0 1-.2-.2v-1.1c0-.11.09-.2.2-.2h1.6zm4 0c.11 0 .2.09.2.2v1.1a.2.2 0 0 1-.2.2h-1.6a.2.2 0 0 1-.2-.2v-1.1c0-.11.09-.2.2-.2h1.6zm.45-5.5a.75.75 0 1 1 0 1.5h-8.5a.75.75 0 1 1 0-1.5h8.5zM1.3 11c.11 0 .2.09.2.2v1.6a.2.2 0 0 1-.2.2H.2a.2.2 0 0 1-.2-.2v-1.6c0-.11.09-.2.2-.2h1.1zm18.5 0c.11 0 .2.09.2.2v1.6a.2.2 0 0 1-.2.2h-1.1a.2.2 0 0 1-.2-.2v-1.6c0-.11.09-.2.2-.2h1.1zm-4.55-2a.75.75 0 1 1 0 1.5H4.75a.75.75 0 1 1 0-1.5h10.5zM1.3 7c.11 0 .2.09.2.2v1.6a.2.2 0 0 1-.2.2H.2a.2.2 0 0 1-.2-.2V7.2c0-.11.09-.2.2-.2h1.1zm18.5 0c.11 0 .2.09.2.2v1.6a.2.2 0 0 1-.2.2h-1.1a.2.2 0 0 1-.2-.2V7.2c0-.11.09-.2.2-.2h1.1zm-4.55-2a.75.75 0 1 1 0 1.5h-2.5a.75.75 0 1 1 0-1.5h2.5zm-5 0a.75.75 0 1 1 0 1.5h-5.5a.75.75 0 0 1 0-1.5h5.5zm-6.5-5a.75.75 0 0 1 0 1.5H2a.5.5 0 0 0-.492.41L1.5 2v1.75a.75.75 0 0 1-1.5 0V1.5l.007-.144A1.5 1.5 0 0 1 1.356.006L1.5 0h2.25zM18.5 0l.144.007a1.5 1.5 0 0 1 1.35 1.349L20 1.5v2.25a.75.75 0 1 1-1.5 0V2l-.008-.09A.5.5 0 0 0 18 1.5h-1.75a.75.75 0 1 1 0-1.5h2.25zM8.8 0c.11 0 .2.09.2.2v1.1a.2.2 0 0 1-.2.2H7.2a.2.2 0 0 1-.2-.2V.2c0-.11.09-.2.2-.2h1.6zm4 0c.11 0 .2.09.2.2v1.1a.2.2 0 0 1-.2.2h-1.6a.2.2 0 0 1-.2-.2V.2c0-.11.09-.2.2-.2h1.6z"/></svg>',keystroke:"Ctrl+A",tooltip:!0}),i.bind("isOn","isEnabled").to(o,"value","isEnabled"),this.listenTo(i,"execute",()=>{e.execute("selectAll"),e.editing.view.focus()}),i})}}class h extends i.a{static get requires(){return[l,u]}static get pluginName(){return"SelectAll"}}},"./src/typing.js":function(e,t,o){"use strict";o.r(t),o.d(t,"Typing",(function(){return k})),o.d(t,"Input",(function(){return f})),o.d(t,"Delete",(function(){return m.a})),o.d(t,"TextWatcher",(function(){return v})),o.d(t,"TwoStepCaretMovement",(function(){return j})),o.d(t,"TextTransformation",(function(){return I})),o.d(t,"inlineHighlight",(function(){return W})),o.d(t,"findAttributeRange",(function(){return F})),o.d(t,"getLastTextLine",(function(){return w})),o.d(t,"isNonTypingKeystroke",(function(){return a.b}));var i=o("./packages/ckeditor5-core/src/plugin.js"),s=o("./packages/ckeditor5-core/src/command.js"),r=o("./packages/ckeditor5-typing/src/utils/changebuffer.js");class n extends s.a{constructor(e,t){super(e),this._buffer=new r.a(e.model,t),this._batches=new WeakSet}get buffer(){return this._buffer}destroy(){super.destroy(),this._buffer.destroy()}execute(e={}){const t=this.editor.model,o=t.document,i=e.text||"",s=i.length,r=e.range?t.createSelection(e.range):o.selection,n=e.resultRange;t.enqueueChange(this._buffer.batch,e=>{this._buffer.lock(),this._batches.add(this._buffer.batch),t.deleteContent(r),i&&t.insertContent(e.createText(i,o.selection.getAttributes()),r),n?e.setSelection(n):r.is("documentSelection")||e.setSelection(r),this._buffer.unlock(),this._buffer.input(s)})}}var a=o("./packages/ckeditor5-typing/src/utils/injectunsafekeystrokeshandling.js"),c=o("./packages/ckeditor5-utils/src/diff.js"),l=o("./packages/ckeditor5-engine/src/view/domconverter.js");function d(e){if(e.newChildren.length-e.oldChildren.length!=1)return;const t=function(e,t){const o=[];let i,s=0;return e.forEach(e=>{"equal"==e?(r(),s++):"insert"==e?(n("insert")?i.values.push(t[s]):(r(),i={type:"insert",index:s,values:[t[s]]}),s++):n("delete")?i.howMany++:(r(),i={type:"delete",index:s,howMany:1})}),r(),o;function r(){i&&(o.push(i),i=null)}function n(e){return i&&i.type==e}}(Object(c.a)(e.oldChildren,e.newChildren,u),e.newChildren);if(t.length>1)return;const o=t[0];return o.values[0]&&o.values[0].is("$text")?o:void 0}function u(e,t){return e&&e.is("$text")&&t&&t.is("$text")?e.data===t.data:e===t}class h{constructor(e){this.editor=e,this.editing=this.editor.editing}handle(e,t){if(function(e){if(0==e.length)return!1;for(const t of e)if("children"===t.type&&!d(t))return!0;return!1}(e))this._handleContainerChildrenMutations(e,t);else for(const o of e)this._handleTextMutation(o,t),this._handleTextNodeInsertion(o)}_handleContainerChildrenMutations(e,t){const o=function(e){const t=e.map(e=>e.node).reduce((e,t)=>e.getCommonAncestor(t,{includeSelf:!0}));if(!t)return;return t.getAncestors({includeSelf:!0,parentFirst:!0}).find(e=>e.is("containerElement")||e.is("rootElement"))}(e);if(!o)return;const i=this.editor.editing.view.domConverter.mapViewToDom(o),s=new l.a(this.editor.editing.view.document),r=this.editor.data.toModel(s.domToView(i)).getChild(0),n=this.editor.editing.mapper.toModelElement(o);if(!n)return;const a=Array.from(r.getChildren()),d=Array.from(n.getChildren()),u=a[a.length-1],h=d[d.length-1],f=u&&u.is("element","softBreak"),m=h&&!h.is("element","softBreak");f&&m&&a.pop();const k=this.editor.model.schema;if(!p(a,k)||!p(d,k))return;const b=a.map(e=>e.is("$text")?e.data:"@").join("").replace(/\u00A0/g," "),_=d.map(e=>e.is("$text")?e.data:"@").join("").replace(/\u00A0/g," ");if(_===b)return;const w=Object(c.a)(_,b),{firstChangeAt:v,insertions:y,deletions:j}=g(w);let x=null;t&&(x=this.editing.mapper.toModelRange(t.getFirstRange()));const P=b.substr(v,y),O=this.editor.model.createRange(this.editor.model.createPositionAt(n,v),this.editor.model.createPositionAt(n,v+j));this.editor.execute("input",{text:P,range:O,resultRange:x})}_handleTextMutation(e,t){if("text"!=e.type)return;const o=e.newText.replace(/\u00A0/g," "),i=e.oldText.replace(/\u00A0/g," ");if(i===o)return;const s=Object(c.a)(i,o),{firstChangeAt:r,insertions:n,deletions:a}=g(s);let l=null;t&&(l=this.editing.mapper.toModelRange(t.getFirstRange()));const d=this.editing.view.createPositionAt(e.node,r),u=this.editing.mapper.toModelPosition(d),h=this.editor.model.createRange(u,u.getShiftedBy(a)),p=o.substr(r,n);this.editor.execute("input",{text:p,range:h,resultRange:l})}_handleTextNodeInsertion(e){if("children"!=e.type)return;const t=d(e),o=this.editing.view.createPositionAt(e.node,t.index),i=this.editing.mapper.toModelPosition(o),s=t.values[0].data;this.editor.execute("input",{text:s.replace(/\u00A0/g," "),range:this.editor.model.createRange(i)})}}function p(e,t){return e.every(e=>t.isInline(e))}function g(e){let t=null,o=null;for(let i=0;i<e.length;i++){"equal"!=e[i]&&(t=null===t?i:t,o=i)}let i=0,s=0;for(let r=t;r<=o;r++)"insert"!=e[r]&&i++,"delete"!=e[r]&&s++;return{insertions:s,deletions:i,firstChangeAt:t}}class f extends i.a{static get pluginName(){return"Input"}init(){const e=this.editor,t=new n(e,e.config.get("typing.undoStep")||20);e.commands.add("input",t),Object(a.a)(e),function(e){e.editing.view.document.on("mutations",(t,o,i)=>{new h(e).handle(o,i)})}(e)}isInput(e){return this.editor.commands.get("input")._batches.has(e)}}var m=o("./packages/ckeditor5-typing/src/delete.js");class k extends i.a{static get requires(){return[f,m.a]}static get pluginName(){return"Typing"}}var b=o("./packages/ckeditor5-utils/src/mix.js"),_=o("./packages/ckeditor5-utils/src/observablemixin.js");function w(e,t){let o=e.start;return{text:Array.from(e.getItems()).reduce((e,i)=>i.is("$text")||i.is("$textProxy")?e+i.data:(o=t.createPositionAfter(i),""),""),range:t.createRange(o,e.end)}}class v{constructor(e,t){this.model=e,this.testCallback=t,this.hasMatch=!1,this.set("isEnabled",!0),this.on("change:isEnabled",()=>{this.isEnabled?this._startListening():(this.stopListening(e.document.selection),this.stopListening(e.document))}),this._startListening()}_startListening(){const e=this.model.document;this.listenTo(e.selection,"change:range",(t,{directChange:o})=>{o&&(e.selection.isCollapsed?this._evaluateTextBeforeSelection("selection"):this.hasMatch&&(this.fire("unmatched"),this.hasMatch=!1))}),this.listenTo(e,"change:data",(e,t)=>{"transparent"!=t.type&&this._evaluateTextBeforeSelection("data",{batch:t})})}_evaluateTextBeforeSelection(e,t={}){const o=this.model,i=o.document.selection,s=o.createRange(o.createPositionAt(i.focus.parent,0),i.focus),{text:r,range:n}=w(s,o),a=this.testCallback(r);if(!a&&this.hasMatch&&this.fire("unmatched"),this.hasMatch=!!a,a){const o=Object.assign(t,{text:r,range:n});"object"==typeof a&&Object.assign(o,a),this.fire("matched:"+e,o)}}}Object(b.a)(v,_.a);var y=o("./packages/ckeditor5-utils/src/keyboard.js");class j extends i.a{static get pluginName(){return"TwoStepCaretMovement"}constructor(e){super(e),this.attributes=new Set,this._overrideUid=null}init(){const e=this.editor,t=e.model,o=e.editing.view,i=e.locale,s=t.document.selection;this.listenTo(o.document,"arrowKey",(e,t)=>{if(!s.isCollapsed)return;if(t.shiftKey||t.altKey||t.ctrlKey)return;const o=t.keyCode==y.f.arrowright,r=t.keyCode==y.f.arrowleft;if(!o&&!r)return;const n=i.contentLanguageDirection;let a=!1;a="ltr"===n&&o||"rtl"===n&&r?this._handleForwardMovement(t):this._handleBackwardMovement(t),!0===a&&e.stop()},{context:"$text",priority:"highest"}),this._isNextGravityRestorationSkipped=!1,this.listenTo(s,"change:range",(e,t)=>{this._isNextGravityRestorationSkipped?this._isNextGravityRestorationSkipped=!1:this._isGravityOverridden&&(!t.directChange&&A(s.getFirstPosition(),this.attributes)||this._restoreGravity())})}registerAttribute(e){this.attributes.add(e)}_handleForwardMovement(e){const t=this.attributes,o=this.editor.model.document.selection,i=o.getFirstPosition();return!this._isGravityOverridden&&((!i.isAtStart||!x(o,t))&&(A(i,t)?(O(e),this._overrideGravity(),!0):void 0))}_handleBackwardMovement(e){const t=this.attributes,o=this.editor.model,i=o.document.selection,s=i.getFirstPosition();return this._isGravityOverridden?(O(e),this._restoreGravity(),P(o,t,s),!0):s.isAtStart?!!x(i,t)&&(O(e),P(o,t,s),!0):function(e,t){return A(e.getShiftedBy(-1),t)}(s,t)?s.isAtEnd&&!x(i,t)&&A(s,t)?(O(e),P(o,t,s),!0):(this._isNextGravityRestorationSkipped=!0,this._overrideGravity(),!1):void 0}get _isGravityOverridden(){return!!this._overrideUid}_overrideGravity(){this._overrideUid=this.editor.model.change(e=>e.overrideSelectionGravity())}_restoreGravity(){this.editor.model.change(e=>{e.restoreSelectionGravity(this._overrideUid),this._overrideUid=null})}}function x(e,t){for(const o of t)if(e.hasAttribute(o))return!0;return!1}function P(e,t,o){const i=o.nodeBefore;e.change(e=>{i?e.setSelectionAttribute(i.getAttributes()):e.removeSelectionAttribute(t)})}function O(e){e.preventDefault()}function A(e,t){const{nodeBefore:o,nodeAfter:i}=e;for(const e of t){const t=o?o.getAttribute(e):void 0;if((i?i.getAttribute(e):void 0)!==t)return!0}return!1}var T=o("./node_modules/lodash-es/toString.js"),C=/[\\^$.*+?()[\]{}|]/g,E=RegExp(C.source);var S=function(e){return(e=Object(T.a)(e))&&E.test(e)?e.replace(C,"\\$&"):e};const R={copyright:{from:"(c)",to:"©"},registeredTrademark:{from:"(r)",to:"®"},trademark:{from:"(tm)",to:"™"},oneHalf:{from:/(^|[^/a-z0-9])(1\/2)([^/a-z0-9])$/i,to:[null,"½",null]},oneThird:{from:/(^|[^/a-z0-9])(1\/3)([^/a-z0-9])$/i,to:[null,"⅓",null]},twoThirds:{from:/(^|[^/a-z0-9])(2\/3)([^/a-z0-9])$/i,to:[null,"⅔",null]},oneForth:{from:/(^|[^/a-z0-9])(1\/4)([^/a-z0-9])$/i,to:[null,"¼",null]},threeQuarters:{from:/(^|[^/a-z0-9])(3\/4)([^/a-z0-9])$/i,to:[null,"¾",null]},lessThanOrEqual:{from:"<=",to:"≤"},greaterThanOrEqual:{from:">=",to:"≥"},notEqual:{from:"!=",to:"≠"},arrowLeft:{from:"<-",to:"←"},arrowRight:{from:"->",to:"→"},horizontalEllipsis:{from:"...",to:"…"},enDash:{from:/(^| )(--)( )$/,to:[null,"–",null]},emDash:{from:/(^| )(---)( )$/,to:[null,"—",null]},quotesPrimary:{from:B('"'),to:[null,"“",null,"”"]},quotesSecondary:{from:B("'"),to:[null,"‘",null,"’"]},quotesPrimaryEnGb:{from:B("'"),to:[null,"‘",null,"’"]},quotesSecondaryEnGb:{from:B('"'),to:[null,"“",null,"”"]},quotesPrimaryPl:{from:B('"'),to:[null,"„",null,"”"]},quotesSecondaryPl:{from:B("'"),to:[null,"‚",null,"’"]}},M={symbols:["copyright","registeredTrademark","trademark"],mathematical:["oneHalf","oneThird","twoThirds","oneForth","threeQuarters","lessThanOrEqual","greaterThanOrEqual","notEqual","arrowLeft","arrowRight"],typography:["horizontalEllipsis","enDash","emDash"],quotes:["quotesPrimary","quotesSecondary"]},N=["symbols","mathematical","typography","quotes"];class I extends i.a{static get requires(){return["Delete","Input"]}static get pluginName(){return"TextTransformation"}constructor(e){super(e),e.config.define("typing",{transformations:{include:N}})}init(){const e=this.editor.model.document.selection;e.on("change:range",()=>{this.isEnabled=!e.anchor.parent.is("element","codeBlock")}),this._enableTransformationWatchers()}_enableTransformationWatchers(){const e=this.editor,t=e.model,o=e.plugins.get("Input"),i=e.plugins.get("Delete"),s=function(e){const t=e.extra||[],o=e.remove||[],i=e=>!o.includes(e);return function(e){const t=new Set;for(const o of e)if(M[o])for(const e of M[o])t.add(e);else t.add(o);return Array.from(t)}(e.include.concat(t).filter(i)).filter(i).map(e=>R[e]||e).map(e=>({from:z(e.from),to:V(e.to)}))}(e.config.get("typing.transformations")),r=new v(e.model,e=>{for(const t of s){if(t.from.test(e))return{normalizedTransformation:t}}});r.on("matched:data",(e,s)=>{if(!o.isInput(s.batch))return;const{from:r,to:n}=s.normalizedTransformation,a=r.exec(s.text),c=n(a.slice(1)),l=s.range;let d=a.index;t.enqueueChange(e=>{for(let o=1;o<a.length;o++){const i=a[o],s=c[o-1];if(null==s){d+=i.length;continue}const r=l.start.getShiftedBy(d),n=t.createRange(r,r.getShiftedBy(i.length)),u=D(r);t.insertContent(e.createText(s,u),n),d+=s.length}t.enqueueChange(()=>{i.requestUndoOnBackspace()})})}),r.bind("isEnabled").to(this)}}function z(e){return"string"==typeof e?new RegExp(`(${S(e)})$`):e}function V(e){return"string"==typeof e?()=>[e]:e instanceof Array?()=>e:e}function D(e){return(e.textNode?e.textNode:e.nodeAfter).getAttributes()}function B(e){return new RegExp(`(^|\\s)(${e})([^${e}]*)(${e})$`)}function F(e,t,o,i){return i.createRange(L(e,t,o,!0,i),L(e,t,o,!1,i))}function L(e,t,o,i,s){let r=e.textNode||(i?e.nodeBefore:e.nodeAfter),n=null;for(;r&&r.getAttribute(t)==o;)n=r,r=i?r.previousSibling:r.nextSibling;return n?s.createPositionAt(n,i?"before":"after"):e}function W(e,t,o,i){const s=e.editing.view,r=new Set;s.document.registerPostFixer(s=>{const n=e.model.document.selection;let a=!1;if(n.hasAttribute(t)){const c=F(n.getFirstPosition(),t,n.getAttribute(t),e.model),l=e.editing.mapper.toViewRange(c);for(const e of l.getItems())e.is("element",o)&&!e.hasClass(i)&&(s.addClass(i,e),r.add(e),a=!0)}return a}),e.conversion.for("editingDowncast").add(e=>{function t(){s.change(e=>{for(const t of r.values())e.removeClass(i,t),r.delete(t)})}e.on("insert",t,{priority:"highest"}),e.on("remove",t,{priority:"highest"}),e.on("attribute",t,{priority:"highest"}),e.on("selection",t,{priority:"highest"})})}},"./src/ui.js":function(e,t,o){"use strict";o.r(t),o.d(t,"clickOutsideHandler",(function(){return i.a})),o.d(t,"injectCssTransitionDisabler",(function(){return s})),o.d(t,"submitHandler",(function(){return r})),o.d(t,"BodyCollection",(function(){return l})),o.d(t,"ButtonView",(function(){return d.a})),o.d(t,"SwitchButtonView",(function(){return u.a})),o.d(t,"getLocalizedColorOptions",(function(){return h})),o.d(t,"normalizeColorOptions",(function(){return p})),o.d(t,"normalizeSingleColorDefinition",(function(){return g})),o.d(t,"ColorGridView",(function(){return w})),o.d(t,"ColorTileView",(function(){return m})),o.d(t,"DropdownButtonView",(function(){return v.a})),o.d(t,"SplitButtonView",(function(){return j})),o.d(t,"createDropdown",(function(){return x.c})),o.d(t,"addToolbarToDropdown",(function(){return x.b})),o.d(t,"addListToDropdown",(function(){return x.a})),o.d(t,"EditorUIView",(function(){return P})),o.d(t,"BoxedEditorUIView",(function(){return T})),o.d(t,"InlineEditableUIView",(function(){return E})),o.d(t,"FormHeaderView",(function(){return S})),o.d(t,"FocusCycler",(function(){return b.a})),o.d(t,"IconView",(function(){return R.a})),o.d(t,"InputTextView",(function(){return M})),o.d(t,"IframeView",(function(){return N})),o.d(t,"LabelView",(function(){return A})),o.d(t,"LabeledFieldView",(function(){return I})),o.d(t,"createLabeledInputText",(function(){return z})),o.d(t,"createLabeledDropdown",(function(){return V})),o.d(t,"ListItemView",(function(){return D.a})),o.d(t,"ListView",(function(){return B.a})),o.d(t,"Notification",(function(){return L})),o.d(t,"Model",(function(){return $})),o.d(t,"BalloonPanelView",(function(){return U.a})),o.d(t,"ContextualBalloon",(function(){return K.a})),o.d(t,"StickyPanelView",(function(){return X})),o.d(t,"TooltipView",(function(){return Z.a})),o.d(t,"Template",(function(){return n.a})),o.d(t,"ToolbarView",(function(){return Q.a})),o.d(t,"ToolbarSeparatorView",(function(){return ee.a})),o.d(t,"enableToolbarKeyboardFocus",(function(){return te})),o.d(t,"normalizeToolbarConfig",(function(){return oe.a})),o.d(t,"BalloonToolbar",(function(){return ce})),o.d(t,"BlockToolbar",(function(){return fe})),o.d(t,"View",(function(){return f.a})),o.d(t,"ViewCollection",(function(){return a.a}));var i=o("./packages/ckeditor5-ui/src/bindings/clickoutsidehandler.js");function s(e){e.set("_isCssTransitionsDisabled",!1),e.disableCssTransitions=()=>{e._isCssTransitionsDisabled=!0},e.enableCssTransitions=()=>{e._isCssTransitionsDisabled=!1},e.extendTemplate({attributes:{class:[e.bindTemplate.if("_isCssTransitionsDisabled","ck-transitions-disabled")]}})}function r({view:e}){e.listenTo(e.element,"submit",(t,o)=>{o.preventDefault(),e.fire("submit")},{useCapture:!0})}var n=o("./packages/ckeditor5-ui/src/template.js"),a=o("./packages/ckeditor5-ui/src/viewcollection.js"),c=o("./packages/ckeditor5-utils/src/dom/createelement.js");class l extends a.a{constructor(e,t=[]){super(t),this.locale=e}attachToDom(){this._bodyCollectionContainer=new n.a({tag:"div",attributes:{class:["ck","ck-reset_all","ck-body","ck-rounded-corners"],dir:this.locale.uiLanguageDirection},children:this}).render();let e=document.querySelector(".ck-body-wrapper");e||(e=Object(c.a)(document,"div",{class:"ck-body-wrapper"}),document.body.appendChild(e)),e.appendChild(this._bodyCollectionContainer)}detachFromDom(){super.destroy(),this._bodyCollectionContainer&&this._bodyCollectionContainer.remove();const e=document.querySelector(".ck-body-wrapper");e&&0==e.childElementCount&&e.remove()}}var d=o("./packages/ckeditor5-ui/src/button/buttonview.js"),u=o("./packages/ckeditor5-ui/src/button/switchbuttonview.js");function h(e,t){const o=e.t,i={Black:o("Black"),"Dim grey":o("Dim grey"),Grey:o("Grey"),"Light grey":o("Light grey"),White:o("White"),Red:o("Red"),Orange:o("Orange"),Yellow:o("Yellow"),"Light green":o("Light green"),Green:o("Green"),Aquamarine:o("Aquamarine"),Turquoise:o("Turquoise"),"Light blue":o("Light blue"),Blue:o("Blue"),Purple:o("Purple")};return t.map(e=>{const t=i[e.label];return t&&t!=e.label&&(e.label=t),e})}function p(e){return e.map(g).filter(e=>!!e)}function g(e){return"string"==typeof e?{model:e,label:e,hasBorder:!1,view:{name:"span",styles:{color:e}}}:{model:e.color,label:e.label||e.color,hasBorder:void 0!==e.hasBorder&&e.hasBorder,view:{name:"span",styles:{color:""+e.color}}}}var f=o("./packages/ckeditor5-ui/src/view.js");class m extends d.a{constructor(e){super(e);const t=this.bindTemplate;this.set("color"),this.set("hasBorder"),this.icon='<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path class="ck-icon__fill" d="M16.935 5.328a2 2 0 0 1 0 2.829l-7.778 7.778a2 2 0 0 1-2.829 0L3.5 13.107a1.999 1.999 0 1 1 2.828-2.829l.707.707a1 1 0 0 0 1.414 0l5.658-5.657a2 2 0 0 1 2.828 0z"/><path d="M14.814 6.035 8.448 12.4a1 1 0 0 1-1.414 0l-1.413-1.415A1 1 0 1 0 4.207 12.4l2.829 2.829a1 1 0 0 0 1.414 0l7.778-7.778a1 1 0 1 0-1.414-1.415z"/></svg>',this.extendTemplate({attributes:{style:{backgroundColor:t.to("color")},class:["ck","ck-color-grid__tile",t.if("hasBorder","ck-color-table__color-tile_bordered")]}})}render(){super.render(),this.iconView.fillColor="hsl(0, 0%, 100%)"}}var k=o("./packages/ckeditor5-utils/src/focustracker.js"),b=o("./packages/ckeditor5-ui/src/focuscycler.js"),_=o("./packages/ckeditor5-utils/src/keystrokehandler.js");o("./packages/ckeditor5-ui/theme/components/colorgrid/colorgrid.css");class w extends f.a{constructor(e,t){super(e);const o=t&&t.colorDefinitions||[],i={};t&&t.columns&&(i.gridTemplateColumns=`repeat( ${t.columns}, 1fr)`),this.set("selectedColor"),this.items=this.createCollection(),this.focusTracker=new k.a,this.keystrokes=new _.a,this._focusCycler=new b.a({focusables:this.items,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"arrowleft",focusNext:"arrowright"}}),this.items.on("add",(e,t)=>{t.isOn=t.color===this.selectedColor}),o.forEach(e=>{const t=new m;t.set({color:e.color,label:e.label,tooltip:!0,hasBorder:e.options.hasBorder}),t.on("execute",()=>{this.fire("execute",{value:e.color,hasBorder:e.options.hasBorder,label:e.label})}),this.items.add(t)}),this.setTemplate({tag:"div",children:this.items,attributes:{class:["ck","ck-color-grid"],style:i}}),this.on("change:selectedColor",(e,t,o)=>{for(const e of this.items)e.isOn=e.color===o})}focus(){this.items.length&&this.items.first.focus()}focusLast(){this.items.length&&this.items.last.focus()}render(){super.render();for(const e of this.items)this.focusTracker.add(e.element);this.items.on("add",(e,t)=>{this.focusTracker.add(t.element)}),this.items.on("remove",(e,t)=>{this.focusTracker.remove(t.element)}),this.keystrokes.listenTo(this.element)}}var v=o("./packages/ckeditor5-ui/src/dropdown/button/dropdownbuttonview.js"),y=o("./packages/ckeditor5-ui/theme/icons/dropdown-arrow.svg");o("./packages/ckeditor5-ui/theme/components/dropdown/splitbutton.css");class j extends f.a{constructor(e){super(e);const t=this.bindTemplate;this.set("class"),this.set("icon"),this.set("isEnabled",!0),this.set("isOn",!1),this.set("isToggleable",!1),this.set("isVisible",!0),this.set("keystroke"),this.set("label"),this.set("tabindex",-1),this.set("tooltip"),this.set("tooltipPosition","s"),this.set("type","button"),this.set("withText",!1),this.children=this.createCollection(),this.actionView=this._createActionView(),this.arrowView=this._createArrowView(),this.keystrokes=new _.a,this.focusTracker=new k.a,this.setTemplate({tag:"div",attributes:{class:["ck","ck-splitbutton",t.to("class"),t.if("isVisible","ck-hidden",e=>!e),this.arrowView.bindTemplate.if("isOn","ck-splitbutton_open")]},children:this.children})}render(){super.render(),this.children.add(this.actionView),this.children.add(this.arrowView),this.focusTracker.add(this.actionView.element),this.focusTracker.add(this.arrowView.element),this.keystrokes.listenTo(this.element),this.keystrokes.set("arrowright",(e,t)=>{this.focusTracker.focusedElement===this.actionView.element&&(this.arrowView.focus(),t())}),this.keystrokes.set("arrowleft",(e,t)=>{this.focusTracker.focusedElement===this.arrowView.element&&(this.actionView.focus(),t())})}focus(){this.actionView.focus()}_createActionView(){const e=new d.a;return e.bind("icon","isEnabled","isOn","isToggleable","keystroke","label","tabindex","tooltip","tooltipPosition","type","withText").to(this),e.extendTemplate({attributes:{class:"ck-splitbutton__action"}}),e.delegate("execute").to(this),e}_createArrowView(){const e=new d.a,t=e.bindTemplate;return e.icon=y.a,e.extendTemplate({attributes:{class:"ck-splitbutton__arrow","aria-haspopup":!0,"aria-expanded":t.to("isOn",e=>String(e))}}),e.bind("isEnabled").to(this),e.delegate("execute").to(this,"open"),e}}var x=o("./packages/ckeditor5-ui/src/dropdown/utils.js");o("./packages/ckeditor5-ui/theme/components/editorui/editorui.css");class P extends f.a{constructor(e){super(e),this.body=new l(e)}render(){super.render(),this.body.attachToDom()}destroy(){return this.body.detachFromDom(),super.destroy()}}var O=o("./packages/ckeditor5-utils/src/uid.js");o("./packages/ckeditor5-ui/theme/components/label/label.css");class A extends f.a{constructor(e){super(e),this.set("text"),this.set("for"),this.id="ck-editor__label_"+Object(O.a)();const t=this.bindTemplate;this.setTemplate({tag:"label",attributes:{class:["ck","ck-label"],id:this.id,for:t.to("for")},children:[{text:t.to("text")}]})}}class T extends P{constructor(e){super(e),this.top=this.createCollection(),this.main=this.createCollection(),this._voiceLabelView=this._createVoiceLabel(),this.setTemplate({tag:"div",attributes:{class:["ck","ck-reset","ck-editor","ck-rounded-corners"],role:"application",dir:e.uiLanguageDirection,lang:e.uiLanguage,"aria-labelledby":this._voiceLabelView.id},children:[this._voiceLabelView,{tag:"div",attributes:{class:["ck","ck-editor__top","ck-reset_all"],role:"presentation"},children:this.top},{tag:"div",attributes:{class:["ck","ck-editor__main"],role:"presentation"},children:this.main}]})}_createVoiceLabel(){const e=this.t,t=new A;return t.text=e("Rich Text Editor"),t.extendTemplate({attributes:{class:"ck-voice-label"}}),t}}class C extends f.a{constructor(e,t,o){super(e),this.setTemplate({tag:"div",attributes:{class:["ck","ck-content","ck-editor__editable","ck-rounded-corners"],lang:e.contentLanguage,dir:e.contentLanguageDirection}}),this.name=null,this.set("isFocused",!1),this._editableElement=o,this._hasExternalElement=!!this._editableElement,this._editingView=t}render(){super.render(),this._hasExternalElement?this.template.apply(this.element=this._editableElement):this._editableElement=this.element,this.on("change:isFocused",()=>this._updateIsFocusedClasses()),this._updateIsFocusedClasses()}destroy(){this._hasExternalElement&&this.template.revert(this._editableElement),super.destroy()}_updateIsFocusedClasses(){const e=this._editingView;function t(t){e.change(o=>{const i=e.document.getRoot(t.name);o.addClass(t.isFocused?"ck-focused":"ck-blurred",i),o.removeClass(t.isFocused?"ck-blurred":"ck-focused",i)})}e.isRenderingInProgress?function o(i){e.once("change:isRenderingInProgress",(e,s,r)=>{r?o(i):t(i)})}(this):t(this)}}class E extends C{constructor(e,t,o){super(e,t,o),this.extendTemplate({attributes:{role:"textbox",class:"ck-editor__editable_inline"}})}render(){super.render();const e=this._editingView,t=this.t;e.change(o=>{const i=e.document.getRoot(this.name);o.setAttribute("aria-label",t("Rich Text Editor, %0",this.name),i)})}}o("./packages/ckeditor5-ui/theme/components/formheader/formheader.css");class S extends f.a{constructor(e,t={}){super(e);const o=this.bindTemplate;this.set("label",t.label||""),this.set("class",t.class||null),this.children=this.createCollection(),this.setTemplate({tag:"div",attributes:{class:["ck","ck-form__header",o.to("class")]},children:this.children});const i=new f.a(e);i.setTemplate({tag:"span",attributes:{class:["ck","ck-form__header__label"]},children:[{text:o.to("label")}]}),this.children.add(i)}}var R=o("./packages/ckeditor5-ui/src/icon/iconview.js");o("./packages/ckeditor5-ui/theme/components/inputtext/inputtext.css");class M extends f.a{constructor(e){super(e),this.set("value"),this.set("id"),this.set("placeholder"),this.set("isReadOnly",!1),this.set("hasError",!1),this.set("ariaDescribedById"),this.focusTracker=new k.a,this.bind("isFocused").to(this.focusTracker),this.set("isEmpty",!0);const t=this.bindTemplate;this.setTemplate({tag:"input",attributes:{type:"text",class:["ck","ck-input","ck-input-text",t.if("isFocused","ck-input_focused"),t.if("isEmpty","ck-input-text_empty"),t.if("hasError","ck-error")],id:t.to("id"),placeholder:t.to("placeholder"),readonly:t.to("isReadOnly"),"aria-invalid":t.if("hasError",!0),"aria-describedby":t.to("ariaDescribedById")},on:{input:t.to((...e)=>{this.fire("input",...e),this._updateIsEmpty()}),change:t.to(this._updateIsEmpty.bind(this))}})}render(){super.render(),this.focusTracker.add(this.element),this._setDomElementValue(this.value),this._updateIsEmpty(),this.on("change:value",(e,t,o)=>{this._setDomElementValue(o),this._updateIsEmpty()})}select(){this.element.select()}focus(){this.element.focus()}_updateIsEmpty(){this.isEmpty=!this.element.value}_setDomElementValue(e){this.element.value=e||0===e?e:""}}class N extends f.a{constructor(e){super(e);const t=this.bindTemplate;this.setTemplate({tag:"iframe",attributes:{class:["ck","ck-reset_all"],sandbox:"allow-same-origin allow-scripts"},on:{load:t.to("loaded")}})}render(){return new Promise(e=>{this.on("loaded",e),super.render()})}}o("./packages/ckeditor5-ui/theme/components/labeledfield/labeledfieldview.css");class I extends f.a{constructor(e,t){super(e);const o="ck-labeled-field-view-"+Object(O.a)(),i="ck-labeled-field-view-status-"+Object(O.a)();this.fieldView=t(this,o,i),this.set("label"),this.set("isEnabled",!0),this.set("isEmpty",!0),this.set("isFocused",!1),this.set("errorText",null),this.set("infoText",null),this.set("class"),this.set("placeholder"),this.labelView=this._createLabelView(o),this.statusView=this._createStatusView(i),this.bind("_statusText").to(this,"errorText",this,"infoText",(e,t)=>e||t);const s=this.bindTemplate;this.setTemplate({tag:"div",attributes:{class:["ck","ck-labeled-field-view",s.to("class"),s.if("isEnabled","ck-disabled",e=>!e),s.if("isEmpty","ck-labeled-field-view_empty"),s.if("isFocused","ck-labeled-field-view_focused"),s.if("placeholder","ck-labeled-field-view_placeholder"),s.if("errorText","ck-error")]},children:[{tag:"div",attributes:{class:["ck","ck-labeled-field-view__input-wrapper"]},children:[this.fieldView,this.labelView]},this.statusView]})}_createLabelView(e){const t=new A(this.locale);return t.for=e,t.bind("text").to(this,"label"),t}_createStatusView(e){const t=new f.a(this.locale),o=this.bindTemplate;return t.setTemplate({tag:"div",attributes:{class:["ck","ck-labeled-field-view__status",o.if("errorText","ck-labeled-field-view__status_error"),o.if("_statusText","ck-hidden",e=>!e)],id:e,role:o.if("errorText","alert")},children:[{text:o.to("_statusText")}]}),t}focus(){this.fieldView.focus()}}function z(e,t,o){const i=new M(e.locale);return i.set({id:t,ariaDescribedById:o}),i.bind("isReadOnly").to(e,"isEnabled",e=>!e),i.bind("hasError").to(e,"errorText",e=>!!e),i.on("input",()=>{e.errorText=null}),e.bind("isEmpty","isFocused","placeholder").to(i),i}function V(e,t,o){const i=Object(x.c)(e.locale);return i.set({id:t,ariaDescribedById:o}),i.bind("isEnabled").to(e),i}var D=o("./packages/ckeditor5-ui/src/list/listitemview.js"),B=o("./packages/ckeditor5-ui/src/list/listview.js"),F=o("./packages/ckeditor5-core/src/contextplugin.js");class L extends F.a{static get pluginName(){return"Notification"}init(){this.on("show:warning",(e,t)=>{window.alert(t.message)},{priority:"lowest"})}showSuccess(e,t={}){this._showNotification({message:e,type:"success",namespace:t.namespace,title:t.title})}showInfo(e,t={}){this._showNotification({message:e,type:"info",namespace:t.namespace,title:t.title})}showWarning(e,t={}){this._showNotification({message:e,type:"warning",namespace:t.namespace,title:t.title})}_showNotification(e){const t="show:"+e.type+(e.namespace?":"+e.namespace:"");this.fire(t,{message:e.message,type:e.type,title:e.title||""})}}var W=o("./packages/ckeditor5-utils/src/mix.js"),H=o("./packages/ckeditor5-utils/src/observablemixin.js"),q=o("./node_modules/lodash-es/assignIn.js");class ${constructor(e,t){t&&Object(q.a)(this,t),e&&this.set(e)}}Object(W.a)($,H.a);var U=o("./packages/ckeditor5-ui/src/panel/balloon/balloonpanelview.js"),K=o("./packages/ckeditor5-ui/src/panel/balloon/contextualballoon.js"),G=o("./packages/ckeditor5-utils/src/dom/global.js"),J=o("./packages/ckeditor5-utils/src/dom/tounit.js");o("./packages/ckeditor5-ui/theme/components/panel/stickypanel.css");const Y=Object(J.a)("px");class X extends f.a{constructor(e){super(e);const t=this.bindTemplate;this.set("isActive",!1),this.set("isSticky",!1),this.set("limiterElement",null),this.set("limiterBottomOffset",50),this.set("viewportTopOffset",0),this.set("_marginLeft",null),this.set("_isStickyToTheLimiter",!1),this.set("_hasViewportTopOffset",!1),this.content=this.createCollection(),this._contentPanelPlaceholder=new n.a({tag:"div",attributes:{class:["ck","ck-sticky-panel__placeholder"],style:{display:t.to("isSticky",e=>e?"block":"none"),height:t.to("isSticky",e=>e?Y(this._panelRect.height):null)}}}).render(),this._contentPanel=new n.a({tag:"div",attributes:{class:["ck","ck-sticky-panel__content",t.if("isSticky","ck-sticky-panel__content_sticky"),t.if("_isStickyToTheLimiter","ck-sticky-panel__content_sticky_bottom-limit")],style:{width:t.to("isSticky",e=>e?Y(this._contentPanelPlaceholder.getBoundingClientRect().width):null),top:t.to("_hasViewportTopOffset",e=>e?Y(this.viewportTopOffset):null),bottom:t.to("_isStickyToTheLimiter",e=>e?Y(this.limiterBottomOffset):null),marginLeft:t.to("_marginLeft")}},children:this.content}).render(),this.setTemplate({tag:"div",attributes:{class:["ck","ck-sticky-panel"]},children:[this._contentPanelPlaceholder,this._contentPanel]})}render(){super.render(),this._checkIfShouldBeSticky(),this.listenTo(G.a.window,"scroll",()=>{this._checkIfShouldBeSticky()}),this.listenTo(this,"change:isActive",()=>{this._checkIfShouldBeSticky()})}_checkIfShouldBeSticky(){const e=this._panelRect=this._contentPanel.getBoundingClientRect();let t;this.limiterElement?(t=this._limiterRect=this.limiterElement.getBoundingClientRect(),this.isSticky=this.isActive&&t.top<this.viewportTopOffset&&this._panelRect.height+this.limiterBottomOffset<t.height):this.isSticky=!1,this.isSticky?(this._isStickyToTheLimiter=t.bottom<e.height+this.limiterBottomOffset+this.viewportTopOffset,this._hasViewportTopOffset=!this._isStickyToTheLimiter&&!!this.viewportTopOffset,this._marginLeft=this._isStickyToTheLimiter?null:Y(-G.a.window.scrollX)):(this._isStickyToTheLimiter=!1,this._hasViewportTopOffset=!1,this._marginLeft=null)}}var Z=o("./packages/ckeditor5-ui/src/tooltip/tooltipview.js"),Q=o("./packages/ckeditor5-ui/src/toolbar/toolbarview.js"),ee=o("./packages/ckeditor5-ui/src/toolbar/toolbarseparatorview.js");function te({origin:e,originKeystrokeHandler:t,originFocusTracker:o,toolbar:i,beforeFocus:s,afterBlur:r}){o.add(i.element),t.set("Alt+F10",(e,t)=>{o.isFocused&&!i.focusTracker.isFocused&&(s&&s(),i.focus(),t())}),i.keystrokes.set("Esc",(t,o)=>{i.focusTracker.isFocused&&(e.focus(),r&&r(),o())})}var oe=o("./packages/ckeditor5-ui/src/toolbar/normalizetoolbarconfig.js"),ie=o("./packages/ckeditor5-core/src/plugin.js"),se=o("./packages/ckeditor5-utils/src/dom/rect.js"),re=o("./node_modules/lodash-es/debounce.js"),ne=o("./packages/ckeditor5-utils/src/dom/resizeobserver.js");const ae=Object(J.a)("px");class ce extends ie.a{static get pluginName(){return"BalloonToolbar"}static get requires(){return[K.a]}constructor(e){super(e),this._balloonConfig=Object(oe.a)(e.config.get("balloonToolbar")),this.toolbarView=this._createToolbarView(),this.focusTracker=new k.a,e.ui.once("ready",()=>{this.focusTracker.add(e.ui.getEditableElement()),this.focusTracker.add(this.toolbarView.element)}),this._resizeObserver=null,this._balloon=e.plugins.get(K.a),this._fireSelectionChangeDebounced=Object(re.a)(()=>this.fire("_selectionChangeDebounced"),200),this.decorate("show")}init(){const e=this.editor,t=e.model.document.selection;this.listenTo(this.focusTracker,"change:isFocused",(e,t,o)=>{const i=this._balloon.visibleView===this.toolbarView;!o&&i?this.hide():o&&this.show()}),this.listenTo(t,"change:range",(e,o)=>{(o.directChange||t.isCollapsed)&&this.hide(),this._fireSelectionChangeDebounced()}),this.listenTo(this,"_selectionChangeDebounced",()=>{this.editor.editing.view.document.isFocused&&this.show()}),this._balloonConfig.shouldNotGroupWhenFull||this.listenTo(e,"ready",()=>{const t=e.ui.view.editable.element;this._resizeObserver=new ne.a(t,()=>{this.toolbarView.maxWidth=ae(.9*new se.a(t).width)})}),this.listenTo(this.toolbarView,"groupedItemsUpdate",()=>{this._updatePosition()})}afterInit(){const e=this.editor.ui.componentFactory;this.toolbarView.fillFromConfig(this._balloonConfig,e)}_createToolbarView(){const e=!this._balloonConfig.shouldNotGroupWhenFull,t=new Q.a(this.editor.locale,{shouldGroupWhenFull:e,isFloating:!0});return t.render(),t}show(){const e=this.editor,t=e.model.document.selection,o=e.model.schema;this._balloon.hasView(this.toolbarView)||t.isCollapsed||function(e,t){if(1===e.rangeCount)return!1;return[...e.getRanges()].every(e=>{const o=e.getContainedElement();return o&&t.isSelectable(o)})}(t,o)||Array.from(this.toolbarView.items).every(e=>void 0!==e.isEnabled&&!e.isEnabled)||(this.listenTo(this.editor.ui,"update",()=>{this._updatePosition()}),this._balloon.add({view:this.toolbarView,position:this._getBalloonPositionData(),balloonClassName:"ck-toolbar-container"}))}hide(){this._balloon.hasView(this.toolbarView)&&(this.stopListening(this.editor.ui,"update"),this._balloon.remove(this.toolbarView))}_getBalloonPositionData(){const e=this.editor.editing.view,t=e.document,o=t.selection,i=t.selection.isBackward;return{target:()=>{const t=i?o.getFirstRange():o.getLastRange(),s=se.a.getDomRangeRects(e.domConverter.viewRangeToDom(t));return i?s[0]:(s.length>1&&0===s[s.length-1].width&&s.pop(),s[s.length-1])},positions:le(i)}}_updatePosition(){this._balloon.updatePosition(this._getBalloonPositionData())}destroy(){super.destroy(),this.stopListening(),this._fireSelectionChangeDebounced.cancel(),this.toolbarView.destroy(),this.focusTracker.destroy(),this._resizeObserver&&this._resizeObserver.destroy()}}function le(e){const t=U.a.defaultPositions;return e?[t.northWestArrowSouth,t.northWestArrowSouthWest,t.northWestArrowSouthEast,t.northWestArrowSouthMiddleEast,t.northWestArrowSouthMiddleWest,t.southWestArrowNorth,t.southWestArrowNorthWest,t.southWestArrowNorthEast,t.southWestArrowNorthMiddleWest,t.southWestArrowNorthMiddleEast]:[t.southEastArrowNorth,t.southEastArrowNorthEast,t.southEastArrowNorthWest,t.southEastArrowNorthMiddleEast,t.southEastArrowNorthMiddleWest,t.northEastArrowSouth,t.northEastArrowSouthEast,t.northEastArrowSouthWest,t.northEastArrowSouthMiddleEast,t.northEastArrowSouthMiddleWest]}var de=o("./packages/ckeditor5-core/theme/icons/pilcrow.svg");o("./packages/ckeditor5-ui/theme/components/toolbar/blocktoolbar.css");const ue=Object(J.a)("px");class he extends d.a{constructor(e){super(e);const t=this.bindTemplate;this.isVisible=!1,this.isToggleable=!0,this.set("top",0),this.set("left",0),this.extendTemplate({attributes:{class:"ck-block-toolbar-button",style:{top:t.to("top",e=>ue(e)),left:t.to("left",e=>ue(e))}}})}}var pe=o("./packages/ckeditor5-utils/src/dom/position.js");const ge=Object(J.a)("px");class fe extends ie.a{static get pluginName(){return"BlockToolbar"}constructor(e){super(e),this._blockToolbarConfig=Object(oe.a)(this.editor.config.get("blockToolbar")),this.toolbarView=this._createToolbarView(),this.panelView=this._createPanelView(),this.buttonView=this._createButtonView(),this._resizeObserver=null,Object(i.a)({emitter:this.panelView,contextElements:[this.panelView.element,this.buttonView.element],activator:()=>this.panelView.isVisible,callback:()=>this._hidePanel()})}init(){const e=this.editor;this.listenTo(e.model.document.selection,"change:range",(e,t)=>{t.directChange&&this._hidePanel()}),this.listenTo(e.ui,"update",()=>this._updateButton()),this.listenTo(e,"change:isReadOnly",()=>this._updateButton(),{priority:"low"}),this.listenTo(e.ui.focusTracker,"change:isFocused",()=>this._updateButton()),this.listenTo(this.buttonView,"change:isVisible",(e,t,o)=>{o?this.buttonView.listenTo(window,"resize",()=>this._updateButton()):(this.buttonView.stopListening(window,"resize"),this._hidePanel())})}afterInit(){const e=this.editor.ui.componentFactory,t=this._blockToolbarConfig;this.toolbarView.fillFromConfig(t,e);for(const e of this.toolbarView.items)e.on("execute",()=>this._hidePanel(!0),{priority:"high"});t.shouldNotGroupWhenFull||this.listenTo(this.editor,"ready",()=>{const e=this.editor.ui.view.editable.element;this._resizeObserver=new ne.a(e,()=>{this.toolbarView.maxWidth=this._getToolbarMaxWidth()})})}destroy(){super.destroy(),this.panelView.destroy(),this.buttonView.destroy(),this.toolbarView.destroy(),this._resizeObserver&&this._resizeObserver.destroy()}_createToolbarView(){const e=!this._blockToolbarConfig.shouldNotGroupWhenFull,t=new Q.a(this.editor.locale,{shouldGroupWhenFull:e,isFloating:!0});return t.focusTracker.on("change:isFocused",(e,t,o)=>{o||this._hidePanel()}),t}_createPanelView(){const e=this.editor,t=new U.a(e.locale);return t.content.add(this.toolbarView),t.class="ck-toolbar-container",e.ui.view.body.add(t),e.ui.focusTracker.add(t.element),this.toolbarView.keystrokes.set("Esc",(e,t)=>{this._hidePanel(!0),t()}),t}_createButtonView(){const e=this.editor,t=e.t,o=new he(e.locale);return o.set({label:t("Edit block"),icon:de.a,withText:!1}),o.bind("isOn").to(this.panelView,"isVisible"),o.bind("tooltip").to(this.panelView,"isVisible",e=>!e),this.listenTo(o,"execute",()=>{this.panelView.isVisible?this._hidePanel(!0):this._showPanel()}),e.ui.view.body.add(o),e.ui.focusTracker.add(o.element),o}_updateButton(){const e=this.editor,t=e.model,o=e.editing.view;if(!e.ui.focusTracker.isFocused)return void this._hideButton();if(e.isReadOnly)return void this._hideButton();const i=Array.from(t.document.selection.getSelectedBlocks())[0];if(!i||Array.from(this.toolbarView.items).every(e=>!e.isEnabled))return void this._hideButton();const s=o.domConverter.mapViewToDom(e.editing.mapper.toViewElement(i));this.buttonView.isVisible=!0,this._attachButtonToElement(s),this.panelView.isVisible&&this._showPanel()}_hideButton(){this.buttonView.isVisible=!1}_showPanel(){const e=this.panelView.isVisible;this.panelView.show(),this.toolbarView.maxWidth=this._getToolbarMaxWidth(),this.panelView.pin({target:this.buttonView.element,limiter:this.editor.ui.getEditableElement()}),e||this.toolbarView.items.get(0).focus()}_hidePanel(e){this.panelView.isVisible=!1,e&&this.editor.editing.view.focus()}_attachButtonToElement(e){const t=window.getComputedStyle(e),o=new se.a(this.editor.ui.getEditableElement()),i=parseInt(t.paddingTop,10),s=parseInt(t.lineHeight,10)||1.2*parseInt(t.fontSize,10),r=Object(pe.a)({element:this.buttonView.element,target:e,positions:[(e,t)=>{let r;return r="ltr"===this.editor.locale.uiLanguageDirection?o.left-t.width:o.right,{top:e.top+i+(s-t.height)/2,left:r}}]});this.buttonView.top=r.top,this.buttonView.left=r.left}_getToolbarMaxWidth(){const e=this.editor.ui.view.editable.element,t=new se.a(e),o=new se.a(this.buttonView.element),i="rtl"===this.editor.locale.uiLanguageDirection?o.left-t.right+o.width:t.left-o.left;return ge(t.width+i)}}},"./src/undo.js":function(e,t,o){"use strict";o.r(t),o.d(t,"Undo",(function(){return m})),o.d(t,"UndoEditing",(function(){return u})),o.d(t,"UndoUi",(function(){return f}));var i=o("./packages/ckeditor5-core/src/plugin.js"),s=o("./packages/ckeditor5-core/src/command.js"),r=o("./packages/ckeditor5-engine/src/model/operation/transform.js");class n extends s.a{constructor(e){super(e),this._stack=[],this._createdBatches=new WeakSet,this.refresh(),this.listenTo(e.data,"set",(e,t)=>{t[1]={...t[1]};const o=t[1];o.batchType||(o.batchType="transparent")},{priority:"high"}),this.listenTo(e.data,"set",(e,t)=>{"transparent"===t[1].batchType&&this.clearStack()})}refresh(){this.isEnabled=this._stack.length>0}addBatch(e){const t=this.editor.model.document.selection,o={ranges:t.hasOwnRange?Array.from(t.getRanges()):[],isBackward:t.isBackward};this._stack.push({batch:e,selection:o}),this.refresh()}clearStack(){this._stack=[],this.refresh()}_restoreSelection(e,t,o){const i=this.editor.model,s=i.document,r=[],n=e.map(e=>e.getTransformedByOperations(o)),l=n.flat();for(const e of n){const t=e.filter(e=>e.root!=s.graveyard).filter(e=>!c(e,l));t.length&&(a(t),r.push(t[0]))}r.length&&i.change(e=>{e.setSelection(r,{backward:t})})}_undo(e,t){const o=this.editor.model,i=o.document;this._createdBatches.add(t);const s=e.operations.slice().filter(e=>e.isDocumentOperation);s.reverse();for(const e of s){const s=e.baseVersion+1,n=Array.from(i.history.getOperations(s)),a=Object(r.a)([e.getReversed()],n,{useRelations:!0,document:this.editor.model.document,padWithNoOps:!1,forceWeakRemove:!0}).operationsA;for(const s of a)t.addOperation(s),o.applyOperation(s),i.history.setOperationAsUndone(e,s)}}}function a(e){e.sort((e,t)=>e.start.isBefore(t.start)?-1:1);for(let t=1;t<e.length;t++){const o=e[t-1].getJoined(e[t],!0);o&&(t--,e.splice(t,2,o))}}function c(e,t){return t.some(t=>t!==e&&t.containsRange(e,!0))}class l extends n{execute(e=null){const t=e?this._stack.findIndex(t=>t.batch==e):this._stack.length-1,o=this._stack.splice(t,1)[0],i=this.editor.model.createBatch("transparent");this.editor.model.enqueueChange(i,()=>{this._undo(o.batch,i);const e=this.editor.model.document.history.getOperations(o.batch.baseVersion);this._restoreSelection(o.selection.ranges,o.selection.isBackward,e),this.fire("revert",o.batch,i)}),this.refresh()}}class d extends n{execute(){const e=this._stack.pop(),t=this.editor.model.createBatch("transparent");this.editor.model.enqueueChange(t,()=>{const o=e.batch.operations[e.batch.operations.length-1].baseVersion+1,i=this.editor.model.document.history.getOperations(o);this._restoreSelection(e.selection.ranges,e.selection.isBackward,i),this._undo(e.batch,t)}),this.refresh()}}class u extends i.a{static get pluginName(){return"UndoEditing"}constructor(e){super(e),this._batchRegistry=new WeakSet}init(){const e=this.editor;this._undoCommand=new l(e),this._redoCommand=new d(e),e.commands.add("undo",this._undoCommand),e.commands.add("redo",this._redoCommand),this.listenTo(e.model,"applyOperation",(e,t)=>{const o=t[0];if(!o.isDocumentOperation)return;const i=o.batch,s=this._redoCommand._createdBatches.has(i),r=this._undoCommand._createdBatches.has(i);this._batchRegistry.has(i)||"transparent"==i.type&&!s&&!r||(s?this._undoCommand.addBatch(i):r||(this._undoCommand.addBatch(i),this._redoCommand.clearStack()),this._batchRegistry.add(i))},{priority:"highest"}),this.listenTo(this._undoCommand,"revert",(e,t,o)=>{this._redoCommand.addBatch(o)}),e.keystrokes.set("CTRL+Z","undo"),e.keystrokes.set("CTRL+Y","redo"),e.keystrokes.set("CTRL+SHIFT+Z","redo")}}var h=o("./packages/ckeditor5-ui/src/button/buttonview.js"),p='<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="m5.042 9.367 2.189 1.837a.75.75 0 0 1-.965 1.149l-3.788-3.18a.747.747 0 0 1-.21-.284.75.75 0 0 1 .17-.945L6.23 4.762a.75.75 0 1 1 .964 1.15L4.863 7.866h8.917A.75.75 0 0 1 14 7.9a4 4 0 1 1-1.477 7.718l.344-1.489a2.5 2.5 0 1 0 1.094-4.73l.008-.032H5.042z"/></svg>',g='<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="m14.958 9.367-2.189 1.837a.75.75 0 0 0 .965 1.149l3.788-3.18a.747.747 0 0 0 .21-.284.75.75 0 0 0-.17-.945L13.77 4.762a.75.75 0 1 0-.964 1.15l2.331 1.955H6.22A.75.75 0 0 0 6 7.9a4 4 0 1 0 1.477 7.718l-.344-1.489A2.5 2.5 0 1 1 6.039 9.4l-.008-.032h8.927z"/></svg>';class f extends i.a{static get pluginName(){return"UndoUI"}init(){const e=this.editor,t=e.locale,o=e.t,i="ltr"==t.uiLanguageDirection?p:g,s="ltr"==t.uiLanguageDirection?g:p;this._addButton("undo",o("Undo"),"CTRL+Z",i),this._addButton("redo",o("Redo"),"CTRL+Y",s)}_addButton(e,t,o,i){const s=this.editor;s.ui.componentFactory.add(e,r=>{const n=s.commands.get(e),a=new h.a(r);return a.set({label:t,icon:i,keystroke:o,tooltip:!0}),a.bind("isEnabled").to(n,"isEnabled"),this.listenTo(a,"execute",()=>{s.execute(e),s.editing.view.focus()}),a})}}class m extends i.a{static get requires(){return[u,f]}static get pluginName(){return"Undo"}}},"./src/upload.js":function(e,t,o){"use strict";o.r(t),o.d(t,"FileRepository",(function(){return u})),o.d(t,"FileDialogButtonView",(function(){return f})),o.d(t,"Base64UploadAdapter",(function(){return k})),o.d(t,"SimpleUploadAdapter",(function(){return _}));var i=o("./packages/ckeditor5-core/src/plugin.js"),s=o("./packages/ckeditor5-core/src/pendingactions.js"),r=o("./packages/ckeditor5-utils/src/ckeditorerror.js"),n=o("./packages/ckeditor5-utils/src/observablemixin.js"),a=o("./packages/ckeditor5-utils/src/collection.js"),c=o("./packages/ckeditor5-utils/src/mix.js");class l{constructor(){const e=new window.FileReader;this._reader=e,this._data=void 0,this.set("loaded",0),e.onprogress=e=>{this.loaded=e.loaded}}get error(){return this._reader.error}get data(){return this._data}read(e){const t=this._reader;return this.total=e.size,new Promise((o,i)=>{t.onload=()=>{const e=t.result;this._data=e,o(e)},t.onerror=()=>{i("error")},t.onabort=()=>{i("aborted")},this._reader.readAsDataURL(e)})}abort(){this._reader.abort()}}Object(c.a)(l,n.a);var d=o("./packages/ckeditor5-utils/src/uid.js");class u extends i.a{static get pluginName(){return"FileRepository"}static get requires(){return[s.a]}init(){this.loaders=new a.a,this.loaders.on("add",()=>this._updatePendingAction()),this.loaders.on("remove",()=>this._updatePendingAction()),this._loadersMap=new Map,this._pendingAction=null,this.set("uploaded",0),this.set("uploadTotal",null),this.bind("uploadedPercent").to(this,"uploaded",this,"uploadTotal",(e,t)=>t?e/t*100:0)}getLoader(e){return this._loadersMap.get(e)||null}createLoader(e){if(!this.createUploadAdapter)return Object(r.c)("filerepository-no-upload-adapter"),null;const t=new h(Promise.resolve(e),this.createUploadAdapter);return this.loaders.add(t),this._loadersMap.set(e,t),e instanceof Promise&&t.file.then(e=>{this._loadersMap.set(e,t)}).catch(()=>{}),t.on("change:uploaded",()=>{let e=0;for(const t of this.loaders)e+=t.uploaded;this.uploaded=e}),t.on("change:uploadTotal",()=>{let e=0;for(const t of this.loaders)t.uploadTotal&&(e+=t.uploadTotal);this.uploadTotal=e}),t}destroyLoader(e){const t=e instanceof h?e:this.getLoader(e);t._destroy(),this.loaders.remove(t),this._loadersMap.forEach((e,o)=>{e===t&&this._loadersMap.delete(o)})}_updatePendingAction(){const e=this.editor.plugins.get(s.a);if(this.loaders.length){if(!this._pendingAction){const t=this.editor.t,o=e=>`${t("Upload in progress")} ${parseInt(e)}%.`;this._pendingAction=e.add(o(this.uploadedPercent)),this._pendingAction.bind("message").to(this,"uploadedPercent",o)}}else e.remove(this._pendingAction),this._pendingAction=null}}Object(c.a)(u,n.a);class h{constructor(e,t){this.id=Object(d.a)(),this._filePromiseWrapper=this._createFilePromiseWrapper(e),this._adapter=t(this),this._reader=new l,this.set("status","idle"),this.set("uploaded",0),this.set("uploadTotal",null),this.bind("uploadedPercent").to(this,"uploaded",this,"uploadTotal",(e,t)=>t?e/t*100:0),this.set("uploadResponse",null)}get file(){return this._filePromiseWrapper?this._filePromiseWrapper.promise.then(e=>this._filePromiseWrapper?e:null):Promise.resolve(null)}get data(){return this._reader.data}read(){if("idle"!=this.status)throw new r.a("filerepository-read-wrong-status",this);return this.status="reading",this.file.then(e=>this._reader.read(e)).then(e=>{if("reading"!==this.status)throw this.status;return this.status="idle",e}).catch(e=>{if("aborted"===e)throw this.status="aborted","aborted";throw this.status="error",this._reader.error?this._reader.error:e})}upload(){if("idle"!=this.status)throw new r.a("filerepository-upload-wrong-status",this);return this.status="uploading",this.file.then(()=>this._adapter.upload()).then(e=>(this.uploadResponse=e,this.status="idle",e)).catch(e=>{if("aborted"===this.status)throw"aborted";throw this.status="error",e})}abort(){const e=this.status;this.status="aborted",this._filePromiseWrapper.isFulfilled?"reading"==e?this._reader.abort():"uploading"==e&&this._adapter.abort&&this._adapter.abort():(this._filePromiseWrapper.promise.catch(()=>{}),this._filePromiseWrapper.rejecter("aborted")),this._destroy()}_destroy(){this._filePromiseWrapper=void 0,this._reader=void 0,this._adapter=void 0,this.uploadResponse=void 0}_createFilePromiseWrapper(e){const t={};return t.promise=new Promise((o,i)=>{t.rejecter=i,t.isFulfilled=!1,e.then(e=>{t.isFulfilled=!0,o(e)}).catch(e=>{t.isFulfilled=!0,i(e)})}),t}}Object(c.a)(h,n.a);var p=o("./packages/ckeditor5-ui/src/button/buttonview.js"),g=o("./packages/ckeditor5-ui/src/view.js");class f extends g.a{constructor(e){super(e),this.buttonView=new p.a(e),this._fileInputView=new m(e),this._fileInputView.bind("acceptedType").to(this),this._fileInputView.bind("allowMultipleFiles").to(this),this._fileInputView.delegate("done").to(this),this.setTemplate({tag:"span",attributes:{class:"ck-file-dialog-button"},children:[this.buttonView,this._fileInputView]}),this.buttonView.on("execute",()=>{this._fileInputView.open()})}focus(){this.buttonView.focus()}}class m extends g.a{constructor(e){super(e),this.set("acceptedType"),this.set("allowMultipleFiles",!1);const t=this.bindTemplate;this.setTemplate({tag:"input",attributes:{class:["ck-hidden"],type:"file",tabindex:"-1",accept:t.to("acceptedType"),multiple:t.to("allowMultipleFiles")},on:{change:t.to(()=>{this.element&&this.element.files&&this.element.files.length&&this.fire("done",this.element.files),this.element.value=""})}})}open(){this.element.click()}}class k extends i.a{static get requires(){return[u]}static get pluginName(){return"Base64UploadAdapter"}init(){this.editor.plugins.get(u).createUploadAdapter=e=>new b(e)}}class b{constructor(e){this.loader=e}upload(){return new Promise((e,t)=>{const o=this.reader=new window.FileReader;o.addEventListener("load",()=>{e({default:o.result})}),o.addEventListener("error",e=>{t(e)}),o.addEventListener("abort",()=>{t()}),this.loader.file.then(e=>{o.readAsDataURL(e)})})}abort(){this.reader.abort()}}class _ extends i.a{static get requires(){return[u]}static get pluginName(){return"SimpleUploadAdapter"}init(){const e=this.editor.config.get("simpleUpload");e&&(e.uploadUrl?this.editor.plugins.get(u).createUploadAdapter=t=>new w(t,e):Object(r.c)("simple-upload-adapter-missing-uploadurl"))}}class w{constructor(e,t){this.loader=e,this.options=t}upload(){return this.loader.file.then(e=>new Promise((t,o)=>{this._initRequest(),this._initListeners(t,o,e),this._sendRequest(e)}))}abort(){this.xhr&&this.xhr.abort()}_initRequest(){const e=this.xhr=new XMLHttpRequest;e.open("POST",this.options.uploadUrl,!0),e.responseType="json"}_initListeners(e,t,o){const i=this.xhr,s=this.loader,r=`Couldn't upload file: ${o.name}.`;i.addEventListener("error",()=>t(r)),i.addEventListener("abort",()=>t()),i.addEventListener("load",()=>{const o=i.response;if(!o||o.error)return t(o&&o.error&&o.error.message?o.error.message:r);const s=o.url?{default:o.url}:o.urls;e({...o,urls:s})}),i.upload&&i.upload.addEventListener("progress",e=>{e.lengthComputable&&(s.uploadTotal=e.total,s.uploaded=e.loaded)})}_sendRequest(e){const t=this.options.headers||{},o=this.options.withCredentials||!1;for(const e of Object.keys(t))this.xhr.setRequestHeader(e,t[e]);this.xhr.withCredentials=o;const i=new FormData;i.append("upload",e),this.xhr.send(i)}}},"./src/utils.js":function(e,t,o){"use strict";o.r(t);var i=o("./packages/ckeditor5-utils/src/index.js");o.d(t,"env",(function(){return i.n})),o.d(t,"diff",(function(){return i.m})),o.d(t,"mix",(function(){return i.A})),o.d(t,"EmitterMixin",(function(){return i.e})),o.d(t,"ObservableMixin",(function(){return i.i})),o.d(t,"CKEditorError",(function(){return i.a})),o.d(t,"logError",(function(){return i.y})),o.d(t,"logWarning",(function(){return i.z})),o.d(t,"ElementReplacer",(function(){return i.d})),o.d(t,"createElement",(function(){return i.l})),o.d(t,"DomEmitterMixin",(function(){return i.c})),o.d(t,"global",(function(){return i.u})),o.d(t,"getDataFromElement",(function(){return i.q})),o.d(t,"Rect",(function(){return i.j})),o.d(t,"ResizeObserver",(function(){return i.k})),o.d(t,"setDataInElement",(function(){return i.D})),o.d(t,"toUnit",(function(){return i.G})),o.d(t,"keyCodes",(function(){return i.x})),o.d(t,"getCode",(function(){return i.p})),o.d(t,"parseKeystroke",(function(){return i.B})),o.d(t,"getEnvKeystrokeText",(function(){return i.r})),o.d(t,"isArrowKeyCode",(function(){return i.v})),o.d(t,"getLocalizedArrowKeyCodeDirection",(function(){return i.t})),o.d(t,"isForwardArrowKeyCode",(function(){return i.w})),o.d(t,"getLanguageDirection",(function(){return i.s})),o.d(t,"Locale",(function(){return i.h})),o.d(t,"Collection",(function(){return i.b})),o.d(t,"first",(function(){return i.o})),o.d(t,"FocusTracker",(function(){return i.f})),o.d(t,"KeystrokeHandler",(function(){return i.g})),o.d(t,"toArray",(function(){return i.E})),o.d(t,"toMap",(function(){return i.F})),o.d(t,"priorities",(function(){return i.C})),o.d(t,"uid",(function(){return i.H})),o.d(t,"version",(function(){return i.I}))},"./src/widget.js":function(e,t,o){"use strict";o.r(t),o.d(t,"Widget",(function(){return i.a})),o.d(t,"WidgetToolbarRepository",(function(){return d})),o.d(t,"WidgetResize",(function(){return O})),o.d(t,"WidgetTypeAround",(function(){return A.a})),o.d(t,"WIDGET_CLASS_NAME",(function(){return c.a})),o.d(t,"WIDGET_SELECTED_CLASS_NAME",(function(){return c.b})),o.d(t,"isWidget",(function(){return c.e})),o.d(t,"toWidget",(function(){return c.h})),o.d(t,"setHighlightHandling",(function(){return c.f})),o.d(t,"setLabel",(function(){return c.g})),o.d(t,"getLabel",(function(){return c.d})),o.d(t,"toWidgetEditable",(function(){return c.i})),o.d(t,"findOptimalInsertionRange",(function(){return c.c})),o.d(t,"viewToModelPositionOutsideModelElement",(function(){return c.j}));var i=o("./packages/ckeditor5-widget/src/widget.js"),s=o("./packages/ckeditor5-core/src/plugin.js"),r=o("./packages/ckeditor5-ui/src/panel/balloon/contextualballoon.js"),n=o("./packages/ckeditor5-ui/src/toolbar/toolbarview.js"),a=o("./packages/ckeditor5-ui/src/panel/balloon/balloonpanelview.js"),c=o("./packages/ckeditor5-widget/src/utils.js"),l=o("./packages/ckeditor5-utils/src/ckeditorerror.js");class d extends s.a{static get requires(){return[r.a]}static get pluginName(){return"WidgetToolbarRepository"}init(){const e=this.editor;if(e.plugins.has("BalloonToolbar")){const t=e.plugins.get("BalloonToolbar");this.listenTo(t,"show",t=>{(function(e){const t=e.getSelectedElement();return!(!t||!Object(c.e)(t))})(e.editing.view.document.selection)&&t.stop()},{priority:"high"})}this._toolbarDefinitions=new Map,this._balloon=this.editor.plugins.get("ContextualBalloon"),this.on("change:isEnabled",()=>{this._updateToolbarsVisibility()}),this.listenTo(e.ui,"update",()=>{this._updateToolbarsVisibility()}),this.listenTo(e.ui.focusTracker,"change:isFocused",()=>{this._updateToolbarsVisibility()},{priority:"low"})}destroy(){super.destroy();for(const e of this._toolbarDefinitions.values())e.view.destroy()}register(e,{ariaLabel:t,items:o,getRelatedElement:i,balloonClassName:s="ck-toolbar-container"}){if(!o.length)return void Object(l.c)("widget-toolbar-no-items",{toolbarId:e});const r=this.editor,a=r.t,c=new n.a(r.locale);if(c.ariaLabel=t||a("Widget toolbar"),this._toolbarDefinitions.has(e))throw new l.a("widget-toolbar-duplicated",this,{toolbarId:e});c.fillFromConfig(o,r.ui.componentFactory),this._toolbarDefinitions.set(e,{view:c,getRelatedElement:i,balloonClassName:s})}_updateToolbarsVisibility(){let e=0,t=null,o=null;for(const i of this._toolbarDefinitions.values()){const s=i.getRelatedElement(this.editor.editing.view.document.selection);if(this.isEnabled&&s)if(this.editor.ui.focusTracker.isFocused){const r=s.getAncestors().length;r>e&&(e=r,t=s,o=i)}else this._isToolbarVisible(i)&&this._hideToolbar(i);else this._isToolbarInBalloon(i)&&this._hideToolbar(i)}o&&this._showToolbar(o,t)}_hideToolbar(e){this._balloon.remove(e.view),this.stopListening(this._balloon,"change:visibleView")}_showToolbar(e,t){this._isToolbarVisible(e)?u(this.editor,t):this._isToolbarInBalloon(e)||(this._balloon.add({view:e.view,position:h(this.editor,t),balloonClassName:e.balloonClassName}),this.listenTo(this._balloon,"change:visibleView",()=>{for(const e of this._toolbarDefinitions.values())if(this._isToolbarVisible(e)){const t=e.getRelatedElement(this.editor.editing.view.document.selection);u(this.editor,t)}}))}_isToolbarVisible(e){return this._balloon.visibleView===e.view}_isToolbarInBalloon(e){return this._balloon.hasView(e.view)}}function u(e,t){const o=e.plugins.get("ContextualBalloon"),i=h(e,t);o.updatePosition(i)}function h(e,t){const o=e.editing.view,i=a.a.defaultPositions;return{target:o.domConverter.mapViewToDom(t),positions:[i.northArrowSouth,i.northArrowSouthWest,i.northArrowSouthEast,i.southArrowNorth,i.southArrowNorthWest,i.southArrowNorthEast,i.viewportStickyNorth]}}var p=o("./packages/ckeditor5-ui/src/template.js"),g=o("./packages/ckeditor5-utils/src/dom/rect.js"),f=o("./packages/ckeditor5-utils/src/comparearrays.js"),m=o("./packages/ckeditor5-utils/src/observablemixin.js"),k=o("./packages/ckeditor5-utils/src/mix.js");class b{constructor(e){this.set("activeHandlePosition",null),this.set("proposedWidthPercents",null),this.set("proposedWidth",null),this.set("proposedHeight",null),this.set("proposedHandleHostWidth",null),this.set("proposedHandleHostHeight",null),this._options=e,this._referenceCoordinates=null}begin(e,t,o){const i=new g.a(t);this.activeHandlePosition=function(e){const t=["top-left","top-right","bottom-right","bottom-left"];for(const o of t)if(e.classList.contains("ck-widget__resizer__handle-"+o))return o}(e),this._referenceCoordinates=function(e,t){const o=new g.a(e),i=t.split("-"),s={x:"right"==i[1]?o.right:o.left,y:"bottom"==i[0]?o.bottom:o.top};return s.x+=e.ownerDocument.defaultView.scrollX,s.y+=e.ownerDocument.defaultView.scrollY,s}(t,function(e){const t=e.split("-"),o={top:"bottom",bottom:"top",left:"right",right:"left"};return`${o[t[0]]}-${o[t[1]]}`}(this.activeHandlePosition)),this.originalWidth=i.width,this.originalHeight=i.height,this.aspectRatio=i.width/i.height;const s=o.style.width;s&&s.match(/^\d+(\.\d*)?%$/)?this.originalWidthPercents=parseFloat(s):this.originalWidthPercents=function(e,t){const o=e.parentElement,i=parseFloat(o.ownerDocument.defaultView.getComputedStyle(o).width);return t.width/i*100}(o,i)}update(e){this.proposedWidth=e.width,this.proposedHeight=e.height,this.proposedWidthPercents=e.widthPercents,this.proposedHandleHostWidth=e.handleHostWidth,this.proposedHandleHostHeight=e.handleHostHeight}}Object(k.a)(b,m.a);var _=o("./packages/ckeditor5-ui/src/view.js");class w extends _.a{constructor(){super();const e=this.bindTemplate;this.setTemplate({tag:"div",attributes:{class:["ck","ck-size-view",e.to("_viewPosition",e=>e?"ck-orientation-"+e:"")],style:{display:e.if("_isVisible","none",e=>!e)}},children:[{text:e.to("_label")}]})}_bindToState(e,t){this.bind("_isVisible").to(t,"proposedWidth",t,"proposedHeight",(e,t)=>null!==e&&null!==t),this.bind("_label").to(t,"proposedHandleHostWidth",t,"proposedHandleHostHeight",t,"proposedWidthPercents",(t,o,i)=>"px"===e.unit?`${t}×${o}`:i+"%"),this.bind("_viewPosition").to(t,"activeHandlePosition",t,"proposedHandleHostWidth",t,"proposedHandleHostHeight",(e,t,o)=>t<50||o<50?"above-center":e)}_dismiss(){this.unbind(),this._isVisible=!1}}class v{constructor(e){this._options=e,this._viewResizerWrapper=null,this.set("isEnabled",!0),this.decorate("begin"),this.decorate("cancel"),this.decorate("commit"),this.decorate("updateSize"),this.on("commit",e=>{this.state.proposedWidth||this.state.proposedWidthPercents||(this._cleanup(),e.stop())},{priority:"high"}),this.on("change:isEnabled",()=>{this.isEnabled&&this.redraw()})}attach(){const e=this,t=this._options.viewElement;this._options.editor.editing.view.change(o=>{const i=o.createUIElement("div",{class:"ck ck-reset_all ck-widget__resizer"},(function(t){const o=this.toDomElement(t);return e._appendHandles(o),e._appendSizeUI(o),e.on("change:isEnabled",(e,t,i)=>{o.style.display=i?"":"none"}),o.style.display=e.isEnabled?"":"none",o}));o.insert(o.createPositionAt(t,"end"),i),o.addClass("ck-widget_with-resizer",t),this._viewResizerWrapper=i})}begin(e){this.state=new b(this._options),this._sizeView._bindToState(this._options,this.state),this._initialViewWidth=this._options.viewElement.getStyle("width"),this.state.begin(e,this._getHandleHost(),this._getResizeHost())}updateSize(e){const t=this._proposeNewSize(e);this._options.editor.editing.view.change(e=>{const o=this._options.unit||"%",i=("%"===o?t.widthPercents:t.width)+o;e.setStyle("width",i,this._options.viewElement)});const o=this._getHandleHost(),i=new g.a(o);t.handleHostWidth=Math.round(i.width),t.handleHostHeight=Math.round(i.height);const s=new g.a(o);t.width=Math.round(s.width),t.height=Math.round(s.height),this.redraw(i),this.state.update(t)}commit(){const e=this._options.unit||"%",t=("%"===e?this.state.proposedWidthPercents:this.state.proposedWidth)+e;this._options.editor.editing.view.change(()=>{this._cleanup(),this._options.onCommit(t)})}cancel(){this._cleanup()}destroy(){this.cancel()}redraw(e){const t=this._domResizerWrapper;if(!((o=t)&&o.ownerDocument&&o.ownerDocument.contains(o)))return;var o;const i=t.parentElement,s=this._getHandleHost(),r=this._viewResizerWrapper,n=[r.getStyle("width"),r.getStyle("height"),r.getStyle("left"),r.getStyle("top")];let a;if(i.isSameNode(s)){const t=e||new g.a(s);a=[t.width+"px",t.height+"px",void 0,void 0]}else a=[s.offsetWidth+"px",s.offsetHeight+"px",s.offsetLeft+"px",s.offsetTop+"px"];"same"!==Object(f.a)(n,a)&&this._options.editor.editing.view.change(e=>{e.setStyle({width:a[0],height:a[1],left:a[2],top:a[3]},r)})}containsHandle(e){return this._domResizerWrapper.contains(e)}static isResizeHandle(e){return e.classList.contains("ck-widget__resizer__handle")}_cleanup(){this._sizeView._dismiss();this._options.editor.editing.view.change(e=>{e.setStyle("width",this._initialViewWidth,this._options.viewElement)})}_proposeNewSize(e){const t=this.state,o={x:(i=e).pageX,y:i.pageY};var i;const s=!this._options.isCentered||this._options.isCentered(this),r={x:t._referenceCoordinates.x-(o.x+t.originalWidth),y:o.y-t.originalHeight-t._referenceCoordinates.y};s&&t.activeHandlePosition.endsWith("-right")&&(r.x=o.x-(t._referenceCoordinates.x+t.originalWidth)),s&&(r.x*=2);const n={width:Math.abs(t.originalWidth+r.x),height:Math.abs(t.originalHeight+r.y)};n.dominant=n.width/t.aspectRatio>n.height?"width":"height",n.max=n[n.dominant];const a={width:n.width,height:n.height};return"width"==n.dominant?a.height=a.width/t.aspectRatio:a.width=a.height*t.aspectRatio,{width:Math.round(a.width),height:Math.round(a.height),widthPercents:Math.min(Math.round(t.originalWidthPercents/t.originalWidth*a.width*100)/100,100)}}_getResizeHost(){const e=this._domResizerWrapper.parentElement;return this._options.getResizeHost(e)}_getHandleHost(){const e=this._domResizerWrapper.parentElement;return this._options.getHandleHost(e)}get _domResizerWrapper(){return this._options.editor.editing.view.domConverter.mapViewToDom(this._viewResizerWrapper)}_appendHandles(e){const t=["top-left","top-right","bottom-right","bottom-left"];for(const i of t)e.appendChild(new p.a({tag:"div",attributes:{class:"ck-widget__resizer__handle "+(o=i,"ck-widget__resizer__handle-"+o)}}).render());var o}_appendSizeUI(e){this._sizeView=new w,this._sizeView.render(),e.appendChild(this._sizeView.element)}}Object(k.a)(v,m.a);var y=o("./packages/ckeditor5-utils/src/dom/emittermixin.js"),j=o("./packages/ckeditor5-utils/src/dom/global.js"),x=o("./packages/ckeditor5-engine/src/view/observer/mouseobserver.js"),P=o("./node_modules/lodash-es/throttle.js");o("./packages/ckeditor5-widget/theme/widgetresize.css");class O extends s.a{static get pluginName(){return"WidgetResize"}init(){const e=this.editor.editing,t=j.a.window.document;this.set("visibleResizer",null),this.set("_activeResizer",null),this._resizers=new Map,e.view.addObserver(x.a),this._observer=Object.create(y.a),this.listenTo(e.view.document,"mousedown",this._mouseDownListener.bind(this),{priority:"high"}),this._observer.listenTo(t,"mousemove",this._mouseMoveListener.bind(this)),this._observer.listenTo(t,"mouseup",this._mouseUpListener.bind(this));const o=()=>{this.visibleResizer&&this.visibleResizer.redraw()};this._redrawFocusedResizerThrottled=Object(P.a)(o,200),this.on("change:visibleResizer",o),this.editor.ui.on("update",this._redrawFocusedResizerThrottled),this.editor.model.document.on("change",()=>{for(const[e,t]of this._resizers)e.isAttached()||(this._resizers.delete(e),t.destroy())},{priority:"lowest"}),this._observer.listenTo(j.a.window,"resize",this._redrawFocusedResizerThrottled);const i=this.editor.editing.view.document.selection;i.on("change",()=>{const e=i.getSelectedElement();this.visibleResizer=this.getResizerByViewElement(e)||null})}destroy(){this._observer.stopListening();for(const e of this._resizers.values())e.destroy();this._redrawFocusedResizerThrottled.cancel()}attachTo(e){const t=new v(e),o=this.editor.plugins;if(t.attach(),o.has("WidgetToolbarRepository")){const e=o.get("WidgetToolbarRepository");t.on("begin",()=>{e.forceDisabled("resize")},{priority:"lowest"}),t.on("cancel",()=>{e.clearForceDisabled("resize")},{priority:"highest"}),t.on("commit",()=>{e.clearForceDisabled("resize")},{priority:"highest"})}this._resizers.set(e.viewElement,t);const i=this.editor.editing.view.document.selection.getSelectedElement();return this.getResizerByViewElement(i)==t&&(this.visibleResizer=t),t}getResizerByViewElement(e){return this._resizers.get(e)}_getResizerByHandle(e){for(const t of this._resizers.values())if(t.containsHandle(e))return t}_mouseDownListener(e,t){const o=t.domTarget;v.isResizeHandle(o)&&(this._activeResizer=this._getResizerByHandle(o),this._activeResizer&&(this._activeResizer.begin(o),e.stop(),t.preventDefault()))}_mouseMoveListener(e,t){this._activeResizer&&this._activeResizer.updateSize(t)}_mouseUpListener(){this._activeResizer&&(this._activeResizer.commit(),this._activeResizer=null)}}Object(k.a)(O,m.a);var A=o("./packages/ckeditor5-widget/src/widgettypearound/widgettypearound.js")},0:function(e,t,o){e.exports=o}}),function(e){e.CKEditor5=e.CKEditor5||{};const t=["utils","core","engine","ui","clipboard","enter","paragraph","select-all","typing","undo","upload","widget"];for(const o of t){const t=o.replace(/-([a-z])/g,(e,t)=>t.toUpperCase());e.CKEditor5[t]=e.CKEditor5.dll(`./src/${o}.js`)}}(window);
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/editor-classic.js b/core/assets/vendor/ckeditor5/editor-classic.js
new file mode 100644
index 000000000000..9e83af7c8b1d
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/editor-classic.js
@@ -0,0 +1,5 @@
+/*!
+ * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md.
+ */
+window.CKEditor5=window.CKEditor5||{},window.CKEditor5.editorClassic=function(e){var t={};function r(o){if(t[o])return t[o].exports;var n=t[o]={i:o,l:!1,exports:{}};return e[o].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return r.m=e,r.c=t,r.d=function(e,t,o){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(r.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)r.d(o,n,function(t){return e[t]}.bind(null,n));return o},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=10)}([function(e,t,r){e.exports=r(3)("./src/ui.js")},function(e,t,r){e.exports=r(3)("./src/core.js")},function(e,t,r){e.exports=r(3)("./src/utils.js")},function(e,t){e.exports=CKEditor5.dll},function(e,t,r){e.exports=r(3)("./src/engine.js")},function(e,t,r){"use strict";(function(e){var r="object"==typeof e&&e&&e.Object===Object&&e;t.a=r}).call(this,r(9))},function(e,t,r){var o=r(7),n=r(8);"string"==typeof(n=n.__esModule?n.default:n)&&(n=[[e.i,n,""]]);var i={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};o(n,i);e.exports=n.locals||{}},function(e,t,r){"use strict";var o,n=function(){return void 0===o&&(o=Boolean(window&&document&&document.all&&!window.atob)),o},i=function(){var e={};return function(t){if(void 0===e[t]){var r=document.querySelector(t);if(window.HTMLIFrameElement&&r instanceof window.HTMLIFrameElement)try{r=r.contentDocument.head}catch(e){r=null}e[t]=r}return e[t]}}(),c=[];function a(e){for(var t=-1,r=0;r<c.length;r++)if(c[r].identifier===e){t=r;break}return t}function s(e,t){for(var r={},o=[],n=0;n<e.length;n++){var i=e[n],s=t.base?i[0]+t.base:i[0],l=r[s]||0,d="".concat(s," ").concat(l);r[s]=l+1;var u=a(d),f={css:i[1],media:i[2],sourceMap:i[3]};-1!==u?(c[u].references++,c[u].updater(f)):c.push({identifier:d,updater:k(f,t),references:1}),o.push(d)}return o}function l(e){var t=document.createElement("style"),o=e.attributes||{};if(void 0===o.nonce){var n=r.nc;n&&(o.nonce=n)}if(Object.keys(o).forEach((function(e){t.setAttribute(e,o[e])})),"function"==typeof e.insert)e.insert(t);else{var c=i(e.insert||"head");if(!c)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");c.appendChild(t)}return t}var d,u=(d=[],function(e,t){return d[e]=t,d.filter(Boolean).join("\n")});function f(e,t,r,o){var n=r?"":o.media?"@media ".concat(o.media," {").concat(o.css,"}"):o.css;if(e.styleSheet)e.styleSheet.cssText=u(t,n);else{var i=document.createTextNode(n),c=e.childNodes;c[t]&&e.removeChild(c[t]),c.length?e.insertBefore(i,c[t]):e.appendChild(i)}}function b(e,t,r){var o=r.css,n=r.media,i=r.sourceMap;if(n?e.setAttribute("media",n):e.removeAttribute("media"),i&&"undefined"!=typeof btoa&&(o+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i))))," */")),e.styleSheet)e.styleSheet.cssText=o;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(o))}}var p=null,h=0;function k(e,t){var r,o,n;if(t.singleton){var i=h++;r=p||(p=l(t)),o=f.bind(null,r,i,!1),n=f.bind(null,r,i,!0)}else r=l(t),o=b.bind(null,r,t),n=function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(r)};return o(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;o(e=t)}else n()}}e.exports=function(e,t){(t=t||{}).singleton||"boolean"==typeof t.singleton||(t.singleton=n());var r=s(e=e||[],t);return function(e){if(e=e||[],"[object Array]"===Object.prototype.toString.call(e)){for(var o=0;o<r.length;o++){var n=a(r[o]);c[n].references--}for(var i=s(e,t),l=0;l<r.length;l++){var d=a(r[l]);0===c[d].references&&(c[d].updater(),c.splice(d,1))}r=i}}}},function(e,t){e.exports=".ck.ck-editor{position:relative}.ck.ck-editor .ck-editor__top .ck-sticky-panel .ck-toolbar{z-index:var(--ck-z-modal)}.ck.ck-editor__top .ck-sticky-panel .ck-toolbar{border-radius:0}.ck-rounded-corners .ck.ck-editor__top .ck-sticky-panel .ck-toolbar,.ck.ck-editor__top .ck-sticky-panel .ck-toolbar.ck-rounded-corners{border-radius:var(--ck-border-radius);border-bottom-left-radius:0;border-bottom-right-radius:0}.ck.ck-editor__top .ck-sticky-panel .ck-toolbar{border-bottom-width:0}.ck.ck-editor__top .ck-sticky-panel .ck-sticky-panel__content_sticky .ck-toolbar{border-bottom-width:1px;border-radius:0}.ck-rounded-corners .ck.ck-editor__top .ck-sticky-panel .ck-sticky-panel__content_sticky .ck-toolbar,.ck.ck-editor__top .ck-sticky-panel .ck-sticky-panel__content_sticky .ck-toolbar.ck-rounded-corners{border-radius:var(--ck-border-radius);border-radius:0}.ck.ck-editor__main>.ck-editor__editable{background:var(--ck-color-base-background);border-radius:0}.ck-rounded-corners .ck.ck-editor__main>.ck-editor__editable,.ck.ck-editor__main>.ck-editor__editable.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:0;border-top-right-radius:0}.ck.ck-editor__main>.ck-editor__editable:not(.ck-focused){border-color:var(--ck-color-base-border)}"},function(e,t){var r;r=function(){return this}();try{r=r||new Function("return this")()}catch(e){"object"==typeof window&&(r=window)}e.exports=r},function(e,t,r){"use strict";r.r(t),r.d(t,"ClassicEditor",(function(){return P}));var o=r(1),n=r(2);var i=function(e){return null!=e&&"object"==typeof e},c=r(5),a="object"==typeof self&&self&&self.Object===Object&&self,s=(c.a||a||Function("return this")()).Symbol,l=Object.prototype,d=l.hasOwnProperty,u=l.toString,f=s?s.toStringTag:void 0;var b=function(e){var t=d.call(e,f),r=e[f];try{e[f]=void 0;var o=!0}catch(e){}var n=u.call(e);return o&&(t?e[f]=r:delete e[f]),n},p=Object.prototype.toString;var h=function(e){return p.call(e)},k=s?s.toStringTag:void 0;var m=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":k&&k in Object(e)?b(e):h(e)};var v=function(e,t){return function(r){return e(t(r))}}(Object.getPrototypeOf,Object),y=Function.prototype,g=Object.prototype,_=y.toString,w=g.hasOwnProperty,j=_.call(Object);var O=function(e){if(!i(e)||"[object Object]"!=m(e))return!1;var t=v(e);if(null===t)return!0;var r=w.call(t,"constructor")&&t.constructor;return"function"==typeof r&&r instanceof r&&_.call(r)==j};var x=function(e){return i(e)&&1===e.nodeType&&!O(e)},T=r(0),E=r(4);class C extends o.EditorUI{constructor(e,t){super(e),this.view=t,this._toolbarConfig=Object(T.normalizeToolbarConfig)(e.config.get("toolbar")),this._elementReplacer=new n.ElementReplacer}get element(){return this.view.element}init(e){const t=this.editor,r=this.view,o=t.editing.view,n=r.editable,i=o.document.getRoot();n.name=i.rootName,r.render();const c=n.element;this.setEditableElement(n.name,c),this.focusTracker.add(c),r.editable.bind("isFocused").to(this.focusTracker),o.attachDomRoot(c),e&&this._elementReplacer.replace(e,this.element),this._initPlaceholder(),this._initToolbar(),this.fire("ready")}destroy(){const e=this.view,t=this.editor.editing.view;this._elementReplacer.restore(),t.detachDomRoot(e.editable.name),e.destroy(),super.destroy()}_initToolbar(){const e=this.editor,t=this.view,r=e.editing.view;t.stickyPanel.bind("isActive").to(this.focusTracker,"isFocused"),t.stickyPanel.limiterElement=t.element,t.stickyPanel.bind("viewportTopOffset").to(this,"viewportOffset",({top:e})=>e),t.toolbar.fillFromConfig(this._toolbarConfig,this.componentFactory),Object(T.enableToolbarKeyboardFocus)({origin:r,originFocusTracker:this.focusTracker,originKeystrokeHandler:e.keystrokes,toolbar:t.toolbar})}_initPlaceholder(){const e=this.editor,t=e.editing.view,r=t.document.getRoot(),o=e.sourceElement,n=e.config.get("placeholder")||o&&"textarea"===o.tagName.toLowerCase()&&o.getAttribute("placeholder");n&&Object(E.enablePlaceholder)({view:t,element:r,text:n,isDirectHost:!1,keepOnFocus:!0})}}r(6);class S extends T.BoxedEditorUIView{constructor(e,t,r={}){super(e),this.stickyPanel=new T.StickyPanelView(e),this.toolbar=new T.ToolbarView(e,{shouldGroupWhenFull:r.shouldToolbarGroupWhenFull}),this.editable=new T.InlineEditableUIView(e,t)}render(){super.render(),this.stickyPanel.content.add(this.toolbar),this.top.add(this.stickyPanel),this.main.add(this.editable)}}class P extends o.Editor{constructor(e,t){super(t),x(e)&&(this.sourceElement=e),this.model.document.createRoot();const r=!this.config.get("toolbar.shouldNotGroupWhenFull"),n=new S(this.locale,this.editing.view,{shouldToolbarGroupWhenFull:r});this.ui=new C(this,n),Object(o.attachToForm)(this)}destroy(){return this.sourceElement&&this.updateSourceElement(),this.ui.destroy(),super.destroy()}static create(e,t={}){return new Promise(r=>{const o=new this(e,t);r(o.initPlugins().then(()=>o.ui.init(x(e)?e:null)).then(()=>{if(!x(e)&&t.initialData)throw new n.CKEditorError("editor-create-initial-data",null);const r=void 0!==t.initialData?t.initialData:function(e){return x(e)?Object(n.getDataFromElement)(e):e}(e);return o.data.init(r)}).then(()=>o.fire("ready")).then(()=>o))})}}Object(n.mix)(P,o.DataApiMixin),Object(n.mix)(P,o.ElementApiMixin)}]);
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/editor-decoupled.js b/core/assets/vendor/ckeditor5/editor-decoupled.js
new file mode 100644
index 000000000000..702a29d569d2
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/editor-decoupled.js
@@ -0,0 +1,5 @@
+/*!
+ * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md.
+ */
+window.CKEditor5=window.CKEditor5||{},window.CKEditor5.editorDecoupled=function(t){var e={};function o(r){if(e[r])return e[r].exports;var n=e[r]={i:r,l:!1,exports:{}};return t[r].call(n.exports,n,n.exports,o),n.l=!0,n.exports}return o.m=t,o.c=e,o.d=function(t,e,r){o.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},o.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.t=function(t,e){if(1&e&&(t=o(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(o.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var n in t)o.d(r,n,function(e){return t[e]}.bind(null,n));return r},o.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(e,"a",e),e},o.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},o.p="",o(o.s=7)}([function(t,e,o){t.exports=o(3)("./src/core.js")},function(t,e,o){t.exports=o(3)("./src/ui.js")},function(t,e,o){t.exports=o(3)("./src/utils.js")},function(t,e){t.exports=CKEditor5.dll},function(t,e,o){t.exports=o(3)("./src/engine.js")},function(t,e,o){"use strict";(function(t){var o="object"==typeof t&&t&&t.Object===Object&&t;e.a=o}).call(this,o(6))},function(t,e){var o;o=function(){return this}();try{o=o||new Function("return this")()}catch(t){"object"==typeof window&&(o=window)}t.exports=o},function(t,e,o){"use strict";o.r(e),o.d(e,"DecoupledEditor",(function(){return _}));var r=o(0),n=o(2);var i=function(t){return null!=t&&"object"==typeof t},c=o(5),s="object"==typeof self&&self&&self.Object===Object&&self,l=(c.a||s||Function("return this")()).Symbol,a=Object.prototype,u=a.hasOwnProperty,d=a.toString,f=l?l.toStringTag:void 0;var b=function(t){var e=u.call(t,f),o=t[f];try{t[f]=void 0;var r=!0}catch(t){}var n=d.call(t);return r&&(e?t[f]=o:delete t[f]),n},h=Object.prototype.toString;var p=function(t){return h.call(t)},g=l?l.toStringTag:void 0;var y=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":g&&g in Object(t)?b(t):p(t)};var m=function(t,e){return function(o){return t(e(o))}}(Object.getPrototypeOf,Object),w=Function.prototype,v=Object.prototype,j=w.toString,O=v.hasOwnProperty,E=j.call(Object);var x=function(t){if(!i(t)||"[object Object]"!=y(t))return!1;var e=m(t);if(null===e)return!0;var o=O.call(e,"constructor")&&e.constructor;return"function"==typeof o&&o instanceof o&&j.call(o)==E};var T=function(t){return i(t)&&1===t.nodeType&&!x(t)},F=o(1),D=o(4);class P extends r.EditorUI{constructor(t,e){super(t),this.view=e}init(){const t=this.editor,e=this.view,o=t.editing.view,r=e.editable,n=o.document.getRoot();e.editable.name=n.rootName,e.render();const i=r.element;this.setEditableElement(r.name,i),this.focusTracker.add(i),e.editable.bind("isFocused").to(this.focusTracker),o.attachDomRoot(i),this._initPlaceholder(),this._initToolbar(),this.fire("ready")}destroy(){const t=this.view;this.editor.editing.view.detachDomRoot(t.editable.name),t.destroy(),super.destroy()}_initToolbar(){const t=this.editor,e=this.view.toolbar;e.fillFromConfig(t.config.get("toolbar"),this.componentFactory),Object(F.enableToolbarKeyboardFocus)({origin:t.editing.view,originFocusTracker:this.focusTracker,originKeystrokeHandler:t.keystrokes,toolbar:e})}_initPlaceholder(){const t=this.editor,e=t.editing.view,o=e.document.getRoot(),r=t.sourceElement,n=t.config.get("placeholder")||r&&"textarea"===r.tagName.toLowerCase()&&r.getAttribute("placeholder");n&&Object(D.enablePlaceholder)({view:e,element:o,text:n,isDirectHost:!1,keepOnFocus:!0})}}class S extends F.EditorUIView{constructor(t,e,o={}){super(t),this.toolbar=new F.ToolbarView(t,{shouldGroupWhenFull:o.shouldToolbarGroupWhenFull}),this.editable=new F.InlineEditableUIView(t,e,o.editableElement),this.toolbar.extendTemplate({attributes:{class:["ck-reset_all","ck-rounded-corners"],dir:t.uiLanguageDirection}})}render(){super.render(),this.registerChild([this.toolbar,this.editable])}}class _ extends r.Editor{constructor(t,e){super(e),T(t)&&(this.sourceElement=t,Object(r.secureSourceElement)(this)),this.model.document.createRoot();const o=!this.config.get("toolbar.shouldNotGroupWhenFull"),n=new S(this.locale,this.editing.view,{editableElement:this.sourceElement,shouldToolbarGroupWhenFull:o});this.ui=new P(this,n)}destroy(){const t=this.getData();return this.ui.destroy(),super.destroy().then(()=>{this.sourceElement&&Object(n.setDataInElement)(this.sourceElement,t)})}static create(t,e={}){return new Promise(o=>{const r=T(t);if(r&&"TEXTAREA"===t.tagName)throw new n.CKEditorError("editor-wrong-element",null);const i=new this(t,e);o(i.initPlugins().then(()=>{i.ui.init()}).then(()=>{if(!r&&e.initialData)throw new n.CKEditorError("editor-create-initial-data",null);const o=void 0!==e.initialData?e.initialData:function(t){return T(t)?Object(n.getDataFromElement)(t):t}(t);return i.data.init(o)}).then(()=>i.fire("ready")).then(()=>i))})}}Object(n.mix)(_,r.DataApiMixin)}]);
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/essentials.js b/core/assets/vendor/ckeditor5/essentials.js
new file mode 100644
index 000000000000..b20455a363a3
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/essentials.js
@@ -0,0 +1,5 @@
+/*!
+ * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md.
+ */
+window.CKEditor5=window.CKEditor5||{},window.CKEditor5.essentials=function(t){var e={};function r(n){if(e[n])return e[n].exports;var o=e[n]={i:n,l:!1,exports:{}};return t[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=t,r.c=e,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)r.d(n,o,function(e){return t[e]}.bind(null,o));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=7)}([function(t,e){t.exports=CKEditor5.dll},function(t,e,r){t.exports=r(0)("./src/enter.js")},function(t,e,r){t.exports=r(0)("./src/core.js")},function(t,e,r){t.exports=r(0)("./src/clipboard.js")},function(t,e,r){t.exports=r(0)("./src/select-all.js")},function(t,e,r){t.exports=r(0)("./src/typing.js")},function(t,e,r){t.exports=r(0)("./src/undo.js")},function(t,e,r){"use strict";r.r(e),r.d(e,"Essentials",(function(){return l}));var n=r(2),o=r(3),i=r(1),u=r(4),s=r(5),c=r(6);class l extends n.Plugin{static get requires(){return[o.Clipboard,i.Enter,u.SelectAll,i.ShiftEnter,s.Typing,c.Undo]}static get pluginName(){return"Essentials"}}}]);
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/heading.js b/core/assets/vendor/ckeditor5/heading.js
new file mode 100644
index 000000000000..573d17a15a91
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/heading.js
@@ -0,0 +1,5 @@
+/*!
+ * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md.
+ */
+!function(e){const t=e.en=e.en||{};t.dictionary=Object.assign(t.dictionary||{},{"Choose heading":"Choose heading",Heading:"Heading","Heading 1":"Heading 1","Heading 2":"Heading 2","Heading 3":"Heading 3","Heading 4":"Heading 4","Heading 5":"Heading 5","Heading 6":"Heading 6",Paragraph:"Paragraph","Type or paste your content here.":"Type or paste your content here.","Type your title":"Type your title"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})),window.CKEditor5=window.CKEditor5||{},window.CKEditor5.heading=function(e){var t={};function n(i){if(t[i])return t[i].exports;var o=t[i]={i:i,l:!1,exports:{}};return e[i].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(i,o,function(t){return e[t]}.bind(null,o));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=9)}([function(e,t,n){e.exports=n(4)("./src/core.js")},function(e,t,n){e.exports=n(4)("./src/utils.js")},function(e,t,n){e.exports=n(4)("./src/engine.js")},function(e,t,n){e.exports=n(4)("./src/ui.js")},function(e,t){e.exports=CKEditor5.dll},function(e,t,n){var i=n(7),o=n(8);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[e.i,o,""]]);var a={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};i(o,a);e.exports=o.locals||{}},function(e,t,n){e.exports=n(4)("./src/paragraph.js")},function(e,t,n){"use strict";var i,o=function(){return void 0===i&&(i=Boolean(window&&document&&document.all&&!window.atob)),i},a=function(){var e={};return function(t){if(void 0===e[t]){var n=document.querySelector(t);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}e[t]=n}return e[t]}}(),r=[];function s(e){for(var t=-1,n=0;n<r.length;n++)if(r[n].identifier===e){t=n;break}return t}function c(e,t){for(var n={},i=[],o=0;o<e.length;o++){var a=e[o],c=t.base?a[0]+t.base:a[0],d=n[c]||0,l="".concat(c," ").concat(d);n[c]=d+1;var h=s(l),u={css:a[1],media:a[2],sourceMap:a[3]};-1!==h?(r[h].references++,r[h].updater(u)):r.push({identifier:l,updater:f(u,t),references:1}),i.push(l)}return i}function d(e){var t=document.createElement("style"),i=e.attributes||{};if(void 0===i.nonce){var o=n.nc;o&&(i.nonce=o)}if(Object.keys(i).forEach((function(e){t.setAttribute(e,i[e])})),"function"==typeof e.insert)e.insert(t);else{var r=a(e.insert||"head");if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(t)}return t}var l,h=(l=[],function(e,t){return l[e]=t,l.filter(Boolean).join("\n")});function u(e,t,n,i){var o=n?"":i.media?"@media ".concat(i.media," {").concat(i.css,"}"):i.css;if(e.styleSheet)e.styleSheet.cssText=h(t,o);else{var a=document.createTextNode(o),r=e.childNodes;r[t]&&e.removeChild(r[t]),r.length?e.insertBefore(a,r[t]):e.appendChild(a)}}function g(e,t,n){var i=n.css,o=n.media,a=n.sourceMap;if(o?e.setAttribute("media",o):e.removeAttribute("media"),a&&"undefined"!=typeof btoa&&(i+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(a))))," */")),e.styleSheet)e.styleSheet.cssText=i;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(i))}}var m=null,p=0;function f(e,t){var n,i,o;if(t.singleton){var a=p++;n=m||(m=d(t)),i=u.bind(null,n,a,!1),o=u.bind(null,n,a,!0)}else n=d(t),i=g.bind(null,n,t),o=function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(n)};return i(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;i(e=t)}else o()}}e.exports=function(e,t){(t=t||{}).singleton||"boolean"==typeof t.singleton||(t.singleton=o());var n=c(e=e||[],t);return function(e){if(e=e||[],"[object Array]"===Object.prototype.toString.call(e)){for(var i=0;i<n.length;i++){var o=s(n[i]);r[o].references--}for(var a=c(e,t),d=0;d<n.length;d++){var l=s(n[d]);0===r[l].references&&(r[l].updater(),r.splice(l,1))}n=a}}}},function(e,t){e.exports=".ck.ck-heading_heading1{font-size:20px}.ck.ck-heading_heading2{font-size:17px}.ck.ck-heading_heading3{font-size:14px}.ck[class*=ck-heading_heading]{font-weight:700}.ck.ck-dropdown.ck-heading-dropdown .ck-dropdown__button .ck-button__label{width:8em}.ck.ck-dropdown.ck-heading-dropdown .ck-dropdown__panel .ck-list__item{min-width:18em}"},function(e,t,n){"use strict";n.r(t),n.d(t,"Heading",(function(){return u})),n.d(t,"HeadingEditing",(function(){return c})),n.d(t,"HeadingUI",(function(){return h})),n.d(t,"HeadingButtonsUI",(function(){return m})),n.d(t,"Title",(function(){return v}));var i=n(0),o=n(6),a=n(1);class r extends i.Command{constructor(e,t){super(e),this.modelElements=t}refresh(){const e=Object(a.first)(this.editor.model.document.selection.getSelectedBlocks());this.value=!!e&&this.modelElements.includes(e.name)&&e.name,this.isEnabled=!!e&&this.modelElements.some(t=>s(e,t,this.editor.model.schema))}execute(e){const t=this.editor.model,n=t.document,i=e.value;t.change(e=>{const o=Array.from(n.selection.getSelectedBlocks()).filter(e=>s(e,i,t.schema));for(const t of o)t.is("element",i)||e.rename(t,i)})}}function s(e,t,n){return n.checkChild(e.parent,t)&&!n.isObject(e)}class c extends i.Plugin{static get pluginName(){return"HeadingEditing"}constructor(e){super(e),e.config.define("heading",{options:[{model:"paragraph",title:"Paragraph",class:"ck-heading_paragraph"},{model:"heading1",view:"h2",title:"Heading 1",class:"ck-heading_heading1"},{model:"heading2",view:"h3",title:"Heading 2",class:"ck-heading_heading2"},{model:"heading3",view:"h4",title:"Heading 3",class:"ck-heading_heading3"}]})}static get requires(){return[o.Paragraph]}init(){const e=this.editor,t=e.config.get("heading.options"),n=[];for(const i of t)"paragraph"!==i.model&&(e.model.schema.register(i.model,{inheritAllFrom:"$block"}),e.conversion.elementToElement(i),n.push(i.model));this._addDefaultH1Conversion(e),e.commands.add("heading",new r(e,n))}afterInit(){const e=this.editor,t=e.commands.get("enter"),n=e.config.get("heading.options");t&&this.listenTo(t,"afterExecute",(t,i)=>{const o=e.model.document.selection.getFirstPosition().parent;n.some(e=>o.is("element",e.model))&&!o.is("element","paragraph")&&0===o.childCount&&i.writer.rename(o,"paragraph")})}_addDefaultH1Conversion(e){e.conversion.for("upcast").elementToElement({model:"heading1",view:"h1",converterPriority:a.priorities.get("low")+1})}}var d=n(3);function l(e){const t=e.t,n={Paragraph:t("Paragraph"),"Heading 1":t("Heading 1"),"Heading 2":t("Heading 2"),"Heading 3":t("Heading 3"),"Heading 4":t("Heading 4"),"Heading 5":t("Heading 5"),"Heading 6":t("Heading 6")};return e.config.get("heading.options").map(e=>{const t=n[e.title];return t&&t!=e.title&&(e.title=t),e})}n(5);class h extends i.Plugin{static get pluginName(){return"HeadingUI"}init(){const e=this.editor,t=e.t,n=l(e),i=t("Choose heading"),o=t("Heading");e.ui.componentFactory.add("heading",t=>{const r={},s=new a.Collection,c=e.commands.get("heading"),l=e.commands.get("paragraph"),h=[c];for(const e of n){const t={type:"button",model:new d.Model({label:e.title,class:e.class,withText:!0})};"paragraph"===e.model?(t.model.bind("isOn").to(l,"value"),t.model.set("commandName","paragraph"),h.push(l)):(t.model.bind("isOn").to(c,"value",t=>t===e.model),t.model.set({commandName:"heading",commandValue:e.model})),s.add(t),r[e.model]=e.title}const u=Object(d.createDropdown)(t);return Object(d.addListToDropdown)(u,s),u.buttonView.set({isOn:!1,withText:!0,tooltip:o}),u.extendTemplate({attributes:{class:["ck-heading-dropdown"]}}),u.bind("isEnabled").toMany(h,"isEnabled",(...e)=>e.some(e=>e)),u.buttonView.bind("label").to(c,"value",l,"value",(e,t)=>{const n=e||t&&"paragraph";return r[n]?r[n]:i}),this.listenTo(u,"execute",t=>{e.execute(t.source.commandName,t.source.commandValue?{value:t.source.commandValue}:void 0),e.editing.view.focus()}),u})}}class u extends i.Plugin{static get requires(){return[c,h]}static get pluginName(){return"Heading"}}const g={heading1:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M19 9v10h-2v-8h-2V9h4zM4 8.5h5V4a1 1 0 0 1 1-1h.5a1 1 0 0 1 1 1v11.5a1 1 0 0 1-1 1H10a1 1 0 0 1-1-1V11H4v4.5a1 1 0 0 1-1 1h-.5a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1H3a1 1 0 0 1 1 1v4.5z"/></svg>',heading2:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M3 8.5h5V4a1 1 0 0 1 1-1h.5a1 1 0 0 1 1 1v11.5a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1V11H3v4.5a1 1 0 0 1-1 1h-.5a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1H2a1 1 0 0 1 1 1v4.5zm16.076 8.343V18.5h-6.252c.067-.626.27-1.22.61-1.78.338-.561 1.006-1.305 2.005-2.232.804-.749 1.297-1.257 1.479-1.523.245-.368.368-.732.368-1.092 0-.398-.107-.703-.32-.917-.214-.214-.51-.32-.886-.32-.372 0-.669.111-.889.336-.22.224-.347.596-.38 1.117l-1.778-.178c.106-.982.438-1.686.997-2.114.558-.427 1.257-.64 2.095-.64.918 0 1.64.247 2.164.742.525.495.787 1.11.787 1.847 0 .419-.075.818-.225 1.197-.15.378-.388.775-.714 1.19-.216.275-.605.67-1.168 1.187-.563.516-.92.859-1.07 1.028a3.11 3.11 0 0 0-.365.495h3.542z"/></svg>',heading3:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M3 8.5h5V4a1 1 0 0 1 1-1h.5a1 1 0 0 1 1 1v11.5a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1V11H3v4.5a1 1 0 0 1-1 1h-.5a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1H2a1 1 0 0 1 1 1v4.5zm9.989 7.53 1.726-.209c.055.44.203.777.445 1.01.24.232.533.349.876.349.368 0 .678-.14.93-.42.251-.279.377-.655.377-1.13 0-.448-.12-.803-.362-1.066a1.153 1.153 0 0 0-.882-.393c-.228 0-.501.044-.819.133l.197-1.453c.482.012.85-.092 1.105-.315.253-.222.38-.517.38-.885 0-.313-.093-.563-.279-.75-.186-.185-.434-.278-.743-.278a1.07 1.07 0 0 0-.78.317c-.216.212-.347.52-.394.927l-1.644-.28c.114-.562.287-1.012.517-1.348.231-.337.553-.601.965-.794a3.24 3.24 0 0 1 1.387-.289c.876 0 1.579.28 2.108.838.436.457.653.973.653 1.549 0 .817-.446 1.468-1.339 1.955.533.114.96.37 1.28.768.319.398.478.878.478 1.441 0 .817-.298 1.513-.895 2.088-.596.576-1.339.864-2.228.864-.842 0-1.54-.243-2.094-.727-.555-.485-.876-1.118-.965-1.901z"/></svg>',heading4:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M3.5 8.5h5V4a1 1 0 0 1 1-1h.5a1 1 0 0 1 1 1v11.5a1 1 0 0 1-1 1h-.5a1 1 0 0 1-1-1V11h-5v4.5a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h.5a1 1 0 0 1 1 1v4.5zm13.55 10v-1.873h-3.81v-1.561l4.037-5.91h1.498v5.904h1.156v1.567h-1.156V18.5H17.05zm0-3.44v-3.18l-2.14 3.18h2.14z"/></svg>',heading5:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M3.5 8.5h5V4a1 1 0 0 1 1-1h.5a1 1 0 0 1 1 1v11.5a1 1 0 0 1-1 1h-.5a1 1 0 0 1-1-1V11h-5v4.5a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h.5a1 1 0 0 1 1 1v4.5zm9.578 7.607 1.777-.184c.05.402.201.72.45.955a1.223 1.223 0 0 0 1.81-.101c.258-.303.387-.759.387-1.368 0-.572-.128-1-.384-1.286-.256-.285-.59-.428-1-.428-.512 0-.971.226-1.377.679l-1.448-.21.915-4.843h4.716v1.67H15.56l-.28 1.58a2.697 2.697 0 0 1 1.219-.298 2.68 2.68 0 0 1 2.012.863c.55.576.825 1.323.825 2.241a3.36 3.36 0 0 1-.666 2.05c-.605.821-1.445 1.232-2.52 1.232-.86 0-1.56-.23-2.101-.692-.542-.461-.866-1.081-.971-1.86z"/></svg>',heading6:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M3.5 8.5h5V4a1 1 0 0 1 1-1h.5a1 1 0 0 1 1 1v11.5a1 1 0 0 1-1 1h-.5a1 1 0 0 1-1-1V11h-5v4.5a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h.5a1 1 0 0 1 1 1v4.5zm15.595 2.973-1.726.19c-.043-.355-.153-.617-.33-.787-.178-.169-.409-.253-.692-.253-.377 0-.695.169-.956.507-.26.339-.424 1.043-.492 2.114.445-.525.997-.787 1.657-.787.745 0 1.383.284 1.914.85.531.568.797 1.3.797 2.197 0 .952-.28 1.716-.838 2.291-.559.576-1.276.864-2.152.864-.94 0-1.712-.365-2.317-1.095-.605-.73-.908-1.927-.908-3.59 0-1.705.316-2.935.946-3.688.63-.753 1.45-1.13 2.457-1.13.706 0 1.291.198 1.755.594.463.395.758.97.885 1.723zm-4.043 3.891c0 .58.133 1.028.4 1.343.266.315.57.473.914.473.33 0 .605-.13.825-.388.22-.258.33-.68.33-1.27 0-.604-.118-1.047-.355-1.329a1.115 1.115 0 0 0-.89-.422c-.342 0-.632.134-.869.403s-.355.666-.355 1.19z"/></svg>'};class m extends i.Plugin{init(){l(this.editor).filter(e=>"paragraph"!==e.model).map(e=>this._createButton(e))}_createButton(e){const t=this.editor;t.ui.componentFactory.add(e.model,n=>{const i=new d.ButtonView(n),o=t.commands.get("heading");return i.label=e.title,i.icon=e.icon||g[e.model],i.tooltip=!0,i.isToggleable=!0,i.bind("isEnabled").to(o),i.bind("isOn").to(o,"value",t=>t==e.model),i.on("execute",()=>{t.execute("heading",{value:e.model}),t.editing.view.focus()}),i})}}var p=n(2);const f=new Set(["paragraph","heading1","heading2","heading3","heading4","heading5","heading6"]);class v extends i.Plugin{static get pluginName(){return"Title"}static get requires(){return["Paragraph"]}init(){const e=this.editor,t=e.model;this._bodyPlaceholder=null,t.schema.register("title",{isBlock:!0,allowIn:"$root"}),t.schema.register("title-content",{isBlock:!0,allowIn:"title",allowAttributes:["alignment"]}),t.schema.extend("$text",{allowIn:"title-content"}),t.schema.addAttributeCheck(e=>{if(e.endsWith("title-content $text"))return!1}),e.editing.mapper.on("modelToViewPosition",b(e.editing.view)),e.data.mapper.on("modelToViewPosition",b(e.editing.view)),e.conversion.for("downcast").elementToElement({model:"title-content",view:"h1"}),e.data.upcastDispatcher.on("element:h1",w,{priority:"high"}),e.data.upcastDispatcher.on("element:h2",w,{priority:"high"}),e.data.upcastDispatcher.on("element:h3",w,{priority:"high"}),t.document.registerPostFixer(e=>this._fixTitleContent(e)),t.document.registerPostFixer(e=>this._fixTitleElement(e)),t.document.registerPostFixer(e=>this._fixBodyElement(e)),t.document.registerPostFixer(e=>this._fixExtraParagraph(e)),this._attachPlaceholders(),this._attachTabPressHandling()}getTitle(e={}){const t=this._getTitleElement().getChild(0);return this.editor.data.stringify(t,e)}getBody(e={}){const t=this.editor,n=t.data,i=t.model,o=t.model.document.getRoot(),a=t.editing.view,r=new p.DowncastWriter(a.document),s=i.createRangeIn(o),c=r.createDocumentFragment();n.downcastDispatcher.conversionApi.options=e,n.mapper.clearBindings(),n.mapper.bindElements(o,c),n.downcastDispatcher.convertInsert(s,r);const d=i.createPositionAfter(o.getChild(0)),l=i.createRange(d,i.createPositionAt(o,"end"));for(const e of i.markers){const t=l.getIntersection(e.getRange());t&&n.downcastDispatcher.convertMarkerAdd(e.name,t,r)}return delete n.downcastDispatcher.conversionApi.options,r.remove(r.createRangeOn(c.getChild(0))),t.data.processor.toData(c)}_getTitleElement(){const e=this.editor.model.document.getRoot();for(const t of e.getChildren())if(x(t))return t}_fixTitleContent(e){const t=this._getTitleElement();if(!t||1===t.maxOffset)return!1;const n=Array.from(t.getChildren());n.shift();for(const i of n)e.move(e.createRangeOn(i),t,"after"),e.rename(i,"paragraph");return!0}_fixTitleElement(e){const t=this.editor.model,n=t.document.getRoot(),i=Array.from(n.getChildren()).filter(x),o=i[0],a=n.getChild(0);if(a.is("element","title"))return y(i,e,t);if(!o&&!f.has(a.name)){const t=e.createElement("title");return e.insert(t,n),e.insertElement("title-content",t),!0}return f.has(a.name)?function(e,t,n){const i=t.createElement("title");t.insert(i,e,"before"),t.insert(e,i,0),t.rename(e,"title-content"),n.schema.removeDisallowedAttributes([e],t)}(a,e,t):e.move(e.createRangeOn(o),n,0),y(i,e,t),!0}_fixBodyElement(e){const t=this.editor.model.document.getRoot();return t.childCount<2&&(this._bodyPlaceholder=e.createElement("paragraph"),e.insert(this._bodyPlaceholder,t,1),!0)}_fixExtraParagraph(e){const t=this.editor.model.document.getRoot(),n=this._bodyPlaceholder;return!!function(e,t){if(!e||!e.is("element","paragraph")||e.childCount)return!1;if(t.childCount<=2||t.getChild(t.childCount-1)!==e)return!1;return!0}(n,t)&&(this._bodyPlaceholder=null,e.remove(n),!0)}_attachPlaceholders(){const e=this.editor,t=e.t,n=e.editing.view,i=n.document.getRoot(),o=e.sourceElement,a=e.config.get("title.placeholder")||t("Type your title"),r=e.config.get("placeholder")||o&&"textarea"===o.tagName.toLowerCase()&&o.getAttribute("placeholder")||t("Type or paste your content here.");let s;e.editing.downcastDispatcher.on("insert:title-content",(e,t,i)=>{Object(p.enablePlaceholder)({view:n,element:i.mapper.toViewElement(t.item),text:a,keepOnFocus:!0})}),n.document.registerPostFixer(e=>{const t=i.getChild(1);let n=!1;return t!==s&&(s&&(Object(p.hidePlaceholder)(e,s),e.removeAttribute("data-placeholder",s)),e.setAttribute("data-placeholder",r,t),s=t,n=!0),n=Object(p.needsPlaceholder)(t,!0)&&2===i.childCount&&"p"===t.name?!!Object(p.showPlaceholder)(e,t)||n:!!Object(p.hidePlaceholder)(e,t)||n,n})}_attachTabPressHandling(){const e=this.editor,t=e.model;e.keystrokes.set("TAB",(e,n)=>{t.change(e=>{const i=t.document.selection,o=Array.from(i.getSelectedBlocks());if(1===o.length&&o[0].is("element","title-content")){const i=t.document.getRoot().getChild(1);e.setSelection(i,0),n()}})}),e.keystrokes.set("SHIFT + TAB",(n,i)=>{t.change(n=>{const o=t.document.selection;if(!o.isCollapsed)return;const r=e.model.document.getRoot(),s=Object(a.first)(o.getSelectedBlocks()),c=o.getFirstPosition(),d=r.getChild(0);s===r.getChild(1)&&c.isAtStart&&(n.setSelection(d.getChild(0),0),i())})})}}function w(e,t,n){const i=t.modelCursor,o=t.viewItem;if(!i.isAtStart||!i.parent.is("element","$root"))return;if(!n.consumable.consume(o,{name:!0}))return;const a=n.writer,r=a.createElement("title"),s=a.createElement("title-content");a.append(s,r),a.insert(r,i),n.convertChildren(o,s),n.updateConversionResult(r,t)}function b(e){return(t,n)=>{const i=n.modelPosition.parent;if(!i.is("element","title"))return;const o=i.parent,a=n.mapper.toViewElement(o);n.viewPosition=e.createPositionAt(a,0),t.stop()}}function x(e){return e.is("element","title")}function y(e,t,n){let i=!1;for(const o of e)0!==o.index&&(H(o,t,n),i=!0);return i}function H(e,t,n){const i=e.getChild(0);i.isEmpty?t.remove(e):(t.move(t.createRangeOn(i),e,"before"),t.rename(i,"paragraph"),t.remove(e),n.schema.removeDisallowedAttributes([i],t))}}]);
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/horizontal-line.js b/core/assets/vendor/ckeditor5/horizontal-line.js
new file mode 100644
index 000000000000..54d6809100a4
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/horizontal-line.js
@@ -0,0 +1,5 @@
+/*!
+ * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md.
+ */
+!function(e){const t=e.en=e.en||{};t.dictionary=Object.assign(t.dictionary||{},{"Horizontal line":"Horizontal line"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})),window.CKEditor5=window.CKEditor5||{},window.CKEditor5.horizontalLine=function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=7)}([function(e,t,n){e.exports=n(2)("./src/core.js")},function(e,t,n){e.exports=n(2)("./src/widget.js")},function(e,t){e.exports=CKEditor5.dll},function(e,t,n){e.exports=n(2)("./src/ui.js")},function(e,t,n){var r=n(5),o=n(6);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[e.i,o,""]]);var i={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};r(o,i);e.exports=o.locals||{}},function(e,t,n){"use strict";var r,o=function(){return void 0===r&&(r=Boolean(window&&document&&document.all&&!window.atob)),r},i=function(){var e={};return function(t){if(void 0===e[t]){var n=document.querySelector(t);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}e[t]=n}return e[t]}}(),a=[];function c(e){for(var t=-1,n=0;n<a.length;n++)if(a[n].identifier===e){t=n;break}return t}function s(e,t){for(var n={},r=[],o=0;o<e.length;o++){var i=e[o],s=t.base?i[0]+t.base:i[0],l=n[s]||0,u="".concat(s," ").concat(l);n[s]=l+1;var d=c(u),f={css:i[1],media:i[2],sourceMap:i[3]};-1!==d?(a[d].references++,a[d].updater(f)):a.push({identifier:u,updater:g(f,t),references:1}),r.push(u)}return r}function l(e){var t=document.createElement("style"),r=e.attributes||{};if(void 0===r.nonce){var o=n.nc;o&&(r.nonce=o)}if(Object.keys(r).forEach((function(e){t.setAttribute(e,r[e])})),"function"==typeof e.insert)e.insert(t);else{var a=i(e.insert||"head");if(!a)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");a.appendChild(t)}return t}var u,d=(u=[],function(e,t){return u[e]=t,u.filter(Boolean).join("\n")});function f(e,t,n,r){var o=n?"":r.media?"@media ".concat(r.media," {").concat(r.css,"}"):r.css;if(e.styleSheet)e.styleSheet.cssText=d(t,o);else{var i=document.createTextNode(o),a=e.childNodes;a[t]&&e.removeChild(a[t]),a.length?e.insertBefore(i,a[t]):e.appendChild(i)}}function p(e,t,n){var r=n.css,o=n.media,i=n.sourceMap;if(o?e.setAttribute("media",o):e.removeAttribute("media"),i&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i))))," */")),e.styleSheet)e.styleSheet.cssText=r;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(r))}}var h=null,m=0;function g(e,t){var n,r,o;if(t.singleton){var i=m++;n=h||(h=l(t)),r=f.bind(null,n,i,!1),o=f.bind(null,n,i,!0)}else n=l(t),r=p.bind(null,n,t),o=function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(n)};return r(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;r(e=t)}else o()}}e.exports=function(e,t){(t=t||{}).singleton||"boolean"==typeof t.singleton||(t.singleton=o());var n=s(e=e||[],t);return function(e){if(e=e||[],"[object Array]"===Object.prototype.toString.call(e)){for(var r=0;r<n.length;r++){var o=c(n[r]);a[o].references--}for(var i=s(e,t),l=0;l<n.length;l++){var u=c(n[l]);0===a[u].references&&(a[u].updater(),a.splice(u,1))}n=i}}}},function(e,t){e.exports=".ck-editor__editable .ck-horizontal-line{display:flow-root}.ck-content hr{margin:15px 0;height:4px;background:#dedede;border:0}"},function(e,t,n){"use strict";n.r(t),n.d(t,"HorizontalLine",(function(){return l})),n.d(t,"HorizontalLineEditing",(function(){return a})),n.d(t,"HorizontalLineUI",(function(){return s}));var r=n(0),o=n(1);class i extends r.Command{refresh(){const e=this.editor.model,t=e.schema,n=e.document.selection;this.isEnabled=function(e,t,n){const r=function(e,t){const n=Object(o.findOptimalInsertionRange)(e,t).start.parent;if(n.isEmpty&&!n.is("element","$root"))return n.parent;return n}(e,n);return t.checkChild(r,"horizontalLine")}(n,t,e)}execute(){const e=this.editor.model;e.change(t=>{const n=t.createElement("horizontalLine");e.insertContent(n);let r=n.nextSibling;!(r&&e.schema.checkChild(r,"$text"))&&e.schema.checkChild(n.parent,"paragraph")&&(r=t.createElement("paragraph"),e.insertContent(r,t.createPositionAfter(n))),r&&t.setSelection(r,0)})}}n(4);class a extends r.Plugin{static get pluginName(){return"HorizontalLineEditing"}init(){const e=this.editor,t=e.model.schema,n=e.t,r=e.conversion;t.register("horizontalLine",{isObject:!0,allowWhere:"$block"}),r.for("dataDowncast").elementToElement({model:"horizontalLine",view:(e,{writer:t})=>t.createEmptyElement("hr")}),r.for("editingDowncast").elementToElement({model:"horizontalLine",view:(e,{writer:t})=>{const r=n("Horizontal line"),i=t.createContainerElement("div"),a=t.createEmptyElement("hr");return t.addClass("ck-horizontal-line",i),t.setCustomProperty("hr",!0,i),t.insert(t.createPositionAt(i,0),a),function(e,t,n){return t.setCustomProperty("horizontalLine",!0,e),Object(o.toWidget)(e,t,{label:n})}(i,t,r)}}),r.for("upcast").elementToElement({view:"hr",model:"horizontalLine"}),e.commands.add("horizontalLine",new i(e))}}var c=n(3);class s extends r.Plugin{static get pluginName(){return"HorizontalLineUI"}init(){const e=this.editor,t=e.t;e.ui.componentFactory.add("horizontalLine",n=>{const r=e.commands.get("horizontalLine"),o=new c.ButtonView(n);return o.set({label:t("Horizontal line"),icon:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M2 9h16v2H2z"/></svg>',tooltip:!0}),o.bind("isEnabled").to(r,"isEnabled"),this.listenTo(o,"execute",()=>{e.execute("horizontalLine"),e.editing.view.focus()}),o})}}class l extends r.Plugin{static get requires(){return[a,s,o.Widget]}static get pluginName(){return"HorizontalLine"}}}]);
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/html-support.js b/core/assets/vendor/ckeditor5/html-support.js
new file mode 100644
index 000000000000..dbcd5216b184
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/html-support.js
@@ -0,0 +1,5 @@
+/*!
+ * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md.
+ */
+!function(e){const t=e.en=e.en||{};t.dictionary=Object.assign(t.dictionary||{},{"HTML object":"HTML object"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})),window.CKEditor5=window.CKEditor5||{},window.CKEditor5.htmlSupport=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=17)}([function(e,t,r){e.exports=r(5)("./src/core.js")},function(e,t,r){"use strict";var n=r(6),o="object"==typeof self&&self&&self.Object===Object&&self,i=n.a||o||Function("return this")();t.a=i},function(e,t,r){e.exports=r(5)("./src/utils.js")},function(e,t,r){"use strict";(function(e){var n=r(6),o="object"==typeof exports&&exports&&!exports.nodeType&&exports,i=o&&"object"==typeof e&&e&&!e.nodeType&&e,l=i&&i.exports===o&&n.a.process,a=function(){try{var e=i&&i.require&&i.require("util").types;return e||l&&l.binding&&l.binding("util")}catch(e){}}();t.a=a}).call(this,r(9)(e))},function(e,t,r){"use strict";(function(e){var n=r(1),o=r(12),i="object"==typeof exports&&exports&&!exports.nodeType&&exports,l=i&&"object"==typeof e&&e&&!e.nodeType&&e,a=l&&l.exports===i?n.a.Buffer:void 0,c=(a?a.isBuffer:void 0)||o.a;t.a=c}).call(this,r(9)(e))},function(e,t){e.exports=CKEditor5.dll},function(e,t,r){"use strict";(function(e){var r="object"==typeof e&&e&&e.Object===Object&&e;t.a=r}).call(this,r(13))},function(e,t,r){"use strict";(function(e){var n=r(1),o="object"==typeof exports&&exports&&!exports.nodeType&&exports,i=o&&"object"==typeof e&&e&&!e.nodeType&&e,l=i&&i.exports===o?n.a.Buffer:void 0,a=l?l.allocUnsafe:void 0;t.a=function(e,t){if(t)return e.slice();var r=e.length,n=a?a(r):new e.constructor(r);return e.copy(n),n}}).call(this,r(9)(e))},function(e,t,r){e.exports=r(5)("./src/widget.js")},function(e,t){e.exports=function(e){if(!e.webpackPolyfill){var t=Object.create(e);t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),Object.defineProperty(t,"exports",{enumerable:!0}),t.webpackPolyfill=1}return t}},function(e,t,r){e.exports=r(5)("./src/engine.js")},,function(e,t,r){"use strict";t.a=function(){return!1}},function(e,t){var r;r=function(){return this}();try{r=r||new Function("return this")()}catch(e){"object"==typeof window&&(r=window)}e.exports=r},function(e,t,r){var n=r(15),o=r(16);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[e.i,o,""]]);var i={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};n(o,i);e.exports=o.locals||{}},function(e,t,r){"use strict";var n,o=function(){return void 0===n&&(n=Boolean(window&&document&&document.all&&!window.atob)),n},i=function(){var e={};return function(t){if(void 0===e[t]){var r=document.querySelector(t);if(window.HTMLIFrameElement&&r instanceof window.HTMLIFrameElement)try{r=r.contentDocument.head}catch(e){r=null}e[t]=r}return e[t]}}(),l=[];function a(e){for(var t=-1,r=0;r<l.length;r++)if(l[r].identifier===e){t=r;break}return t}function c(e,t){for(var r={},n=[],o=0;o<e.length;o++){var i=e[o],c=t.base?i[0]+t.base:i[0],s=r[c]||0,m="".concat(c," ").concat(s);r[c]=s+1;var u=a(m),d={css:i[1],media:i[2],sourceMap:i[3]};-1!==u?(l[u].references++,l[u].updater(d)):l.push({identifier:m,updater:p(d,t),references:1}),n.push(m)}return n}function s(e){var t=document.createElement("style"),n=e.attributes||{};if(void 0===n.nonce){var o=r.nc;o&&(n.nonce=o)}if(Object.keys(n).forEach((function(e){t.setAttribute(e,n[e])})),"function"==typeof e.insert)e.insert(t);else{var l=i(e.insert||"head");if(!l)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");l.appendChild(t)}return t}var m,u=(m=[],function(e,t){return m[e]=t,m.filter(Boolean).join("\n")});function d(e,t,r,n){var o=r?"":n.media?"@media ".concat(n.media," {").concat(n.css,"}"):n.css;if(e.styleSheet)e.styleSheet.cssText=u(t,o);else{var i=document.createTextNode(o),l=e.childNodes;l[t]&&e.removeChild(l[t]),l.length?e.insertBefore(i,l[t]):e.appendChild(i)}}function h(e,t,r){var n=r.css,o=r.media,i=r.sourceMap;if(o?e.setAttribute("media",o):e.removeAttribute("media"),i&&"undefined"!=typeof btoa&&(n+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i))))," */")),e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}var f=null,b=0;function p(e,t){var r,n,o;if(t.singleton){var i=b++;r=f||(f=s(t)),n=d.bind(null,r,i,!1),o=d.bind(null,r,i,!0)}else r=s(t),n=h.bind(null,r,t),o=function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(r)};return n(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;n(e=t)}else o()}}e.exports=function(e,t){(t=t||{}).singleton||"boolean"==typeof t.singleton||(t.singleton=o());var r=c(e=e||[],t);return function(e){if(e=e||[],"[object Array]"===Object.prototype.toString.call(e)){for(var n=0;n<r.length;n++){var o=a(r[n]);l[o].references--}for(var i=c(e,t),s=0;s<r.length;s++){var m=a(r[s]);0===l[m].references&&(l[m].updater(),l.splice(m,1))}r=i}}}},function(e,t){e.exports=":root{--ck-html-object-embed-unfocused-outline-width:1px}.ck-widget.html-object-embed{font-size:var(--ck-font-size-base);background-color:var(--ck-color-base-foreground);padding:var(--ck-spacing-small);padding-top:calc(var(--ck-font-size-tiny) + var(--ck-spacing-large));min-width:calc(76px + var(--ck-spacing-standard))}.ck-widget.html-object-embed:not(.ck-widget_selected):not(:hover){outline:var(--ck-html-object-embed-unfocused-outline-width) dashed var(--ck-color-widget-blurred-border)}.ck-widget.html-object-embed:before{font-weight:400;font-style:normal;position:absolute;content:attr(data-html-object-embed-label);top:0;left:var(--ck-spacing-standard);background:#999;transition:background var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve);padding:calc(var(--ck-spacing-tiny) + var(--ck-html-object-embed-unfocused-outline-width)) var(--ck-spacing-small) var(--ck-spacing-tiny);border-radius:0 0 var(--ck-border-radius) var(--ck-border-radius);color:var(--ck-color-base-background);font-size:var(--ck-font-size-tiny);font-family:var(--ck-font-face)}.ck-widget.html-object-embed .ck-widget__type-around .ck-widget__type-around__button.ck-widget__type-around__button_before{margin-left:50px}.ck-widget.html-object-embed .html-object-embed__content{pointer-events:none}div.ck-widget.html-object-embed{margin:1em auto}span.ck-widget.html-object-embed{display:inline-block}"},function(e,t,r){"use strict";r.r(t),r.d(t,"GeneralHtmlSupport",(function(){return nn})),r.d(t,"DataFilter",(function(){return Ur})),r.d(t,"DataSchema",(function(){return It})),r.d(t,"HtmlComment",(function(){return on}));var n=r(0),o=r(2),i=[{model:"codeBlock",view:"pre"},{model:"paragraph",view:"p"},{model:"blockQuote",view:"blockquote"},{model:"listItem",view:"li"},{model:"pageBreak",view:"div"},{model:"rawHtml",view:"div"},{model:"table",view:"table"},{model:"tableRow",view:"tr"},{model:"tableCell",view:"td"},{model:"tableCell",view:"th"},{model:"caption",view:"caption"},{model:"caption",view:"figcaption"},{model:"imageBlock",view:"img"},{model:"imageInline",view:"img"},{model:"$htmlSection",modelSchema:{allowChildren:"$block",allowIn:["$root","$htmlSection"],isBlock:!0}},{model:"htmlP",view:"p",modelSchema:{inheritAllFrom:"$block"}},{model:"htmlBlockquote",view:"blockquote",modelSchema:{inheritAllFrom:"$htmlSection"}},{model:"htmlTable",view:"table",modelSchema:{allowIn:["$htmlSection","$root"],isBlock:!0}},{model:"htmlTbody",view:"tbody",modelSchema:{allowIn:"htmlTable",isBlock:!0}},{model:"htmlThead",view:"thead",modelSchema:{allowIn:"htmlTable",isBlock:!0}},{model:"htmlTfoot",view:"tfoot",modelSchema:{allowIn:"htmlTable",isBlock:!0}},{model:"htmlCaption",view:"caption",modelSchema:{allowIn:"htmlTable",allowChildren:"$text",isBlock:!0}},{model:"htmlTr",view:"tr",modelSchema:{allowIn:["htmlTable","htmlThead","htmlTbody"],isBlock:!0}},{model:"htmlTd",view:"td",modelSchema:{allowIn:"htmlTr",allowChildren:["$block","$htmlSection"],isBlock:!0}},{model:"htmlTh",view:"th",modelSchema:{allowIn:"htmlTr",allowChildren:["$block","$htmlSection"],isBlock:!0}},{model:"htmlFigure",view:"figure",modelSchema:{inheritAllFrom:"$htmlSection",isBlock:!0}},{model:"htmlFigcaption",view:"figcaption",modelSchema:{allowIn:"htmlFigure",allowChildren:"$text",isBlock:!0}},{model:"htmlAddress",view:"address",modelSchema:{inheritAllFrom:"$htmlSection"}},{model:"htmlAside",view:"aside",modelSchema:{inheritAllFrom:"$htmlSection"}},{model:"htmlMain",view:"main",modelSchema:{inheritAllFrom:"$htmlSection"}},{model:"htmlDetails",view:"details",modelSchema:{inheritAllFrom:"$htmlSection"}},{model:"htmlSummary",view:"summary",modelSchema:{allowChildren:"$text",allowIn:"htmlDetails",isBlock:!0}},{model:"htmlDiv",view:"div",paragraphLikeModel:"htmlDivParagraph",modelSchema:{inheritAllFrom:"$htmlSection"}},{model:"htmlFieldset",view:"fieldset",modelSchema:{inheritAllFrom:"$htmlSection"}},{model:"htmlLegend",view:"legend",modelSchema:{allowIn:"htmlFieldset",allowChildren:"$text"}},{model:"htmlHeader",view:"header",modelSchema:{inheritAllFrom:"$htmlSection"}},{model:"htmlFooter",view:"footer",modelSchema:{inheritAllFrom:"$htmlSection"}},{model:"htmlForm",view:"form",modelSchema:{inheritAllFrom:"$htmlSection"}},{model:"htmlHgroup",view:"hgroup",modelSchema:{allowChildren:["htmlH1","htmlH2","htmlH3","htmlH4","htmlH5","htmlH6"],isBlock:!0}},{model:"htmlH1",view:"h1",modelSchema:{inheritAllFrom:"$block"}},{model:"htmlH2",view:"h2",modelSchema:{inheritAllFrom:"$block"}},{model:"htmlH3",view:"h3",modelSchema:{inheritAllFrom:"$block"}},{model:"htmlH4",view:"h4",modelSchema:{inheritAllFrom:"$block"}},{model:"htmlH5",view:"h5",modelSchema:{inheritAllFrom:"$block"}},{model:"htmlH6",view:"h6",modelSchema:{inheritAllFrom:"$block"}},{model:"$htmlList",modelSchema:{allowWhere:"$htmlSection",allowChildren:["$htmlList","htmlLi"],isBlock:!0}},{model:"htmlDir",view:"dir",modelSchema:{inheritAllFrom:"$htmlList"}},{model:"htmlMenu",view:"menu",modelSchema:{inheritAllFrom:"$htmlList"}},{model:"htmlUl",view:"ul",modelSchema:{inheritAllFrom:"$htmlList"}},{model:"htmlOl",view:"ol",modelSchema:{inheritAllFrom:"$htmlList"}},{model:"htmlLi",view:"li",modelSchema:{allowIn:"$htmlList",allowChildren:"$text",isBlock:!0}},{model:"htmlPre",view:"pre",modelSchema:{inheritAllFrom:"$block"}},{model:"htmlArticle",view:"article",modelSchema:{inheritAllFrom:"$htmlSection"}},{model:"htmlSection",view:"section",modelSchema:{inheritAllFrom:"$htmlSection"}},{model:"htmlNav",view:"nav",modelSchema:{inheritAllFrom:"$htmlSection"}},{model:"htmlDl",view:"dl",modelSchema:{allowIn:["$htmlSection","$root"],allowChildren:["htmlDt","htmlDd"],isBlock:!0}},{model:"htmlDt",view:"dt",modelSchema:{allowChildren:"$block",isBlock:!0}},{model:"htmlDd",view:"dd",modelSchema:{allowChildren:"$block",isBlock:!0}},{model:"htmlCenter",view:"center",modelSchema:{inheritAllFrom:"$htmlSection"}},{model:"$htmlObjectBlock",isObject:!0,modelSchema:{isObject:!0,isBlock:!0,allowWhere:"$block"}}],l=[{model:"htmlAcronym",view:"acronym",attributeProperties:{copyOnEnter:!0}},{model:"htmlTt",view:"tt",attributeProperties:{copyOnEnter:!0}},{model:"htmlFont",view:"font",attributeProperties:{copyOnEnter:!0}},{model:"htmlTime",view:"time",attributeProperties:{copyOnEnter:!0}},{model:"htmlVar",view:"var",attributeProperties:{copyOnEnter:!0}},{model:"htmlBig",view:"big",attributeProperties:{copyOnEnter:!0}},{model:"htmlSmall",view:"small",attributeProperties:{copyOnEnter:!0}},{model:"htmlSamp",view:"samp",attributeProperties:{copyOnEnter:!0}},{model:"htmlQ",view:"q",attributeProperties:{copyOnEnter:!0}},{model:"htmlOutput",view:"output",attributeProperties:{copyOnEnter:!0}},{model:"htmlKbd",view:"kbd",attributeProperties:{copyOnEnter:!0}},{model:"htmlBdi",view:"bdi",attributeProperties:{copyOnEnter:!0}},{model:"htmlBdo",view:"bdo",attributeProperties:{copyOnEnter:!0}},{model:"htmlAbbr",view:"abbr",attributeProperties:{copyOnEnter:!0}},{model:"htmlA",view:"a",priority:5,attributeProperties:{copyOnEnter:!0}},{model:"htmlStrong",view:"strong",attributeProperties:{copyOnEnter:!0}},{model:"htmlB",view:"b",attributeProperties:{copyOnEnter:!0}},{model:"htmlI",view:"i",attributeProperties:{copyOnEnter:!0}},{model:"htmlEm",view:"em",attributeProperties:{copyOnEnter:!0}},{model:"htmlS",view:"s",attributeProperties:{copyOnEnter:!0}},{model:"htmlDel",view:"del",attributeProperties:{copyOnEnter:!0}},{model:"htmlIns",view:"ins",attributeProperties:{copyOnEnter:!0}},{model:"htmlU",view:"u",attributeProperties:{copyOnEnter:!0}},{model:"htmlSub",view:"sub",attributeProperties:{copyOnEnter:!0}},{model:"htmlSup",view:"sup",attributeProperties:{copyOnEnter:!0}},{model:"htmlCode",view:"code",attributeProperties:{copyOnEnter:!0}},{model:"htmlMark",view:"mark",attributeProperties:{copyOnEnter:!0}},{model:"htmlSpan",view:"span",attributeProperties:{copyOnEnter:!0}},{model:"htmlCite",view:"cite",attributeProperties:{copyOnEnter:!0}},{model:"htmlLabel",view:"label",attributeProperties:{copyOnEnter:!0}},{model:"htmlDfn",view:"dfn",attributeProperties:{copyOnEnter:!0}},{model:"$htmlObjectInline",isObject:!0,modelSchema:{isObject:!0,isInline:!0,allowWhere:"$text",allowAttributesOf:"$text"}},{model:"htmlObject",view:"object",isObject:!0,modelSchema:{inheritAllFrom:"$htmlObjectInline"}},{model:"htmlIframe",view:"iframe",isObject:!0,modelSchema:{inheritAllFrom:"$htmlObjectInline"}},{model:"htmlInput",view:"input",isObject:!0,modelSchema:{inheritAllFrom:"$htmlObjectInline"}},{model:"htmlButton",view:"button",isObject:!0,modelSchema:{inheritAllFrom:"$htmlObjectInline"}},{model:"htmlTextarea",view:"textarea",isObject:!0,modelSchema:{inheritAllFrom:"$htmlObjectInline"}},{model:"htmlSelect",view:"select",isObject:!0,modelSchema:{inheritAllFrom:"$htmlObjectInline"}},{model:"htmlVideo",view:"video",isObject:!0,modelSchema:{inheritAllFrom:"$htmlObjectInline"}},{model:"htmlEmbed",view:"embed",isObject:!0,modelSchema:{inheritAllFrom:"$htmlObjectInline"}},{model:"htmlOembed",view:"oembed",isObject:!0,modelSchema:{inheritAllFrom:"$htmlObjectInline"}},{model:"htmlAudio",view:"audio",isObject:!0,modelSchema:{inheritAllFrom:"$htmlObjectInline"}},{model:"htmlImg",view:"img",isObject:!0,modelSchema:{inheritAllFrom:"$htmlObjectInline"}},{model:"htmlCanvas",view:"canvas",isObject:!0,modelSchema:{inheritAllFrom:"$htmlObjectInline"}},{model:"htmlMeter",view:"meter",isObject:!0,modelSchema:{inheritAllFrom:"$htmlObjectInline"}},{model:"htmlProgress",view:"progress",isObject:!0,modelSchema:{inheritAllFrom:"$htmlObjectInline"}}];var a=function(){this.__data__=[],this.size=0};var c=function(e,t){return e===t||e!=e&&t!=t};var s=function(e,t){for(var r=e.length;r--;)if(c(e[r][0],t))return r;return-1},m=Array.prototype.splice;var u=function(e){var t=this.__data__,r=s(t,e);return!(r<0)&&(r==t.length-1?t.pop():m.call(t,r,1),--this.size,!0)};var d=function(e){var t=this.__data__,r=s(t,e);return r<0?void 0:t[r][1]};var h=function(e){return s(this.__data__,e)>-1};var f=function(e,t){var r=this.__data__,n=s(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this};function b(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}b.prototype.clear=a,b.prototype.delete=u,b.prototype.get=d,b.prototype.has=h,b.prototype.set=f;var p=b;var v=function(){this.__data__=new p,this.size=0};var g=function(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r};var w=function(e){return this.__data__.get(e)};var y=function(e){return this.__data__.has(e)},j=r(1),A=j.a.Symbol,_=Object.prototype,O=_.hasOwnProperty,S=_.toString,k=A?A.toStringTag:void 0;var E=function(e){var t=O.call(e,k),r=e[k];try{e[k]=void 0;var n=!0}catch(e){}var o=S.call(e);return n&&(t?e[k]=r:delete e[k]),o},$=Object.prototype.toString;var C=function(e){return $.call(e)},I=A?A.toStringTag:void 0;var P=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":I&&I in Object(e)?E(e):C(e)};var x=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)};var F,B=function(e){if(!x(e))return!1;var t=P(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t},T=j.a["__core-js_shared__"],R=(F=/[^.]+$/.exec(T&&T.keys&&T.keys.IE_PROTO||""))?"Symbol(src)_1."+F:"";var M=function(e){return!!R&&R in e},D=Function.prototype.toString;var H=function(e){if(null!=e){try{return D.call(e)}catch(e){}try{return e+""}catch(e){}}return""},L=/^\[object .+?Constructor\]$/,z=Function.prototype,N=Object.prototype,V=z.toString,U=N.hasOwnProperty,q=RegExp("^"+V.call(U).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");var W=function(e){return!(!x(e)||M(e))&&(B(e)?q:L).test(H(e))};var K=function(e,t){return null==e?void 0:e[t]};var G=function(e,t){var r=K(e,t);return W(r)?r:void 0},Q=G(j.a,"Map"),J=G(Object,"create");var X=function(){this.__data__=J?J(null):{},this.size=0};var Y=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},Z=Object.prototype.hasOwnProperty;var ee=function(e){var t=this.__data__;if(J){var r=t[e];return"__lodash_hash_undefined__"===r?void 0:r}return Z.call(t,e)?t[e]:void 0},te=Object.prototype.hasOwnProperty;var re=function(e){var t=this.__data__;return J?void 0!==t[e]:te.call(t,e)};var ne=function(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=J&&void 0===t?"__lodash_hash_undefined__":t,this};function oe(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}oe.prototype.clear=X,oe.prototype.delete=Y,oe.prototype.get=ee,oe.prototype.has=re,oe.prototype.set=ne;var ie=oe;var le=function(){this.size=0,this.__data__={hash:new ie,map:new(Q||p),string:new ie}};var ae=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e};var ce=function(e,t){var r=e.__data__;return ae(t)?r["string"==typeof t?"string":"hash"]:r.map};var se=function(e){var t=ce(this,e).delete(e);return this.size-=t?1:0,t};var me=function(e){return ce(this,e).get(e)};var ue=function(e){return ce(this,e).has(e)};var de=function(e,t){var r=ce(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this};function he(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}he.prototype.clear=le,he.prototype.delete=se,he.prototype.get=me,he.prototype.has=ue,he.prototype.set=de;var fe=he;var be=function(e,t){var r=this.__data__;if(r instanceof p){var n=r.__data__;if(!Q||n.length<199)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new fe(n)}return r.set(e,t),this.size=r.size,this};function pe(e){var t=this.__data__=new p(e);this.size=t.size}pe.prototype.clear=v,pe.prototype.delete=g,pe.prototype.get=w,pe.prototype.has=y,pe.prototype.set=be;var ve=pe,ge=function(){try{var e=G(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();var we=function(e,t,r){"__proto__"==t&&ge?ge(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r};var ye=function(e,t,r){(void 0!==r&&!c(e[t],r)||void 0===r&&!(t in e))&&we(e,t,r)};var je=function(e){return function(t,r,n){for(var o=-1,i=Object(t),l=n(t),a=l.length;a--;){var c=l[e?a:++o];if(!1===r(i[c],c,i))break}return t}}(),Ae=r(7),_e=j.a.Uint8Array;var Oe=function(e){var t=new e.constructor(e.byteLength);return new _e(t).set(new _e(e)),t};var Se=function(e,t){var r=t?Oe(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)};var ke=function(e,t){var r=-1,n=e.length;for(t||(t=Array(n));++r<n;)t[r]=e[r];return t},Ee=Object.create,$e=function(){function e(){}return function(t){if(!x(t))return{};if(Ee)return Ee(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();var Ce=function(e,t){return function(r){return e(t(r))}},Ie=Ce(Object.getPrototypeOf,Object),Pe=Object.prototype;var xe=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||Pe)};var Fe=function(e){return"function"!=typeof e.constructor||xe(e)?{}:$e(Ie(e))};var Be=function(e){return null!=e&&"object"==typeof e};var Te=function(e){return Be(e)&&"[object Arguments]"==P(e)},Re=Object.prototype,Me=Re.hasOwnProperty,De=Re.propertyIsEnumerable,He=Te(function(){return arguments}())?Te:function(e){return Be(e)&&Me.call(e,"callee")&&!De.call(e,"callee")},Le=Array.isArray;var ze=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991};var Ne=function(e){return null!=e&&ze(e.length)&&!B(e)};var Ve=function(e){return Be(e)&&Ne(e)},Ue=r(4),qe=Function.prototype,We=Object.prototype,Ke=qe.toString,Ge=We.hasOwnProperty,Qe=Ke.call(Object);var Je=function(e){if(!Be(e)||"[object Object]"!=P(e))return!1;var t=Ie(e);if(null===t)return!0;var r=Ge.call(t,"constructor")&&t.constructor;return"function"==typeof r&&r instanceof r&&Ke.call(r)==Qe},Xe={};Xe["[object Float32Array]"]=Xe["[object Float64Array]"]=Xe["[object Int8Array]"]=Xe["[object Int16Array]"]=Xe["[object Int32Array]"]=Xe["[object Uint8Array]"]=Xe["[object Uint8ClampedArray]"]=Xe["[object Uint16Array]"]=Xe["[object Uint32Array]"]=!0,Xe["[object Arguments]"]=Xe["[object Array]"]=Xe["[object ArrayBuffer]"]=Xe["[object Boolean]"]=Xe["[object DataView]"]=Xe["[object Date]"]=Xe["[object Error]"]=Xe["[object Function]"]=Xe["[object Map]"]=Xe["[object Number]"]=Xe["[object Object]"]=Xe["[object RegExp]"]=Xe["[object Set]"]=Xe["[object String]"]=Xe["[object WeakMap]"]=!1;var Ye=function(e){return Be(e)&&ze(e.length)&&!!Xe[P(e)]};var Ze=function(e){return function(t){return e(t)}},et=r(3),tt=et.a&&et.a.isTypedArray,rt=tt?Ze(tt):Ye;var nt=function(e,t){if(("constructor"!==t||"function"!=typeof e[t])&&"__proto__"!=t)return e[t]},ot=Object.prototype.hasOwnProperty;var it=function(e,t,r){var n=e[t];ot.call(e,t)&&c(n,r)&&(void 0!==r||t in e)||we(e,t,r)};var lt=function(e,t,r,n){var o=!r;r||(r={});for(var i=-1,l=t.length;++i<l;){var a=t[i],c=n?n(r[a],e[a],a,r,e):void 0;void 0===c&&(c=e[a]),o?we(r,a,c):it(r,a,c)}return r};var at=function(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n},ct=/^(?:0|[1-9]\d*)$/;var st=function(e,t){var r=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==r||"symbol"!=r&&ct.test(e))&&e>-1&&e%1==0&&e<t},mt=Object.prototype.hasOwnProperty;var ut=function(e,t){var r=Le(e),n=!r&&He(e),o=!r&&!n&&Object(Ue.a)(e),i=!r&&!n&&!o&&rt(e),l=r||n||o||i,a=l?at(e.length,String):[],c=a.length;for(var s in e)!t&&!mt.call(e,s)||l&&("length"==s||o&&("offset"==s||"parent"==s)||i&&("buffer"==s||"byteLength"==s||"byteOffset"==s)||st(s,c))||a.push(s);return a};var dt=function(e){var t=[];if(null!=e)for(var r in Object(e))t.push(r);return t},ht=Object.prototype.hasOwnProperty;var ft=function(e){if(!x(e))return dt(e);var t=xe(e),r=[];for(var n in e)("constructor"!=n||!t&&ht.call(e,n))&&r.push(n);return r};var bt=function(e){return Ne(e)?ut(e,!0):ft(e)};var pt=function(e){return lt(e,bt(e))};var vt=function(e,t,r,n,o,i,l){var a=nt(e,r),c=nt(t,r),s=l.get(c);if(s)ye(e,r,s);else{var m=i?i(a,c,r+"",e,t,l):void 0,u=void 0===m;if(u){var d=Le(c),h=!d&&Object(Ue.a)(c),f=!d&&!h&&rt(c);m=c,d||h||f?Le(a)?m=a:Ve(a)?m=ke(a):h?(u=!1,m=Object(Ae.a)(c,!0)):f?(u=!1,m=Se(c,!0)):m=[]:Je(c)||He(c)?(m=a,He(a)?m=pt(a):x(a)&&!B(a)||(m=Fe(c))):u=!1}u&&(l.set(c,m),o(m,c,n,i,l),l.delete(c)),ye(e,r,m)}};var gt=function e(t,r,n,o,i){t!==r&&je(r,(function(l,a){if(i||(i=new ve),x(l))vt(t,r,a,n,e,o,i);else{var c=o?o(nt(t,a),l,a+"",t,r,i):void 0;void 0===c&&(c=l),ye(t,a,c)}}),bt)};var wt=function(e){return e};var yt=function(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)},jt=Math.max;var At=function(e,t,r){return t=jt(void 0===t?e.length-1:t,0),function(){for(var n=arguments,o=-1,i=jt(n.length-t,0),l=Array(i);++o<i;)l[o]=n[t+o];o=-1;for(var a=Array(t+1);++o<t;)a[o]=n[o];return a[t]=r(l),yt(e,this,a)}};var _t=function(e){return function(){return e}},Ot=ge?function(e,t){return ge(e,"toString",{configurable:!0,enumerable:!1,value:_t(t),writable:!0})}:wt,St=Date.now;var kt=function(e){var t=0,r=0;return function(){var n=St(),o=16-(n-r);if(r=n,o>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(Ot);var Et=function(e,t){return kt(At(e,t,wt),e+"")};var $t=function(e,t,r){if(!x(r))return!1;var n=typeof t;return!!("number"==n?Ne(r)&&st(t,r.length):"string"==n&&t in r)&&c(r[t],e)};var Ct=function(e){return Et((function(t,r){var n=-1,o=r.length,i=o>1?r[o-1]:void 0,l=o>2?r[2]:void 0;for(i=e.length>3&&"function"==typeof i?(o--,i):void 0,l&&$t(r[0],r[1],l)&&(i=o<3?void 0:i,o=1),t=Object(t);++n<o;){var a=r[n];a&&e(t,a,n,i)}return t}))}((function(e,t,r,n){gt(e,t,r,n)}));class It extends n.Plugin{constructor(e){super(e),this._definitions=new Map}static get pluginName(){return"DataSchema"}init(){for(const e of i)this.registerBlockElement(e);for(const e of l)this.registerInlineElement(e)}registerBlockElement(e){this._definitions.set(e.model,{...e,isBlock:!0})}registerInlineElement(e){this._definitions.set(e.model,{...e,isInline:!0})}extendBlockElement(e){this._extendDefinition({...e,isBlock:!0})}extendInlineElement(e){this._extendDefinition({...e,isInline:!0})}getDefinitionsForView(e,t){const r=new Set;for(const n of this._getMatchingViewDefinitions(e)){if(t)for(const e of this._getReferences(n.model))r.add(e);r.add(n)}return r}_getMatchingViewDefinitions(e){return Array.from(this._definitions.values()).filter(t=>t.view&&function(e,t){if("string"==typeof e)return e===t;if(e instanceof RegExp)return e.test(t);return!1}(e,t.view))}*_getReferences(e){const{modelSchema:t}=this._definitions.get(e);if(!t)return;const r=["inheritAllFrom","inheritTypesFrom","allowWhere","allowContentOf","allowAttributesOf"];for(const n of r)for(const r of Object(o.toArray)(t[n]||[])){const t=this._definitions.get(r);r!==e&&t&&(yield*this._getReferences(t.model),yield t)}}_extendDefinition(e){const t=this._definitions.get(e.model),r=Ct({},t,e,(e,t)=>Array.isArray(e)?e.concat(t):void 0);this._definitions.set(e.model,r)}}var Pt=r(10),xt=r(8);var Ft=function(e,t){for(var r=-1,n=null==e?0:e.length;++r<n&&!1!==t(e[r],r,e););return e},Bt=Ce(Object.keys,Object),Tt=Object.prototype.hasOwnProperty;var Rt=function(e){if(!xe(e))return Bt(e);var t=[];for(var r in Object(e))Tt.call(e,r)&&"constructor"!=r&&t.push(r);return t};var Mt=function(e){return Ne(e)?ut(e):Rt(e)};var Dt=function(e,t){return e&&lt(t,Mt(t),e)};var Ht=function(e,t){return e&&lt(t,bt(t),e)};var Lt=function(e,t){for(var r=-1,n=null==e?0:e.length,o=0,i=[];++r<n;){var l=e[r];t(l,r,e)&&(i[o++]=l)}return i};var zt=function(){return[]},Nt=Object.prototype.propertyIsEnumerable,Vt=Object.getOwnPropertySymbols,Ut=Vt?function(e){return null==e?[]:(e=Object(e),Lt(Vt(e),(function(t){return Nt.call(e,t)})))}:zt;var qt=function(e,t){return lt(e,Ut(e),t)};var Wt=function(e,t){for(var r=-1,n=t.length,o=e.length;++r<n;)e[o+r]=t[r];return e},Kt=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)Wt(t,Ut(e)),e=Ie(e);return t}:zt;var Gt=function(e,t){return lt(e,Kt(e),t)};var Qt=function(e,t,r){var n=t(e);return Le(e)?n:Wt(n,r(e))};var Jt=function(e){return Qt(e,Mt,Ut)};var Xt=function(e){return Qt(e,bt,Kt)},Yt=G(j.a,"DataView"),Zt=G(j.a,"Promise"),er=G(j.a,"Set"),tr=G(j.a,"WeakMap"),rr=H(Yt),nr=H(Q),or=H(Zt),ir=H(er),lr=H(tr),ar=P;(Yt&&"[object DataView]"!=ar(new Yt(new ArrayBuffer(1)))||Q&&"[object Map]"!=ar(new Q)||Zt&&"[object Promise]"!=ar(Zt.resolve())||er&&"[object Set]"!=ar(new er)||tr&&"[object WeakMap]"!=ar(new tr))&&(ar=function(e){var t=P(e),r="[object Object]"==t?e.constructor:void 0,n=r?H(r):"";if(n)switch(n){case rr:return"[object DataView]";case nr:return"[object Map]";case or:return"[object Promise]";case ir:return"[object Set]";case lr:return"[object WeakMap]"}return t});var cr=ar,sr=Object.prototype.hasOwnProperty;var mr=function(e){var t=e.length,r=new e.constructor(t);return t&&"string"==typeof e[0]&&sr.call(e,"index")&&(r.index=e.index,r.input=e.input),r};var ur=function(e,t){var r=t?Oe(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)},dr=/\w*$/;var hr=function(e){var t=new e.constructor(e.source,dr.exec(e));return t.lastIndex=e.lastIndex,t},fr=A?A.prototype:void 0,br=fr?fr.valueOf:void 0;var pr=function(e){return br?Object(br.call(e)):{}};var vr=function(e,t,r){var n=e.constructor;switch(t){case"[object ArrayBuffer]":return Oe(e);case"[object Boolean]":case"[object Date]":return new n(+e);case"[object DataView]":return ur(e,r);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return Se(e,r);case"[object Map]":return new n;case"[object Number]":case"[object String]":return new n(e);case"[object RegExp]":return hr(e);case"[object Set]":return new n;case"[object Symbol]":return pr(e)}};var gr=function(e){return Be(e)&&"[object Map]"==cr(e)},wr=et.a&&et.a.isMap,yr=wr?Ze(wr):gr;var jr=function(e){return Be(e)&&"[object Set]"==cr(e)},Ar=et.a&&et.a.isSet,_r=Ar?Ze(Ar):jr,Or={};Or["[object Arguments]"]=Or["[object Array]"]=Or["[object ArrayBuffer]"]=Or["[object DataView]"]=Or["[object Boolean]"]=Or["[object Date]"]=Or["[object Float32Array]"]=Or["[object Float64Array]"]=Or["[object Int8Array]"]=Or["[object Int16Array]"]=Or["[object Int32Array]"]=Or["[object Map]"]=Or["[object Number]"]=Or["[object Object]"]=Or["[object RegExp]"]=Or["[object Set]"]=Or["[object String]"]=Or["[object Symbol]"]=Or["[object Uint8Array]"]=Or["[object Uint8ClampedArray]"]=Or["[object Uint16Array]"]=Or["[object Uint32Array]"]=!0,Or["[object Error]"]=Or["[object Function]"]=Or["[object WeakMap]"]=!1;var Sr=function e(t,r,n,o,i,l){var a,c=1&r,s=2&r,m=4&r;if(n&&(a=i?n(t,o,i,l):n(t)),void 0!==a)return a;if(!x(t))return t;var u=Le(t);if(u){if(a=mr(t),!c)return ke(t,a)}else{var d=cr(t),h="[object Function]"==d||"[object GeneratorFunction]"==d;if(Object(Ue.a)(t))return Object(Ae.a)(t,c);if("[object Object]"==d||"[object Arguments]"==d||h&&!i){if(a=s||h?{}:Fe(t),!c)return s?Gt(t,Ht(a,t)):qt(t,Dt(a,t))}else{if(!Or[d])return i?t:{};a=vr(t,d,c)}}l||(l=new ve);var f=l.get(t);if(f)return f;l.set(t,a),_r(t)?t.forEach((function(o){a.add(e(o,r,n,o,t,l))})):yr(t)&&t.forEach((function(o,i){a.set(i,e(o,r,n,i,t,l))}));var b=u?void 0:(m?s?Xt:Jt:s?bt:Mt)(t);return Ft(b||t,(function(o,i){b&&(o=t[i=o]),it(a,i,e(o,r,n,i,t,l))})),a};var kr=function(e){return Sr(e,5)};function Er(e,t,r){if(t.attributes)for(const[n,o]of Object.entries(t.attributes))e.setAttribute(n,o,r);t.styles&&e.setStyle(t.styles,r),t.classes&&e.addClass(t.classes,r)}function $r(e,t){const r=kr(e);for(const n in t)Array.isArray(t[n])?r[n]=Array.from(new Set([...e[n],...t[n]])):r[n]={...e[n],...t[n]};return r}function Cr({model:e}){return(t,r)=>r.writer.createElement(e,{htmlContent:t.getCustomProperty("$rawContent")})}function Ir(e,{view:t,isInline:r}){const n=e.t;return(e,{writer:o,consumable:i})=>{const l=n("HTML object"),a=o.createContainerElement(r?"span":"div",{class:"html-object-embed","data-html-object-embed-label":l},{isAllowedInsideAttributeElement:r}),c=Pr(t,e,o);o.addClass("html-object-embed__content",c);const s=e.getAttribute("htmlAttributes");return s&&i.consume(e,"attribute:htmlAttributes:"+e.name)&&Er(o,s,c),o.insert(o.createPositionAt(a,0),c),Object(xt.toWidget)(a,o,{widgetLabel:l})}}function Pr(e,t,r){return r.createRawElement(e,null,(e,r)=>{r.setContentOf(e,t.getAttribute("htmlContent"))})}function xr({priority:e,view:t}){return(r,n)=>{if(!r)return;const{writer:o}=n,i=o.createAttributeElement(t,null,{priority:e});return Er(o,r,i),i}}function Fr({view:e},t){return r=>{r.on("element:"+e,(e,r,n)=>{if(!r.modelRange)return;const o=t._consumeAllowedAttributes(r.viewItem,n);o&&n.writer.setAttribute("htmlAttributes",o,r.modelRange)},{priority:"low"})}}function Br({model:e}){return t=>{t.on("attribute:htmlAttributes:"+e,(e,t,r)=>{const n=t.attributeNewValue;if(!r.consumable.consume(t.item,e.name))return;Er(r.writer,n,r.mapper.toViewElement(t.item))})}}var Tr=function(e,t){for(var r=-1,n=null==e?0:e.length,o=Array(n);++r<n;)o[r]=t(e[r],r,e);return o};var Rr=function(e,t,r,n){for(var o=e.length,i=r+(n?1:-1);n?i--:++i<o;)if(t(e[i],i,e))return i;return-1};var Mr=function(e){return e!=e};var Dr=function(e,t,r){for(var n=r-1,o=e.length;++n<o;)if(e[n]===t)return n;return-1};var Hr=function(e,t,r){return t==t?Dr(e,t,r):Rr(e,Mr,r)};var Lr=function(e,t,r,n){for(var o=r-1,i=e.length;++o<i;)if(n(e[o],t))return o;return-1},zr=Array.prototype.splice;var Nr=function(e,t,r,n){var o=n?Lr:Hr,i=-1,l=t.length,a=e;for(e===t&&(t=ke(t)),r&&(a=Tr(e,Ze(r)));++i<l;)for(var c=0,s=t[i],m=r?r(s):s;(c=o(a,m,c,n))>-1;)a!==e&&zr.call(a,c,1),zr.call(e,c,1);return e};var Vr=Et((function(e,t){return e&&e.length&&t&&t.length?Nr(e,t):e}));r(14);class Ur extends n.Plugin{constructor(e){super(e),this._dataSchema=e.plugins.get("DataSchema"),this._allowedAttributes=new Pt.Matcher,this._disallowedAttributes=new Pt.Matcher,this._allowedElements=new Set,this._dataInitialized=!1,this._registerElementsAfterInit(),this._registerElementHandlers()}static get pluginName(){return"DataFilter"}static get requires(){return[It,xt.Widget]}loadAllowedConfig(e){this._loadConfig(e,e=>this.allowAttributes(e))}loadDisallowedConfig(e){this._loadConfig(e,e=>this.disallowAttributes(e))}allowElement(e){for(const t of this._dataSchema.getDefinitionsForView(e,!0))this._allowedElements.has(t)||(this._allowedElements.add(t),this._dataInitialized&&this._fireRegisterEvent(t))}allowAttributes(e){this._allowedAttributes.add(e)}disallowAttributes(e){this._disallowedAttributes.add(e)}_loadConfig(e,t){for(const r of e){const e=r.name||/[\s\S]+/;this.allowElement(e),Qr(r).forEach(t)}}_consumeAllowedAttributes(e,t){return qr(e,t,this._disallowedAttributes),qr(e,t,this._allowedAttributes)}_registerElementsAfterInit(){this.editor.data.on("init",()=>{this._dataInitialized=!0;for(const e of this._allowedElements)this._fireRegisterEvent(e)},{priority:o.priorities.get("high")+1})}_registerElementHandlers(){this.on("register",(e,t)=>{const r=this.editor.model.schema;if(t.isObject&&!r.isRegistered(t.model))this._registerObjectElement(t);else if(t.isBlock)this._registerBlockElement(t);else{if(!t.isInline)throw new o.CKEditorError("data-filter-invalid-definition",null,t);this._registerInlineElement(t)}e.stop()},{priority:"lowest"})}_fireRegisterEvent(e){this.fire(e.view?"register:"+e.view:"register",e)}_registerObjectElement(e){const t=this.editor,r=t.model.schema,n=t.conversion,{view:i,model:l}=e;r.register(l,e.modelSchema),i&&(r.extend(e.model,{allowAttributes:["htmlAttributes","htmlContent"]}),t.data.registerRawContentMatcher({name:i}),n.for("upcast").elementToElement({view:i,model:Cr(e),converterPriority:o.priorities.get("low")+1}),n.for("upcast").add(Fr(e,this)),n.for("editingDowncast").elementToElement({model:l,view:Ir(t,e)}),n.for("dataDowncast").elementToElement({model:l,view:(e,{writer:t})=>Pr(i,e,t)}),n.for("dataDowncast").add(Br(e)))}_registerBlockElement(e){const t=this.editor,r=t.model.schema,n=t.conversion,{view:i,model:l}=e;if(!r.isRegistered(e.model)){if(r.register(e.model,e.modelSchema),!i)return;n.for("upcast").elementToElement({model:l,view:i,converterPriority:o.priorities.get("low")+1}),n.for("downcast").elementToElement({model:l,view:i})}i&&(r.extend(e.model,{allowAttributes:"htmlAttributes"}),n.for("upcast").add(Fr(e,this)),n.for("downcast").add(Br(e)))}_registerInlineElement(e){const t=this.editor,r=t.model.schema,n=t.conversion,o=e.model;r.extend("$text",{allowAttributes:o}),e.attributeProperties&&r.setAttributeProperties(o,e.attributeProperties),n.for("upcast").add(function({view:e,model:t},r){return n=>{n.on("element:"+e,(e,n,o)=>{const i=r._consumeAllowedAttributes(n.viewItem,o);n.modelRange||(n=Object.assign(n,o.convertChildren(n.viewItem,n.modelCursor)));for(const e of n.modelRange.getItems())if(o.schema.checkAttribute(e,t)){const r=$r(i||{},e.getAttribute(t)||{});o.writer.setAttribute(t,r,e)}},{priority:"low"})}}(e,this)),n.for("downcast").attributeToElement({model:o,view:xr(e)})}}function qr(e,t,r){const n=function(e,{consumable:t},r){const n=r.matchAll(e)||[],o=[];for(const r of n)Wr(t,e,r),delete r.match.name,t.consume(e,r.match)&&o.push(r);return o}(e,t,r),{attributes:o,styles:i,classes:l}=function(e){const t={attributes:new Set,classes:new Set,styles:new Set};for(const r of e)for(const e in t){(r.match[e]||[]).forEach(r=>t[e].add(r))}return t}(n),a={};return o.size&&(a.attributes=Kr(o,t=>e.getAttribute(t))),i.size&&(a.styles=Kr(i,t=>e.getStyle(t))),l.size&&(a.classes=Array.from(l)),Object.keys(a).length?a:null}function Wr(e,t,r){for(const n of["attributes","classes","styles"]){const o=r.match[n];if(o)for(const r of o)e.test(t,{[n]:[r]})||Vr(o,r)}}function Kr(e,t){const r={};for(const n of e){void 0!==t(n)&&(r[n]=t(n))}return r}function Gr(e,t){const{name:r}=e;return Je(e[t])?Object.entries(e[t]).map(([e,n])=>({name:r,[t]:{[e]:n}})):Array.isArray(e[t])?e[t].map(e=>({name:r,[t]:[e]})):[e]}function Qr(e){const{name:t,attributes:r,classes:n,styles:o}=e,i=[];return r&&i.push(...Gr({name:t,attributes:r},"attributes")),n&&i.push(...Gr({name:t,classes:n},"classes")),o&&i.push(...Gr({name:t,styles:o},"styles")),i}class Jr extends n.Plugin{static get requires(){return[Ur]}init(){if(!this.editor.plugins.has("CodeBlockEditing"))return;const e=this.editor.plugins.get(Ur);e.on("register:pre",(t,r)=>{if("codeBlock"!==r.model)return;const n=this.editor,o=n.model.schema,i=n.conversion;o.extend("codeBlock",{allowAttributes:["htmlAttributes","htmlContentAttributes"]}),i.for("upcast").add(function(e){return t=>{t.on("element:code",(t,r,n)=>{const o=r.viewItem,i=o.parent;function l(t,o){const i=e._consumeAllowedAttributes(t,n);i&&n.writer.setAttribute(o,i,r.modelRange)}i&&i.is("element","pre")&&(l(i,"htmlAttributes"),l(o,"htmlContentAttributes"))},{priority:"low"})}}(e)),i.for("downcast").add(e=>{e.on("attribute:htmlAttributes:codeBlock",(e,t,r)=>{if(!r.consumable.consume(t.item,e.name))return;const n=r.mapper.toViewElement(t.item).parent;Er(r.writer,t.attributeNewValue,n)}),e.on("attribute:htmlContentAttributes:codeBlock",(e,t,r)=>{if(!r.consumable.consume(t.item,e.name))return;const n=r.mapper.toViewElement(t.item);Er(r.writer,t.attributeNewValue,n)})}),t.stop()})}}class Xr extends n.Plugin{static get requires(){return[Ur]}init(){this.editor.plugins.get(Ur).on("register",(e,t)=>{const r=this.editor,n=r.model.schema,i=r.conversion;if(!t.paragraphLikeModel)return;if(n.isRegistered(t.model)||n.isRegistered(t.paragraphLikeModel))return;const l={model:t.paragraphLikeModel,view:t.view};n.register(t.model,t.modelSchema),n.register(l.model,{inheritAllFrom:"$block"}),i.for("upcast").elementToElement({view:t.view,model:(e,{writer:r})=>this._hasBlockContent(e)?r.createElement(t.model):r.createElement(l.model),converterPriority:o.priorities.get("low")+1}),i.for("downcast").elementToElement({view:t.view,model:t.model}),this._addAttributeConversion(t),i.for("downcast").elementToElement({view:l.view,model:l.model}),this._addAttributeConversion(l),e.stop()})}_hasBlockContent(e){const t=this.editor.editing.view.domConverter.blockElements;return Array.from(e.getChildren()).some(e=>t.includes(e.name))}_addAttributeConversion(e){const t=this.editor,r=t.conversion,n=t.plugins.get(Ur);t.model.schema.extend(e.model,{allowAttributes:"htmlAttributes"}),r.for("upcast").add(Fr(e,n)),r.for("downcast").add(Br(e))}}class Yr extends n.Plugin{static get requires(){return[It]}init(){const e=this.editor;if(!e.plugins.has("HeadingEditing"))return;const t=e.plugins.get(It),r=e.config.get("heading.options"),n=[];for(const e of r)"model"in e&&"view"in e&&(t.registerBlockElement({view:e.view,model:e.model}),n.push(e.model));t.extendBlockElement({model:"htmlHgroup",modelSchema:{allowChildren:n}})}}class Zr extends n.Plugin{static get requires(){return[Ur]}init(){const e=this.editor;if(!e.plugins.has("ImageInlineEditing")&&!e.plugins.has("ImageBlockEditing"))return;const t=e.model.schema,r=e.conversion,n=e.plugins.get(Ur);n.on("register:img",(e,o)=>{"imageBlock"!==o.model&&"imageInline"!==o.model||(t.isRegistered("imageBlock")&&t.extend("imageBlock",{allowAttributes:["htmlAttributes","htmlFigureAttributes","htmlLinkAttributes"]}),t.isRegistered("imageInline")&&t.extend("imageInline",{allowAttributes:["htmlA","htmlAttributes"]}),r.for("upcast").add(function(e){return t=>{t.on("element:img",(t,r,n)=>{const o=r.viewItem,i=o.parent;function l(t,o){const i=e._consumeAllowedAttributes(t,n);i&&n.writer.setAttribute(o,i,r.modelRange)}l(o,"htmlAttributes"),i.is("element","figure")?l(i,"htmlFigureAttributes"):i.is("element","a")&&function(e){r.modelRange&&r.modelRange.getContainedElement().is("element","imageBlock")&&l(e,"htmlLinkAttributes");e.parent.is("element","figure")&&l(e.parent,"htmlFigureAttributes")}(i)},{priority:"low"})}}(n)),r.for("downcast").add(e=>{var t;function r(t,r){e.on(`attribute:${r}:imageBlock`,(e,r,n)=>{if(!n.consumable.consume(r.item,e.name))return;const o=n.mapper.toViewElement(r.item),i=en(n.writer,o,t);Er(n.writer,r.attributeNewValue,i)},{priority:"low"})}t="htmlAttributes",e.on(`attribute:${t}:imageInline`,(e,t,r)=>{if(!r.consumable.consume(t.item,e.name))return;const n=r.mapper.toViewElement(t.item);Er(r.writer,t.attributeNewValue,n)},{priority:"low"}),r("img","htmlAttributes"),r("figure","htmlFigureAttributes"),e.on("attribute:linkHref:imageBlock",(e,t,r)=>{if(!r.consumable.consume(t.item,"attribute:htmlLinkAttributes:imageBlock"))return;const n=r.mapper.toViewElement(t.item),o=en(r.writer,n,"a");Er(r.writer,t.item.getAttribute("htmlLinkAttributes"),o)},{priority:"low"})}),e.stop())})}}function en(e,t,r){const n=e.createRangeOn(t);for(const{item:e}of n.getWalker())if(e.is("element",r))return e}class tn extends n.Plugin{static get requires(){return[Ur]}init(){const e=this.editor;if(!e.plugins.has("MediaEmbed")||e.config.get("mediaEmbed.previewsInData"))return;const t=e.model.schema,r=e.conversion,n=this.editor.plugins.get(Ur),o=this.editor.plugins.get(It),i=e.config.get("mediaEmbed.elementName");o.registerBlockElement({model:"media",view:i}),n.on("register:"+i,(e,o)=>{"media"===o.model&&(t.extend("media",{allowAttributes:["htmlAttributes","htmlFigureAttributes"]}),r.for("upcast").add(function(e,t){return e=>{e.on("element:"+t,r)};function r(t,r,n){const o=r.viewItem,i=o.parent;function l(t,o){const i=e._consumeAllowedAttributes(t,n);i&&n.writer.setAttribute(o,i,r.modelRange)}l(o,"htmlAttributes"),i.is("element","figure")&&i.hasClass("media")&&l(i,"htmlFigureAttributes")}}(n,i)),r.for("dataDowncast").add(function(e){return t=>{function r(e,r){t.on(`attribute:${r}:media`,(t,r,n)=>{if(!n.consumable.consume(r.item,t.name))return;const o=n.mapper.toViewElement(r.item),i=function(e,t,r){const n=e.createRangeOn(t);for(const{item:e}of n.getWalker())if(e.is("element",r))return e}(n.writer,o,e);Er(n.writer,r.attributeNewValue,i)})}r(e,"htmlAttributes"),r("figure","htmlFigureAttributes")}}(i)),e.stop())})}}class rn extends n.Plugin{static get requires(){return[Ur]}init(){const e=this.editor;if(!e.plugins.has("TableEditing"))return;const t=e.model.schema,r=e.conversion,n=e.plugins.get(Ur);n.on("register:table",(e,o)=>{"table"===o.model&&(t.extend("table",{allowAttributes:["htmlAttributes","htmlFigureAttributes","htmlTheadAttributes","htmlTbodyAttributes"]}),r.for("upcast").add(function(e){return t=>{t.on("element:table",(t,r,n)=>{const o=r.viewItem;l(o,"htmlAttributes");const i=o.parent;i.is("element","figure")&&l(i,"htmlFigureAttributes");for(const e of o.getChildren())e.is("element","thead")&&l(e,"htmlTheadAttributes"),e.is("element","tbody")&&l(e,"htmlTbodyAttributes");function l(t,o){const i=e._consumeAllowedAttributes(t,n);i&&n.writer.setAttribute(o,i,r.modelRange)}},{priority:"low"})}}(n)),r.for("downcast").add(e=>{function t(t,r){e.on(`attribute:${r}:table`,(e,r,n)=>{if(!n.consumable.consume(r.item,e.name))return;const o=n.mapper.toViewElement(r.item),i=function(e,t,r){const n=e.createRangeOn(t);for(const{item:e}of n.getWalker())if(e.is("element",r))return e}(n.writer,o,t);Er(n.writer,r.attributeNewValue,i)})}t("table","htmlAttributes"),t("figure","htmlFigureAttributes"),t("thead","htmlTheadAttributes"),t("tbody","htmlTbodyAttributes")}),e.stop())})}}class nn extends n.Plugin{static get pluginName(){return"GeneralHtmlSupport"}static get requires(){return[Ur,Jr,Xr,Yr,Zr,tn,rn]}init(){const e=this.editor,t=e.plugins.get(Ur);t.loadAllowedConfig(e.config.get("htmlSupport.allow")||[]),t.loadDisallowedConfig(e.config.get("htmlSupport.disallow")||[])}}class on extends n.Plugin{static get pluginName(){return"HtmlComment"}init(){const e=this.editor;e.model.schema.addAttributeCheck((e,t)=>{if(e.endsWith("$root")&&t.startsWith("$comment"))return!0}),e.conversion.for("upcast").elementToMarker({view:"$comment",model:(e,{writer:t})=>{const r=this.editor.model.document.getRoot(),n=e.getCustomProperty("$rawContent"),i="$comment:"+Object(o.uid)();return t.setAttribute(i,n,r),i}}),e.conversion.for("dataDowncast").markerToElement({model:"$comment",view:(e,{writer:t})=>{const r=this.editor.model.document.getRoot(),n=e.markerName,o=r.getAttribute(n),i=t.createUIElement("$comment");return t.setCustomProperty("$rawContent",o,i),i}}),e.model.document.registerPostFixer(t=>{const r=e.model.document.getRoot(),n=e.model.document.differ.getChangedMarkers().filter(e=>e.name.startsWith("$comment")).filter(e=>{const t=e.data.newRange;return t&&"$graveyard"===t.root.rootName});if(0===n.length)return!1;for(const e of n)t.removeMarker(e.name),t.removeAttribute(e.name,r);return!0}),e.data.on("set",()=>{for(const t of e.model.markers.getMarkersGroup("$comment"))this.removeHtmlComment(t.name)},{priority:"high"}),e.model.on("deleteContent",(t,[r])=>{for(const t of r.getRanges()){const r=e.model.schema.getLimitElement(t),n=e.model.createPositionAt(r,0),o=e.model.createPositionAt(r,"end");let i;i=n.isTouching(t.start)&&o.isTouching(t.end)?this.getHtmlCommentsInRange(e.model.createRange(n,o)):this.getHtmlCommentsInRange(t,{skipBoundaries:!0});for(const e of i)this.removeHtmlComment(e)}},{priority:"high"})}createHtmlComment(e,t){const r=Object(o.uid)(),n=this.editor.model,i=n.document.getRoot(),l="$comment:"+r;return n.change(r=>{const n=r.createRange(e);return r.addMarker(l,{usingOperation:!0,affectsData:!0,range:n}),r.setAttribute(l,t,i),l})}removeHtmlComment(e){const t=this.editor,r=t.model.document.getRoot(),n=t.model.markers.get(e);return!!n&&(t.model.change(t=>{t.removeMarker(n),t.removeAttribute(e,r)}),!0)}getHtmlCommentData(e){const t=this.editor,r=t.model.markers.get(e),n=t.model.document.getRoot();return r?{content:n.getAttribute(e),position:r.getStart()}:null}getHtmlCommentsInRange(e,{skipBoundaries:t=!1}={}){const r=!t;return Array.from(this.editor.model.markers.getMarkersGroup("$comment")).filter(t=>function(e,t){const n=e.getRange().start;return(n.isAfter(t.start)||r&&n.isEqual(t.start))&&(n.isBefore(t.end)||r&&n.isEqual(t.end))}(t,e)).map(e=>e.name)}}}]);
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/image.js b/core/assets/vendor/ckeditor5/image.js
new file mode 100644
index 000000000000..7cd670421a00
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/image.js
@@ -0,0 +1,5 @@
+/*!
+ * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md.
+ */
+!function(e){const t=e.en=e.en||{};t.dictionary=Object.assign(t.dictionary||{},{"Break text":"Break text","Centered image":"Centered image","Change image text alternative":"Change image text alternative","Enter image caption":"Enter image caption","Full size image":"Full size image","Image resize list":"Image resize list","Image toolbar":"Image toolbar","image widget":"image widget","In line":"In line",Insert:"Insert","Insert image":"Insert image","Insert image via URL":"Insert image via URL","Left aligned image":"Left aligned image",Original:"Original","Resize image":"Resize image","Resize image to %0":"Resize image to %0","Resize image to the original size":"Resize image to the original size","Right aligned image":"Right aligned image","Side image":"Side image","Text alternative":"Text alternative",Update:"Update","Update image URL":"Update image URL","Upload failed":"Upload failed","Wrap text":"Wrap text"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})),window.CKEditor5=window.CKEditor5||{},window.CKEditor5.image=function(e){var t={};function i(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,i),o.l=!0,o.exports}return i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)i.d(n,o,function(t){return e[t]}.bind(null,o));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=34)}([function(e,t,i){e.exports=i(7)("./src/core.js")},function(e,t,i){e.exports=i(7)("./src/ui.js")},function(e,t,i){e.exports=i(7)("./src/utils.js")},function(e,t,i){e.exports=i(7)("./src/widget.js")},function(e,t,i){e.exports=i(7)("./src/engine.js")},function(e,t,i){"use strict";var n,o=function(){return void 0===n&&(n=Boolean(window&&document&&document.all&&!window.atob)),n},a=function(){var e={};return function(t){if(void 0===e[t]){var i=document.querySelector(t);if(window.HTMLIFrameElement&&i instanceof window.HTMLIFrameElement)try{i=i.contentDocument.head}catch(e){i=null}e[t]=i}return e[t]}}(),s=[];function r(e){for(var t=-1,i=0;i<s.length;i++)if(s[i].identifier===e){t=i;break}return t}function l(e,t){for(var i={},n=[],o=0;o<e.length;o++){var a=e[o],l=t.base?a[0]+t.base:a[0],c=i[l]||0,g="".concat(l," ").concat(c);i[l]=c+1;var d=r(g),m={css:a[1],media:a[2],sourceMap:a[3]};-1!==d?(s[d].references++,s[d].updater(m)):s.push({identifier:g,updater:f(m,t),references:1}),n.push(g)}return n}function c(e){var t=document.createElement("style"),n=e.attributes||{};if(void 0===n.nonce){var o=i.nc;o&&(n.nonce=o)}if(Object.keys(n).forEach((function(e){t.setAttribute(e,n[e])})),"function"==typeof e.insert)e.insert(t);else{var s=a(e.insert||"head");if(!s)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");s.appendChild(t)}return t}var g,d=(g=[],function(e,t){return g[e]=t,g.filter(Boolean).join("\n")});function m(e,t,i,n){var o=i?"":n.media?"@media ".concat(n.media," {").concat(n.css,"}"):n.css;if(e.styleSheet)e.styleSheet.cssText=d(t,o);else{var a=document.createTextNode(o),s=e.childNodes;s[t]&&e.removeChild(s[t]),s.length?e.insertBefore(a,s[t]):e.appendChild(a)}}function u(e,t,i){var n=i.css,o=i.media,a=i.sourceMap;if(o?e.setAttribute("media",o):e.removeAttribute("media"),a&&"undefined"!=typeof btoa&&(n+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(a))))," */")),e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}var p=null,h=0;function f(e,t){var i,n,o;if(t.singleton){var a=h++;i=p||(p=c(t)),n=m.bind(null,i,a,!1),o=m.bind(null,i,a,!0)}else i=c(t),n=u.bind(null,i,t),o=function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(i)};return n(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;n(e=t)}else o()}}e.exports=function(e,t){(t=t||{}).singleton||"boolean"==typeof t.singleton||(t.singleton=o());var i=l(e=e||[],t);return function(e){if(e=e||[],"[object Array]"===Object.prototype.toString.call(e)){for(var n=0;n<i.length;n++){var o=r(i[n]);s[o].references--}for(var a=l(e,t),c=0;c<i.length;c++){var g=r(i[c]);0===s[g].references&&(s[g].updater(),s.splice(g,1))}i=a}}}},function(e,t,i){e.exports=i(7)("./src/upload.js")},function(e,t){e.exports=CKEditor5.dll},function(e,t,i){e.exports=i(7)("./src/clipboard.js")},function(e,t,i){var n=i(5),o=i(17);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[e.i,o,""]]);var a={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};n(o,a);e.exports=o.locals||{}},function(e,t,i){e.exports=i(7)("./src/undo.js")},function(e,t,i){e.exports=i(7)("./src/typing.js")},,function(e,t,i){var n=i(5),o=i(14);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[e.i,o,""]]);var a={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};n(o,a);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-text-alternative-form{display:flex;flex-direction:row;flex-wrap:nowrap}.ck.ck-text-alternative-form .ck-labeled-field-view{display:inline-block}.ck.ck-text-alternative-form .ck-label{display:none}@media screen and (max-width:600px){.ck.ck-text-alternative-form{flex-wrap:wrap}.ck.ck-text-alternative-form .ck-labeled-field-view{flex-basis:100%}.ck.ck-text-alternative-form .ck-button{flex-basis:50%}}"},function(e,t,i){var n=i(5),o=i(16);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[e.i,o,""]]);var a={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};n(o,a);e.exports=o.locals||{}},function(e,t){e.exports='.ck-vertical-form .ck-button:after{content:"";width:0;position:absolute;right:-1px;top:var(--ck-spacing-small);bottom:var(--ck-spacing-small);z-index:1}@media screen and (max-width:600px){.ck.ck-responsive-form .ck-button:after{content:"";width:0;position:absolute;right:-1px;top:var(--ck-spacing-small);bottom:var(--ck-spacing-small);z-index:1}}.ck-vertical-form>.ck-button:nth-last-child(2):after{border-right:1px solid var(--ck-color-base-border)}.ck.ck-responsive-form{padding:var(--ck-spacing-large)}.ck.ck-responsive-form:focus{outline:none}[dir=ltr] .ck.ck-responsive-form>:not(:first-child),[dir=rtl] .ck.ck-responsive-form>:not(:last-child){margin-left:var(--ck-spacing-standard)}@media screen and (max-width:600px){.ck.ck-responsive-form{padding:0;width:calc(var(--ck-input-text-width)*0.8)}.ck.ck-responsive-form .ck-labeled-field-view{margin:var(--ck-spacing-large) var(--ck-spacing-large) 0}.ck.ck-responsive-form .ck-labeled-field-view .ck-input-text{min-width:0;width:100%}.ck.ck-responsive-form .ck-labeled-field-view .ck-labeled-field-view__error{white-space:normal}.ck.ck-responsive-form>.ck-button:last-child,.ck.ck-responsive-form>.ck-button:nth-last-child(2){padding:var(--ck-spacing-standard);margin-top:var(--ck-spacing-large);border-radius:0;border:0;border-top:1px solid var(--ck-color-base-border)}[dir=ltr] .ck.ck-responsive-form>.ck-button:last-child,[dir=ltr] .ck.ck-responsive-form>.ck-button:nth-last-child(2),[dir=rtl] .ck.ck-responsive-form>.ck-button:last-child,[dir=rtl] .ck.ck-responsive-form>.ck-button:nth-last-child(2){margin-left:0}.ck.ck-responsive-form>.ck-button:nth-last-child(2):after,[dir=rtl] .ck.ck-responsive-form>.ck-button:last-child:last-of-type,[dir=rtl] .ck.ck-responsive-form>.ck-button:nth-last-child(2):last-of-type{border-right:1px solid var(--ck-color-base-border)}}'},function(e,t){e.exports=".ck-content .image{display:table;clear:both;text-align:center;margin:.9em auto;min-width:50px}.ck-content .image img{display:block;margin:0 auto;max-width:100%;min-width:100%}.ck-content .image-inline{display:inline-flex;max-width:100%;align-items:flex-start}.ck-content .image-inline picture{display:flex}.ck-content .image-inline img,.ck-content .image-inline picture{flex-grow:1;flex-shrink:1;max-width:100%}.ck.ck-editor__editable .image>figcaption.ck-placeholder:before{padding-left:inherit;padding-right:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ck.ck-editor__editable .image-inline.ck-widget_selected,.ck.ck-editor__editable .image.ck-widget_selected{z-index:1}.ck.ck-editor__editable .image-inline.ck-widget_selected ::selection{display:none}.ck.ck-editor__editable td .image-inline img,.ck.ck-editor__editable th .image-inline img{max-width:none}"},function(e,t,i){var n=i(5),o=i(19);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[e.i,o,""]]);var a={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};n(o,a);e.exports=o.locals||{}},function(e,t){e.exports=":root{--ck-color-image-caption-background:#f7f7f7;--ck-color-image-caption-text:#333;--ck-color-image-caption-highligted-background:#fd0}.ck-content .image>figcaption{display:table-caption;caption-side:bottom;word-break:break-word;color:var(--ck-color-image-caption-text);background-color:var(--ck-color-image-caption-background);padding:.6em;font-size:.75em;outline-offset:-1px}.ck.ck-editor__editable .image>figcaption.image__caption_highlighted{animation:ck-image-caption-highlight .6s ease-out}@keyframes ck-image-caption-highlight{0%{background-color:var(--ck-color-image-caption-highligted-background)}to{background-color:var(--ck-color-image-caption-background)}}"},function(e,t,i){var n=i(5),o=i(21);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[e.i,o,""]]);var a={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};n(o,a);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-editor__editable .image,.ck.ck-editor__editable .image-inline{position:relative}.ck.ck-editor__editable .image-inline .ck-progress-bar,.ck.ck-editor__editable .image .ck-progress-bar{position:absolute;top:0;left:0}.ck.ck-editor__editable .image-inline.ck-appear,.ck.ck-editor__editable .image.ck-appear{animation:fadeIn .7s}.ck.ck-editor__editable .image-inline .ck-progress-bar,.ck.ck-editor__editable .image .ck-progress-bar{height:2px;width:0;background:var(--ck-color-upload-bar-background);transition:width .1s}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}"},function(e,t,i){var n=i(5),o=i(23);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[e.i,o,""]]);var a={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};n(o,a);e.exports=o.locals||{}},function(e,t){e.exports='.ck-image-upload-complete-icon{display:block;position:absolute;top:min(var(--ck-spacing-medium),6%);right:min(var(--ck-spacing-medium),6%);border-radius:50%;z-index:1}.ck-image-upload-complete-icon:after{content:"";position:absolute}:root{--ck-color-image-upload-icon:#fff;--ck-color-image-upload-icon-background:#008a00;--ck-image-upload-icon-size:20;--ck-image-upload-icon-width:2px;--ck-image-upload-icon-is-visible:clamp(0px,100% - 50px,1px)}.ck-image-upload-complete-icon{opacity:0;background:var(--ck-color-image-upload-icon-background);animation-name:ck-upload-complete-icon-show,ck-upload-complete-icon-hide;animation-fill-mode:forwards,forwards;animation-duration:.5s,.5s;font-size:calc(1px*var(--ck-image-upload-icon-size));animation-delay:0ms,3s;overflow:hidden;width:calc(var(--ck-image-upload-icon-is-visible)*var(--ck-image-upload-icon-size));height:calc(var(--ck-image-upload-icon-is-visible)*var(--ck-image-upload-icon-size))}.ck-image-upload-complete-icon:after{left:25%;top:50%;opacity:0;height:0;width:0;transform:scaleX(-1) rotate(135deg);transform-origin:left top;border-top:var(--ck-image-upload-icon-width) solid var(--ck-color-image-upload-icon);border-right:var(--ck-image-upload-icon-width) solid var(--ck-color-image-upload-icon);animation-name:ck-upload-complete-icon-check;animation-duration:.5s;animation-delay:.5s;animation-fill-mode:forwards;box-sizing:border-box}@keyframes ck-upload-complete-icon-show{0%{opacity:0}to{opacity:1}}@keyframes ck-upload-complete-icon-hide{0%{opacity:1}to{opacity:0}}@keyframes ck-upload-complete-icon-check{0%{opacity:1;width:0;height:0}33%{width:.3em;height:0}to{opacity:1;width:.3em;height:.45em}}'},function(e,t,i){var n=i(5),o=i(25);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[e.i,o,""]]);var a={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};n(o,a);e.exports=o.locals||{}},function(e,t){e.exports='.ck .ck-upload-placeholder-loader{position:absolute;display:flex;align-items:center;justify-content:center;top:0;left:0}.ck .ck-upload-placeholder-loader:before{content:"";position:relative}:root{--ck-color-upload-placeholder-loader:#b3b3b3;--ck-upload-placeholder-loader-size:32px}.ck .ck-image-upload-placeholder{width:100%;margin:0}.ck .ck-upload-placeholder-loader{width:100%;height:100%}.ck .ck-upload-placeholder-loader:before{width:var(--ck-upload-placeholder-loader-size);height:var(--ck-upload-placeholder-loader-size);border-radius:50%;border-top:3px solid var(--ck-color-upload-placeholder-loader);border-right:2px solid transparent;animation:ck-upload-placeholder-loader 1s linear infinite}@keyframes ck-upload-placeholder-loader{to{transform:rotate(1turn)}}'},function(e,t,i){var n=i(5),o=i(27);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[e.i,o,""]]);var a={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};n(o,a);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-image-insert-form:focus{outline:none}.ck.ck-form__row{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.ck.ck-form__row>:not(.ck-label){flex-grow:1}.ck.ck-form__row.ck-image-insert-form__action-row{margin-top:var(--ck-spacing-standard)}.ck.ck-form__row.ck-image-insert-form__action-row .ck-button-cancel,.ck.ck-form__row.ck-image-insert-form__action-row .ck-button-save{justify-content:center}.ck.ck-form__row.ck-image-insert-form__action-row .ck-button .ck-button__label{color:var(--ck-color-text)}"},function(e,t,i){var n=i(5),o=i(29);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[e.i,o,""]]);var a={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};n(o,a);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-image-insert__panel{padding:var(--ck-spacing-large)}.ck.ck-image-insert__ck-finder-button{display:block;width:100%;margin:var(--ck-spacing-standard) auto;border:1px solid #ccc;border-radius:var(--ck-border-radius)}.ck.ck-splitbutton>.ck-file-dialog-button.ck-button{padding:0;margin:0;border:none}"},function(e,t,i){var n=i(5),o=i(31);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[e.i,o,""]]);var a={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};n(o,a);e.exports=o.locals||{}},function(e,t){e.exports=".ck-content .image.image_resized{max-width:100%;display:block;box-sizing:border-box}.ck-content .image.image_resized img{width:100%}.ck-content .image.image_resized>figcaption{display:block}.ck.ck-editor__editable td .image-inline.image_resized img,.ck.ck-editor__editable th .image-inline.image_resized img{max-width:100%}[dir=ltr] .ck.ck-button.ck-button_with-text.ck-resize-image-button .ck-button__icon{margin-right:var(--ck-spacing-standard)}[dir=rtl] .ck.ck-button.ck-button_with-text.ck-resize-image-button .ck-button__icon{margin-left:var(--ck-spacing-standard)}.ck.ck-dropdown .ck-button.ck-resize-image-button .ck-button__label{width:4em}"},function(e,t,i){var n=i(5),o=i(33);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[e.i,o,""]]);var a={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};n(o,a);e.exports=o.locals||{}},function(e,t){e.exports=":root{--ck-image-style-spacing:1.5em;--ck-inline-image-style-spacing:calc(var(--ck-image-style-spacing)/2)}.ck-content .image-style-block-align-left,.ck-content .image-style-block-align-right{max-width:calc(100% - var(--ck-image-style-spacing))}.ck-content .image-style-align-left,.ck-content .image-style-align-right{clear:none}.ck-content .image-style-side{float:right;margin-left:var(--ck-image-style-spacing);max-width:50%}.ck-content .image-style-align-left{float:left;margin-right:var(--ck-image-style-spacing)}.ck-content .image-style-align-center{margin-left:auto;margin-right:auto}.ck-content .image-style-align-right{float:right;margin-left:var(--ck-image-style-spacing)}.ck-content .image-style-block-align-right{margin-right:0;margin-left:auto}.ck-content .image-style-block-align-left{margin-left:0;margin-right:auto}.ck-content p+.image-style-align-left,.ck-content p+.image-style-align-right,.ck-content p+.image-style-side{margin-top:0}.ck-content .image-inline.image-style-align-left,.ck-content .image-inline.image-style-align-right{margin-top:var(--ck-inline-image-style-spacing);margin-bottom:var(--ck-inline-image-style-spacing)}.ck-content .image-inline.image-style-align-left{margin-right:var(--ck-inline-image-style-spacing)}.ck-content .image-inline.image-style-align-right{margin-left:var(--ck-inline-image-style-spacing)}.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open>.ck-splitbutton__action:not(.ck-disabled),.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open>.ck-splitbutton__arrow:not(.ck-disabled),.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open>.ck-splitbutton__arrow:not(.ck-disabled):not(:hover),.ck.ck-splitbutton.ck-splitbutton_flatten:hover>.ck-splitbutton__action:not(.ck-disabled),.ck.ck-splitbutton.ck-splitbutton_flatten:hover>.ck-splitbutton__arrow:not(.ck-disabled),.ck.ck-splitbutton.ck-splitbutton_flatten:hover>.ck-splitbutton__arrow:not(.ck-disabled):not(:hover){background-color:var(--ck-color-button-on-background)}.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open>.ck-splitbutton__action:not(.ck-disabled):after,.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open>.ck-splitbutton__arrow:not(.ck-disabled):after,.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open>.ck-splitbutton__arrow:not(.ck-disabled):not(:hover):after,.ck.ck-splitbutton.ck-splitbutton_flatten:hover>.ck-splitbutton__action:not(.ck-disabled):after,.ck.ck-splitbutton.ck-splitbutton_flatten:hover>.ck-splitbutton__arrow:not(.ck-disabled):after,.ck.ck-splitbutton.ck-splitbutton_flatten:hover>.ck-splitbutton__arrow:not(.ck-disabled):not(:hover):after{display:none}.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open:hover>.ck-splitbutton__action:not(.ck-disabled),.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open:hover>.ck-splitbutton__arrow:not(.ck-disabled),.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open:hover>.ck-splitbutton__arrow:not(.ck-disabled):not(:hover){background-color:var(--ck-color-button-on-hover-background)}"},function(e,t,i){"use strict";i.r(t),i.d(t,"AutoImage",(function(){return f})),i.d(t,"Image",(function(){return U})),i.d(t,"ImageEditing",(function(){return S})),i.d(t,"ImageCaption",(function(){return D})),i.d(t,"ImageCaptionEditing",(function(){return N})),i.d(t,"ImageInsert",(function(){return re})),i.d(t,"ImageInsertUI",(function(){return se})),i.d(t,"ImageResize",(function(){return he})),i.d(t,"ImageResizeButtons",(function(){return de})),i.d(t,"ImageResizeEditing",(function(){return ce})),i.d(t,"ImageResizeHandles",(function(){return pe})),i.d(t,"ImageStyle",(function(){return je})),i.d(t,"ImageStyleEditing",(function(){return Ae})),i.d(t,"ImageStyleUI",(function(){return Re})),i.d(t,"ImageTextAlternative",(function(){return y})),i.d(t,"ImageTextAlternativeEditing",(function(){return k})),i.d(t,"ImageTextAlternativeUI",(function(){return _})),i.d(t,"ImageToolbar",(function(){return Ne})),i.d(t,"ImageUpload",(function(){return ie})),i.d(t,"ImageUploadEditing",(function(){return ee})),i.d(t,"ImageUploadProgress",(function(){return K})),i.d(t,"ImageUploadUI",(function(){return H}));var n=i(0),o=i(8),a=i(4),s=i(10),r=i(11),l=i(2),c=i(3);function g(e,t){const i=e.createEmptyElement("img"),n="imageBlock"===t?e.createContainerElement("figure",{class:"image"}):e.createContainerElement("span",{class:"image-inline"},{isAllowedInsideAttributeElement:!0});return e.insert(e.createPositionAt(n,0),i),n}function d(e,t){if(e.plugins.has("ImageInlineEditing")!==e.plugins.has("ImageBlockEditing"))return{name:"img"};const i=e.plugins.get("ImageUtils");return e=>{if(!i.isInlineImageView(e))return null;return(e.findAncestor(i.isBlockImageView)?"imageBlock":"imageInline")!==t?null:{name:!0}}}function m(e,t){const i=Object(l.first)(t.getSelectedBlocks());return!i||e.isObject(i)||i.isEmpty&&"listItem"!=i.name?"imageBlock":"imageInline"}class u extends n.Plugin{static get pluginName(){return"ImageUtils"}isImage(e){return this.isInlineImage(e)||this.isBlockImage(e)}isInlineImageView(e){return!!e&&e.is("element","img")}isBlockImageView(e){return!!e&&e.is("element","figure")&&e.hasClass("image")}insertImage(e={},t=null,i=null){const n=this.editor,o=n.model,a=o.document.selection;i=p(n,t||a,i),e={...Object.fromEntries(a.getAttributes()),...e};for(const t in e)o.schema.checkAttribute(i,t)||delete e[t];return o.change(n=>{const s=n.createElement(i,e);return t||"imageInline"==i||(t=Object(c.findOptimalInsertionRange)(a,o)),o.insertContent(s,t),s.parent?(n.setSelection(s,"on"),s):null})}getClosestSelectedImageWidget(e){const t=e.getSelectedElement();if(t&&this.isImageWidget(t))return t;let i=e.getFirstPosition().parent;for(;i;){if(i.is("element")&&this.isImageWidget(i))return i;i=i.parent}return null}getClosestSelectedImageElement(e){const t=e.getSelectedElement();return this.isImage(t)?t:e.getFirstPosition().findAncestor("imageBlock")}isImageAllowed(){const e=this.editor.model.document.selection;return function(e,t){if("imageBlock"==p(e,t)){const i=function(e,t){const i=Object(c.findOptimalInsertionRange)(e,t).start.parent;if(i.isEmpty&&!i.is("element","$root"))return i.parent;return i}(t,e.model);if(e.model.schema.checkChild(i,"imageBlock"))return!0}else if(e.model.schema.checkChild(t.focus,"imageInline"))return!0;return!1}(this.editor,e)&&function(e){return[...e.focus.getAncestors()].every(e=>!e.is("element","imageBlock"))}(e)}toImageWidget(e,t,i){t.setCustomProperty("image",!0,e);return Object(c.toWidget)(e,t,{label:()=>{const t=this.findViewImgElement(e).getAttribute("alt");return t?`${t} ${i}`:i}})}isImageWidget(e){return!!e.getCustomProperty("image")&&Object(c.isWidget)(e)}isBlockImage(e){return!!e&&e.is("element","imageBlock")}isInlineImage(e){return!!e&&e.is("element","imageInline")}findViewImgElement(e){if(this.isInlineImageView(e))return e;const t=this.editor.editing.view;for(const{item:i}of t.createRangeIn(e))if(this.isInlineImageView(i))return i}}function p(e,t,i){const n=e.model.schema,o=e.config.get("image.insert.type");return e.plugins.has("ImageBlockEditing")?e.plugins.has("ImageInlineEditing")?i||("inline"===o?"imageInline":"block"===o?"imageBlock":t.is("selection")?m(n,t):n.checkChild(t,"imageInline")?"imageInline":"imageBlock"):"imageBlock":"imageInline"}const h=new RegExp(String(/^(http(s)?:\/\/)?[\w-]+\.[\w.~:/[\]@!$&'()*+,;=%-]+/.source+/\.(jpg|jpeg|png|gif|ico|webp|JPG|JPEG|PNG|GIF|ICO|WEBP)/.source+/(\?[\w.~:/[\]@!$&'()*+,;=%-]*)?/.source+/(#[\w.~:/[\]@!$&'()*+,;=%-]*)?$/.source));class f extends n.Plugin{static get requires(){return[o.Clipboard,u,s.Undo,r.Delete]}static get pluginName(){return"AutoImage"}constructor(e){super(e),this._timeoutId=null,this._positionToInsert=null}init(){const e=this.editor,t=e.model.document;this.listenTo(e.plugins.get("ClipboardPipeline"),"inputTransformation",()=>{const e=t.selection.getFirstRange(),i=a.LivePosition.fromPosition(e.start);i.stickiness="toPrevious";const n=a.LivePosition.fromPosition(e.end);n.stickiness="toNext",t.once("change:data",()=>{this._embedImageBetweenPositions(i,n),i.detach(),n.detach()},{priority:"high"})}),e.commands.get("undo").on("execute",()=>{this._timeoutId&&(l.global.window.clearTimeout(this._timeoutId),this._positionToInsert.detach(),this._timeoutId=null,this._positionToInsert=null)},{priority:"high"})}_embedImageBetweenPositions(e,t){const i=this.editor,n=new a.LiveRange(e,t),o=n.getWalker({ignoreElementEnd:!0}),s=Object.fromEntries(i.model.document.selection.getAttributes()),r=this.editor.plugins.get("ImageUtils");let c="";for(const e of o)e.item.is("$textProxy")&&(c+=e.item.data);c=c.trim(),c.match(h)?(this._positionToInsert=a.LivePosition.fromPosition(e),this._timeoutId=l.global.window.setTimeout(()=>{i.commands.get("insertImage").isEnabled?(i.model.change(e=>{let t;this._timeoutId=null,e.remove(n),n.detach(),"$graveyard"!==this._positionToInsert.root.rootName&&(t=this._positionToInsert.toPosition()),r.insertImage({...s,src:c},t),this._positionToInsert.detach(),this._positionToInsert=null}),i.plugins.get("Delete").requestUndoOnBackspace()):n.detach()},100)):n.detach()}}class b extends n.Command{refresh(){const e=this.editor.plugins.get("ImageUtils").getClosestSelectedImageElement(this.editor.model.document.selection);this.isEnabled=!!e,this.isEnabled&&e.hasAttribute("alt")?this.value=e.getAttribute("alt"):this.value=!1}execute(e){const t=this.editor,i=t.plugins.get("ImageUtils"),n=t.model,o=i.getClosestSelectedImageElement(n.document.selection);n.change(t=>{t.setAttribute("alt",e.newValue,o)})}}class k extends n.Plugin{static get requires(){return[u]}static get pluginName(){return"ImageTextAlternativeEditing"}init(){this.editor.commands.add("imageTextAlternative",new b(this.editor))}}var w=i(1);i(13),i(15);class I extends w.View{constructor(e){super(e);const t=this.locale.t;this.focusTracker=new l.FocusTracker,this.keystrokes=new l.KeystrokeHandler,this.labeledInput=this._createLabeledInputView(),this.saveButtonView=this._createButton(t("Save"),n.icons.check,"ck-button-save"),this.saveButtonView.type="submit",this.cancelButtonView=this._createButton(t("Cancel"),n.icons.cancel,"ck-button-cancel","cancel"),this._focusables=new w.ViewCollection,this._focusCycler=new w.FocusCycler({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}}),this.setTemplate({tag:"form",attributes:{class:["ck","ck-text-alternative-form","ck-responsive-form"],tabindex:"-1"},children:[this.labeledInput,this.saveButtonView,this.cancelButtonView]}),Object(w.injectCssTransitionDisabler)(this)}render(){super.render(),this.keystrokes.listenTo(this.element),Object(w.submitHandler)({view:this}),[this.labeledInput,this.saveButtonView,this.cancelButtonView].forEach(e=>{this._focusables.add(e),this.focusTracker.add(e.element)})}_createButton(e,t,i,n){const o=new w.ButtonView(this.locale);return o.set({label:e,icon:t,tooltip:!0}),o.extendTemplate({attributes:{class:i}}),n&&o.delegate("execute").to(this,n),o}_createLabeledInputView(){const e=this.locale.t,t=new w.LabeledFieldView(this.locale,w.createLabeledInputText);return t.label=e("Text alternative"),t}}function v(e){const t=e.editing.view,i=w.BalloonPanelView.defaultPositions,n=e.plugins.get("ImageUtils");return{target:t.domConverter.viewToDom(n.getClosestSelectedImageWidget(t.document.selection)),positions:[i.northArrowSouth,i.northArrowSouthWest,i.northArrowSouthEast,i.southArrowNorth,i.southArrowNorthWest,i.southArrowNorthEast,i.viewportStickyNorth]}}class _ extends n.Plugin{static get requires(){return[w.ContextualBalloon]}static get pluginName(){return"ImageTextAlternativeUI"}init(){this._createButton(),this._createForm()}destroy(){super.destroy(),this._form.destroy()}_createButton(){const e=this.editor,t=e.t;e.ui.componentFactory.add("imageTextAlternative",i=>{const o=e.commands.get("imageTextAlternative"),a=new w.ButtonView(i);return a.set({label:t("Change image text alternative"),icon:n.icons.lowVision,tooltip:!0}),a.bind("isEnabled").to(o,"isEnabled"),this.listenTo(a,"execute",()=>{this._showForm()}),a})}_createForm(){const e=this.editor,t=e.editing.view.document,i=e.plugins.get("ImageUtils");this._balloon=this.editor.plugins.get("ContextualBalloon"),this._form=new I(e.locale),this._form.render(),this.listenTo(this._form,"submit",()=>{e.execute("imageTextAlternative",{newValue:this._form.labeledInput.fieldView.element.value}),this._hideForm(!0)}),this.listenTo(this._form,"cancel",()=>{this._hideForm(!0)}),this._form.keystrokes.set("Esc",(e,t)=>{this._hideForm(!0),t()}),this.listenTo(e.ui,"update",()=>{i.getClosestSelectedImageWidget(t.selection)?this._isVisible&&function(e){const t=e.plugins.get("ContextualBalloon");if(e.plugins.get("ImageUtils").getClosestSelectedImageWidget(e.editing.view.document.selection)){const i=v(e);t.updatePosition(i)}}(e):this._hideForm(!0)}),Object(w.clickOutsideHandler)({emitter:this._form,activator:()=>this._isVisible,contextElements:[this._balloon.view.element],callback:()=>this._hideForm()})}_showForm(){if(this._isVisible)return;const e=this.editor,t=e.commands.get("imageTextAlternative"),i=this._form.labeledInput;this._form.disableCssTransitions(),this._isInBalloon||this._balloon.add({view:this._form,position:v(e)}),i.fieldView.value=i.fieldView.element.value=t.value||"",this._form.labeledInput.fieldView.select(),this._form.enableCssTransitions()}_hideForm(e){this._isInBalloon&&(this._form.focusTracker.isFocused&&this._form.saveButtonView.focus(),this._balloon.remove(this._form),e&&this.editor.editing.view.focus())}get _isVisible(){return this._balloon.visibleView===this._form}get _isInBalloon(){return this._balloon.hasView(this._form)}}class y extends n.Plugin{static get requires(){return[k,_]}static get pluginName(){return"ImageTextAlternative"}}function x(e,t){return e=>{e.on("attribute:srcset:"+t,i)};function i(t,i,n){if(!n.consumable.consume(i.item,t.name))return;const o=n.writer,a=n.mapper.toViewElement(i.item),s=e.findViewImgElement(a);if(null===i.attributeNewValue){const e=i.attributeOldValue;e.data&&(o.removeAttribute("srcset",s),o.removeAttribute("sizes",s),e.width&&o.removeAttribute("width",s))}else{const e=i.attributeNewValue;e.data&&(o.setAttribute("srcset",e.data,s),o.setAttribute("sizes","100vw",s),e.width&&o.setAttribute("width",e.width,s))}}}function E(e,t,i){return e=>{e.on(`attribute:${i}:${t}`,n)};function n(t,i,n){if(!n.consumable.consume(i.item,t.name))return;const o=n.writer,a=n.mapper.toViewElement(i.item),s=e.findViewImgElement(a);o.setAttribute(i.attributeKey,i.attributeNewValue||"",s)}}class C extends a.Observer{observe(e){this.listenTo(e,"load",(e,t)=>{const i=t.target;this.checkShouldIgnoreEventFromTarget(i)||"IMG"==i.tagName&&this._fireEvents(t)},{useCapture:!0})}_fireEvents(e){this.isEnabled&&(this.document.fire("layoutChanged"),this.document.fire("imageLoaded",e))}}class T extends n.Command{constructor(e){super(e);const t=e.config.get("image.insert.type");e.plugins.has("ImageBlockEditing")||"block"===t&&Object(l.logWarning)("image-block-plugin-required"),e.plugins.has("ImageInlineEditing")||"inline"===t&&Object(l.logWarning)("image-inline-plugin-required")}refresh(){this.isEnabled=this.editor.plugins.get("ImageUtils").isImageAllowed()}execute(e){const t=Object(l.toArray)(e.source),i=this.editor.model.document.selection,n=this.editor.plugins.get("ImageUtils"),o=Object.fromEntries(i.getAttributes());t.forEach((e,t)=>{const a=i.getSelectedElement();if("string"==typeof e&&(e={src:e}),t&&a&&n.isImage(a)){const t=this.editor.model.createPositionAfter(a);n.insertImage({...e,...o},t)}else n.insertImage({...e,...o})})}}class S extends n.Plugin{static get requires(){return[u]}static get pluginName(){return"ImageEditing"}init(){const e=this.editor,t=e.conversion;e.editing.view.addObserver(C),t.for("upcast").attributeToAttribute({view:{name:"img",key:"alt"},model:"alt"}).attributeToAttribute({view:{name:"img",key:"srcset"},model:{key:"srcset",value:e=>{const t={data:e.getAttribute("srcset")};return e.hasAttribute("width")&&(t.width=e.getAttribute("width")),t}}});const i=new T(e);e.commands.add("insertImage",i),e.commands.add("imageInsert",i)}}class B extends n.Command{constructor(e,t){super(e),this._modelElementName=t}refresh(){const e=this.editor.plugins.get("ImageUtils"),t=e.getClosestSelectedImageElement(this.editor.model.document.selection);"imageBlock"===this._modelElementName?this.isEnabled=e.isInlineImage(t):this.isEnabled=e.isBlockImage(t)}execute(){const e=this.editor,t=this.editor.model,i=e.plugins.get("ImageUtils"),n=i.getClosestSelectedImageElement(t.document.selection),o=Object.fromEntries(n.getAttributes());return o.src||o.uploadId?t.change(e=>{const a=Array.from(t.markers).filter(e=>e.getRange().containsItem(n)),s=i.insertImage(o,t.createSelection(n,"on"),this._modelElementName);if(!s)return null;const r=e.createRangeOn(s);for(const t of a){const i=t.getRange(),n="$graveyard"!=i.root.rootName?i.getJoined(r,!0):r;e.updateMarker(t,{range:n})}return{oldElement:n,newElement:s}}):null}}class A extends n.Plugin{static get requires(){return[S,u,o.ClipboardPipeline]}static get pluginName(){return"ImageBlockEditing"}init(){const e=this.editor;e.model.schema.register("imageBlock",{isObject:!0,isBlock:!0,allowWhere:"$block",allowAttributes:["alt","src","srcset"]}),this._setupConversion(),e.plugins.has("ImageInlineEditing")&&(e.commands.add("imageTypeBlock",new B(this.editor,"imageBlock")),this._setupClipboardIntegration())}_setupConversion(){const e=this.editor,t=e.t,i=e.conversion,n=e.plugins.get("ImageUtils");i.for("dataDowncast").elementToElement({model:"imageBlock",view:(e,{writer:t})=>g(t,"imageBlock")}),i.for("editingDowncast").elementToElement({model:"imageBlock",view:(e,{writer:i})=>n.toImageWidget(g(i,"imageBlock"),i,t("image widget"))}),i.for("downcast").add(E(n,"imageBlock","src")).add(E(n,"imageBlock","alt")).add(x(n,"imageBlock")),i.for("upcast").elementToElement({view:d(e,"imageBlock"),model:(e,{writer:t})=>t.createElement("imageBlock",e.hasAttribute("src")?{src:e.getAttribute("src")}:null)}).add(function(e){return e=>{e.on("element:figure",t)};function t(t,i,n){if(!n.consumable.test(i.viewItem,{name:!0,classes:"image"}))return;const o=e.findViewImgElement(i.viewItem);if(!o||!n.consumable.test(o,{name:!0}))return;const a=n.convertItem(o,i.modelCursor),s=Object(l.first)(a.modelRange.getItems());s&&(n.consumable.consume(i.viewItem,{name:!0,classes:"image"}),n.convertChildren(i.viewItem,s),n.updateConversionResult(s,i))}}(n))}_setupClipboardIntegration(){const e=this.editor,t=e.model,i=e.editing.view,n=e.plugins.get("ImageUtils");this.listenTo(e.plugins.get("ClipboardPipeline"),"inputTransformation",(o,s)=>{const r=Array.from(s.content.getChildren());let l;if(!r.every(n.isInlineImageView))return;l=s.targetRanges?e.editing.mapper.toModelRange(s.targetRanges[0]):t.document.selection.getFirstRange();const c=t.createSelection(l);if("imageBlock"===m(t.schema,c)){const e=new a.UpcastWriter(i.document),t=r.map(t=>e.createElement("figure",{class:"image"},t));s.content=e.createDocumentFragment(t)}})}}i(9);class V extends n.Plugin{static get requires(){return[A,c.Widget,y]}static get pluginName(){return"ImageBlock"}}class z extends n.Plugin{static get requires(){return[S,u,o.ClipboardPipeline]}static get pluginName(){return"ImageInlineEditing"}init(){const e=this.editor,t=e.model.schema;t.register("imageInline",{isObject:!0,isInline:!0,allowWhere:"$text",allowAttributes:["alt","src","srcset"]}),t.addChildCheck((e,t)=>{if(e.endsWith("caption")&&"imageInline"===t.name)return!1}),this._setupConversion(),e.plugins.has("ImageBlockEditing")&&(e.commands.add("imageTypeInline",new B(this.editor,"imageInline")),this._setupClipboardIntegration())}_setupConversion(){const e=this.editor,t=e.t,i=e.conversion,n=e.plugins.get("ImageUtils");i.for("dataDowncast").elementToElement({model:"imageInline",view:(e,{writer:t})=>t.createEmptyElement("img")}),i.for("editingDowncast").elementToElement({model:"imageInline",view:(e,{writer:i})=>n.toImageWidget(g(i,"imageInline"),i,t("image widget"))}),i.for("downcast").add(E(n,"imageInline","src")).add(E(n,"imageInline","alt")).add(x(n,"imageInline")),i.for("upcast").elementToElement({view:d(e,"imageInline"),model:(e,{writer:t})=>t.createElement("imageInline",e.hasAttribute("src")?{src:e.getAttribute("src")}:null)})}_setupClipboardIntegration(){const e=this.editor,t=e.model,i=e.editing.view,n=e.plugins.get("ImageUtils");this.listenTo(e.plugins.get("ClipboardPipeline"),"inputTransformation",(o,s)=>{const r=Array.from(s.content.getChildren());let l;if(!r.every(n.isBlockImageView))return;l=s.targetRanges?e.editing.mapper.toModelRange(s.targetRanges[0]):t.document.selection.getFirstRange();const c=t.createSelection(l);if("imageInline"===m(t.schema,c)){const e=new a.UpcastWriter(i.document),t=r.map(t=>1===t.childCount?(Array.from(t.getAttributes()).forEach(i=>e.setAttribute(...i,n.findViewImgElement(t))),t.getChild(0)):t);s.content=e.createDocumentFragment(t)}})}}class R extends n.Plugin{static get requires(){return[z,c.Widget,y]}static get pluginName(){return"ImageInline"}}class U extends n.Plugin{static get requires(){return[V,R]}static get pluginName(){return"Image"}}function O(e){for(const t of e.getChildren())if(t&&t.is("element","caption"))return t;return null}function P(e,t){const i=t.getFirstPosition().findAncestor("caption");return i&&e.isBlockImage(i.parent)?i:null}class j extends n.Command{refresh(){const e=this.editor,t=e.plugins.get("ImageUtils");if(!e.plugins.has(A))return this.isEnabled=!1,void(this.value=!1);const i=e.model.document.selection,n=i.getSelectedElement();if(!n){const e=P(t,i);return this.isEnabled=!!e,void(this.value=!!e)}this.isEnabled=this.editor.plugins.get("ImageUtils").isImage(n),this.isEnabled?this.value=!!O(n):this.value=!1}execute(e={}){const{focusCaptionOnShow:t}=e;this.editor.model.change(e=>{this.value?this._hideImageCaption(e):this._showImageCaption(e,t)})}_showImageCaption(e,t){const i=this.editor.model.document.selection,n=this.editor.plugins.get("ImageCaptionEditing");let o=i.getSelectedElement();const a=n._getSavedCaption(o);this.editor.plugins.get("ImageUtils").isInlineImage(o)&&(this.editor.execute("imageTypeBlock"),o=i.getSelectedElement());const s=a||e.createElement("caption");e.append(s,o),t&&e.setSelection(s,"in")}_hideImageCaption(e){const t=this.editor,i=t.model.document.selection,n=t.plugins.get("ImageCaptionEditing"),o=t.plugins.get("ImageUtils");let a,s=i.getSelectedElement();s?a=O(s):(a=P(o,i),s=a.parent),n._saveCaption(s,a),e.setSelection(s,"on"),e.remove(a)}}class N extends n.Plugin{static get requires(){return[u]}static get pluginName(){return"ImageCaptionEditing"}constructor(e){super(e),this._savedCaptionsMap=new WeakMap}init(){const e=this.editor,t=e.model.schema;t.isRegistered("caption")?t.extend("caption",{allowIn:"imageBlock"}):t.register("caption",{allowIn:"imageBlock",allowContentOf:"$block",isLimit:!0}),e.commands.add("toggleImageCaption",new j(this.editor)),this._setupConversion(),this._setupImageTypeCommandsIntegration()}_setupConversion(){const e=this.editor,t=e.editing.view,i=e.plugins.get("ImageUtils"),n=e.t;e.conversion.for("upcast").elementToElement({view:e=>function(e,t){return"figcaption"==t.name&&e.isBlockImageView(t.parent)?{name:!0}:null}(i,e),model:"caption"}),e.conversion.for("dataDowncast").elementToElement({model:"caption",view:(e,{writer:t})=>i.isBlockImage(e.parent)?t.createContainerElement("figcaption"):null}),e.conversion.for("editingDowncast").elementToElement({model:"caption",view:(e,{writer:o})=>{if(!i.isBlockImage(e.parent))return null;const s=o.createEditableElement("figcaption");return o.setCustomProperty("imageCaption",!0,s),Object(a.enablePlaceholder)({view:t,element:s,text:n("Enter image caption"),keepOnFocus:!0}),Object(c.toWidgetEditable)(s,o)}}),e.editing.mapper.on("modelToViewPosition",L(t)),e.data.mapper.on("modelToViewPosition",L(t))}_setupImageTypeCommandsIntegration(){const e=this.editor,t=e.plugins.get("ImageUtils"),i=e.commands.get("imageTypeInline"),n=e.commands.get("imageTypeBlock"),o=e=>{if(!e.return)return;const{oldElement:i,newElement:n}=e.return;if(!i)return;if(t.isBlockImage(i)){const e=O(i);if(e)return void this._saveCaption(n,e)}const o=this._getSavedCaption(i);o&&this._saveCaption(n,o)};i&&this.listenTo(i,"execute",o,{priority:"low"}),n&&this.listenTo(n,"execute",o,{priority:"low"})}_getSavedCaption(e){const t=this._savedCaptionsMap.get(e);return t?a.Element.fromJSON(t):null}_saveCaption(e,t){this._savedCaptionsMap.set(e,t.toJSON())}}function L(e){return(t,i)=>{const n=i.modelPosition,o=n.parent;if(!o.is("element","imageBlock"))return;const a=i.mapper.toViewElement(o);i.viewPosition=e.createPositionAt(a,n.offset+1)}}class F extends n.Plugin{static get requires(){return[u]}static get pluginName(){return"ImageCaptionUI"}init(){const e=this.editor,t=e.editing.view,i=e.plugins.get("ImageUtils"),o=e.t;e.ui.componentFactory.add("toggleImageCaption",a=>{const s=e.commands.get("toggleImageCaption"),r=new w.ButtonView(a);return r.set({icon:n.icons.caption,tooltip:!0,isToggleable:!0}),r.bind("isOn","isEnabled").to(s,"value","isEnabled"),r.bind("label").to(s,"value",e=>o(e?"Toggle caption off":"Toggle caption on")),this.listenTo(r,"execute",()=>{e.execute("toggleImageCaption",{focusCaptionOnShow:!0});const n=P(i,e.model.document.selection);if(n){const i=e.editing.mapper.toViewElement(n);t.scrollToTheSelection(),t.change(e=>{e.addClass("image__caption_highlighted",i)})}}),r})}}i(18);class D extends n.Plugin{static get requires(){return[N,F]}static get pluginName(){return"ImageCaption"}}var M=i(6);function W(e){const t=e.map(e=>e.replace("+","\\+"));return new RegExp(`^image\\/(${t.join("|")})$`)}function q(e){return new Promise((t,i)=>{const n=e.getAttribute("src");fetch(n).then(e=>e.blob()).then(e=>{const i=$(e,n),o=i.replace("image/",""),a=new File([e],"image."+o,{type:i});t(a)}).catch(e=>e&&"TypeError"===e.name?function(e){return function(e){return new Promise((t,i)=>{const n=l.global.document.createElement("img");n.addEventListener("load",()=>{const e=l.global.document.createElement("canvas");e.width=n.width,e.height=n.height;e.getContext("2d").drawImage(n,0,0),e.toBlob(e=>e?t(e):i())}),n.addEventListener("error",()=>i()),n.src=e})}(e).then(t=>{const i=$(t,e),n=i.replace("image/","");return new File([t],"image."+n,{type:i})})}(n).then(t).catch(i):i(e))})}function $(e,t){return e.type?e.type:t.match(/data:(image\/\w+);base64/)?t.match(/data:(image\/\w+);base64/)[1].toLowerCase():"image/jpeg"}class H extends n.Plugin{static get pluginName(){return"ImageUploadUI"}init(){const e=this.editor,t=e.t,i=i=>{const o=new M.FileDialogButtonView(i),a=e.commands.get("uploadImage"),s=e.config.get("image.upload.types"),r=W(s);return o.set({acceptedType:s.map(e=>"image/"+e).join(","),allowMultipleFiles:!0}),o.buttonView.set({label:t("Insert image"),icon:n.icons.image,tooltip:!0}),o.buttonView.bind("isEnabled").to(a),o.on("done",(t,i)=>{const n=Array.from(i).filter(e=>r.test(e.type));n.length&&e.execute("uploadImage",{file:n})}),o};e.ui.componentFactory.add("uploadImage",i),e.ui.componentFactory.add("imageUpload",i)}}i(20),i(22),i(24);class K extends n.Plugin{static get pluginName(){return"ImageUploadProgress"}constructor(e){super(e),this.placeholder="data:image/svg+xml;utf8,"+encodeURIComponent('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 700 250"><rect rx="4"/></svg>')}init(){const e=this.editor;e.plugins.has("ImageBlockEditing")&&e.editing.downcastDispatcher.on("attribute:uploadStatus:imageBlock",(...e)=>this.uploadStatusChange(...e)),e.plugins.has("ImageInlineEditing")&&e.editing.downcastDispatcher.on("attribute:uploadStatus:imageInline",(...e)=>this.uploadStatusChange(...e))}uploadStatusChange(e,t,i){const n=this.editor,o=t.item,a=o.getAttribute("uploadId");if(!i.consumable.consume(t.item,e.name))return;const s=n.plugins.get("ImageUtils"),r=n.plugins.get(M.FileRepository),l=a?t.attributeNewValue:null,c=this.placeholder,g=n.editing.mapper.toViewElement(o),d=i.writer;if("reading"==l)return G(g,d),void J(s,c,g,d);if("uploading"==l){const e=r.loaders.get(a);return G(g,d),void(e?(X(g,d),function(e,t,i,n){const o=function(e){const t=e.createUIElement("div",{class:"ck-progress-bar"});return e.setCustomProperty("progressBar",!0,t),t}(t);t.insert(t.createPositionAt(e,"end"),o),i.on("change:uploadedPercent",(e,t,i)=>{n.change(e=>{e.setStyle("width",i+"%",o)})})}(g,d,e,n.editing.view),function(e,t,i,n){if(n.data){const o=e.findViewImgElement(t);i.setAttribute("src",n.data,o)}}(s,g,d,e)):J(s,c,g,d))}"complete"==l&&r.loaders.get(a)&&function(e,t,i){const n=t.createUIElement("div",{class:"ck-image-upload-complete-icon"});t.insert(t.createPositionAt(e,"end"),n),setTimeout(()=>{i.change(e=>e.remove(e.createRangeOn(n)))},3e3)}(g,d,n.editing.view),function(e,t){Y(e,t,"progressBar")}(g,d),X(g,d),function(e,t){t.removeClass("ck-appear",e)}(g,d)}}function G(e,t){e.hasClass("ck-appear")||t.addClass("ck-appear",e)}function J(e,t,i,n){i.hasClass("ck-image-upload-placeholder")||n.addClass("ck-image-upload-placeholder",i);const o=e.findViewImgElement(i);o.getAttribute("src")!==t&&n.setAttribute("src",t,o),Q(i,"placeholder")||n.insert(n.createPositionAfter(o),function(e){const t=e.createUIElement("div",{class:"ck-upload-placeholder-loader"});return e.setCustomProperty("placeholder",!0,t),t}(n))}function X(e,t){e.hasClass("ck-image-upload-placeholder")&&t.removeClass("ck-image-upload-placeholder",e),Y(e,t,"placeholder")}function Q(e,t){for(const i of e.getChildren())if(i.getCustomProperty(t))return i}function Y(e,t,i){const n=Q(e,i);n&&t.remove(t.createRangeOn(n))}class Z extends n.Command{refresh(){const e=this.editor,t=e.plugins.get("ImageUtils"),i=e.model.document.selection.getSelectedElement();this.isEnabled=t.isImageAllowed()||t.isImage(i)}execute(e){const t=Object(l.toArray)(e.file),i=this.editor.model.document.selection,n=this.editor.plugins.get("ImageUtils"),o=Object.fromEntries(i.getAttributes());t.forEach((e,t)=>{const a=i.getSelectedElement();if(t&&a&&n.isImage(a)){const t=this.editor.model.createPositionAfter(a);this._uploadImage(e,o,t)}else this._uploadImage(e,o)})}_uploadImage(e,t,i){const n=this.editor,o=n.plugins.get(M.FileRepository).createLoader(e),a=n.plugins.get("ImageUtils");o&&a.insertImage({...t,uploadId:o.id},i)}}class ee extends n.Plugin{static get requires(){return[M.FileRepository,w.Notification,o.ClipboardPipeline,u]}static get pluginName(){return"ImageUploadEditing"}constructor(e){super(e),e.config.define("image",{upload:{types:["jpeg","png","gif","bmp","webp","tiff"]}}),this._uploadImageElements=new Map}init(){const e=this.editor,t=e.model.document,i=e.conversion,n=e.plugins.get(M.FileRepository),o=e.plugins.get("ImageUtils"),s=W(e.config.get("image.upload.types")),r=new Z(e);e.commands.add("uploadImage",r),e.commands.add("imageUpload",r),i.for("upcast").attributeToAttribute({view:{name:"img",key:"uploadId"},model:"uploadId"}),this.listenTo(e.editing.view.document,"clipboardInput",(t,i)=>{if(n=i.dataTransfer,Array.from(n.types).includes("text/html")&&""!==n.getData("text/html"))return;var n;const o=Array.from(i.dataTransfer.files).filter(e=>!!e&&s.test(e.type));o.length&&(t.stop(),e.model.change(t=>{i.targetRanges&&t.setSelection(i.targetRanges.map(t=>e.editing.mapper.toModelRange(t))),e.model.enqueueChange("default",()=>{e.execute("uploadImage",{file:o})})}))}),this.listenTo(e.plugins.get("ClipboardPipeline"),"inputTransformation",(t,i)=>{const s=Array.from(e.editing.view.createRangeIn(i.content)).filter(e=>function(e,t){return!(!e.isInlineImageView(t)||!t.getAttribute("src"))&&(t.getAttribute("src").match(/^data:image\/\w+;base64,/g)||t.getAttribute("src").match(/^blob:/g))}(o,e.item)&&!e.item.getAttribute("uploadProcessed")).map(e=>({promise:q(e.item),imageElement:e.item}));if(!s.length)return;const r=new a.UpcastWriter(e.editing.view.document);for(const e of s){r.setAttribute("uploadProcessed",!0,e.imageElement);const t=n.createLoader(e.promise);t&&(r.setAttribute("src","",e.imageElement),r.setAttribute("uploadId",t.id,e.imageElement))}}),e.editing.view.document.on("dragover",(e,t)=>{t.preventDefault()}),t.on("change",()=>{const i=t.differ.getChanges({includeChangesInGraveyard:!0}).reverse(),o=new Set;for(const t of i)if("insert"==t.type&&"$text"!=t.name){const i=t.position.nodeAfter,a="$graveyard"==t.position.root.rootName;for(const t of te(e,i)){const e=t.getAttribute("uploadId");if(!e)continue;const i=n.loaders.get(e);i&&(a?o.has(e)||i.abort():(o.add(e),this._uploadImageElements.set(e,t),"idle"==i.status&&this._readAndUpload(i)))}}}),this.on("uploadComplete",(e,{imageElement:t,data:i})=>{const n=i.urls?i.urls:i;this.editor.model.change(e=>{e.setAttribute("src",n.default,t),this._parseAndSetSrcsetAttributeOnImage(n,t,e)})},{priority:"low"})}afterInit(){const e=this.editor.model.schema;this.editor.plugins.has("ImageBlockEditing")&&e.extend("imageBlock",{allowAttributes:["uploadId","uploadStatus"]}),this.editor.plugins.has("ImageInlineEditing")&&e.extend("imageInline",{allowAttributes:["uploadId","uploadStatus"]})}_readAndUpload(e){const t=this.editor,i=t.model,n=t.locale.t,o=t.plugins.get(M.FileRepository),a=t.plugins.get(w.Notification),s=t.plugins.get("ImageUtils"),r=this._uploadImageElements;return i.enqueueChange("transparent",t=>{t.setAttribute("uploadStatus","reading",r.get(e.id))}),e.read().then(()=>{const n=e.upload(),o=r.get(e.id);if(l.env.isSafari){const e=t.editing.mapper.toViewElement(o),i=s.findViewImgElement(e);t.editing.view.once("render",()=>{if(!i.parent)return;const e=t.editing.view.domConverter.mapViewToDom(i.parent);if(!e)return;const n=e.style.display;e.style.display="none",e._ckHack=e.offsetHeight,e.style.display=n})}return i.enqueueChange("transparent",e=>{e.setAttribute("uploadStatus","uploading",o)}),n}).then(t=>{i.enqueueChange("transparent",i=>{const n=r.get(e.id);i.setAttribute("uploadStatus","complete",n),this.fire("uploadComplete",{data:t,imageElement:n})}),c()}).catch(t=>{if("error"!==e.status&&"aborted"!==e.status)throw t;"error"==e.status&&t&&a.showWarning(t,{title:n("Upload failed"),namespace:"upload"}),i.enqueueChange("transparent",t=>{t.remove(r.get(e.id))}),c()});function c(){i.enqueueChange("transparent",t=>{const i=r.get(e.id);t.removeAttribute("uploadId",i),t.removeAttribute("uploadStatus",i),r.delete(e.id)}),o.destroyLoader(e)}}_parseAndSetSrcsetAttributeOnImage(e,t,i){let n=0;const o=Object.keys(e).filter(e=>{const t=parseInt(e,10);if(!isNaN(t))return n=Math.max(n,t),!0}).map(t=>`${e[t]} ${t}w`).join(", ");""!=o&&i.setAttribute("srcset",{data:o,width:n},t)}}function te(e,t){const i=e.plugins.get("ImageUtils");return Array.from(e.model.createRangeOn(t)).filter(e=>i.isImage(e.item)).map(e=>e.item)}class ie extends n.Plugin{static get pluginName(){return"ImageUpload"}static get requires(){return[ee,H,K]}}i(26);class ne extends w.View{constructor(e,t={}){super(e);const i=this.bindTemplate;this.set("class",t.class||null),this.children=this.createCollection(),t.children&&t.children.forEach(e=>this.children.add(e)),this.set("_role",null),this.set("_ariaLabelledBy",null),t.labelView&&this.set({_role:"group",_ariaLabelledBy:t.labelView.id}),this.setTemplate({tag:"div",attributes:{class:["ck","ck-form__row",i.to("class")],role:i.to("_role"),"aria-labelledby":i.to("_ariaLabelledBy")},children:this.children})}}i(28);class oe extends w.View{constructor(e,t){super(e);const{insertButtonView:i,cancelButtonView:n}=this._createActionButtons(e);if(this.insertButtonView=i,this.cancelButtonView=n,this.dropdownView=this._createDropdownView(e),this.set("imageURLInputValue",""),this.focusTracker=new l.FocusTracker,this.keystrokes=new l.KeystrokeHandler,this._focusables=new w.ViewCollection,this._focusCycler=new w.FocusCycler({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}}),this.set("_integrations",new l.Collection),t)for(const[e,i]of Object.entries(t))"insertImageViaUrl"===e&&(i.fieldView.bind("value").to(this,"imageURLInputValue",e=>e||""),i.fieldView.on("input",()=>{this.imageURLInputValue=i.fieldView.element.value.trim()})),i.name=e,this._integrations.add(i);this.setTemplate({tag:"form",attributes:{class:["ck","ck-image-insert-form"],tabindex:"-1"},children:[...this._integrations,new ne(e,{children:[this.insertButtonView,this.cancelButtonView],class:"ck-image-insert-form__action-row"})]})}render(){super.render(),Object(w.submitHandler)({view:this});const e=[...this._integrations,this.insertButtonView,this.cancelButtonView];e.forEach(e=>{this._focusables.add(e),this.focusTracker.add(e.element)}),this.keystrokes.listenTo(this.element);const t=e=>e.stopPropagation();this.keystrokes.set("arrowright",t),this.keystrokes.set("arrowleft",t),this.keystrokes.set("arrowup",t),this.keystrokes.set("arrowdown",t),this.listenTo(e[0].element,"selectstart",(e,t)=>{t.stopPropagation()},{priority:"high"})}getIntegration(e){return this._integrations.find(t=>t.name===e)}_createDropdownView(e){const t=e.t,i=Object(w.createDropdown)(e,w.SplitButtonView),o=i.buttonView,a=i.panelView;return o.set({label:t("Insert image"),icon:n.icons.image,tooltip:!0}),a.extendTemplate({attributes:{class:"ck-image-insert__panel"}}),i}_createActionButtons(e){const t=e.t,i=new w.ButtonView(e),o=new w.ButtonView(e);return i.set({label:t("Insert"),icon:n.icons.check,class:"ck-button-save",type:"submit",withText:!0,isEnabled:this.imageURLInputValue}),o.set({label:t("Cancel"),icon:n.icons.cancel,class:"ck-button-cancel",withText:!0}),i.bind("isEnabled").to(this,"imageURLInputValue",e=>!!e),i.delegate("execute").to(this,"submit"),o.delegate("execute").to(this,"cancel"),{insertButtonView:i,cancelButtonView:o}}focus(){this._focusCycler.focusFirst()}}function ae(e){const t=e.t,i=new w.LabeledFieldView(e,w.createLabeledInputText);return i.set({label:t("Insert image via URL")}),i.fieldView.placeholder="https://example.com/image.png",i}class se extends n.Plugin{static get pluginName(){return"ImageInsertUI"}init(){const e=this.editor,t=e=>this._createDropdownView(e);e.ui.componentFactory.add("insertImage",t),e.ui.componentFactory.add("imageInsert",t)}_createDropdownView(e){const t=this.editor,i=new oe(e,function(e){const t=e.config.get("image.insert.integrations"),i=e.plugins.get("ImageInsertUI"),n={insertImageViaUrl:ae(e.locale)};if(!t)return n;if(t.find(e=>"openCKFinder"===e)&&e.ui.componentFactory.has("ckfinder")){const t=e.ui.componentFactory.create("ckfinder");t.set({withText:!0,class:"ck-image-insert__ck-finder-button"}),t.delegate("execute").to(i,"cancel"),n.openCKFinder=t}return t.reduce((t,i)=>(n[i]?t[i]=n[i]:e.ui.componentFactory.has(i)&&(t[i]=e.ui.componentFactory.create(i)),t),{})}(t)),n=t.commands.get("uploadImage"),o=i.dropdownView,a=o.buttonView;return a.actionView=t.ui.componentFactory.create("uploadImage"),a.actionView.extendTemplate({attributes:{class:"ck ck-button ck-splitbutton__action"}}),this._setUpDropdown(o,i,n)}_setUpDropdown(e,t,i){const n=this.editor,o=n.t,a=t.insertButtonView,s=t.getIntegration("insertImageViaUrl"),r=e.panelView,l=this.editor.plugins.get("ImageUtils");function c(){n.editing.view.focus(),e.isOpen=!1}return e.bind("isEnabled").to(i),e.buttonView.once("open",()=>{r.children.add(t)}),e.on("change:isOpen",()=>{const i=n.model.document.selection.getSelectedElement();e.isOpen&&(t.focus(),l.isImage(i)?(t.imageURLInputValue=i.getAttribute("src"),a.label=o("Update"),s.label=o("Update image URL")):(t.imageURLInputValue="",a.label=o("Insert"),s.label=o("Insert image via URL")))},{priority:"low"}),t.delegate("submit","cancel").to(e),this.delegate("cancel").to(e),e.on("submit",()=>{c(),function(){const e=n.model.document.selection.getSelectedElement();l.isImage(e)?n.model.change(i=>{i.setAttribute("src",t.imageURLInputValue,e),i.removeAttribute("srcset",e),i.removeAttribute("sizes",e)}):n.execute("insertImage",{source:t.imageURLInputValue})}()}),e.on("cancel",()=>{c()}),e}}class re extends n.Plugin{static get pluginName(){return"ImageInsert"}static get requires(){return[ie,se]}}class le extends n.Command{refresh(){const e=this.editor,t=e.plugins.get("ImageUtils").getClosestSelectedImageElement(e.model.document.selection);this.isEnabled=!!t,t&&t.hasAttribute("width")?this.value={width:t.getAttribute("width"),height:null}:this.value=null}execute(e){const t=this.editor,i=t.model,n=t.plugins.get("ImageUtils").getClosestSelectedImageElement(i.document.selection);this.value={width:e.width,height:null},n&&i.change(t=>{t.setAttribute("width",e.width,n)})}}class ce extends n.Plugin{static get requires(){return[u]}static get pluginName(){return"ImageResizeEditing"}constructor(e){super(e),e.config.define("image",{resizeUnit:"%",resizeOptions:[{name:"resizeImage:original",value:null,icon:"original"},{name:"resizeImage:25",value:"25",icon:"small"},{name:"resizeImage:50",value:"50",icon:"medium"},{name:"resizeImage:75",value:"75",icon:"large"}]})}init(){const e=this.editor,t=new le(e);this._registerSchema(),this._registerConverters("imageBlock"),this._registerConverters("imageInline"),e.commands.add("resizeImage",t),e.commands.add("imageResize",t)}_registerSchema(){this.editor.plugins.has("ImageBlockEditing")&&this.editor.model.schema.extend("imageBlock",{allowAttributes:"width"}),this.editor.plugins.has("ImageInlineEditing")&&this.editor.model.schema.extend("imageInline",{allowAttributes:"width"})}_registerConverters(e){const t=this.editor;t.conversion.for("downcast").add(t=>t.on("attribute:width:"+e,(e,t,i)=>{if(!i.consumable.consume(t.item,e.name))return;const n=i.writer,o=i.mapper.toViewElement(t.item);null!==t.attributeNewValue?(n.setStyle("width",t.attributeNewValue,o),n.addClass("image_resized",o)):(n.removeStyle("width",o),n.removeClass("image_resized",o))})),t.conversion.for("upcast").attributeToAttribute({view:{name:"imageBlock"===e?"figure":"img",styles:{width:/.+/}},model:{key:"width",value:e=>e.getStyle("width")}})}}const ge={small:n.icons.objectSizeSmall,medium:n.icons.objectSizeMedium,large:n.icons.objectSizeLarge,original:n.icons.objectSizeFull};class de extends n.Plugin{static get requires(){return[ce]}static get pluginName(){return"ImageResizeButtons"}constructor(e){super(e),this._resizeUnit=e.config.get("image.resizeUnit")}init(){const e=this.editor,t=e.config.get("image.resizeOptions"),i=e.commands.get("resizeImage");this.bind("isEnabled").to(i);for(const e of t)this._registerImageResizeButton(e);this._registerImageResizeDropdown(t)}_registerImageResizeButton(e){const t=this.editor,{name:i,value:n,icon:o}=e,a=n?n+this._resizeUnit:null;t.ui.componentFactory.add(i,i=>{const n=new w.ButtonView(i),s=t.commands.get("resizeImage"),r=this._getOptionLabelValue(e,!0);if(!ge[o])throw new l.CKEditorError("imageresizebuttons-missing-icon",t,e);return n.set({label:r,icon:ge[o],tooltip:r,isToggleable:!0}),n.bind("isEnabled").to(this),n.bind("isOn").to(s,"value",me(a)),this.listenTo(n,"execute",()=>{t.execute("resizeImage",{width:a})}),n})}_registerImageResizeDropdown(e){const t=this.editor,i=t.t,n=e.find(e=>!e.value),o=o=>{const a=t.commands.get("resizeImage"),s=Object(w.createDropdown)(o,w.DropdownButtonView),r=s.buttonView;return r.set({tooltip:i("Resize image"),commandValue:n.value,icon:ge.medium,isToggleable:!0,label:this._getOptionLabelValue(n),withText:!0,class:"ck-resize-image-button"}),r.bind("label").to(a,"value",e=>e&&e.width?e.width:this._getOptionLabelValue(n)),s.bind("isOn").to(a),s.bind("isEnabled").to(this),Object(w.addListToDropdown)(s,this._getResizeDropdownListItemDefinitions(e,a)),s.listView.ariaLabel=i("Image resize list"),this.listenTo(s,"execute",e=>{t.execute(e.source.commandName,{width:e.source.commandValue}),t.editing.view.focus()}),s};t.ui.componentFactory.add("resizeImage",o),t.ui.componentFactory.add("imageResize",o)}_getOptionLabelValue(e,t){const i=this.editor.t;return e.label?e.label:t?e.value?i("Resize image to %0",e.value+this._resizeUnit):i("Resize image to the original size"):e.value?e.value+this._resizeUnit:i("Original")}_getResizeDropdownListItemDefinitions(e,t){const i=new l.Collection;return e.map(e=>{const n=e.value?e.value+this._resizeUnit:null,o={type:"button",model:new w.Model({commandName:"resizeImage",commandValue:n,label:this._getOptionLabelValue(e),withText:!0,icon:null})};o.model.bind("isOn").to(t,"value",me(n)),i.add(o)}),i}}function me(e){return t=>null===e&&t===e||t&&t.width===e}const ue=/(image|image-inline)/;class pe extends n.Plugin{static get requires(){return[c.WidgetResize]}static get pluginName(){return"ImageResizeHandles"}init(){const e=this.editor.commands.get("resizeImage");this.bind("isEnabled").to(e),this._setupResizerCreator()}_setupResizerCreator(){const e=this.editor,t=e.editing.view;t.addObserver(C),this.listenTo(t.document,"imageLoaded",(i,n)=>{if(!n.target.matches("figure.image.ck-widget > img,figure.image.ck-widget > picture > img,figure.image.ck-widget > a > img,figure.image.ck-widget > a > picture > img,span.image-inline.ck-widget > img,span.image-inline.ck-widget > picture > img"))return;const o=e.editing.view.domConverter,a=o.domToView(n.target).findAncestor({classes:ue});let s=this.editor.plugins.get(c.WidgetResize).getResizerByViewElement(a);if(s)return void s.redraw();const r=e.editing.mapper,l=r.toModelElement(a);s=e.plugins.get(c.WidgetResize).attachTo({unit:e.config.get("image.resizeUnit"),modelElement:l,viewElement:a,editor:e,getHandleHost:e=>e.querySelector("img"),getResizeHost:()=>o.viewToDom(r.toViewElement(l.parent)),isCentered(){const e=l.getAttribute("imageStyle");return!e||"block"==e||"alignCenter"==e},onCommit(i){t.change(e=>{e.removeClass("image_resized",a)}),e.execute("resizeImage",{width:i})}}),s.on("updateSize",()=>{a.hasClass("image_resized")||t.change(e=>{e.addClass("image_resized",a)})}),s.bind("isEnabled").to(this)})}}i(30);class he extends n.Plugin{static get requires(){return[ce,pe,de]}static get pluginName(){return"ImageResize"}}class fe extends n.Command{constructor(e,t){super(e),this._defaultStyles={imageBlock:!1,imageInline:!1},this._styles=new Map(t.map(e=>{if(e.isDefault)for(const t of e.modelElements)this._defaultStyles[t]=e.name;return[e.name,e]}))}refresh(){const e=this.editor.plugins.get("ImageUtils").getClosestSelectedImageElement(this.editor.model.document.selection);this.isEnabled=!!e,this.isEnabled?e.hasAttribute("imageStyle")?this.value=e.getAttribute("imageStyle"):this.value=this._defaultStyles[e.name]:this.value=!1}execute(e={}){const t=this.editor,i=t.model,n=t.plugins.get("ImageUtils");i.change(t=>{const o=e.value;let a=n.getClosestSelectedImageElement(i.document.selection);o&&this.shouldConvertImageType(o,a)&&(this.editor.execute(n.isBlockImage(a)?"imageTypeInline":"imageTypeBlock"),a=n.getClosestSelectedImageElement(i.document.selection)),!o||this._styles.get(o).isDefault?t.removeAttribute("imageStyle",a):t.setAttribute("imageStyle",o,a)})}shouldConvertImageType(e,t){return!this._styles.get(e).modelElements.includes(t.name)}}const{objectFullWidth:be,objectInline:ke,objectLeft:we,objectRight:Ie,objectCenter:ve,objectBlockLeft:_e,objectBlockRight:ye}=n.icons,xe={inline:{name:"inline",title:"In line",icon:ke,modelElements:["imageInline"],isDefault:!0},alignLeft:{name:"alignLeft",title:"Left aligned image",icon:we,modelElements:["imageBlock","imageInline"],className:"image-style-align-left"},alignBlockLeft:{name:"alignBlockLeft",title:"Left aligned image",icon:_e,modelElements:["imageBlock"],className:"image-style-block-align-left"},alignCenter:{name:"alignCenter",title:"Centered image",icon:ve,modelElements:["imageBlock"],className:"image-style-align-center"},alignRight:{name:"alignRight",title:"Right aligned image",icon:Ie,modelElements:["imageBlock","imageInline"],className:"image-style-align-right"},alignBlockRight:{name:"alignBlockRight",title:"Right aligned image",icon:ye,modelElements:["imageBlock"],className:"image-style-block-align-right"},block:{name:"block",title:"Centered image",icon:ve,modelElements:["imageBlock"],isDefault:!0},side:{name:"side",title:"Side image",icon:Ie,modelElements:["imageBlock"],className:"image-style-side"}},Ee={full:be,left:_e,right:ye,center:ve,inlineLeft:we,inlineRight:Ie,inline:ke},Ce=[{name:"imageStyle:wrapText",title:"Wrap text",defaultItem:"imageStyle:alignLeft",items:["imageStyle:alignLeft","imageStyle:alignRight"]},{name:"imageStyle:breakText",title:"Break text",defaultItem:"imageStyle:block",items:["imageStyle:alignBlockLeft","imageStyle:block","imageStyle:alignBlockRight"]}];function Te(e){Object(l.logWarning)("image-style-configuration-definition-invalid",e)}var Se={normalizeStyles:function(e){return(e.configuredStyles.options||[]).map(e=>function(e){e="string"==typeof e?xe[e]?{...xe[e]}:{name:e}:function(e,t){const i={...t};for(const n in e)Object.prototype.hasOwnProperty.call(t,n)||(i[n]=e[n]);return i}(xe[e.name],e);"string"==typeof e.icon&&(e.icon=Ee[e.icon]||e.icon);return e}(e)).filter(t=>function(e,{isBlockPluginLoaded:t,isInlinePluginLoaded:i}){const{modelElements:n,name:o}=e;if(!(n&&n.length&&o))return Te({style:e}),!1;{const o=[t?"imageBlock":null,i?"imageInline":null];if(!n.some(e=>o.includes(e)))return Object(l.logWarning)("image-style-missing-dependency",{style:e,missingPlugins:n.map(e=>"imageBlock"===e?"ImageBlockEditing":"ImageInlineEditing")}),!1}return!0}(t,e))},getDefaultStylesConfiguration:function(e,t){return e&&t?{options:["inline","alignLeft","alignRight","alignCenter","alignBlockLeft","alignBlockRight","block","side"]}:e?{options:["block","side"]}:t?{options:["inline","alignLeft","alignRight"]}:{}},getDefaultDropdownDefinitions:function(e){return e.has("ImageBlockEditing")&&e.has("ImageInlineEditing")?[...Ce]:[]},warnInvalidStyle:Te,DEFAULT_OPTIONS:xe,DEFAULT_ICONS:Ee,DEFAULT_DROPDOWN_DEFINITIONS:Ce};function Be(e,t){for(const i of t)if(i.name===e)return i}class Ae extends n.Plugin{static get pluginName(){return"ImageStyleEditing"}static get requires(){return[u]}init(){const{normalizeStyles:e,getDefaultStylesConfiguration:t}=Se,i=this.editor,n=i.plugins.has("ImageBlockEditing"),o=i.plugins.has("ImageInlineEditing");i.config.define("image.styles",t(n,o)),this.normalizedStyles=e({configuredStyles:i.config.get("image.styles"),isBlockPluginLoaded:n,isInlinePluginLoaded:o}),this._setupConversion(n,o),this._setupPostFixer(),i.commands.add("imageStyle",new fe(i,this.normalizedStyles))}_setupConversion(e,t){const i=this.editor,n=i.model.schema,o=(a=this.normalizedStyles,(e,t,i)=>{if(!i.consumable.consume(t.item,e.name))return;const n=Be(t.attributeNewValue,a),o=Be(t.attributeOldValue,a),s=i.mapper.toViewElement(t.item),r=i.writer;o&&r.removeClass(o.className,s),n&&r.addClass(n.className,s)});var a;const s=function(e){const t={imageInline:e.filter(e=>!e.isDefault&&e.modelElements.includes("imageInline")),imageBlock:e.filter(e=>!e.isDefault&&e.modelElements.includes("imageBlock"))};return(e,i,n)=>{if(!i.modelRange)return;const o=i.viewItem,a=Object(l.first)(i.modelRange.getItems());if(a&&n.schema.checkAttribute(a,"imageStyle"))for(const e of t[a.name])n.consumable.consume(o,{classes:e.className})&&n.writer.setAttribute("imageStyle",e.name,a)}}(this.normalizedStyles);i.editing.downcastDispatcher.on("attribute:imageStyle",o),i.data.downcastDispatcher.on("attribute:imageStyle",o),e&&(n.extend("imageBlock",{allowAttributes:"imageStyle"}),i.data.upcastDispatcher.on("element:figure",s,{priority:"low"})),t&&(n.extend("imageInline",{allowAttributes:"imageStyle"}),i.data.upcastDispatcher.on("element:img",s,{priority:"low"}))}_setupPostFixer(){const e=this.editor,t=e.model.document,i=e.plugins.get(u),n=new Map(this.normalizedStyles.map(e=>[e.name,e]));t.registerPostFixer(e=>{let o=!1;for(const a of t.differ.getChanges())if("insert"==a.type||"attribute"==a.type&&"imageStyle"==a.attributeKey){let t="insert"==a.type?a.position.nodeAfter:a.range.start.nodeAfter;if(t&&t.is("element","paragraph")&&t.childCount>0&&(t=t.getChild(0)),!i.isImage(t))continue;const s=t.getAttribute("imageStyle");if(!s)continue;const r=n.get(s);r&&r.modelElements.includes(t.name)||(e.removeAttribute("imageStyle",t),o=!0)}return o})}}var Ve=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)};var ze=function(e){return e};i(32);class Re extends n.Plugin{static get requires(){return[Ae]}static get pluginName(){return"ImageStyleUI"}get localizedDefaultStylesTitles(){const e=this.editor.t;return{"Wrap text":e("Wrap text"),"Break text":e("Break text"),"In line":e("In line"),"Full size image":e("Full size image"),"Side image":e("Side image"),"Left aligned image":e("Left aligned image"),"Centered image":e("Centered image"),"Right aligned image":e("Right aligned image")}}init(){const e=this.editor.plugins,t=this.editor.config.get("image.toolbar")||[],i=Ue(e.get("ImageStyleEditing").normalizedStyles,this.localizedDefaultStylesTitles);for(const e of i)this._createButton(e);const n=Ue([...t.filter(Ve),...Se.getDefaultDropdownDefinitions(e)],this.localizedDefaultStylesTitles);for(const e of n)this._createDropdown(e,i)}_createDropdown(e,t){const i=this.editor.ui.componentFactory;i.add(e.name,n=>{let o;const{defaultItem:a,items:s,title:r}=e,l=s.filter(e=>t.find(({name:t})=>Oe(t)===e)).map(e=>{const t=i.create(e);return e===a&&(o=t),t});s.length!==l.length&&Se.warnInvalidStyle({dropdown:e});const c=Object(w.createDropdown)(n,w.SplitButtonView),g=c.buttonView;return Object(w.addToolbarToDropdown)(c,l),g.set({label:Pe(r,o.label),class:null,tooltip:!0}),g.bind("icon").toMany(l,"isOn",(...e)=>{const t=e.findIndex(ze);return t<0?o.icon:l[t].icon}),g.bind("label").toMany(l,"isOn",(...e)=>{const t=e.findIndex(ze);return Pe(r,t<0?o.label:l[t].label)}),g.bind("isOn").toMany(l,"isOn",(...e)=>e.some(ze)),g.bind("class").toMany(l,"isOn",(...e)=>e.some(ze)?"ck-splitbutton_flatten":null),g.on("execute",()=>{l.some(({isOn:e})=>e)?c.isOpen=!c.isOpen:o.fire("execute")}),c.bind("isEnabled").toMany(l,"isEnabled",(...e)=>e.some(ze)),c})}_createButton(e){const t=e.name;this.editor.ui.componentFactory.add(Oe(t),i=>{const n=this.editor.commands.get("imageStyle"),o=new w.ButtonView(i);return o.set({label:e.title,icon:e.icon,tooltip:!0,isToggleable:!0}),o.bind("isEnabled").to(n,"isEnabled"),o.bind("isOn").to(n,"value",e=>e===t),o.on("execute",this._executeCommand.bind(this,t)),o})}_executeCommand(e){this.editor.execute("imageStyle",{value:e}),this.editor.editing.view.focus()}}function Ue(e,t){for(const i of e)t[i.title]&&(i.title=t[i.title]);return e}function Oe(e){return"imageStyle:"+e}function Pe(e,t){return(e?e+": ":"")+t}class je extends n.Plugin{static get requires(){return[Ae,Re]}static get pluginName(){return"ImageStyle"}}class Ne extends n.Plugin{static get requires(){return[c.WidgetToolbarRepository,u]}static get pluginName(){return"ImageToolbar"}afterInit(){const e=this.editor,t=e.t,i=e.plugins.get(c.WidgetToolbarRepository),n=e.plugins.get("ImageUtils");var o;i.register("image",{ariaLabel:t("Image toolbar"),items:(o=e.config.get("image.toolbar")||[],o.map(e=>Ve(e)?e.name:e)),getRelatedElement:e=>n.getClosestSelectedImageWidget(e)})}}}]);
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/indent.js b/core/assets/vendor/ckeditor5/indent.js
new file mode 100644
index 000000000000..959ab76707e0
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/indent.js
@@ -0,0 +1,5 @@
+/*!
+ * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md.
+ */
+!function(t){const e=t.en=t.en||{};e.dictionary=Object.assign(e.dictionary||{},{"Decrease indent":"Decrease indent","Increase indent":"Increase indent"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})),window.CKEditor5=window.CKEditor5||{},window.CKEditor5.indent=function(t){var e={};function n(i){if(e[i])return e[i].exports;var s=e[i]={i:i,l:!1,exports:{}};return t[i].call(s.exports,s,s.exports,n),s.l=!0,s.exports}return n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var s in t)n.d(i,s,function(e){return t[e]}.bind(null,s));return i},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=5)}([function(t,e,n){t.exports=n(1)("./src/core.js")},function(t,e){t.exports=CKEditor5.dll},function(t,e,n){t.exports=n(1)("./src/ui.js")},function(t,e,n){t.exports=n(1)("./src/engine.js")},function(t,e,n){t.exports=n(1)("./src/utils.js")},function(t,e,n){"use strict";n.r(e),n.d(e,"Indent",(function(){return a})),n.d(e,"IndentEditing",(function(){return s})),n.d(e,"IndentUI",(function(){return c})),n.d(e,"IndentBlock",(function(){return b}));var i=n(0);class s extends i.Plugin{static get pluginName(){return"IndentEditing"}init(){const t=this.editor;t.commands.add("indent",new i.MultiCommand(t)),t.commands.add("outdent",new i.MultiCommand(t))}}var o=n(2),r='<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M2 3.75c0 .414.336.75.75.75h14.5a.75.75 0 1 0 0-1.5H2.75a.75.75 0 0 0-.75.75zm5 6c0 .414.336.75.75.75h9.5a.75.75 0 1 0 0-1.5h-9.5a.75.75 0 0 0-.75.75zM2.75 16.5h14.5a.75.75 0 1 0 0-1.5H2.75a.75.75 0 1 0 0 1.5zM1.632 6.95 5.02 9.358a.4.4 0 0 1-.013.661l-3.39 2.207A.4.4 0 0 1 1 11.892V7.275a.4.4 0 0 1 .632-.326z"/></svg>',d='<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M2 3.75c0 .414.336.75.75.75h14.5a.75.75 0 1 0 0-1.5H2.75a.75.75 0 0 0-.75.75zm5 6c0 .414.336.75.75.75h9.5a.75.75 0 1 0 0-1.5h-9.5a.75.75 0 0 0-.75.75zM2.75 16.5h14.5a.75.75 0 1 0 0-1.5H2.75a.75.75 0 1 0 0 1.5zm1.618-9.55L.98 9.358a.4.4 0 0 0 .013.661l3.39 2.207A.4.4 0 0 0 5 11.892V7.275a.4.4 0 0 0-.632-.326z"/></svg>';class c extends i.Plugin{static get pluginName(){return"IndentUI"}init(){const t=this.editor,e=t.locale,n=t.t,i="ltr"==e.uiLanguageDirection?r:d,s="ltr"==e.uiLanguageDirection?d:r;this._defineButton("indent",n("Increase indent"),i),this._defineButton("outdent",n("Decrease indent"),s)}_defineButton(t,e,n){const i=this.editor;i.ui.componentFactory.add(t,s=>{const r=i.commands.get(t),d=new o.ButtonView(s);return d.set({label:e,icon:n,tooltip:!0}),d.bind("isOn","isEnabled").to(r,"value","isEnabled"),this.listenTo(d,"execute",()=>{i.execute(t),i.editing.view.focus()}),d})}}class a extends i.Plugin{static get pluginName(){return"Indent"}static get requires(){return[s,c]}}var u=n(3),l=n(4);class h extends i.Command{constructor(t,e){super(t),this._indentBehavior=e}refresh(){const t=this.editor.model,e=Object(l.first)(t.document.selection.getSelectedBlocks());e&&t.schema.checkAttribute(e,"blockIndent")?this.isEnabled=this._indentBehavior.checkEnabled(e.getAttribute("blockIndent")):this.isEnabled=!1}execute(){const t=this.editor.model,e=function(t){const e=t.document.selection,n=t.schema;return Array.from(e.getSelectedBlocks()).filter(t=>n.checkAttribute(t,"blockIndent"))}(t);t.change(t=>{for(const n of e){const e=n.getAttribute("blockIndent"),i=this._indentBehavior.getNextIndent(e);i?t.setAttribute("blockIndent",i,n):t.removeAttribute("blockIndent",n)}})}}class g{constructor(t){this.isForward="forward"===t.direction,this.offset=t.offset,this.unit=t.unit}checkEnabled(t){const e=parseFloat(t||0);return this.isForward||e>0}getNextIndent(t){const e=parseFloat(t||0);if(!(!t||t.endsWith(this.unit)))return this.isForward?this.offset+this.unit:void 0;const n=e+(this.isForward?this.offset:-this.offset);return n>0?n+this.unit:void 0}}class f{constructor(t){this.isForward="forward"===t.direction,this.classes=t.classes}checkEnabled(t){const e=this.classes.indexOf(t);return this.isForward?e<this.classes.length-1:e>=0}getNextIndent(t){const e=this.classes.indexOf(t),n=this.isForward?1:-1;return this.classes[e+n]}}const m=["paragraph","heading1","heading2","heading3","heading4","heading5","heading6"];class b extends i.Plugin{constructor(t){super(t),t.config.define("indentBlock",{offset:40,unit:"px"})}static get pluginName(){return"IndentBlock"}init(){const t=this.editor,e=t.config.get("indentBlock"),n=!e.classes||!e.classes.length,i=Object.assign({direction:"forward"},e),s=Object.assign({direction:"backward"},e);n?(t.data.addStyleProcessorRules(u.addMarginRules),this._setupConversionUsingOffset(t.conversion),t.commands.add("indentBlock",new h(t,new g(i))),t.commands.add("outdentBlock",new h(t,new g(s)))):(this._setupConversionUsingClasses(e.classes),t.commands.add("indentBlock",new h(t,new f(i))),t.commands.add("outdentBlock",new h(t,new f(s))))}afterInit(){const t=this.editor,e=t.model.schema,n=t.commands.get("indent"),i=t.commands.get("outdent"),s=t.config.get("heading.options");(s&&s.map(t=>t.model)||m).forEach(t=>{e.isRegistered(t)&&e.extend(t,{allowAttributes:"blockIndent"})}),e.setAttributeProperties("blockIndent",{isFormatting:!0}),n.registerChildCommand(t.commands.get("indentBlock")),i.registerChildCommand(t.commands.get("outdentBlock"))}_setupConversionUsingOffset(){const t=this.editor.conversion,e="rtl"===this.editor.locale.contentLanguageDirection?"margin-right":"margin-left";t.for("upcast").attributeToAttribute({view:{styles:{[e]:/[\s\S]+/}},model:{key:"blockIndent",value:t=>t.getStyle(e)}}),t.for("downcast").attributeToAttribute({model:"blockIndent",view:t=>({key:"style",value:{[e]:t}})})}_setupConversionUsingClasses(t){const e={model:{key:"blockIndent",values:[]},view:{}};for(const n of t)e.model.values.push(n),e.view[n]={key:"class",value:[n]};this.editor.conversion.attributeToAttribute(e)}}}]);
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/language.js b/core/assets/vendor/ckeditor5/language.js
new file mode 100644
index 000000000000..760ab9835abb
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/language.js
@@ -0,0 +1,5 @@
+/*!
+ * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md.
+ */
+!function(e){const t=e.en=e.en||{};t.dictionary=Object.assign(t.dictionary||{},{"Choose language":"Choose language",Language:"Language","Remove language":"Remove language"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})),window.CKEditor5=window.CKEditor5||{},window.CKEditor5.language=function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(o,r,function(t){return e[t]}.bind(null,r));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=7)}([function(e,t,n){e.exports=n(3)("./src/core.js")},function(e,t,n){e.exports=n(3)("./src/ui.js")},function(e,t,n){e.exports=n(3)("./src/utils.js")},function(e,t){e.exports=CKEditor5.dll},function(e,t,n){var o=n(5),r=n(6);"string"==typeof(r=r.__esModule?r.default:r)&&(r=[[e.i,r,""]]);var a={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};o(r,a);e.exports=r.locals||{}},function(e,t,n){"use strict";var o,r=function(){return void 0===o&&(o=Boolean(window&&document&&document.all&&!window.atob)),o},a=function(){var e={};return function(t){if(void 0===e[t]){var n=document.querySelector(t);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}e[t]=n}return e[t]}}(),i=[];function u(e){for(var t=-1,n=0;n<i.length;n++)if(i[n].identifier===e){t=n;break}return t}function s(e,t){for(var n={},o=[],r=0;r<e.length;r++){var a=e[r],s=t.base?a[0]+t.base:a[0],l=n[s]||0,c="".concat(s," ").concat(l);n[s]=l+1;var d=u(c),g={css:a[1],media:a[2],sourceMap:a[3]};-1!==d?(i[d].references++,i[d].updater(g)):i.push({identifier:c,updater:b(g,t),references:1}),o.push(c)}return o}function l(e){var t=document.createElement("style"),o=e.attributes||{};if(void 0===o.nonce){var r=n.nc;r&&(o.nonce=r)}if(Object.keys(o).forEach((function(e){t.setAttribute(e,o[e])})),"function"==typeof e.insert)e.insert(t);else{var i=a(e.insert||"head");if(!i)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");i.appendChild(t)}return t}var c,d=(c=[],function(e,t){return c[e]=t,c.filter(Boolean).join("\n")});function g(e,t,n,o){var r=n?"":o.media?"@media ".concat(o.media," {").concat(o.css,"}"):o.css;if(e.styleSheet)e.styleSheet.cssText=d(t,r);else{var a=document.createTextNode(r),i=e.childNodes;i[t]&&e.removeChild(i[t]),i.length?e.insertBefore(a,i[t]):e.appendChild(a)}}function f(e,t,n){var o=n.css,r=n.media,a=n.sourceMap;if(r?e.setAttribute("media",r):e.removeAttribute("media"),a&&"undefined"!=typeof btoa&&(o+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(a))))," */")),e.styleSheet)e.styleSheet.cssText=o;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(o))}}var p=null,m=0;function b(e,t){var n,o,r;if(t.singleton){var a=m++;n=p||(p=l(t)),o=g.bind(null,n,a,!1),r=g.bind(null,n,a,!0)}else n=l(t),o=f.bind(null,n,t),r=function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(n)};return o(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;o(e=t)}else r()}}e.exports=function(e,t){(t=t||{}).singleton||"boolean"==typeof t.singleton||(t.singleton=r());var n=s(e=e||[],t);return function(e){if(e=e||[],"[object Array]"===Object.prototype.toString.call(e)){for(var o=0;o<n.length;o++){var r=u(n[o]);i[r].references--}for(var a=s(e,t),l=0;l<n.length;l++){var c=u(n[l]);0===i[c].references&&(i[c].updater(),i.splice(c,1))}n=a}}}},function(e,t){e.exports=".ck-content span[lang]{font-style:italic}"},function(e,t,n){"use strict";n.r(t),n.d(t,"TextPartLanguage",(function(){return c})),n.d(t,"TextPartLanguageEditing",(function(){return u})),n.d(t,"TextPartLanguageUI",(function(){return l}));var o=n(0),r=n(2);function a(e,t){return`${e}:${t=t||Object(r.getLanguageDirection)(e)}`}class i extends o.Command{refresh(){const e=this.editor.model,t=e.document;this.value=this._getValueFromFirstAllowedNode(),this.isEnabled=e.schema.checkAttributeInSelection(t.selection,"language")}execute({languageCode:e,textDirection:t}={}){const n=this.editor.model,o=n.document.selection,r=!!e&&a(e,t);n.change(e=>{if(o.isCollapsed)r?e.setSelectionAttribute("language",r):e.removeSelectionAttribute("language");else{const t=n.schema.getValidRanges(o.getRanges(),"language");for(const n of t)r?e.setAttribute("language",r,n):e.removeAttribute("language",n)}})}_getValueFromFirstAllowedNode(){const e=this.editor.model,t=e.schema,n=e.document.selection;if(n.isCollapsed)return n.getAttribute("language")||!1;for(const e of n.getRanges())for(const n of e.getItems())if(t.checkAttribute(n,"language"))return n.getAttribute("language")||!1;return!1}}class u extends o.Plugin{static get pluginName(){return"TextPartLanguageEditing"}constructor(e){super(e),e.config.define("language",{textPartLanguage:[{title:"Arabic",languageCode:"ar"},{title:"French",languageCode:"fr"},{title:"Spanish",languageCode:"es"}]})}init(){const e=this.editor;e.model.schema.extend("$text",{allowAttributes:"language"}),e.model.schema.setAttributeProperties("language",{copyOnEnter:!0}),this._defineConverters(),e.commands.add("textPartLanguage",new i(e))}_defineConverters(){const e=this.editor.conversion;e.for("upcast").elementToAttribute({model:{key:"language",value:e=>a(e.getAttribute("lang"),e.getAttribute("dir"))},view:{name:"span",attributes:{lang:/[\s\S]+/}}}),e.for("downcast").attributeToElement({model:"language",view:(e,{writer:t})=>{if(!e)return;const{languageCode:n,textDirection:o}=function(e){const[t,n]=e.split(":");return{languageCode:t,textDirection:n}}(e);return t.createAttributeElement("span",{lang:n,dir:o})}})}}var s=n(1);n(4);class l extends o.Plugin{static get pluginName(){return"TextPartLanguageUI"}init(){const e=this.editor,t=e.t,n=e.config.get("language.textPartLanguage"),o=t("Choose language"),i=t("Remove language"),u=t("Language");e.ui.componentFactory.add("textPartLanguage",t=>{const l=new r.Collection,c={},d=e.commands.get("textPartLanguage");l.add({type:"button",model:new s.Model({label:i,languageCode:!1,withText:!0})}),l.add({type:"separator"});for(const e of n){const t={type:"button",model:new s.Model({label:e.title,languageCode:e.languageCode,textDirection:e.textDirection,withText:!0})},n=a(e.languageCode,e.textDirection);t.model.bind("isOn").to(d,"value",e=>e===n),l.add(t),c[n]=e.title}const g=Object(s.createDropdown)(t);return Object(s.addListToDropdown)(g,l),g.buttonView.set({isOn:!1,withText:!0,tooltip:u}),g.extendTemplate({attributes:{class:["ck-text-fragment-language-dropdown"]}}),g.bind("isEnabled").to(d,"isEnabled"),g.buttonView.bind("label").to(d,"value",e=>c[e]||o),this.listenTo(g,"execute",t=>{d.execute({languageCode:t.source.languageCode,textDirection:t.source.textDirection}),e.editing.view.focus()}),g})}}class c extends o.Plugin{static get requires(){return[u,l]}static get pluginName(){return"TextPartLanguage"}}}]);
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/link.js b/core/assets/vendor/ckeditor5/link.js
new file mode 100644
index 000000000000..9a9b99b56876
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/link.js
@@ -0,0 +1,5 @@
+/*!
+ * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md.
+ */
+!function(e){const t=e.en=e.en||{};t.dictionary=Object.assign(t.dictionary||{},{Downloadable:"Downloadable","Edit link":"Edit link",Link:"Link","Link image":"Link image","Link URL":"Link URL","Open in a new tab":"Open in a new tab","Open link in new tab":"Open link in new tab","This link has no URL":"This link has no URL",Unlink:"Unlink"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})),window.CKEditor5=window.CKEditor5||{},window.CKEditor5.link=function(e){var t={};function i(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,i),o.l=!0,o.exports}return i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)i.d(n,o,function(t){return e[t]}.bind(null,o));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=21)}([function(e,t,i){e.exports=i(4)("./src/ui.js")},function(e,t,i){e.exports=i(4)("./src/core.js")},function(e,t,i){e.exports=i(4)("./src/utils.js")},function(e,t,i){e.exports=i(4)("./src/typing.js")},function(e,t){e.exports=CKEditor5.dll},function(e,t,i){e.exports=i(4)("./src/engine.js")},function(e,t,i){"use strict";var n,o=function(){return void 0===n&&(n=Boolean(window&&document&&document.all&&!window.atob)),n},r=function(){var e={};return function(t){if(void 0===e[t]){var i=document.querySelector(t);if(window.HTMLIFrameElement&&i instanceof window.HTMLIFrameElement)try{i=i.contentDocument.head}catch(e){i=null}e[t]=i}return e[t]}}(),s=[];function a(e){for(var t=-1,i=0;i<s.length;i++)if(s[i].identifier===e){t=i;break}return t}function c(e,t){for(var i={},n=[],o=0;o<e.length;o++){var r=e[o],c=t.base?r[0]+t.base:r[0],l=i[c]||0,u="".concat(c," ").concat(l);i[c]=l+1;var d=a(u),k={css:r[1],media:r[2],sourceMap:r[3]};-1!==d?(s[d].references++,s[d].updater(k)):s.push({identifier:u,updater:g(k,t),references:1}),n.push(u)}return n}function l(e){var t=document.createElement("style"),n=e.attributes||{};if(void 0===n.nonce){var o=i.nc;o&&(n.nonce=o)}if(Object.keys(n).forEach((function(e){t.setAttribute(e,n[e])})),"function"==typeof e.insert)e.insert(t);else{var s=r(e.insert||"head");if(!s)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");s.appendChild(t)}return t}var u,d=(u=[],function(e,t){return u[e]=t,u.filter(Boolean).join("\n")});function k(e,t,i,n){var o=i?"":n.media?"@media ".concat(n.media," {").concat(n.css,"}"):n.css;if(e.styleSheet)e.styleSheet.cssText=d(t,o);else{var r=document.createTextNode(o),s=e.childNodes;s[t]&&e.removeChild(s[t]),s.length?e.insertBefore(r,s[t]):e.appendChild(r)}}function f(e,t,i){var n=i.css,o=i.media,r=i.sourceMap;if(o?e.setAttribute("media",o):e.removeAttribute("media"),r&&"undefined"!=typeof btoa&&(n+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(r))))," */")),e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}var h=null,m=0;function g(e,t){var i,n,o;if(t.singleton){var r=m++;i=h||(h=l(t)),n=k.bind(null,i,r,!1),o=k.bind(null,i,r,!0)}else i=l(t),n=f.bind(null,i,t),o=function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(i)};return n(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;n(e=t)}else o()}}e.exports=function(e,t){(t=t||{}).singleton||"boolean"==typeof t.singleton||(t.singleton=o());var i=c(e=e||[],t);return function(e){if(e=e||[],"[object Array]"===Object.prototype.toString.call(e)){for(var n=0;n<i.length;n++){var o=a(i[n]);s[o].references--}for(var r=c(e,t),l=0;l<i.length;l++){var u=a(i[l]);0===s[u].references&&(s[u].updater(),s.splice(u,1))}i=r}}}},function(e,t,i){var n=i(6),o=i(14);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[e.i,o,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};n(o,r);e.exports=o.locals||{}},function(e,t,i){e.exports=i(4)("./src/clipboard.js")},function(e,t,i){"use strict";(function(e){var i="object"==typeof e&&e&&e.Object===Object&&e;t.a=i}).call(this,i(11))},function(e,t,i){e.exports=i(4)("./src/widget.js")},function(e,t){var i;i=function(){return this}();try{i=i||new Function("return this")()}catch(e){"object"==typeof window&&(i=window)}e.exports=i},function(e,t,i){var n=i(6),o=i(13);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[e.i,o,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck .ck-link_selected{background:var(--ck-color-link-selected-background)}.ck .ck-link_selected span.image-inline{outline:var(--ck-widget-outline-thickness) solid var(--ck-color-link-selected-background)}.ck .ck-fake-link-selection{background:var(--ck-color-link-fake-selection)}.ck .ck-fake-link-selection_collapsed{height:100%;border-right:1px solid var(--ck-color-base-text);margin-right:-1px;outline:1px solid hsla(0,0%,100%,.5)}"},function(e,t){e.exports='.ck-vertical-form .ck-button:after{content:"";width:0;position:absolute;right:-1px;top:var(--ck-spacing-small);bottom:var(--ck-spacing-small);z-index:1}@media screen and (max-width:600px){.ck.ck-responsive-form .ck-button:after{content:"";width:0;position:absolute;right:-1px;top:var(--ck-spacing-small);bottom:var(--ck-spacing-small);z-index:1}}.ck-vertical-form>.ck-button:nth-last-child(2):after{border-right:1px solid var(--ck-color-base-border)}.ck.ck-responsive-form{padding:var(--ck-spacing-large)}.ck.ck-responsive-form:focus{outline:none}[dir=ltr] .ck.ck-responsive-form>:not(:first-child),[dir=rtl] .ck.ck-responsive-form>:not(:last-child){margin-left:var(--ck-spacing-standard)}@media screen and (max-width:600px){.ck.ck-responsive-form{padding:0;width:calc(var(--ck-input-text-width)*0.8)}.ck.ck-responsive-form .ck-labeled-field-view{margin:var(--ck-spacing-large) var(--ck-spacing-large) 0}.ck.ck-responsive-form .ck-labeled-field-view .ck-input-text{min-width:0;width:100%}.ck.ck-responsive-form .ck-labeled-field-view .ck-labeled-field-view__error{white-space:normal}.ck.ck-responsive-form>.ck-button:last-child,.ck.ck-responsive-form>.ck-button:nth-last-child(2){padding:var(--ck-spacing-standard);margin-top:var(--ck-spacing-large);border-radius:0;border:0;border-top:1px solid var(--ck-color-base-border)}[dir=ltr] .ck.ck-responsive-form>.ck-button:last-child,[dir=ltr] .ck.ck-responsive-form>.ck-button:nth-last-child(2),[dir=rtl] .ck.ck-responsive-form>.ck-button:last-child,[dir=rtl] .ck.ck-responsive-form>.ck-button:nth-last-child(2){margin-left:0}.ck.ck-responsive-form>.ck-button:nth-last-child(2):after,[dir=rtl] .ck.ck-responsive-form>.ck-button:last-child:last-of-type,[dir=rtl] .ck.ck-responsive-form>.ck-button:nth-last-child(2):last-of-type{border-right:1px solid var(--ck-color-base-border)}}'},function(e,t,i){var n=i(6),o=i(16);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[e.i,o,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-link-form{display:flex}.ck.ck-link-form .ck-label{display:none}@media screen and (max-width:600px){.ck.ck-link-form{flex-wrap:wrap}.ck.ck-link-form .ck-labeled-field-view{flex-basis:100%}.ck.ck-link-form .ck-button{flex-basis:50%}}.ck.ck-link-form_layout-vertical{display:block}.ck.ck-link-form_layout-vertical .ck-button.ck-button-cancel,.ck.ck-link-form_layout-vertical .ck-button.ck-button-save{margin-top:var(--ck-spacing-medium)}.ck.ck-link-form_layout-vertical{padding:0;min-width:var(--ck-input-text-width)}.ck.ck-link-form_layout-vertical .ck-labeled-field-view{margin:var(--ck-spacing-large) var(--ck-spacing-large) var(--ck-spacing-small)}.ck.ck-link-form_layout-vertical .ck-labeled-field-view .ck-input-text{min-width:0;width:100%}.ck.ck-link-form_layout-vertical .ck-button{padding:var(--ck-spacing-standard);margin:0;border-radius:0;border:0;border-top:1px solid var(--ck-color-base-border);width:50%}[dir=ltr] .ck.ck-link-form_layout-vertical .ck-button,[dir=rtl] .ck.ck-link-form_layout-vertical .ck-button{margin-left:0}[dir=rtl] .ck.ck-link-form_layout-vertical .ck-button:last-of-type{border-right:1px solid var(--ck-color-base-border)}.ck.ck-link-form_layout-vertical .ck.ck-list{margin:var(--ck-spacing-standard) var(--ck-spacing-large)}.ck.ck-link-form_layout-vertical .ck.ck-list .ck-button.ck-switchbutton{border:0;padding:0;width:100%}.ck.ck-link-form_layout-vertical .ck.ck-list .ck-button.ck-switchbutton:hover{background:none}"},function(e,t,i){var n=i(6),o=i(18);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[e.i,o,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};n(o,r);e.exports=o.locals||{}},function(e,t){e.exports=".ck.ck-link-actions{display:flex;flex-direction:row;flex-wrap:nowrap}.ck.ck-link-actions .ck-link-actions__preview{display:inline-block}.ck.ck-link-actions .ck-link-actions__preview .ck-button__label{overflow:hidden}@media screen and (max-width:600px){.ck.ck-link-actions{flex-wrap:wrap}.ck.ck-link-actions .ck-link-actions__preview{flex-basis:100%}.ck.ck-link-actions .ck-button:not(.ck-link-actions__preview){flex-basis:50%}}.ck.ck-link-actions .ck-button.ck-link-actions__preview{padding-left:0;padding-right:0}.ck.ck-link-actions .ck-button.ck-link-actions__preview .ck-button__label{padding:0 var(--ck-spacing-medium);color:var(--ck-color-link-default);text-overflow:ellipsis;cursor:pointer;max-width:var(--ck-input-text-width);min-width:3em;text-align:center}.ck.ck-link-actions .ck-button.ck-link-actions__preview .ck-button__label:hover{text-decoration:underline}.ck.ck-link-actions .ck-button.ck-link-actions__preview,.ck.ck-link-actions .ck-button.ck-link-actions__preview:active,.ck.ck-link-actions .ck-button.ck-link-actions__preview:focus,.ck.ck-link-actions .ck-button.ck-link-actions__preview:hover{background:none}.ck.ck-link-actions .ck-button.ck-link-actions__preview:active{box-shadow:none}.ck.ck-link-actions .ck-button.ck-link-actions__preview:focus .ck-button__label{text-decoration:underline}[dir=ltr] .ck.ck-link-actions .ck-button:not(:first-child),[dir=rtl] .ck.ck-link-actions .ck-button:not(:last-child){margin-left:var(--ck-spacing-standard)}@media screen and (max-width:600px){.ck.ck-link-actions .ck-button.ck-link-actions__preview{margin:var(--ck-spacing-standard) var(--ck-spacing-standard) 0}.ck.ck-link-actions .ck-button.ck-link-actions__preview .ck-button__label{min-width:0;max-width:100%}[dir=ltr] .ck.ck-link-actions .ck-button:not(.ck-link-actions__preview),[dir=rtl] .ck.ck-link-actions .ck-button:not(.ck-link-actions__preview){margin-left:0}}"},function(e,t,i){var n=i(6),o=i(20);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[e.i,o,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};n(o,r);e.exports=o.locals||{}},function(e,t){e.exports='.ck.ck-editor__editable a span.image-inline:after,.ck.ck-editor__editable figure.image>a:after{display:block;position:absolute}:root{--ck-link-image-indicator-icon-size:20;--ck-link-image-indicator-icon-is-visible:clamp(0px,100% - 50px,1px)}.ck.ck-editor__editable a span.image-inline:after,.ck.ck-editor__editable figure.image>a:after{content:"";top:min(var(--ck-spacing-medium),6%);right:min(var(--ck-spacing-medium),6%);background-color:rgba(0,0,0,.4);background-image:url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTExLjA3NyAxNWwuOTkxLTEuNDE2YS43NS43NSAwIDExMS4yMjkuODZsLTEuMTQ4IDEuNjRhLjc0OC43NDggMCAwMS0uMjE3LjIwNiA1LjI1MSA1LjI1MSAwIDAxLTguNTAzLTUuOTU1Ljc0MS43NDEgMCAwMS4xMi0uMjc0bDEuMTQ3LTEuNjM5YS43NS43NSAwIDExMS4yMjguODZMNC45MzMgMTAuN2wuMDA2LjAwM2EzLjc1IDMuNzUgMCAwMDYuMTMyIDQuMjk0bC4wMDYuMDA0em01LjQ5NC01LjMzNWEuNzQ4Ljc0OCAwIDAxLS4xMi4yNzRsLTEuMTQ3IDEuNjM5YS43NS43NSAwIDExLTEuMjI4LS44NmwuODYtMS4yM2EzLjc1IDMuNzUgMCAwMC02LjE0NC00LjMwMWwtLjg2IDEuMjI5YS43NS43NSAwIDAxLTEuMjI5LS44NmwxLjE0OC0xLjY0YS43NDguNzQ4IDAgMDEuMjE3LS4yMDYgNS4yNTEgNS4yNTEgMCAwMTguNTAzIDUuOTU1em0tNC41NjMtMi41MzJhLjc1Ljc1IDAgMDEuMTg0IDEuMDQ1bC0zLjE1NSA0LjUwNWEuNzUuNzUgMCAxMS0xLjIyOS0uODZsMy4xNTUtNC41MDZhLjc1Ljc1IDAgMDExLjA0NS0uMTg0eiIvPjwvc3ZnPg==");background-size:14px;background-repeat:no-repeat;background-position:50%;border-radius:100%;overflow:hidden;width:calc(var(--ck-link-image-indicator-icon-is-visible)*var(--ck-link-image-indicator-icon-size));height:calc(var(--ck-link-image-indicator-icon-is-visible)*var(--ck-link-image-indicator-icon-size))}'},function(e,t,i){"use strict";i.r(t),i.d(t,"Link",(function(){return we})),i.d(t,"LinkEditing",(function(){return re})),i.d(t,"LinkUI",(function(){return he})),i.d(t,"LinkImage",(function(){return xe})),i.d(t,"LinkImageEditing",(function(){return ve})),i.d(t,"LinkImageUI",(function(){return Ae})),i.d(t,"AutoLink",(function(){return be}));var n=i(1),o=i(5),r=i(3),s=i(8),a=i(2);class c{constructor(){this._definitions=new Set}get length(){return this._definitions.size}add(e){Array.isArray(e)?e.forEach(e=>this._definitions.add(e)):this._definitions.add(e)}getDispatcher(){return e=>{e.on("attribute:linkHref",(e,t,i)=>{if(!i.consumable.test(t.item,"attribute:linkHref"))return;const n=i.writer,o=n.document.selection;for(const e of this._definitions){const r=n.createAttributeElement("a",e.attributes,{priority:5});e.classes&&n.addClass(e.classes,r);for(const t in e.styles)n.setStyle(t,e.styles[t],r);n.setCustomProperty("link",!0,r),e.callback(t.attributeNewValue)?t.item.is("selection")?n.wrap(o.getFirstRange(),r):n.wrap(i.mapper.toViewRange(t.range),r):n.unwrap(i.mapper.toViewRange(t.range),r)}},{priority:"high"})}}getDispatcherForLinkedImage(){return e=>{e.on("attribute:linkHref:imageBlock",(e,t,{writer:i,mapper:n})=>{const o=n.toViewElement(t.item),r=Array.from(o.getChildren()).find(e=>"a"===e.name);for(const e of this._definitions){const n=Object(a.toMap)(e.attributes);if(e.callback(t.attributeNewValue)){for(const[e,t]of n)"class"===e?i.addClass(t,r):i.setAttribute(e,t,r);e.classes&&i.addClass(e.classes,r);for(const t in e.styles)i.setStyle(t,e.styles[t],r)}else{for(const[e,t]of n)"class"===e?i.removeClass(t,r):i.removeAttribute(e,r);e.classes&&i.removeClass(e.classes,r);for(const t in e.styles)i.removeStyle(t,r)}}})}}}var l=function(e,t,i){var n=-1,o=e.length;t<0&&(t=-t>o?0:o+t),(i=i>o?o:i)<0&&(i+=o),o=t>i?0:i-t>>>0,t>>>=0;for(var r=Array(o);++n<o;)r[n]=e[n+t];return r};var u=function(e,t,i){var n=e.length;return i=void 0===i?n:i,!t&&i>=n?e:l(e,t,i)},d=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");var k=function(e){return d.test(e)};var f=function(e){return e.split("")},h="[\\ud800-\\udfff]",m="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",g="\\ud83c[\\udffb-\\udfff]",b="[^\\ud800-\\udfff]",p="(?:\\ud83c[\\udde6-\\uddff]){2}",w="[\\ud800-\\udbff][\\udc00-\\udfff]",v="(?:"+m+"|"+g+")"+"?",_="[\\ufe0e\\ufe0f]?"+v+("(?:\\u200d(?:"+[b,p,w].join("|")+")[\\ufe0e\\ufe0f]?"+v+")*"),y="(?:"+[b+m+"?",m,p,w,h].join("|")+")",A=RegExp(g+"(?="+g+")|"+y+_,"g");var x=function(e){return e.match(A)||[]};var I=function(e){return k(e)?x(e):f(e)},T=i(9),S="object"==typeof self&&self&&self.Object===Object&&self,E=(T.a||S||Function("return this")()).Symbol;var V=function(e,t){for(var i=-1,n=null==e?0:e.length,o=Array(n);++i<n;)o[i]=t(e[i],i,e);return o},L=Array.isArray,C=Object.prototype,M=C.hasOwnProperty,D=C.toString,j=E?E.toStringTag:void 0;var O=function(e){var t=M.call(e,j),i=e[j];try{e[j]=void 0;var n=!0}catch(e){}var o=D.call(e);return n&&(t?e[j]=i:delete e[j]),o},B=Object.prototype.toString;var N=function(e){return B.call(e)},H=E?E.toStringTag:void 0;var P=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":H&&H in Object(e)?O(e):N(e)};var U=function(e){return null!=e&&"object"==typeof e};var F=function(e){return"symbol"==typeof e||U(e)&&"[object Symbol]"==P(e)},R=E?E.prototype:void 0,z=R?R.toString:void 0;var q=function e(t){if("string"==typeof t)return t;if(L(t))return V(t,e)+"";if(F(t))return z?z.call(t):"";var i=t+"";return"0"==i&&1/t==-1/0?"-0":i};var K=function(e){return null==e?"":q(e)};var Z=function(e){return function(t){t=K(t);var i=k(t)?I(t):void 0,n=i?i[0]:t.charAt(0),o=i?u(i,1).join(""):t.slice(1);return n[e]()+o}}("toUpperCase");const Y=/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205f\u3000]/g,Q=/^(?:(?:https?|ftps?|mailto):|[^a-z]|[a-z+.-]+(?:[^a-z+.:-]|$))/i,W=/^[\S]+@((?![-_])(?:[-\w\u00a1-\uffff]{0,63}[^-_]\.))+(?:[a-z\u00a1-\uffff]{2,})$/i,$=/^((\w+:(\/{2,})?)|(\W))/i;function J(e,{writer:t}){const i=t.createAttributeElement("a",{href:e},{priority:5});return t.setCustomProperty("link",!0,i),i}function G(e){return function(e){return e.replace(Y,"").match(Q)}(e=String(e))?e:"#"}function X(e,t){return!!e&&t.checkAttribute(e.name,"linkHref")}function ee(e,t){const i=(n=e,W.test(n)?"mailto:":t);var n;const o=!!i&&!$.test(e);return e&&o?i+e:e}class te extends n.Command{constructor(e){super(e),this.manualDecorators=new a.Collection,this.automaticDecorators=new c}restoreManualDecoratorStates(){for(const e of this.manualDecorators)e.value=this._getDecoratorStateFromModel(e.id)}refresh(){const e=this.editor.model,t=e.document.selection,i=t.getSelectedElement()||Object(a.first)(t.getSelectedBlocks());X(i,e.schema)?(this.value=i.getAttribute("linkHref"),this.isEnabled=e.schema.checkAttribute(i,"linkHref")):(this.value=t.getAttribute("linkHref"),this.isEnabled=e.schema.checkAttributeInSelection(t,"linkHref"));for(const e of this.manualDecorators)e.value=this._getDecoratorStateFromModel(e.id)}execute(e,t={}){const i=this.editor.model,n=i.document.selection,o=[],s=[];for(const e in t)t[e]?o.push(e):s.push(e);i.change(t=>{if(n.isCollapsed){const c=n.getFirstPosition();if(n.hasAttribute("linkHref")){const a=Object(r.findAttributeRange)(c,"linkHref",n.getAttribute("linkHref"),i);t.setAttribute("linkHref",e,a),o.forEach(e=>{t.setAttribute(e,!0,a)}),s.forEach(e=>{t.removeAttribute(e,a)}),t.setSelection(t.createPositionAfter(a.end.nodeBefore))}else if(""!==e){const r=Object(a.toMap)(n.getAttributes());r.set("linkHref",e),o.forEach(e=>{r.set(e,!0)});const{end:s}=i.insertContent(t.createText(e,r),c);t.setSelection(s)}["linkHref",...o,...s].forEach(e=>{t.removeSelectionAttribute(e)})}else{const r=i.schema.getValidRanges(n.getRanges(),"linkHref"),a=[];for(const e of n.getSelectedBlocks())i.schema.checkAttribute(e,"linkHref")&&a.push(t.createRangeOn(e));const c=a.slice();for(const e of r)this._isRangeToUpdate(e,a)&&c.push(e);for(const i of c)t.setAttribute("linkHref",e,i),o.forEach(e=>{t.setAttribute(e,!0,i)}),s.forEach(e=>{t.removeAttribute(e,i)})}})}_getDecoratorStateFromModel(e){const t=this.editor.model,i=t.document.selection,n=i.getSelectedElement();return X(n,t.schema)?n.getAttribute(e):i.getAttribute(e)}_isRangeToUpdate(e,t){for(const i of t)if(i.containsRange(e))return!1;return!0}}class ie extends n.Command{refresh(){const e=this.editor.model,t=e.document.selection,i=t.getSelectedElement();X(i,e.schema)?this.isEnabled=e.schema.checkAttribute(i,"linkHref"):this.isEnabled=e.schema.checkAttributeInSelection(t,"linkHref")}execute(){const e=this.editor,t=this.editor.model,i=t.document.selection,n=e.commands.get("link");t.change(e=>{const o=i.isCollapsed?[Object(r.findAttributeRange)(i.getFirstPosition(),"linkHref",i.getAttribute("linkHref"),t)]:t.schema.getValidRanges(i.getRanges(),"linkHref");for(const t of o)if(e.removeAttribute("linkHref",t),n)for(const i of n.manualDecorators)e.removeAttribute(i.id,t)})}}class ne{constructor({id:e,label:t,attributes:i,classes:n,styles:o,defaultValue:r}){this.id=e,this.set("value"),this.defaultValue=r,this.label=t,this.attributes=i,this.classes=n,this.styles=o}_createPattern(){return{attributes:this.attributes,classes:this.classes,styles:this.styles}}}Object(a.mix)(ne,a.ObservableMixin);i(12);const oe=/^(https?:)?\/\//;class re extends n.Plugin{static get pluginName(){return"LinkEditing"}static get requires(){return[r.TwoStepCaretMovement,r.Input,s.ClipboardPipeline]}constructor(e){super(e),e.config.define("link",{addTargetToExternalLinks:!1})}init(){const e=this.editor;e.model.schema.extend("$text",{allowAttributes:"linkHref"}),e.conversion.for("dataDowncast").attributeToElement({model:"linkHref",view:J}),e.conversion.for("editingDowncast").attributeToElement({model:"linkHref",view:(e,t)=>J(G(e),t)}),e.conversion.for("upcast").elementToAttribute({view:{name:"a",attributes:{href:!0}},model:{key:"linkHref",value:e=>e.getAttribute("href")}}),e.commands.add("link",new te(e)),e.commands.add("unlink",new ie(e));const t=function(e,t){const i={"Open in a new tab":e("Open in a new tab"),Downloadable:e("Downloadable")};return t.forEach(e=>(e.label&&i[e.label]&&(e.label=i[e.label]),e)),t}(e.t,function(e){const t=[];if(e)for(const[i,n]of Object.entries(e)){const e=Object.assign({},n,{id:"link"+Z(i)});t.push(e)}return t}(e.config.get("link.decorators")));this._enableAutomaticDecorators(t.filter(e=>"automatic"===e.mode)),this._enableManualDecorators(t.filter(e=>"manual"===e.mode));e.plugins.get(r.TwoStepCaretMovement).registerAttribute("linkHref"),Object(r.inlineHighlight)(e,"linkHref","a","ck-link_selected"),this._enableInsertContentSelectionAttributesFixer(),this._enableClickingAfterLink(),this._enableTypingOverLink(),this._handleDeleteContentAfterLink()}_enableAutomaticDecorators(e){const t=this.editor,i=t.commands.get("link").automaticDecorators;t.config.get("link.addTargetToExternalLinks")&&i.add({id:"linkIsExternal",mode:"automatic",callback:e=>oe.test(e),attributes:{target:"_blank",rel:"noopener noreferrer"}}),i.add(e),i.length&&t.conversion.for("downcast").add(i.getDispatcher())}_enableManualDecorators(e){if(!e.length)return;const t=this.editor,i=t.commands.get("link").manualDecorators;e.forEach(e=>{t.model.schema.extend("$text",{allowAttributes:e.id}),e=new ne(e),i.add(e),t.conversion.for("downcast").attributeToElement({model:e.id,view:(t,{writer:i})=>{if(t){const t=i.createAttributeElement("a",e.attributes,{priority:5});e.classes&&i.addClass(e.classes,t);for(const n in e.styles)i.setStyle(n,e.styles[n],t);return i.setCustomProperty("link",!0,t),t}}}),t.conversion.for("upcast").elementToAttribute({view:{name:"a",...e._createPattern()},model:{key:e.id}})})}_enableInsertContentSelectionAttributesFixer(){const e=this.editor.model,t=e.document.selection;this.listenTo(e,"insertContent",()=>{const i=t.anchor.nodeBefore,n=t.anchor.nodeAfter;t.hasAttribute("linkHref")&&i&&i.hasAttribute("linkHref")&&(n&&n.hasAttribute("linkHref")||e.change(t=>{se(t,ce(e.schema))}))},{priority:"low"})}_enableClickingAfterLink(){const e=this.editor,t=e.model;e.editing.view.addObserver(o.MouseObserver);let i=!1;this.listenTo(e.editing.view.document,"mousedown",()=>{i=!0}),this.listenTo(e.editing.view.document,"selectionChange",()=>{if(!i)return;i=!1;const e=t.document.selection;if(!e.isCollapsed)return;if(!e.hasAttribute("linkHref"))return;const n=e.getFirstPosition(),o=Object(r.findAttributeRange)(n,"linkHref",e.getAttribute("linkHref"),t);(n.isTouching(o.start)||n.isTouching(o.end))&&t.change(e=>{se(e,ce(t.schema))})})}_enableTypingOverLink(){const e=this.editor,t=e.editing.view;let i,n;this.listenTo(t.document,"delete",()=>{n=!0},{priority:"high"}),this.listenTo(e.model,"deleteContent",()=>{const t=e.model.document.selection;t.isCollapsed||(n?n=!1:ae(e)&&function(e){const t=e.document.selection,i=t.getFirstPosition(),n=t.getLastPosition(),o=i.nodeAfter;if(!o)return!1;if(!o.is("$text"))return!1;if(!o.hasAttribute("linkHref"))return!1;const s=n.textNode||n.nodeBefore;if(o===s)return!0;return Object(r.findAttributeRange)(i,"linkHref",o.getAttribute("linkHref"),e).containsRange(e.createRange(i,n),!0)}(e.model)&&(i=t.getAttributes()))},{priority:"high"}),this.listenTo(e.model,"insertContent",(t,[o])=>{n=!1,ae(e)&&i&&(e.model.change(e=>{for(const[t,n]of i)e.setAttribute(t,n,o)}),i=null)},{priority:"high"})}_handleDeleteContentAfterLink(){const e=this.editor,t=e.model,i=t.document.selection,n=e.editing.view;let o=!1,s=!1;this.listenTo(n.document,"delete",(e,t)=>{s=t.domEvent.keyCode===a.keyCodes.backspace},{priority:"high"}),this.listenTo(t,"deleteContent",()=>{o=!1;const e=i.getFirstPosition(),n=i.getAttribute("linkHref");if(!n)return;const s=Object(r.findAttributeRange)(e,"linkHref",n,t);o=s.containsPosition(e)||s.end.isEqual(e)},{priority:"high"}),this.listenTo(t,"deleteContent",()=>{s&&(s=!1,o||e.model.enqueueChange(e=>{se(e,ce(t.schema))}))},{priority:"low"})}}function se(e,t){e.removeSelectionAttribute("linkHref");for(const i of t)e.removeSelectionAttribute(i)}function ae(e){return e.plugins.get("Input").isInput(e.model.change(e=>e.batch))}function ce(e){return e.getDefinition("$text").allowAttributes.filter(e=>e.startsWith("link"))}var le=i(0),ue=i(10);i(7),i(15);class de extends le.View{constructor(e,t){super(e);const i=e.t;this.focusTracker=new a.FocusTracker,this.keystrokes=new a.KeystrokeHandler,this.urlInputView=this._createUrlInput(),this.saveButtonView=this._createButton(i("Save"),n.icons.check,"ck-button-save"),this.saveButtonView.type="submit",this.cancelButtonView=this._createButton(i("Cancel"),n.icons.cancel,"ck-button-cancel","cancel"),this._manualDecoratorSwitches=this._createManualDecoratorSwitches(t),this.children=this._createFormChildren(t.manualDecorators),this._focusables=new le.ViewCollection,this._focusCycler=new le.FocusCycler({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}});const o=["ck","ck-link-form","ck-responsive-form"];t.manualDecorators.length&&o.push("ck-link-form_layout-vertical","ck-vertical-form"),this.setTemplate({tag:"form",attributes:{class:o,tabindex:"-1"},children:this.children}),Object(le.injectCssTransitionDisabler)(this)}getDecoratorSwitchesState(){return Array.from(this._manualDecoratorSwitches).reduce((e,t)=>(e[t.name]=t.isOn,e),{})}render(){super.render(),Object(le.submitHandler)({view:this});[this.urlInputView,...this._manualDecoratorSwitches,this.saveButtonView,this.cancelButtonView].forEach(e=>{this._focusables.add(e),this.focusTracker.add(e.element)}),this.keystrokes.listenTo(this.element)}focus(){this._focusCycler.focusFirst()}_createUrlInput(){const e=this.locale.t,t=new le.LabeledFieldView(this.locale,le.createLabeledInputText);return t.label=e("Link URL"),t}_createButton(e,t,i,n){const o=new le.ButtonView(this.locale);return o.set({label:e,icon:t,tooltip:!0}),o.extendTemplate({attributes:{class:i}}),n&&o.delegate("execute").to(this,n),o}_createManualDecoratorSwitches(e){const t=this.createCollection();for(const i of e.manualDecorators){const n=new le.SwitchButtonView(this.locale);n.set({name:i.id,label:i.label,withText:!0}),n.bind("isOn").toMany([i,e],"value",(e,t)=>void 0===t&&void 0===e?i.defaultValue:e),n.on("execute",()=>{i.set("value",!n.isOn)}),t.add(n)}return t}_createFormChildren(e){const t=this.createCollection();if(t.add(this.urlInputView),e.length){const e=new le.View;e.setTemplate({tag:"ul",children:this._manualDecoratorSwitches.map(e=>({tag:"li",children:[e],attributes:{class:["ck","ck-list__item"]}})),attributes:{class:["ck","ck-reset","ck-list"]}}),t.add(e)}return t.add(this.saveButtonView),t.add(this.cancelButtonView),t}}i(17);class ke extends le.View{constructor(e){super(e);const t=e.t;this.focusTracker=new a.FocusTracker,this.keystrokes=new a.KeystrokeHandler,this.previewButtonView=this._createPreviewButton(),this.unlinkButtonView=this._createButton(t("Unlink"),'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="m11.077 15 .991-1.416a.75.75 0 1 1 1.229.86l-1.148 1.64a.748.748 0 0 1-.217.206 5.251 5.251 0 0 1-8.503-5.955.741.741 0 0 1 .12-.274l1.147-1.639a.75.75 0 1 1 1.228.86L4.933 10.7l.006.003a3.75 3.75 0 0 0 6.132 4.294l.006.004zm5.494-5.335a.748.748 0 0 1-.12.274l-1.147 1.639a.75.75 0 1 1-1.228-.86l.86-1.23a3.75 3.75 0 0 0-6.144-4.301l-.86 1.229a.75.75 0 0 1-1.229-.86l1.148-1.64a.748.748 0 0 1 .217-.206 5.251 5.251 0 0 1 8.503 5.955zm-4.563-2.532a.75.75 0 0 1 .184 1.045l-3.155 4.505a.75.75 0 1 1-1.229-.86l3.155-4.506a.75.75 0 0 1 1.045-.184zm4.919 10.562-1.414 1.414a.75.75 0 1 1-1.06-1.06l1.414-1.415-1.415-1.414a.75.75 0 0 1 1.061-1.06l1.414 1.414 1.414-1.415a.75.75 0 0 1 1.061 1.061l-1.414 1.414 1.414 1.415a.75.75 0 0 1-1.06 1.06l-1.415-1.414z"/></svg>',"unlink"),this.editButtonView=this._createButton(t("Edit link"),n.icons.pencil,"edit"),this.set("href"),this._focusables=new le.ViewCollection,this._focusCycler=new le.FocusCycler({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}}),this.setTemplate({tag:"div",attributes:{class:["ck","ck-link-actions","ck-responsive-form"],tabindex:"-1"},children:[this.previewButtonView,this.editButtonView,this.unlinkButtonView]})}render(){super.render();[this.previewButtonView,this.editButtonView,this.unlinkButtonView].forEach(e=>{this._focusables.add(e),this.focusTracker.add(e.element)}),this.keystrokes.listenTo(this.element)}focus(){this._focusCycler.focusFirst()}_createButton(e,t,i){const n=new le.ButtonView(this.locale);return n.set({label:e,icon:t,tooltip:!0}),n.delegate("execute").to(this,i),n}_createPreviewButton(){const e=new le.ButtonView(this.locale),t=this.bindTemplate,i=this.t;return e.set({withText:!0,tooltip:i("Open link in new tab")}),e.extendTemplate({attributes:{class:["ck","ck-link-actions__preview"],href:t.to("href",e=>e&&G(e)),target:"_blank",rel:"noopener noreferrer"}}),e.bind("label").to(this,"href",e=>e||i("This link has no URL")),e.bind("isEnabled").to(this,"href",e=>!!e),e.template.tag="a",e.template.eventListeners={},e}}var fe='<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="m11.077 15 .991-1.416a.75.75 0 1 1 1.229.86l-1.148 1.64a.748.748 0 0 1-.217.206 5.251 5.251 0 0 1-8.503-5.955.741.741 0 0 1 .12-.274l1.147-1.639a.75.75 0 1 1 1.228.86L4.933 10.7l.006.003a3.75 3.75 0 0 0 6.132 4.294l.006.004zm5.494-5.335a.748.748 0 0 1-.12.274l-1.147 1.639a.75.75 0 1 1-1.228-.86l.86-1.23a3.75 3.75 0 0 0-6.144-4.301l-.86 1.229a.75.75 0 0 1-1.229-.86l1.148-1.64a.748.748 0 0 1 .217-.206 5.251 5.251 0 0 1 8.503 5.955zm-4.563-2.532a.75.75 0 0 1 .184 1.045l-3.155 4.505a.75.75 0 1 1-1.229-.86l3.155-4.506a.75.75 0 0 1 1.045-.184z"/></svg>';class he extends n.Plugin{static get requires(){return[le.ContextualBalloon]}static get pluginName(){return"LinkUI"}init(){const e=this.editor;e.editing.view.addObserver(o.ClickObserver),this.actionsView=this._createActionsView(),this.formView=this._createFormView(),this._balloon=e.plugins.get(le.ContextualBalloon),this._createToolbarLinkButton(),this._enableUserBalloonInteractions(),e.conversion.for("editingDowncast").markerToHighlight({model:"link-ui",view:{classes:["ck-fake-link-selection"]}}),e.conversion.for("editingDowncast").markerToElement({model:"link-ui",view:{name:"span",classes:["ck-fake-link-selection","ck-fake-link-selection_collapsed"]}})}destroy(){super.destroy(),this.formView.destroy()}_createActionsView(){const e=this.editor,t=new ke(e.locale),i=e.commands.get("link"),n=e.commands.get("unlink");return t.bind("href").to(i,"value"),t.editButtonView.bind("isEnabled").to(i),t.unlinkButtonView.bind("isEnabled").to(n),this.listenTo(t,"edit",()=>{this._addFormView()}),this.listenTo(t,"unlink",()=>{e.execute("unlink"),this._hideUI()}),t.keystrokes.set("Esc",(e,t)=>{this._hideUI(),t()}),t.keystrokes.set("Ctrl+K",(e,t)=>{this._addFormView(),t()}),t}_createFormView(){const e=this.editor,t=e.commands.get("link"),i=e.config.get("link.defaultProtocol"),n=new de(e.locale,t);return n.urlInputView.fieldView.bind("value").to(t,"value"),n.urlInputView.bind("isReadOnly").to(t,"isEnabled",e=>!e),n.saveButtonView.bind("isEnabled").to(t),this.listenTo(n,"submit",()=>{const{value:t}=n.urlInputView.fieldView.element,o=ee(t,i);e.execute("link",o,n.getDecoratorSwitchesState()),this._closeFormView()}),this.listenTo(n,"cancel",()=>{this._closeFormView()}),n.keystrokes.set("Esc",(e,t)=>{this._closeFormView(),t()}),n}_createToolbarLinkButton(){const e=this.editor,t=e.commands.get("link"),i=e.t;e.keystrokes.set("Ctrl+K",(e,i)=>{i(),t.isEnabled&&this._showUI(!0)}),e.ui.componentFactory.add("link",e=>{const n=new le.ButtonView(e);return n.isEnabled=!0,n.label=i("Link"),n.icon=fe,n.keystroke="Ctrl+K",n.tooltip=!0,n.isToggleable=!0,n.bind("isEnabled").to(t,"isEnabled"),n.bind("isOn").to(t,"value",e=>!!e),this.listenTo(n,"execute",()=>this._showUI(!0)),n})}_enableUserBalloonInteractions(){const e=this.editor.editing.view.document;this.listenTo(e,"click",()=>{this._getSelectedLinkElement()&&this._showUI()}),this.editor.keystrokes.set("Tab",(e,t)=>{this._areActionsVisible&&!this.actionsView.focusTracker.isFocused&&(this.actionsView.focus(),t())},{priority:"high"}),this.editor.keystrokes.set("Esc",(e,t)=>{this._isUIVisible&&(this._hideUI(),t())}),Object(le.clickOutsideHandler)({emitter:this.formView,activator:()=>this._isUIInPanel,contextElements:[this._balloon.view.element],callback:()=>this._hideUI()})}_addActionsView(){this._areActionsInPanel||this._balloon.add({view:this.actionsView,position:this._getBalloonPositionData()})}_addFormView(){if(this._isFormInPanel)return;const e=this.editor.commands.get("link");this.formView.disableCssTransitions(),this._balloon.add({view:this.formView,position:this._getBalloonPositionData()}),this._balloon.visibleView===this.formView&&this.formView.urlInputView.fieldView.select(),this.formView.enableCssTransitions(),this.formView.urlInputView.fieldView.element.value=e.value||""}_closeFormView(){const e=this.editor.commands.get("link");e.restoreManualDecoratorStates(),void 0!==e.value?this._removeFormView():this._hideUI()}_removeFormView(){this._isFormInPanel&&(this.formView.saveButtonView.focus(),this._balloon.remove(this.formView),this.editor.editing.view.focus(),this._hideFakeVisualSelection())}_showUI(e=!1){this._getSelectedLinkElement()?(this._areActionsVisible?this._addFormView():this._addActionsView(),e&&this._balloon.showStack("main")):(this._showFakeVisualSelection(),this._addActionsView(),e&&this._balloon.showStack("main"),this._addFormView()),this._startUpdatingUI()}_hideUI(){if(!this._isUIInPanel)return;const e=this.editor;this.stopListening(e.ui,"update"),this.stopListening(this._balloon,"change:visibleView"),e.editing.view.focus(),this._removeFormView(),this._balloon.remove(this.actionsView),this._hideFakeVisualSelection()}_startUpdatingUI(){const e=this.editor,t=e.editing.view.document;let i=this._getSelectedLinkElement(),n=r();const o=()=>{const e=this._getSelectedLinkElement(),t=r();i&&!e||!i&&t!==n?this._hideUI():this._isUIVisible&&this._balloon.updatePosition(this._getBalloonPositionData()),i=e,n=t};function r(){return t.selection.focus.getAncestors().reverse().find(e=>e.is("element"))}this.listenTo(e.ui,"update",o),this.listenTo(this._balloon,"change:visibleView",o)}get _isFormInPanel(){return this._balloon.hasView(this.formView)}get _areActionsInPanel(){return this._balloon.hasView(this.actionsView)}get _areActionsVisible(){return this._balloon.visibleView===this.actionsView}get _isUIInPanel(){return this._isFormInPanel||this._areActionsInPanel}get _isUIVisible(){return this._balloon.visibleView==this.formView||this._areActionsVisible}_getBalloonPositionData(){const e=this.editor.editing.view,t=this.editor.model,i=e.document;let n=null;if(t.markers.has("link-ui")){const t=Array.from(this.editor.editing.mapper.markerNameToElements("link-ui")),i=e.createRange(e.createPositionBefore(t[0]),e.createPositionAfter(t[t.length-1]));n=e.domConverter.viewRangeToDom(i)}else n=()=>{const t=this._getSelectedLinkElement();return t?e.domConverter.mapViewToDom(t):e.domConverter.viewRangeToDom(i.selection.getFirstRange())};return{target:n}}_getSelectedLinkElement(){const e=this.editor.editing.view,t=e.document.selection,i=t.getSelectedElement();if(t.isCollapsed||i&&Object(ue.isWidget)(i))return me(t.getFirstPosition());{const i=t.getFirstRange().getTrimmed(),n=me(i.start),o=me(i.end);return n&&n==o&&e.createRangeIn(n).getTrimmed().isEqual(i)?n:null}}_showFakeVisualSelection(){const e=this.editor.model;e.change(t=>{const i=e.document.selection.getFirstRange();if(e.markers.has("link-ui"))t.updateMarker("link-ui",{range:i});else if(i.start.isAtEnd){const n=i.start.getLastMatchingPosition(({item:t})=>!e.schema.isContent(t),{boundaries:i});t.addMarker("link-ui",{usingOperation:!1,affectsData:!1,range:t.createRange(n,i.end)})}else t.addMarker("link-ui",{usingOperation:!1,affectsData:!1,range:i})})}_hideFakeVisualSelection(){const e=this.editor.model;e.markers.has("link-ui")&&e.change(e=>{e.removeMarker("link-ui")})}}function me(e){return e.getAncestors().find(e=>{return(t=e).is("attributeElement")&&!!t.getCustomProperty("link");var t})}const ge=new RegExp("(^|\\s)(((?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(((?!www\\.)|(www\\.))(?![-_])(?:[-_a-z0-9\\u00a1-\\uffff]{1,63}\\.)+(?:[a-z\\u00a1-\\uffff]{2,63})))(?::\\d{2,5})?(?:[/?#]\\S*)?)|((www.|(\\S+@))((?![-_])(?:[-_a-z0-9\\u00a1-\\uffff]{1,63}\\.))+(?:[a-z\\u00a1-\\uffff]{2,63})))$","i");class be extends n.Plugin{static get requires(){return[r.Delete]}static get pluginName(){return"AutoLink"}init(){const e=this.editor.model.document.selection;e.on("change:range",()=>{this.isEnabled=!e.anchor.parent.is("element","codeBlock")}),this._enableTypingHandling()}afterInit(){this._enableEnterHandling(),this._enableShiftEnterHandling()}_enableTypingHandling(){const e=this.editor,t=new r.TextWatcher(e.model,e=>{if(!function(e){return e.length>4&&" "===e[e.length-1]&&" "!==e[e.length-2]}(e))return;const t=pe(e.substr(0,e.length-1));return t?{url:t}:void 0}),i=e.plugins.get("Input");t.on("matched:data",(t,n)=>{const{batch:o,range:r,url:s}=n;if(!i.isInput(o))return;const a=r.end.getShiftedBy(-1),c=a.getShiftedBy(-s.length),l=e.model.createRange(c,a);this._applyAutoLink(s,l)}),t.bind("isEnabled").to(this)}_enableEnterHandling(){const e=this.editor,t=e.model,i=e.commands.get("enter");i&&i.on("execute",()=>{const e=t.document.selection.getFirstPosition();if(!e.parent.previousSibling)return;const i=t.createRangeIn(e.parent.previousSibling);this._checkAndApplyAutoLinkOnRange(i)})}_enableShiftEnterHandling(){const e=this.editor,t=e.model,i=e.commands.get("shiftEnter");i&&i.on("execute",()=>{const e=t.document.selection.getFirstPosition(),i=t.createRange(t.createPositionAt(e.parent,0),e.getShiftedBy(-1));this._checkAndApplyAutoLinkOnRange(i)})}_checkAndApplyAutoLinkOnRange(e){const t=this.editor.model,{text:i,range:n}=Object(r.getLastTextLine)(e,t),o=pe(i);if(o){const e=t.createRange(n.end.getShiftedBy(-o.length),n.end);this._applyAutoLink(o,e)}}_applyAutoLink(e,t){const i=this.editor.model,n=this.editor.plugins.get("Delete");this.isEnabled&&function(e,t){return t.schema.checkAttributeInSelection(t.createSelection(e),"linkHref")}(t,i)&&i.enqueueChange(o=>{const r=this.editor.config.get("link.defaultProtocol"),s=ee(e,r);o.setAttribute("linkHref",s,t),i.enqueueChange(()=>{n.requestUndoOnBackspace()})})}}function pe(e){const t=ge.exec(e);return t?t[2]:null}class we extends n.Plugin{static get requires(){return[re,he,be]}static get pluginName(){return"Link"}}class ve extends n.Plugin{static get requires(){return["ImageEditing","ImageUtils",re]}static get pluginName(){return"LinkImageEditing"}init(){const e=this.editor,t=e.model.schema;e.plugins.has("ImageBlockEditing")&&t.extend("imageBlock",{allowAttributes:["linkHref"]}),e.plugins.has("ImageInlineEditing")&&t.extend("imageInline",{allowAttributes:["linkHref"]}),e.conversion.for("upcast").add(function(e){const t=e.plugins.has("ImageInlineEditing"),i=e.plugins.get("ImageUtils");return e=>{e.on("element:a",(e,n,o)=>{const r=n.viewItem,s=i.findViewImgElement(r);if(!s)return;const a=s.findAncestor(e=>i.isBlockImageView(e));if(t&&!a)return;if(!o.consumable.consume(r,{attributes:["href"]}))return;const c=r.getAttribute("href");if(!c)return;let l=n.modelCursor.parent;if(!l.is("element","imageBlock")){const e=o.convertItem(s,n.modelCursor);n.modelRange=e.modelRange,n.modelCursor=e.modelCursor,l=n.modelCursor.nodeBefore}l&&l.is("element","imageBlock")&&o.writer.setAttribute("linkHref",c,l)},{priority:"high"})}}(e)),e.conversion.for("downcast").add(function(e){const t=e.plugins.get("ImageUtils");return e=>{e.on("attribute:linkHref:imageBlock",(e,i,n)=>{if(!n.consumable.consume(i.item,e.name))return;const o=n.mapper.toViewElement(i.item),r=n.writer,s=Array.from(o.getChildren()).find(e=>"a"===e.name),a=t.findViewImgElement(o),c=a.parent.is("element","picture")?a.parent:a;if(s)i.attributeNewValue?r.setAttribute("href",i.attributeNewValue,s):(r.move(r.createRangeOn(c),r.createPositionAt(o,0)),r.remove(s));else{const e=r.createContainerElement("a",{href:i.attributeNewValue});r.insert(r.createPositionAt(o,0),e),r.move(r.createRangeOn(c),r.createPositionAt(e,0))}},{priority:"high"})}}(e)),this._enableAutomaticDecorators(),this._enableManualDecorators()}_enableAutomaticDecorators(){const e=this.editor,t=e.commands.get("link").automaticDecorators;t.length&&e.conversion.for("downcast").add(t.getDispatcherForLinkedImage())}_enableManualDecorators(){const e=this.editor,t=e.commands.get("link");for(const i of t.manualDecorators)e.plugins.has("ImageBlockEditing")&&e.model.schema.extend("imageBlock",{allowAttributes:i.id}),e.plugins.has("ImageInlineEditing")&&e.model.schema.extend("imageInline",{allowAttributes:i.id}),e.conversion.for("downcast").add(_e(i)),e.conversion.for("upcast").add(ye(e,i))}}function _e(e){return t=>{t.on(`attribute:${e.id}:imageBlock`,(t,i,n)=>{const o=n.mapper.toViewElement(i.item),r=Array.from(o.getChildren()).find(e=>"a"===e.name);if(r){for(const[t,i]of Object(a.toMap)(e.attributes))n.writer.setAttribute(t,i,r);e.classes&&n.writer.addClass(e.classes,r);for(const t in e.styles)n.writer.setStyle(t,e.styles[t],r)}})}}function ye(e,t){const i=e.plugins.get("ImageUtils");return e=>{e.on("element:a",(e,n,r)=>{const s=n.viewItem;if(!i.findViewImgElement(s))return;const a=new o.Matcher(t._createPattern()).match(s);if(!a)return;if(!r.consumable.consume(s,a.match))return;const c=n.modelCursor.nodeBefore||n.modelCursor.parent;r.writer.setAttribute(t.id,!0,c)},{priority:"high"})}}class Ae extends n.Plugin{static get requires(){return[re,he,"ImageBlockEditing"]}static get pluginName(){return"LinkImageUI"}init(){const e=this.editor,t=e.editing.view.document;this.listenTo(t,"click",(t,i)=>{this._isSelectedLinkedImage(e.model.document.selection)&&(i.preventDefault(),t.stop())},{priority:"high"}),this._createToolbarLinkImageButton()}_createToolbarLinkImageButton(){const e=this.editor,t=e.t;e.ui.componentFactory.add("linkImage",i=>{const n=new le.ButtonView(i),o=e.plugins.get("LinkUI"),r=e.commands.get("link");return n.set({isEnabled:!0,label:t("Link image"),icon:fe,keystroke:"Ctrl+K",tooltip:!0,isToggleable:!0}),n.bind("isEnabled").to(r,"isEnabled"),n.bind("isOn").to(r,"value",e=>!!e),this.listenTo(n,"execute",()=>{this._isSelectedLinkedImage(e.model.document.selection)?o._addActionsView():o._showUI(!0)}),n})}_isSelectedLinkedImage(e){const t=e.getSelectedElement();return this.editor.plugins.get("ImageUtils").isImage(t)&&t.hasAttribute("linkHref")}}i(19);class xe extends n.Plugin{static get requires(){return[ve,Ae]}static get pluginName(){return"LinkImage"}}}]);
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/list.js b/core/assets/vendor/ckeditor5/list.js
new file mode 100644
index 000000000000..df6c1df14dc3
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/list.js
@@ -0,0 +1,5 @@
+/*!
+ * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md.
+ */
+!function(t){const e=t.en=t.en||{};e.dictionary=Object.assign(e.dictionary||{},{"Bulleted List":"Bulleted List","Bulleted list styles toolbar":"Bulleted list styles toolbar",Circle:"Circle",Decimal:"Decimal","Decimal with leading zero":"Decimal with leading zero",Disc:"Disc","Lower-latin":"Lower-latin","Lower–roman":"Lower–roman","Numbered List":"Numbered List","Numbered list styles toolbar":"Numbered list styles toolbar",Square:"Square","To-do List":"To-do List","Toggle the circle list style":"Toggle the circle list style","Toggle the decimal list style":"Toggle the decimal list style","Toggle the decimal with leading zero list style":"Toggle the decimal with leading zero list style","Toggle the disc list style":"Toggle the disc list style","Toggle the lower–latin list style":"Toggle the lower–latin list style","Toggle the lower–roman list style":"Toggle the lower–roman list style","Toggle the square list style":"Toggle the square list style","Toggle the upper–latin list style":"Toggle the upper–latin list style","Toggle the upper–roman list style":"Toggle the upper–roman list style","Upper-latin":"Upper-latin","Upper-roman":"Upper-roman"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})),window.CKEditor5=window.CKEditor5||{},window.CKEditor5.list=function(t){var e={};function i(n){if(e[n])return e[n].exports;var o=e[n]={i:n,l:!1,exports:{}};return t[n].call(o.exports,o,o.exports,i),o.l=!0,o.exports}return i.m=t,i.c=e,i.d=function(t,e,n){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)i.d(n,o,function(e){return t[e]}.bind(null,o));return n},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="",i(i.s=12)}([function(t,e,i){t.exports=i(3)("./src/core.js")},function(t,e,i){t.exports=i(3)("./src/utils.js")},function(t,e,i){t.exports=i(3)("./src/ui.js")},function(t,e){t.exports=CKEditor5.dll},function(t,e,i){t.exports=i(3)("./src/engine.js")},function(t,e,i){"use strict";var n,o=function(){return void 0===n&&(n=Boolean(window&&document&&document.all&&!window.atob)),n},s=function(){var t={};return function(e){if(void 0===t[e]){var i=document.querySelector(e);if(window.HTMLIFrameElement&&i instanceof window.HTMLIFrameElement)try{i=i.contentDocument.head}catch(t){i=null}t[e]=i}return t[e]}}(),r=[];function l(t){for(var e=-1,i=0;i<r.length;i++)if(r[i].identifier===t){e=i;break}return e}function a(t,e){for(var i={},n=[],o=0;o<t.length;o++){var s=t[o],a=e.base?s[0]+e.base:s[0],c=i[a]||0,d="".concat(a," ").concat(c);i[a]=c+1;var u=l(d),m={css:s[1],media:s[2],sourceMap:s[3]};-1!==u?(r[u].references++,r[u].updater(m)):r.push({identifier:d,updater:f(m,e),references:1}),n.push(d)}return n}function c(t){var e=document.createElement("style"),n=t.attributes||{};if(void 0===n.nonce){var o=i.nc;o&&(n.nonce=o)}if(Object.keys(n).forEach((function(t){e.setAttribute(t,n[t])})),"function"==typeof t.insert)t.insert(e);else{var r=s(t.insert||"head");if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(e)}return e}var d,u=(d=[],function(t,e){return d[t]=e,d.filter(Boolean).join("\n")});function m(t,e,i,n){var o=i?"":n.media?"@media ".concat(n.media," {").concat(n.css,"}"):n.css;if(t.styleSheet)t.styleSheet.cssText=u(e,o);else{var s=document.createTextNode(o),r=t.childNodes;r[e]&&t.removeChild(r[e]),r.length?t.insertBefore(s,r[e]):t.appendChild(s)}}function g(t,e,i){var n=i.css,o=i.media,s=i.sourceMap;if(o?t.setAttribute("media",o):t.removeAttribute("media"),s&&"undefined"!=typeof btoa&&(n+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(s))))," */")),t.styleSheet)t.styleSheet.cssText=n;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(n))}}var p=null,h=0;function f(t,e){var i,n,o;if(e.singleton){var s=h++;i=p||(p=c(e)),n=m.bind(null,i,s,!1),o=m.bind(null,i,s,!0)}else i=c(e),n=g.bind(null,i,e),o=function(){!function(t){if(null===t.parentNode)return!1;t.parentNode.removeChild(t)}(i)};return n(t),function(e){if(e){if(e.css===t.css&&e.media===t.media&&e.sourceMap===t.sourceMap)return;n(t=e)}else o()}}t.exports=function(t,e){(e=e||{}).singleton||"boolean"==typeof e.singleton||(e.singleton=o());var i=a(t=t||[],e);return function(t){if(t=t||[],"[object Array]"===Object.prototype.toString.call(t)){for(var n=0;n<i.length;n++){var o=l(i[n]);r[o].references--}for(var s=a(t,e),c=0;c<i.length;c++){var d=l(i[c]);0===r[d].references&&(r[d].updater(),r.splice(d,1))}i=s}}}},function(t,e,i){t.exports=i(3)("./src/enter.js")},function(t,e,i){t.exports=i(3)("./src/typing.js")},function(t,e,i){var n=i(5),o=i(9);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};n(o,s);t.exports=o.locals||{}},function(t,e){t.exports=".ck.ck-list-styles-dropdown>.ck-dropdown__panel>.ck-toolbar>.ck-toolbar__items{display:grid}:root{--ck-list-style-button-size:44px}.ck.ck-list-styles-dropdown>.ck-dropdown__panel>.ck-toolbar{background:none;padding:0}.ck.ck-list-styles-dropdown>.ck-dropdown__panel>.ck-toolbar>.ck-toolbar__items{grid-template-columns:repeat(3,auto);row-gap:var(--ck-spacing-medium);column-gap:var(--ck-spacing-medium);padding:var(--ck-spacing-medium)}.ck.ck-list-styles-dropdown>.ck-dropdown__panel>.ck-toolbar>.ck-toolbar__items .ck-button{width:var(--ck-list-style-button-size);height:var(--ck-list-style-button-size);padding:0;margin:0;box-sizing:content-box}.ck.ck-list-styles-dropdown>.ck-dropdown__panel>.ck-toolbar>.ck-toolbar__items .ck-button .ck-icon{width:var(--ck-list-style-button-size);height:var(--ck-list-style-button-size)}"},function(t,e,i){var n=i(5),o=i(11);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[t.i,o,""]]);var s={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};n(o,s);t.exports=o.locals||{}},function(t,e){t.exports=':root{--ck-todo-list-checkmark-size:16px}.ck-content .todo-list{list-style:none}.ck-content .todo-list li{margin-bottom:5px}.ck-content .todo-list li .todo-list{margin-top:5px}.ck-content .todo-list .todo-list__label>input{-webkit-appearance:none;display:inline-block;position:relative;width:var(--ck-todo-list-checkmark-size);height:var(--ck-todo-list-checkmark-size);vertical-align:middle;border:0;left:-25px;margin-right:-15px;right:0;margin-left:0}.ck-content .todo-list .todo-list__label>input:before{display:block;position:absolute;box-sizing:border-box;content:"";width:100%;height:100%;border:1px solid #333;border-radius:2px;transition:box-shadow .25s ease-in-out,background .25s ease-in-out,border .25s ease-in-out}.ck-content .todo-list .todo-list__label>input:after{display:block;position:absolute;box-sizing:content-box;pointer-events:none;content:"";left:calc(var(--ck-todo-list-checkmark-size)/3);top:calc(var(--ck-todo-list-checkmark-size)/5.3);width:calc(var(--ck-todo-list-checkmark-size)/5.3);height:calc(var(--ck-todo-list-checkmark-size)/2.6);border-left:0 solid transparent;border-bottom:calc(var(--ck-todo-list-checkmark-size)/8) solid transparent;border-right:calc(var(--ck-todo-list-checkmark-size)/8) solid transparent;border-top:0 solid transparent;transform:rotate(45deg)}.ck-content .todo-list .todo-list__label>input[checked]:before{background:#26ab33;border-color:#26ab33}.ck-content .todo-list .todo-list__label>input[checked]:after{border-color:#fff}.ck-content .todo-list .todo-list__label .todo-list__label__description{vertical-align:middle}[dir=rtl] .todo-list .todo-list__label>input{left:0;margin-right:0;right:-25px;margin-left:-15px}.ck-editor__editable .todo-list .todo-list__label>input{cursor:pointer}.ck-editor__editable .todo-list .todo-list__label>input:hover:before{box-shadow:0 0 0 5px rgba(0,0,0,.1)}'},function(t,e,i){"use strict";i.r(e),i.d(e,"List",(function(){return D})),i.d(e,"ListEditing",(function(){return M})),i.d(e,"ListUI",(function(){return j})),i.d(e,"ListStyle",(function(){return G})),i.d(e,"ListStyleEditing",(function(){return F})),i.d(e,"ListStyleUI",(function(){return $})),i.d(e,"TodoList",(function(){return st})),i.d(e,"TodoListEditing",(function(){return nt})),i.d(e,"TodoListUI",(function(){return ot}));var n=i(0),o=i(1);class s extends n.Command{constructor(t,e){super(t),this.type=e}refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(t={}){const e=this.editor.model,i=e.document,n=Array.from(i.selection.getSelectedBlocks()).filter(t=>l(t,e.schema)),o=void 0!==t.forceValue?!t.forceValue:this.value;e.change(t=>{if(o){let e=n[n.length-1].nextSibling,i=Number.POSITIVE_INFINITY,o=[];for(;e&&"listItem"==e.name&&0!==e.getAttribute("listIndent");){const t=e.getAttribute("listIndent");t<i&&(i=t);const n=t-i;o.push({element:e,listIndent:n}),e=e.nextSibling}o=o.reverse();for(const e of o)t.setAttribute("listIndent",e.listIndent,e.element)}if(!o){let t=Number.POSITIVE_INFINITY;for(const e of n)e.is("element","listItem")&&e.getAttribute("listIndent")<t&&(t=e.getAttribute("listIndent"));t=0===t?1:t,r(n,!0,t),r(n,!1,t)}for(const e of n.reverse())o&&"listItem"==e.name?t.rename(e,"paragraph"):o||"listItem"==e.name?o||"listItem"!=e.name||e.getAttribute("listType")==this.type||t.setAttribute("listType",this.type,e):(t.setAttributes({listType:this.type,listIndent:0},e),t.rename(e,"listItem"));this.fire("_executeCleanup",n)})}_getValue(){const t=Object(o.first)(this.editor.model.document.selection.getSelectedBlocks());return!!t&&t.is("element","listItem")&&t.getAttribute("listType")==this.type}_checkEnabled(){if(this.value)return!0;const t=this.editor.model.document.selection,e=this.editor.model.schema,i=Object(o.first)(t.getSelectedBlocks());return!!i&&l(i,e)}}function r(t,e,i){const n=e?t[0]:t[t.length-1];if(n.is("element","listItem")){let o=n[e?"previousSibling":"nextSibling"],s=n.getAttribute("listIndent");for(;o&&o.is("element","listItem")&&o.getAttribute("listIndent")>=i;)s>o.getAttribute("listIndent")&&(s=o.getAttribute("listIndent")),o.getAttribute("listIndent")==s&&t[e?"unshift":"push"](o),o=o[e?"previousSibling":"nextSibling"]}}function l(t,e){return e.checkChild(t.parent,"listItem")&&!e.isObject(t)}class a extends n.Command{constructor(t,e){super(t),this._indentBy="forward"==e?1:-1}refresh(){this.isEnabled=this._checkEnabled()}execute(){const t=this.editor.model,e=t.document;let i=Array.from(e.selection.getSelectedBlocks());t.change(t=>{const e=i[i.length-1];let n=e.nextSibling;for(;n&&"listItem"==n.name&&n.getAttribute("listIndent")>e.getAttribute("listIndent");)i.push(n),n=n.nextSibling;this._indentBy<0&&(i=i.reverse());for(const e of i){const i=e.getAttribute("listIndent")+this._indentBy;i<0?t.rename(e,"paragraph"):t.setAttribute("listIndent",i,e)}this.fire("_executeCleanup",i)})}_checkEnabled(){const t=Object(o.first)(this.editor.model.document.selection.getSelectedBlocks());if(!t||!t.is("element","listItem"))return!1;if(this._indentBy>0){const e=t.getAttribute("listIndent"),i=t.getAttribute("listType");let n=t.previousSibling;for(;n&&n.is("element","listItem")&&n.getAttribute("listIndent")>=e;){if(n.getAttribute("listIndent")==e)return n.getAttribute("listType")==i;n=n.previousSibling}return!1}return!0}}var c=i(6),d=i(7),u=i(4),m=i(2);function g(t,e){const i=e.mapper,n=e.writer,o="numbered"==t.getAttribute("listType")?"ol":"ul",s=function(t){const e=t.createContainerElement("li");return e.getFillerOffset=A,e}(n),r=n.createContainerElement(o,null);return n.insert(n.createPositionAt(r,0),s),i.bindElements(t,s),s}function p(t,e,i,n){const o=e.parent,s=i.mapper,r=i.writer;let l=s.toViewPosition(n.createPositionBefore(t));const a=b(t.previousSibling,{sameIndent:!0,smallerIndent:!0,listIndent:t.getAttribute("listIndent")}),c=t.previousSibling;if(a&&a.getAttribute("listIndent")==t.getAttribute("listIndent")){const t=s.toViewElement(a);l=r.breakContainer(r.createPositionAfter(t))}else if(c&&"listItem"==c.name){l=s.toViewPosition(n.createPositionAt(c,"end"));const t=s.findMappedViewAncestor(l),e=y(t);l=e?r.createPositionBefore(e):r.createPositionAt(t,"end")}else l=s.toViewPosition(n.createPositionBefore(t));if(l=f(l),r.insert(l,o),c&&"listItem"==c.name){const t=s.toViewElement(c),i=r.createRange(r.createPositionAt(t,0),l).getWalker({ignoreElementEnd:!0});for(const t of i)if(t.item.is("element","li")){const n=r.breakContainer(r.createPositionBefore(t.item)),o=t.item.parent,s=r.createPositionAt(e,"end");h(r,s.nodeBefore,s.nodeAfter),r.move(r.createRangeOn(o),s),i.position=n}}else{const i=o.nextSibling;if(i&&(i.is("element","ul")||i.is("element","ol"))){let n=null;for(const e of i.getChildren()){const i=s.toModelElement(e);if(!(i&&i.getAttribute("listIndent")>t.getAttribute("listIndent")))break;n=e}n&&(r.breakContainer(r.createPositionAfter(n)),r.move(r.createRangeOn(n.parent),r.createPositionAt(e,"end")))}}h(r,o,o.nextSibling),h(r,o.previousSibling,o)}function h(t,e,i){return!e||!i||"ul"!=e.name&&"ol"!=e.name||e.name!=i.name||e.getAttribute("class")!==i.getAttribute("class")?null:t.mergeContainers(t.createPositionAfter(e))}function f(t){return t.getLastMatchingPosition(t=>t.item.is("uiElement"))}function b(t,e){const i=!!e.sameIndent,n=!!e.smallerIndent,o=e.listIndent;let s=t;for(;s&&"listItem"==s.name;){const t=s.getAttribute("listIndent");if(i&&o==t||n&&o>t)return s;s="forward"===e.direction?s.nextSibling:s.previousSibling}return null}function v(t,e,i,n){t.ui.componentFactory.add(e,o=>{const s=t.commands.get(e),r=new m.ButtonView(o);return r.set({label:i,icon:n,tooltip:!0,isToggleable:!0}),r.bind("isOn","isEnabled").to(s,"value","isEnabled"),r.on("execute",()=>{t.execute(e),t.editing.view.focus()}),r})}function y(t){for(const e of t.getChildren())if("ul"==e.name||"ol"==e.name)return e;return null}function w(t,e){const i=[],n=t.parent,o={ignoreElementEnd:!0,startPosition:t,shallow:!0,direction:e},s=n.getAttribute("listIndent"),r=[...new u.TreeWalker(o)].filter(t=>t.item.is("element")).map(t=>t.item);for(const t of r){if(!t.is("element","listItem"))break;if(t.getAttribute("listIndent")<s)break;if(!(t.getAttribute("listIndent")>s)){if(t.getAttribute("listType")!==n.getAttribute("listType"))break;if(t.getAttribute("listStyle")!==n.getAttribute("listStyle"))break;"backward"===e?i.unshift(t):i.push(t)}}return i}function A(){const t=!this.isEmpty&&("ul"==this.getChild(0).name||"ol"==this.getChild(0).name);return this.isEmpty||t?0:u.getFillerOffset.call(this)}function I(t){return(e,i,n)=>{const o=n.consumable;if(!o.test(i.item,"insert")||!o.test(i.item,"attribute:listType")||!o.test(i.item,"attribute:listIndent"))return;o.consume(i.item,"insert"),o.consume(i.item,"attribute:listType"),o.consume(i.item,"attribute:listIndent");const s=i.item;p(s,g(s,n),n,t)}}function k(t,e,i){if(!i.consumable.consume(e.item,"attribute:listType"))return;const n=i.mapper.toViewElement(e.item),o=i.writer;o.breakContainer(o.createPositionBefore(n)),o.breakContainer(o.createPositionAfter(n));const s=n.parent,r="numbered"==e.attributeNewValue?"ol":"ul";o.rename(r,s)}function S(t,e,i){const n=i.mapper.toViewElement(e.item).parent,o=i.writer;h(o,n,n.nextSibling),h(o,n.previousSibling,n);for(const t of e.item.getChildren())i.consumable.consume(t,"insert")}function x(t,e,i){if("listItem"!=e.item.name){let t=i.mapper.toViewPosition(e.range.start);const n=i.writer,o=[];for(;("ul"==t.parent.name||"ol"==t.parent.name)&&(t=n.breakContainer(t),"li"==t.parent.name);){const e=t,i=n.createPositionAt(t.parent,"end");if(!e.isEqual(i)){const t=n.remove(n.createRange(e,i));o.push(t)}t=n.createPositionAfter(t.parent)}if(o.length>0){for(let e=0;e<o.length;e++){const i=t.nodeBefore;if(t=n.insert(t,o[e]).end,e>0){const e=h(n,i,i.nextSibling);e&&e.parent==i&&t.offset--}}h(n,t.nodeBefore,t.nodeAfter)}}}function T(t,e,i){const n=i.mapper.toViewPosition(e.position),o=n.nodeBefore,s=n.nodeAfter;h(i.writer,o,s)}function z(t,e,i){if(i.consumable.consume(e.viewItem,{name:!0})){const t=i.writer,n=t.createElement("listItem"),o=function(t){let e=0,i=t.parent;for(;i;){if(i.is("element","li"))e++;else{const t=i.previousSibling;t&&t.is("element","li")&&e++}i=i.parent}return e}(e.viewItem);t.setAttribute("listIndent",o,n);const s=e.viewItem.parent&&"ol"==e.viewItem.parent.name?"numbered":"bulleted";if(t.setAttribute("listType",s,n),!i.safeInsert(n,e.modelCursor))return;const r=function(t,e,i){const{writer:n,schema:o}=i;let s=n.createPositionAfter(t);for(const r of e)if("ul"==r.name||"ol"==r.name)s=i.convertItem(r,s).modelCursor;else{const e=i.convertItem(r,n.createPositionAt(t,"end")),l=e.modelRange.start.nodeAfter;l&&l.is("element")&&!o.checkChild(t,l.name)&&(t=e.modelCursor.parent.is("element","listItem")?e.modelCursor.parent:V(e.modelCursor),s=n.createPositionAfter(t))}return s}(n,e.viewItem.getChildren(),i);e.modelRange=t.createRange(e.modelCursor,r),i.updateConversionResult(n,e)}}function C(t,e,i){if(i.consumable.test(e.viewItem,{name:!0})){const t=Array.from(e.viewItem.getChildren());for(const e of t){!(e.is("element","li")||B(e))&&e._remove()}}}function _(t,e,i){if(i.consumable.test(e.viewItem,{name:!0})){if(0===e.viewItem.childCount)return;const t=[...e.viewItem.getChildren()];let i=!1;for(const e of t)i&&!B(e)&&e._remove(),B(e)&&(i=!0)}}function L(t){return(e,i)=>{if(i.isPhantom)return;const n=i.modelPosition.nodeBefore;if(n&&n.is("element","listItem")){const e=i.mapper.toViewElement(n),o=e.getAncestors().find(B),s=t.createPositionAt(e,0).getWalker();for(const t of s){if("elementStart"==t.type&&t.item.is("element","li")){i.viewPosition=t.previousPosition;break}if("elementEnd"==t.type&&t.item==o){i.viewPosition=t.nextPosition;break}}}}}function P(t,[e,i]){let n,o=e.is("documentFragment")?e.getChild(0):e;if(n=i?this.createSelection(i):this.document.selection,o&&o.is("element","listItem")){const t=n.getFirstPosition();let e=null;if(t.parent.is("element","listItem")?e=t.parent:t.nodeBefore&&t.nodeBefore.is("element","listItem")&&(e=t.nodeBefore),e){const t=e.getAttribute("listIndent");if(t>0)for(;o&&o.is("element","listItem");)o._setAttribute("listIndent",o.getAttribute("listIndent")+t),o=o.nextSibling}}}function V(t){const e=new u.TreeWalker({startPosition:t});let i;do{i=e.next()}while(!i.value.item.is("element","listItem"));return i.value.item}function E(t,e,i,n,o,s){const r=b(e.nodeBefore,{sameIndent:!0,smallerIndent:!0,listIndent:t,foo:"b"}),l=o.mapper,a=o.writer,c=r?r.getAttribute("listIndent"):null;let d;if(r)if(c==t){const t=l.toViewElement(r).parent;d=a.createPositionAfter(t)}else{const t=s.createPositionAt(r,"end");d=l.toViewPosition(t)}else d=i;d=f(d);for(const t of[...n.getChildren()])B(t)&&(d=a.move(a.createRangeOn(t),d).end,h(a,t,t.nextSibling),h(a,t.previousSibling,t))}function B(t){return t.is("element","ol")||t.is("element","ul")}class M extends n.Plugin{static get pluginName(){return"ListEditing"}static get requires(){return[c.Enter,d.Delete]}init(){const t=this.editor;t.model.schema.register("listItem",{inheritAllFrom:"$block",allowAttributes:["listType","listIndent"]});const e=t.data,i=t.editing;var n;t.model.document.registerPostFixer(e=>function(t,e){const i=t.document.differ.getChanges(),n=new Map;let o=!1;for(const n of i)if("insert"==n.type&&"listItem"==n.name)s(n.position);else if("insert"==n.type&&"listItem"!=n.name){if("$text"!=n.name){const i=n.position.nodeAfter;i.hasAttribute("listIndent")&&(e.removeAttribute("listIndent",i),o=!0),i.hasAttribute("listType")&&(e.removeAttribute("listType",i),o=!0),i.hasAttribute("listStyle")&&(e.removeAttribute("listStyle",i),o=!0);for(const e of Array.from(t.createRangeIn(i)).filter(t=>t.item.is("element","listItem")))s(e.previousPosition)}s(n.position.getShiftedBy(n.length))}else"remove"==n.type&&"listItem"==n.name?s(n.position):("attribute"==n.type&&"listIndent"==n.attributeKey||"attribute"==n.type&&"listType"==n.attributeKey)&&s(n.range.start);for(const t of n.values())r(t),l(t);return o;function s(t){const e=t.nodeBefore;if(e&&e.is("element","listItem")){let t=e;if(n.has(t))return;for(let e=t.previousSibling;e&&e.is("element","listItem");e=t.previousSibling)if(t=e,n.has(t))return;n.set(e,t)}else{const e=t.nodeAfter;e&&e.is("element","listItem")&&n.set(e,e)}}function r(t){let i=0,n=null;for(;t&&t.is("element","listItem");){const s=t.getAttribute("listIndent");if(s>i){let r;null===n?(n=s-i,r=i):(n>s&&(n=s),r=s-n),e.setAttribute("listIndent",r,t),o=!0}else n=null,i=t.getAttribute("listIndent")+1;t=t.nextSibling}}function l(t){let i=[],n=null;for(;t&&t.is("element","listItem");){const s=t.getAttribute("listIndent");if(n&&n.getAttribute("listIndent")>s&&(i=i.slice(0,s+1)),0!=s)if(i[s]){const n=i[s];t.getAttribute("listType")!=n&&(e.setAttribute("listType",n,t),o=!0)}else i[s]=t.getAttribute("listType");n=t,t=t.nextSibling}}}(t.model,e)),i.mapper.registerViewToModelLength("li",H),e.mapper.registerViewToModelLength("li",H),i.mapper.on("modelToViewPosition",L(i.view)),i.mapper.on("viewToModelPosition",(n=t.model,(t,e)=>{const i=e.viewPosition,o=i.parent,s=e.mapper;if("ul"==o.name||"ol"==o.name){if(i.isAtEnd){const t=s.toModelElement(i.nodeBefore),o=s.getModelLength(i.nodeBefore);e.modelPosition=n.createPositionBefore(t).getShiftedBy(o)}else{const t=s.toModelElement(i.nodeAfter);e.modelPosition=n.createPositionBefore(t)}t.stop()}else if("li"==o.name&&i.nodeBefore&&("ul"==i.nodeBefore.name||"ol"==i.nodeBefore.name)){const r=s.toModelElement(o);let l=1,a=i.nodeBefore;for(;a&&B(a);)l+=s.getModelLength(a),a=a.previousSibling;e.modelPosition=n.createPositionBefore(r).getShiftedBy(l),t.stop()}})),e.mapper.on("modelToViewPosition",L(i.view)),t.conversion.for("editingDowncast").add(e=>{e.on("insert",x,{priority:"high"}),e.on("insert:listItem",I(t.model)),e.on("attribute:listType:listItem",k,{priority:"high"}),e.on("attribute:listType:listItem",S,{priority:"low"}),e.on("attribute:listIndent:listItem",function(t){return(e,i,n)=>{if(!n.consumable.consume(i.item,"attribute:listIndent"))return;const o=n.mapper.toViewElement(i.item),s=n.writer;s.breakContainer(s.createPositionBefore(o)),s.breakContainer(s.createPositionAfter(o));const r=o.parent,l=r.previousSibling,a=s.createRangeOn(r);s.remove(a),l&&l.nextSibling&&h(s,l,l.nextSibling),E(i.attributeOldValue+1,i.range.start,a.start,o,n,t),p(i.item,o,n,t);for(const t of i.item.getChildren())n.consumable.consume(t,"insert")}}(t.model)),e.on("remove:listItem",function(t){return(e,i,n)=>{const o=n.mapper.toViewPosition(i.position).getLastMatchingPosition(t=>!t.item.is("element","li")).nodeAfter,s=n.writer;s.breakContainer(s.createPositionBefore(o)),s.breakContainer(s.createPositionAfter(o));const r=o.parent,l=r.previousSibling,a=s.createRangeOn(r),c=s.remove(a);l&&l.nextSibling&&h(s,l,l.nextSibling);E(n.mapper.toModelElement(o).getAttribute("listIndent")+1,i.position,a.start,o,n,t);for(const t of s.createRangeIn(c).getItems())n.mapper.unbindViewElement(t);e.stop()}}(t.model)),e.on("remove",T,{priority:"low"})}),t.conversion.for("dataDowncast").add(e=>{e.on("insert",x,{priority:"high"}),e.on("insert:listItem",I(t.model))}),t.conversion.for("upcast").add(t=>{t.on("element:ul",C,{priority:"high"}),t.on("element:ol",C,{priority:"high"}),t.on("element:li",_,{priority:"high"}),t.on("element:li",z)}),t.model.on("insertContent",P,{priority:"high"}),t.commands.add("numberedList",new s(t,"numbered")),t.commands.add("bulletedList",new s(t,"bulleted")),t.commands.add("indentList",new a(t,"forward")),t.commands.add("outdentList",new a(t,"backward"));const o=i.view.document;this.listenTo(o,"enter",(t,e)=>{const i=this.editor.model.document,n=i.selection.getLastPosition().parent;i.selection.isCollapsed&&"listItem"==n.name&&n.isEmpty&&(this.editor.execute("outdentList"),e.preventDefault(),t.stop())},{context:"li"}),this.listenTo(o,"delete",(t,e)=>{if("backward"!==e.direction)return;const i=this.editor.model.document.selection;if(!i.isCollapsed)return;const n=i.getFirstPosition();if(!n.isAtStart)return;const o=n.parent;if("listItem"!==o.name)return;o.previousSibling&&"listItem"===o.previousSibling.name||(this.editor.execute("outdentList"),e.preventDefault(),t.stop())},{context:"li"});const r=t=>(e,i)=>{this.editor.commands.get(t).isEnabled&&(this.editor.execute(t),i())};t.keystrokes.set("Tab",r("indentList")),t.keystrokes.set("Shift+Tab",r("outdentList"))}afterInit(){const t=this.editor.commands,e=t.get("indent"),i=t.get("outdent");e&&e.registerChildCommand(t.get("indentList")),i&&i.registerChildCommand(t.get("outdentList"))}}function H(t){let e=1;for(const i of t.getChildren())if("ul"==i.name||"ol"==i.name)for(const t of i.getChildren())e+=H(t);return e}var N='<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M7 5.75c0 .414.336.75.75.75h9.5a.75.75 0 1 0 0-1.5h-9.5a.75.75 0 0 0-.75.75zM3.5 3v5H2V3.7H1v-1h2.5V3zM.343 17.857l2.59-3.257H2.92a.6.6 0 1 0-1.04 0H.302a2 2 0 1 1 3.995 0h-.001c-.048.405-.16.734-.333.988-.175.254-.59.692-1.244 1.312H4.3v1h-4l.043-.043zM7 14.75a.75.75 0 0 1 .75-.75h9.5a.75.75 0 1 1 0 1.5h-9.5a.75.75 0 0 1-.75-.75z"/></svg>',O='<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M7 5.75c0 .414.336.75.75.75h9.5a.75.75 0 1 0 0-1.5h-9.5a.75.75 0 0 0-.75.75zm-6 0C1 4.784 1.777 4 2.75 4c.966 0 1.75.777 1.75 1.75 0 .966-.777 1.75-1.75 1.75C1.784 7.5 1 6.723 1 5.75zm6 9c0 .414.336.75.75.75h9.5a.75.75 0 1 0 0-1.5h-9.5a.75.75 0 0 0-.75.75zm-6 0c0-.966.777-1.75 1.75-1.75.966 0 1.75.777 1.75 1.75 0 .966-.777 1.75-1.75 1.75-.966 0-1.75-.777-1.75-1.75z"/></svg>';class j extends n.Plugin{static get pluginName(){return"ListUI"}init(){const t=this.editor.t;v(this.editor,"numberedList",t("Numbered List"),N),v(this.editor,"bulletedList",t("Bulleted List"),O)}}class D extends n.Plugin{static get requires(){return[M,j]}static get pluginName(){return"List"}}class R extends n.Command{constructor(t,e){super(t),this._defaultType=e}refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(t={}){const e=this.editor.model;let i=[...e.document.selection.getSelectedBlocks()].filter(t=>t.is("element","listItem")).map(t=>{const i=e.change(e=>e.createPositionAt(t,0));return[...w(i,"backward"),...w(i,"forward")]}).flat();i=[...new Set(i)],i.length&&e.change(e=>{for(const n of i)e.setAttribute("listStyle",t.type||this._defaultType,n)})}_getValue(){const t=this.editor.model.document.selection.getFirstPosition().parent;return t&&t.is("element","listItem")?t.getAttribute("listStyle"):null}_checkEnabled(){const t=this.editor,e=t.commands.get("numberedList"),i=t.commands.get("bulletedList");return e.isEnabled||i.isEnabled}}class F extends n.Plugin{static get requires(){return[M]}static get pluginName(){return"ListStyleEditing"}init(){const t=this.editor,e=t.model;e.schema.extend("listItem",{allowAttributes:["listStyle"]}),t.commands.add("listStyle",new R(t,"default")),this.listenTo(t.commands.get("indentList"),"_executeCleanup",function(t){return(e,i)=>{let n;const o=i[0],s=o.getAttribute("listIndent"),r=i.filter(t=>t.getAttribute("listIndent")===s);if(o.previousSibling.getAttribute("listIndent")+1===s)n="default";else{const t=b(o.previousSibling,{sameIndent:!0,direction:"backward",listIndent:s});n=t.getAttribute("listStyle")}t.model.change(t=>{for(const e of r)t.setAttribute("listStyle",n,e)})}}(t)),this.listenTo(t.commands.get("outdentList"),"_executeCleanup",function(t){return(e,i)=>{if(!(i=i.reverse().filter(t=>t.is("element","listItem"))).length)return;const n=i[0].getAttribute("listIndent"),o=i[0].getAttribute("listType");let s=i[0].previousSibling;if(s.is("element","listItem"))for(;s.getAttribute("listIndent")!==n;)s=s.previousSibling;else s=null;s||(s=i[i.length-1].nextSibling),s&&s.is("element","listItem")&&s.getAttribute("listType")===o&&t.model.change(t=>{const e=i.filter(t=>t.getAttribute("listIndent")===n);for(const i of e)t.setAttribute("listStyle",s.getAttribute("listStyle"),i)})}}(t)),this.listenTo(t.commands.get("bulletedList"),"_executeCleanup",K(t)),this.listenTo(t.commands.get("numberedList"),"_executeCleanup",K(t)),e.document.registerPostFixer(function(t){return e=>{let i=!1;const n=W(t.model.document.differ.getChanges()).filter(t=>"todo"!==t.getAttribute("listType"));if(!n.length)return i;let o=n[n.length-1].nextSibling;if((!o||!o.is("element","listItem"))&&(o=n[n.length-1].previousSibling,o)){const t=n[0].getAttribute("listIndent");for(;o.is("element","listItem")&&o.getAttribute("listIndent")!==t&&(o=o.previousSibling,o););}for(const t of n)if(t.hasAttribute("listStyle")){const n=t.previousSibling;U(n,t)&&(e.setAttribute("listStyle",n.getAttribute("listStyle"),t),i=!0)}else q(o,t)?e.setAttribute("listStyle",o.getAttribute("listStyle"),t):e.setAttribute("listStyle","default",t),i=!0;return i}}(t)),t.conversion.for("upcast").add(t=>{t.on("element:li",(t,e,i)=>{const n=e.viewItem.parent;if(!n)return;const o=n.getStyle("list-style-type")||"default",s=e.modelRange.start.nodeAfter||e.modelRange.end.nodeBefore;i.writer.setAttribute("listStyle",o,s)},{priority:"low"})}),t.conversion.for("downcast").add(t=>{t.on("attribute:listStyle:listItem",(t,e,i)=>{const n=i.writer,o=e.item,s=b(o.previousSibling,{sameIndent:!0,listIndent:o.getAttribute("listIndent"),direction:"backward"}),r=i.mapper.toViewElement(o);var l,a,c,d,u;l=o,(a=s)&&l.getAttribute("listType")===a.getAttribute("listType")&&l.getAttribute("listIndent")===a.getAttribute("listIndent")&&l.getAttribute("listStyle")===a.getAttribute("listStyle")||n.breakContainer(n.createPositionBefore(r)),c=n,d=e.attributeNewValue,u=r.parent,d&&"default"!==d?c.setStyle("list-style-type",d,u):c.removeStyle("list-style-type",u)},{priority:"low"})}),this._mergeListStyleAttributeWhileMergingLists()}afterInit(){const t=this.editor;t.commands.get("todoList")&&t.model.document.registerPostFixer(function(t){return e=>{const i=W(t.model.document.differ.getChanges()).filter(t=>"todo"===t.getAttribute("listType")&&t.hasAttribute("listStyle"));if(!i.length)return!1;for(const t of i)e.removeAttribute("listStyle",t);return!0}}(t))}_mergeListStyleAttributeWhileMergingLists(){const t=this.editor.model;let e;this.listenTo(t,"deleteContent",(t,[i])=>{const n=i.getFirstPosition(),o=i.getLastPosition();if(n.parent===o.parent)return;if(!n.parent.is("element","listItem"))return;const s=o.parent.nextSibling;if(!s||!s.is("element","listItem"))return;const r=b(n.parent,{sameIndent:!0,listIndent:s.getAttribute("listIndent")});r&&r.getAttribute("listType")===s.getAttribute("listType")&&(e=r)},{priority:"high"}),this.listenTo(t,"deleteContent",()=>{e&&(t.change(t=>{const i=b(e.nextSibling,{sameIndent:!0,listIndent:e.getAttribute("listIndent"),direction:"forward"}),n=[i,...w(t.createPositionAt(i,0),"forward")];for(const i of n)t.setAttribute("listStyle",e.getAttribute("listStyle"),i)}),e=null)},{priority:"low"})}}function q(t,e){if(!t)return!1;const i=t.getAttribute("listStyle");return!!i&&("default"!==i&&t.getAttribute("listType")===e.getAttribute("listType"))}function U(t,e){if(!t||!t.is("element","listItem"))return!1;if(e.getAttribute("listType")!==t.getAttribute("listType"))return!1;const i=t.getAttribute("listIndent");if(i<1||i!==e.getAttribute("listIndent"))return!1;const n=t.getAttribute("listStyle");return!(!n||n===e.getAttribute("listStyle"))}function K(t){return(e,i)=>{i=i.filter(t=>t.is("element","listItem")),t.model.change(t=>{for(const e of i)t.removeAttribute("listStyle",e)})}}function W(t){const e=[];for(const i of t){const t=Y(i);t&&t.is("element","listItem")&&e.push(t)}return e}function Y(t){return"attribute"===t.type?t.range.start.nodeAfter:"insert"===t.type?t.position.nodeAfter:null}i(8);class $ extends n.Plugin{static get pluginName(){return"ListStyleUI"}init(){const t=this.editor,e=t.locale.t;t.ui.componentFactory.add("bulletedList",J({editor:t,parentCommandName:"bulletedList",buttonLabel:e("Bulleted List"),buttonIcon:O,toolbarAriaLabel:e("Bulleted list styles toolbar"),styleDefinitions:[{label:e("Toggle the disc list style"),tooltip:e("Disc"),type:"disc",icon:'<svg viewBox="0 0 44 44" xmlns="http://www.w3.org/2000/svg"><path d="M35 29a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17z" fill-opacity=".163"/><path d="M11 27a3 3 0 1 1 0 6 3 3 0 0 1 0-6zm0-9a3 3 0 1 1 0 6 3 3 0 0 1 0-6zm0-9a3 3 0 1 1 0 6 3 3 0 0 1 0-6z"/></svg>'},{label:e("Toggle the circle list style"),tooltip:e("Circle"),type:"circle",icon:'<svg viewBox="0 0 44 44" xmlns="http://www.w3.org/2000/svg"><path d="M35 29a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17z" fill-opacity=".163"/><path d="M11 27a3 3 0 1 1 0 6 3 3 0 0 1 0-6zm0 1a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm0-10a3 3 0 1 1 0 6 3 3 0 0 1 0-6zm0 1a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm0-10a3 3 0 1 1 0 6 3 3 0 0 1 0-6zm0 1a2 2 0 1 0 0 4 2 2 0 0 0 0-4z"/></svg>'},{label:e("Toggle the square list style"),tooltip:e("Square"),type:"square",icon:'<svg viewBox="0 0 44 44" xmlns="http://www.w3.org/2000/svg"><path d="M35 29a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17z" fill-opacity=".163"/><path d="M14 27v6H8v-6h6zm0-9v6H8v-6h6zm0-9v6H8V9h6z"/></svg>'}]})),t.ui.componentFactory.add("numberedList",J({editor:t,parentCommandName:"numberedList",buttonLabel:e("Numbered List"),buttonIcon:N,toolbarAriaLabel:e("Numbered list styles toolbar"),styleDefinitions:[{label:e("Toggle the decimal list style"),tooltip:e("Decimal"),type:"decimal",icon:'<svg viewBox="0 0 44 44" xmlns="http://www.w3.org/2000/svg"><path d="M35 29a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17z" fill-opacity=".163"/><path d="M10.29 15V8.531H9.286c-.14.393-.4.736-.778 1.03-.378.295-.728.495-1.05.6v1.121a4.257 4.257 0 0 0 1.595-.936V15h1.235zm3.343 0v-1.235h-1.235V15h1.235zM11.3 24v-1.147H8.848c.064-.111.148-.226.252-.343.104-.117.351-.354.74-.712.39-.357.66-.631.81-.821.225-.288.39-.562.494-.824.104-.263.156-.539.156-.829 0-.51-.182-.936-.545-1.279-.363-.342-.863-.514-1.499-.514-.58 0-1.063.148-1.45.444-.387.296-.617.784-.69 1.463l1.23.124c.024-.36.112-.619.264-.774.153-.155.358-.233.616-.233.26 0 .465.074.613.222.148.148.222.36.222.635 0 .25-.085.501-.255.756-.126.185-.468.536-1.024 1.055-.692.641-1.155 1.156-1.389 1.544-.234.389-.375.8-.422 1.233H11.3zm2.333 0v-1.235h-1.235V24h1.235zM9.204 34.11c.615 0 1.129-.2 1.542-.598.413-.398.62-.88.62-1.446 0-.39-.11-.722-.332-.997a1.5 1.5 0 0 0-.886-.532c.619-.337.928-.788.928-1.353 0-.399-.151-.756-.453-1.073-.366-.386-.852-.58-1.459-.58a2.25 2.25 0 0 0-.96.2 1.617 1.617 0 0 0-.668.55c-.16.232-.28.544-.358.933l1.138.194c.032-.282.123-.495.272-.642.15-.146.33-.22.54-.22.215 0 .386.065.515.194s.193.302.193.518c0 .255-.087.46-.263.613-.176.154-.43.227-.765.218l-.136 1.006c.22-.061.409-.092.567-.092.24 0 .444.09.61.272.168.182.251.428.251.739 0 .328-.087.589-.261.782a.833.833 0 0 1-.644.29.841.841 0 0 1-.607-.242c-.167-.16-.27-.394-.307-.698l-1.196.145c.062.542.285.98.668 1.316.384.335.868.503 1.45.503zm4.43-.11v-1.235h-1.236V34h1.235z"/></svg>'},{label:e("Toggle the decimal with leading zero list style"),tooltip:e("Decimal with leading zero"),type:"decimal-leading-zero",icon:'<svg viewBox="0 0 44 44" xmlns="http://www.w3.org/2000/svg"><path d="M35 29a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17z" fill-opacity=".163"/><path d="M5.714 15.11c.624 0 1.11-.22 1.46-.66.421-.533.632-1.408.632-2.627 0-1.222-.21-2.096-.629-2.624-.351-.445-.839-.668-1.463-.668-.624 0-1.11.22-1.459.66-.422.533-.633 1.406-.633 2.619 0 1.236.192 2.095.576 2.577.384.482.89.723 1.516.723zm0-1.024a.614.614 0 0 1-.398-.14c-.115-.094-.211-.283-.287-.565-.077-.283-.115-.802-.115-1.558s.043-1.294.128-1.613c.064-.246.155-.417.272-.512a.617.617 0 0 1 .4-.143.61.61 0 0 1 .398.143c.116.095.211.284.288.567.076.283.114.802.114 1.558s-.043 1.292-.128 1.608c-.064.246-.155.417-.272.512a.617.617 0 0 1-.4.143zm6.078.914V8.531H10.79c-.14.393-.4.736-.778 1.03-.378.295-.728.495-1.05.6v1.121a4.257 4.257 0 0 0 1.595-.936V15h1.235zm3.344 0v-1.235h-1.235V15h1.235zm-9.422 9.11c.624 0 1.11-.22 1.46-.66.421-.533.632-1.408.632-2.627 0-1.222-.21-2.096-.629-2.624-.351-.445-.839-.668-1.463-.668-.624 0-1.11.22-1.459.66-.422.533-.633 1.406-.633 2.619 0 1.236.192 2.095.576 2.577.384.482.89.723 1.516.723zm0-1.024a.614.614 0 0 1-.398-.14c-.115-.094-.211-.283-.287-.565-.077-.283-.115-.802-.115-1.558s.043-1.294.128-1.613c.064-.246.155-.417.272-.512a.617.617 0 0 1 .4-.143.61.61 0 0 1 .398.143c.116.095.211.284.288.567.076.283.114.802.114 1.558s-.043 1.292-.128 1.608c-.064.246-.155.417-.272.512a.617.617 0 0 1-.4.143zm7.088.914v-1.147H10.35c.065-.111.149-.226.253-.343.104-.117.35-.354.74-.712.39-.357.66-.631.81-.821.225-.288.39-.562.493-.824.104-.263.156-.539.156-.829 0-.51-.181-.936-.544-1.279-.364-.342-.863-.514-1.499-.514-.58 0-1.063.148-1.45.444-.387.296-.617.784-.69 1.463l1.23.124c.024-.36.112-.619.264-.774.152-.155.357-.233.615-.233.261 0 .465.074.613.222.148.148.222.36.222.635 0 .25-.085.501-.255.756-.126.185-.467.536-1.024 1.055-.691.641-1.154 1.156-1.388 1.544-.235.389-.375.8-.422 1.233h4.328zm2.334 0v-1.235h-1.235V24h1.235zM5.714 34.11c.624 0 1.11-.22 1.46-.66.421-.533.632-1.408.632-2.627 0-1.222-.21-2.096-.629-2.624-.351-.445-.839-.668-1.463-.668-.624 0-1.11.22-1.459.66-.422.533-.633 1.406-.633 2.619 0 1.236.192 2.095.576 2.577.384.482.89.723 1.516.723zm0-1.024a.614.614 0 0 1-.398-.14c-.115-.094-.211-.283-.287-.565-.077-.283-.115-.802-.115-1.558s.043-1.294.128-1.613c.064-.246.155-.417.272-.512a.617.617 0 0 1 .4-.143.61.61 0 0 1 .398.143c.116.095.211.284.288.567.076.283.114.802.114 1.558s-.043 1.292-.128 1.608c-.064.246-.155.417-.272.512a.617.617 0 0 1-.4.143zm4.992 1.024c.616 0 1.13-.2 1.543-.598.413-.398.62-.88.62-1.446 0-.39-.111-.722-.332-.997a1.5 1.5 0 0 0-.886-.532c.618-.337.927-.788.927-1.353 0-.399-.15-.756-.452-1.073-.366-.386-.853-.58-1.46-.58a2.25 2.25 0 0 0-.96.2 1.617 1.617 0 0 0-.667.55c-.16.232-.28.544-.359.933l1.139.194c.032-.282.123-.495.272-.642.15-.146.33-.22.54-.22.214 0 .386.065.515.194s.193.302.193.518c0 .255-.088.46-.264.613-.175.154-.43.227-.764.218l-.136 1.006c.22-.061.408-.092.566-.092.24 0 .444.09.611.272.167.182.25.428.25.739 0 .328-.086.589-.26.782a.833.833 0 0 1-.644.29.841.841 0 0 1-.607-.242c-.167-.16-.27-.394-.308-.698l-1.195.145c.062.542.284.98.668 1.316.384.335.867.503 1.45.503zm4.43-.11v-1.235h-1.235V34h1.235z"/></svg>'},{label:e("Toggle the lower–roman list style"),tooltip:e("Lower–roman"),type:"lower-roman",icon:'<svg viewBox="0 0 44 44" xmlns="http://www.w3.org/2000/svg"><path d="M35 29a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17z" fill-opacity=".163"/><path d="M11.88 8.7V7.558h-1.234V8.7h1.234zm0 5.3V9.333h-1.234V14h1.234zm2.5 0v-1.235h-1.234V14h1.235zm-4.75 4.7v-1.142H8.395V18.7H9.63zm0 5.3v-4.667H8.395V24H9.63zm2.5-5.3v-1.142h-1.234V18.7h1.235zm0 5.3v-4.667h-1.234V24h1.235zm2.501 0v-1.235h-1.235V24h1.235zM7.38 28.7v-1.142H6.145V28.7H7.38zm0 5.3v-4.667H6.145V34H7.38zm2.5-5.3v-1.142H8.646V28.7H9.88zm0 5.3v-4.667H8.646V34H9.88zm2.5-5.3v-1.142h-1.234V28.7h1.235zm0 5.3v-4.667h-1.234V34h1.235zm2.501 0v-1.235h-1.235V34h1.235z"/></svg>'},{label:e("Toggle the upper–roman list style"),tooltip:e("Upper-roman"),type:"upper-roman",icon:'<svg viewBox="0 0 44 44" xmlns="http://www.w3.org/2000/svg"><path d="M35 29a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17z" fill-opacity=".163"/><path d="M11.916 15V8.558h-1.301V15h1.3zm2.465 0v-1.235h-1.235V15h1.235zM9.665 25v-6.442h-1.3V25h1.3zm2.5 0v-6.442h-1.3V25h1.3zm2.466 0v-1.235h-1.235V25h1.235zm-7.216 9v-6.442h-1.3V34h1.3zm2.5 0v-6.442h-1.3V34h1.3zm2.501 0v-6.442h-1.3V34h1.3zm2.465 0v-1.235h-1.235V34h1.235z"/></svg>'},{label:e("Toggle the lower–latin list style"),tooltip:e("Lower-latin"),type:"lower-latin",icon:'<svg viewBox="0 0 44 44" xmlns="http://www.w3.org/2000/svg"><path d="M35 29a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17z" fill-opacity=".163"/><path d="M9.62 14.105c.272 0 .528-.05.768-.153s.466-.257.677-.462c.009.024.023.072.044.145.047.161.086.283.119.365h1.221a2.649 2.649 0 0 1-.222-.626c-.04-.195-.059-.498-.059-.908l.013-1.441c0-.536-.055-.905-.165-1.105-.11-.201-.3-.367-.569-.497-.27-.13-.68-.195-1.23-.195-.607 0-1.064.108-1.371.325-.308.217-.525.55-.65 1.002l1.12.202c.076-.217.176-.369.299-.455.123-.086.294-.13.514-.13.325 0 .546.05.663.152.118.101.176.27.176.508v.123c-.222.093-.622.194-1.2.303-.427.082-.755.178-.982.288-.227.11-.403.268-.53.474a1.327 1.327 0 0 0-.188.706c0 .398.138.728.415.988.277.261.656.391 1.136.391zm.368-.87a.675.675 0 0 1-.492-.189.606.606 0 0 1-.193-.448c0-.176.08-.32.241-.435.106-.07.33-.142.673-.215a7.19 7.19 0 0 0 .751-.19v.247c0 .296-.016.496-.048.602a.773.773 0 0 1-.295.409 1.07 1.07 0 0 1-.637.22zm4.645.765v-1.235h-1.235V14h1.235zM10.2 25.105c.542 0 1.003-.215 1.382-.646.38-.43.57-1.044.57-1.84 0-.771-.187-1.362-.559-1.774a1.82 1.82 0 0 0-1.41-.617c-.522 0-.973.216-1.354.65v-2.32H7.594V25h1.147v-.686a1.9 1.9 0 0 0 .67.592c.26.133.523.2.79.2zm-.299-.975c-.354 0-.638-.164-.852-.492-.153-.232-.229-.59-.229-1.073 0-.468.098-.818.295-1.048a.93.93 0 0 1 .738-.345c.302 0 .55.118.743.354.193.236.29.62.29 1.154 0 .5-.096.868-.288 1.1-.192.233-.424.35-.697.35zm4.478.87v-1.235h-1.234V25h1.234zm-4.017 9.105c.6 0 1.08-.142 1.437-.426.357-.284.599-.704.725-1.261l-1.213-.207c-.061.326-.167.555-.316.688a.832.832 0 0 1-.576.2.916.916 0 0 1-.75-.343c-.185-.228-.278-.62-.278-1.173 0-.498.091-.853.274-1.066.183-.212.429-.318.736-.318.232 0 .42.061.565.184.145.123.238.306.28.55l1.216-.22c-.146-.501-.387-.874-.722-1.119-.336-.244-.788-.366-1.356-.366-.695 0-1.245.214-1.653.643-.407.43-.61 1.03-.61 1.8 0 .762.202 1.358.608 1.788.406.431.95.646 1.633.646zM14.633 34v-1.235h-1.235V34h1.235z"/></svg>'},{label:e("Toggle the upper–latin list style"),tooltip:e("Upper-latin"),type:"upper-latin",icon:'<svg viewBox="0 0 44 44" xmlns="http://www.w3.org/2000/svg"><path d="M35 29a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17zm0-9a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H18a1 1 0 0 1-1-1v-1a1 1 0 0 1 1-1h17z" fill-opacity=".163"/><path d="m7.88 15 .532-1.463h2.575L11.549 15h1.415l-2.58-6.442H9.01L6.5 15h1.38zm2.69-2.549H8.811l.87-2.39.887 2.39zM14.88 15v-1.235h-1.234V15h1.234zM9.352 25c.83-.006 1.352-.02 1.569-.044.346-.038.636-.14.872-.305.236-.166.422-.387.558-.664.137-.277.205-.562.205-.855 0-.372-.106-.695-.317-.97-.21-.276-.512-.471-.905-.585a1.51 1.51 0 0 0 .661-.567 1.5 1.5 0 0 0 .244-.83c0-.28-.066-.53-.197-.754a1.654 1.654 0 0 0-.495-.539 1.676 1.676 0 0 0-.672-.266c-.25-.042-.63-.063-1.14-.063H7.158V25h2.193zm.142-3.88H8.46v-1.49h.747c.612 0 .983.007 1.112.022.217.026.38.102.49.226.11.125.165.287.165.486a.68.68 0 0 1-.192.503.86.86 0 0 1-.525.23 11.47 11.47 0 0 1-.944.023h.18zm.17 2.795H8.46v-1.723h1.05c.592 0 .977.03 1.154.092.177.062.313.16.406.295a.84.84 0 0 1 .14.492c0 .228-.06.41-.181.547a.806.806 0 0 1-.473.257c-.126.026-.423.04-.892.04zM14.88 25v-1.235h-1.234V25h1.234zm-5.018 9.11c.691 0 1.262-.17 1.711-.512.45-.341.772-.864.965-1.567l-1.261-.4c-.109.472-.287.818-.536 1.037-.25.22-.547.33-.892.33-.47 0-.85-.173-1.143-.519-.293-.345-.44-.925-.44-1.74 0-.767.15-1.322.447-1.665.297-.343.684-.514 1.162-.514.346 0 .64.096.881.29.242.193.4.457.477.79l1.288-.307c-.147-.516-.367-.911-.66-1.187-.492-.465-1.132-.698-1.92-.698-.902 0-1.63.296-2.184.89-.554.593-.83 1.426-.83 2.498 0 1.014.275 1.813.825 2.397.551.585 1.254.877 2.11.877zM14.88 34v-1.235h-1.234V34h1.234z"/></svg>'}]}))}}function J({editor:t,parentCommandName:e,buttonLabel:i,buttonIcon:n,toolbarAriaLabel:o,styleDefinitions:s}){const r=t.commands.get(e),l=t.commands.get("listStyle");return a=>{const c=Object(m.createDropdown)(a,m.SplitButtonView),d=c.buttonView,u=function({editor:t,listStyleCommand:e,parentCommandName:i}){const n=t.locale,o=t.commands.get(i);return({label:s,type:r,icon:l,tooltip:a})=>{const c=new m.ButtonView(n);return c.set({label:s,icon:l,tooltip:a}),e.on("change:value",()=>{c.isOn=e.value===r}),c.on("execute",()=>{o.value?e.value!==r?t.execute("listStyle",{type:r}):t.execute("listStyle",{type:e._defaultType}):t.model.change(()=>{t.execute(i),t.execute("listStyle",{type:r})}),t.editing.view.focus()}),c}}({editor:t,parentCommandName:e,listStyleCommand:l});return Object(m.addToolbarToDropdown)(c,s.map(u)),c.bind("isEnabled").to(r),c.toolbarView.ariaLabel=o,c.class="ck-list-styles-dropdown",d.on("execute",()=>{t.execute(e),t.editing.view.focus()}),d.set({label:i,icon:n,tooltip:!0,isToggleable:!0}),d.bind("isOn").to(r,"value",t=>!!t),c}}class G extends n.Plugin{static get requires(){return[F,$]}static get pluginName(){return"ListStyle"}}class Q extends n.Command{constructor(t){super(t),this._selectedElements=[],this.on("execute",()=>{this.refresh()},{priority:"highest"})}refresh(){this._selectedElements=this._getSelectedItems(),this.value=this._selectedElements.every(t=>!!t.getAttribute("todoListChecked")),this.isEnabled=!!this._selectedElements.length}_getSelectedItems(){const t=this.editor.model,e=t.schema,i=t.document.selection.getFirstRange(),n=i.start.parent,o=[];e.checkAttribute(n,"todoListChecked")&&o.push(n);for(const t of i.getItems())e.checkAttribute(t,"todoListChecked")&&!o.includes(t)&&o.push(t);return o}execute(t={}){this.editor.model.change(e=>{for(const i of this._selectedElements){(void 0===t.forceValue?!this.value:t.forceValue)?e.setAttribute("todoListChecked",!0,i):e.removeAttribute("todoListChecked",i)}})}}function X(t,e,i){const n=e.modelCursor,o=n.parent,s=e.viewItem;if("checkbox"!=s.getAttribute("type")||"listItem"!=o.name||!n.isAtStart)return;if(!i.consumable.consume(s,{name:!0}))return;const r=i.writer;r.setAttribute("listType","todo",o),e.viewItem.hasAttribute("checked")&&r.setAttribute("todoListChecked",!0,o),e.modelRange=r.createRange(n)}function Z(t){return(e,i)=>{const n=i.modelPosition,o=n.parent;if(!o.is("element","listItem")||"todo"!=o.getAttribute("listType"))return;const s=et(i.mapper.toViewElement(o),t);s&&(i.viewPosition=i.mapper.findPositionIn(s,n.offset))}}function tt(t,e,i,n){return e.createUIElement("label",{class:"todo-list__label",contenteditable:!1},(function(e){const s=Object(o.createElement)(document,"input",{type:"checkbox"});i&&s.setAttribute("checked","checked"),s.addEventListener("change",()=>n(t));const r=this.toDomElement(e);return r.appendChild(s),r}))}function et(t,e){const i=e.createRangeIn(t);for(const t of i)if(t.item.is("containerElement","span")&&t.item.hasClass("todo-list__label__description"))return t.item}const it=Object(o.parseKeystroke)("Ctrl+Enter");class nt extends n.Plugin{static get pluginName(){return"TodoListEditing"}static get requires(){return[M]}init(){const t=this.editor,{editing:e,data:i,model:n}=t;n.schema.extend("listItem",{allowAttributes:["todoListChecked"]}),n.schema.addAttributeCheck((t,e)=>{const i=t.last;if("todoListChecked"==e&&"listItem"==i.name&&"todo"!=i.getAttribute("listType"))return!1}),t.commands.add("todoList",new s(t,"todo"));const r=new Q(t);var l,a;t.commands.add("checkTodoList",r),t.commands.add("todoListCheck",r),i.downcastDispatcher.on("insert:listItem",function(t){return(e,i,n)=>{const o=n.consumable;if(!o.test(i.item,"insert")||!o.test(i.item,"attribute:listType")||!o.test(i.item,"attribute:listIndent"))return;if("todo"!=i.item.getAttribute("listType"))return;const s=i.item;o.consume(s,"insert"),o.consume(s,"attribute:listType"),o.consume(s,"attribute:listIndent"),o.consume(s,"attribute:todoListChecked");const r=n.writer,l=g(s,n);r.addClass("todo-list",l.parent);const a=r.createContainerElement("label",{class:"todo-list__label"}),c=r.createEmptyElement("input",{type:"checkbox",disabled:"disabled"}),d=r.createContainerElement("span",{class:"todo-list__label__description"});s.getAttribute("todoListChecked")&&r.setAttribute("checked","checked",c),r.insert(r.createPositionAt(l,0),a),r.insert(r.createPositionAt(a,0),c),r.insert(r.createPositionAfter(c),d),p(s,l,n,t)}}(n),{priority:"high"}),i.upcastDispatcher.on("element:input",X,{priority:"high"}),e.downcastDispatcher.on("insert:listItem",function(t,e){return(i,n,o)=>{const s=o.consumable;if(!s.test(n.item,"insert")||!s.test(n.item,"attribute:listType")||!s.test(n.item,"attribute:listIndent"))return;if("todo"!=n.item.getAttribute("listType"))return;const r=n.item;s.consume(r,"insert"),s.consume(r,"attribute:listType"),s.consume(r,"attribute:listIndent"),s.consume(r,"attribute:todoListChecked");const l=o.writer,a=g(r,o),c=!!r.getAttribute("todoListChecked"),d=tt(r,l,c,e),u=l.createContainerElement("span",{class:"todo-list__label__description"});l.addClass("todo-list",a.parent),l.insert(l.createPositionAt(a,0),d),l.insert(l.createPositionAfter(d),u),p(r,a,o,t)}}(n,t=>this._handleCheckmarkChange(t)),{priority:"high"}),e.downcastDispatcher.on("attribute:listType:listItem",(l=t=>this._handleCheckmarkChange(t),a=e.view,(t,e,i)=>{const n=i.mapper.toViewElement(e.item),o=i.writer,s=function(t,e){const i=e.createRangeIn(t);for(const t of i)if(t.item.is("uiElement","label"))return t.item}(n,a);if("todo"==e.attributeNewValue){const t=!!e.item.getAttribute("todoListChecked"),i=tt(e.item,o,t,l),s=o.createContainerElement("span",{class:"todo-list__label__description"}),r=o.createRangeIn(n),a=y(n),c=f(r.start),d=a?o.createPositionBefore(a):r.end,u=o.createRange(c,d);o.addClass("todo-list",n.parent),o.move(u,o.createPositionAt(s,0)),o.insert(o.createPositionAt(n,0),i),o.insert(o.createPositionAfter(i),s)}else if("todo"==e.attributeOldValue){const t=et(n,a);o.removeClass("todo-list",n.parent),o.remove(s),o.move(o.createRangeIn(t),o.createPositionBefore(t)),o.remove(t)}})),e.downcastDispatcher.on("attribute:todoListChecked:listItem",function(t){return(e,i,n)=>{if("todo"!=i.item.getAttribute("listType"))return;if(!n.consumable.consume(i.item,"attribute:todoListChecked"))return;const{mapper:o,writer:s}=n,r=!!i.item.getAttribute("todoListChecked"),l=o.toViewElement(i.item).getChild(0),a=tt(i.item,s,r,t);s.insert(s.createPositionAfter(l),a),s.remove(l)}}(t=>this._handleCheckmarkChange(t))),e.mapper.on("modelToViewPosition",Z(e.view)),i.mapper.on("modelToViewPosition",Z(e.view)),this.listenTo(e.view.document,"arrowKey",function(t,e){return(i,n)=>{if("left"!=Object(o.getLocalizedArrowKeyCodeDirection)(n.keyCode,e.contentLanguageDirection))return;const s=t.schema,r=t.document.selection;if(!r.isCollapsed)return;const l=r.getFirstPosition(),a=l.parent;if("listItem"===a.name&&"todo"==a.getAttribute("listType")&&l.isAtStart){const e=s.getNearestSelectionRange(t.createPositionBefore(a),"backward");e&&t.change(t=>t.setSelection(e)),n.preventDefault(),n.stopPropagation(),i.stop()}}}(n,t.locale),{context:"li"}),this.listenTo(e.view.document,"keydown",(e,i)=>{Object(o.getCode)(i)===it&&(t.execute("checkTodoList"),e.stop())},{priority:"high"});const c=new Set;this.listenTo(n,"applyOperation",(t,e)=>{const i=e[0];if("rename"==i.type&&"listItem"==i.oldName){const t=i.position.nodeAfter;t.hasAttribute("todoListChecked")&&c.add(t)}else if("changeAttribute"==i.type&&"listType"==i.key&&"todo"===i.oldValue)for(const t of i.range.getItems())t.hasAttribute("todoListChecked")&&"todo"!==t.getAttribute("listType")&&c.add(t)}),n.document.registerPostFixer(t=>{let e=!1;for(const i of c)t.removeAttribute("todoListChecked",i),e=!0;return c.clear(),e})}_handleCheckmarkChange(t){const e=this.editor,i=e.model,n=Array.from(i.document.selection.getRanges());i.change(i=>{i.setSelection(t,"end"),e.execute("checkTodoList"),i.setSelection(n)})}}class ot extends n.Plugin{static get pluginName(){return"TodoListUI"}init(){const t=this.editor.t;v(this.editor,"todoList",t("To-do List"),'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="m2.315 14.705 2.224-2.24a.689.689 0 0 1 .963 0 .664.664 0 0 1 0 .949L2.865 16.07a.682.682 0 0 1-.112.089.647.647 0 0 1-.852-.051L.688 14.886a.635.635 0 0 1 0-.903.647.647 0 0 1 .91 0l.717.722zm5.185.045a.75.75 0 0 1 .75-.75h9.5a.75.75 0 1 1 0 1.5h-9.5a.75.75 0 0 1-.75-.75zM2.329 5.745l2.21-2.226a.689.689 0 0 1 .963 0 .664.664 0 0 1 0 .95L2.865 7.125a.685.685 0 0 1-.496.196.644.644 0 0 1-.468-.187L.688 5.912a.635.635 0 0 1 0-.903.647.647 0 0 1 .91 0l.73.736zM7.5 5.75A.75.75 0 0 1 8.25 5h9.5a.75.75 0 1 1 0 1.5h-9.5a.75.75 0 0 1-.75-.75z"/></svg>')}}i(10);class st extends n.Plugin{static get requires(){return[nt,ot]}static get pluginName(){return"TodoList"}}}]);
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/paste-from-office.js b/core/assets/vendor/ckeditor5/paste-from-office.js
new file mode 100644
index 000000000000..4cd9ec115b47
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/paste-from-office.js
@@ -0,0 +1,5 @@
+/*!
+ * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md.
+ */
+window.CKEditor5=window.CKEditor5||{},window.CKEditor5.pasteFromOffice=function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=4)}([function(e,t,n){e.exports=n(1)("./src/engine.js")},function(e,t){e.exports=CKEditor5.dll},function(e,t,n){e.exports=n(1)("./src/core.js")},function(e,t,n){e.exports=n(1)("./src/clipboard.js")},function(e,t,n){"use strict";n.r(t),n.d(t,"PasteFromOffice",(function(){return b}));var r=n(2),i=n(3),o=n(0);function s(e,t){if(!e.childCount)return;const n=new o.UpcastWriter(e.document),r=function(e,t){const n=t.createRangeIn(e),r=new o.Matcher({name:/^p|h\d+$/,styles:{"mso-list":/.*/}}),i=[];for(const e of n)if("elementStart"===e.type&&r.match(e.item)){const t=a(e.item);i.push({element:e.item,id:t.id,order:t.order,indent:t.indent})}return i}(e,n);if(!r.length)return;let i=null,s=1;r.forEach((e,a)=>{const u=function(e,t){if(!e)return!0;if(e.id!==t.id)return t.indent-e.indent!=1;const n=t.element.previousSibling;if(!n)return!0;return r=n,!(r.is("element","ol")||r.is("element","ul"));var r}(r[a-1],e),f=u?null:r[a-1],d=(m=e,(p=f)?m.indent-p.indent:m.indent-1);var p,m;if(u&&(i=null,s=1),!i||0!==d){const r=function(e,t){const n=new RegExp(`@list l${e.id}:level${e.indent}\\s*({[^}]*)`,"gi"),r=/mso-level-number-format:([^;]{0,100});/gi,i=n.exec(t);let o="decimal",s="ol";if(i&&i[1]){const t=r.exec(i[1]);if(t&&t[1]&&(o=t[1].trim(),s="bullet"!==o&&"image"!==o?"ol":"ul"),"bullet"===o){const t=function(e){const t=function(e){if(e.getChild(0).is("$text"))return null;for(const t of e.getChildren()){if(!t.is("element","span"))continue;const e=t.getChild(0);return e.is("$text")?e:e.getChild(0)}}(e);if(!t)return null;const n=t._data;if("o"===n)return"circle";if("·"===n)return"disc";if("§"===n)return"square";return null}(e.element);t&&(o=t)}}return{type:s,style:c(o)}}(e,t);if(i){if(e.indent>s){const e=i.getChild(i.childCount-1),t=e.getChild(e.childCount-1);i=l(r,t,n),s+=1}else if(e.indent<s){const t=s-e.indent;i=function(e,t){const n=e.getAncestors({parentFirst:!0});let r=null,i=0;for(const e of n)if("ul"!==e.name&&"ol"!==e.name||i++,i===t){r=e;break}return r}(i,t),s=parseInt(e.indent)}}else i=l(r,e.element,n);e.indent<=s&&(i.is("element",r.type)||(i=n.rename(r.type,i)))}const g=function(e,t){return function(e,t){const n=new o.Matcher({name:"span",styles:{"mso-list":"Ignore"}}),r=t.createRangeIn(e);for(const e of r)"elementStart"===e.type&&n.match(e.item)&&t.remove(e.item)}(e,t),t.rename("li",e)}(e.element,n);n.appendChild(g,i)})}function c(e){switch(e){case"arabic-leading-zero":return"decimal-leading-zero";case"alpha-upper":return"upper-alpha";case"alpha-lower":return"lower-alpha";case"roman-upper":return"upper-roman";case"roman-lower":return"lower-roman";case"circle":case"disc":case"square":return e;default:return null}}function l(e,t,n){const r=t.parent,i=n.createElement(e.type),o=r.getChildIndex(t)+1;return n.insertChild(o,i,r),e.style&&n.setStyle("list-style-type",e.style,i),i}function a(e){const t={},n=e.getStyle("mso-list");if(n){const e=n.match(/(^|\s{1,100})l(\d+)/i),r=n.match(/\s{0,100}lfo(\d+)/i),i=n.match(/\s{0,100}level(\d+)/i);e&&r&&i&&(t.id=e[2],t.order=r[1],t.indent=i[1])}return t}const u=/id=("|')docs-internal-guid-[-0-9a-f]+("|')/i;class f{constructor(e){this.document=e}isActive(e){return u.test(e)}execute(e){const t=new o.UpcastWriter(this.document),{body:n}=e._parsedData;!function(e,t){for(const n of e.getChildren())if(n.is("element","b")&&"normal"===n.getStyle("font-weight")){const r=e.getChildIndex(n);t.remove(n),t.insertChild(r,n.getChildren(),e)}}(n,t),function(e,t){for(const n of t.createRangeIn(e)){const e=n.item;if(e.is("element","li")){const n=e.getChild(0);n&&n.is("element","p")&&t.unwrapElement(n)}}}(n,t),e.content=n}}function d(e,t){if(!e.childCount)return;const n=new o.UpcastWriter;!function(e,t,n){const r=n.createRangeIn(t),i=new o.Matcher({name:"img"}),s=[];for(const t of r)if(i.match(t.item)){const n=t.item,r=n.getAttribute("v:shapes")?n.getAttribute("v:shapes").split(" "):[];r.length&&r.every(t=>e.indexOf(t)>-1)?s.push(n):n.getAttribute("src")||s.push(n)}for(const e of s)n.remove(e)}(function(e,t){const n=t.createRangeIn(e),r=new o.Matcher({name:/v:(.+)/}),i=[];for(const e of n){if("elementStart"!=e.type)continue;const t=e.item,n=t.previousSibling&&t.previousSibling.name||null;r.match(t)&&t.getAttribute("o:gfxdata")&&"v:shapetype"!==n&&i.push(e.item.getAttribute("id"))}return i}(e,n),e,n),function(e,t){const n=t.createRangeIn(e),r=new o.Matcher({name:/v:(.+)/}),i=[];for(const e of n)"elementStart"==e.type&&r.match(e.item)&&i.push(e.item);for(const e of i)t.remove(e)}(e,n);const r=function(e,t){const n=t.createRangeIn(e),r=new o.Matcher({name:"img"}),i=[];for(const e of n)r.match(e.item)&&e.item.getAttribute("src").startsWith("file://")&&i.push(e.item);return i}(e,n);r.length&&function(e,t,n){if(e.length===t.length)for(let i=0;i<e.length;i++){const o=`data:${t[i].type};base64,${r=t[i].hex,btoa(r.match(/\w{2}/g).map(e=>String.fromCharCode(parseInt(e,16))).join(""))}`;n.setAttribute("src",o,e[i])}var r}(r,function(e){if(!e)return[];const t=/{\\pict[\s\S]+?\\bliptag-?\d+(\\blipupi-?\d+)?({\\\*\\blipuid\s?[\da-fA-F]+)?[\s}]*?/,n=new RegExp("(?:("+t.source+"))([\\da-fA-F\\s]+)\\}","g"),r=e.match(n),i=[];if(r)for(const e of r){let n=!1;e.includes("\\pngblip")?n="image/png":e.includes("\\jpegblip")&&(n="image/jpeg"),n&&i.push({hex:e.replace(t,"").replace(/[^\da-fA-F]/g,""),type:n})}return i}(t),n)}const p=/<meta\s*name="?generator"?\s*content="?microsoft\s*word\s*\d+"?\/?>/i,m=/xmlns:o="urn:schemas-microsoft-com/i;class g{constructor(e){this.document=e}isActive(e){return p.test(e)||m.test(e)}execute(e){const{body:t,stylesString:n}=e._parsedData;s(t,n),d(t,e.dataTransfer.getData("text/rtf")),e.content=t}}function h(e){return e.replace(/<span(?: class="Apple-converted-space"|)>(\s+)<\/span>/g,(e,t)=>1===t.length?" ":Array(t.length+1).join("  ").substr(0,t.length))}function y(e,t){const n=new DOMParser,r=function(e){return h(h(e)).replace(/(<span\s+style=['"]mso-spacerun:yes['"]>[^\S\r\n]*?)[\r\n]+([^\S\r\n]*<\/span>)/g,"$1$2").replace(/<span\s+style=['"]mso-spacerun:yes['"]><\/span>/g,"").replace(/ <\//g," </").replace(/ <o:p><\/o:p>/g," <o:p></o:p>").replace(/<o:p>(&nbsp;|\u00A0)<\/o:p>/g,"").replace(/>([^\S\r\n]*[\r\n]\s*)</g,"><")}(function(e){const t=e.indexOf("</body>");if(t<0)return e;const n=e.indexOf("</html>",t+"</body>".length);return e.substring(0,t+"</body>".length)+(n>=0?e.substring(n):"")}(e=e.replace(/<!--\[if gte vml 1]>/g,""))),i=n.parseFromString(r,"text/html");!function(e){e.querySelectorAll("span[style*=spacerun]").forEach(e=>{const t=e.innerText.length||0;e.innerHTML=Array(t+1).join("  ").substr(0,t)})}(i);const s=i.body.innerHTML,c=function(e,t){const n=new o.ViewDocument(t),r=new o.DomConverter(n,{renderingMode:"data"}),i=e.createDocumentFragment(),s=e.body.childNodes;for(;s.length>0;)i.appendChild(s[0]);return r.domToView(i,{skipComments:!0})}(i,t),l=function(e){const t=[],n=[],r=Array.from(e.getElementsByTagName("style"));for(const e of r)e.sheet&&e.sheet.cssRules&&e.sheet.cssRules.length&&(t.push(e.sheet),n.push(e.innerHTML));return{styles:t,stylesString:n.join(" ")}}(i);return{body:c,bodyString:s,styles:l.styles,stylesString:l.stylesString}}class b extends r.Plugin{static get pluginName(){return"PasteFromOffice"}static get requires(){return[i.ClipboardPipeline]}init(){const e=this.editor,t=e.editing.view.document,n=[];n.push(new g(t)),n.push(new f(t)),e.plugins.get("ClipboardPipeline").on("inputTransformation",(e,r)=>{if(r._isTransformedWithPasteFromOffice)return;const i=r.dataTransfer.getData("text/html"),o=n.find(e=>e.isActive(i));o&&(r._parsedData=y(i,t.stylesProcessor),o.execute(r),r._isTransformedWithPasteFromOffice=!0)},{priority:"high"})}}}]);
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/remove-format.js b/core/assets/vendor/ckeditor5/remove-format.js
new file mode 100644
index 000000000000..e98d4a8ea01e
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/remove-format.js
@@ -0,0 +1,5 @@
+/*!
+ * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md.
+ */
+!function(t){const e=t.en=t.en||{};e.dictionary=Object.assign(e.dictionary||{},{"Remove Format":"Remove Format"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})),window.CKEditor5=window.CKEditor5||{},window.CKEditor5.removeFormat=function(t){var e={};function o(n){if(e[n])return e[n].exports;var r=e[n]={i:n,l:!1,exports:{}};return t[n].call(r.exports,r,r.exports,o),r.l=!0,r.exports}return o.m=t,o.c=e,o.d=function(t,e,n){o.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},o.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.t=function(t,e){if(1&e&&(t=o(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)o.d(n,r,function(e){return t[e]}.bind(null,r));return n},o.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(e,"a",e),e},o.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},o.p="",o(o.s=4)}([function(t,e,o){t.exports=o(1)("./src/core.js")},function(t,e){t.exports=CKEditor5.dll},function(t,e,o){t.exports=o(1)("./src/utils.js")},function(t,e,o){t.exports=o(1)("./src/ui.js")},function(t,e,o){"use strict";o.r(e),o.d(e,"RemoveFormat",(function(){return u})),o.d(e,"RemoveFormatEditing",(function(){return a})),o.d(e,"RemoveFormatUI",(function(){return i}));var n=o(0),r=o(3);class i extends n.Plugin{static get pluginName(){return"RemoveFormatUI"}init(){const t=this.editor,e=t.t;t.ui.componentFactory.add("removeFormat",o=>{const n=t.commands.get("removeFormat"),i=new r.ButtonView(o);return i.set({label:e("Remove Format"),icon:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M8.69 14.915c.053.052.173.083.36.093a.366.366 0 0 1 .345.485l-.003.01a.738.738 0 0 1-.697.497h-2.67a.374.374 0 0 1-.353-.496l.013-.038a.681.681 0 0 1 .644-.458c.197-.012.325-.043.386-.093a.28.28 0 0 0 .072-.11L9.592 4.5H6.269c-.359-.017-.609.013-.75.09-.142.078-.289.265-.442.563-.192.29-.516.464-.864.464H4.17a.43.43 0 0 1-.407-.569L4.46 3h13.08l-.62 2.043a.81.81 0 0 1-.775.574h-.114a.486.486 0 0 1-.486-.486c.001-.284-.054-.464-.167-.54-.112-.076-.367-.106-.766-.091h-3.28l-2.68 10.257c-.006.074.007.127.038.158zM3 17h8a.5.5 0 1 1 0 1H3a.5.5 0 1 1 0-1zm11.299 1.17a.75.75 0 1 1-1.06-1.06l1.414-1.415-1.415-1.414a.75.75 0 0 1 1.06-1.06l1.415 1.414 1.414-1.415a.75.75 0 1 1 1.06 1.06l-1.413 1.415 1.414 1.415a.75.75 0 0 1-1.06 1.06l-1.415-1.414-1.414 1.414z"/></svg>',tooltip:!0}),i.bind("isOn","isEnabled").to(n,"value","isEnabled"),this.listenTo(i,"execute",()=>{t.execute("removeFormat"),t.editing.view.focus()}),i})}}var s=o(2);class c extends n.Command{refresh(){const t=this.editor.model;this.isEnabled=!!Object(s.first)(this._getFormattingItems(t.document.selection,t.schema))}execute(){const t=this.editor.model,e=t.schema;t.change(o=>{for(const n of this._getFormattingItems(t.document.selection,e))if(n.is("selection"))for(const t of this._getFormattingAttributes(n,e))o.removeSelectionAttribute(t);else{const t=o.createRangeOn(n);for(const r of this._getFormattingAttributes(n,e))o.removeAttribute(r,t)}})}*_getFormattingItems(t,e){const o=t=>!!Object(s.first)(this._getFormattingAttributes(t,e));for(const n of t.getRanges())for(const t of n.getItems())!e.isBlock(t)&&o(t)&&(yield t);for(const e of t.getSelectedBlocks())o(e)&&(yield e);o(t)&&(yield t)}*_getFormattingAttributes(t,e){for(const[o]of t.getAttributes()){const t=e.getAttributeProperties(o);t&&t.isFormatting&&(yield o)}}}class a extends n.Plugin{static get pluginName(){return"RemoveFormatEditing"}init(){const t=this.editor;t.commands.add("removeFormat",new c(t))}}class u extends n.Plugin{static get requires(){return[a,i]}static get pluginName(){return"RemoveFormat"}}}]);
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/source-editing.js b/core/assets/vendor/ckeditor5/source-editing.js
new file mode 100644
index 000000000000..19f346094c8b
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/source-editing.js
@@ -0,0 +1,5 @@
+/*!
+ * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md.
+ */
+!function(e){const t=e.en=e.en||{};t.dictionary=Object.assign(t.dictionary||{},{Source:"Source"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})),window.CKEditor5=window.CKEditor5||{},window.CKEditor5.sourceEditing=function(e){var t={};function i(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,i),o.l=!0,o.exports}return i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)i.d(n,o,function(t){return e[t]}.bind(null,o));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=7)}([function(e,t,i){e.exports=i(2)("./src/core.js")},function(e,t,i){e.exports=i(2)("./src/utils.js")},function(e,t){e.exports=CKEditor5.dll},function(e,t,i){e.exports=i(2)("./src/ui.js")},function(e,t,i){var n=i(5),o=i(6);"string"==typeof(o=o.__esModule?o.default:o)&&(o=[[e.i,o,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};n(o,r);e.exports=o.locals||{}},function(e,t,i){"use strict";var n,o=function(){return void 0===n&&(n=Boolean(window&&document&&document.all&&!window.atob)),n},r=function(){var e={};return function(t){if(void 0===e[t]){var i=document.querySelector(t);if(window.HTMLIFrameElement&&i instanceof window.HTMLIFrameElement)try{i=i.contentDocument.head}catch(e){i=null}e[t]=i}return e[t]}}(),a=[];function s(e){for(var t=-1,i=0;i<a.length;i++)if(a[i].identifier===e){t=i;break}return t}function d(e,t){for(var i={},n=[],o=0;o<e.length;o++){var r=e[o],d=t.base?r[0]+t.base:r[0],c=i[d]||0,u="".concat(d," ").concat(c);i[d]=c+1;var l=s(u),h={css:r[1],media:r[2],sourceMap:r[3]};-1!==l?(a[l].references++,a[l].updater(h)):a.push({identifier:u,updater:p(h,t),references:1}),n.push(u)}return n}function c(e){var t=document.createElement("style"),n=e.attributes||{};if(void 0===n.nonce){var o=i.nc;o&&(n.nonce=o)}if(Object.keys(n).forEach((function(e){t.setAttribute(e,n[e])})),"function"==typeof e.insert)e.insert(t);else{var a=r(e.insert||"head");if(!a)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");a.appendChild(t)}return t}var u,l=(u=[],function(e,t){return u[e]=t,u.filter(Boolean).join("\n")});function h(e,t,i,n){var o=i?"":n.media?"@media ".concat(n.media," {").concat(n.css,"}"):n.css;if(e.styleSheet)e.styleSheet.cssText=l(t,o);else{var r=document.createTextNode(o),a=e.childNodes;a[t]&&e.removeChild(a[t]),a.length?e.insertBefore(r,a[t]):e.appendChild(r)}}function f(e,t,i){var n=i.css,o=i.media,r=i.sourceMap;if(o?e.setAttribute("media",o):e.removeAttribute("media"),r&&"undefined"!=typeof btoa&&(n+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(r))))," */")),e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}var m=null,g=0;function p(e,t){var i,n,o;if(t.singleton){var r=g++;i=m||(m=c(t)),n=h.bind(null,i,r,!1),o=h.bind(null,i,r,!0)}else i=c(t),n=f.bind(null,i,t),o=function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(i)};return n(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;n(e=t)}else o()}}e.exports=function(e,t){(t=t||{}).singleton||"boolean"==typeof t.singleton||(t.singleton=o());var i=d(e=e||[],t);return function(e){if(e=e||[],"[object Array]"===Object.prototype.toString.call(e)){for(var n=0;n<i.length;n++){var o=s(i[n]);a[o].references--}for(var r=d(e,t),c=0;c<i.length;c++){var u=s(i[c]);0===a[u].references&&(a[u].updater(),a.splice(u,1))}i=r}}}},function(e,t){e.exports='.ck-source-editing-area{position:relative}.ck-source-editing-area:after,.ck-source-editing-area textarea{padding:var(--ck-spacing-large);margin:0;border:1px solid transparent;line-height:var(--ck-line-height-base);font-size:var(--ck-font-size-normal);font-family:monospace;white-space:pre-wrap}.ck-source-editing-area:after{content:attr(data-value) " ";visibility:hidden;display:block}.ck-source-editing-area textarea{position:absolute;width:100%;height:100%;resize:none;outline:none;overflow:hidden;box-sizing:border-box;border-color:var(--ck-color-base-border);border-radius:0}.ck-rounded-corners .ck-source-editing-area textarea,.ck-source-editing-area textarea.ck-rounded-corners{border-radius:var(--ck-border-radius);border-top-left-radius:0;border-top-right-radius:0}.ck-source-editing-area textarea:not([readonly]):focus{outline:none;border:var(--ck-focus-ring);box-shadow:var(--ck-inner-shadow),0 0}'},function(e,t,i){"use strict";i.r(t),i.d(t,"SourceEditing",(function(){return d}));var n=i(0),o=i(3),r=i(1);function a(e){const t=[{name:"address",isVoid:!1},{name:"article",isVoid:!1},{name:"aside",isVoid:!1},{name:"blockquote",isVoid:!1},{name:"br",isVoid:!0},{name:"details",isVoid:!1},{name:"dialog",isVoid:!1},{name:"dd",isVoid:!1},{name:"div",isVoid:!1},{name:"dl",isVoid:!1},{name:"dt",isVoid:!1},{name:"fieldset",isVoid:!1},{name:"figcaption",isVoid:!1},{name:"figure",isVoid:!1},{name:"footer",isVoid:!1},{name:"form",isVoid:!1},{name:"h1",isVoid:!1},{name:"h2",isVoid:!1},{name:"h3",isVoid:!1},{name:"h4",isVoid:!1},{name:"h5",isVoid:!1},{name:"h6",isVoid:!1},{name:"header",isVoid:!1},{name:"hgroup",isVoid:!1},{name:"hr",isVoid:!0},{name:"input",isVoid:!0},{name:"li",isVoid:!1},{name:"main",isVoid:!1},{name:"nav",isVoid:!1},{name:"ol",isVoid:!1},{name:"p",isVoid:!1},{name:"pre",isVoid:!1},{name:"section",isVoid:!1},{name:"table",isVoid:!1},{name:"tbody",isVoid:!1},{name:"td",isVoid:!1},{name:"textarea",isVoid:!1},{name:"th",isVoid:!1},{name:"thead",isVoid:!1},{name:"tr",isVoid:!1},{name:"ul",isVoid:!1}],i=t.map(e=>e.name).join("|"),n=e.replace(new RegExp(`</?(${i})( .*?)?>`,"g"),"\n$&\n").split("\n");let o=0;return n.filter(e=>e.length).map(e=>function(e,t){return t.some(t=>!t.isVoid&&!!new RegExp(`<${t.name}( .*?)?>`).test(e))}(e,t)?s(e,o++):function(e,t){return t.some(t=>new RegExp(`</${t.name}>`).test(e))}(e,t)?s(e,--o):s(e,o)).join("\n")}function s(e,t,i="    "){return`${i.repeat(t)}${e}`}i(4);class d extends n.Plugin{static get pluginName(){return"SourceEditing"}static get requires(){return[n.PendingActions]}constructor(e){super(e),this.set("isSourceEditingMode",!1),this._elementReplacer=new r.ElementReplacer,this._replacedRoots=new Map,this._dataFromRoots=new Map}init(){const e=this.editor,t=e.t;e.ui.componentFactory.add("sourceEditing",i=>{const r=new o.ButtonView(i);return r.set({label:t("Source"),icon:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="m12.5 0 5 4.5v15.003h-16V0h11zM3 1.5v3.25l-1.497 1-.003 8 1.5 1v3.254L7.685 18l-.001 1.504H17.5V8.002L16 9.428l-.004-4.22-4.222-3.692L3 1.5z"/><path d="M4.06 6.64a.75.75 0 0 1 .958 1.15l-.085.07L2.29 9.75l2.646 1.89c.302.216.4.62.232.951l-.058.095a.75.75 0 0 1-.951.232l-.095-.058-3.5-2.5V9.14l3.496-2.5zm4.194 6.22a.75.75 0 0 1-.958-1.149l.085-.07 2.643-1.89-2.646-1.89a.75.75 0 0 1-.232-.952l.058-.095a.75.75 0 0 1 .95-.232l.096.058 3.5 2.5v1.22l-3.496 2.5zm7.644-.836 2.122 2.122-5.825 5.809-2.125-.005.003-2.116zm2.539-1.847 1.414 1.414a.5.5 0 0 1 0 .707l-1.06 1.06-2.122-2.12 1.061-1.061a.5.5 0 0 1 .707 0z"/></svg>',tooltip:!0,withText:!0,class:"ck-source-editing-button"}),r.bind("isOn").to(this,"isSourceEditingMode"),r.bind("isEnabled").to(this,"isEnabled",e,"isReadOnly",e.plugins.get(n.PendingActions),"hasAny",(e,t,i)=>!!e&&(!t&&!i)),this.listenTo(r,"execute",()=>{this.isSourceEditingMode=!this.isSourceEditingMode}),r}),this._isAllowedToHandleSourceEditingMode()&&(this.on("change:isSourceEditingMode",(e,t,i)=>{i?(this._showSourceEditing(),this._disableCommands()):(this._hideSourceEditing(),this._enableCommands())}),this.on("change:isEnabled",(e,t,i)=>this._handleReadOnlyMode(!i)),this.listenTo(e,"change:isReadOnly",(e,t,i)=>this._handleReadOnlyMode(i))),e.data.on("get",()=>{this.isSourceEditingMode&&this._updateEditorData()},{priority:"high"})}afterInit(){const e=this.editor;["RealTimeCollaborativeEditing","CommentsEditing","TrackChangesEditing","RevisionHistory"].some(t=>e.plugins.has(t))&&console.warn("You initialized the editor with the source editing feature and at least one of the collaboration features. Please be advised that the source editing feature may not work, and be careful when editing document source that contains markers created by the collaboration features."),e.plugins.has("RestrictedEditingModeEditing")&&console.warn("You initialized the editor with the source editing feature and restricted editing feature. Please be advised that the source editing feature may not work, and be careful when editing document source that contains markers created by the restricted editing feature.")}_showSourceEditing(){const e=this.editor,t=e.editing.view,i=e.model;i.change(e=>{e.setSelection(null),e.removeSelectionAttribute(i.document.selection.getAttributeKeys())});for(const[i,n]of t.domRoots){const o=c(e.data.get({rootName:i})),a=Object(r.createElement)(n.ownerDocument,"textarea",{rows:"1"}),s=Object(r.createElement)(n.ownerDocument,"div",{class:"ck-source-editing-area","data-value":o},[a]);a.value=o,a.setSelectionRange(0,0),a.addEventListener("input",()=>{s.dataset.value=a.value}),t.change(e=>{const n=t.document.getRoot(i);e.addClass("ck-hidden",n)}),this._replacedRoots.set(i,s),this._elementReplacer.replace(n,s),this._dataFromRoots.set(i,o)}this._focusSourceEditing()}_hideSourceEditing(){const e=this.editor.editing.view;this._updateEditorData(),e.change(t=>{for(const[i]of this._replacedRoots)t.removeClass("ck-hidden",e.document.getRoot(i))}),this._elementReplacer.restore(),this._replacedRoots.clear(),this._dataFromRoots.clear(),e.focus()}_updateEditorData(){const e=this.editor,t={};for(const[e,i]of this._replacedRoots){const n=this._dataFromRoots.get(e),o=i.dataset.value;n!==o&&(t[e]=o)}Object.keys(t).length&&e.data.set(t,{batchType:"default"})}_focusSourceEditing(){const[e]=this._replacedRoots.values();e.querySelector("textarea").focus()}_disableCommands(){const e=this.editor;for(const t of e.commands.commands())t.forceDisabled("SourceEditingMode")}_enableCommands(){const e=this.editor;for(const t of e.commands.commands())t.clearForceDisabled("SourceEditingMode")}_handleReadOnlyMode(e){if(this.isSourceEditingMode)for(const[,t]of this._replacedRoots)t.querySelector("textarea").readOnly=e}_isAllowedToHandleSourceEditingMode(){const e=this.editor.ui.view.editable;return e&&!e._hasExternalElement}}function c(e){return function(e){return e.startsWith("<")}(e)?a(e):e}}]);
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/special-characters.js b/core/assets/vendor/ckeditor5/special-characters.js
new file mode 100644
index 000000000000..3e2e3cab77c2
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/special-characters.js
@@ -0,0 +1,5 @@
+/*!
+ * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md.
+ */
+!function(t){const e=t.en=t.en||{};e.dictionary=Object.assign(e.dictionary||{},{"Almost equal to":"Almost equal to",Angle:"Angle","Approximately equal to":"Approximately equal to","Asterisk operator":"Asterisk operator","Austral sign":"Austral sign","back with leftwards arrow above":"back with leftwards arrow above","Bitcoin sign":"Bitcoin sign","Cedi sign":"Cedi sign","Cent sign":"Cent sign","Character categories":"Character categories","Colon sign":"Colon sign","Contains as member":"Contains as member","Copyright sign":"Copyright sign","Cruzeiro sign":"Cruzeiro sign","Currency sign":"Currency sign","Degree sign":"Degree sign","Division sign":"Division sign","Dollar sign":"Dollar sign","Dong sign":"Dong sign","Double dagger":"Double dagger","Double exclamation mark":"Double exclamation mark","Double low-9 quotation mark":"Double low-9 quotation mark","Double question mark":"Double question mark","downwards arrow to bar":"downwards arrow to bar","downwards dashed arrow":"downwards dashed arrow","downwards double arrow":"downwards double arrow","Drachma sign":"Drachma sign","Element of":"Element of","Em dash":"Em dash","Empty set":"Empty set","En dash":"En dash","end with leftwards arrow above":"end with leftwards arrow above","Euro sign":"Euro sign","Euro-currency sign":"Euro-currency sign","Exclamation question mark":"Exclamation question mark","For all":"For all","Fraction slash":"Fraction slash","French franc sign":"French franc sign","German penny sign":"German penny sign","Greater-than or equal to":"Greater-than or equal to","Greater-than sign":"Greater-than sign","Guarani sign":"Guarani sign","Horizontal ellipsis":"Horizontal ellipsis","Hryvnia sign":"Hryvnia sign","Identical to":"Identical to","Indian rupee sign":"Indian rupee sign",Infinity:"Infinity",Integral:"Integral",Intersection:"Intersection","Inverted exclamation mark":"Inverted exclamation mark","Inverted question mark":"Inverted question mark","Kip sign":"Kip sign","Latin capital letter a with breve":"Latin capital letter a with breve","Latin capital letter a with macron":"Latin capital letter a with macron","Latin capital letter a with ogonek":"Latin capital letter a with ogonek","Latin capital letter c with acute":"Latin capital letter c with acute","Latin capital letter c with caron":"Latin capital letter c with caron","Latin capital letter c with circumflex":"Latin capital letter c with circumflex","Latin capital letter c with dot above":"Latin capital letter c with dot above","Latin capital letter d with caron":"Latin capital letter d with caron","Latin capital letter d with stroke":"Latin capital letter d with stroke","Latin capital letter e with breve":"Latin capital letter e with breve","Latin capital letter e with caron":"Latin capital letter e with caron","Latin capital letter e with dot above":"Latin capital letter e with dot above","Latin capital letter e with macron":"Latin capital letter e with macron","Latin capital letter e with ogonek":"Latin capital letter e with ogonek","Latin capital letter eng":"Latin capital letter eng","Latin capital letter g with breve":"Latin capital letter g with breve","Latin capital letter g with cedilla":"Latin capital letter g with cedilla","Latin capital letter g with circumflex":"Latin capital letter g with circumflex","Latin capital letter g with dot above":"Latin capital letter g with dot above","Latin capital letter h with circumflex":"Latin capital letter h with circumflex","Latin capital letter h with stroke":"Latin capital letter h with stroke","Latin capital letter i with breve":"Latin capital letter i with breve","Latin capital letter i with dot above":"Latin capital letter i with dot above","Latin capital letter i with macron":"Latin capital letter i with macron","Latin capital letter i with ogonek":"Latin capital letter i with ogonek","Latin capital letter i with tilde":"Latin capital letter i with tilde","Latin capital letter j with circumflex":"Latin capital letter j with circumflex","Latin capital letter k with cedilla":"Latin capital letter k with cedilla","Latin capital letter l with acute":"Latin capital letter l with acute","Latin capital letter l with caron":"Latin capital letter l with caron","Latin capital letter l with cedilla":"Latin capital letter l with cedilla","Latin capital letter l with middle dot":"Latin capital letter l with middle dot","Latin capital letter l with stroke":"Latin capital letter l with stroke","Latin capital letter n with acute":"Latin capital letter n with acute","Latin capital letter n with caron":"Latin capital letter n with caron","Latin capital letter n with cedilla":"Latin capital letter n with cedilla","Latin capital letter o with breve":"Latin capital letter o with breve","Latin capital letter o with double acute":"Latin capital letter o with double acute","Latin capital letter o with macron":"Latin capital letter o with macron","Latin capital letter r with acute":"Latin capital letter r with acute","Latin capital letter r with caron":"Latin capital letter r with caron","Latin capital letter r with cedilla":"Latin capital letter r with cedilla","Latin capital letter s with acute":"Latin capital letter s with acute","Latin capital letter s with caron":"Latin capital letter s with caron","Latin capital letter s with cedilla":"Latin capital letter s with cedilla","Latin capital letter s with circumflex":"Latin capital letter s with circumflex","Latin capital letter t with caron":"Latin capital letter t with caron","Latin capital letter t with cedilla":"Latin capital letter t with cedilla","Latin capital letter t with stroke":"Latin capital letter t with stroke","Latin capital letter u with breve":"Latin capital letter u with breve","Latin capital letter u with double acute":"Latin capital letter u with double acute","Latin capital letter u with macron":"Latin capital letter u with macron","Latin capital letter u with ogonek":"Latin capital letter u with ogonek","Latin capital letter u with ring above":"Latin capital letter u with ring above","Latin capital letter u with tilde":"Latin capital letter u with tilde","Latin capital letter w with circumflex":"Latin capital letter w with circumflex","Latin capital letter y with circumflex":"Latin capital letter y with circumflex","Latin capital letter y with diaeresis":"Latin capital letter y with diaeresis","Latin capital letter z with acute":"Latin capital letter z with acute","Latin capital letter z with caron":"Latin capital letter z with caron","Latin capital letter z with dot above":"Latin capital letter z with dot above","Latin capital ligature ij":"Latin capital ligature ij","Latin capital ligature oe":"Latin capital ligature oe","Latin small letter a with breve":"Latin small letter a with breve","Latin small letter a with macron":"Latin small letter a with macron","Latin small letter a with ogonek":"Latin small letter a with ogonek","Latin small letter c with acute":"Latin small letter c with acute","Latin small letter c with caron":"Latin small letter c with caron","Latin small letter c with circumflex":"Latin small letter c with circumflex","Latin small letter c with dot above":"Latin small letter c with dot above","Latin small letter d with caron":"Latin small letter d with caron","Latin small letter d with stroke":"Latin small letter d with stroke","Latin small letter dotless i":"Latin small letter dotless i","Latin small letter e with breve":"Latin small letter e with breve","Latin small letter e with caron":"Latin small letter e with caron","Latin small letter e with dot above":"Latin small letter e with dot above","Latin small letter e with macron":"Latin small letter e with macron","Latin small letter e with ogonek":"Latin small letter e with ogonek","Latin small letter eng":"Latin small letter eng","Latin small letter f with hook":"Latin small letter f with hook","Latin small letter g with breve":"Latin small letter g with breve","Latin small letter g with cedilla":"Latin small letter g with cedilla","Latin small letter g with circumflex":"Latin small letter g with circumflex","Latin small letter g with dot above":"Latin small letter g with dot above","Latin small letter h with circumflex":"Latin small letter h with circumflex","Latin small letter h with stroke":"Latin small letter h with stroke","Latin small letter i with breve":"Latin small letter i with breve","Latin small letter i with macron":"Latin small letter i with macron","Latin small letter i with ogonek":"Latin small letter i with ogonek","Latin small letter i with tilde":"Latin small letter i with tilde","Latin small letter j with circumflex":"Latin small letter j with circumflex","Latin small letter k with cedilla":"Latin small letter k with cedilla","Latin small letter kra":"Latin small letter kra","Latin small letter l with acute":"Latin small letter l with acute","Latin small letter l with caron":"Latin small letter l with caron","Latin small letter l with cedilla":"Latin small letter l with cedilla","Latin small letter l with middle dot":"Latin small letter l with middle dot","Latin small letter l with stroke":"Latin small letter l with stroke","Latin small letter long s":"Latin small letter long s","Latin small letter n preceded by apostrophe":"Latin small letter n preceded by apostrophe","Latin small letter n with acute":"Latin small letter n with acute","Latin small letter n with caron":"Latin small letter n with caron","Latin small letter n with cedilla":"Latin small letter n with cedilla","Latin small letter o with breve":"Latin small letter o with breve","Latin small letter o with double acute":"Latin small letter o with double acute","Latin small letter o with macron":"Latin small letter o with macron","Latin small letter r with acute":"Latin small letter r with acute","Latin small letter r with caron":"Latin small letter r with caron","Latin small letter r with cedilla":"Latin small letter r with cedilla","Latin small letter s with acute":"Latin small letter s with acute","Latin small letter s with caron":"Latin small letter s with caron","Latin small letter s with cedilla":"Latin small letter s with cedilla","Latin small letter s with circumflex":"Latin small letter s with circumflex","Latin small letter t with caron":"Latin small letter t with caron","Latin small letter t with cedilla":"Latin small letter t with cedilla","Latin small letter t with stroke":"Latin small letter t with stroke","Latin small letter u with breve":"Latin small letter u with breve","Latin small letter u with double acute":"Latin small letter u with double acute","Latin small letter u with macron":"Latin small letter u with macron","Latin small letter u with ogonek":"Latin small letter u with ogonek","Latin small letter u with ring above":"Latin small letter u with ring above","Latin small letter u with tilde":"Latin small letter u with tilde","Latin small letter w with circumflex":"Latin small letter w with circumflex","Latin small letter y with circumflex":"Latin small letter y with circumflex","Latin small letter z with acute":"Latin small letter z with acute","Latin small letter z with caron":"Latin small letter z with caron","Latin small letter z with dot above":"Latin small letter z with dot above","Latin small ligature ij":"Latin small ligature ij","Latin small ligature oe":"Latin small ligature oe","Left double quotation mark":"Left double quotation mark","Left single quotation mark":"Left single quotation mark","Left-pointing double angle quotation mark":"Left-pointing double angle quotation mark","leftwards arrow to bar":"leftwards arrow to bar","leftwards dashed arrow":"leftwards dashed arrow","leftwards double arrow":"leftwards double arrow","Less-than or equal to":"Less-than or equal to","Less-than sign":"Less-than sign","Lira sign":"Lira sign","Livre tournois sign":"Livre tournois sign","Logical and":"Logical and","Logical or":"Logical or",Macron:"Macron","Manat sign":"Manat sign","Mill sign":"Mill sign","Minus sign":"Minus sign","Multiplication sign":"Multiplication sign","N-ary product":"N-ary product","N-ary summation":"N-ary summation",Nabla:"Nabla","Naira sign":"Naira sign","New sheqel sign":"New sheqel sign","Nordic mark sign":"Nordic mark sign","Not an element of":"Not an element of","Not equal to":"Not equal to","Not sign":"Not sign","on with exclamation mark with left right arrow above":"on with exclamation mark with left right arrow above",Overline:"Overline","Paragraph sign":"Paragraph sign","Partial differential":"Partial differential","Per mille sign":"Per mille sign","Per ten thousand sign":"Per ten thousand sign","Peseta sign":"Peseta sign","Peso sign":"Peso sign","Plus-minus sign":"Plus-minus sign","Pound sign":"Pound sign","Proportional to":"Proportional to","Question exclamation mark":"Question exclamation mark","Registered sign":"Registered sign","Reversed paragraph sign":"Reversed paragraph sign","Right double quotation mark":"Right double quotation mark","Right single quotation mark":"Right single quotation mark","Right-pointing double angle quotation mark":"Right-pointing double angle quotation mark","rightwards arrow to bar":"rightwards arrow to bar","rightwards dashed arrow":"rightwards dashed arrow","rightwards double arrow":"rightwards double arrow","Ruble sign":"Ruble sign","Rupee sign":"Rupee sign","Section sign":"Section sign","Single left-pointing angle quotation mark":"Single left-pointing angle quotation mark","Single low-9 quotation mark":"Single low-9 quotation mark","Single right-pointing angle quotation mark":"Single right-pointing angle quotation mark","soon with rightwards arrow above":"soon with rightwards arrow above","Special characters":"Special characters","Spesmilo sign":"Spesmilo sign","Square root":"Square root","Tenge sign":"Tenge sign","There exists":"There exists","Tilde operator":"Tilde operator","top with upwards arrow above":"top with upwards arrow above","Trade mark sign":"Trade mark sign","Tugrik sign":"Tugrik sign","Turkish lira sign":"Turkish lira sign","Two dot leader":"Two dot leader",Union:"Union","up down arrow with base":"up down arrow with base","upwards arrow to bar":"upwards arrow to bar","upwards dashed arrow":"upwards dashed arrow","upwards double arrow":"upwards double arrow","Vulgar fraction one half":"Vulgar fraction one half","Vulgar fraction one quarter":"Vulgar fraction one quarter","Vulgar fraction three quarters":"Vulgar fraction three quarters","Won sign":"Won sign","Yen sign":"Yen sign"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})),window.CKEditor5=window.CKEditor5||{},window.CKEditor5.specialCharacters=function(t){var e={};function a(i){if(e[i])return e[i].exports;var r=e[i]={i:i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,a),r.l=!0,r.exports}return a.m=t,a.c=e,a.d=function(t,e,i){a.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},a.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},a.t=function(t,e){if(1&e&&(t=a(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(a.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)a.d(i,r,function(e){return t[e]}.bind(null,r));return i},a.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return a.d(e,"a",e),e},a.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},a.p="",a(a.s=12)}([function(t,e,a){t.exports=a(2)("./src/core.js")},function(t,e,a){t.exports=a(2)("./src/ui.js")},function(t,e){t.exports=CKEditor5.dll},function(t,e,a){t.exports=a(2)("./src/utils.js")},function(t,e,a){"use strict";var i,r=function(){return void 0===i&&(i=Boolean(window&&document&&document.all&&!window.atob)),i},l=function(){var t={};return function(e){if(void 0===t[e]){var a=document.querySelector(e);if(window.HTMLIFrameElement&&a instanceof window.HTMLIFrameElement)try{a=a.contentDocument.head}catch(t){a=null}t[e]=a}return t[e]}}(),c=[];function n(t){for(var e=-1,a=0;a<c.length;a++)if(c[a].identifier===t){e=a;break}return e}function o(t,e){for(var a={},i=[],r=0;r<t.length;r++){var l=t[r],o=e.base?l[0]+e.base:l[0],s=a[o]||0,h="".concat(o," ").concat(s);a[o]=s+1;var u=n(h),w={css:l[1],media:l[2],sourceMap:l[3]};-1!==u?(c[u].references++,c[u].updater(w)):c.push({identifier:h,updater:p(w,e),references:1}),i.push(h)}return i}function s(t){var e=document.createElement("style"),i=t.attributes||{};if(void 0===i.nonce){var r=a.nc;r&&(i.nonce=r)}if(Object.keys(i).forEach((function(t){e.setAttribute(t,i[t])})),"function"==typeof t.insert)t.insert(e);else{var c=l(t.insert||"head");if(!c)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");c.appendChild(e)}return e}var h,u=(h=[],function(t,e){return h[t]=e,h.filter(Boolean).join("\n")});function w(t,e,a,i){var r=a?"":i.media?"@media ".concat(i.media," {").concat(i.css,"}"):i.css;if(t.styleSheet)t.styleSheet.cssText=u(e,r);else{var l=document.createTextNode(r),c=t.childNodes;c[e]&&t.removeChild(c[e]),c.length?t.insertBefore(l,c[e]):t.appendChild(l)}}function d(t,e,a){var i=a.css,r=a.media,l=a.sourceMap;if(r?t.setAttribute("media",r):t.removeAttribute("media"),l&&"undefined"!=typeof btoa&&(i+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(l))))," */")),t.styleSheet)t.styleSheet.cssText=i;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(i))}}var g=null,m=0;function p(t,e){var a,i,r;if(e.singleton){var l=m++;a=g||(g=s(e)),i=w.bind(null,a,l,!1),r=w.bind(null,a,l,!0)}else a=s(e),i=d.bind(null,a,e),r=function(){!function(t){if(null===t.parentNode)return!1;t.parentNode.removeChild(t)}(a)};return i(t),function(e){if(e){if(e.css===t.css&&e.media===t.media&&e.sourceMap===t.sourceMap)return;i(t=e)}else r()}}t.exports=function(t,e){(e=e||{}).singleton||"boolean"==typeof e.singleton||(e.singleton=r());var a=o(t=t||[],e);return function(t){if(t=t||[],"[object Array]"===Object.prototype.toString.call(t)){for(var i=0;i<a.length;i++){var r=n(a[i]);c[r].references--}for(var l=o(t,e),s=0;s<a.length;s++){var h=n(a[s]);0===c[h].references&&(c[h].updater(),c.splice(h,1))}a=l}}}},function(t,e,a){t.exports=a(2)("./src/typing.js")},function(t,e,a){var i=a(4),r=a(7);"string"==typeof(r=r.__esModule?r.default:r)&&(r=[[t.i,r,""]]);var l={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};i(r,l);t.exports=r.locals||{}},function(t,e){t.exports=".ck.ck-character-grid{max-width:100%}.ck.ck-character-grid .ck-character-grid__tiles{display:grid}:root{--ck-character-grid-tile-size:24px}.ck.ck-character-grid{overflow-y:auto;overflow-x:hidden;width:350px;max-height:200px}.ck.ck-character-grid .ck-character-grid__tiles{grid-template-columns:repeat(auto-fit,minmax(var(--ck-character-grid-tile-size),1fr));margin:var(--ck-spacing-standard) var(--ck-spacing-large);grid-gap:var(--ck-spacing-standard)}.ck.ck-character-grid .ck-character-grid__tile{width:var(--ck-character-grid-tile-size);height:var(--ck-character-grid-tile-size);min-width:var(--ck-character-grid-tile-size);min-height:var(--ck-character-grid-tile-size);font-size:1.2em;padding:0;transition:box-shadow .2s ease;border:0}.ck.ck-character-grid .ck-character-grid__tile:focus:not(.ck-disabled),.ck.ck-character-grid .ck-character-grid__tile:hover:not(.ck-disabled){border:0;box-shadow:inset 0 0 0 1px var(--ck-color-base-background),0 0 0 2px var(--ck-color-focus-border)}.ck.ck-character-grid .ck-character-grid__tile .ck-button__label{line-height:var(--ck-character-grid-tile-size);width:100%;text-align:center}"},function(t,e,a){var i=a(4),r=a(9);"string"==typeof(r=r.__esModule?r.default:r)&&(r=[[t.i,r,""]]);var l={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};i(r,l);t.exports=r.locals||{}},function(t,e){t.exports=".ck.ck-character-info{display:flex;justify-content:space-between;padding:var(--ck-spacing-small) var(--ck-spacing-large);border-top:1px solid var(--ck-color-base-border)}.ck.ck-character-info>*{text-transform:uppercase;font-size:var(--ck-font-size-small)}.ck.ck-character-info .ck-character-info__name{max-width:280px;text-overflow:ellipsis;overflow:hidden}.ck.ck-character-info .ck-character-info__code{opacity:.6}"},function(t,e,a){var i=a(4),r=a(11);"string"==typeof(r=r.__esModule?r.default:r)&&(r=[[t.i,r,""]]);var l={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};i(r,l);t.exports=r.locals||{}},function(t,e){t.exports=".ck.ck-special-characters-navigation>.ck-label{max-width:160px;text-overflow:ellipsis;overflow:hidden}.ck.ck-special-characters-navigation>.ck-dropdown .ck-dropdown__panel{max-height:250px;overflow-y:auto;overflow-x:hidden}"},function(t,e,a){"use strict";a.r(e),a.d(e,"SpecialCharacters",(function(){return u})),a.d(e,"SpecialCharactersArrows",(function(){return w})),a.d(e,"SpecialCharactersText",(function(){return d})),a.d(e,"SpecialCharactersMathematical",(function(){return g})),a.d(e,"SpecialCharactersLatin",(function(){return m})),a.d(e,"SpecialCharactersEssentials",(function(){return L})),a.d(e,"SpecialCharactersCurrency",(function(){return p}));var i=a(0),r=a(5),l=a(1),c=a(3);class n extends l.FormHeaderView{constructor(t,e){super(t);const a=t.t;this.set("class","ck-special-characters-navigation"),this.groupDropdownView=this._createGroupDropdown(e),this.groupDropdownView.panelPosition="rtl"===t.uiLanguageDirection?"se":"sw",this.label=a("Special characters"),this.children.add(this.groupDropdownView)}get currentGroupName(){return this.groupDropdownView.value}_createGroupDropdown(t){const e=this.locale,a=e.t,i=Object(l.createDropdown)(e),r=this._getCharacterGroupListItemDefinitions(i,t);return i.set("value",r.first.model.label),i.buttonView.bind("label").to(i,"value"),i.buttonView.set({isOn:!1,withText:!0,tooltip:a("Character categories"),class:["ck-dropdown__button_label-width_auto"]}),i.on("execute",t=>{i.value=t.source.label}),i.delegate("execute").to(this),Object(l.addListToDropdown)(i,r),i}_getCharacterGroupListItemDefinitions(t,e){const a=new c.Collection;for(const i of e){const e={type:"button",model:new l.Model({label:i,withText:!0})};e.model.bind("isOn").to(t,"value",t=>t===e.model.label),a.add(e)}return a}}a(6);class o extends l.View{constructor(t){super(t),this.tiles=this.createCollection(),this.setTemplate({tag:"div",children:[{tag:"div",attributes:{class:["ck","ck-character-grid__tiles"]},children:this.tiles}],attributes:{class:["ck","ck-character-grid"]}})}createTile(t,e){const a=new l.ButtonView(this.locale);return a.set({label:t,withText:!0,class:"ck-character-grid__tile"}),a.extendTemplate({attributes:{title:e},on:{mouseover:a.bindTemplate.to("mouseover")}}),a.on("mouseover",()=>{this.fire("tileHover",{name:e,character:t})}),a.on("execute",()=>{this.fire("execute",{name:e,character:t})}),a}}a(8);class s extends l.View{constructor(t){super(t);const e=this.bindTemplate;this.set("character",null),this.set("name",null),this.bind("code").to(this,"character",h),this.setTemplate({tag:"div",children:[{tag:"span",attributes:{class:["ck-character-info__name"]},children:[{text:e.to("name",t=>t||"​")}]},{tag:"span",attributes:{class:["ck-character-info__code"]},children:[{text:e.to("code")}]}],attributes:{class:["ck","ck-character-info"]}})}}function h(t){if(null===t)return"";return"U+"+("0000"+t.codePointAt(0).toString(16)).slice(-4)}a(10);class u extends i.Plugin{static get requires(){return[r.Typing]}static get pluginName(){return"SpecialCharacters"}constructor(t){super(t),this._characters=new Map,this._groups=new Map}init(){const t=this.editor,e=t.t,a=t.commands.get("input");t.ui.componentFactory.add("specialCharacters",i=>{const r=Object(l.createDropdown)(i);let c;return r.buttonView.set({label:e("Special characters"),icon:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M10 2.5a7.47 7.47 0 0 1 4.231 1.31 7.268 7.268 0 0 1 2.703 3.454 7.128 7.128 0 0 1 .199 4.353c-.39 1.436-1.475 2.72-2.633 3.677h2.013c0-.226.092-.443.254-.603a.876.876 0 0 1 1.229 0c.163.16.254.377.254.603v.853c0 .209-.078.41-.22.567a.873.873 0 0 1-.547.28l-.101.006h-4.695a.517.517 0 0 1-.516-.518v-1.265c0-.21.128-.398.317-.489a5.601 5.601 0 0 0 2.492-2.371 5.459 5.459 0 0 0 .552-3.693 5.53 5.53 0 0 0-1.955-3.2A5.71 5.71 0 0 0 10 4.206 5.708 5.708 0 0 0 6.419 5.46 5.527 5.527 0 0 0 4.46 8.663a5.457 5.457 0 0 0 .554 3.695 5.6 5.6 0 0 0 2.497 2.37.55.55 0 0 1 .317.49v1.264c0 .286-.23.518-.516.518H2.618a.877.877 0 0 1-.614-.25.845.845 0 0 1-.254-.603v-.853c0-.226.091-.443.254-.603a.876.876 0 0 1 1.228 0c.163.16.255.377.255.603h1.925c-1.158-.958-2.155-2.241-2.545-3.678a7.128 7.128 0 0 1 .199-4.352 7.268 7.268 0 0 1 2.703-3.455A7.475 7.475 0 0 1 10 2.5z"/></svg>',tooltip:!0}),r.bind("isEnabled").to(a),r.on("execute",(e,a)=>{t.execute("input",{text:a.character}),t.editing.view.focus()}),r.on("change:isOpen",()=>{c||(c=this._createDropdownPanelContent(i,r),r.panelView.children.add(c.navigationView),r.panelView.children.add(c.gridView),r.panelView.children.add(c.infoView)),c.infoView.set({character:null,name:null})}),r})}addItems(t,e){if("All"===t)throw new c.CKEditorError('special-character-invalid-group-name: The name "All" is reserved and cannot be used.');const a=this._getGroup(t);for(const t of e)a.add(t.title),this._characters.set(t.title,t.character)}getGroups(){return this._groups.keys()}getCharactersForGroup(t){return"All"===t?new Set(this._characters.keys()):this._groups.get(t)}getCharacter(t){return this._characters.get(t)}_getGroup(t){return this._groups.has(t)||this._groups.set(t,new Set),this._groups.get(t)}_updateGrid(t,e){e.tiles.clear();const a=this.getCharactersForGroup(t);for(const t of a){const a=this.getCharacter(t);e.tiles.add(e.createTile(a,t))}}_createDropdownPanelContent(t,e){const a=[...this.getGroups()];a.unshift("All");const i=new n(t,a),r=new o(t),l=new s(t);return r.delegate("execute").to(e),r.on("tileHover",(t,e)=>{l.set(e)}),i.on("execute",()=>{this._updateGrid(i.currentGroupName,r)}),this._updateGrid(i.currentGroupName,r),{navigationView:i,gridView:r,infoView:l}}}class w extends i.Plugin{static get pluginName(){return"SpecialCharactersArrows"}init(){const t=this.editor,e=t.t;t.plugins.get("SpecialCharacters").addItems("Arrows",[{title:e("leftwards double arrow"),character:"⇐"},{title:e("rightwards double arrow"),character:"⇒"},{title:e("upwards double arrow"),character:"⇑"},{title:e("downwards double arrow"),character:"⇓"},{title:e("leftwards dashed arrow"),character:"⇠"},{title:e("rightwards dashed arrow"),character:"⇢"},{title:e("upwards dashed arrow"),character:"⇡"},{title:e("downwards dashed arrow"),character:"⇣"},{title:e("leftwards arrow to bar"),character:"⇤"},{title:e("rightwards arrow to bar"),character:"⇥"},{title:e("upwards arrow to bar"),character:"⤒"},{title:e("downwards arrow to bar"),character:"⤓"},{title:e("up down arrow with base"),character:"↨"},{title:e("back with leftwards arrow above"),character:"🔙"},{title:e("end with leftwards arrow above"),character:"🔚"},{title:e("on with exclamation mark with left right arrow above"),character:"🔛"},{title:e("soon with rightwards arrow above"),character:"🔜"},{title:e("top with upwards arrow above"),character:"🔝"}])}}class d extends i.Plugin{static get pluginName(){return"SpecialCharactersText"}init(){const t=this.editor,e=t.t;t.plugins.get("SpecialCharacters").addItems("Text",[{character:"‹",title:e("Single left-pointing angle quotation mark")},{character:"›",title:e("Single right-pointing angle quotation mark")},{character:"«",title:e("Left-pointing double angle quotation mark")},{character:"»",title:e("Right-pointing double angle quotation mark")},{character:"‘",title:e("Left single quotation mark")},{character:"’",title:e("Right single quotation mark")},{character:"“",title:e("Left double quotation mark")},{character:"”",title:e("Right double quotation mark")},{character:"‚",title:e("Single low-9 quotation mark")},{character:"„",title:e("Double low-9 quotation mark")},{character:"¡",title:e("Inverted exclamation mark")},{character:"¿",title:e("Inverted question mark")},{character:"‥",title:e("Two dot leader")},{character:"…",title:e("Horizontal ellipsis")},{character:"‡",title:e("Double dagger")},{character:"‰",title:e("Per mille sign")},{character:"‱",title:e("Per ten thousand sign")},{character:"‼",title:e("Double exclamation mark")},{character:"⁈",title:e("Question exclamation mark")},{character:"⁉",title:e("Exclamation question mark")},{character:"⁇",title:e("Double question mark")},{character:"©",title:e("Copyright sign")},{character:"®",title:e("Registered sign")},{character:"™",title:e("Trade mark sign")},{character:"§",title:e("Section sign")},{character:"¶",title:e("Paragraph sign")},{character:"⁋",title:e("Reversed paragraph sign")}])}}class g extends i.Plugin{static get pluginName(){return"SpecialCharactersMathematical"}init(){const t=this.editor,e=t.t;t.plugins.get("SpecialCharacters").addItems("Mathematical",[{character:"<",title:e("Less-than sign")},{character:">",title:e("Greater-than sign")},{character:"≤",title:e("Less-than or equal to")},{character:"≥",title:e("Greater-than or equal to")},{character:"–",title:e("En dash")},{character:"—",title:e("Em dash")},{character:"¯",title:e("Macron")},{character:"‾",title:e("Overline")},{character:"°",title:e("Degree sign")},{character:"−",title:e("Minus sign")},{character:"±",title:e("Plus-minus sign")},{character:"÷",title:e("Division sign")},{character:"⁄",title:e("Fraction slash")},{character:"×",title:e("Multiplication sign")},{character:"ƒ",title:e("Latin small letter f with hook")},{character:"∫",title:e("Integral")},{character:"∑",title:e("N-ary summation")},{character:"∞",title:e("Infinity")},{character:"√",title:e("Square root")},{character:"∼",title:e("Tilde operator")},{character:"≅",title:e("Approximately equal to")},{character:"≈",title:e("Almost equal to")},{character:"≠",title:e("Not equal to")},{character:"≡",title:e("Identical to")},{character:"∈",title:e("Element of")},{character:"∉",title:e("Not an element of")},{character:"∋",title:e("Contains as member")},{character:"∏",title:e("N-ary product")},{character:"∧",title:e("Logical and")},{character:"∨",title:e("Logical or")},{character:"¬",title:e("Not sign")},{character:"∩",title:e("Intersection")},{character:"∪",title:e("Union")},{character:"∂",title:e("Partial differential")},{character:"∀",title:e("For all")},{character:"∃",title:e("There exists")},{character:"∅",title:e("Empty set")},{character:"∇",title:e("Nabla")},{character:"∗",title:e("Asterisk operator")},{character:"∝",title:e("Proportional to")},{character:"∠",title:e("Angle")},{character:"¼",title:e("Vulgar fraction one quarter")},{character:"½",title:e("Vulgar fraction one half")},{character:"¾",title:e("Vulgar fraction three quarters")}])}}class m extends i.Plugin{static get pluginName(){return"SpecialCharactersLatin"}init(){const t=this.editor,e=t.t;t.plugins.get("SpecialCharacters").addItems("Latin",[{character:"Ā",title:e("Latin capital letter a with macron")},{character:"ā",title:e("Latin small letter a with macron")},{character:"Ă",title:e("Latin capital letter a with breve")},{character:"ă",title:e("Latin small letter a with breve")},{character:"Ą",title:e("Latin capital letter a with ogonek")},{character:"ą",title:e("Latin small letter a with ogonek")},{character:"Ć",title:e("Latin capital letter c with acute")},{character:"ć",title:e("Latin small letter c with acute")},{character:"Ĉ",title:e("Latin capital letter c with circumflex")},{character:"ĉ",title:e("Latin small letter c with circumflex")},{character:"Ċ",title:e("Latin capital letter c with dot above")},{character:"ċ",title:e("Latin small letter c with dot above")},{character:"Č",title:e("Latin capital letter c with caron")},{character:"č",title:e("Latin small letter c with caron")},{character:"Ď",title:e("Latin capital letter d with caron")},{character:"ď",title:e("Latin small letter d with caron")},{character:"Đ",title:e("Latin capital letter d with stroke")},{character:"đ",title:e("Latin small letter d with stroke")},{character:"Ē",title:e("Latin capital letter e with macron")},{character:"ē",title:e("Latin small letter e with macron")},{character:"Ĕ",title:e("Latin capital letter e with breve")},{character:"ĕ",title:e("Latin small letter e with breve")},{character:"Ė",title:e("Latin capital letter e with dot above")},{character:"ė",title:e("Latin small letter e with dot above")},{character:"Ę",title:e("Latin capital letter e with ogonek")},{character:"ę",title:e("Latin small letter e with ogonek")},{character:"Ě",title:e("Latin capital letter e with caron")},{character:"ě",title:e("Latin small letter e with caron")},{character:"Ĝ",title:e("Latin capital letter g with circumflex")},{character:"ĝ",title:e("Latin small letter g with circumflex")},{character:"Ğ",title:e("Latin capital letter g with breve")},{character:"ğ",title:e("Latin small letter g with breve")},{character:"Ġ",title:e("Latin capital letter g with dot above")},{character:"ġ",title:e("Latin small letter g with dot above")},{character:"Ģ",title:e("Latin capital letter g with cedilla")},{character:"ģ",title:e("Latin small letter g with cedilla")},{character:"Ĥ",title:e("Latin capital letter h with circumflex")},{character:"ĥ",title:e("Latin small letter h with circumflex")},{character:"Ħ",title:e("Latin capital letter h with stroke")},{character:"ħ",title:e("Latin small letter h with stroke")},{character:"Ĩ",title:e("Latin capital letter i with tilde")},{character:"ĩ",title:e("Latin small letter i with tilde")},{character:"Ī",title:e("Latin capital letter i with macron")},{character:"ī",title:e("Latin small letter i with macron")},{character:"Ĭ",title:e("Latin capital letter i with breve")},{character:"ĭ",title:e("Latin small letter i with breve")},{character:"Į",title:e("Latin capital letter i with ogonek")},{character:"į",title:e("Latin small letter i with ogonek")},{character:"İ",title:e("Latin capital letter i with dot above")},{character:"ı",title:e("Latin small letter dotless i")},{character:"IJ",title:e("Latin capital ligature ij")},{character:"ij",title:e("Latin small ligature ij")},{character:"Ĵ",title:e("Latin capital letter j with circumflex")},{character:"ĵ",title:e("Latin small letter j with circumflex")},{character:"Ķ",title:e("Latin capital letter k with cedilla")},{character:"ķ",title:e("Latin small letter k with cedilla")},{character:"ĸ",title:e("Latin small letter kra")},{character:"Ĺ",title:e("Latin capital letter l with acute")},{character:"ĺ",title:e("Latin small letter l with acute")},{character:"Ļ",title:e("Latin capital letter l with cedilla")},{character:"ļ",title:e("Latin small letter l with cedilla")},{character:"Ľ",title:e("Latin capital letter l with caron")},{character:"ľ",title:e("Latin small letter l with caron")},{character:"Ŀ",title:e("Latin capital letter l with middle dot")},{character:"ŀ",title:e("Latin small letter l with middle dot")},{character:"Ł",title:e("Latin capital letter l with stroke")},{character:"ł",title:e("Latin small letter l with stroke")},{character:"Ń",title:e("Latin capital letter n with acute")},{character:"ń",title:e("Latin small letter n with acute")},{character:"Ņ",title:e("Latin capital letter n with cedilla")},{character:"ņ",title:e("Latin small letter n with cedilla")},{character:"Ň",title:e("Latin capital letter n with caron")},{character:"ň",title:e("Latin small letter n with caron")},{character:"ʼn",title:e("Latin small letter n preceded by apostrophe")},{character:"Ŋ",title:e("Latin capital letter eng")},{character:"ŋ",title:e("Latin small letter eng")},{character:"Ō",title:e("Latin capital letter o with macron")},{character:"ō",title:e("Latin small letter o with macron")},{character:"Ŏ",title:e("Latin capital letter o with breve")},{character:"ŏ",title:e("Latin small letter o with breve")},{character:"Ő",title:e("Latin capital letter o with double acute")},{character:"ő",title:e("Latin small letter o with double acute")},{character:"Œ",title:e("Latin capital ligature oe")},{character:"œ",title:e("Latin small ligature oe")},{character:"Ŕ",title:e("Latin capital letter r with acute")},{character:"ŕ",title:e("Latin small letter r with acute")},{character:"Ŗ",title:e("Latin capital letter r with cedilla")},{character:"ŗ",title:e("Latin small letter r with cedilla")},{character:"Ř",title:e("Latin capital letter r with caron")},{character:"ř",title:e("Latin small letter r with caron")},{character:"Ś",title:e("Latin capital letter s with acute")},{character:"ś",title:e("Latin small letter s with acute")},{character:"Ŝ",title:e("Latin capital letter s with circumflex")},{character:"ŝ",title:e("Latin small letter s with circumflex")},{character:"Ş",title:e("Latin capital letter s with cedilla")},{character:"ş",title:e("Latin small letter s with cedilla")},{character:"Š",title:e("Latin capital letter s with caron")},{character:"š",title:e("Latin small letter s with caron")},{character:"Ţ",title:e("Latin capital letter t with cedilla")},{character:"ţ",title:e("Latin small letter t with cedilla")},{character:"Ť",title:e("Latin capital letter t with caron")},{character:"ť",title:e("Latin small letter t with caron")},{character:"Ŧ",title:e("Latin capital letter t with stroke")},{character:"ŧ",title:e("Latin small letter t with stroke")},{character:"Ũ",title:e("Latin capital letter u with tilde")},{character:"ũ",title:e("Latin small letter u with tilde")},{character:"Ū",title:e("Latin capital letter u with macron")},{character:"ū",title:e("Latin small letter u with macron")},{character:"Ŭ",title:e("Latin capital letter u with breve")},{character:"ŭ",title:e("Latin small letter u with breve")},{character:"Ů",title:e("Latin capital letter u with ring above")},{character:"ů",title:e("Latin small letter u with ring above")},{character:"Ű",title:e("Latin capital letter u with double acute")},{character:"ű",title:e("Latin small letter u with double acute")},{character:"Ų",title:e("Latin capital letter u with ogonek")},{character:"ų",title:e("Latin small letter u with ogonek")},{character:"Ŵ",title:e("Latin capital letter w with circumflex")},{character:"ŵ",title:e("Latin small letter w with circumflex")},{character:"Ŷ",title:e("Latin capital letter y with circumflex")},{character:"ŷ",title:e("Latin small letter y with circumflex")},{character:"Ÿ",title:e("Latin capital letter y with diaeresis")},{character:"Ź",title:e("Latin capital letter z with acute")},{character:"ź",title:e("Latin small letter z with acute")},{character:"Ż",title:e("Latin capital letter z with dot above")},{character:"ż",title:e("Latin small letter z with dot above")},{character:"Ž",title:e("Latin capital letter z with caron")},{character:"ž",title:e("Latin small letter z with caron")},{character:"ſ",title:e("Latin small letter long s")}])}}class p extends i.Plugin{static get pluginName(){return"SpecialCharactersCurrency"}init(){const t=this.editor,e=t.t;t.plugins.get("SpecialCharacters").addItems("Currency",[{character:"$",title:e("Dollar sign")},{character:"€",title:e("Euro sign")},{character:"¥",title:e("Yen sign")},{character:"£",title:e("Pound sign")},{character:"¢",title:e("Cent sign")},{character:"₠",title:e("Euro-currency sign")},{character:"₡",title:e("Colon sign")},{character:"₢",title:e("Cruzeiro sign")},{character:"₣",title:e("French franc sign")},{character:"₤",title:e("Lira sign")},{character:"¤",title:e("Currency sign")},{character:"₿",title:e("Bitcoin sign")},{character:"₥",title:e("Mill sign")},{character:"₦",title:e("Naira sign")},{character:"₧",title:e("Peseta sign")},{character:"₨",title:e("Rupee sign")},{character:"₩",title:e("Won sign")},{character:"₪",title:e("New sheqel sign")},{character:"₫",title:e("Dong sign")},{character:"₭",title:e("Kip sign")},{character:"₮",title:e("Tugrik sign")},{character:"₯",title:e("Drachma sign")},{character:"₰",title:e("German penny sign")},{character:"₱",title:e("Peso sign")},{character:"₲",title:e("Guarani sign")},{character:"₳",title:e("Austral sign")},{character:"₴",title:e("Hryvnia sign")},{character:"₵",title:e("Cedi sign")},{character:"₶",title:e("Livre tournois sign")},{character:"₷",title:e("Spesmilo sign")},{character:"₸",title:e("Tenge sign")},{character:"₹",title:e("Indian rupee sign")},{character:"₺",title:e("Turkish lira sign")},{character:"₻",title:e("Nordic mark sign")},{character:"₼",title:e("Manat sign")},{character:"₽",title:e("Ruble sign")}])}}class L extends i.Plugin{static get requires(){return[p,d,g,w,m]}}}]);
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/table.js b/core/assets/vendor/ckeditor5/table.js
new file mode 100644
index 000000000000..32fff31f0b24
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/table.js
@@ -0,0 +1,5 @@
+/*!
+ * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md.
+ */
+!function(e){const t=e.en=e.en||{};t.dictionary=Object.assign(t.dictionary||{},{"Align cell text to the bottom":"Align cell text to the bottom","Align cell text to the center":"Align cell text to the center","Align cell text to the left":"Align cell text to the left","Align cell text to the middle":"Align cell text to the middle","Align cell text to the right":"Align cell text to the right","Align cell text to the top":"Align cell text to the top","Align table to the left":"Align table to the left","Align table to the right":"Align table to the right",Alignment:"Alignment",Background:"Background",Border:"Border","Cell properties":"Cell properties","Center table":"Center table",Color:"Color","Color picker":"Color picker",Column:"Column",Dashed:"Dashed","Delete column":"Delete column","Delete row":"Delete row",Dimensions:"Dimensions",Dotted:"Dotted",Double:"Double","Enter table caption":"Enter table caption",Groove:"Groove","Header column":"Header column","Header row":"Header row",Height:"Height","Horizontal text alignment toolbar":"Horizontal text alignment toolbar","Insert column left":"Insert column left","Insert column right":"Insert column right","Insert row above":"Insert row above","Insert row below":"Insert row below","Insert table":"Insert table",Inset:"Inset","Justify cell text":"Justify cell text","Merge cell down":"Merge cell down","Merge cell left":"Merge cell left","Merge cell right":"Merge cell right","Merge cell up":"Merge cell up","Merge cells":"Merge cells",None:"None",Outset:"Outset",Padding:"Padding",Ridge:"Ridge",Row:"Row","Select column":"Select column","Select row":"Select row",Solid:"Solid","Split cell horizontally":"Split cell horizontally","Split cell vertically":"Split cell vertically",Style:"Style","Table alignment toolbar":"Table alignment toolbar","Table cell text alignment":"Table cell text alignment","Table properties":"Table properties","Table toolbar":"Table toolbar",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".','The value is invalid. Try "10px" or "2em" or simply "2".':'The value is invalid. Try "10px" or "2em" or simply "2".',"Toggle caption off":"Toggle caption off","Toggle caption on":"Toggle caption on","Vertical text alignment toolbar":"Vertical text alignment toolbar",Width:"Width"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})),window.CKEditor5=window.CKEditor5||{},window.CKEditor5.table=function(e){var t={};function o(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,o),i.l=!0,i.exports}return o.m=e,o.c=t,o.d=function(e,t,n){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)o.d(n,i,function(t){return e[t]}.bind(null,i));return n},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=32)}([function(e,t,o){e.exports=o(6)("./src/ui.js")},function(e,t,o){e.exports=o(6)("./src/core.js")},function(e,t,o){e.exports=o(6)("./src/utils.js")},function(e,t,o){e.exports=o(6)("./src/engine.js")},function(e,t,o){e.exports=o(6)("./src/widget.js")},function(e,t,o){"use strict";var n,i=function(){return void 0===n&&(n=Boolean(window&&document&&document.all&&!window.atob)),n},r=function(){var e={};return function(t){if(void 0===e[t]){var o=document.querySelector(t);if(window.HTMLIFrameElement&&o instanceof window.HTMLIFrameElement)try{o=o.contentDocument.head}catch(e){o=null}e[t]=o}return e[t]}}(),l=[];function s(e){for(var t=-1,o=0;o<l.length;o++)if(l[o].identifier===e){t=o;break}return t}function a(e,t){for(var o={},n=[],i=0;i<e.length;i++){var r=e[i],a=t.base?r[0]+t.base:r[0],c=o[a]||0,d="".concat(a," ").concat(c);o[a]=c+1;var u=s(d),h={css:r[1],media:r[2],sourceMap:r[3]};-1!==u?(l[u].references++,l[u].updater(h)):l.push({identifier:d,updater:p(h,t),references:1}),n.push(d)}return n}function c(e){var t=document.createElement("style"),n=e.attributes||{};if(void 0===n.nonce){var i=o.nc;i&&(n.nonce=i)}if(Object.keys(n).forEach((function(e){t.setAttribute(e,n[e])})),"function"==typeof e.insert)e.insert(t);else{var l=r(e.insert||"head");if(!l)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");l.appendChild(t)}return t}var d,u=(d=[],function(e,t){return d[e]=t,d.filter(Boolean).join("\n")});function h(e,t,o,n){var i=o?"":n.media?"@media ".concat(n.media," {").concat(n.css,"}"):n.css;if(e.styleSheet)e.styleSheet.cssText=u(t,i);else{var r=document.createTextNode(i),l=e.childNodes;l[t]&&e.removeChild(l[t]),l.length?e.insertBefore(r,l[t]):e.appendChild(r)}}function b(e,t,o){var n=o.css,i=o.media,r=o.sourceMap;if(i?e.setAttribute("media",i):e.removeAttribute("media"),r&&"undefined"!=typeof btoa&&(n+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(r))))," */")),e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}var m=null,g=0;function p(e,t){var o,n,i;if(t.singleton){var r=g++;o=m||(m=c(t)),n=h.bind(null,o,r,!1),i=h.bind(null,o,r,!0)}else o=c(t),n=b.bind(null,o,t),i=function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(o)};return n(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;n(e=t)}else i()}}e.exports=function(e,t){(t=t||{}).singleton||"boolean"==typeof t.singleton||(t.singleton=i());var o=a(e=e||[],t);return function(e){if(e=e||[],"[object Array]"===Object.prototype.toString.call(e)){for(var n=0;n<o.length;n++){var i=s(o[n]);l[i].references--}for(var r=a(e,t),c=0;c<o.length;c++){var d=s(o[c]);0===l[d].references&&(l[d].updater(),l.splice(d,1))}o=r}}}},function(e,t){e.exports=CKEditor5.dll},,function(e,t,o){var n=o(5),i=o(23);"string"==typeof(i=i.__esModule?i.default:i)&&(i=[[e.i,i,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};n(i,r);e.exports=i.locals||{}},function(e,t,o){var n=o(5),i=o(24);"string"==typeof(i=i.__esModule?i.default:i)&&(i=[[e.i,i,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};n(i,r);e.exports=i.locals||{}},function(e,t,o){"use strict";(function(e){var o="object"==typeof e&&e&&e.Object===Object&&e;t.a=o}).call(this,o(27))},function(e,t,o){var n=o(5),i=o(12);"string"==typeof(i=i.__esModule?i.default:i)&&(i=[[e.i,i,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};n(i,r);e.exports=i.locals||{}},function(e,t){e.exports=":root{--ck-color-table-focused-cell-background:rgba(158,207,250,0.3)}.ck-widget.table td.ck-editor__nested-editable.ck-editor__nested-editable_focused,.ck-widget.table td.ck-editor__nested-editable:focus,.ck-widget.table th.ck-editor__nested-editable.ck-editor__nested-editable_focused,.ck-widget.table th.ck-editor__nested-editable:focus{background:var(--ck-color-table-focused-cell-background);border-style:none;outline:1px solid var(--ck-color-focus-border);outline-offset:-1px}"},function(e,t,o){var n=o(5),i=o(14);"string"==typeof(i=i.__esModule?i.default:i)&&(i=[[e.i,i,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};n(i,r);e.exports=i.locals||{}},function(e,t){e.exports=".ck .ck-insert-table-dropdown__grid{display:flex;flex-direction:row;flex-wrap:wrap}:root{--ck-insert-table-dropdown-padding:10px;--ck-insert-table-dropdown-box-height:11px;--ck-insert-table-dropdown-box-width:12px;--ck-insert-table-dropdown-box-margin:1px}.ck .ck-insert-table-dropdown__grid{width:calc(var(--ck-insert-table-dropdown-box-width)*10 + var(--ck-insert-table-dropdown-box-margin)*20 + var(--ck-insert-table-dropdown-padding)*2);padding:var(--ck-insert-table-dropdown-padding) var(--ck-insert-table-dropdown-padding) 0}.ck .ck-insert-table-dropdown__label{text-align:center}.ck .ck-insert-table-dropdown-grid-box{width:var(--ck-insert-table-dropdown-box-width);height:var(--ck-insert-table-dropdown-box-height);margin:var(--ck-insert-table-dropdown-box-margin);border:1px solid var(--ck-color-base-border);border-radius:1px}.ck .ck-insert-table-dropdown-grid-box.ck-on{border-color:var(--ck-color-focus-border);background:var(--ck-color-focus-outer-shadow)}"},function(e,t,o){var n=o(5),i=o(16);"string"==typeof(i=i.__esModule?i.default:i)&&(i=[[e.i,i,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};n(i,r);e.exports=i.locals||{}},function(e,t){e.exports=':root{--ck-table-selected-cell-background:rgba(158,207,250,0.3)}.ck.ck-editor__editable .table table td.ck-editor__editable_selected,.ck.ck-editor__editable .table table th.ck-editor__editable_selected{position:relative;caret-color:transparent;outline:unset;box-shadow:unset}.ck.ck-editor__editable .table table td.ck-editor__editable_selected:after,.ck.ck-editor__editable .table table th.ck-editor__editable_selected:after{content:"";pointer-events:none;background-color:var(--ck-table-selected-cell-background);position:absolute;top:0;left:0;right:0;bottom:0}.ck.ck-editor__editable .table table td.ck-editor__editable_selected ::selection,.ck.ck-editor__editable .table table td.ck-editor__editable_selected:focus,.ck.ck-editor__editable .table table th.ck-editor__editable_selected ::selection,.ck.ck-editor__editable .table table th.ck-editor__editable_selected:focus{background-color:transparent}.ck.ck-editor__editable .table table td.ck-editor__editable_selected .ck-widget,.ck.ck-editor__editable .table table th.ck-editor__editable_selected .ck-widget{outline:unset}.ck.ck-editor__editable .table table td.ck-editor__editable_selected .ck-widget>.ck-widget__selection-handle,.ck.ck-editor__editable .table table th.ck-editor__editable_selected .ck-widget>.ck-widget__selection-handle{display:none}'},function(e,t,o){var n=o(5),i=o(18);"string"==typeof(i=i.__esModule?i.default:i)&&(i=[[e.i,i,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};n(i,r);e.exports=i.locals||{}},function(e,t){e.exports=".ck-content .table{margin:.9em auto;display:table}.ck-content .table table{border-collapse:collapse;border-spacing:0;width:100%;height:100%;border:1px double #b3b3b3}.ck-content .table table td,.ck-content .table table th{min-width:2em;padding:.4em;border:1px solid #bfbfbf}.ck-content .table table th{font-weight:700;background:hsla(0,0%,0%,5%)}.ck-content[dir=rtl] .table th{text-align:right}.ck-content[dir=ltr] .table th{text-align:left}.ck-editor__editable .ck-table-bogus-paragraph{display:inline-block;width:100%}"},function(e,t,o){var n=o(5),i=o(20);"string"==typeof(i=i.__esModule?i.default:i)&&(i=[[e.i,i,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};n(i,r);e.exports=i.locals||{}},function(e,t){e.exports=".ck.ck-input-color{width:100%;display:flex;flex-direction:row-reverse}.ck.ck-input-color>input.ck.ck-input-text{min-width:auto;flex-grow:1}.ck.ck-input-color>div.ck.ck-dropdown{min-width:auto}.ck.ck-input-color>div.ck.ck-dropdown>.ck-input-color__button .ck-dropdown__arrow{display:none}.ck.ck-input-color .ck.ck-input-color__button{display:flex}.ck.ck-input-color .ck.ck-input-color__button .ck.ck-input-color__button__preview{position:relative;overflow:hidden}.ck.ck-input-color .ck.ck-input-color__button .ck.ck-input-color__button__preview>.ck.ck-input-color__button__preview__no-color-indicator{position:absolute;display:block}[dir=ltr] .ck.ck-input-color>.ck.ck-input-text{border-top-right-radius:0;border-bottom-right-radius:0}[dir=rtl] .ck.ck-input-color>.ck.ck-input-text{border-top-left-radius:0;border-bottom-left-radius:0}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button{padding:0}[dir=ltr] .ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button{border-left-width:0;border-top-left-radius:0;border-bottom-left-radius:0}[dir=rtl] .ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button{border-right-width:0;border-top-right-radius:0;border-bottom-right-radius:0}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button.ck-disabled{background:var(--ck-color-input-disabled-background)}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button>.ck.ck-input-color__button__preview{border-radius:0}.ck-rounded-corners .ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button>.ck.ck-input-color__button__preview,.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button>.ck.ck-input-color__button__preview.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button>.ck.ck-input-color__button__preview{width:20px;height:20px;border:1px solid var(--ck-color-input-border)}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button>.ck.ck-input-color__button__preview>.ck.ck-input-color__button__preview__no-color-indicator{top:-30%;left:50%;height:150%;width:8%;background:red;border-radius:2px;transform:rotate(45deg);transform-origin:50%}.ck.ck-input-color .ck.ck-input-color__remove-color{width:100%;border-bottom:1px solid var(--ck-color-input-border);padding:calc(var(--ck-spacing-standard)/2) var(--ck-spacing-standard);border-bottom-left-radius:0;border-bottom-right-radius:0}[dir=ltr] .ck.ck-input-color .ck.ck-input-color__remove-color{border-top-right-radius:0}[dir=rtl] .ck.ck-input-color .ck.ck-input-color__remove-color{border-top-left-radius:0}.ck.ck-input-color .ck.ck-input-color__remove-color .ck.ck-icon{margin-right:var(--ck-spacing-standard)}[dir=rtl] .ck.ck-input-color .ck.ck-input-color__remove-color .ck.ck-icon{margin-right:0;margin-left:var(--ck-spacing-standard)}"},function(e,t,o){var n=o(5),i=o(22);"string"==typeof(i=i.__esModule?i.default:i)&&(i=[[e.i,i,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};n(i,r);e.exports=i.locals||{}},function(e,t){e.exports=".ck.ck-form__row{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:space-between}.ck.ck-form__row>:not(.ck-label){flex-grow:1}.ck.ck-form__row.ck-table-form__action-row .ck-button-cancel,.ck.ck-form__row.ck-table-form__action-row .ck-button-save{justify-content:center}.ck.ck-form__row{padding:var(--ck-spacing-standard) var(--ck-spacing-large) 0}[dir=ltr] .ck.ck-form__row>:not(.ck-label)+*{margin-left:var(--ck-spacing-large)}[dir=rtl] .ck.ck-form__row>:not(.ck-label)+*{margin-right:var(--ck-spacing-large)}.ck.ck-form__row>.ck-label{width:100%;min-width:100%}.ck.ck-form__row.ck-table-form__action-row{margin-top:var(--ck-spacing-large)}.ck.ck-form__row.ck-table-form__action-row .ck-button .ck-button__label{color:var(--ck-color-text)}"},function(e,t){e.exports=".ck.ck-form{padding:0 0 var(--ck-spacing-large)}.ck.ck-form:focus{outline:none}.ck.ck-form .ck.ck-input-text{min-width:100%;width:0}.ck.ck-form .ck.ck-dropdown{min-width:100%}.ck.ck-form .ck.ck-dropdown .ck-dropdown__button:not(:focus){border:1px solid var(--ck-color-base-border)}.ck.ck-form .ck.ck-dropdown .ck-dropdown__button .ck-button__label{width:100%}"},function(e,t){e.exports='.ck.ck-table-form .ck-form__row.ck-table-form__background-row,.ck.ck-table-form .ck-form__row.ck-table-form__border-row{flex-wrap:wrap}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row{flex-wrap:wrap;align-items:center}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-labeled-field-view{display:flex;flex-direction:column-reverse;align-items:center}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-labeled-field-view .ck.ck-dropdown,.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimension-operator{flex-grow:0}.ck.ck-table-form .ck.ck-labeled-field-view{position:relative}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status{position:absolute;left:50%;bottom:calc(var(--ck-table-properties-error-arrow-size)*-1);transform:translate(-50%,100%);z-index:1}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status:after{content:"";position:absolute;top:calc(var(--ck-table-properties-error-arrow-size)*-1);left:50%;transform:translateX(-50%)}:root{--ck-table-properties-error-arrow-size:6px;--ck-table-properties-min-error-width:150px}.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-labeled-field-view>.ck-label{font-size:var(--ck-font-size-tiny);text-align:center}.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-table-form__border-style,.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-table-form__border-width{width:80px;min-width:80px;max-width:80px}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row{padding:0}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimensions-row__height,.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimensions-row__width{margin:0}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimension-operator{align-self:flex-end;display:inline-block;height:var(--ck-ui-component-min-height);line-height:var(--ck-ui-component-min-height);margin:0 var(--ck-spacing-small)}.ck.ck-table-form .ck.ck-labeled-field-view{padding-top:var(--ck-spacing-standard)}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status{border-radius:0}.ck-rounded-corners .ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status,.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status.ck-rounded-corners{border-radius:var(--ck-border-radius)}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status{background:var(--ck-color-base-error);color:var(--ck-color-base-background);padding:var(--ck-spacing-small) var(--ck-spacing-medium);min-width:var(--ck-table-properties-min-error-width);text-align:center}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status:after{border-left:var(--ck-table-properties-error-arrow-size) solid transparent;border-bottom:var(--ck-table-properties-error-arrow-size) solid var(--ck-color-base-error);border-right:var(--ck-table-properties-error-arrow-size) solid transparent;border-top:0 solid transparent}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status{animation:ck-table-form-labeled-view-status-appear .15s ease both}.ck.ck-table-form .ck.ck-labeled-field-view .ck-input.ck-error:not(:focus)+.ck.ck-labeled-field-view__status{display:none}@keyframes ck-table-form-labeled-view-status-appear{0%{opacity:0}to{opacity:1}}'},function(e,t,o){var n=o(5),i=o(26);"string"==typeof(i=i.__esModule?i.default:i)&&(i=[[e.i,i,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};n(i,r);e.exports=i.locals||{}},function(e,t){e.exports=".ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row{flex-wrap:wrap}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row .ck.ck-toolbar:first-of-type{flex-grow:0.57}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row .ck.ck-toolbar:last-of-type{flex-grow:0.43}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row .ck.ck-toolbar .ck-button{flex-grow:1}.ck.ck-table-cell-properties-form{width:320px}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__padding-row{align-self:flex-end;padding:0;width:25%}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row .ck.ck-toolbar{background:none;margin-top:var(--ck-spacing-standard)}"},function(e,t){var o;o=function(){return this}();try{o=o||new Function("return this")()}catch(e){"object"==typeof window&&(o=window)}e.exports=o},function(e,t,o){var n=o(5),i=o(29);"string"==typeof(i=i.__esModule?i.default:i)&&(i=[[e.i,i,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};n(i,r);e.exports=i.locals||{}},function(e,t){e.exports=".ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row{flex-wrap:wrap;flex-basis:0;align-content:baseline}.ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row .ck.ck-toolbar .ck-toolbar__items{flex-wrap:nowrap}.ck.ck-table-properties-form{width:320px}.ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row{align-self:flex-end;padding:0}.ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row .ck.ck-toolbar{background:none;margin-top:var(--ck-spacing-standard)}.ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row .ck.ck-toolbar .ck-toolbar__items>*{width:40px}"},function(e,t,o){var n=o(5),i=o(31);"string"==typeof(i=i.__esModule?i.default:i)&&(i=[[e.i,i,""]]);var r={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};n(i,r);e.exports=i.locals||{}},function(e,t){e.exports=":root{--ck-color-table-caption-background:#f7f7f7;--ck-color-table-caption-text:#333;--ck-color-table-caption-highlighted-background:#fd0}.ck-content .table>figcaption{display:table-caption;caption-side:top;word-break:break-word;text-align:center;color:var(--ck-color-table-caption-text);background-color:var(--ck-color-table-caption-background);padding:.6em;font-size:.75em;outline-offset:-1px}.ck.ck-editor__editable .table>figcaption.table__caption_highlighted{animation:ck-table-caption-highlight .6s ease-out}.ck.ck-editor__editable .table>figcaption.ck-placeholder:before{padding-left:inherit;padding-right:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@keyframes ck-table-caption-highlight{0%{background-color:var(--ck-color-table-caption-highlighted-background)}to{background-color:var(--ck-color-table-caption-background)}}"},function(e,t,o){"use strict";o.r(t),o.d(t,"Table",(function(){return He})),o.d(t,"TableEditing",(function(){return ye})),o.d(t,"TableUI",(function(){return Se})),o.d(t,"TableToolbar",(function(){return Ue})),o.d(t,"TableCellProperties",(function(){return go})),o.d(t,"TableCellPropertiesEditing",(function(){return bo})),o.d(t,"TableCellPropertiesUI",(function(){return Gt})),o.d(t,"TableProperties",(function(){return Bo})),o.d(t,"TablePropertiesEditing",(function(){return Ao})),o.d(t,"TablePropertiesUI",(function(){return Eo})),o.d(t,"TableCaption",(function(){return Wo})),o.d(t,"TableCaptionEditing",(function(){return Ho})),o.d(t,"TableCaptionUI",(function(){return Do})),o.d(t,"TableClipboard",(function(){return Pe})),o.d(t,"TableMouse",(function(){return Me})),o.d(t,"TableKeyboard",(function(){return Le})),o.d(t,"TableSelection",(function(){return Ie})),o.d(t,"TableUtils",(function(){return te}));var n=o(1),i=o(4);function r(e,t,o,n,i=1){t>i?n.setAttribute(e,t,o):n.removeAttribute(e,o)}function l(e,t,o={}){const n=e.createElement("tableCell",o);return e.insertElement("paragraph",n),e.insert(n,t),n}function s(e,t){const o=t.parent.parent,n=parseInt(o.getAttribute("headingColumns")||0),{column:i}=e.getCellLocation(t);return!!n&&i<n}var a=o(2);function c(){return e=>{e.on("element:table",(e,t,o)=>{const n=t.viewItem;if(!o.consumable.test(n,{name:!0}))return;const{rows:i,headingRows:r,headingColumns:s}=function(e){const t={headingRows:0,headingColumns:0},o=[],n=[];let i;for(const r of Array.from(e.getChildren()))if("tbody"===r.name||"thead"===r.name||"tfoot"===r.name){"thead"!==r.name||i||(i=r);const e=Array.from(r.getChildren()).filter(e=>e.is("element","tr"));for(const r of e)if("thead"===r.parent.name&&r.parent===i)t.headingRows++,o.push(r);else{n.push(r);const e=u(r);e>t.headingColumns&&(t.headingColumns=e)}}return t.rows=[...o,...n],t}(n),a={};s&&(a.headingColumns=s),r&&(a.headingRows=r);const c=o.writer.createElement("table",a);if(o.safeInsert(c,t.modelCursor)){if(o.consumable.consume(n,{name:!0}),i.forEach(e=>o.convertItem(e,o.writer.createPositionAt(c,"end"))),o.convertChildren(n,o.writer.createPositionAt(c,"end")),c.isEmpty){const e=o.writer.createElement("tableRow");o.writer.insert(e,o.writer.createPositionAt(c,"end")),l(o.writer,o.writer.createPositionAt(e,"end"))}o.updateConversionResult(c,t)}})}}function d(e){return t=>{t.on("element:"+e,(e,t,o)=>{if(t.modelRange&&t.viewItem.isEmpty){const e=t.modelRange.start.nodeAfter,n=o.writer.createPositionAt(e,0);o.writer.insertElement("paragraph",n)}},{priority:"low"})}}function u(e){let t=0,o=0;const n=Array.from(e.getChildren()).filter(e=>"th"===e.name||"td"===e.name);for(;o<n.length&&"th"===n[o].name;){const e=n[o];t+=parseInt(e.getAttribute("colspan")||1),o++}return t}class h{constructor(e,t={}){this._table=e,this._startRow=void 0!==t.row?t.row:t.startRow||0,this._endRow=void 0!==t.row?t.row:t.endRow,this._startColumn=void 0!==t.column?t.column:t.startColumn||0,this._endColumn=void 0!==t.column?t.column:t.endColumn,this._includeAllSlots=!!t.includeAllSlots,this._skipRows=new Set,this._row=0,this._rowIndex=0,this._column=0,this._cellIndex=0,this._spannedCells=new Map,this._nextCellAtColumn=-1}[Symbol.iterator](){return this}next(){const e=this._table.getChild(this._rowIndex);if(!e||this._isOverEndRow())return{done:!0};if(!e.is("element","tableRow"))return this._rowIndex++,this.next();if(this._isOverEndColumn())return this._advanceToNextRow();let t=null;const o=this._getSpanned();if(o)this._includeAllSlots&&!this._shouldSkipSlot()&&(t=this._formatOutValue(o.cell,o.row,o.column));else{const o=e.getChild(this._cellIndex);if(!o)return this._advanceToNextRow();const n=parseInt(o.getAttribute("colspan")||1),i=parseInt(o.getAttribute("rowspan")||1);(n>1||i>1)&&this._recordSpans(o,i,n),this._shouldSkipSlot()||(t=this._formatOutValue(o)),this._nextCellAtColumn=this._column+n}return this._column++,this._column==this._nextCellAtColumn&&this._cellIndex++,t||this.next()}skipRow(e){this._skipRows.add(e)}_advanceToNextRow(){return this._row++,this._rowIndex++,this._column=0,this._cellIndex=0,this._nextCellAtColumn=-1,this.next()}_isOverEndRow(){return void 0!==this._endRow&&this._row>this._endRow}_isOverEndColumn(){return void 0!==this._endColumn&&this._column>this._endColumn}_formatOutValue(e,t=this._row,o=this._column){return{done:!1,value:new b(this,e,t,o)}}_shouldSkipSlot(){const e=this._skipRows.has(this._row),t=this._row<this._startRow,o=this._column<this._startColumn,n=void 0!==this._endColumn&&this._column>this._endColumn;return e||t||o||n}_getSpanned(){const e=this._spannedCells.get(this._row);return e&&e.get(this._column)||null}_recordSpans(e,t,o){const n={cell:e,row:this._row,column:this._column};for(let e=this._row;e<this._row+t;e++)for(let t=this._column;t<this._column+o;t++)e==this._row&&t==this._column||this._markSpannedCell(e,t,n)}_markSpannedCell(e,t,o){this._spannedCells.has(e)||this._spannedCells.set(e,new Map);this._spannedCells.get(e).set(t,o)}}class b{constructor(e,t,o,n){this.cell=t,this.row=e._row,this.column=e._column,this.cellAnchorRow=o,this.cellAnchorColumn=n,this._cellIndex=e._cellIndex,this._rowIndex=e._rowIndex,this._table=e._table}get isAnchor(){return this.row===this.cellAnchorRow&&this.column===this.cellAnchorColumn}get cellWidth(){return parseInt(this.cell.getAttribute("colspan")||1)}get cellHeight(){return parseInt(this.cell.getAttribute("rowspan")||1)}get rowIndex(){return this._rowIndex}getPositionBefore(){return this._table.root.document.model.createPositionAt(this._table.getChild(this.row),this._cellIndex)}}function m(e={}){return t=>t.on("insert:table",(t,o,n)=>{const r=o.item;if(!n.consumable.consume(r,"insert"))return;n.consumable.consume(r,"attribute:headingRows:table"),n.consumable.consume(r,"attribute:headingColumns:table");const l=e&&e.asWidget,s=n.writer.createContainerElement("figure",{class:"table"}),a=n.writer.createContainerElement("table");let c;var d,u;n.writer.insert(n.writer.createPositionAt(s,0),a),l&&(d=s,(u=n.writer).setCustomProperty("table",!0,d),c=Object(i.toWidget)(d,u,{hasSelectionHandle:!0}));const b=new h(r),m={headingRows:r.getAttribute("headingRows")||0,headingColumns:r.getAttribute("headingColumns")||0},g=new Map;for(const t of b){const{row:o,cell:i}=t,l=r.getChild(o),s=g.get(o)||_(a,l,o,m,n);g.set(o,s),n.consumable.consume(i,"insert");w(t,m,n.writer.createPositionAt(s,"end"),n,e)}for(const e of r.getChildren()){const t=e.index;e.is("element","tableRow")&&!g.has(t)&&g.set(t,_(a,e,t,m,n))}const p=n.mapper.toViewPosition(o.range.start);n.mapper.bindElements(r,l?c:s),n.writer.insert(p,l?c:s)})}function g(e,t){const{writer:o}=t;if(e.parent.is("element","tableCell"))return p(e)?o.createContainerElement("span",{class:"ck-table-bogus-paragraph"}):o.createContainerElement("p")}function p(e){return 1===e.parent.childCount&&!y(e)}function f(e,t,o){const{cell:n}=e,r=k(e,t),l=o.mapper.toViewElement(n);l&&l.name!==r&&function(e,t,o){const n=o.writer,r=o.mapper.toViewElement(e),l=n.createEditableElement(t,r.getAttributes()),s=Object(i.toWidgetEditable)(l,n);n.insert(n.createPositionAfter(r),s),n.move(n.createRangeIn(r),n.createPositionAt(s,0)),n.remove(n.createRangeOn(r)),o.mapper.unbindViewElement(r),o.mapper.bindElements(e,s)}(n,r,o)}function w(e,t,o,n,r){const l=r&&r.asWidget,s=k(e,t),a=l?Object(i.toWidgetEditable)(n.writer.createEditableElement(s),n.writer):n.writer.createContainerElement(s),c=e.cell,d=c.getChild(0),u=1===c.childCount&&"paragraph"===d.name;if(n.writer.insert(o,a),n.mapper.bindElements(c,a),!l&&u&&!y(d)){const e=c.getChild(0);n.consumable.consume(e,"insert"),n.mapper.bindElements(e,a)}}function _(e,t,o,n,i){i.consumable.consume(t,"insert");const r=t.isEmpty?i.writer.createEmptyElement("tr"):i.writer.createContainerElement("tr");i.mapper.bindElements(t,r);const l=n.headingRows,s=function(e,t,o){const n=v(e,t);return n||function(e,t,o){const n=o.writer.createContainerElement(e),i=o.writer.createPositionAt(t,"tbody"==e?"end":0);return o.writer.insert(i,n),n}(e,t,o)}(function(e,t){return e<t.headingRows?"thead":"tbody"}(o,n),e,i),a=l>0&&o>=l?o-l:o,c=i.writer.createPositionAt(s,a);return i.writer.insert(c,r),r}function k(e,t){const{row:o,column:n}=e,{headingColumns:i,headingRows:r}=t;if(r&&r>o)return"th";return i&&i>n?"th":"td"}function v(e,t){for(const o of t.getChildren())if(o.name==e)return o}function C(e,t,o){const n=v(e,t);n&&0===n.childCount&&o.writer.remove(o.writer.createRangeOn(n))}function y(e){return!![...e.getAttributeKeys()].length}class T extends n.Command{refresh(){const e=this.editor.model,t=e.document.selection,o=e.schema;this.isEnabled=function(e,t){const o=e.getFirstPosition().parent,n=o===o.root?o:o.parent;return t.checkChild(n,"table")}(t,o)}execute(e={}){const t=this.editor.model,o=t.document.selection,n=this.editor.plugins.get("TableUtils"),r=this.editor.config.get("table"),l=Object(i.findOptimalInsertionRange)(o,t),s=r.defaultHeadings.rows,a=r.defaultHeadings.columns;void 0===e.headingRows&&s&&(e.headingRows=s),void 0===e.headingColumns&&a&&(e.headingColumns=a),t.change(o=>{const i=n.createTable(o,e);t.insertContent(i,l),o.setSelection(o.createPositionAt(i.getNodeByPath([0,0,0]),0))})}}function x(e){const t=[];for(const o of P(e.getRanges())){const e=o.getContainedElement();e&&e.is("element","tableCell")&&t.push(e)}return t}function A(e){const t=[];for(const o of e.getRanges()){const e=o.start.findAncestor("tableCell");e&&t.push(e)}return t}function V(e){const t=x(e);return t.length?t:A(e)}function S(e){return E(e.map(e=>e.parent.index))}function R(e){const t=e[0].findAncestor("table");return E([...new h(t)].filter(t=>e.includes(t.cell)).map(e=>e.column))}function I(e,t){if(e.length<2||!function(e){const t=e[0].findAncestor("table"),o=S(e),n=parseInt(t.getAttribute("headingRows")||0);if(!O(o,n))return!1;const i=parseInt(t.getAttribute("headingColumns")||0);return O(R(e),i)}(e))return!1;const o=new Set,n=new Set;let i=0;for(const r of e){const{row:e,column:l}=t.getCellLocation(r),s=parseInt(r.getAttribute("rowspan")||1),a=parseInt(r.getAttribute("colspan")||1);o.add(e),n.add(l),s>1&&o.add(e+s-1),a>1&&n.add(l+a-1),i+=s*a}return function(e,t){const o=Array.from(e.values()),n=Array.from(t.values()),i=Math.max(...o),r=Math.min(...o),l=Math.max(...n),s=Math.min(...n);return(i-r+1)*(l-s+1)}(o,n)==i}function P(e){return Array.from(e).sort(B)}function E(e){const t=e.sort((e,t)=>e-t);return{first:t[0],last:t[t.length-1]}}function B(e,t){const o=e.start,n=t.start;return o.isBefore(n)?-1:1}function O({first:e,last:t},o){return e<o===t<o}class L extends n.Command{constructor(e,t={}){super(e),this.order=t.order||"below"}refresh(){const e=!!V(this.editor.model.document.selection).length;this.isEnabled=e}execute(){const e=this.editor,t=e.model.document.selection,o=e.plugins.get("TableUtils"),n="above"===this.order,i=V(t),r=S(i),l=n?r.first:r.last,s=i[0].findAncestor("table");o.insertRows(s,{at:n?l:l+1,copyStructureFromAbove:!n})}}class N extends n.Command{constructor(e,t={}){super(e),this.order=t.order||"right"}refresh(){const e=!!V(this.editor.model.document.selection).length;this.isEnabled=e}execute(){const e=this.editor,t=e.model.document.selection,o=e.plugins.get("TableUtils"),n="left"===this.order,i=V(t),r=R(i),l=n?r.first:r.last,s=i[0].findAncestor("table");o.insertColumns(s,{columns:1,at:n?l:l+1})}}class z extends n.Command{constructor(e,t={}){super(e),this.direction=t.direction||"horizontally"}refresh(){const e=V(this.editor.model.document.selection);this.isEnabled=1===e.length}execute(){const e=V(this.editor.model.document.selection)[0],t="horizontally"===this.direction,o=this.editor.plugins.get("TableUtils");t?o.splitCellHorizontally(e,2):o.splitCellVertically(e,2)}}function M(e,t,o){const{startRow:n,startColumn:i,endRow:s,endColumn:a}=t,c=o.createElement("table"),d=s-n+1;for(let e=0;e<d;e++)o.insertElement("tableRow",c,"end");const u=[...new h(e,{startRow:n,endRow:s,startColumn:i,endColumn:a,includeAllSlots:!0})];for(const{row:e,column:t,cell:r,isAnchor:d,cellAnchorRow:h,cellAnchorColumn:b}of u){const u=e-n,m=c.getChild(u);if(d){const n=o.cloneElement(r);o.append(n,m),j(n,e,t,s,a,o)}else(h<n||b<i)&&l(o,o.createPositionAt(m,"end"))}return function(e,t,o,n,i){const l=parseInt(t.getAttribute("headingRows")||0);if(l>0){r("headingRows",l-o,e,i,0)}const s=parseInt(t.getAttribute("headingColumns")||0);if(s>0){r("headingColumns",s-n,e,i,0)}}(c,e,n,i,o),c}function F(e,t,o=0){const n=[],i=new h(e,{startRow:o,endRow:t-1});for(const e of i){const{row:o,cellHeight:i}=e,r=o+i-1;o<t&&t<=r&&n.push(e)}return n}function H(e,t,o){const n=e.parent,i=n.parent,s=n.index,a=t-s,c={},d=parseInt(e.getAttribute("rowspan"))-a;d>1&&(c.rowspan=d);const u=parseInt(e.getAttribute("colspan")||1);u>1&&(c.colspan=u);const b=s+a,m=[...new h(i,{startRow:s,endRow:b,includeAllSlots:!0})];let g,p=null;for(const t of m){const{row:n,column:i,cell:r}=t;r===e&&void 0===g&&(g=i),void 0!==g&&g===i&&n===b&&(p=l(o,t.getPositionBefore(),c))}return r("rowspan",a,e,o),p}function D(e,t){const o=[],n=new h(e);for(const e of n){const{column:n,cellWidth:i}=e,r=n+i-1;n<t&&t<=r&&o.push(e)}return o}function W(e,t,o,n){const i=o-t,s={},a=parseInt(e.getAttribute("colspan"))-i;a>1&&(s.colspan=a);const c=parseInt(e.getAttribute("rowspan")||1);c>1&&(s.rowspan=c);const d=l(n,n.createPositionAfter(e),s);return r("colspan",i,e,n),d}function j(e,t,o,n,i,l){const s=parseInt(e.getAttribute("colspan")||1),a=parseInt(e.getAttribute("rowspan")||1);if(o+s-1>i){r("colspan",i-o+1,e,l,1)}if(t+a-1>n){r("rowspan",n-t+1,e,l,1)}}function U(e,t){const o=t.getColumns(e),n=new Array(o).fill(0);for(const{column:t}of new h(e))n[t]++;const i=n.reduce((e,t,o)=>t?e:[...e,o],[]);if(i.length>0){const o=i[i.length-1];return t.removeColumns(e,{at:o}),!0}return!1}function K(e,t){const o=[],n=t.getRows(e);for(let t=0;t<n;t++){e.getChild(t).isEmpty&&o.push(t)}if(o.length>0){const n=o[o.length-1];return t.removeRows(e,{at:n}),!0}return!1}function $(e,t){U(e,t)||K(e,t)}function q(e,t){const o=Array.from(new h(e,{startColumn:t.firstColumn,endColumn:t.lastColumn,row:t.lastRow}));if(o.every(({cellHeight:e})=>1===e))return t.lastRow;const n=o[0].cellHeight-1;return t.lastRow+n}function G(e,t){const o=Array.from(new h(e,{startRow:t.firstRow,endRow:t.lastRow,column:t.lastColumn}));if(o.every(({cellWidth:e})=>1===e))return t.lastColumn;const n=o[0].cellWidth-1;return t.lastColumn+n}class J extends n.Command{constructor(e,t){super(e),this.direction=t.direction,this.isHorizontal="right"==this.direction||"left"==this.direction}refresh(){const e=this._getMergeableCell();this.value=e,this.isEnabled=!!e}execute(){const e=this.editor.model,t=A(e.document.selection)[0],o=this.value,n=this.direction;e.change(e=>{const i="right"==n||"down"==n,r=i?t:o,l=i?o:t,s=l.parent;!function(e,t,o){X(e)||(X(t)&&o.remove(o.createRangeIn(t)),o.move(o.createRangeIn(e),o.createPositionAt(t,"end")));o.remove(e)}(l,r,e);const a=this.isHorizontal?"colspan":"rowspan",c=parseInt(t.getAttribute(a)||1),d=parseInt(o.getAttribute(a)||1);e.setAttribute(a,c+d,r),e.setSelection(e.createRangeIn(r));const u=this.editor.plugins.get("TableUtils");$(s.findAncestor("table"),u)})}_getMergeableCell(){const e=A(this.editor.model.document.selection)[0];if(!e)return;const t=this.editor.plugins.get("TableUtils"),o=this.isHorizontal?function(e,t,o){const n=e.parent.parent,i="right"==t?e.nextSibling:e.previousSibling,r=(n.getAttribute("headingColumns")||0)>0;if(!i)return;const l="right"==t?e:i,a="right"==t?i:e,{column:c}=o.getCellLocation(l),{column:d}=o.getCellLocation(a),u=parseInt(l.getAttribute("colspan")||1),h=s(o,l),b=s(o,a);if(r&&h!=b)return;return c+u===d?i:void 0}(e,this.direction,t):function(e,t,o){const n=e.parent,i=n.parent,r=i.getChildIndex(n);if("down"==t&&r===o.getRows(i)-1||"up"==t&&0===r)return;const l=parseInt(e.getAttribute("rowspan")||1),s=i.getAttribute("headingRows")||0,a="down"==t&&r+l===s,c="up"==t&&r===s;if(s&&(a||c))return;const d=parseInt(e.getAttribute("rowspan")||1),u="down"==t?r+d:r,b=[...new h(i,{endRow:u})],m=b.find(t=>t.cell===e).column,g=b.find(({row:e,cellHeight:o,column:n})=>n===m&&("down"==t?e===u:u===e+o));return g&&g.cell}(e,this.direction,t);if(!o)return;const n=this.isHorizontal?"rowspan":"colspan",i=parseInt(e.getAttribute(n)||1);return parseInt(o.getAttribute(n)||1)===i?o:void 0}}function X(e){return 1==e.childCount&&e.getChild(0).is("element","paragraph")&&e.getChild(0).isEmpty}class Y extends n.Command{refresh(){const e=V(this.editor.model.document.selection),t=e[0];if(t){const o=t.findAncestor("table"),n=this.editor.plugins.get("TableUtils").getRows(o)-1,i=S(e),r=0===i.first&&i.last===n;this.isEnabled=!r}else this.isEnabled=!1}execute(){const e=this.editor.model,t=this.editor.plugins.get("TableUtils"),o=V(e.document.selection),n=S(o),i=o[0],r=i.findAncestor("table"),l=t.getCellLocation(i).column;e.change(e=>{const o=n.last-n.first+1;t.removeRows(r,{at:n.first,rows:o});const i=function(e,t,o,n){const i=e.getChild(Math.min(t,n-1));let r=i.getChild(0),l=0;for(const e of i.getChildren()){if(l>o)return r;r=e,l+=parseInt(e.getAttribute("colspan")||1)}return r}(r,n.first,l,t.getRows(r));e.setSelection(e.createPositionAt(i,0))})}}class Q extends n.Command{refresh(){const e=V(this.editor.model.document.selection),t=e[0];if(t){const o=t.findAncestor("table"),n=this.editor.plugins.get("TableUtils").getColumns(o),{first:i,last:r}=R(e);this.isEnabled=r-i<n-1}else this.isEnabled=!1}execute(){const[e,t]=function(e){const t=V(e),o=t[0],n=t.pop(),i=[o,n];return o.isBefore(n)?i:i.reverse()}(this.editor.model.document.selection),o=e.parent.parent,n=[...new h(o)],i={first:n.find(t=>t.cell===e).column,last:n.find(e=>e.cell===t).column},r=function(e,t,o,n){return parseInt(o.getAttribute("colspan")||1)>1?o:t.previousSibling||o.nextSibling?o.nextSibling||t.previousSibling:n.first?e.reverse().find(({column:e})=>e<n.first).cell:e.reverse().find(({column:e})=>e>n.last).cell}(n,e,t,i);this.editor.model.change(e=>{const t=i.last-i.first+1;this.editor.plugins.get("TableUtils").removeColumns(o,{at:i.first,columns:t}),e.setSelection(e.createPositionAt(r,0))})}}class Z extends n.Command{refresh(){const e=V(this.editor.model.document.selection),t=e.length>0;this.isEnabled=t,this.value=t&&e.every(e=>this._isInHeading(e,e.parent.parent))}execute(e={}){if(e.forceValue===this.value)return;const t=this.editor.model,o=V(t.document.selection),n=o[0].findAncestor("table"),{first:i,last:l}=S(o),s=this.value?i:l+1,a=n.getAttribute("headingRows")||0;t.change(e=>{if(s){const t=F(n,s,s>a?a:0);for(const{cell:o}of t)H(o,s,e)}r("headingRows",s,n,e,0)})}_isInHeading(e,t){const o=parseInt(t.getAttribute("headingRows")||0);return!!o&&e.parent.index<o}}class ee extends n.Command{refresh(){const e=V(this.editor.model.document.selection),t=this.editor.plugins.get("TableUtils"),o=e.length>0;this.isEnabled=o,this.value=o&&e.every(e=>s(t,e))}execute(e={}){if(e.forceValue===this.value)return;const t=this.editor.model,o=V(t.document.selection),n=o[0].findAncestor("table"),{first:i,last:l}=R(o),s=this.value?i:l+1;t.change(e=>{if(s){const t=D(n,s);for(const{cell:o,column:n}of t)W(o,n,s,e)}r("headingColumns",s,n,e,0)})}}class te extends n.Plugin{static get pluginName(){return"TableUtils"}init(){this.decorate("insertColumns"),this.decorate("insertRows")}getCellLocation(e){const t=e.parent,o=t.parent,n=o.getChildIndex(t),i=new h(o,{row:n});for(const{cell:t,row:o,column:n}of i)if(t===e)return{row:o,column:n}}createTable(e,t){const o=e.createElement("table"),n=parseInt(t.rows)||2,i=parseInt(t.columns)||2;return oe(e,o,0,n,i),t.headingRows&&r("headingRows",Math.min(t.headingRows,n),o,e,0),t.headingColumns&&r("headingColumns",Math.min(t.headingColumns,i),o,e,0),o}insertRows(e,t={}){const o=this.editor.model,n=t.at||0,i=t.rows||1,s=void 0!==t.copyStructureFromAbove,c=t.copyStructureFromAbove?n-1:n,d=this.getRows(e),u=this.getColumns(e);if(n>d)throw new a.CKEditorError("tableutils-insertrows-insert-out-of-range",this,{options:t});o.change(t=>{const o=e.getAttribute("headingRows")||0;if(o>n&&r("headingRows",o+i,e,t,0),!s&&(0===n||n===d))return void oe(t,e,n,i,u);const a=s?Math.max(n,c):n,b=new h(e,{endRow:a}),m=new Array(u).fill(1);for(const{row:e,column:o,cellHeight:r,cellWidth:l,cell:a}of b){const d=e+r-1,u=e<=c&&c<=d;e<n&&n<=d?(t.setAttribute("rowspan",r+i,a),m[o]=-l):s&&u&&(m[o]=l)}for(let o=0;o<i;o++){const o=t.createElement("tableRow");t.insert(o,e,n);for(let e=0;e<m.length;e++){const n=m[e],i=t.createPositionAt(o,"end");n>0&&l(t,i,n>1?{colspan:n}:null),e+=Math.abs(n)-1}}})}insertColumns(e,t={}){const o=this.editor.model,n=t.at||0,i=t.columns||1;o.change(t=>{const o=e.getAttribute("headingColumns");n<o&&t.setAttribute("headingColumns",o+i,e);const r=this.getColumns(e);if(0===n||r===n){for(const o of e.getChildren())o.is("element","tableRow")&&ne(i,t,t.createPositionAt(o,n?"end":0));return}const l=new h(e,{column:n,includeAllSlots:!0});for(const e of l){const{row:o,cell:r,cellAnchorColumn:s,cellAnchorRow:a,cellWidth:c,cellHeight:d}=e;if(s<n){t.setAttribute("colspan",c+i,r);const e=a+d-1;for(let t=o;t<=e;t++)l.skipRow(t)}else ne(i,t,e.getPositionBefore())}})}removeRows(e,t){const o=this.editor.model,n=t.rows||1,i=this.getRows(e),l=t.at,s=l+n-1;if(s>i-1)throw new a.CKEditorError("tableutils-removerows-row-index-out-of-range",this,{table:e,options:t});o.change(t=>{const{cellsToMove:o,cellsToTrim:n}=function(e,t,o){const n=new Map,i=[];for(const{row:r,column:l,cellHeight:s,cell:a}of new h(e,{endRow:o})){const e=r+s-1;if(r>=t&&r<=o&&e>o){const e=s-(o-r+1);n.set(l,{cell:a,rowspan:e})}if(r<t&&e>=t){let n;n=e>=o?o-t+1:e-t+1,i.push({cell:a,rowspan:s-n})}}return{cellsToMove:n,cellsToTrim:i}}(e,l,s);if(o.size){!function(e,t,o,n){const i=[...new h(e,{includeAllSlots:!0,row:t})],l=e.getChild(t);let s;for(const{column:e,cell:t,isAnchor:a}of i)if(o.has(e)){const{cell:t,rowspan:i}=o.get(e),a=s?n.createPositionAfter(s):n.createPositionAt(l,0);n.move(n.createRangeOn(t),a),r("rowspan",i,t,n),s=t}else a&&(s=t)}(e,s+1,o,t)}for(let o=s;o>=l;o--)t.remove(e.getChild(o));for(const{rowspan:e,cell:o}of n)r("rowspan",e,o,t);!function(e,t,o,n){const i=e.getAttribute("headingRows")||0;if(t<i){r("headingRows",o<i?i-(o-t+1):t,e,n,0)}}(e,l,s,t),U(e,this)||K(e,this)})}removeColumns(e,t){const o=this.editor.model,n=t.at,i=t.columns||1,l=t.at+i-1;o.change(t=>{!function(e,t,o){const n=e.getAttribute("headingColumns")||0;if(n&&t.first<n){const i=Math.min(n-1,t.last)-t.first+1;o.setAttribute("headingColumns",n-i,e)}}(e,{first:n,last:l},t);for(let o=l;o>=n;o--)for(const{cell:n,column:i,cellWidth:l}of[...new h(e)])i<=o&&l>1&&i+l>o?r("colspan",l-1,n,t):i===o&&t.remove(n);K(e,this)||U(e,this)})}splitCellVertically(e,t=2){const o=this.editor.model,n=e.parent.parent,i=parseInt(e.getAttribute("rowspan")||1),l=parseInt(e.getAttribute("colspan")||1);o.change(o=>{if(l>1){const{newCellsSpan:n,updatedSpan:s}=ie(l,t);r("colspan",s,e,o);const a={};n>1&&(a.colspan=n),i>1&&(a.rowspan=i);ne(l>t?t-1:l-1,o,o.createPositionAfter(e),a)}if(l<t){const s=t-l,a=[...new h(n)],{column:c}=a.find(({cell:t})=>t===e),d=a.filter(({cell:t,cellWidth:o,column:n})=>t!==e&&n===c||n<c&&n+o>c);for(const{cell:e,cellWidth:t}of d)o.setAttribute("colspan",t+s,e);const u={};i>1&&(u.rowspan=i),ne(s,o,o.createPositionAfter(e),u);const b=n.getAttribute("headingColumns")||0;b>c&&r("headingColumns",b+s,n,o)}})}splitCellHorizontally(e,t=2){const o=this.editor.model,n=e.parent,i=n.parent,l=i.getChildIndex(n),s=parseInt(e.getAttribute("rowspan")||1),a=parseInt(e.getAttribute("colspan")||1);o.change(o=>{if(s>1){const n=[...new h(i,{startRow:l,endRow:l+s-1,includeAllSlots:!0})],{newCellsSpan:c,updatedSpan:d}=ie(s,t);r("rowspan",d,e,o);const{column:u}=n.find(({cell:t})=>t===e),b={};c>1&&(b.rowspan=c),a>1&&(b.colspan=a);for(const e of n){const{column:t,row:n}=e,i=t===u,r=(n+l+d)%c==0;n>=l+d&&i&&r&&ne(1,o,e.getPositionBefore(),b)}}if(s<t){const n=t-s,c=[...new h(i,{startRow:0,endRow:l})];for(const{cell:t,cellHeight:i,row:r}of c)if(t!==e&&r+i>l){const e=i+n;o.setAttribute("rowspan",e,t)}const d={};a>1&&(d.colspan=a),oe(o,i,l+1,n,1,d);const u=i.getAttribute("headingRows")||0;u>l&&r("headingRows",u+n,i,o)}})}getColumns(e){return[...e.getChild(0).getChildren()].reduce((e,t)=>e+parseInt(t.getAttribute("colspan")||1),0)}getRows(e){return Array.from(e.getChildren()).reduce((e,t)=>t.is("element","tableRow")?e+1:e,0)}}function oe(e,t,o,n,i,r={}){for(let l=0;l<n;l++){const n=e.createElement("tableRow");e.insert(n,t,o),ne(i,e,e.createPositionAt(n,"end"),r)}}function ne(e,t,o,n={}){for(let i=0;i<e;i++)l(t,o,n)}function ie(e,t){if(e<t)return{newCellsSpan:1,updatedSpan:1};const o=Math.floor(e/t);return{newCellsSpan:o,updatedSpan:e-o*t+o}}class re extends n.Command{refresh(){const e=x(this.editor.model.document.selection);this.isEnabled=I(e,this.editor.plugins.get(te))}execute(){const e=this.editor.model,t=this.editor.plugins.get(te);e.change(o=>{const n=x(e.document.selection),i=n.shift(),{mergeWidth:l,mergeHeight:s}=function(e,t,o){let n=0,i=0;for(const e of t){const{row:t,column:r}=o.getCellLocation(e);n=ae(e,r,n,"colspan"),i=ae(e,t,i,"rowspan")}const{row:r,column:l}=o.getCellLocation(e);return{mergeWidth:n-l,mergeHeight:i-r}}(i,n,t);r("colspan",l,i,o),r("rowspan",s,i,o);for(const e of n)le(e,i,o);$(i.findAncestor("table"),t),o.setSelection(i,"in")})}}function le(e,t,o){se(e)||(se(t)&&o.remove(o.createRangeIn(t)),o.move(o.createRangeIn(e),o.createPositionAt(t,"end"))),o.remove(e)}function se(e){return 1==e.childCount&&e.getChild(0).is("element","paragraph")&&e.getChild(0).isEmpty}function ae(e,t,o,n){const i=parseInt(e.getAttribute(n)||1);return Math.max(o,t+i)}class ce extends n.Command{constructor(e){super(e),this.affectsData=!1}refresh(){const e=V(this.editor.model.document.selection);this.isEnabled=e.length>0}execute(){const e=this.editor.model,t=V(e.document.selection),o=S(t),n=t[0].findAncestor("table"),i=[];for(let t=o.first;t<=o.last;t++)for(const o of n.getChild(t).getChildren())i.push(e.createRangeOn(o));e.change(e=>{e.setSelection(i)})}}class de extends n.Command{constructor(e){super(e),this.affectsData=!1}refresh(){const e=V(this.editor.model.document.selection);this.isEnabled=e.length>0}execute(){const e=this.editor.model,t=V(e.document.selection),o=t[0],n=t.pop(),i=o.findAncestor("table"),r=this.editor.plugins.get("TableUtils"),l=r.getCellLocation(o),s=r.getCellLocation(n),a=Math.min(l.column,s.column),c=Math.max(l.column,s.column),d=[];for(const t of new h(i,{startColumn:a,endColumn:c}))d.push(e.createRangeOn(t.cell));e.change(e=>{e.setSelection(d)})}}function ue(e){e.document.registerPostFixer(t=>function(e,t){const o=t.document.differ.getChanges();let n=!1;const i=new Set;for(const t of o){let o;"table"==t.name&&"insert"==t.type&&(o=t.position.nodeAfter),"tableRow"!=t.name&&"tableCell"!=t.name||(o=t.position.findAncestor("table")),me(t)&&(o=t.range.start.findAncestor("table")),o&&!i.has(o)&&(n=he(o,e)||n,n=be(o,e)||n,i.add(o))}return n}(t,e))}function he(e,t){let o=!1;const n=function(e){const t=parseInt(e.getAttribute("headingRows")||0),o=Array.from(e.getChildren()).reduce((e,t)=>t.is("element","tableRow")?e+1:e,0),n=[];for(const{row:i,cell:r,cellHeight:l}of new h(e)){if(l<2)continue;const e=i<t?t:o;if(i+l>e){const t=e-i;n.push({cell:r,rowspan:t})}}return n}(e);if(n.length){o=!0;for(const e of n)r("rowspan",e.rowspan,e.cell,t,1)}return o}function be(e,t){let o=!1;const n=function(e){const t=new Array(e.childCount).fill(0);for(const{rowIndex:o}of new h(e,{includeAllSlots:!0}))t[o]++;return t}(e),i=[];for(const[t,o]of n.entries())!o&&e.getChild(t).is("element","tableRow")&&i.push(t);if(i.length){o=!0;for(const o of i.reverse())t.remove(e.getChild(o)),n.splice(o,1)}const r=n.filter((t,o)=>e.getChild(o).is("element","tableRow")),s=r[0];if(!r.every(e=>e===s)){const n=r.reduce((e,t)=>t>e?t:e,0);for(const[i,s]of r.entries()){const r=n-s;if(r){for(let o=0;o<r;o++)l(t,t.createPositionAt(e.getChild(i),"end"));o=!0}}}return o}function me(e){const t="attribute"===e.type,o=e.attributeKey;return t&&("headingRows"===o||"colspan"===o||"rowspan"===o)}function ge(e){e.document.registerPostFixer(t=>function(e,t){const o=t.document.differ.getChanges();let n=!1;for(const t of o)"insert"==t.type&&"table"==t.name&&(n=pe(t.position.nodeAfter,e)||n),"insert"==t.type&&"tableRow"==t.name&&(n=fe(t.position.nodeAfter,e)||n),"insert"==t.type&&"tableCell"==t.name&&(n=we(t.position.nodeAfter,e)||n),_e(t)&&(n=we(t.position.parent,e)||n);return n}(t,e))}function pe(e,t){let o=!1;for(const n of e.getChildren())n.is("element","tableRow")&&(o=fe(n,t)||o);return o}function fe(e,t){let o=!1;for(const n of e.getChildren())o=we(n,t)||o;return o}function we(e,t){if(0==e.childCount)return t.insertElement("paragraph",e),!0;const o=Array.from(e.getChildren()).filter(e=>e.is("$text"));for(const e of o)t.wrap(t.createRangeOn(e),"paragraph");return!!o.length}function _e(e){return!(!e.position||!e.position.parent.is("element","tableCell"))&&("insert"==e.type&&"$text"==e.name||"remove"==e.type)}function ke(e,t){e.document.registerPostFixer(()=>function(e,t){const o=new Set;for(const t of e.getChanges()){const e="attribute"==t.type?t.range.start.parent:t.position.parent;e.is("element","tableCell")&&o.add(e)}for(const n of o.values())for(const o of[...n.getChildren()].filter(e=>ve(e,t)))e.refreshItem(o);return!1}(e.document.differ,t))}function ve(e,t){if(!e.is("element","paragraph"))return!1;const o=t.toViewElement(e);return!!o&&p(e)!==o.is("element","span")}function Ce(e){e.document.registerPostFixer(()=>function(e){const t=e.document.differ,o=new Set;for(const e of t.getChanges())if("attribute"===e.type){const t=e.range.start.nodeAfter;t&&t.is("element","table")&&"headingRows"===e.attributeKey&&o.add(t)}else if("insert"===e.type||"remove"===e.type)if("tableRow"===e.name){const t=e.position.findAncestor("table"),n=t.getAttribute("headingRows")||0;e.position.offset<n&&o.add(t)}else if("tableCell"===e.name){const t=e.position.findAncestor("table"),n=t.getAttribute("headingColumns")||0;e.position.offset<n&&o.add(t)}if(o.size){for(const e of o.values())t.refreshItem(e);return!0}return!1}(e))}o(11);class ye extends n.Plugin{static get pluginName(){return"TableEditing"}init(){const e=this.editor,t=e.model,o=t.schema,n=e.conversion;o.register("table",{allowWhere:"$block",allowAttributes:["headingRows","headingColumns"],isObject:!0,isBlock:!0}),o.register("tableRow",{allowIn:"table",isLimit:!0}),o.register("tableCell",{allowIn:"tableRow",allowChildren:"$block",allowAttributes:["colspan","rowspan"],isLimit:!0,isSelectable:!0}),n.for("upcast").add(e=>{e.on("element:figure",(e,t,o)=>{if(!o.consumable.test(t.viewItem,{name:!0,classes:"table"}))return;const n=function(e){for(const t of e.getChildren())if(t.is("element","table"))return t}(t.viewItem);if(!n||!o.consumable.test(n,{name:!0}))return;const i=o.convertItem(n,t.modelCursor),r=Object(a.first)(i.modelRange.getItems());r&&(o.consumable.consume(t.viewItem,{name:!0,classes:"table"}),o.convertChildren(t.viewItem,o.writer.createPositionAt(r,"end")),o.updateConversionResult(r,t))})}),n.for("upcast").add(c()),n.for("editingDowncast").add(m({asWidget:!0})),n.for("dataDowncast").add(m()),n.for("upcast").elementToElement({model:"tableRow",view:"tr"}),n.for("upcast").add(e=>{e.on("element:tr",(e,t)=>{t.viewItem.isEmpty&&0==t.modelCursor.index&&e.stop()},{priority:"high"})}),n.for("editingDowncast").add(e=>e.on("insert:tableRow",(e,t,o)=>{const n=t.item;if(!o.consumable.consume(n,"insert"))return;const i=n.parent,r=function(e){for(const t of e.getChildren())if("table"===t.name)return t}(o.mapper.toViewElement(i)),l=i.getChildIndex(n),s=new h(i,{row:l}),a={headingRows:i.getAttribute("headingRows")||0,headingColumns:i.getAttribute("headingColumns")||0},c=new Map;for(const e of s){const t=c.get(l)||_(r,n,l,a,o);c.set(l,t),o.consumable.consume(e.cell,"insert"),w(e,a,o.writer.createPositionAt(t,"end"),o,{asWidget:!0})}})),n.for("editingDowncast").add(e=>e.on("remove:tableRow",(e,t,o)=>{e.stop();const n=o.writer,i=o.mapper,r=i.toViewPosition(t.position).getLastMatchingPosition(e=>!e.item.is("element","tr")).nodeAfter,l=r.parent.parent,s=n.createRangeOn(r),a=n.remove(s);for(const e of n.createRangeIn(a).getItems())i.unbindViewElement(e);C("thead",l,o),C("tbody",l,o)},{priority:"higher"})),n.for("upcast").elementToElement({model:"tableCell",view:"td"}),n.for("upcast").elementToElement({model:"tableCell",view:"th"}),n.for("upcast").add(d("td")),n.for("upcast").add(d("th")),n.for("editingDowncast").add(e=>e.on("insert:tableCell",(e,t,o)=>{const n=t.item;if(!o.consumable.consume(n,"insert"))return;const i=n.parent,r=i.parent,l=r.getChildIndex(i),s=new h(r,{row:l}),a={headingRows:r.getAttribute("headingRows")||0,headingColumns:r.getAttribute("headingColumns")||0};for(const e of s)if(e.cell===n){const t=o.mapper.toViewElement(i);return void w(e,a,o.writer.createPositionAt(t,i.getChildIndex(n)),o,{asWidget:!0})}})),n.for("editingDowncast").elementToElement({model:"paragraph",view:g,converterPriority:"high"}),n.for("downcast").attributeToAttribute({model:"colspan",view:"colspan"}),n.for("upcast").attributeToAttribute({model:{key:"colspan",value:Te("colspan")},view:"colspan"}),n.for("downcast").attributeToAttribute({model:"rowspan",view:"rowspan"}),n.for("upcast").attributeToAttribute({model:{key:"rowspan",value:Te("rowspan")},view:"rowspan"}),n.for("editingDowncast").add(e=>e.on("attribute:headingColumns:table",(e,t,o)=>{const n=t.item;if(!o.consumable.consume(t.item,e.name))return;const i={headingRows:n.getAttribute("headingRows")||0,headingColumns:n.getAttribute("headingColumns")||0},r=t.attributeOldValue,l=t.attributeNewValue,s=(r>l?r:l)-1;for(const e of new h(n,{endColumn:s}))f(e,i,o)})),e.data.mapper.on("modelToViewPosition",(e,t)=>{const o=t.modelPosition.parent,n=t.modelPosition.nodeBefore;if(!o.is("element","tableCell"))return;if(!n||!n.is("element","paragraph"))return;const i=t.mapper.toViewElement(n),r=t.mapper.toViewElement(o);i===r&&(t.viewPosition=t.mapper.findPositionIn(r,n.maxOffset))}),e.config.define("table.defaultHeadings.rows",0),e.config.define("table.defaultHeadings.columns",0),e.commands.add("insertTable",new T(e)),e.commands.add("insertTableRowAbove",new L(e,{order:"above"})),e.commands.add("insertTableRowBelow",new L(e,{order:"below"})),e.commands.add("insertTableColumnLeft",new N(e,{order:"left"})),e.commands.add("insertTableColumnRight",new N(e,{order:"right"})),e.commands.add("removeTableRow",new Y(e)),e.commands.add("removeTableColumn",new Q(e)),e.commands.add("splitTableCellVertically",new z(e,{direction:"vertically"})),e.commands.add("splitTableCellHorizontally",new z(e,{direction:"horizontally"})),e.commands.add("mergeTableCells",new re(e)),e.commands.add("mergeTableCellRight",new J(e,{direction:"right"})),e.commands.add("mergeTableCellLeft",new J(e,{direction:"left"})),e.commands.add("mergeTableCellDown",new J(e,{direction:"down"})),e.commands.add("mergeTableCellUp",new J(e,{direction:"up"})),e.commands.add("setTableColumnHeader",new ee(e)),e.commands.add("setTableRowHeader",new Z(e)),e.commands.add("selectTableRow",new ce(e)),e.commands.add("selectTableColumn",new de(e)),Ce(t),ue(t),ke(t,e.editing.mapper),ge(t)}static get requires(){return[te]}}function Te(e){return t=>{const o=parseInt(t.getAttribute(e));return Number.isNaN(o)||o<=0?null:o}}var xe=o(0);o(13);class Ae extends xe.View{constructor(e){super(e);const t=this.bindTemplate;this.items=this._createGridCollection(),this.set("rows",0),this.set("columns",0),this.bind("label").to(this,"columns",this,"rows",(e,t)=>`${t} × ${e}`),this.setTemplate({tag:"div",attributes:{class:["ck"]},children:[{tag:"div",attributes:{class:["ck-insert-table-dropdown__grid"]},on:{"mouseover@.ck-insert-table-dropdown-grid-box":t.to("boxover")},children:this.items},{tag:"div",attributes:{class:["ck-insert-table-dropdown__label"]},children:[{text:t.to("label")}]}],on:{mousedown:t.to(e=>{e.preventDefault()}),click:t.to(()=>{this.fire("execute")})}}),this.on("boxover",(e,t)=>{const{row:o,column:n}=t.target.dataset;this.set({rows:parseInt(o),columns:parseInt(n)})}),this.on("change:columns",()=>{this._highlightGridBoxes()}),this.on("change:rows",()=>{this._highlightGridBoxes()})}focus(){}focusLast(){}_highlightGridBoxes(){const e=this.rows,t=this.columns;this.items.map((o,n)=>{const i=Math.floor(n/10)<e&&n%10<t;o.set("isOn",i)})}_createGridCollection(){const e=[];for(let t=0;t<100;t++){const o=Math.floor(t/10),n=t%10;e.push(new Ve(this.locale,o+1,n+1))}return this.createCollection(e)}}class Ve extends xe.View{constructor(e,t,o){super(e);const n=this.bindTemplate;this.set("isOn",!1),this.setTemplate({tag:"div",attributes:{class:["ck-insert-table-dropdown-grid-box",n.if("isOn","ck-on")],"data-row":t,"data-column":o}})}}class Se extends n.Plugin{static get pluginName(){return"TableUI"}init(){const e=this.editor,t=this.editor.t,o="ltr"===e.locale.contentLanguageDirection;e.ui.componentFactory.add("insertTable",o=>{const n=e.commands.get("insertTable"),i=Object(xe.createDropdown)(o);let r;return i.bind("isEnabled").to(n),i.buttonView.set({icon:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M3 6v3h4V6H3zm0 4v3h4v-3H3zm0 4v3h4v-3H3zm5 3h4v-3H8v3zm5 0h4v-3h-4v3zm4-4v-3h-4v3h4zm0-4V6h-4v3h4zm1.5 8a1.5 1.5 0 0 1-1.5 1.5H3A1.5 1.5 0 0 1 1.5 17V4c.222-.863 1.068-1.5 2-1.5h13c.932 0 1.778.637 2 1.5v13zM12 13v-3H8v3h4zm0-4V6H8v3h4z"/></svg>',label:t("Insert table"),tooltip:!0}),i.on("change:isOpen",()=>{r||(r=new Ae(o),i.panelView.children.add(r),r.delegate("execute").to(i),i.buttonView.on("open",()=>{r.rows=0,r.columns=0}),i.on("execute",()=>{e.execute("insertTable",{rows:r.rows,columns:r.columns}),e.editing.view.focus()}))}),i}),e.ui.componentFactory.add("tableColumn",e=>{const n=[{type:"switchbutton",model:{commandName:"setTableColumnHeader",label:t("Header column"),bindIsOn:!0}},{type:"separator"},{type:"button",model:{commandName:o?"insertTableColumnLeft":"insertTableColumnRight",label:t("Insert column left")}},{type:"button",model:{commandName:o?"insertTableColumnRight":"insertTableColumnLeft",label:t("Insert column right")}},{type:"button",model:{commandName:"removeTableColumn",label:t("Delete column")}},{type:"button",model:{commandName:"selectTableColumn",label:t("Select column")}}];return this._prepareDropdown(t("Column"),'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M2.5 1h15A1.5 1.5 0 0 1 19 2.5v15a1.5 1.5 0 0 1-1.5 1.5h-15A1.5 1.5 0 0 1 1 17.5v-15A1.5 1.5 0 0 1 2.5 1zM2 2v16h16V2H2z" opacity=".6"/><path d="M18 7v1H2V7h16zm0 5v1H2v-1h16z" opacity=".6"/><path d="M14 1v18a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V1a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1zm-2 1H8v4h4V2zm0 6H8v4h4V8zm0 6H8v4h4v-4z"/></svg>',n,e)}),e.ui.componentFactory.add("tableRow",e=>{const o=[{type:"switchbutton",model:{commandName:"setTableRowHeader",label:t("Header row"),bindIsOn:!0}},{type:"separator"},{type:"button",model:{commandName:"insertTableRowAbove",label:t("Insert row above")}},{type:"button",model:{commandName:"insertTableRowBelow",label:t("Insert row below")}},{type:"button",model:{commandName:"removeTableRow",label:t("Delete row")}},{type:"button",model:{commandName:"selectTableRow",label:t("Select row")}}];return this._prepareDropdown(t("Row"),'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M2.5 1h15A1.5 1.5 0 0 1 19 2.5v15a1.5 1.5 0 0 1-1.5 1.5h-15A1.5 1.5 0 0 1 1 17.5v-15A1.5 1.5 0 0 1 2.5 1zM2 2v16h16V2H2z" opacity=".6"/><path d="M7 2h1v16H7V2zm5 0h1v16h-1V2z" opacity=".6"/><path d="M1 6h18a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1zm1 2v4h4V8H2zm6 0v4h4V8H8zm6 0v4h4V8h-4z"/></svg>',o,e)}),e.ui.componentFactory.add("mergeTableCells",e=>{const n=[{type:"button",model:{commandName:"mergeTableCellUp",label:t("Merge cell up")}},{type:"button",model:{commandName:o?"mergeTableCellRight":"mergeTableCellLeft",label:t("Merge cell right")}},{type:"button",model:{commandName:"mergeTableCellDown",label:t("Merge cell down")}},{type:"button",model:{commandName:o?"mergeTableCellLeft":"mergeTableCellRight",label:t("Merge cell left")}},{type:"separator"},{type:"button",model:{commandName:"splitTableCellVertically",label:t("Split cell vertically")}},{type:"button",model:{commandName:"splitTableCellHorizontally",label:t("Split cell horizontally")}}];return this._prepareMergeSplitButtonDropdown(t("Merge cells"),'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M2.5 1h15A1.5 1.5 0 0 1 19 2.5v15a1.5 1.5 0 0 1-1.5 1.5h-15A1.5 1.5 0 0 1 1 17.5v-15A1.5 1.5 0 0 1 2.5 1zM2 2v16h16V2H2z" opacity=".6"/><path d="M7 2h1v16H7V2zm5 0h1v7h-1V2zm6 5v1H2V7h16zM8 12v1H2v-1h6z" opacity=".6"/><path d="M7 7h12a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V8a1 1 0 0 1 1-1zm1 2v9h10V9H8z"/></svg>',n,e)})}_prepareDropdown(e,t,o,n){const i=this.editor,r=Object(xe.createDropdown)(n),l=this._fillDropdownWithListOptions(r,o);return r.buttonView.set({label:e,icon:t,tooltip:!0}),r.bind("isEnabled").toMany(l,"isEnabled",(...e)=>e.some(e=>e)),this.listenTo(r,"execute",e=>{i.execute(e.source.commandName),i.editing.view.focus()}),r}_prepareMergeSplitButtonDropdown(e,t,o,n){const i=this.editor,r=Object(xe.createDropdown)(n,xe.SplitButtonView),l=i.commands.get("mergeTableCells"),s=this._fillDropdownWithListOptions(r,o);return r.buttonView.set({label:e,icon:t,tooltip:!0,isEnabled:!0}),r.bind("isEnabled").toMany([l,...s],"isEnabled",(...e)=>e.some(e=>e)),this.listenTo(r.buttonView,"execute",()=>{i.execute("mergeTableCells"),i.editing.view.focus()}),this.listenTo(r,"execute",e=>{i.execute(e.source.commandName),i.editing.view.focus()}),r}_fillDropdownWithListOptions(e,t){const o=this.editor,n=[],i=new a.Collection;for(const e of t)Re(e,o,n,i);return Object(xe.addListToDropdown)(e,i,o.ui.componentFactory),n}}function Re(e,t,o,n){const i=e.model=new xe.Model(e.model),{commandName:r,bindIsOn:l}=e.model;if("button"===e.type||"switchbutton"===e.type){const e=t.commands.get(r);o.push(e),i.set({commandName:r}),i.bind("isEnabled").to(e),l&&i.bind("isOn").to(e,"value")}i.set({withText:!0}),n.add(e)}o(15);class Ie extends n.Plugin{static get pluginName(){return"TableSelection"}static get requires(){return[te]}init(){const e=this.editor.model;this.listenTo(e,"deleteContent",(e,t)=>this._handleDeleteContent(e,t),{priority:"high"}),this._defineSelectionConverter(),this._enablePluginDisabling()}getSelectedTableCells(){const e=x(this.editor.model.document.selection);return 0==e.length?null:e}getSelectionAsFragment(){const e=this.getSelectedTableCells();return e?this.editor.model.change(t=>{const o=t.createDocumentFragment(),n=this.editor.plugins.get("TableUtils"),{first:i,last:r}=R(e),{first:l,last:s}=S(e),a=e[0].findAncestor("table");let c=s,d=r;if(I(e,n)){const e={firstColumn:i,lastColumn:r,firstRow:l,lastRow:s};c=q(a,e),d=G(a,e)}const u=M(a,{startRow:l,startColumn:i,endRow:c,endColumn:d},t);return t.insert(u,o,0),o}):null}setCellSelection(e,t){const o=this._getCellsToSelect(e,t);this.editor.model.change(e=>{e.setSelection(o.cells.map(t=>e.createRangeOn(t)),{backward:o.backward})})}getFocusCell(){const e=[...this.editor.model.document.selection.getRanges()].pop().getContainedElement();return e&&e.is("element","tableCell")?e:null}getAnchorCell(){const e=this.editor.model.document.selection,t=Object(a.first)(e.getRanges()).getContainedElement();return t&&t.is("element","tableCell")?t:null}_defineSelectionConverter(){const e=this.editor,t=new Set;e.conversion.for("editingDowncast").add(e=>e.on("selection",(e,o,n)=>{const i=n.writer;!function(e){for(const o of t)e.removeClass("ck-editor__editable_selected",o);t.clear()}(i);const r=this.getSelectedTableCells();if(!r)return;for(const e of r){const o=n.mapper.toViewElement(e);i.addClass("ck-editor__editable_selected",o),t.add(o)}const l=n.mapper.toViewElement(r[r.length-1]);i.setSelection(l,0)},{priority:"lowest"}))}_enablePluginDisabling(){const e=this.editor;this.on("change:isEnabled",()=>{if(!this.isEnabled){const t=this.getSelectedTableCells();if(!t)return;e.model.change(o=>{const n=o.createPositionAt(t[0],0),i=e.model.schema.getNearestSelectionRange(n);o.setSelection(i)})}})}_handleDeleteContent(e,t){const[o,n]=t,i=this.editor.model,r=!n||"backward"==n.direction,l=x(o);l.length&&(e.stop(),i.change(e=>{const t=l[r?l.length-1:0];i.change(e=>{for(const t of l)i.deleteContent(e.createSelection(t,"in"))});const n=i.schema.getNearestSelectionRange(e.createPositionAt(t,0));o.is("documentSelection")?e.setSelection(n):o.setTo(n)}))}_getCellsToSelect(e,t){const o=this.editor.plugins.get("TableUtils"),n=o.getCellLocation(e),i=o.getCellLocation(t),r=Math.min(n.row,i.row),l=Math.max(n.row,i.row),s=Math.min(n.column,i.column),a=Math.max(n.column,i.column),c=new Array(l-r+1).fill(null).map(()=>[]),d={startRow:r,endRow:l,startColumn:s,endColumn:a};for(const{row:t,cell:o}of new h(e.findAncestor("table"),d))c[t-r].push(o);const u=i.row<n.row,b=i.column<n.column;return u&&c.reverse(),b&&c.forEach(e=>e.reverse()),{cells:c.flat(),backward:u||b}}}class Pe extends n.Plugin{static get pluginName(){return"TableClipboard"}static get requires(){return[Ie,te]}init(){const e=this.editor,t=e.editing.view.document;this.listenTo(t,"copy",(e,t)=>this._onCopyCut(e,t)),this.listenTo(t,"cut",(e,t)=>this._onCopyCut(e,t)),this.listenTo(e.model,"insertContent",(e,t)=>this._onInsertContent(e,...t),{priority:"high"}),this.decorate("_replaceTableSlotCell")}_onCopyCut(e,t){const o=this.editor.plugins.get(Ie);if(!o.getSelectedTableCells())return;if("cut"==e.name&&this.editor.isReadOnly)return;t.preventDefault(),e.stop();const n=this.editor.data,i=this.editor.editing.view.document,r=n.toView(o.getSelectionAsFragment());i.fire("clipboardOutput",{dataTransfer:t.dataTransfer,content:r,method:e.name})}_onInsertContent(e,t,o){if(o&&!o.is("documentSelection"))return;const n=this.editor.model,i=this.editor.plugins.get(te);let r=function(e,t){if(!e.is("documentFragment")&&!e.is("element"))return null;if(e.is("element","table"))return e;if(1==e.childCount&&e.getChild(0).is("element","table"))return e.getChild(0);const o=t.createRangeIn(e);for(const e of o.getItems())if(e.is("element","table")){const n=t.createRange(o.start,t.createPositionBefore(e));if(t.hasContent(n,{ignoreWhitespaces:!0}))return null;const i=t.createRange(t.createPositionAfter(e),o.end);return t.hasContent(i,{ignoreWhitespaces:!0})?null:e}return null}(t,n);if(!r)return;const l=V(n.document.selection);l.length?(e.stop(),n.change(e=>{const t={width:i.getColumns(r),height:i.getRows(r)},o=function(e,t,o,n){const i=e[0].findAncestor("table"),r=R(e),l=S(e),s={firstColumn:r.first,lastColumn:r.last,firstRow:l.first,lastRow:l.last},a=1===e.length;a&&(s.lastRow+=t.height-1,s.lastColumn+=t.width-1,function(e,t,o,n){const i=n.getColumns(e),r=n.getRows(e);o>i&&n.insertColumns(e,{at:i,columns:o-i});t>r&&n.insertRows(e,{at:r,rows:t-r})}(i,s.lastRow+1,s.lastColumn+1,n));a||!I(e,n)?function(e,t,o){const{firstRow:n,lastRow:i,firstColumn:r,lastColumn:l}=t,s={first:n,last:i},a={first:r,last:l};Be(e,r,s,o),Be(e,l+1,s,o),Ee(e,n,a,o),Ee(e,i+1,a,o,n)}(i,s,o):(s.lastRow=q(i,s),s.lastColumn=G(i,s));return s}(l,t,e,i),n=o.lastRow-o.firstRow+1,s=o.lastColumn-o.firstColumn+1,a={startRow:0,startColumn:0,endRow:Math.min(n,t.height)-1,endColumn:Math.min(s,t.width)-1};r=M(r,a,e);const c=l[0].findAncestor("table"),d=this._replaceSelectedCellsWithPasted(r,t,c,o,e);if(this.editor.plugins.get("TableSelection").isEnabled){const t=P(d.map(t=>e.createRangeOn(t)));e.setSelection(t)}else e.setSelection(d[0],0)})):$(r,i)}_replaceSelectedCellsWithPasted(e,t,o,n,i){const{width:r,height:l}=t,s=function(e,t,o){const n=new Array(o).fill(null).map(()=>new Array(t).fill(null));for(const{column:t,row:o,cell:i}of new h(e))n[o][t]=i;return n}(e,r,l),a=[...new h(o,{startRow:n.firstRow,endRow:n.lastRow,startColumn:n.firstColumn,endColumn:n.lastColumn,includeAllSlots:!0})],c=[];let d;for(const e of a){const{row:t,column:o}=e;o===n.firstColumn&&(d=e.getPositionBefore());const a=t-n.firstRow,u=o-n.firstColumn,h=s[a%l][u%r],b=h?i.cloneElement(h):null,m=this._replaceTableSlotCell(e,b,d,i);m&&(j(m,t,o,n.lastRow,n.lastColumn,i),c.push(m),d=i.createPositionAfter(m))}const u=parseInt(o.getAttribute("headingRows")||0),b=parseInt(o.getAttribute("headingColumns")||0),m=n.firstRow<u&&u<=n.lastRow,g=n.firstColumn<b&&b<=n.lastColumn;if(m){const e=Ee(o,u,{first:n.firstColumn,last:n.lastColumn},i,n.firstRow);c.push(...e)}if(g){const e=Be(o,b,{first:n.firstRow,last:n.lastRow},i);c.push(...e)}return c}_replaceTableSlotCell(e,t,o,n){const{cell:i,isAnchor:r}=e;return r&&n.remove(i),t?(n.insert(t,o),t):null}}function Ee(e,t,o,n,i=0){if(t<1)return;return F(e,t,i).filter(({column:e,cellWidth:t})=>Oe(e,t,o)).map(({cell:e})=>H(e,t,n))}function Be(e,t,o,n){if(t<1)return;return D(e,t).filter(({row:e,cellHeight:t})=>Oe(e,t,o)).map(({cell:e,column:o})=>W(e,o,t,n))}function Oe(e,t,o){const n=e+t-1,{first:i,last:r}=o;return e>=i&&e<=r||e<i&&n>=i}class Le extends n.Plugin{static get pluginName(){return"TableKeyboard"}static get requires(){return[Ie]}init(){const e=this.editor.editing.view.document;this.editor.keystrokes.set("Tab",(...e)=>this._handleTabOnSelectedTable(...e),{priority:"low"}),this.editor.keystrokes.set("Tab",this._getTabHandler(!0),{priority:"low"}),this.editor.keystrokes.set("Shift+Tab",this._getTabHandler(!1),{priority:"low"}),this.listenTo(e,"arrowKey",(...e)=>this._onArrowKey(...e),{context:"table"})}_handleTabOnSelectedTable(e,t){const o=this.editor,n=o.model.document.selection.getSelectedElement();n&&n.is("element","table")&&(t(),o.model.change(e=>{e.setSelection(e.createRangeIn(n.getChild(0).getChild(0)))}))}_getTabHandler(e){const t=this.editor;return(o,n)=>{let i=A(t.model.document.selection)[0];if(i||(i=this.editor.plugins.get("TableSelection").getFocusCell()),!i)return;n();const r=i.parent,l=r.parent,s=l.getChildIndex(r),a=r.getChildIndex(i),c=0===a;if(!e&&c&&0===s)return void t.model.change(e=>{e.setSelection(e.createRangeOn(l))});const d=this.editor.plugins.get("TableUtils"),u=a===r.childCount-1,h=s===d.getRows(l)-1;if(e&&h&&u&&(t.execute("insertTableRowBelow"),s===d.getRows(l)-1))return void t.model.change(e=>{e.setSelection(e.createRangeOn(l))});let b;if(e&&u){const e=l.getChild(s+1);b=e.getChild(0)}else if(!e&&c){const e=l.getChild(s-1);b=e.getChild(e.childCount-1)}else b=r.getChild(a+(e?1:-1));t.model.change(e=>{e.setSelection(e.createRangeIn(b))})}}_onArrowKey(e,t){const o=this.editor,n=t.keyCode,i=Object(a.getLocalizedArrowKeyCodeDirection)(n,o.locale.contentLanguageDirection);this._handleArrowKeys(i,t.shiftKey)&&(t.preventDefault(),t.stopPropagation(),e.stop())}_handleArrowKeys(e,t){const o=this.editor.model,n=o.document.selection,i=["right","down"].includes(e),r=x(n);if(r.length){let o;return o=t?this.editor.plugins.get("TableSelection").getFocusCell():i?r[r.length-1]:r[0],this._navigateFromCellInDirection(o,e,t),!0}const l=n.focus.findAncestor("tableCell");if(!l)return!1;if(!n.isCollapsed)if(t){if(n.isBackward==i&&!n.containsEntireContent(l))return!1}else{const e=n.getSelectedElement();if(!e||!o.schema.isObject(e))return!1}return!!this._isSelectionAtCellEdge(n,l,i)&&(this._navigateFromCellInDirection(l,e,t),!0)}_isSelectionAtCellEdge(e,t,o){const n=this.editor.model,i=this.editor.model.schema,r=o?e.getLastPosition():e.getFirstPosition();if(!i.getLimitElement(r).is("element","tableCell")){return n.createPositionAt(t,o?"end":0).isTouching(r)}const l=n.createSelection(r);return n.modifySelection(l,{direction:o?"forward":"backward"}),r.isEqual(l.focus)}_navigateFromCellInDirection(e,t,o=!1){const n=this.editor.model,i=e.findAncestor("table"),r=[...new h(i,{includeAllSlots:!0})],{row:l,column:s}=r[r.length-1],a=r.find(({cell:t})=>t==e);let{row:c,column:d}=a;switch(t){case"left":d--;break;case"up":c--;break;case"right":d+=a.cellWidth;break;case"down":c+=a.cellHeight}if(c<0||c>l||d<0&&c<=0||d>s&&c>=l)return void n.change(e=>{e.setSelection(e.createRangeOn(i))});d<0?(d=o?0:s,c--):d>s&&(d=o?s:0,c++);const u=r.find(e=>e.row==c&&e.column==d).cell,b=["right","down"].includes(t),m=this.editor.plugins.get("TableSelection");if(o&&m.isEnabled){const t=m.getAnchorCell()||e;m.setCellSelection(t,u)}else{const e=n.createPositionAt(u,b?0:"end");n.change(t=>{t.setSelection(e)})}}}var Ne=o(3);class ze extends Ne.DomEventObserver{constructor(e){super(e),this.domEventType=["mousemove","mouseleave"]}onDomEvent(e){this.fire(e.type,e)}}class Me extends n.Plugin{static get pluginName(){return"TableMouse"}static get requires(){return[Ie]}init(){this.editor.editing.view.addObserver(ze),this._enableShiftClickSelection(),this._enableMouseDragSelection()}_enableShiftClickSelection(){const e=this.editor;let t=!1;const o=e.plugins.get(Ie);this.listenTo(e.editing.view.document,"mousedown",(n,i)=>{if(!this.isEnabled||!o.isEnabled)return;if(!i.domEvent.shiftKey)return;const r=o.getAnchorCell()||A(e.model.document.selection)[0];if(!r)return;const l=this._getModelTableCellFromDomEvent(i);l&&Fe(r,l)&&(t=!0,o.setCellSelection(r,l),i.preventDefault())}),this.listenTo(e.editing.view.document,"mouseup",()=>{t=!1}),this.listenTo(e.editing.view.document,"selectionChange",e=>{t&&e.stop()},{priority:"highest"})}_enableMouseDragSelection(){const e=this.editor;let t,o,n=!1,i=!1;const r=e.plugins.get(Ie);this.listenTo(e.editing.view.document,"mousedown",(e,o)=>{this.isEnabled&&r.isEnabled&&(o.domEvent.shiftKey||o.domEvent.ctrlKey||o.domEvent.altKey||(t=this._getModelTableCellFromDomEvent(o)))}),this.listenTo(e.editing.view.document,"mousemove",(e,l)=>{if(!l.domEvent.buttons)return;if(!t)return;const s=this._getModelTableCellFromDomEvent(l);s&&Fe(t,s)&&(o=s,n||o==t||(n=!0)),n&&(i=!0,r.setCellSelection(t,o),l.preventDefault())}),this.listenTo(e.editing.view.document,"mouseup",()=>{n=!1,i=!1,t=null,o=null}),this.listenTo(e.editing.view.document,"selectionChange",e=>{i&&e.stop()},{priority:"highest"})}_getModelTableCellFromDomEvent(e){const t=e.target,o=this.editor.editing.view.createPositionAt(t,0);return this.editor.editing.mapper.toModelPosition(o).parent.findAncestor("tableCell",{includeSelf:!0})}}function Fe(e,t){return e.parent.parent==t.parent.parent}o(17);class He extends n.Plugin{static get requires(){return[ye,Se,Ie,Me,Le,Pe,i.Widget]}static get pluginName(){return"Table"}}function De(e){const t=e.getSelectedElement();return t&&je(t)?t:null}function We(e){let t=e.getFirstPosition().parent;for(;t;){if(t.is("element")&&je(t))return t;t=t.parent}return null}function je(e){return!!e.getCustomProperty("table")&&Object(i.isWidget)(e)}class Ue extends n.Plugin{static get requires(){return[i.WidgetToolbarRepository]}static get pluginName(){return"TableToolbar"}afterInit(){const e=this.editor,t=e.t,o=e.plugins.get(i.WidgetToolbarRepository),n=e.config.get("table.contentToolbar"),r=e.config.get("table.tableToolbar");n&&o.register("tableContent",{ariaLabel:t("Table toolbar"),items:n,getRelatedElement:We}),r&&o.register("table",{ariaLabel:t("Table toolbar"),items:r,getRelatedElement:De})}}o(19);class Ke extends xe.View{constructor(e,t){super(e);const o=this.bindTemplate;this.set("value",""),this.set("id"),this.set("isReadOnly",!1),this.set("hasError",!1),this.set("isFocused",!1),this.set("isEmpty",!0),this.set("ariaDescribedById"),this.options=t,this._dropdownView=this._createDropdownView(),this._inputView=this._createInputTextView(),this._stillTyping=!1,this.setTemplate({tag:"div",attributes:{class:["ck","ck-input-color",o.if("hasError","ck-error")],id:o.to("id"),"aria-invalid":o.if("hasError",!0),"aria-describedby":o.to("ariaDescribedById")},children:[this._dropdownView,this._inputView]}),this.on("change:value",(e,t,o)=>this._setInputValue(o))}focus(){this._inputView.focus()}_createDropdownView(){const e=this.locale,t=e.t,o=this.bindTemplate,n=this._createColorGrid(e),i=Object(xe.createDropdown)(e),r=new xe.View,l=this._createRemoveColorButton();return r.setTemplate({tag:"span",attributes:{class:["ck","ck-input-color__button__preview"],style:{backgroundColor:o.to("value")}},children:[{tag:"span",attributes:{class:["ck","ck-input-color__button__preview__no-color-indicator",o.if("value","ck-hidden",e=>""!=e)]}}]}),i.buttonView.extendTemplate({attributes:{class:"ck-input-color__button"}}),i.buttonView.children.add(r),i.buttonView.tooltip=t("Color picker"),i.panelPosition="rtl"===e.uiLanguageDirection?"se":"sw",i.panelView.children.add(l),i.panelView.children.add(n),i.bind("isEnabled").to(this,"isReadOnly",e=>!e),i}_createInputTextView(){const e=this.locale,t=new xe.InputTextView(e);return t.extendTemplate({on:{blur:t.bindTemplate.to("blur")}}),t.value=this.value,t.bind("isReadOnly","hasError").to(this),this.bind("isFocused","isEmpty").to(t),t.on("input",()=>{const e=t.element.value,o=this.options.colorDefinitions.find(t=>e===t.label);this._stillTyping=!0,this.value=o&&o.color||e}),t.on("blur",()=>{this._stillTyping=!1,this._setInputValue(t.element.value)}),t.delegate("input").to(this),t}_createRemoveColorButton(){const e=this.locale,t=e.t,o=new xe.ButtonView(e),i=this.options.defaultColorValue||"",r=t(i?"Restore default":"Remove color");return o.class="ck-input-color__remove-color",o.withText=!0,o.icon=n.icons.eraser,o.label=r,o.on("execute",()=>{this.value=i,this._dropdownView.isOpen=!1,this.fire("input")}),o}_createColorGrid(e){const t=new xe.ColorGridView(e,{colorDefinitions:this.options.colorDefinitions,columns:this.options.columns});return t.on("execute",(e,t)=>{this.value=t.value,this._dropdownView.isOpen=!1,this.fire("input")}),t.bind("selectedColor").to(this,"value"),t}_setInputValue(e){if(!this._stillTyping){const t=$e(e),o=this.options.colorDefinitions.find(e=>t===$e(e.color));this._inputView.value=o?o.label:e||""}}}function $e(e){return e.replace(/([(,])\s+/g,"$1").replace(/^\s+|\s+(?=[),\s]|$)/g,"").replace(/,|\s/g," ")}const qe=e=>""===e;function Ge(e){return{none:e("None"),solid:e("Solid"),dotted:e("Dotted"),dashed:e("Dashed"),double:e("Double"),groove:e("Groove"),ridge:e("Ridge"),inset:e("Inset"),outset:e("Outset")}}function Je(e){return e('The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".')}function Xe(e){return e('The value is invalid. Try "10px" or "2em" or simply "2".')}function Ye(e){return e=e.trim(),qe(e)||Object(Ne.isColor)(e)}function Qe(e){return e=e.trim(),qe(e)||it(e)||Object(Ne.isLength)(e)||Object(Ne.isPercentage)(e)}function Ze(e){return e=e.trim(),qe(e)||it(e)||Object(Ne.isLength)(e)}function et(e,t){const o=new a.Collection,n=Ge(e.t);for(const i in n){const r={type:"button",model:new xe.Model({_borderStyleValue:i,label:n[i],withText:!0})};"none"===i?r.model.bind("isOn").to(e,"borderStyle",e=>"none"===t?!e:e===i):r.model.bind("isOn").to(e,"borderStyle",e=>e===i),o.add(r)}return o}function tt(e){const{view:t,icons:o,toolbar:n,labels:i,propertyName:r,nameToValue:l,defaultValue:s}=e;for(const e in i){const a=new xe.ButtonView(t.locale);a.set({label:i[e],icon:o[e],tooltip:i[e]});const c=l?l(e):e;a.bind("isOn").to(t,r,e=>{let t=e;return""===e&&s&&(t=s),c===t}),a.on("execute",()=>{t[r]=c}),n.items.add(a)}}const ot=[{color:"hsl(0, 0%, 0%)",label:"Black"},{color:"hsl(0, 0%, 30%)",label:"Dim grey"},{color:"hsl(0, 0%, 60%)",label:"Grey"},{color:"hsl(0, 0%, 90%)",label:"Light grey"},{color:"hsl(0, 0%, 100%)",label:"White",hasBorder:!0},{color:"hsl(0, 75%, 60%)",label:"Red"},{color:"hsl(30, 75%, 60%)",label:"Orange"},{color:"hsl(60, 75%, 60%)",label:"Yellow"},{color:"hsl(90, 75%, 60%)",label:"Light green"},{color:"hsl(120, 75%, 60%)",label:"Green"},{color:"hsl(150, 75%, 60%)",label:"Aquamarine"},{color:"hsl(180, 75%, 60%)",label:"Turquoise"},{color:"hsl(210, 75%, 60%)",label:"Light blue"},{color:"hsl(240, 75%, 60%)",label:"Blue"},{color:"hsl(270, 75%, 60%)",label:"Purple"}];function nt(e){return(t,o,n)=>{const i=new Ke(t.locale,{colorDefinitions:(r=e.colorConfig,r.map(e=>({color:e.model,label:e.label,options:{hasBorder:e.hasBorder}}))),columns:e.columns,defaultColorValue:e.defaultColorValue});var r;return i.set({id:o,ariaDescribedById:n}),i.bind("isReadOnly").to(t,"isEnabled",e=>!e),i.bind("hasError").to(t,"errorText",e=>!!e),i.on("input",()=>{t.errorText=null}),t.bind("isEmpty","isFocused").to(i),i}}function it(e){const t=parseFloat(e);return!Number.isNaN(t)&&e===String(t)}o(21);class rt extends xe.View{constructor(e,t={}){super(e);const o=this.bindTemplate;this.set("class",t.class||null),this.children=this.createCollection(),t.children&&t.children.forEach(e=>this.children.add(e)),this.set("_role",null),this.set("_ariaLabelledBy",null),t.labelView&&this.set({_role:"group",_ariaLabelledBy:t.labelView.id}),this.setTemplate({tag:"div",attributes:{class:["ck","ck-form__row",o.to("class")],role:o.to("_role"),"aria-labelledby":o.to("_ariaLabelledBy")},children:this.children})}}o(8),o(9),o(25);const lt={left:n.icons.alignLeft,center:n.icons.alignCenter,right:n.icons.alignRight,justify:n.icons.alignJustify,top:n.icons.alignTop,middle:n.icons.alignMiddle,bottom:n.icons.alignBottom};class st extends xe.View{constructor(e,t){super(e),this.set({borderStyle:"",borderWidth:"",borderColor:"",padding:"",backgroundColor:"",width:"",height:"",horizontalAlignment:"",verticalAlignment:""}),this.options=t;const{borderStyleDropdown:o,borderWidthInput:n,borderColorInput:i,borderRowLabel:r}=this._createBorderFields(),{backgroundRowLabel:l,backgroundInput:s}=this._createBackgroundFields(),{widthInput:c,operatorLabel:d,heightInput:u,dimensionsLabel:h}=this._createDimensionFields(),{horizontalAlignmentToolbar:b,verticalAlignmentToolbar:m,alignmentLabel:g}=this._createAlignmentFields();this.focusTracker=new a.FocusTracker,this.keystrokes=new a.KeystrokeHandler,this.children=this.createCollection(),this.borderStyleDropdown=o,this.borderWidthInput=n,this.borderColorInput=i,this.backgroundInput=s,this.paddingInput=this._createPaddingField(),this.widthInput=c,this.heightInput=u,this.horizontalAlignmentToolbar=b,this.verticalAlignmentToolbar=m;const{saveButtonView:p,cancelButtonView:f}=this._createActionButtons();this.saveButtonView=p,this.cancelButtonView=f,this._focusables=new xe.ViewCollection,this._focusCycler=new xe.FocusCycler({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}}),this.children.add(new xe.FormHeaderView(e,{label:this.t("Cell properties")})),this.children.add(new rt(e,{labelView:r,children:[r,o,i,n],class:"ck-table-form__border-row"})),this.children.add(new rt(e,{labelView:l,children:[l,s],class:"ck-table-form__background-row"})),this.children.add(new rt(e,{children:[new rt(e,{labelView:h,children:[h,c,d,u],class:"ck-table-form__dimensions-row"}),new rt(e,{children:[this.paddingInput],class:"ck-table-cell-properties-form__padding-row"})]})),this.children.add(new rt(e,{labelView:g,children:[g,b,m],class:"ck-table-cell-properties-form__alignment-row"})),this.children.add(new rt(e,{children:[this.saveButtonView,this.cancelButtonView],class:"ck-table-form__action-row"})),this.setTemplate({tag:"form",attributes:{class:["ck","ck-form","ck-table-form","ck-table-cell-properties-form"],tabindex:"-1"},children:this.children})}render(){super.render(),Object(xe.submitHandler)({view:this}),[this.borderStyleDropdown,this.borderColorInput,this.borderWidthInput,this.backgroundInput,this.widthInput,this.heightInput,this.paddingInput,this.horizontalAlignmentToolbar,this.verticalAlignmentToolbar,this.saveButtonView,this.cancelButtonView].forEach(e=>{this._focusables.add(e),this.focusTracker.add(e.element)}),this.keystrokes.listenTo(this.element)}focus(){this._focusCycler.focusFirst()}_createBorderFields(){const e=this.options.defaultTableCellProperties,t={style:e.borderStyle,width:e.borderWidth,color:e.borderColor},o=nt({colorConfig:this.options.borderColors,columns:5,defaultColorValue:t.color}),n=this.locale,i=this.t,r=new xe.LabelView(n);r.text=i("Border");const l=Ge(i),s=new xe.LabeledFieldView(n,xe.createLabeledDropdown);s.set({label:i("Style"),class:"ck-table-form__border-style"}),s.fieldView.buttonView.set({isOn:!1,withText:!0,tooltip:i("Style")}),s.fieldView.buttonView.bind("label").to(this,"borderStyle",e=>l[e||"none"]),s.fieldView.on("execute",e=>{this.borderStyle=e.source._borderStyleValue}),s.bind("isEmpty").to(this,"borderStyle",e=>!e),Object(xe.addListToDropdown)(s.fieldView,et(this,t.style));const a=new xe.LabeledFieldView(n,xe.createLabeledInputText);a.set({label:i("Width"),class:"ck-table-form__border-width"}),a.fieldView.bind("value").to(this,"borderWidth"),a.bind("isEnabled").to(this,"borderStyle",at),a.fieldView.on("input",()=>{this.borderWidth=a.fieldView.element.value});const c=new xe.LabeledFieldView(n,o);return c.set({label:i("Color"),class:"ck-table-form__border-color"}),c.fieldView.bind("value").to(this,"borderColor"),c.bind("isEnabled").to(this,"borderStyle",at),c.fieldView.on("input",()=>{this.borderColor=c.fieldView.value}),this.on("change:borderStyle",(e,o,n,i)=>{at(n)||(this.borderColor="",this.borderWidth=""),at(i)||(this.borderColor=t.color,this.borderWidth=t.width)}),{borderRowLabel:r,borderStyleDropdown:s,borderColorInput:c,borderWidthInput:a}}_createBackgroundFields(){const e=this.locale,t=this.t,o=new xe.LabelView(e);o.text=t("Background");const n=nt({colorConfig:this.options.backgroundColors,columns:5,defaultColorValue:this.options.defaultTableCellProperties.backgroundColor}),i=new xe.LabeledFieldView(e,n);return i.set({label:t("Color"),class:"ck-table-cell-properties-form__background"}),i.fieldView.bind("value").to(this,"backgroundColor"),i.fieldView.on("input",()=>{this.backgroundColor=i.fieldView.value}),{backgroundRowLabel:o,backgroundInput:i}}_createDimensionFields(){const e=this.locale,t=this.t,o=new xe.LabelView(e);o.text=t("Dimensions");const n=new xe.LabeledFieldView(e,xe.createLabeledInputText);n.set({label:t("Width"),class:"ck-table-form__dimensions-row__width"}),n.fieldView.bind("value").to(this,"width"),n.fieldView.on("input",()=>{this.width=n.fieldView.element.value});const i=new xe.View(e);i.setTemplate({tag:"span",attributes:{class:["ck-table-form__dimension-operator"]},children:[{text:"×"}]});const r=new xe.LabeledFieldView(e,xe.createLabeledInputText);return r.set({label:t("Height"),class:"ck-table-form__dimensions-row__height"}),r.fieldView.bind("value").to(this,"height"),r.fieldView.on("input",()=>{this.height=r.fieldView.element.value}),{dimensionsLabel:o,widthInput:n,operatorLabel:i,heightInput:r}}_createPaddingField(){const e=this.locale,t=this.t,o=new xe.LabeledFieldView(e,xe.createLabeledInputText);return o.set({label:t("Padding"),class:"ck-table-cell-properties-form__padding"}),o.fieldView.bind("value").to(this,"padding"),o.fieldView.on("input",()=>{this.padding=o.fieldView.element.value}),o}_createAlignmentFields(){const e=this.locale,t=this.t,o=new xe.LabelView(e);o.text=t("Table cell text alignment");const n=new xe.ToolbarView(e),i="rtl"===this.locale.contentLanguageDirection;n.set({isCompact:!0,ariaLabel:t("Horizontal text alignment toolbar")}),tt({view:this,icons:lt,toolbar:n,labels:this._horizontalAlignmentLabels,propertyName:"horizontalAlignment",nameToValue:e=>{if(i){if("left"===e)return"right";if("right"===e)return"left"}return e},defaultValue:this.options.defaultTableCellProperties.horizontalAlignment});const r=new xe.ToolbarView(e);return r.set({isCompact:!0,ariaLabel:t("Vertical text alignment toolbar")}),tt({view:this,icons:lt,toolbar:r,labels:this._verticalAlignmentLabels,propertyName:"verticalAlignment",defaultValue:this.options.defaultTableCellProperties.verticalAlignment}),{horizontalAlignmentToolbar:n,verticalAlignmentToolbar:r,alignmentLabel:o}}_createActionButtons(){const e=this.locale,t=this.t,o=new xe.ButtonView(e),i=new xe.ButtonView(e),r=[this.borderWidthInput,this.borderColorInput,this.backgroundInput,this.paddingInput];return o.set({label:t("Save"),icon:n.icons.check,class:"ck-button-save",type:"submit",withText:!0}),o.bind("isEnabled").toMany(r,"errorText",(...e)=>e.every(e=>!e)),i.set({label:t("Cancel"),icon:n.icons.cancel,class:"ck-button-cancel",withText:!0}),i.delegate("execute").to(this,"cancel"),{saveButtonView:o,cancelButtonView:i}}get _horizontalAlignmentLabels(){const e=this.locale,t=this.t,o=t("Align cell text to the left"),n=t("Align cell text to the center"),i=t("Align cell text to the right"),r=t("Justify cell text");return"rtl"===e.uiLanguageDirection?{right:i,center:n,left:o,justify:r}:{left:o,center:n,right:i,justify:r}}get _verticalAlignmentLabels(){const e=this.t;return{top:e("Align cell text to the top"),middle:e("Align cell text to the middle"),bottom:e("Align cell text to the bottom")}}}function at(e){return"none"!==e}var ct=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)},dt=o(10),ut="object"==typeof self&&self&&self.Object===Object&&self,ht=dt.a||ut||Function("return this")(),bt=function(){return ht.Date.now()},mt=/\s/;var gt=function(e){for(var t=e.length;t--&&mt.test(e.charAt(t)););return t},pt=/^\s+/;var ft=function(e){return e?e.slice(0,gt(e)+1).replace(pt,""):e},wt=ht.Symbol,_t=Object.prototype,kt=_t.hasOwnProperty,vt=_t.toString,Ct=wt?wt.toStringTag:void 0;var yt=function(e){var t=kt.call(e,Ct),o=e[Ct];try{e[Ct]=void 0;var n=!0}catch(e){}var i=vt.call(e);return n&&(t?e[Ct]=o:delete e[Ct]),i},Tt=Object.prototype.toString;var xt=function(e){return Tt.call(e)},At=wt?wt.toStringTag:void 0;var Vt=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":At&&At in Object(e)?yt(e):xt(e)};var St=function(e){return null!=e&&"object"==typeof e};var Rt=function(e){return"symbol"==typeof e||St(e)&&"[object Symbol]"==Vt(e)},It=/^[-+]0x[0-9a-f]+$/i,Pt=/^0b[01]+$/i,Et=/^0o[0-7]+$/i,Bt=parseInt;var Ot=function(e){if("number"==typeof e)return e;if(Rt(e))return NaN;if(ct(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=ct(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=ft(e);var o=Pt.test(e);return o||Et.test(e)?Bt(e.slice(2),o?2:8):It.test(e)?NaN:+e},Lt=Math.max,Nt=Math.min;var zt=function(e,t,o){var n,i,r,l,s,a,c=0,d=!1,u=!1,h=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function b(t){var o=n,r=i;return n=i=void 0,c=t,l=e.apply(r,o)}function m(e){return c=e,s=setTimeout(p,t),d?b(e):l}function g(e){var o=e-a;return void 0===a||o>=t||o<0||u&&e-c>=r}function p(){var e=bt();if(g(e))return f(e);s=setTimeout(p,function(e){var o=t-(e-a);return u?Nt(o,r-(e-c)):o}(e))}function f(e){return s=void 0,h&&n?b(e):(n=i=void 0,l)}function w(){var e=bt(),o=g(e);if(n=arguments,i=this,a=e,o){if(void 0===s)return m(a);if(u)return clearTimeout(s),s=setTimeout(p,t),b(a)}return void 0===s&&(s=setTimeout(p,t)),l}return t=Ot(t)||0,ct(o)&&(d=!!o.leading,r=(u="maxWait"in o)?Lt(Ot(o.maxWait)||0,t):r,h="trailing"in o?!!o.trailing:h),w.cancel=function(){void 0!==s&&clearTimeout(s),c=0,n=a=i=s=void 0},w.flush=function(){return void 0===s?l:f(bt())},w};const Mt=xe.BalloonPanelView.defaultPositions,Ft=[Mt.northArrowSouth,Mt.northArrowSouthWest,Mt.northArrowSouthEast,Mt.southArrowNorth,Mt.southArrowNorthWest,Mt.southArrowNorthEast,Mt.viewportStickyNorth];function Ht(e,t){const o=e.plugins.get("ContextualBalloon");if(We(e.editing.view.document.selection)){let n;n="cell"===t?Wt(e):Dt(e),o.updatePosition(n)}}function Dt(e){const t=e.model.document.selection.getFirstPosition().findAncestor("table"),o=e.editing.mapper.toViewElement(t);return{target:e.editing.view.domConverter.viewToDom(o),positions:Ft}}function Wt(e){const t=e.editing.mapper,o=e.editing.view.domConverter,n=e.model.document.selection;if(n.rangeCount>1)return{target:()=>function(e,t){const o=t.editing.mapper,n=t.editing.view.domConverter,i=Array.from(e).map(e=>{const t=jt(e.start),i=o.toViewElement(t);return new a.Rect(n.viewToDom(i))});return a.Rect.getBoundingRect(i)}(n.getRanges(),e),positions:Ft};const i=jt(n.getFirstPosition()),r=t.toViewElement(i);return{target:o.viewToDom(r),positions:Ft}}function jt(e){return e.nodeAfter&&e.nodeAfter.is("element","tableCell")?e.nodeAfter:e.findAncestor("tableCell")}function Ut(e){if(!e||!ct(e))return e;const{top:t,right:o,bottom:n,left:i}=e;return t==o&&o==n&&n==i?t:void 0}function Kt(e,t){const o=parseFloat(e);return Number.isNaN(o)||String(o)!==String(e)?e:`${o}${t}`}function $t(e,t={}){const o=Object.assign({borderStyle:"none",borderWidth:"",borderColor:"",backgroundColor:"",width:"",height:""},e);return t.includeAlignmentProperty&&!o.alignment&&(o.alignment="center"),t.includePaddingProperty&&!o.padding&&(o.padding=""),t.includeVerticalAlignmentProperty&&!o.verticalAlignment&&(o.verticalAlignment="middle"),t.includeHorizontalAlignmentProperty&&!o.horizontalAlignment&&(o.horizontalAlignment=t.isRightToLeftContent?"right":"left"),o}const qt={borderStyle:"tableCellBorderStyle",borderColor:"tableCellBorderColor",borderWidth:"tableCellBorderWidth",width:"tableCellWidth",height:"tableCellHeight",padding:"tableCellPadding",backgroundColor:"tableCellBackgroundColor",horizontalAlignment:"tableCellHorizontalAlignment",verticalAlignment:"tableCellVerticalAlignment"};class Gt extends n.Plugin{static get requires(){return[xe.ContextualBalloon]}static get pluginName(){return"TableCellPropertiesUI"}constructor(e){super(e),e.config.define("table.tableCellProperties",{borderColors:ot,backgroundColors:ot})}init(){const e=this.editor,t=e.t;this._defaultTableCellProperties=$t(e.config.get("table.tableCellProperties.defaultProperties"),{includeVerticalAlignmentProperty:!0,includeHorizontalAlignmentProperty:!0,includePaddingProperty:!0,isRightToLeftContent:"rtl"===e.locale.contentLanguageDirection}),this._balloon=e.plugins.get(xe.ContextualBalloon),this.view=this._createPropertiesView(),this._undoStepBatch=null,e.ui.componentFactory.add("tableCellProperties",o=>{const n=new xe.ButtonView(o);n.set({label:t("Cell properties"),icon:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="m11.105 18-.17 1H2.5A1.5 1.5 0 0 1 1 17.5v-15A1.5 1.5 0 0 1 2.5 1h15A1.5 1.5 0 0 1 19 2.5v9.975l-.85-.124-.15-.302V8h-5v4h.021l-.172.351-1.916.28-.151.027c-.287.063-.54.182-.755.341L8 13v5h3.105zM2 12h5V8H2v4zm10-4H8v4h4V8zM2 2v5h5V2H2zm0 16h5v-5H2v5zM13 7h5V2h-5v5zM8 2v5h4V2H8z" opacity=".6"/><path d="m15.5 11.5 1.323 2.68 2.957.43-2.14 2.085.505 2.946L15.5 18.25l-2.645 1.39.505-2.945-2.14-2.086 2.957-.43L15.5 11.5zM13 6a1 1 0 0 1 1 1v3.172a2.047 2.047 0 0 0-.293.443l-.858 1.736-1.916.28-.151.027A1.976 1.976 0 0 0 9.315 14H7a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h6zm-1 2H8v4h4V8z"/></svg>',tooltip:!0}),this.listenTo(n,"execute",()=>this._showView());const i=Object.values(qt).map(t=>e.commands.get(t));return n.bind("isEnabled").toMany(i,"isEnabled",(...e)=>e.some(e=>e)),n})}destroy(){super.destroy(),this.view.destroy()}_createPropertiesView(){const e=this.editor,t=e.editing.view.document,o=e.config.get("table.tableCellProperties"),n=Object(xe.normalizeColorOptions)(o.borderColors),i=Object(xe.getLocalizedColorOptions)(e.locale,n),r=Object(xe.normalizeColorOptions)(o.backgroundColors),l=Object(xe.getLocalizedColorOptions)(e.locale,r),s=new st(e.locale,{borderColors:i,backgroundColors:l,defaultTableCellProperties:this._defaultTableCellProperties}),a=e.t;s.render(),this.listenTo(s,"submit",()=>{this._hideView()}),this.listenTo(s,"cancel",()=>{this._undoStepBatch.operations.length&&e.execute("undo",this._undoStepBatch),this._hideView()}),s.keystrokes.set("Esc",(e,t)=>{this._hideView(),t()}),this.listenTo(e.ui,"update",()=>{We(t.selection)?this._isViewVisible&&Ht(e,"cell"):this._hideView()}),Object(xe.clickOutsideHandler)({emitter:s,activator:()=>this._isViewInBalloon,contextElements:[this._balloon.view.element],callback:()=>this._hideView()});const c=Je(a),d=Xe(a);return s.on("change:borderStyle",this._getPropertyChangeCallback("tableCellBorderStyle",this._defaultTableCellProperties.borderStyle)),s.on("change:borderColor",this._getValidatedPropertyChangeCallback({viewField:s.borderColorInput,commandName:"tableCellBorderColor",errorText:c,validator:Ye,defaultValue:this._defaultTableCellProperties.borderColor})),s.on("change:borderWidth",this._getValidatedPropertyChangeCallback({viewField:s.borderWidthInput,commandName:"tableCellBorderWidth",errorText:d,validator:Ze,defaultValue:this._defaultTableCellProperties.borderWidth})),s.on("change:padding",this._getValidatedPropertyChangeCallback({viewField:s.paddingInput,commandName:"tableCellPadding",errorText:d,validator:Qe,defaultValue:this._defaultTableCellProperties.padding})),s.on("change:width",this._getValidatedPropertyChangeCallback({viewField:s.widthInput,commandName:"tableCellWidth",errorText:d,validator:Qe,defaultValue:this._defaultTableCellProperties.width})),s.on("change:height",this._getValidatedPropertyChangeCallback({viewField:s.heightInput,commandName:"tableCellHeight",errorText:d,validator:Qe,defaultValue:this._defaultTableCellProperties.height})),s.on("change:backgroundColor",this._getValidatedPropertyChangeCallback({viewField:s.backgroundInput,commandName:"tableCellBackgroundColor",errorText:c,validator:Ye,defaultValue:this._defaultTableCellProperties.backgroundColor})),s.on("change:horizontalAlignment",this._getPropertyChangeCallback("tableCellHorizontalAlignment",this._defaultTableCellProperties.horizontalAlignment)),s.on("change:verticalAlignment",this._getPropertyChangeCallback("tableCellVerticalAlignment",this._defaultTableCellProperties.verticalAlignment)),s}_fillViewFormFromCommandValues(){const e=this.editor.commands,t=e.get("tableCellBorderStyle");Object.entries(qt).map(([t,o])=>{const n=this._defaultTableCellProperties[t]||"";return[t,e.get(o).value||n]}).forEach(([e,o])=>{("borderColor"!==e&&"borderWidth"!==e||"none"!==t.value)&&this.view.set(e,o)})}_showView(){const e=this.editor;this._fillViewFormFromCommandValues(),this._balloon.add({view:this.view,position:Wt(e)}),this._undoStepBatch=e.model.createBatch(),this.view.focus()}_hideView(){if(!this._isViewInBalloon)return;const e=this.editor;this.stopListening(e.ui,"update"),this.view.saveButtonView.focus(),this._balloon.remove(this.view),this.editor.editing.view.focus()}get _isViewVisible(){return this._balloon.visibleView===this.view}get _isViewInBalloon(){return this._balloon.hasView(this.view)}_getPropertyChangeCallback(e,t){return(o,n,i,r)=>{(r||t!==i)&&this.editor.execute(e,{value:i,batch:this._undoStepBatch})}}_getValidatedPropertyChangeCallback(e){const{commandName:t,viewField:o,validator:n,errorText:i,defaultValue:r}=e,l=zt(()=>{o.errorText=i},500);return(e,i,s,a)=>{l.cancel(),(a||r!==s)&&(n(s)?(this.editor.execute(t,{value:s,batch:this._undoStepBatch}),o.errorText=null):l())}}}function Jt(e,t){const{viewElement:o,defaultValue:n,modelAttribute:i,styleName:r,reduceBoxSides:l=!1}=t;e.for("upcast").attributeToAttribute({view:{name:o,styles:{[r]:/[\s\S]+/}},model:{key:i,value:e=>{const t=e.getNormalizedStyle(r),o=l?Zt(t):t;if(n!==o)return o}}})}function Xt(e,t,o){e.for("upcast").add(e=>e.on("element:"+t,(e,t,n)=>{if(!t.modelRange)return;const i=["border-top-width","border-top-color","border-top-style","border-bottom-width","border-bottom-color","border-bottom-style","border-right-width","border-right-color","border-right-style","border-left-width","border-left-color","border-left-style"].filter(e=>t.viewItem.hasStyle(e));if(!i.length)return;const r={styles:i};if(!n.consumable.test(t.viewItem,r))return;const l=[...t.modelRange.getItems({shallow:!0})].pop();n.consumable.consume(t.viewItem,r);const s={style:t.viewItem.getNormalizedStyle("border-style"),color:t.viewItem.getNormalizedStyle("border-color"),width:t.viewItem.getNormalizedStyle("border-width")},a={style:Zt(s.style),color:Zt(s.color),width:Zt(s.width)};a.style!==o.style&&n.writer.setAttribute("borderStyle",a.style,l),a.color!==o.color&&n.writer.setAttribute("borderColor",a.color,l),a.width!==o.width&&n.writer.setAttribute("borderWidth",a.width,l)}))}function Yt(e,{modelElement:t,modelAttribute:o,styleName:n}){e.for("downcast").attributeToAttribute({model:{name:t,key:o},view:e=>({key:"style",value:{[n]:e}})})}function Qt(e,{modelAttribute:t,styleName:o}){e.for("downcast").add(e=>e.on(`attribute:${t}:table`,(e,t,n)=>{const{item:i,attributeNewValue:r}=t,{mapper:l,writer:s}=n;if(!n.consumable.consume(t.item,e.name))return;const a=[...l.toViewElement(i).getChildren()].find(e=>e.is("element","table"));r?s.setStyle(o,r,a):s.removeStyle(o,a)}))}function Zt(e){if(!e)return;return["top","right","bottom","left"].map(t=>e[t]).reduce((e,t)=>e==t?e:null)||e}class eo extends n.Command{constructor(e,t,o){super(e),this.attributeName=t,this._defaultValue=o}refresh(){const e=V(this.editor.model.document.selection);this.isEnabled=!!e.length,this.value=this._getSingleValue(e)}execute(e={}){const{value:t,batch:o}=e,n=this.editor.model,i=V(n.document.selection),r=this._getValueToSet(t);n.enqueueChange(o||"default",e=>{r?i.forEach(t=>e.setAttribute(this.attributeName,r,t)):i.forEach(t=>e.removeAttribute(this.attributeName,t))})}_getAttribute(e){if(!e)return;const t=e.getAttribute(this.attributeName);return t!==this._defaultValue?t:void 0}_getValueToSet(e){if(e!==this._defaultValue)return e}_getSingleValue(e){const t=this._getAttribute(e[0]);return e.every(e=>this._getAttribute(e)===t)?t:void 0}}class to extends eo{constructor(e,t){super(e,"padding",t)}_getAttribute(e){if(!e)return;const t=Ut(e.getAttribute(this.attributeName));return t!==this._defaultValue?t:void 0}_getValueToSet(e){if((e=Kt(e,"px"))!==this._defaultValue)return e}}class oo extends eo{constructor(e,t){super(e,"width",t)}_getValueToSet(e){if((e=Kt(e,"px"))!==this._defaultValue)return e}}class no extends eo{constructor(e,t){super(e,"height",t)}_getValueToSet(e){return(e=Kt(e,"px"))===this._defaultValue?null:e}}class io extends eo{constructor(e,t){super(e,"backgroundColor",t)}}class ro extends eo{constructor(e,t){super(e,"verticalAlignment",t)}}class lo extends eo{constructor(e,t){super(e,"horizontalAlignment",t)}}class so extends eo{constructor(e,t){super(e,"borderStyle",t)}_getAttribute(e){if(!e)return;const t=Ut(e.getAttribute(this.attributeName));return t!==this._defaultValue?t:void 0}}class ao extends eo{constructor(e,t){super(e,"borderColor",t)}_getAttribute(e){if(!e)return;const t=Ut(e.getAttribute(this.attributeName));return t!==this._defaultValue?t:void 0}}class co extends eo{constructor(e,t){super(e,"borderWidth",t)}_getAttribute(e){if(!e)return;const t=Ut(e.getAttribute(this.attributeName));return t!==this._defaultValue?t:void 0}_getValueToSet(e){if((e=Kt(e,"px"))!==this._defaultValue)return e}}const uo=/^(top|middle|bottom)$/,ho=/^(left|center|right|justify)$/;class bo extends n.Plugin{static get pluginName(){return"TableCellPropertiesEditing"}static get requires(){return[ye]}init(){const e=this.editor,t=e.model.schema,o=e.conversion;e.config.define("table.tableCellProperties.defaultProperties",{});const n=$t(e.config.get("table.tableCellProperties.defaultProperties"),{includeVerticalAlignmentProperty:!0,includeHorizontalAlignmentProperty:!0,includePaddingProperty:!0,isRightToLeftContent:"rtl"===e.locale.contentLanguageDirection});e.data.addStyleProcessorRules(Ne.addBorderRules),function(e,t,o){e.extend("tableCell",{allowAttributes:["borderWidth","borderColor","borderStyle"]}),Xt(t,"td",o),Xt(t,"th",o),Yt(t,{modelElement:"tableCell",modelAttribute:"borderStyle",styleName:"border-style"}),Yt(t,{modelElement:"tableCell",modelAttribute:"borderColor",styleName:"border-color"}),Yt(t,{modelElement:"tableCell",modelAttribute:"borderWidth",styleName:"border-width"})}(t,o,{color:n.borderColor,style:n.borderStyle,width:n.borderWidth}),e.commands.add("tableCellBorderStyle",new so(e,n.borderStyle)),e.commands.add("tableCellBorderColor",new ao(e,n.borderColor)),e.commands.add("tableCellBorderWidth",new co(e,n.borderWidth)),function(e,t,o){e.extend("tableCell",{allowAttributes:["horizontalAlignment"]}),t.for("downcast").attributeToAttribute({model:{name:"tableCell",key:"horizontalAlignment"},view:e=>({key:"style",value:{"text-align":e}})}),t.for("upcast").attributeToAttribute({view:{name:/^(td|th)$/,styles:{"text-align":ho}},model:{key:"horizontalAlignment",value:e=>{const t=e.getStyle("text-align");return t===o?null:t}}}).attributeToAttribute({view:{name:/^(td|th)$/,attributes:{align:ho}},model:{key:"horizontalAlignment",value:e=>{const t=e.getAttribute("align");return t===o?null:t}}})}(t,o,n.horizontalAlignment),e.commands.add("tableCellHorizontalAlignment",new lo(e,n.horizontalAlignment)),mo(t,o,{modelAttribute:"width",styleName:"width",defaultValue:n.width}),e.commands.add("tableCellWidth",new oo(e,n.width)),mo(t,o,{modelAttribute:"height",styleName:"height",defaultValue:n.height}),e.commands.add("tableCellHeight",new no(e,n.height)),e.data.addStyleProcessorRules(Ne.addPaddingRules),mo(t,o,{modelAttribute:"padding",styleName:"padding",reduceBoxSides:!0,defaultValue:n.padding}),e.commands.add("tableCellPadding",new to(e,n.padding)),e.data.addStyleProcessorRules(Ne.addBackgroundRules),mo(t,o,{modelAttribute:"backgroundColor",styleName:"background-color",defaultValue:n.backgroundColor}),e.commands.add("tableCellBackgroundColor",new io(e,n.backgroundColor)),function(e,t,o){e.extend("tableCell",{allowAttributes:["verticalAlignment"]}),t.for("downcast").attributeToAttribute({model:{name:"tableCell",key:"verticalAlignment"},view:e=>({key:"style",value:{"vertical-align":e}})}),t.for("upcast").attributeToAttribute({view:{name:/^(td|th)$/,styles:{"vertical-align":uo}},model:{key:"verticalAlignment",value:e=>{const t=e.getStyle("vertical-align");return t===o?null:t}}}).attributeToAttribute({view:{name:/^(td|th)$/,attributes:{valign:uo}},model:{key:"verticalAlignment",value:e=>{const t=e.getAttribute("valign");return t===o?null:t}}})}(t,o,n.verticalAlignment),e.commands.add("tableCellVerticalAlignment",new ro(e,n.verticalAlignment))}}function mo(e,t,o){const{modelAttribute:n}=o;e.extend("tableCell",{allowAttributes:[n]}),Jt(t,{viewElement:/^(td|th)$/,...o}),Yt(t,{modelElement:"tableCell",...o})}class go extends n.Plugin{static get pluginName(){return"TableCellProperties"}static get requires(){return[bo,Gt]}}class po extends n.Command{constructor(e,t,o){super(e),this.attributeName=t,this._defaultValue=o}refresh(){const e=this.editor.model.document.selection.getFirstPosition().findAncestor("table");this.isEnabled=!!e,this.value=this._getValue(e)}execute(e={}){const t=this.editor.model,o=t.document.selection,{value:n,batch:i}=e,r=o.getFirstPosition().findAncestor("table"),l=this._getValueToSet(n);t.enqueueChange(i||"default",e=>{l?e.setAttribute(this.attributeName,l,r):e.removeAttribute(this.attributeName,r)})}_getValue(e){if(!e)return;const t=e.getAttribute(this.attributeName);return t!==this._defaultValue?t:void 0}_getValueToSet(e){if(e!==this._defaultValue)return e}}class fo extends po{constructor(e,t){super(e,"backgroundColor",t)}}class wo extends po{constructor(e,t){super(e,"borderColor",t)}_getValue(e){if(!e)return;const t=Ut(e.getAttribute(this.attributeName));return t!==this._defaultValue?t:void 0}}class _o extends po{constructor(e,t){super(e,"borderStyle",t)}_getValue(e){if(!e)return;const t=Ut(e.getAttribute(this.attributeName));return t!==this._defaultValue?t:void 0}}class ko extends po{constructor(e,t){super(e,"borderWidth",t)}_getValue(e){if(!e)return;const t=Ut(e.getAttribute(this.attributeName));return t!==this._defaultValue?t:void 0}_getValueToSet(e){if((e=Kt(e,"px"))!==this._defaultValue)return e}}class vo extends po{constructor(e,t){super(e,"width",t)}_getValueToSet(e){if((e=Kt(e,"px"))!==this._defaultValue)return e}}class Co extends po{constructor(e,t){super(e,"height",t)}_getValueToSet(e){return(e=Kt(e,"px"))===this._defaultValue?null:e}}class yo extends po{constructor(e,t){super(e,"alignment",t)}}const To=/^(left|center|right)$/,xo=/^(left|none|right)$/;class Ao extends n.Plugin{static get pluginName(){return"TablePropertiesEditing"}static get requires(){return[ye]}init(){const e=this.editor,t=e.model.schema,o=e.conversion;e.config.define("table.tableProperties.defaultProperties",{});const n=$t(e.config.get("table.tableProperties.defaultProperties"),{includeAlignmentProperty:!0});e.data.addStyleProcessorRules(Ne.addBorderRules),function(e,t,o){e.extend("table",{allowAttributes:["borderWidth","borderColor","borderStyle"]}),Xt(t,"table",o),Qt(t,{modelAttribute:"borderColor",styleName:"border-color"}),Qt(t,{modelAttribute:"borderStyle",styleName:"border-style"}),Qt(t,{modelAttribute:"borderWidth",styleName:"border-width"})}(t,o,{color:n.borderColor,style:n.borderStyle,width:n.borderWidth}),e.commands.add("tableBorderColor",new wo(e,n.borderColor)),e.commands.add("tableBorderStyle",new _o(e,n.borderStyle)),e.commands.add("tableBorderWidth",new ko(e,n.borderWidth)),function(e,t,o){e.extend("table",{allowAttributes:["alignment"]}),t.for("downcast").attributeToAttribute({model:{name:"table",key:"alignment"},view:e=>({key:"style",value:{float:"center"===e?"none":e}}),converterPriority:"high"}),t.for("upcast").attributeToAttribute({view:{name:/^(table|figure)$/,styles:{float:xo}},model:{key:"alignment",value:e=>{let t=e.getStyle("float");return"none"===t&&(t="center"),t===o?null:t}}}).attributeToAttribute({view:{attributes:{align:To}},model:{name:"table",key:"alignment",value:e=>{const t=e.getAttribute("align");return t===o?null:t}}})}(t,o,n.alignment),e.commands.add("tableAlignment",new yo(e,n.alignment)),Vo(t,o,{modelAttribute:"width",styleName:"width",defaultValue:n.width}),e.commands.add("tableWidth",new vo(e,n.width)),Vo(t,o,{modelAttribute:"height",styleName:"height",defaultValue:n.height}),e.commands.add("tableHeight",new Co(e,n.height)),e.data.addStyleProcessorRules(Ne.addBackgroundRules),function(e,t,o){const{modelAttribute:n}=o;e.extend("table",{allowAttributes:[n]}),Jt(t,{viewElement:"table",...o}),Qt(t,o)}(t,o,{modelAttribute:"backgroundColor",styleName:"background-color",defaultValue:n.backgroundColor}),e.commands.add("tableBackgroundColor",new fo(e,n.backgroundColor))}}function Vo(e,t,o){const{modelAttribute:n}=o;e.extend("table",{allowAttributes:[n]}),Jt(t,{viewElement:/^(table|figure)$/,...o}),Yt(t,{modelElement:"table",...o})}o(28);const So={left:n.icons.objectLeft,center:n.icons.objectCenter,right:n.icons.objectRight};class Ro extends xe.View{constructor(e,t){super(e),this.set({borderStyle:"",borderWidth:"",borderColor:"",backgroundColor:"",width:"",height:"",alignment:""}),this.options=t;const{borderStyleDropdown:o,borderWidthInput:n,borderColorInput:i,borderRowLabel:r}=this._createBorderFields(),{backgroundRowLabel:l,backgroundInput:s}=this._createBackgroundFields(),{widthInput:c,operatorLabel:d,heightInput:u,dimensionsLabel:h}=this._createDimensionFields(),{alignmentToolbar:b,alignmentLabel:m}=this._createAlignmentFields();this.focusTracker=new a.FocusTracker,this.keystrokes=new a.KeystrokeHandler,this.children=this.createCollection(),this.borderStyleDropdown=o,this.borderWidthInput=n,this.borderColorInput=i,this.backgroundInput=s,this.widthInput=c,this.heightInput=u,this.alignmentToolbar=b;const{saveButtonView:g,cancelButtonView:p}=this._createActionButtons();this.saveButtonView=g,this.cancelButtonView=p,this._focusables=new xe.ViewCollection,this._focusCycler=new xe.FocusCycler({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}}),this.children.add(new xe.FormHeaderView(e,{label:this.t("Table properties")})),this.children.add(new rt(e,{labelView:r,children:[r,o,i,n],class:"ck-table-form__border-row"})),this.children.add(new rt(e,{labelView:l,children:[l,s],class:"ck-table-form__background-row"})),this.children.add(new rt(e,{children:[new rt(e,{labelView:h,children:[h,c,d,u],class:"ck-table-form__dimensions-row"}),new rt(e,{labelView:m,children:[m,b],class:"ck-table-properties-form__alignment-row"})]})),this.children.add(new rt(e,{children:[this.saveButtonView,this.cancelButtonView],class:"ck-table-form__action-row"})),this.setTemplate({tag:"form",attributes:{class:["ck","ck-form","ck-table-form","ck-table-properties-form"],tabindex:"-1"},children:this.children})}render(){super.render(),Object(xe.submitHandler)({view:this}),[this.borderStyleDropdown,this.borderColorInput,this.borderWidthInput,this.backgroundInput,this.widthInput,this.heightInput,this.alignmentToolbar,this.saveButtonView,this.cancelButtonView].forEach(e=>{this._focusables.add(e),this.focusTracker.add(e.element)}),this.keystrokes.listenTo(this.element)}focus(){this._focusCycler.focusFirst()}_createBorderFields(){const e=this.options.defaultTableProperties,t={style:e.borderStyle,width:e.borderWidth,color:e.borderColor},o=nt({colorConfig:this.options.borderColors,columns:5,defaultColorValue:t.color}),n=this.locale,i=this.t,r=new xe.LabelView(n);r.text=i("Border");const l=Ge(this.t),s=new xe.LabeledFieldView(n,xe.createLabeledDropdown);s.set({label:i("Style"),class:"ck-table-form__border-style"}),s.fieldView.buttonView.set({isOn:!1,withText:!0,tooltip:i("Style")}),s.fieldView.buttonView.bind("label").to(this,"borderStyle",e=>l[e||"none"]),s.fieldView.on("execute",e=>{this.borderStyle=e.source._borderStyleValue}),s.bind("isEmpty").to(this,"borderStyle",e=>!e),Object(xe.addListToDropdown)(s.fieldView,et(this,t.style));const a=new xe.LabeledFieldView(n,xe.createLabeledInputText);a.set({label:i("Width"),class:"ck-table-form__border-width"}),a.fieldView.bind("value").to(this,"borderWidth"),a.bind("isEnabled").to(this,"borderStyle",Io),a.fieldView.on("input",()=>{this.borderWidth=a.fieldView.element.value});const c=new xe.LabeledFieldView(n,o);return c.set({label:i("Color"),class:"ck-table-form__border-color"}),c.fieldView.bind("value").to(this,"borderColor"),c.bind("isEnabled").to(this,"borderStyle",Io),c.fieldView.on("input",()=>{this.borderColor=c.fieldView.value}),this.on("change:borderStyle",(e,o,n,i)=>{Io(n)||(this.borderColor="",this.borderWidth=""),Io(i)||(this.borderColor=t.color,this.borderWidth=t.width)}),{borderRowLabel:r,borderStyleDropdown:s,borderColorInput:c,borderWidthInput:a}}_createBackgroundFields(){const e=this.locale,t=this.t,o=new xe.LabelView(e);o.text=t("Background");const n=nt({colorConfig:this.options.backgroundColors,columns:5,defaultColorValue:this.options.defaultTableProperties.backgroundColor}),i=new xe.LabeledFieldView(e,n);return i.set({label:t("Color"),class:"ck-table-properties-form__background"}),i.fieldView.bind("value").to(this,"backgroundColor"),i.fieldView.on("input",()=>{this.backgroundColor=i.fieldView.value}),{backgroundRowLabel:o,backgroundInput:i}}_createDimensionFields(){const e=this.locale,t=this.t,o=new xe.LabelView(e);o.text=t("Dimensions");const n=new xe.LabeledFieldView(e,xe.createLabeledInputText);n.set({label:t("Width"),class:"ck-table-form__dimensions-row__width"}),n.fieldView.bind("value").to(this,"width"),n.fieldView.on("input",()=>{this.width=n.fieldView.element.value});const i=new xe.View(e);i.setTemplate({tag:"span",attributes:{class:["ck-table-form__dimension-operator"]},children:[{text:"×"}]});const r=new xe.LabeledFieldView(e,xe.createLabeledInputText);return r.set({label:t("Height"),class:"ck-table-form__dimensions-row__height"}),r.fieldView.bind("value").to(this,"height"),r.fieldView.on("input",()=>{this.height=r.fieldView.element.value}),{dimensionsLabel:o,widthInput:n,operatorLabel:i,heightInput:r}}_createAlignmentFields(){const e=this.locale,t=this.t,o=new xe.LabelView(e);o.text=t("Alignment");const n=new xe.ToolbarView(e);return n.set({isCompact:!0,ariaLabel:t("Table alignment toolbar")}),tt({view:this,icons:So,toolbar:n,labels:this._alignmentLabels,propertyName:"alignment",defaultValue:this.options.defaultTableProperties.alignment}),{alignmentLabel:o,alignmentToolbar:n}}_createActionButtons(){const e=this.locale,t=this.t,o=new xe.ButtonView(e),i=new xe.ButtonView(e),r=[this.borderWidthInput,this.borderColorInput,this.backgroundInput,this.widthInput,this.heightInput];return o.set({label:t("Save"),icon:n.icons.check,class:"ck-button-save",type:"submit",withText:!0}),o.bind("isEnabled").toMany(r,"errorText",(...e)=>e.every(e=>!e)),i.set({label:t("Cancel"),icon:n.icons.cancel,class:"ck-button-cancel",withText:!0}),i.delegate("execute").to(this,"cancel"),{saveButtonView:o,cancelButtonView:i}}get _alignmentLabels(){const e=this.locale,t=this.t,o=t("Align table to the left"),n=t("Center table"),i=t("Align table to the right");return"rtl"===e.uiLanguageDirection?{right:i,center:n,left:o}:{left:o,center:n,right:i}}}function Io(e){return"none"!==e}const Po={borderStyle:"tableBorderStyle",borderColor:"tableBorderColor",borderWidth:"tableBorderWidth",backgroundColor:"tableBackgroundColor",width:"tableWidth",height:"tableHeight",alignment:"tableAlignment"};class Eo extends n.Plugin{static get requires(){return[xe.ContextualBalloon]}static get pluginName(){return"TablePropertiesUI"}constructor(e){super(e),e.config.define("table.tableProperties",{borderColors:ot,backgroundColors:ot})}init(){const e=this.editor,t=e.t;this._defaultTableProperties=$t(e.config.get("table.tableProperties.defaultProperties"),{includeAlignmentProperty:!0}),this._balloon=e.plugins.get(xe.ContextualBalloon),this.view=this._createPropertiesView(),this._undoStepBatch=null,e.ui.componentFactory.add("tableProperties",o=>{const n=new xe.ButtonView(o);n.set({label:t("Table properties"),icon:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M8 2v5h4V2h1v5h5v1h-5v4h.021l-.172.351-1.916.28-.151.027c-.287.063-.54.182-.755.341L8 13v5H7v-5H2v-1h5V8H2V7h5V2h1zm4 6H8v4h4V8z" opacity=".6"/><path d="m15.5 11.5 1.323 2.68 2.957.43-2.14 2.085.505 2.946L15.5 18.25l-2.645 1.39.505-2.945-2.14-2.086 2.957-.43L15.5 11.5zM17 1a2 2 0 0 1 2 2v9.475l-.85-.124-.857-1.736a2.048 2.048 0 0 0-.292-.44L17 3H3v14h7.808l.402.392L10.935 19H3a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h14z"/></svg>',tooltip:!0}),this.listenTo(n,"execute",()=>this._showView());const i=Object.values(Po).map(t=>e.commands.get(t));return n.bind("isEnabled").toMany(i,"isEnabled",(...e)=>e.some(e=>e)),n})}destroy(){super.destroy(),this.view.destroy()}_createPropertiesView(){const e=this.editor,t=e.config.get("table.tableProperties"),o=Object(xe.normalizeColorOptions)(t.borderColors),n=Object(xe.getLocalizedColorOptions)(e.locale,o),i=Object(xe.normalizeColorOptions)(t.backgroundColors),r=Object(xe.getLocalizedColorOptions)(e.locale,i),l=new Ro(e.locale,{borderColors:n,backgroundColors:r,defaultTableProperties:this._defaultTableProperties}),s=e.t;l.render(),this.listenTo(l,"submit",()=>{this._hideView()}),this.listenTo(l,"cancel",()=>{this._undoStepBatch.operations.length&&e.execute("undo",this._undoStepBatch),this._hideView()}),l.keystrokes.set("Esc",(e,t)=>{this._hideView(),t()}),Object(xe.clickOutsideHandler)({emitter:l,activator:()=>this._isViewInBalloon,contextElements:[this._balloon.view.element],callback:()=>this._hideView()});const a=Je(s),c=Xe(s);return l.on("change:borderStyle",this._getPropertyChangeCallback("tableBorderStyle",this._defaultTableProperties.borderStyle)),l.on("change:borderColor",this._getValidatedPropertyChangeCallback({viewField:l.borderColorInput,commandName:"tableBorderColor",errorText:a,validator:Ye,defaultValue:this._defaultTableProperties.borderColor})),l.on("change:borderWidth",this._getValidatedPropertyChangeCallback({viewField:l.borderWidthInput,commandName:"tableBorderWidth",errorText:c,validator:Ze,defaultValue:this._defaultTableProperties.borderWidth})),l.on("change:backgroundColor",this._getValidatedPropertyChangeCallback({viewField:l.backgroundInput,commandName:"tableBackgroundColor",errorText:a,validator:Ye,defaultValue:this._defaultTableProperties.backgroundColor})),l.on("change:width",this._getValidatedPropertyChangeCallback({viewField:l.widthInput,commandName:"tableWidth",errorText:c,validator:Qe,defaultValue:this._defaultTableProperties.width})),l.on("change:height",this._getValidatedPropertyChangeCallback({viewField:l.heightInput,commandName:"tableHeight",errorText:c,validator:Qe,defaultValue:this._defaultTableProperties.height})),l.on("change:alignment",this._getPropertyChangeCallback("tableAlignment",this._defaultTableProperties.alignment)),l}_fillViewFormFromCommandValues(){const e=this.editor.commands,t=e.get("tableBorderStyle");Object.entries(Po).map(([t,o])=>{const n=this._defaultTableProperties[t]||"";return[t,e.get(o).value||n]}).forEach(([e,o])=>{("borderColor"!==e&&"borderWidth"!==e||"none"!==t.value)&&this.view.set(e,o)})}_showView(){const e=this.editor;this.listenTo(e.ui,"update",()=>{this._updateView()}),this._fillViewFormFromCommandValues(),this._balloon.add({view:this.view,position:Dt(e)}),this._undoStepBatch=e.model.createBatch(),this.view.focus()}_hideView(){const e=this.editor;this.stopListening(e.ui,"update"),this.view.saveButtonView.focus(),this._balloon.remove(this.view),this.editor.editing.view.focus()}_updateView(){const e=this.editor;We(e.editing.view.document.selection)?this._isViewVisible&&Ht(e,"table"):this._hideView()}get _isViewVisible(){return this._balloon.visibleView===this.view}get _isViewInBalloon(){return this._balloon.hasView(this.view)}_getPropertyChangeCallback(e,t){return(o,n,i,r)=>{(r||t!==i)&&this.editor.execute(e,{value:i,batch:this._undoStepBatch})}}_getValidatedPropertyChangeCallback(e){const{commandName:t,viewField:o,validator:n,errorText:i,defaultValue:r}=e,l=zt(()=>{o.errorText=i},500);return(e,i,s,a)=>{l.cancel(),(a||r!==s)&&(n(s)?(this.editor.execute(t,{value:s,batch:this._undoStepBatch}),o.errorText=null):l())}}}class Bo extends n.Plugin{static get pluginName(){return"TableProperties"}static get requires(){return[Ao,Eo]}}function Oo(e){e.document.registerPostFixer(t=>function(e,t){const o=t.document.differ.getChanges();let n=!1;for(const t of o){if("insert"!=t.type)continue;if(t.position.parent.is("element","table")||"table"==t.name){const o="table"==t.name?t.position.nodeAfter:t.position.parent,i=Array.from(o.getChildren()).filter(e=>e.is("element","caption")),r=i.shift();if(!r)continue;for(const t of i)e.move(e.createRangeIn(t),r,"end"),e.remove(t);r.nextSibling&&(e.move(e.createRangeOn(r),o,"end"),n=!0),n=!!i.length||n}}return n}(t,e))}function Lo(e){return!!e&&e.is("element","table")}function No(e){for(const t of e.getChildren())if(t.is("element","caption"))return t;return null}function zo(e){const t=e.parent;return"figcaption"==e.name&&t&&"figure"==t.name&&t.hasClass("table")||"caption"==e.name&&t&&"table"==t.name?{name:!0}:null}function Mo(e){const t=e.getSelectedElement();return t&&t.is("element","table")?t:e.getFirstPosition().findAncestor("table")}class Fo extends n.Command{refresh(){const e=Mo(this.editor.model.document.selection);this.isEnabled=!!e,this.isEnabled?this.value=!!No(e):this.value=!1}execute(e={}){const{focusCaptionOnShow:t}=e;this.editor.model.change(e=>{this.value?this._hideTableCaption(e):this._showTableCaption(e,t)})}_showTableCaption(e,t){const o=Mo(this.editor.model.document.selection),n=this.editor.plugins.get("TableCaptionEditing")._getSavedCaption(o)||e.createElement("caption");e.append(n,o),t&&e.setSelection(n,"in")}_hideTableCaption(e){const t=Mo(this.editor.model.document.selection),o=this.editor.plugins.get("TableCaptionEditing"),n=No(t);o._saveCaption(t,n),e.setSelection(e.createRangeIn(t.getChild(0).getChild(0))),e.remove(n)}}class Ho extends n.Plugin{static get pluginName(){return"TableCaptionEditing"}constructor(e){super(e),this._savedCaptionsMap=new WeakMap}init(){const e=this.editor,t=e.model.schema,o=e.editing.view,n=e.t;t.isRegistered("caption")?t.extend("caption",{allowIn:"table"}):t.register("caption",{allowIn:"table",allowContentOf:"$block",isLimit:!0}),e.commands.add("toggleTableCaption",new Fo(this.editor)),e.conversion.for("upcast").elementToElement({view:zo,model:"caption"}),e.conversion.for("dataDowncast").elementToElement({model:"caption",view:(e,{writer:t})=>Lo(e.parent)?t.createContainerElement("figcaption"):null}),e.conversion.for("editingDowncast").elementToElement({model:"caption",view:(e,{writer:t})=>{if(!Lo(e.parent))return null;const r=t.createEditableElement("figcaption");return t.setCustomProperty("tableCaption",!0,r),Object(Ne.enablePlaceholder)({view:o,element:r,text:n("Enter table caption"),keepOnFocus:!0}),Object(i.toWidgetEditable)(r,t)}}),Oo(e.model)}_getSavedCaption(e){const t=this._savedCaptionsMap.get(e);return t?Ne.Element.fromJSON(t):null}_saveCaption(e,t){this._savedCaptionsMap.set(e,t.toJSON())}}class Do extends n.Plugin{static get pluginName(){return"TableCaptionUI"}init(){const e=this.editor,t=e.editing.view,o=e.t;e.ui.componentFactory.add("toggleTableCaption",i=>{const r=e.commands.get("toggleTableCaption"),l=new xe.ButtonView(i);return l.set({icon:n.icons.caption,tooltip:!0,isToggleable:!0}),l.bind("isOn","isEnabled").to(r,"value","isEnabled"),l.bind("label").to(r,"value",e=>o(e?"Toggle caption off":"Toggle caption on")),this.listenTo(l,"execute",()=>{if(e.execute("toggleTableCaption",{focusCaptionOnShow:!0}),r.value){const o=function(e){const t=Mo(e);return t?No(t):null}(e.model.document.selection),n=e.editing.mapper.toViewElement(o);if(!n)return;t.scrollToTheSelection(),t.change(e=>{e.addClass("table__caption_highlighted",n)})}}),l})}}o(30);class Wo extends n.Plugin{static get pluginName(){return"TableCaption"}static get requires(){return[Ho,Do]}}}]);
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/af.js b/core/assets/vendor/ckeditor5/translations/af.js
new file mode 100644
index 000000000000..a47679be3616
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/af.js
@@ -0,0 +1 @@
+!function(n){const i=n.af=n.af||{};i.dictionary=Object.assign(i.dictionary||{},{"Align center":"Belyn in die middel","Align left":"Belyn links","Align right":"Belyn regs",Justify:"Belyn beide kante","Text alignment":"Teksbelyning","Text alignment toolbar":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const r=e.af=e.af||{};r.dictionary=Object.assign(r.dictionary||{},{Bold:"Vetgedruk",Code:"Kode",Italic:"Skuinsgedruk",Strikethrough:"Deurgetrek",Subscript:"Onderskrif",Superscript:"Boskrif",Underline:"Onderstreep"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.af=n.af||{};i.dictionary=Object.assign(i.dictionary||{},{"Block quote":"Blok-aanhaling"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.af=i.af||{};n.dictionary=Object.assign(n.dictionary||{},{"Remove Format":"Verwyder formatering"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const o=e.af=e.af||{};o.dictionary=Object.assign(o.dictionary||{},{"%0 of %1":"",Cancel:"Kanselleer","Remove color":"","Restore default":"",Save:"Berg","Show more items":""}),o.getPluralForm=function(e){return 1!=e}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/ar.js b/core/assets/vendor/ckeditor5/translations/ar.js
new file mode 100644
index 000000000000..300806d6a9e6
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/ar.js
@@ -0,0 +1 @@
+!function(n){const i=n.ar=n.ar||{};i.dictionary=Object.assign(i.dictionary||{},{"Align center":"محاذاة في المنتصف","Align left":"محاذاة لليسار","Align right":"محاذاة لليمين",Justify:"ضبط","Text alignment":"محاذاة النص","Text alignment toolbar":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.ar=i.ar||{};n.dictionary=Object.assign(n.dictionary||{},{Bold:"عريض",Code:"شفرة برمجية",Italic:"مائل",Strikethrough:"يتوسطه خط",Subscript:"",Superscript:"",Underline:"تحته خط"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.ar=i.ar||{};n.dictionary=Object.assign(n.dictionary||{},{"Block quote":"اقتباس"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const a=n.ar=n.ar||{};a.dictionary=Object.assign(a.dictionary||{},{"Choose heading":"اختر عنوان",Heading:"عنوان","Heading 1":"عنوان 1","Heading 2":"عنوان 2","Heading 3":"عنوان 3","Heading 4":"","Heading 5":"","Heading 6":"",Paragraph:"فقرة","Type or paste your content here.":"","Type your title":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.ar=e.ar||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"","Centered image":"صورة بالوسط","Change image text alternative":"غير النص البديل للصورة","Enter image caption":"ادخل عنوان الصورة","Full size image":"صورة بحجم كامل","Image resize list":"","Image toolbar":"","image widget":"عنصر الصورة","In line":"",Insert:"","Insert image":"ادراج صورة","Insert image via URL":"","Left aligned image":"صورة بمحاذاة لليسار",Original:"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Right aligned image":"صورة بمحاذاة لليمين","Side image":"صورة جانبية","Text alternative":"النص البديل",Update:"","Update image URL":"","Upload failed":"فشل الرفع","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.ar=n.ar||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"","Edit link":"تحرير الرابط",Link:"رابط","Link image":"","Link URL":"رابط عنوان","Open in a new tab":"","Open link in new tab":"فتح الرابط في تبويب جديد","This link has no URL":"لا يحتوي هذا الرابط على عنوان",Unlink:"إلغاء الرابط"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.ar=e.ar||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"قائمة نقطية","Bulleted list styles toolbar":"",Circle:"",Decimal:"","Decimal with leading zero":"",Disc:"","Lower-latin":"","Lower–roman":"","Numbered List":"قائمة رقمية","Numbered list styles toolbar":"",Square:"","To-do List":"","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e.ar=e.ar||{};t.dictionary=Object.assign(t.dictionary||{},{"Align cell text to the bottom":"قم بمحاذاة نص الخلية للاسفل","Align cell text to the center":"قم بمحاذاة نص الخلية إلى المركز","Align cell text to the left":"قم بمحاذاة نص الخلية إلى اليسار","Align cell text to the middle":"قم بمحاذاة نص الخلية إلى المنتصف","Align cell text to the right":"قم بمحاذاة نص الخلية إلى اليمين","Align cell text to the top":"قم بمحاذاة نص الخلية إلى الأعلى","Align table to the left":"قم بمحاذاة الجدول إلى اليسار","Align table to the right":"قم بمحاذاة الجدول إلى اليمين",Alignment:"المحاذاة",Background:"الخلفية",Border:"الحدود","Cell properties":"خصائص الخلية","Center table":"قم بمحاذاة الجدول إلى المنتصف",Color:"اللون","Color picker":"",Column:"عمود",Dashed:"متقطع","Delete column":"حذف العمود","Delete row":"حذف الصف",Dimensions:"الابعاد",Dotted:"منقط",Double:"","Enter table caption":"",Groove:"","Header column":"عمود عنوان","Header row":"صف عنوان",Height:"الارتفاع","Horizontal text alignment toolbar":"شريط أدوات محاذاة النص الأفقي","Insert column left":"أدخل العمود إلى اليسار","Insert column right":"أدخل العمود إلى اليمين","Insert row above":"ادراج صف قبل","Insert row below":"ادراج صف بعد","Insert table":"إدراج جدول",Inset:"","Justify cell text":"ضبط نص الخلية","Merge cell down":"دمج الخلايا للأسفل","Merge cell left":"دمج الخلايا لليسار","Merge cell right":"دمج الخلايا لليمين","Merge cell up":"دمج الخلايا للأعلى","Merge cells":"دمج الخلايا",None:"لا شيء",Outset:"",Padding:"الحاشية",Ridge:"",Row:"صف","Select column":"حدد العمود","Select row":"حدد صفًا",Solid:"صلب","Split cell horizontally":"فصل الخلايا بشكل افقي","Split cell vertically":"فصل الخلايا بشكل عمودي",Style:"أسلوب","Table alignment toolbar":"شريط أدوات محاذاة الجدول","Table cell text alignment":"محاذاة نص خلية الجدول","Table properties":"خصائص الجدول","Table toolbar":"شريط أدوات الجدول",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':"",'The value is invalid. Try "10px" or "2em" or simply "2".':"","Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"شريط أدوات محاذاة النص العمودي",Width:"العرض"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const o=e.ar=e.ar||{};o.dictionary=Object.assign(o.dictionary||{},{"%0 of %1":"",Aquamarine:"",Black:"",Blue:"",Cancel:"إلغاء","Dim grey":"","Dropdown toolbar":"","Edit block":"","Editor toolbar":"",Green:"",Grey:"","Light blue":"","Light green":"","Light grey":"",Next:"",Orange:"",Previous:"",Purple:"",Red:"",Redo:"إعادة","Remove color":"","Restore default":"","Rich Text Editor":"معالج نصوص","Rich Text Editor, %0":"معالج نصوص، 0%",Save:"حفظ","Show more items":"",Turquoise:"",Undo:"تراجع","Upload in progress":"جاري الرفع",White:"",Yellow:""}),o.getPluralForm=function(e){return 0==e?0:1==e?1:2==e?2:e%100>=3&&e%100<=10?3:e%100>=11&&e%100<=99?4:5}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/ast.js b/core/assets/vendor/ckeditor5/translations/ast.js
new file mode 100644
index 000000000000..0fb11d5d74e8
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/ast.js
@@ -0,0 +1 @@
+!function(i){const t=i.ast=i.ast||{};t.dictionary=Object.assign(t.dictionary||{},{Bold:"Negrina",Code:"",Italic:"Cursiva",Strikethrough:"",Subscript:"",Superscript:"",Underline:""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const a=e.ast=e.ast||{};a.dictionary=Object.assign(a.dictionary||{},{"Break text":"","Centered image":"","Change image text alternative":"","Enter image caption":"","Full size image":"Imaxen a tamañu completu","Image resize list":"","Image toolbar":"","image widget":"complementu d'imaxen","In line":"",Insert:"","Insert image":"","Insert image via URL":"","Left aligned image":"",Original:"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Right aligned image":"","Side image":"Imaxen llateral","Text alternative":"",Update:"","Update image URL":"","Upload failed":"","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.ast=n.ast||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"","Edit link":"",Link:"Enllazar","Link image":"","Link URL":"URL del enllaz","Open in a new tab":"","Open link in new tab":"","This link has no URL":"",Unlink:"Desenllazar"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e.ast=e.ast||{};t.dictionary=Object.assign(t.dictionary||{},{"Bulleted List":"Llista con viñetes","Bulleted list styles toolbar":"",Circle:"",Decimal:"","Decimal with leading zero":"",Disc:"","Lower-latin":"","Lower–roman":"","Numbered List":"Llista numberada","Numbered list styles toolbar":"",Square:"","To-do List":"","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const r=e.ast=e.ast||{};r.dictionary=Object.assign(r.dictionary||{},{"%0 of %1":"",Aquamarine:"",Black:"",Blue:"",Cancel:"Encaboxar","Dim grey":"","Dropdown toolbar":"","Edit block":"","Editor toolbar":"",Green:"",Grey:"","Light blue":"","Light green":"","Light grey":"",Next:"",Orange:"",Previous:"",Purple:"",Red:"",Redo:"Refacer","Remove color":"","Restore default":"","Rich Text Editor":"Editor de testu arriquecíu","Rich Text Editor, %0":"Editor de testu arriquecíu, %0",Save:"Guardar","Show more items":"",Turquoise:"",Undo:"Desfacer",White:"",Yellow:""}),r.getPluralForm=function(e){return 1!=e}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/az.js b/core/assets/vendor/ckeditor5/translations/az.js
new file mode 100644
index 000000000000..ce43bd147f9c
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/az.js
@@ -0,0 +1 @@
+!function(n){const i=n.az=n.az||{};i.dictionary=Object.assign(i.dictionary||{},{"Align center":"Mərkəzə düzləndir","Align left":"Soldan düzləndir","Align right":"Sağdan düzləndir",Justify:"Eninə görə","Text alignment":"Mətn düzləndirməsi","Text alignment toolbar":"Mətnin düzləndirmə paneli"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(a){const i=a.az=a.az||{};i.dictionary=Object.assign(i.dictionary||{},{Bold:"Yarıqalın",Code:"Kod",Italic:"Maili",Strikethrough:"Qaralanmış",Subscript:"Alt yazı",Superscript:"Üst yazı",Underline:"Altdan xətt"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const o=i.az=i.az||{};o.dictionary=Object.assign(o.dictionary||{},{"Block quote":"Sitat bloku"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(a){const n=a.az=a.az||{};n.dictionary=Object.assign(n.dictionary||{},{"Choose heading":"Başlıqı seç",Heading:"Başlıq","Heading 1":"Başlıq 1","Heading 2":"Başlıq 2","Heading 3":"Başlıq 3","Heading 4":"Başlıq 4","Heading 5":"Başlıq 5","Heading 6":"Başlıq 6",Paragraph:"Abzas","Type or paste your content here.":"","Type your title":"Başlığınızı yazın"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.az=i.az||{};n.dictionary=Object.assign(n.dictionary||{},{"Horizontal line":"Üfüqi xətt"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.az=e.az||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"","Centered image":"Mərkəzə düzləndir","Change image text alternative":"Alternativ mətni redaktə et","Enter image caption":"Şəkil başlığı daxil edin","Full size image":"Tam ölçülü şəkili","Image resize list":"","Image toolbar":"Şəkil paneli","image widget":"Şəkil vidgetı","In line":"",Insert:"","Insert image":"Şəkili əlavə et","Insert image via URL":"","Left aligned image":"Soldan düzləndir",Original:"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Right aligned image":"Sağdan düzləndir","Side image":"Yan şəkil","Text alternative":"Alternativ mətn",Update:"","Update image URL":"","Upload failed":"Şəkili serverə yüklə","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.az=i.az||{};n.dictionary=Object.assign(n.dictionary||{},{"Decrease indent":"Boş yeri kiçilt","Increase indent":"Boş yeri böyüt"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.az=n.az||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"Yüklənə bilər","Edit link":"Linki redaktə et",Link:"Əlaqələndir","Link image":"","Link URL":"Linkin URL","Open in a new tab":"Yeni pəncərədə aç","Open link in new tab":"Linki yeni pəncərədə aç","This link has no URL":"Bu linkdə URL yoxdur",Unlink:"Linki sil"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.az=e.az||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"Markerlənmiş siyahı","Bulleted list styles toolbar":"",Circle:"",Decimal:"","Decimal with leading zero":"",Disc:"","Lower-latin":"","Lower–roman":"","Numbered List":"Nömrələnmiş siyahı","Numbered list styles toolbar":"",Square:"","To-do List":"To-do siyahı","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(o){const i=o.az=o.az||{};i.dictionary=Object.assign(i.dictionary||{},{"Remove Format":"Formatı Ləğv Et"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(l){const e=l.az=l.az||{};e.dictionary=Object.assign(e.dictionary||{},{"Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align table to the left":"","Align table to the right":"",Alignment:"",Background:"Fon",Border:"Sərhəd","Cell properties":"","Center table":"",Color:"Rəng","Color picker":"",Column:"Sütun",Dashed:"","Delete column":"Sütunları sil","Delete row":"Sətirləri sil",Dimensions:"Ölçülər",Dotted:"",Double:"","Enter table caption":"",Groove:"","Header column":"Başlıqlı sütun","Header row":"Başlıqlı sətir",Height:"Hündürlük","Horizontal text alignment toolbar":"","Insert column left":"Sola sütun əlavə et","Insert column right":"Sağa sütun əlavə et","Insert row above":"Aşağıya sətir əlavə et","Insert row below":"Yuxarıya sətir əlavə et","Insert table":"Cədvəli əlavə et",Inset:"","Justify cell text":"","Merge cell down":"Xanaları aşağı birləşdir","Merge cell left":"Xanaları sola birləşdir","Merge cell right":"Xanaları sağa birləşdir","Merge cell up":"Xanaları yuxarı birləşdir","Merge cells":"Xanaları birləşdir",None:"",Outset:"",Padding:"",Ridge:"",Row:"Sətir","Select column":"","Select row":"",Solid:"","Split cell horizontally":"Xanaları üfüqi böl","Split cell vertically":"Xanaları şaquli böl",Style:"","Table alignment toolbar":"","Table cell text alignment":"Cədvəl hüceyrəsi mətninin uyğunlaşdırılması","Table properties":"Cədvəl xüsusiyyətləri","Table toolbar":"Cədvəl paneli",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':"",'The value is invalid. Try "10px" or "2em" or simply "2".':"","Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"",Width:"Eni"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const a=e.az=e.az||{};a.dictionary=Object.assign(a.dictionary||{},{"%0 of %1":"%1-dən %0",Aquamarine:"Akvamarin",Black:"Qara",Blue:"Mavi",Cancel:"İmtina et","Dim grey":"Tünd boz","Dropdown toolbar":"Açılan paneli","Edit block":"Redaktə etmək bloku","Editor toolbar":"Redaktorun paneli",Green:"Yaşıl",Grey:"Boz","Insert paragraph after block":"","Insert paragraph before block":"","Light blue":"Açıq mavi","Light green":"Açıq yaşıl","Light grey":"Açıq boz",Next:"Növbəti",Orange:"Narıncı",Previous:"Əvvəlki",Purple:"Bənövşəyi",Red:"Qırmızı",Redo:"Təkrar et","Remove color":"Rəngi ləğv et","Restore default":"","Rich Text Editor":"Rich Text Redaktoru","Rich Text Editor, %0":"Rich Text Redaktoru, %0",Save:"Yadda saxla","Show more items":"Daha çox əşyanı göstərin",Turquoise:"Firuzəyi",Undo:"İmtina et","Upload in progress":"Yüklənir",White:"Ağ","Widget toolbar":"Vidgetin paneli",Yellow:"Sarı"}),a.getPluralForm=function(e){return 1!=e}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/bg.js b/core/assets/vendor/ckeditor5/translations/bg.js
new file mode 100644
index 000000000000..097c0f4f9771
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/bg.js
@@ -0,0 +1 @@
+!function(i){const n=i.bg=i.bg||{};n.dictionary=Object.assign(n.dictionary||{},{Bold:"Удебелен",Code:"",Italic:"Курсив",Strikethrough:"",Subscript:"",Superscript:"",Underline:""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.bg=i.bg||{};n.dictionary=Object.assign(n.dictionary||{},{"Block quote":"Цитат"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const e=n.bg=n.bg||{};e.dictionary=Object.assign(e.dictionary||{},{"Choose heading":"Избери заглавие",Heading:"Заглавие","Heading 1":"Заглавие 1","Heading 2":"Заглавие 2","Heading 3":"Заглавие 3","Heading 4":"Заглавие 4","Heading 5":"Заглавие 5","Heading 6":"Заглавие 6",Paragraph:"Параграф","Type or paste your content here.":"","Type your title":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.bg=e.bg||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"","Centered image":"","Change image text alternative":"","Enter image caption":"","Full size image":"","Image resize list":"","Image toolbar":"","image widget":"Компонент за изображение","In line":"",Insert:"","Insert image":"Вмъкни изображение","Insert image via URL":"","Left aligned image":"",Original:"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Right aligned image":"","Side image":"","Text alternative":"",Update:"","Update image URL":"","Upload failed":"","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.bg=n.bg||{};i.dictionary=Object.assign(i.dictionary||{},{"Decrease indent":"Намали отстъпа","Increase indent":"Увеличи отстъпа"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.bg=n.bg||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"Изтегляне","Edit link":"Редакция на линк",Link:"Линк","Link image":"","Link URL":"Уеб адрес на линка","Open in a new tab":"Отваряне в нов раздел","Open link in new tab":"Отваряне на линк в нов раздел","This link has no URL":"Този линк няма уеб адрес",Unlink:"Премахване на линка"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.bg=e.bg||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"Водещи символи","Bulleted list styles toolbar":"",Circle:"",Decimal:"","Decimal with leading zero":"",Disc:"","Lower-latin":"","Lower–roman":"","Numbered List":"Номериране","Numbered list styles toolbar":"",Square:"","To-do List":"","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e.bg=e.bg||{};t.dictionary=Object.assign(t.dictionary||{},{"Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align table to the left":"","Align table to the right":"",Alignment:"",Background:"",Border:"","Cell properties":"","Center table":"",Color:"","Color picker":"",Column:"Колона",Dashed:"","Delete column":"Изтриване на колона","Delete row":"Изтриване на ред",Dimensions:"",Dotted:"",Double:"","Enter table caption":"",Groove:"","Header column":"Заглавна колона","Header row":"Заглавен ред",Height:"","Horizontal text alignment toolbar":"","Insert column left":"Вмъкни колона отляво","Insert column right":"Вмъкни колона отдясно","Insert row above":"Вмъкни ред отгоре","Insert row below":"Вмъкни ред отдолу","Insert table":"Вмъкни таблица",Inset:"","Justify cell text":"","Merge cell down":"Обединяване на клетка надолу","Merge cell left":"Обединяване на клетка отляво","Merge cell right":"Обединяване на клетка отдясно","Merge cell up":"Обединяване на клетка отгоре","Merge cells":"Обединяване на клетки",None:"",Outset:"",Padding:"",Ridge:"",Row:"Ред","Select column":"","Select row":"",Solid:"","Split cell horizontally":"Разделяне на клетки хоризонтално","Split cell vertically":"Разделяне на клетки вертикално",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':"",'The value is invalid. Try "10px" or "2em" or simply "2".':"","Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"",Width:""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(o){const e=o.bg=o.bg||{};e.dictionary=Object.assign(e.dictionary||{},{"%0 of %1":"",Cancel:"Отказ",Redo:"Повтори","Remove color":"","Restore default":"",Save:"Запазване","Show more items":"",Undo:"Отмени","Upload in progress":"Качването е в процес"}),e.getPluralForm=function(o){return 1!=o}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/ca.js b/core/assets/vendor/ckeditor5/translations/ca.js
new file mode 100644
index 000000000000..7f89e8f5476b
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/ca.js
@@ -0,0 +1 @@
+!function(i){const n=i.ca=i.ca||{};n.dictionary=Object.assign(n.dictionary||{},{"Align center":"Alineació centre","Align left":"Alineació esquerra","Align right":"Alineació dreta",Justify:"Justificar","Text alignment":"Alineació text","Text alignment toolbar":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const t=i.ca=i.ca||{};t.dictionary=Object.assign(t.dictionary||{},{Bold:"Negreta",Code:"Codi",Italic:"Cursiva",Strikethrough:"Marcat",Subscript:"",Superscript:"",Underline:"Subrallat"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(c){const i=c.ca=c.ca||{};i.dictionary=Object.assign(i.dictionary||{},{"Block quote":"Cita de bloc"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(a){const e=a.ca=a.ca||{};e.dictionary=Object.assign(e.dictionary||{},{"Choose heading":"Escull capçalera",Heading:"Capçalera","Heading 1":"Capçalera 1","Heading 2":"Capçalera 2","Heading 3":"Capçalera 3","Heading 4":"","Heading 5":"","Heading 6":"",Paragraph:"Pàrraf","Type or paste your content here.":"","Type your title":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(o){const e=o.ca=o.ca||{};e.dictionary=Object.assign(e.dictionary||{},{"%0 of %1":"",Cancel:"Cancel·lar","Remove color":"","Restore default":"",Save:"Desar","Show more items":""}),e.getPluralForm=function(o){return 1!=o}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/cs.js b/core/assets/vendor/ckeditor5/translations/cs.js
new file mode 100644
index 000000000000..68194e32c060
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/cs.js
@@ -0,0 +1 @@
+!function(n){const t=n.cs=n.cs||{};t.dictionary=Object.assign(t.dictionary||{},{"Align center":"Zarovnat na střed","Align left":"Zarovnat vlevo","Align right":"Zarovnat vpravo",Justify:"Zarovnat do bloku","Text alignment":"Zarovnání textu","Text alignment toolbar":"Panel nástrojů zarovnání textu"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.cs=n.cs||{};i.dictionary=Object.assign(i.dictionary||{},{Bold:"Tučné",Code:"Kódový blok",Italic:"Kurzíva",Strikethrough:"Přeškrtnuté",Subscript:"Dolní index",Superscript:"Horní index",Underline:"Podtržené"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(c){const i=c.cs=c.cs||{};i.dictionary=Object.assign(i.dictionary||{},{"Block quote":"Citace"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const a=e.cs=e.cs||{};a.dictionary=Object.assign(a.dictionary||{},{"Choose heading":"Zvolte nadpis",Heading:"Nadpis","Heading 1":"Nadpis 1","Heading 2":"Nadpis 2","Heading 3":"Nadpis 3","Heading 4":"Nadpis 4","Heading 5":"Nadpis 5","Heading 6":"Nadpis 6",Paragraph:"Odstavec","Type or paste your content here.":"Zde zadejte nebo vložte obsah.","Type your title":"Sem zadejte název"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const o=n.cs=n.cs||{};o.dictionary=Object.assign(o.dictionary||{},{"Horizontal line":"Vodorovná čára"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.cs=e.cs||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"","Centered image":"Obrázek zarovnaný na střed","Change image text alternative":"Změnit alternativní text obrázku","Enter image caption":"Zadejte popis obrázku","Full size image":"Obrázek v plné velikosti","Image resize list":"Seznam možností změny velikosti","Image toolbar":"Panel nástrojů obrázku","image widget":"ovládací prvek obrázku","In line":"",Insert:"Vložit","Insert image":"Vložit obrázek","Insert image via URL":"Vložit obrázek pomocí URL","Left aligned image":"Obrázek zarovnaný vlevo",Original:"Originální","Resize image":"Změnit velikost","Resize image to %0":"Změnit velikost na %0","Resize image to the original size":"Změnit velikost na původní velikost","Right aligned image":"Obrázek zarovnaný vpravo","Side image":"Postranní obrázek","Text alternative":"Alternativní text",Update:"Aktualizovat","Update image URL":"Aktualizovat URL obrázku","Upload failed":"Nahrání selhalo","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.cs=n.cs||{};i.dictionary=Object.assign(i.dictionary||{},{"Decrease indent":"Zmenšit odsazení","Increase indent":"Zvětšit odsazení"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(a){const n=a.cs=a.cs||{};n.dictionary=Object.assign(n.dictionary||{},{"Choose language":"Vybrat jazyk",Language:"Jazyk","Remove language":"Odstranit jazyk"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const a=n.cs=n.cs||{};a.dictionary=Object.assign(a.dictionary||{},{Downloadable:"Ke stažení","Edit link":"Upravit odkaz",Link:"Odkaz","Link image":"Adresa obrázku","Link URL":"URL odkazu","Open in a new tab":"Otevřít v nové kartě","Open link in new tab":"Otevřít odkaz v nové kartě","This link has no URL":"Tento odkaz nemá žádnou URL",Unlink:"Odstranit odkaz"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.cs=e.cs||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"Odrážky","Bulleted list styles toolbar":"Panel seznamu s odrážkami",Circle:"Kruh",Decimal:"Čísla","Decimal with leading zero":"Čísla s nulou na začátku",Disc:"Plný kruh","Lower-latin":"Malá písmena","Lower–roman":"Malé římské čísla","Numbered List":"Číslování","Numbered list styles toolbar":"Panel se styly číslovaného seznamu",Square:"Čtverec","To-do List":"Seznam úkolů","Toggle the circle list style":"Přepnout na seznam s kruhovým označením","Toggle the decimal list style":"Přepnout na číselný seznam","Toggle the decimal with leading zero list style":"Přepnout na číselný seznam s nulou na začátku","Toggle the disc list style":"Přepnout na seznam s označením plného kruhu","Toggle the lower–latin list style":"Přepnout na seznam s malými písmeny","Toggle the lower–roman list style":"Přepnout na seznam s malými římskými čísly","Toggle the square list style":"Přepnout na seznam se čtvercovým označením","Toggle the upper–latin list style":"Přepnout na seznam s velkými písmeny","Toggle the upper–roman list style":"Přepnout na seznam s velkými římskými čísly","Upper-latin":"Velká písmena","Upper-roman":"Velké římské čísla"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const o=n.cs=n.cs||{};o.dictionary=Object.assign(o.dictionary||{},{"Remove Format":"Odstranit formátování"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(t){const e=t.cs=t.cs||{};e.dictionary=Object.assign(e.dictionary||{},{"Align cell text to the bottom":"Zarovnat text buňky dolů","Align cell text to the center":"Zarovnat text buňky na střed","Align cell text to the left":"Zarovnat text buňky doleva","Align cell text to the middle":"Zarovnat text buňky na střed","Align cell text to the right":"Zarovnat text buňky doprava","Align cell text to the top":"Zarovnat text buňky nahoru","Align table to the left":"Zarovnat tabulku doleva","Align table to the right":"Zarovnat tabulku doprava",Alignment:"Zarovnání",Background:"Pozadí",Border:"Okraj","Cell properties":"Vlastnosti buňky","Center table":"Centrovat tabulku",Color:"Barva","Color picker":"Vybrat barvu",Column:"Sloupec",Dashed:"Čárkovaná","Delete column":"Smazat sloupec","Delete row":"Smazat řádek",Dimensions:"Rozměry",Dotted:"Tečkovaná",Double:"Dvojitá","Enter table caption":"",Groove:"Drážkovaná","Header column":"Sloupec záhlaví","Header row":"Řádek záhlaví",Height:"Výška","Horizontal text alignment toolbar":"Horizontální zarovnání textu v panelu","Insert column left":"Vložit sloupec vlevo","Insert column right":"Vložit sloupec vpravo","Insert row above":"Vložit řádek před","Insert row below":"Vložit řádek pod","Insert table":"Vložit tabulku",Inset:"Vložená zevnitř","Justify cell text":"Zarovnat text buňky z obou stran","Merge cell down":"Sloučit s buňkou pod","Merge cell left":"Sloučit s buňkou vlevo","Merge cell right":"Sloučit s buňkou vpravo","Merge cell up":"Sloučit s buňkou nad","Merge cells":"Sloučit buňky",None:"Žádná",Outset:"Vložená zvenku",Padding:"Vnitřní okraj",Ridge:"Rámovaná",Row:"Řádek","Select column":"Vybrat sloupec","Select row":"Vybrat řádek",Solid:"Plná","Split cell horizontally":"Rozdělit buňky horizontálně","Split cell vertically":"Rozdělit buňky vertikálně",Style:"Styl","Table alignment toolbar":"Panel zarovnání tabulky","Table cell text alignment":"Zarovnání textu buňky tabulky","Table properties":"Vlastnosti tabulky","Table toolbar":"Panel nástrojů tabulky",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':'Barva má nesprávný formát. Zkuste "#FF0000", "rgb(255,0,0)" nebo "red".','The value is invalid. Try "10px" or "2em" or simply "2".':'Hodnota je nesprávná. Zkuste "10px", "2em" nebo jednoduše "2".',"Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"Vertikální zarovnání textu v panelu",Width:"Šířka"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(a){const t=a.cs=a.cs||{};t.dictionary=Object.assign(t.dictionary||{},{"Almost equal to":"Částečně rovný",Angle:"Úhel","Approximately equal to":"Aproximace","Asterisk operator":"Hvězdička / násobení","Austral sign":"Znak Austral","back with leftwards arrow above":"šipka zpět","Bitcoin sign":"Měna Bitcoin","Cedi sign":"Znak Cedi","Cent sign":"Znak cent","Character categories":"Kategorie znaků","Colon sign":"dvojtečka","Contains as member":"Obsahuje prvek","Copyright sign":"Copyright","Cruzeiro sign":"Měna Cruzeiro","Currency sign":"Znak měny","Degree sign":"Znak stupeň","Division sign":"Dělení","Dollar sign":"Znak Dolar","Dong sign":"Znak Dong","Double dagger":"Dvojkříž","Double exclamation mark":"Dvojitý vykřičník","Double low-9 quotation mark":"Dvojitá spodní uvozovka","Double question mark":"Dvojitý otazník","downwards arrow to bar":"šipka dolů do svislé čáry","downwards dashed arrow":"přerušovaná šipka dolů","downwards double arrow":"dvojitá šipka dolů","Drachma sign":"Znak Drachma","Element of":"Patří / Je součástí","Em dash":"Dlouhá pomlčka","Empty set":"Prázdná množina","En dash":"Pomlčka","end with leftwards arrow above":"šipka konec","Euro sign":"Znak Euro","Euro-currency sign":"Mena Euro","Exclamation question mark":"Vykřičník a otazník","For all":"Pro všechny prvky v množině","Fraction slash":"Lomítko / Dělení","French franc sign":"Měna Francouzský Frank","German penny sign":"Německá penny","Greater-than or equal to":"Větší nebo roven","Greater-than sign":"Větší než","Guarani sign":"Znak Guarani","Horizontal ellipsis":"Tečky","Hryvnia sign":"Znak Hryvnia","Identical to":"Identický k","Indian rupee sign":"Znak Indická rupia",Infinity:"Nekonečno",Integral:"Integrál",Intersection:"Průsečík / Průnik","Inverted exclamation mark":"Obrácený vykřičník","Inverted question mark":"Obrácený otazník","Kip sign":"Znak Kip","Latin capital letter a with breve":"Latinské velké písmeno a s háčkem","Latin capital letter a with macron":"Latinské velké písmeno a s čárou","Latin capital letter a with ogonek":"Latinské velké písmeno a s háčkem","Latin capital letter c with acute":"Latinské velké písmeno c s čárkou","Latin capital letter c with caron":"Latinské veľké písmeno c s mäkčeňom","Latin capital letter c with circumflex":"Latinské velké písmeno c s obráceným háčkem","Latin capital letter c with dot above":"Latinské velké písmeno c s tečkou nad znakem","Latin capital letter d with caron":"Latinské velké písmeno d s háčkem","Latin capital letter d with stroke":"Latinské velké písmeno d s přeškrtnutím","Latin capital letter e with breve":"Latinské velké písmeno e s háčkem","Latin capital letter e with caron":"Latinské velké písmeno e s háčkem","Latin capital letter e with dot above":"Latinské velké písmeno e s tečkou nad znakem","Latin capital letter e with macron":"Latinské velké písmeno e s čárou","Latin capital letter e with ogonek":"Latinské velké písmeno e s háčkem","Latin capital letter eng":"Latinské velké písmeno Eng","Latin capital letter g with breve":"Latinské velké písmeno g s háčkem","Latin capital letter g with cedilla":"Latinské velké písmeno g s háčkem","Latin capital letter g with circumflex":"Latinské velké písmeno g s obráceným háčkem","Latin capital letter g with dot above":"Latinské velké písmeno g s tečkou nad znakem","Latin capital letter h with circumflex":"Latinské velké písmeno h s obráceným háčkem","Latin capital letter h with stroke":"Latinské velké písmeno h s přeškrtnutím","Latin capital letter i with breve":"Latinské velké písmeno i s háčkem","Latin capital letter i with dot above":"Latinské velké písmeno i s tečkou nad znakem","Latin capital letter i with macron":"Latinské velké písmeno i s čárou","Latin capital letter i with ogonek":"Latinské velké písmeno i s háčkem","Latin capital letter i with tilde":"Latinské velké písmeno i s vlnovkou","Latin capital letter j with circumflex":"Latinské velké písmeno j s obráceným háčkem","Latin capital letter k with cedilla":"Latinské velké písmeno k s háčkem","Latin capital letter l with acute":"Latinské velké písmeno l s čárkou","Latin capital letter l with caron":"Latinské velké písmeno l s háčkem","Latin capital letter l with cedilla":"Latinské velké písmeno l s háčkem","Latin capital letter l with middle dot":"Latinské velké písmeno l s tečkou uprostřed","Latin capital letter l with stroke":"Latinské velké písmeno l s přeškrtnutím","Latin capital letter n with acute":"Latinské velké písmeno n s čárkou","Latin capital letter n with caron":"Latinské velké písmeno n s háčkem","Latin capital letter n with cedilla":"Latinské velké písmeno n s háčkem","Latin capital letter o with breve":"Latinské velké písmeno o s háčkem","Latin capital letter o with double acute":"Latinské velké písmeno o s čárkou","Latin capital letter o with macron":"Latinské velké písmeno o s čárou","Latin capital letter r with acute":"Latinské velké písmeno r s čárkou","Latin capital letter r with caron":"Latinské velké písmeno r s háčkem","Latin capital letter r with cedilla":"Latinské velké písmeno r s háčkem","Latin capital letter s with acute":"Latinské velké písmeno s s čárkou","Latin capital letter s with caron":"Latinské velké písmeno s s háčkem","Latin capital letter s with cedilla":"Latinské velké písmeno s s háčkem","Latin capital letter s with circumflex":"Latinské velké písmeno s s obráceným háčkem","Latin capital letter t with caron":"Latinské velké písmeno t s háčkem","Latin capital letter t with cedilla":"Latinské velké písmeno t s háčkem","Latin capital letter t with stroke":"Latinské velké písmeno t s přeškrtnutím","Latin capital letter u with breve":"Latinské velké písmeno u s háčkem","Latin capital letter u with double acute":"Latinské velké písmeno u s dvojitým akcentu","Latin capital letter u with macron":"Latinské velké písmeno u s čárou","Latin capital letter u with ogonek":"Latinské velké písmeno u s háčkem","Latin capital letter u with ring above":"Latinské velké písmeno u s kroužkem nad znakem","Latin capital letter u with tilde":"Latinské velké písmeno u s vlnovkou","Latin capital letter w with circumflex":"Latinské velké písmeno w s obráceným háčkem","Latin capital letter y with circumflex":"Latinské velké písmeno y s obráceným háčkem","Latin capital letter y with diaeresis":"Latinské velké písmeno y s dvojtečkou nad znakem","Latin capital letter z with acute":"Latinské velké písmeno z s čárkou","Latin capital letter z with caron":"Latinské velké písmeno z s háčkem","Latin capital letter z with dot above":"Latinské velké písmeno z s tečkou nad znakem","Latin capital ligature ij":"Latinský velký znak ligatury ij","Latin capital ligature oe":"Latinský velký znak ligatury oe","Latin small letter a with breve":"Latinské malé písmeno a s háčkem","Latin small letter a with macron":"Latinské malé písmeno a s čárou","Latin small letter a with ogonek":"Latinské malé písmeno a s háčkem","Latin small letter c with acute":"Latinské malé písmeno c s čárkou","Latin small letter c with caron":"Latinské malé písmeno c s háčkem","Latin small letter c with circumflex":"Latinské malé písmeno c s obráceným háčkem","Latin small letter c with dot above":"Latinské malé písmeno c s tečkou nad znakem","Latin small letter d with caron":"Latinské malé písmeno d s háčkem","Latin small letter d with stroke":"Latinské malé písmeno d s přeškrtnutím","Latin small letter dotless i":"Latinské malé písmeno i bez tečky","Latin small letter e with breve":"Latinské malé písmeno e s háčkem","Latin small letter e with caron":"Latinské malé písmeno e s háčkem","Latin small letter e with dot above":"Latinské malé písmeno e s tečkou nad znakem","Latin small letter e with macron":"Latinské malé písmeno e s čárou","Latin small letter e with ogonek":"Latinské malé písmeno e s háčkem","Latin small letter eng":"Latinské malé písmeno Eng","Latin small letter f with hook":"Funkce","Latin small letter g with breve":"Latinské malé písmeno g s háčkem","Latin small letter g with cedilla":"Latinské malé písmeno g s háčkem","Latin small letter g with circumflex":"Latinské malé písmeno g s obráceným háčkem","Latin small letter g with dot above":"Latinské malé písmeno g s tečkou nad znakem","Latin small letter h with circumflex":"Latinské malé písmeno h s obráceným háčkem","Latin small letter h with stroke":"Latinské malé písmeno h s přeškrtnutím","Latin small letter i with breve":"Latinské malé písmeno i s háčkem","Latin small letter i with macron":"Latinské malé písmeno i s čárou","Latin small letter i with ogonek":"Latinské malé písmeno i s háčkem","Latin small letter i with tilde":"Latinské malé písmeno i s vlnovkou","Latin small letter j with circumflex":"Latinské malé písmeno j s obráceným háčkem","Latin small letter k with cedilla":"Latinské malé písmeno k s háčkem","Latin small letter kra":"Latinský malý znak Kra","Latin small letter l with acute":"Latinské malé písmeno l s čárkou","Latin small letter l with caron":"Latinské malé písmeno l s háčkem","Latin small letter l with cedilla":"Latinské malé písmeno l s háčkem","Latin small letter l with middle dot":"Latinské malé písmeno l s tečkou uprostřed","Latin small letter l with stroke":"Latinské malé písmeno l s přeškrtnutím","Latin small letter long s":"Malé dlouhé písmeno s","Latin small letter n preceded by apostrophe":"Latinské malé písmeno n s apostrofem","Latin small letter n with acute":"Latinské malé písmeno n s čárkou","Latin small letter n with caron":"Latinské malé písmeno n s háčkem","Latin small letter n with cedilla":"Latinské malé písmeno n s háčkem","Latin small letter o with breve":"Latinské malé písmeno o s háčkem","Latin small letter o with double acute":"Latinské malé písmeno o s čárkou","Latin small letter o with macron":"Latinské malé písmeno o s čárou","Latin small letter r with acute":"Latinské malé písmeno r s čárkou","Latin small letter r with caron":"Latinské malé písmeno r s háčkem","Latin small letter r with cedilla":"Latinské malé písmeno r s háčkem","Latin small letter s with acute":"Latinské malé písmeno s s čárkou","Latin small letter s with caron":"Latinské malé písmeno s s háčkem","Latin small letter s with cedilla":"Latinské malé písmeno s s háčkem","Latin small letter s with circumflex":"Latinské malé písmeno s s obráceným háčkem","Latin small letter t with caron":"Latinské malé písmeno t s háčkem","Latin small letter t with cedilla":"Latinské malé písmeno t s háčkem","Latin small letter t with stroke":"Latinské malé písmeno t s přeškrtnutím","Latin small letter u with breve":"Latinské malé písmeno u s háčkem","Latin small letter u with double acute":"Latinské malé písmeno u s dvojitým akcentu","Latin small letter u with macron":"Latinské malé písmeno o s čárou","Latin small letter u with ogonek":"Latinské malé písmeno u s háčkem","Latin small letter u with ring above":"Latinské malé písmeno u s kroužkem nad znakem","Latin small letter u with tilde":"Latinské malé písmeno u s vlnovkou","Latin small letter w with circumflex":"Latinské malé písmeno w s obráceným háčkem","Latin small letter y with circumflex":"Latinské malé písmeno y s obráteným mäkčeňom","Latin small letter z with acute":"Latinské malé písmeno z s čárkou","Latin small letter z with caron":"Malé písmeno s z háčkem","Latin small letter z with dot above":"Latinské malé písmeno z s tečkou nad znakem","Latin small ligature ij":"Latinský malý znak ligatury ij","Latin small ligature oe":"Latinský malý znak ligatury oe","Left double quotation mark":"Levá dvojitá uvozovka","Left single quotation mark":"Levá uvozovka","Left-pointing double angle quotation mark":"Dvojitá šipka ukazující do leva","leftwards arrow to bar":"šipka doleva do svislé čáry","leftwards dashed arrow":"přerušovaná šipka doleva","leftwards double arrow":"dvojitá šipka doleva","Less-than or equal to":"Menší nebo roven","Less-than sign":"Menší než","Lira sign":"Měna Lira","Livre tournois sign":"Znak Livre tournois","Logical and":"Logický AND","Logical or":"Logický OR",Macron:"Horní čára","Manat sign":"Znak Manat","Mill sign":"Znak Mill","Minus sign":"Znak mínus","Multiplication sign":"Násobení","N-ary product":"Znak cyklického násobení","N-ary summation":"Znak cyklického sčítání",Nabla:"Nabla","Naira sign":"Znak Naira","New sheqel sign":"Nový znak šekel","Nordic mark sign":"Znak Nórska marka","Not an element of":"Nepatří / Není součástí","Not equal to":"Nerovná se","Not sign":"Není rovný","on with exclamation mark with left right arrow above":"ON s vykřičníkem se šipkou doleva doprava nahoru",Overline:"Přeškrtnutí","Paragraph sign":"Odstavec","Partial differential":"Parciální diference","Per mille sign":"Promile","Per ten thousand sign":"Na deset tisíc","Peseta sign":"Znak Peseta","Peso sign":"Znak Peso","Plus-minus sign":"Znak plus-minus","Pound sign":"Znak Libra","Proportional to":"Úměrný k","Question exclamation mark":"Otazník a vykřičník","Registered sign":"Registrovaný","Reversed paragraph sign":"Obrácený znak odstavce","Right double quotation mark":"Pravá dvojitá uvozovka","Right single quotation mark":"Pravá uvozovka","Right-pointing double angle quotation mark":"Dvojitá šipka ukazující do prava","rightwards arrow to bar":"šipka doprava do svislé čáry","rightwards dashed arrow":"čárkovaná šipka doprava","rightwards double arrow":"dvojitá šipka doprava","Ruble sign":"Znak Ruble","Rupee sign":"Znak Rupee","Section sign":"Sekce","Single left-pointing angle quotation mark":"Šipka ukazující do leva","Single low-9 quotation mark":"Spodní uvozovka","Single right-pointing angle quotation mark":"Šipka ukazující do prava","soon with rightwards arrow above":"brzy se šipkou doprava nahoru","Special characters":"Speciální znaky","Spesmilo sign":"Znak Spesmilo","Square root":"Odmocnina","Tenge sign":"Znak Tenge","There exists":"Existuje v množině","Tilde operator":"Vlnovka","top with upwards arrow above":"TOP se šipkou nahoru","Trade mark sign":"Ochranná známka","Tugrik sign":"Znak Tugrik","Turkish lira sign":"Znak Turecká líra","Two dot leader":"Horizontální dvojtečka",Union:"Sjednocení","up down arrow with base":"Šipka nahoru-dolů od základny","upwards arrow to bar":"šipka nahoru do svislé čáry","upwards dashed arrow":"čárkovaná šipka nahoru","upwards double arrow":"dvojitá šipka nahoru","Vulgar fraction one half":"Polovina","Vulgar fraction one quarter":"Jedna čtvrtina","Vulgar fraction three quarters":"Tři čtvrtiny","Won sign":"Znak Won","Yen sign":"Znak Jen"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const o=e.cs=e.cs||{};o.dictionary=Object.assign(o.dictionary||{},{"%0 of %1":"%0 z %1",Aquamarine:"Akvamarínová",Black:"Černá",Blue:"Modrá",Cancel:"Zrušit","Dim grey":"Tmavě šedá","Dropdown toolbar":"Rozbalovací panel nástrojů","Edit block":"Upravit blok","Editor toolbar":"Panel nástrojů editoru",Green:"Zelená",Grey:"Šedá","Insert paragraph after block":"Vložte odstavec za blok","Insert paragraph before block":"Vložte odstavec před blok","Light blue":"Světle modrá","Light green":"Světle zelená","Light grey":"Světle šedá",Next:"Další",Orange:"Oranžová",Previous:"Předchozí",Purple:"Fialová",Red:"Červená",Redo:"Znovu","Remove color":"Odstranit barvu","Restore default":"","Rich Text Editor":"Textový editor","Rich Text Editor, %0":"Textový editor, %0",Save:"Uložit","Select all":"Vybrat vše","Show more items":"Zobrazit další položky",Turquoise:"Tyrkysová",Undo:"Zpět","Upload in progress":"Probíhá nahrávání",White:"Bílá","Widget toolbar":"Panel nástrojů ovládacího prvku",Yellow:"Žlutá"}),o.getPluralForm=function(e){return 1==e&&e%1==0?0:e>=2&&e<=4&&e%1==0?1:e%1!=0?2:3}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/da.js b/core/assets/vendor/ckeditor5/translations/da.js
new file mode 100644
index 000000000000..80ca5205ea11
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/da.js
@@ -0,0 +1 @@
+!function(t){const n=t.da=t.da||{};n.dictionary=Object.assign(n.dictionary||{},{"Align center":"Justér center","Align left":"Justér venstre","Align right":"Justér højre",Justify:"Justér","Text alignment":"Tekstjustering","Text alignment toolbar":"Tekstjustering værktøjslinje"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(t){const e=t.da=t.da||{};e.dictionary=Object.assign(e.dictionary||{},{Bold:"Fed",Code:"Kode",Italic:"Kursiv",Strikethrough:"Gennemstreg",Subscript:"Sænket skrift",Superscript:"Hævet skrift",Underline:"Understreget"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const o=i.da=i.da||{};o.dictionary=Object.assign(o.dictionary||{},{"Block quote":"Blot citat"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const e=i.da=i.da||{};e.dictionary=Object.assign(e.dictionary||{},{"Choose heading":"Vælg overskrift",Heading:"Overskrift","Heading 1":"Overskrift 1","Heading 2":"Overskrift 2","Heading 3":"Overskrift 3","Heading 4":"Overskrift 4","Heading 5":"Overskrift 5","Heading 6":"Overskrift 6",Paragraph:"Afsnit","Type or paste your content here.":"Skriv eller indsæt dit indhold her.","Type your title":"Skriv din titel"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.da=i.da||{};n.dictionary=Object.assign(n.dictionary||{},{"Horizontal line":"Horisontal linje"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.da=e.da||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"","Centered image":"Centreret billede","Change image text alternative":"Skift alternativ billedtekst","Enter image caption":"Indtast billedoverskrift","Full size image":"Fuld billedstørrelse","Image resize list":"","Image toolbar":"Billedværktøjslinje","image widget":"billed widget","In line":"",Insert:"","Insert image":"Indsæt billede","Insert image via URL":"","Left aligned image":"Venstrestillet billede",Original:"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Right aligned image":"Højrestillet billede","Side image":"Sidebillede","Text alternative":"Alternativ tekst",Update:"","Update image URL":"","Upload failed":"Upload fejlede","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.da=n.da||{};i.dictionary=Object.assign(i.dictionary||{},{"Decrease indent":"Formindsk indrykning","Increase indent":"Forøg indrykning"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.da=n.da||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"Kan downloades","Edit link":"Redigér link",Link:"Link","Link image":"","Link URL":"Link URL","Open in a new tab":"Åben i ny fane","Open link in new tab":"Åben link i ny fane","This link has no URL":"Dette link har ingen URL",Unlink:"Fjern link"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.da=e.da||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"Punktopstilling","Bulleted list styles toolbar":"",Circle:"",Decimal:"","Decimal with leading zero":"",Disc:"","Lower-latin":"","Lower–roman":"","Numbered List":"Opstilling med tal","Numbered list styles toolbar":"",Square:"","To-do List":"To-do liste","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const o=n.da=n.da||{};o.dictionary=Object.assign(o.dictionary||{},{"Remove Format":"Fjern format"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e.da=e.da||{};t.dictionary=Object.assign(t.dictionary||{},{"Align cell text to the bottom":"Justér tekstcelle til bunden","Align cell text to the center":"Justér tekstcelle centreret","Align cell text to the left":"Justér tekstcelle til venstre","Align cell text to the middle":"Justér tekstcelle til midten","Align cell text to the right":"Justér tekstcelle til højre","Align cell text to the top":"Justér tekstcelle til top","Align table to the left":"Justér tabel til venstre","Align table to the right":"Justér tabel til højre",Alignment:"Justering",Background:"Baggrund",Border:"Ramme","Cell properties":"Celleegenskaber","Center table":"Centrér tabel",Color:"Farve","Color picker":"",Column:"Kolonne",Dashed:"Stiplet (streg)","Delete column":"Slet kolonne","Delete row":"Slet række",Dimensions:"Dimensioner",Dotted:"Stiplet (prik)",Double:"Dobbel","Enter table caption":"",Groove:"Not","Header column":"Headerkolonne","Header row":"Headerrække",Height:"Højde","Horizontal text alignment toolbar":"Horisontal tekstjustering værktøjslinje","Insert column left":"Indsæt kolonne venstre","Insert column right":"Indsæt kolonne højre","Insert row above":"Indsæt header over","Insert row below":"Indsæt header under","Insert table":"Indsæt tabel",Inset:"Forsænket","Justify cell text":"Justér tekstcelle","Merge cell down":"Flet celler ned","Merge cell left":"Flet celler venstre","Merge cell right":"Flet celler højre","Merge cell up":"Flet celler op","Merge cells":"Flet celler",None:"Ingen",Outset:"Fra starten",Padding:"Fyld",Ridge:"Kam",Row:"Række","Select column":"","Select row":"",Solid:"Massiv","Split cell horizontally":"Del celle horisontalt","Split cell vertically":"Del celle vertikalt",Style:"Stil","Table alignment toolbar":"Tabeljustering værktøjslinje","Table cell text alignment":"Tabelcelle tekstjustering","Table properties":"Tabelegenskaber","Table toolbar":"Tabel værktøjslinje",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':'Farven er ugyldig. Prøv "#FF0000" eller "rgb(255,0,0)" eller "red".','The value is invalid. Try "10px" or "2em" or simply "2".':'Værdien er ugyldig. Prøv "10px" eller "2em" eller ganske enkelt "2".',"Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"Vertikal tekstjustering værktøjslinje",Width:"Bredde"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(r){const e=r.da=r.da||{};e.dictionary=Object.assign(e.dictionary||{},{"%0 of %1":"%0 af %1",Aquamarine:"Marineblå",Black:"Sort",Blue:"Blå",Cancel:"Annullér","Dim grey":"Dunkel grå","Dropdown toolbar":"Dropdown værktøjslinje","Edit block":"Redigér blok","Editor toolbar":"Editor værktøjslinje",Green:"Grøn",Grey:"Grå","Insert paragraph after block":"","Insert paragraph before block":"","Light blue":"Lys blå","Light green":"Lys grøn","Light grey":"Lys grå",Next:"Næste",Orange:"Orange",Previous:"Forrige",Purple:"Lilla",Red:"Rød",Redo:"Gentag","Remove color":"Fjern farve","Restore default":"","Rich Text Editor":"Wysiwyg editor","Rich Text Editor, %0":"Wysiwyg editor, %0",Save:"Gem","Show more items":"Vis flere emner",Turquoise:"Turkis",Undo:"Fortryd","Upload in progress":"Upload i gang",White:"Hvid","Widget toolbar":"Widget værktøjslinje",Yellow:"Gyl"}),e.getPluralForm=function(r){return 1!=r}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/de-ch.js b/core/assets/vendor/ckeditor5/translations/de-ch.js
new file mode 100644
index 000000000000..ed1c2600d396
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/de-ch.js
@@ -0,0 +1 @@
+!function(t){const i=t["de-ch"]=t["de-ch"]||{};i.dictionary=Object.assign(i.dictionary||{},{"Align center":"Zentriert","Align left":"Linksbündig","Align right":"Rechtsbündig",Justify:"Blocksatz","Text alignment":"Textausrichtung","Text alignment toolbar":"Textausrichtung Werkzeugleiste"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e["de-ch"]=e["de-ch"]||{};t.dictionary=Object.assign(t.dictionary||{},{Bold:"Fett",Code:"Code",Italic:"Kursiv",Strikethrough:"Durchgestrichen",Subscript:"Tiefgestellt",Superscript:"Hochgestellt",Underline:"Unterstrichen"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(c){const i=c["de-ch"]=c["de-ch"]||{};i.dictionary=Object.assign(i.dictionary||{},{"Block quote":"Blockzitat"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e["de-ch"]=e["de-ch"]||{};i.dictionary=Object.assign(i.dictionary||{},{"Choose heading":"Überschrift auswählen",Heading:"Überschrift","Heading 1":"Überschrift 1","Heading 2":"Überschrift 2","Heading 3":"Überschrift 3","Heading 4":"Überschrift 4","Heading 5":"Überschrift 5","Heading 6":"Überschrift 6",Paragraph:"Absatz","Type or paste your content here.":"Hier Inhalt einfügen.","Type your title":"Titel eingeben"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i["de-ch"]=i["de-ch"]||{};n.dictionary=Object.assign(n.dictionary||{},{"Horizontal line":"Horizontale Linie"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e["de-ch"]=e["de-ch"]||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"","Centered image":"zentriertes Bild","Change image text alternative":"Alternativtext ändern","Enter image caption":"Bildunterschrift eingeben","Full size image":"Bild in voller Grösse","Image resize list":"Bildgrössen-Liste","Image toolbar":"Bild Werkzeugleiste","image widget":"Bild-Steuerelement","In line":"",Insert:"Einfügen","Insert image":"Bild einfügen","Insert image via URL":"Bild von URL einfügen","Left aligned image":"linksbündiges Bild",Original:"Original","Resize image":"Bildgrösse ändern","Resize image to %0":"Bildgrösse ändern in %0","Resize image to the original size":"Originalgrösse wiederherstellen","Right aligned image":"rechtsbündiges Bild","Side image":"Ausgerichtetes Bild","Text alternative":"Alternativtext",Update:"Aktualisieren","Update image URL":"Bild-URL aktualisieren","Upload failed":"Hochladen fehlgeschlagen","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const e=n["de-ch"]=n["de-ch"]||{};e.dictionary=Object.assign(e.dictionary||{},{"Decrease indent":"Einzug verkleinern","Increase indent":"Einzug vergrössern"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const n=e["de-ch"]=e["de-ch"]||{};n.dictionary=Object.assign(n.dictionary||{},{"Choose language":"Sprache auswählen",Language:"Sprache","Remove language":"Sprache entfernen"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const e=n["de-ch"]=n["de-ch"]||{};e.dictionary=Object.assign(e.dictionary||{},{Downloadable:"Herunterladbar","Edit link":"Link bearbeiten",Link:"Link","Link image":"Bild verlinken","Link URL":"Link Adresse","Open in a new tab":"In neuem Tab öffnen","Open link in new tab":"Link in neuem Tab öffnen","This link has no URL":"Dieser Link hat keine Adresse",Unlink:"Link entfernen"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e["de-ch"]=e["de-ch"]||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"Aufzählungsliste","Bulleted list styles toolbar":"Darstellung der ungeordneten Liste",Circle:"Leerer Kreis",Decimal:"Dezimalzahlen","Decimal with leading zero":"Dezimalzahlen mit vorangestellten Nullen",Disc:"Gefüllter Kreis","Lower-latin":"Kleingeschriebene lateinische Buchstaben","Lower–roman":"Kleingeschriebene römische Zahlen","Numbered List":"Nummerierte Liste","Numbered list styles toolbar":"Darstellung der nummerierten Liste",Square:"Quadrat","To-do List":"Aufgabenliste","Toggle the circle list style":"Leeren Kreis einstellen","Toggle the decimal list style":"Dezimalzahlen einstellen","Toggle the decimal with leading zero list style":"Dezimalzahlen mit vorangestellten Nullen einstellen","Toggle the disc list style":"Gefüllten Kreis einstellen","Toggle the lower–latin list style":"Kleingeschriebene lateinische Buchstaben einstellen","Toggle the lower–roman list style":"Kleingeschriebene römische Zahlen einstellen","Toggle the square list style":"Quadrat einstellen","Toggle the upper–latin list style":"Grossgeschriebene lateinische Buchstaben einstellen","Toggle the upper–roman list style":"Grossgeschriebene römische Zahlen einstellen","Upper-latin":"Grossgeschriebene lateinische Buchstaben","Upper-roman":"Grossgeschriebene römische Zahlen"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const e=n["de-ch"]=n["de-ch"]||{};e.dictionary=Object.assign(e.dictionary||{},{"Remove Format":"Formatierung entfernen"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e["de-ch"]=e["de-ch"]||{};l.dictionary=Object.assign(l.dictionary||{},{"Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align table to the left":"","Align table to the right":"",Alignment:"",Background:"",Border:"","Cell properties":"","Center table":"",Color:"","Color picker":"",Column:"Spalte",Dashed:"","Delete column":"Spalte löschen","Delete row":"Zeile löschen",Dimensions:"",Dotted:"",Double:"","Enter table caption":"",Groove:"","Header column":"Kopfspalte","Header row":"Kopfspalte",Height:"","Horizontal text alignment toolbar":"","Insert column left":"","Insert column right":"","Insert row above":"Zeile oben einfügen","Insert row below":"Zeile unten einfügen","Insert table":"Tabelle einfügen",Inset:"","Justify cell text":"","Merge cell down":"Zelle unten verbinden","Merge cell left":"Zelle links verbinden","Merge cell right":"Zele rechts verbinden","Merge cell up":"Zelle oben verbinden","Merge cells":"Zellen verbinden",None:"",Outset:"",Padding:"",Ridge:"",Row:"Zeile","Select column":"","Select row":"",Solid:"","Split cell horizontally":"Zelle horizontal teilen","Split cell vertically":"Zelle vertikal teilen",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':"",'The value is invalid. Try "10px" or "2em" or simply "2".':"","Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"",Width:""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const r=e["de-ch"]=e["de-ch"]||{};r.dictionary=Object.assign(r.dictionary||{},{"%0 of %1":"",Aquamarine:"",Black:"",Blue:"",Cancel:"Abbrechen","Dim grey":"","Dropdown toolbar":"","Edit block":"","Editor toolbar":"",Green:"",Grey:"","Insert paragraph after block":"Absatz nach Block einfügen","Insert paragraph before block":"Absatz vor Block einfügen","Light blue":"","Light green":"","Light grey":"",Next:"",Orange:"",Previous:"",Purple:"",Red:"",Redo:"Wiederherstellen","Remove color":"Farbe entfernen","Restore default":"","Rich Text Editor":"Rich-Text-Edito","Rich Text Editor, %0":"Rich-Text-Editor, %0",Save:"Speichern","Select all":"Alles auswählen","Show more items":"",Turquoise:"",Undo:"Rückgängig","Upload in progress":"Upload läuft",White:"","Widget toolbar":"Widget Werkzeugleiste",Yellow:""}),r.getPluralForm=function(e){return 1!=e}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/de.js b/core/assets/vendor/ckeditor5/translations/de.js
new file mode 100644
index 000000000000..f25a85c6634d
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/de.js
@@ -0,0 +1 @@
+!function(n){const t=n.de=n.de||{};t.dictionary=Object.assign(t.dictionary||{},{"Align center":"Zentriert","Align left":"Linksbündig","Align right":"Rechtsbündig",Justify:"Blocksatz","Text alignment":"Textausrichtung","Text alignment toolbar":"Text-Ausrichtung Toolbar"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e.de=e.de||{};t.dictionary=Object.assign(t.dictionary||{},{Bold:"Fett",Code:"Code",Italic:"Kursiv",Strikethrough:"Durchgestrichen",Subscript:"Tiefgestellt",Superscript:"Hochgestellt",Underline:"Unterstrichen"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const o=i.de=i.de||{};o.dictionary=Object.assign(o.dictionary||{},{"Block quote":"Blockzitat"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.de=e.de||{};i.dictionary=Object.assign(i.dictionary||{},{"Choose heading":"Überschrift auswählen",Heading:"Überschrift","Heading 1":"Überschrift 1","Heading 2":"Überschrift 2","Heading 3":"Überschrift 3","Heading 4":"Überschrift 4","Heading 5":"Überschrift 5","Heading 6":"Überschrift 6",Paragraph:"Absatz","Type or paste your content here.":"Hier Inhalt einfügen.","Type your title":"Titel eingeben"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.de=i.de||{};n.dictionary=Object.assign(n.dictionary||{},{"Horizontal line":"Horizontale Linie"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.de=e.de||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"Bild teilt Text","Centered image":"Zentriertes Bild","Change image text alternative":"Alternativtext ändern","Enter image caption":"Bildunterschrift eingeben","Full size image":"Bild in voller Größe","Image resize list":"Bildgrößen-Liste","Image toolbar":"Bild Werkzeugleiste","image widget":"Bild-Steuerelement","In line":"Text in Zeile",Insert:"Einfügen","Insert image":"Bild einfügen","Insert image via URL":"Bild von URL einfügen","Left aligned image":"Linksbündiges Bild",Original:"Original","Resize image":"Bildgröße ändern","Resize image to %0":"Bildgröße ändern in %0","Resize image to the original size":"Bild in Originalgröße ändern","Right aligned image":"Rechtsbündiges Bild","Side image":"Seitenbild","Text alternative":"Alternativtext",Update:"Aktualisieren","Update image URL":"Bild-URL aktualisieren","Upload failed":"Hochladen fehlgeschlagen","Wrap text":"Text umfließt Bild"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const e=n.de=n.de||{};e.dictionary=Object.assign(e.dictionary||{},{"Decrease indent":"Einzug verkleinern","Increase indent":"Einzug vergrößern"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const n=e.de=e.de||{};n.dictionary=Object.assign(n.dictionary||{},{"Choose language":"Sprache auswählen",Language:"Sprache","Remove language":"Sprache entfernen"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const e=n.de=n.de||{};e.dictionary=Object.assign(e.dictionary||{},{Downloadable:"Herunterladbar","Edit link":"Link bearbeiten",Link:"Link","Link image":"Bild verlinken","Link URL":"Link Adresse","Open in a new tab":"In neuem Tab öffnen","Open link in new tab":"Link im neuen Tab öffnen","This link has no URL":"Dieser Link hat keine Adresse",Unlink:"Link entfernen"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.de=e.de||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"Aufzählungsliste","Bulleted list styles toolbar":"Darstellung der ungeordneten Liste",Circle:"Leerer Kreis",Decimal:"Dezimalzahlen","Decimal with leading zero":"Dezimalzahlen mit vorangestellten Nullen",Disc:"Gefüllter Kreis","Lower-latin":"Kleingeschriebene lateinische Buchstaben","Lower–roman":"Kleingeschriebene römische Zahlen","Numbered List":"Nummerierte Liste","Numbered list styles toolbar":"Darstellung der geordneten Liste",Square:"Quadrat","To-do List":"Aufgabenliste","Toggle the circle list style":"Leeren Kreis einstellen","Toggle the decimal list style":"Dezimalzahlen einstellen","Toggle the decimal with leading zero list style":"Dezimalzahlen mit vorangestellten Nullen einstellen","Toggle the disc list style":"Gefüllten Kreis einstellen","Toggle the lower–latin list style":"Kleingeschriebene lateinische Buchstaben einstellen","Toggle the lower–roman list style":"Kleingeschriebene römische Zahlen einstellen","Toggle the square list style":"Quadrat einstellen","Toggle the upper–latin list style":"Großgeschriebene lateinische Buchstaben einstellen","Toggle the upper–roman list style":"Großgeschriebene römische Zahlen einstellen","Upper-latin":"Großgeschriebene lateinische Buchstaben","Upper-roman":"Großgeschriebene römische Zahlen"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const e=n.de=n.de||{};e.dictionary=Object.assign(e.dictionary||{},{"Remove Format":"Formatierung entfernen"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.de=i.de||{};n.dictionary=Object.assign(n.dictionary||{},{Source:"Quellcode"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.de=e.de||{};l.dictionary=Object.assign(l.dictionary||{},{"Align cell text to the bottom":"Zellentext unten ausrichten","Align cell text to the center":"Zellentext zentriert ausrichten","Align cell text to the left":"Zellentext linksbündig ausrichten","Align cell text to the middle":"Zellentext mittig ausrichten","Align cell text to the right":"Zellentext rechtsbündig ausrichten","Align cell text to the top":"Zellentext oben ausrichten","Align table to the left":"Tabelle links ausrichten","Align table to the right":"Tabelle rechts ausrichten",Alignment:"Ausrichtung",Background:"Hintergrund",Border:"Rahmen","Cell properties":"Zelleneigenschaften","Center table":"Tabelle zentrieren",Color:"Farbe","Color picker":"Farbwähler",Column:"Spalte",Dashed:"Gestrichelt","Delete column":"Spalte löschen","Delete row":"Zeile löschen",Dimensions:"Größe",Dotted:"Gepunktet",Double:"Doppelt","Enter table caption":"Tabellenüberschrift eingeben",Groove:"Eingeritzt","Header column":"Kopfspalte","Header row":"Kopfzeile",Height:"Höhe","Horizontal text alignment toolbar":"Werkzeugleiste für die horizontale Zellentext-Ausrichtung","Insert column left":"Spalte links einfügen","Insert column right":"Spalte rechts einfügen","Insert row above":"Zeile oben einfügen","Insert row below":"Zeile unten einfügen","Insert table":"Tabelle einfügen",Inset:"Eingelassen","Justify cell text":"Zellentext als Blocksatz ausrichten","Merge cell down":"Zelle unten verbinden","Merge cell left":"Zelle links verbinden","Merge cell right":"Zelle rechts verbinden","Merge cell up":"Zelle verbinden","Merge cells":"Zellen verbinden",None:"Kein Rahmen",Outset:"Geprägt",Padding:"Innenabstand",Ridge:"Hervorgehoben",Row:"Zeile","Select column":"Spalte auswählen","Select row":"Zeile auswählen",Solid:"Durchgezogen","Split cell horizontally":"Zelle horizontal teilen","Split cell vertically":"Zelle vertikal teilen",Style:"Rahmenart","Table alignment toolbar":"Werkzeugleiste für die Tabellen-Ausrichtung","Table cell text alignment":"Ausrichtung des Zellentextes","Table properties":"Tabelleneigenschaften","Table toolbar":"Tabelle Werkzeugleiste",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':"Die Farbe ist ungültig. Probieren Sie „#FF0000“ oder „rgb(255,0,0)“ oder „red“.",'The value is invalid. Try "10px" or "2em" or simply "2".':"Der Wert ist ungültig. Probieren Sie „10px“ oder „2em“ oder „2“.","Toggle caption off":"Tabellenüberschrift deaktivieren","Toggle caption on":"Tabellenüberschrift aktivieren","Vertical text alignment toolbar":"Werkzeugleiste für die vertikale Zellentext-Ausrichtung",Width:"Breite"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.de=i.de||{};n.dictionary=Object.assign(n.dictionary||{},{"HTML object":"HTML-Objekt"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e.de=e.de||{};t.dictionary=Object.assign(t.dictionary||{},{"Almost equal to":"Gerundet",Angle:"Winkel-Zeichen","Approximately equal to":"Ungefähr gleich","Asterisk operator":"Hodge-Stern-Operator","Austral sign":"Austral-Zeichen","back with leftwards arrow above":"„Back“ darüber Pfeil nach links","Bitcoin sign":"Bitcoin-Zeichen","Cedi sign":"Cedi-Zeichen","Cent sign":"Cent-Zeichen","Character categories":"Zeichenkategorien","Colon sign":"Colón-Zeichen","Contains as member":"Enthält als Element","Copyright sign":"Copyright-Zeichen","Cruzeiro sign":"Cruzeiro-Zeichen","Currency sign":"Währungssymbol","Degree sign":"Grad-Zeichen","Division sign":"Geteilt-Zeichen","Dollar sign":"Dollar-Zeichen","Dong sign":"Đồng-Zeichen","Double dagger":"Zweibalkenkreuz","Double exclamation mark":"Doppeltes Ausrufezeichen","Double low-9 quotation mark":"Doppelte Anführungszeichen links unten","Double question mark":"Doppeltes Fragezeichen","downwards arrow to bar":"Pfeil nach unten zum Querstrich","downwards dashed arrow":"Gestrichelter Pfeil nach unten","downwards double arrow":"Doppelpfeil nach unten","Drachma sign":"Drachme-Zeichen","Element of":"Element von","Em dash":"Geviertstrich","Empty set":"Leere Menge","En dash":"Halbgeviertstrich","end with leftwards arrow above":"„End“ darüber Pfeil nach links","Euro sign":"Euro-Zeichen","Euro-currency sign":"Euro-Währungszeichen","Exclamation question mark":"Ruf-Frage-Zeichen","For all":"Allquantor","Fraction slash":"Schrägstrich","French franc sign":"Französischer Franc-Zeichen","German penny sign":"Pfennig-Zeichen","Greater-than or equal to":"Größer als oder gleich","Greater-than sign":"Größer-als-Zeichen","Guarani sign":"Guaraní-Zeichen","Horizontal ellipsis":"Auslassungspunkte","Hryvnia sign":"Hrywnja-Zeichen","Identical to":"Identisch mit","Indian rupee sign":"Indische Rupie-Zeichen",Infinity:"Unendlich-Zeichen",Integral:"Integral-Zeichen",Intersection:"Schnitt","Inverted exclamation mark":"Umgekehrtes Ausrufezeichen","Inverted question mark":"Umgekehrtes Fragezeichen","Kip sign":"Kip-Zeichen","Latin capital letter a with breve":"Lateinischer Großbuchstabe a mit Breve","Latin capital letter a with macron":"Lateinischer Großbuchstabe a mit Makron","Latin capital letter a with ogonek":"Lateinischer Großbuchstabe a mit Ogonek","Latin capital letter c with acute":"Lateinischer Großbuchstabe c mit Akut","Latin capital letter c with caron":"Lateinischer Großbuchstabe c mit Hatschek","Latin capital letter c with circumflex":"Lateinischer Großbuchstabe c mit Zirkumflex","Latin capital letter c with dot above":"Lateinischer Großbuchstabe c mit Punkt darüber","Latin capital letter d with caron":"Lateinischer Großbuchstabe d mit Hatschek","Latin capital letter d with stroke":"Lateinischer Großbuchstabe d mit Querstrich","Latin capital letter e with breve":"Lateinischer Großbuchstabe e mit Breve","Latin capital letter e with caron":"Lateinischer Großbuchstabe e mit Hatschek","Latin capital letter e with dot above":"Lateinischer Großbuchstabe e mit Punkt darüber","Latin capital letter e with macron":"Lateinischer Großbuchstabe e mit Makron","Latin capital letter e with ogonek":"Lateinischer Großbuchstabe e mit Ogonek","Latin capital letter eng":"Lateinischer Großbuchstabe Eng","Latin capital letter g with breve":"Lateinischer Großbuchstabe g mit Breve","Latin capital letter g with cedilla":"Lateinischer Großbuchstabe g mit Cedille","Latin capital letter g with circumflex":"Lateinischer Großbuchstabe g mit Zirkumflex","Latin capital letter g with dot above":"Lateinischer Großbuchstabe g mit Punkt darüber","Latin capital letter h with circumflex":"Lateinischer Großbuchstabe h mit Zirkumflex","Latin capital letter h with stroke":"Lateinischer Großbuchstabe h mit Querstrich","Latin capital letter i with breve":"Lateinischer Großbuchstabe i mit Breve","Latin capital letter i with dot above":"Lateinischer Großbuchstabe i mit Punkt darüber","Latin capital letter i with macron":"Lateinischer Großbuchstabe i mit Makron","Latin capital letter i with ogonek":"Lateinischer Großbuchstabe i mit Ogonek","Latin capital letter i with tilde":"Lateinischer Großbuchstabe i mit Tilde","Latin capital letter j with circumflex":"Lateinischer Großbuchstabe j mit Zirkumflex","Latin capital letter k with cedilla":"Lateinischer Großbuchstabe k mit Cedille","Latin capital letter l with acute":"Lateinischer Großbuchstabe l mit Akut","Latin capital letter l with caron":"Lateinischer Großbuchstabe l mit Hatschek","Latin capital letter l with cedilla":"Lateinischer Großbuchstabe l mit Cedille","Latin capital letter l with middle dot":"Lateinischer Großbuchstabe l mit Mittelpunkt","Latin capital letter l with stroke":"Lateinischer Großbuchstabe l mit Querstrich","Latin capital letter n with acute":"Lateinischer Großbuchstabe n mit Akut","Latin capital letter n with caron":"Lateinischer Großbuchstabe n mit Hatschek","Latin capital letter n with cedilla":"Lateinischer Großbuchstabe n mit Cedille","Latin capital letter o with breve":"Lateinischer Großbuchstabe o mit Breve","Latin capital letter o with double acute":"Lateinischer Großbuchstabe o mit doppeltem Akut","Latin capital letter o with macron":"Lateinischer Großbuchstabe o mit Makron","Latin capital letter r with acute":"Lateinischer Großbuchstabe r mit Akut","Latin capital letter r with caron":"Lateinischer Großbuchstabe r mit Hatschek","Latin capital letter r with cedilla":"Lateinischer Großbuchstabe r mit Cedille","Latin capital letter s with acute":"Lateinischer Großbuchstabe s mit Akut","Latin capital letter s with caron":"Lateinischer Großbuchstabe s mit Hatschek","Latin capital letter s with cedilla":"Lateinischer Großbuchstabe s mit Cedille","Latin capital letter s with circumflex":"Lateinischer Großbuchstabe s mit Zirkumflex","Latin capital letter t with caron":"Lateinischer Großbuchstabe t mit Hatschek","Latin capital letter t with cedilla":"Lateinischer Großbuchstabe t mit Cedille","Latin capital letter t with stroke":"Lateinischer Großbuchstabe t mit Querstrich","Latin capital letter u with breve":"Lateinischer Großbuchstabe u mit Breve","Latin capital letter u with double acute":"Lateinischer Großbuchstabe u mit doppeltem Akut","Latin capital letter u with macron":"Lateinischer Großbuchstabe u mit Makron","Latin capital letter u with ogonek":"Lateinischer Großbuchstabe u mit Ogonek","Latin capital letter u with ring above":"Lateinischer Großbuchstabe u mit Kroužek darüber","Latin capital letter u with tilde":"Lateinischer Großbuchstabe u mit Tilde","Latin capital letter w with circumflex":"Lateinischer Großbuchstabe w mit Zirkumflex","Latin capital letter y with circumflex":"Lateinischer Großbuchstabe y mit Zirkumflex","Latin capital letter y with diaeresis":"Lateinischer Großbuchstabe y mit Trema","Latin capital letter z with acute":"Lateinischer Großbuchstabe z mit Akut","Latin capital letter z with caron":"Lateinischer Großbuchstabe z mit Hatschek","Latin capital letter z with dot above":"Lateinischer Großbuchstabe z mit Punkt darüber","Latin capital ligature ij":"Große lateinische Ligatur ij","Latin capital ligature oe":"Große lateinische Ligatur oe","Latin small letter a with breve":"Lateinischer Kleinbuchstabe a mit Breve","Latin small letter a with macron":"Lateinischer Kleinbuchstabe a mit Makron","Latin small letter a with ogonek":"Lateinischer Kleinbuchstabe a mit Ogonek","Latin small letter c with acute":"Lateinischer Kleinbuchstabe c mit Akut","Latin small letter c with caron":"Lateinischer Kleinbuchstabe c mit Hatschek","Latin small letter c with circumflex":"Lateinischer Kleinbuchstabe c mit Zirkumflex","Latin small letter c with dot above":"Lateinischer Kleinbuchstabe c mit Punkt darüber","Latin small letter d with caron":"Lateinischer Kleinbuchstabe d mit Hatschek","Latin small letter d with stroke":"Lateinischer Kleinbuchstabe d mit Querstrich","Latin small letter dotless i":"Lateinischer Kleinbuchstabe i ohne Punkt","Latin small letter e with breve":"Lateinischer Kleinbuchstabe e mit Breve","Latin small letter e with caron":"Lateinischer Kleinbuchstabe e mit Hatschek","Latin small letter e with dot above":"Lateinischer Kleinbuchstabe e mit Punkt darüber","Latin small letter e with macron":"Lateinischer Kleinbuchstabe e mit Makron","Latin small letter e with ogonek":"Lateinischer Kleinbuchstabe e mit Ogonek","Latin small letter eng":"Lateinischer Kleinbuchstabe Eng","Latin small letter f with hook":"Lateinischer Kleinbuchstabe f mit Haken","Latin small letter g with breve":"Lateinischer Kleinbuchstabe g mit Breve","Latin small letter g with cedilla":"Lateinischer Kleinbuchstabe g mit Cedille","Latin small letter g with circumflex":"Lateinischer Kleinbuchstabe g mit Zirkumflex","Latin small letter g with dot above":"Lateinischer Kleinbuchstabe g mit Punkt darüber","Latin small letter h with circumflex":"Lateinischer Kleinbuchstabe h mit Zirkumflex","Latin small letter h with stroke":"Lateinischer Kleinbuchstabe h mit Querstrich","Latin small letter i with breve":"Lateinischer Kleinbuchstabe i mit Breve","Latin small letter i with macron":"Lateinischer Kleinbuchstabe i mit Makron","Latin small letter i with ogonek":"Lateinischer Kleinbuchstabe i mit Ogonek","Latin small letter i with tilde":"Lateinischer Kleinbuchstabe i mit Tilde","Latin small letter j with circumflex":"Lateinischer Kleinbuchstabe j mit Zirkumflex","Latin small letter k with cedilla":"Lateinischer Kleinbuchstabe k mit Cedille","Latin small letter kra":"Lateinischer Kleinbuchstabe Kra","Latin small letter l with acute":"Lateinischer Kleinbuchstabe l mit Akut","Latin small letter l with caron":"Lateinischer Kleinbuchstabe l mit Hatschek","Latin small letter l with cedilla":"Lateinischer Kleinbuchstabe l mit Cedille","Latin small letter l with middle dot":"Lateinischer Kleinbuchstabe l mit Mittelpunkt","Latin small letter l with stroke":"Lateinischer Kleinbuchstabe l mit Querstrich","Latin small letter long s":"Lateinischer Kleinbuchstabe langes s","Latin small letter n preceded by apostrophe":"Lateinischer Kleinbuchstabe n mit vorangestelltem Apostroph","Latin small letter n with acute":"Lateinischer Kleinbuchstabe n mit Akut","Latin small letter n with caron":"Lateinischer Kleinbuchstabe n mit Hatschek","Latin small letter n with cedilla":"Lateinischer Kleinbuchstabe n mit Cedille","Latin small letter o with breve":"Lateinischer Kleinbuchstabe o mit Breve","Latin small letter o with double acute":"Lateinischer Kleinbuchstabe o mit doppeltem Akut","Latin small letter o with macron":"Lateinischer Kleinbuchstabe o mit Makron","Latin small letter r with acute":"Lateinischer Kleinbuchstabe r mit Akut","Latin small letter r with caron":"Lateinischer Kleinbuchstabe r mit Hatschek","Latin small letter r with cedilla":"Lateinischer Kleinbuchstabe r mit Cedille","Latin small letter s with acute":"Lateinischer Kleinbuchstabe s mit Akut","Latin small letter s with caron":"Lateinischer Kleinbuchstabe s mit Hatschek","Latin small letter s with cedilla":"Lateinischer Kleinbuchstabe s mit Cedille","Latin small letter s with circumflex":"Lateinischer Kleinbuchstabe s mit Zirkumflex","Latin small letter t with caron":"Lateinischer Kleinbuchstabe t mit Hatschek","Latin small letter t with cedilla":"Lateinischer Kleinbuchstabe t mit Cedille","Latin small letter t with stroke":"Lateinischer Kleinbuchstabe t mit Querstrich","Latin small letter u with breve":"Lateinischer Kleinbuchstabe u mit Breve","Latin small letter u with double acute":"Lateinischer Kleinbuchstabe u mit doppeltem Akut","Latin small letter u with macron":"Lateinischer Kleinbuchstabe u mit Makron","Latin small letter u with ogonek":"Lateinischer Kleinbuchstabe u mit Ogonek","Latin small letter u with ring above":"Lateinischer Kleinbuchstabe u mit Kroužek darüber","Latin small letter u with tilde":"Lateinischer Kleinbuchstabe u mit Tilde","Latin small letter w with circumflex":"Lateinischer Kleinbuchstabe w mit Zirkumflex","Latin small letter y with circumflex":"Lateinischer Kleinbuchstabe y mit Zirkumflex","Latin small letter z with acute":"Lateinischer Kleinbuchstabe z mit Akut","Latin small letter z with caron":"Lateinischer Kleinbuchstabe z mit Hatschek","Latin small letter z with dot above":"Lateinischer Kleinbuchstabe z mit Punkt darüber","Latin small ligature ij":"Kleine lateinische Ligatur ij","Latin small ligature oe":"Kleine lateinische Ligatur oe","Left double quotation mark":"Doppelte Anführungszeichen links","Left single quotation mark":"Einfache Anführungszeichen links","Left-pointing double angle quotation mark":"Doppelte Guillemets nach links","leftwards arrow to bar":"Pfeil nach links zum Querstrich","leftwards dashed arrow":"Gestrichelter Pfeil nach links","leftwards double arrow":"Doppelpfeil nach links","Less-than or equal to":"Kleiner als oder gleich","Less-than sign":"Kleiner-als-Zeichen","Lira sign":"Lira-Zeichen","Livre tournois sign":"Livre tournois-Zeichen","Logical and":"Logisches und","Logical or":"Logisches oder",Macron:"Makron","Manat sign":"Manat-Zeichen","Mill sign":"Mill-Zeichen","Minus sign":"Minus-Zeichen","Multiplication sign":"Mal-Zeichen","N-ary product":"Produkt-Zeichen","N-ary summation":"Summen-Zeichen",Nabla:"Nabla","Naira sign":"Naira-Zeichen","New sheqel sign":"Schekel-Zeichen","Nordic mark sign":"Nordische Mark-Zeichen","Not an element of":"Kein Element von","Not equal to":"Ungleich","Not sign":"Negations-Zeichen","on with exclamation mark with left right arrow above":"„On“ mit Ausrufezeichen darüber Pfeil nach links und rechts",Overline:"Überstrich","Paragraph sign":"Absatz-Zeichen","Partial differential":"Partielle Ableitung","Per mille sign":"Promille-Zeichen","Per ten thousand sign":"Pro-Zehntausend-Zeichen","Peseta sign":"Peseta-Zeichen","Peso sign":"Philippinischer Peso-Zeichen","Plus-minus sign":"Plus-Minus-Zeichen","Pound sign":"Pfund-Zeichen","Proportional to":"Proportional zu","Question exclamation mark":"Frage-Ruf-Zeichen","Registered sign":"Registered-Trade-Mark-Zeichen","Reversed paragraph sign":"Umgedrehtes Absatz-Zeichen","Right double quotation mark":"Doppelte Anführungszeichen rechts","Right single quotation mark":"Einfache Anführungszeichen rechts","Right-pointing double angle quotation mark":"Doppelte Guillemets nach rechts","rightwards arrow to bar":"Pfeil nach rechts zum Querstrich","rightwards dashed arrow":"Gestrichelter Pfeil nach rechts","rightwards double arrow":"Doppelpfeil nach rechts","Ruble sign":"Rubel-Zeichen","Rupee sign":"Rupie-Zeichen","Section sign":"Paragraphen-Zeichen","Single left-pointing angle quotation mark":"Einfache Guillemets nach links","Single low-9 quotation mark":"Einfache Anführungszeichen links unten","Single right-pointing angle quotation mark":"Einfache Guillemets nach rechts","soon with rightwards arrow above":"„Soon“ darüber Pfeil nach rechts","Special characters":"Sonderzeichen","Spesmilo sign":"Spesmilo-Zeichen","Square root":"Wurzel-Zeichen","Tenge sign":"Tenge-Zeichen","There exists":"Existenzquantor","Tilde operator":"Tilde-Operator","top with upwards arrow above":"„Top“ darüber Pfeil nach oben","Trade mark sign":"Unregistered-Trade-Mark-Zeichen","Tugrik sign":"Tugrik-Zeichen","Turkish lira sign":"Türkische Lira-Zeichen","Two dot leader":"Doppel-Punktlinie",Union:"Vereinigung","up down arrow with base":"Unterstrichener Pfeil nach oben und unten","upwards arrow to bar":"Pfeil nach oben zum Querstrich","upwards dashed arrow":"Gestrichelter Pfeil nach oben","upwards double arrow":"Doppelpfeil nach oben","Vulgar fraction one half":"Gemeiner Bruch ein Halb","Vulgar fraction one quarter":"Gemeiner Bruch ein Viertel","Vulgar fraction three quarters":"Gemeiner Bruch drei Viertel","Won sign":"Won-Zeichen","Yen sign":"Yen-Zeichen"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const r=e.de=e.de||{};r.dictionary=Object.assign(r.dictionary||{},{"%0 of %1":"%0 von %1",Aquamarine:"Aquamarinblau",Black:"Schwarz",Blue:"Blau",Cancel:"Abbrechen","Dim grey":"Dunkelgrau","Dropdown toolbar":"Dropdown-Liste Werkzeugleiste","Edit block":"Absatz bearbeiten","Editor toolbar":"Editor Werkzeugleiste",Green:"Grün",Grey:"Grau","Insert paragraph after block":"Absatz nach Block einfügen","Insert paragraph before block":"Absatz vor Block einfügen","Light blue":"Hellblau","Light green":"Hellgrün","Light grey":"Hellgrau",Next:"Nächste",Orange:"Orange",Previous:"vorherige",Purple:"Violett",Red:"Rot",Redo:"Wiederherstellen","Remove color":"Farbe entfernen","Restore default":"Standard wiederherstellen","Rich Text Editor":"Rich Text Editor","Rich Text Editor, %0":"Rich-Text-Editor, %0",Save:"Speichern","Select all":"Alles auswählen","Show more items":"Mehr anzeigen",Turquoise:"Türkis",Undo:"Rückgängig","Upload in progress":"Upload läuft",White:"Weiß","Widget toolbar":"Widget Werkzeugleiste",Yellow:"Gelb"}),r.getPluralForm=function(e){return 1!=e}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/el.js b/core/assets/vendor/ckeditor5/translations/el.js
new file mode 100644
index 000000000000..29897c0706ea
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/el.js
@@ -0,0 +1 @@
+!function(i){const n=i.el=i.el||{};n.dictionary=Object.assign(n.dictionary||{},{Bold:"Έντονη",Code:"",Italic:"Πλάγια",Strikethrough:"",Subscript:"",Superscript:"",Underline:""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.el=i.el||{};n.dictionary=Object.assign(n.dictionary||{},{"Block quote":"Περιοχή παράθεσης"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const n=e.el=e.el||{};n.dictionary=Object.assign(n.dictionary||{},{"Choose heading":"Επιλέξτε κεφαλίδα",Heading:"Κεφαλίδα","Heading 1":"Κεφαλίδα 1","Heading 2":"Κεφαλίδα 2","Heading 3":"Κεφαλίδα 3","Heading 4":"","Heading 5":"","Heading 6":"",Paragraph:"Παράγραφος","Type or paste your content here.":"","Type your title":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.el=e.el||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"","Centered image":"","Change image text alternative":"Αλλαγή εναλλακτικού κείμενου","Enter image caption":"Λεζάντα","Full size image":"Εικόνα πλήρης μεγέθους","Image resize list":"","Image toolbar":"","image widget":"","In line":"",Insert:"","Insert image":"Εισαγωγή εικόνας","Insert image via URL":"","Left aligned image":"",Original:"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Right aligned image":"","Side image":"","Text alternative":"Εναλλακτικό κείμενο",Update:"","Update image URL":"","Upload failed":"","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.el=n.el||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"","Edit link":"",Link:"Σύνδεσμος","Link image":"","Link URL":"Διεύθυνση συνδέσμου","Open in a new tab":"","Open link in new tab":"","This link has no URL":"",Unlink:"Αφαίρεση συνδέσμου"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.el=e.el||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"Λίστα κουκκίδων","Bulleted list styles toolbar":"",Circle:"",Decimal:"","Decimal with leading zero":"",Disc:"","Lower-latin":"","Lower–roman":"","Numbered List":"Αριθμημένη λίστα","Numbered list styles toolbar":"",Square:"","To-do List":"","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const o=e.el=e.el||{};o.dictionary=Object.assign(o.dictionary||{},{"%0 of %1":"",Aquamarine:"",Black:"",Blue:"",Cancel:"Ακύρωση","Dim grey":"","Dropdown toolbar":"","Edit block":"","Editor toolbar":"",Green:"",Grey:"","Light blue":"","Light green":"","Light grey":"",Next:"",Orange:"",Previous:"",Purple:"",Red:"",Redo:"Επανάληψη","Remove color":"","Restore default":"","Rich Text Editor":"Επεξεργαστής Πλούσιου Κειμένου","Rich Text Editor, %0":"Επεξεργαστής Πλούσιου Κειμένου, 0%",Save:"Αποθήκευση","Show more items":"",Turquoise:"",Undo:"Αναίρεση",White:"",Yellow:""}),o.getPluralForm=function(e){return 1!=e}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/en-au.js b/core/assets/vendor/ckeditor5/translations/en-au.js
new file mode 100644
index 000000000000..1db580393037
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/en-au.js
@@ -0,0 +1 @@
+!function(n){const t=n["en-au"]=n["en-au"]||{};t.dictionary=Object.assign(t.dictionary||{},{"Align center":"Align centre","Align left":"Align left","Align right":"Align right",Justify:"Justify","Text alignment":"Text alignment","Text alignment toolbar":"Text alignment toolbar"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const t=i["en-au"]=i["en-au"]||{};t.dictionary=Object.assign(t.dictionary||{},{Bold:"Bold",Code:"Code",Italic:"Italic",Strikethrough:"Strikethrough",Subscript:"Subscript",Superscript:"Superscript",Underline:"Underline"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const o=n["en-au"]=n["en-au"]||{};o.dictionary=Object.assign(o.dictionary||{},{"Block quote":"Block quote"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const n=e["en-au"]=e["en-au"]||{};n.dictionary=Object.assign(n.dictionary||{},{"Choose heading":"Choose heading",Heading:"Heading","Heading 1":"Heading 1","Heading 2":"Heading 2","Heading 3":"Heading 3","Heading 4":"Heading 4","Heading 5":"Heading 5","Heading 6":"Heading 6",Paragraph:"Paragraph","Type or paste your content here.":"Type or paste your content here.","Type your title":"Type your title"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n["en-au"]=n["en-au"]||{};i.dictionary=Object.assign(i.dictionary||{},{"Horizontal line":"Horizontal line"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e["en-au"]=e["en-au"]||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"","Centered image":"Centred image","Change image text alternative":"Change image text alternative","Enter image caption":"Enter image caption","Full size image":"Full size image","Image resize list":"Image resize list","Image toolbar":"Image toolbar","image widget":"image widget","In line":"",Insert:"Insert","Insert image":"Insert image","Insert image via URL":"Insert image via URL","Left aligned image":"Left aligned image",Original:"Original","Resize image":"Resize image","Resize image to %0":"Resize image to %0","Resize image to the original size":"Resize image to the original size","Right aligned image":"Right aligned image","Side image":"Side image","Text alternative":"Text alternative",Update:"Update","Update image URL":"Update image URL","Upload failed":"Upload failed","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const e=n["en-au"]=n["en-au"]||{};e.dictionary=Object.assign(e.dictionary||{},{"Decrease indent":"Decrease indent","Increase indent":"Increase indent"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n["en-au"]=n["en-au"]||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"Downloadable","Edit link":"Edit link",Link:"Link","Link image":"Link image","Link URL":"Link URL","Open in a new tab":"Open in a new tab","Open link in new tab":"Open link in new tab","This link has no URL":"This link has no URL",Unlink:"Unlink"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e["en-au"]=e["en-au"]||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"Bulleted List","Bulleted list styles toolbar":"Bulleted list styles toolbar",Circle:"Circle",Decimal:"Decimal","Decimal with leading zero":"Decimal with leading zero",Disc:"Disc","Lower-latin":"Lower-latin","Lower–roman":"Lower–roman","Numbered List":"Numbered List","Numbered list styles toolbar":"Numbered list styles toolbar",Square:"Square","To-do List":"To-do List","Toggle the circle list style":"Toggle the circle list style","Toggle the decimal list style":"Toggle the decimal list style","Toggle the decimal with leading zero list style":"Toggle the decimal with leading zero list style","Toggle the disc list style":"Toggle the disc list style","Toggle the lower–latin list style":"Toggle the lower–latin list style","Toggle the lower–roman list style":"Toggle the lower–roman list style","Toggle the square list style":"Toggle the square list style","Toggle the upper–latin list style":"Toggle the upper–latin list style","Toggle the upper–roman list style":"Toggle the upper–roman list style","Upper-latin":"Upper-latin","Upper-roman":"Upper-roman"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const o=n["en-au"]=n["en-au"]||{};o.dictionary=Object.assign(o.dictionary||{},{"Remove Format":"Remove Format"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e["en-au"]=e["en-au"]||{};t.dictionary=Object.assign(t.dictionary||{},{"Align cell text to the bottom":"Align cell text to the bottom","Align cell text to the center":"Align cell text to the center","Align cell text to the left":"Align cell text to the left","Align cell text to the middle":"Align cell text to the middle","Align cell text to the right":"Align cell text to the right","Align cell text to the top":"Align cell text to the top","Align table to the left":"Align table to the left","Align table to the right":"Align table to the right",Alignment:"Alignment",Background:"Background",Border:"Border","Cell properties":"Cell properties","Center table":"Centre table",Color:"Colour","Color picker":"Colour picker",Column:"Column",Dashed:"Dashed","Delete column":"Delete column","Delete row":"Delete row",Dimensions:"Dimensions",Dotted:"Dotted",Double:"Double","Enter table caption":"",Groove:"Groove","Header column":"Header column","Header row":"Header row",Height:"Height","Horizontal text alignment toolbar":"Horizontal text alignment toolbar","Insert column left":"Insert column left","Insert column right":"Insert column right","Insert row above":"Insert row above","Insert row below":"Insert row below","Insert table":"Insert table",Inset:"Inset","Justify cell text":"Justify cell text","Merge cell down":"Merge cell down","Merge cell left":"Merge cell left","Merge cell right":"Merge cell right","Merge cell up":"Merge cell up","Merge cells":"Merge cells",None:"None",Outset:"Outset",Padding:"Padding",Ridge:"Ridge",Row:"Row","Select column":"Select column","Select row":"Select row",Solid:"Solid","Split cell horizontally":"Split cell horizontally","Split cell vertically":"Split cell vertically",Style:"Style","Table alignment toolbar":"Table alignment toolbar","Table cell text alignment":"Table cell text alignment","Table properties":"Table properties","Table toolbar":"Table toolbar",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':'The colour is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".','The value is invalid. Try "10px" or "2em" or simply "2".':'The value is invalid. Try "10px" or "2em" or simply "2".',"Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"Vertical text alignment toolbar",Width:"Width"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(t){const a=t["en-au"]=t["en-au"]||{};a.dictionary=Object.assign(a.dictionary||{},{"Almost equal to":"Almost equal to",Angle:"Angle","Approximately equal to":"Approximately equal to","Asterisk operator":"Asterisk operator","Austral sign":"Austral sign","back with leftwards arrow above":"back with leftwards arrow above","Bitcoin sign":"Bitcoin sign","Cedi sign":"Cedi sign","Cent sign":"Cent sign","Character categories":"Character categories","Colon sign":"Colon sign","Contains as member":"Contains as member","Copyright sign":"Copyright sign","Cruzeiro sign":"Cruzeiro sign","Currency sign":"Currency sign","Degree sign":"Degree sign","Division sign":"Division sign","Dollar sign":"Dollar sign","Dong sign":"Dong sign","Double dagger":"Double dagger","Double exclamation mark":"Double exclamation mark","Double low-9 quotation mark":"Double low-9 quotation mark","Double question mark":"Double question mark","downwards arrow to bar":"downwards arrow to bar","downwards dashed arrow":"downwards dashed arrow","downwards double arrow":"downwards double arrow","Drachma sign":"Drachma sign","Element of":"Element of","Em dash":"Em dash","Empty set":"Empty set","En dash":"En dash","end with leftwards arrow above":"end with leftwards arrow above","Euro sign":"Euro sign","Euro-currency sign":"Euro-currency sign","Exclamation question mark":"Exclamation question mark","For all":"For all","Fraction slash":"Fraction slash","French franc sign":"French franc sign","German penny sign":"German penny sign","Greater-than or equal to":"Greater-than or equal to","Greater-than sign":"Greater-than sign","Guarani sign":"Guarani sign","Horizontal ellipsis":"Horizontal ellipsis","Hryvnia sign":"Hryvnia sign","Identical to":"Identical to","Indian rupee sign":"Indian rupee sign",Infinity:"Infinity",Integral:"Integral",Intersection:"Intersection","Inverted exclamation mark":"Inverted exclamation mark","Inverted question mark":"Inverted question mark","Kip sign":"Kip sign","Latin capital letter a with breve":"Latin capital letter a with breve","Latin capital letter a with macron":"Latin capital letter a with macron","Latin capital letter a with ogonek":"Latin capital letter a with ogonek","Latin capital letter c with acute":"Latin capital letter c with acute","Latin capital letter c with caron":"Latin capital letter c with caron","Latin capital letter c with circumflex":"Latin capital letter c with circumflex","Latin capital letter c with dot above":"Latin capital letter c with dot above","Latin capital letter d with caron":"Latin capital letter d with caron","Latin capital letter d with stroke":"Latin capital letter d with stroke","Latin capital letter e with breve":"Latin capital letter e with breve","Latin capital letter e with caron":"Latin capital letter e with caron","Latin capital letter e with dot above":"Latin capital letter e with dot above","Latin capital letter e with macron":"Latin capital letter e with macron","Latin capital letter e with ogonek":"Latin capital letter e with ogonek","Latin capital letter eng":"Latin capital letter eng","Latin capital letter g with breve":"Latin capital letter g with breve","Latin capital letter g with cedilla":"Latin capital letter g with cedilla","Latin capital letter g with circumflex":"Latin capital letter g with circumflex","Latin capital letter g with dot above":"Latin capital letter g with dot above","Latin capital letter h with circumflex":"Latin capital letter h with circumflex","Latin capital letter h with stroke":"Latin capital letter h with stroke","Latin capital letter i with breve":"Latin capital letter i with breve","Latin capital letter i with dot above":"Latin capital letter i with dot above","Latin capital letter i with macron":"Latin capital letter i with macron","Latin capital letter i with ogonek":"Latin capital letter i with ogonek","Latin capital letter i with tilde":"Latin capital letter i with tilde","Latin capital letter j with circumflex":"Latin capital letter j with circumflex","Latin capital letter k with cedilla":"Latin capital letter k with cedilla","Latin capital letter l with acute":"Latin capital letter l with acute","Latin capital letter l with caron":"Latin capital letter l with caron","Latin capital letter l with cedilla":"Latin capital letter l with cedilla","Latin capital letter l with middle dot":"Latin capital letter l with middle dot","Latin capital letter l with stroke":"Latin capital letter l with stroke","Latin capital letter n with acute":"Latin capital letter n with acute","Latin capital letter n with caron":"Latin capital letter n with caron","Latin capital letter n with cedilla":"Latin capital letter n with cedilla","Latin capital letter o with breve":"Latin capital letter o with breve","Latin capital letter o with double acute":"Latin capital letter o with double acute","Latin capital letter o with macron":"Latin capital letter o with macron","Latin capital letter r with acute":"Latin capital letter r with acute","Latin capital letter r with caron":"Latin capital letter r with caron","Latin capital letter r with cedilla":"Latin capital letter r with cedilla","Latin capital letter s with acute":"Latin capital letter s with acute","Latin capital letter s with caron":"Latin capital letter s with caron","Latin capital letter s with cedilla":"Latin capital letter s with cedilla","Latin capital letter s with circumflex":"Latin capital letter s with circumflex","Latin capital letter t with caron":"Latin capital letter t with caron","Latin capital letter t with cedilla":"Latin capital letter t with cedilla","Latin capital letter t with stroke":"Latin capital letter t with stroke","Latin capital letter u with breve":"Latin capital letter u with breve","Latin capital letter u with double acute":"Latin capital letter u with double acute","Latin capital letter u with macron":"Latin capital letter u with macron","Latin capital letter u with ogonek":"Latin capital letter u with ogonek","Latin capital letter u with ring above":"Latin capital letter u with ring above","Latin capital letter u with tilde":"Latin capital letter u with tilde","Latin capital letter w with circumflex":"Latin capital letter w with circumflex","Latin capital letter y with circumflex":"Latin capital letter y with circumflex","Latin capital letter y with diaeresis":"Latin capital letter y with diaeresis","Latin capital letter z with acute":"Latin capital letter z with acute","Latin capital letter z with caron":"Latin capital letter z with caron","Latin capital letter z with dot above":"Latin capital letter z with dot above","Latin capital ligature ij":"Latin capital ligature ij","Latin capital ligature oe":"Latin capital ligature oe","Latin small letter a with breve":"Latin small letter a with breve","Latin small letter a with macron":"Latin small letter a with macron","Latin small letter a with ogonek":"Latin small letter a with ogonek","Latin small letter c with acute":"Latin small letter c with acute","Latin small letter c with caron":"Latin small letter c with caron","Latin small letter c with circumflex":"Latin small letter c with circumflex","Latin small letter c with dot above":"Latin small letter c with dot above","Latin small letter d with caron":"Latin small letter d with caron","Latin small letter d with stroke":"Latin small letter d with stroke","Latin small letter dotless i":"Latin small letter dotless i","Latin small letter e with breve":"Latin small letter e with breve","Latin small letter e with caron":"Latin small letter e with caron","Latin small letter e with dot above":"Latin small letter e with dot above","Latin small letter e with macron":"Latin small letter e with macron","Latin small letter e with ogonek":"Latin small letter e with ogonek","Latin small letter eng":"Latin small letter eng","Latin small letter f with hook":"Latin small letter f with hook","Latin small letter g with breve":"Latin small letter g with breve","Latin small letter g with cedilla":"Latin small letter g with cedilla","Latin small letter g with circumflex":"Latin small letter g with circumflex","Latin small letter g with dot above":"Latin small letter g with dot above","Latin small letter h with circumflex":"Latin small letter h with circumflex","Latin small letter h with stroke":"Latin small letter h with stroke","Latin small letter i with breve":"Latin small letter i with breve","Latin small letter i with macron":"Latin small letter i with macron","Latin small letter i with ogonek":"Latin small letter i with ogonek","Latin small letter i with tilde":"Latin small letter i with tilde","Latin small letter j with circumflex":"Latin small letter j with circumflex","Latin small letter k with cedilla":"Latin small letter k with cedilla","Latin small letter kra":"Latin small letter kra","Latin small letter l with acute":"Latin small letter l with acute","Latin small letter l with caron":"Latin small letter l with caron","Latin small letter l with cedilla":"Latin small letter l with cedilla","Latin small letter l with middle dot":"Latin small letter l with middle dot","Latin small letter l with stroke":"Latin small letter l with stroke","Latin small letter long s":"Latin small letter long s","Latin small letter n preceded by apostrophe":"Latin small letter n preceded by apostrophe","Latin small letter n with acute":"Latin small letter n with acute","Latin small letter n with caron":"Latin small letter n with caron","Latin small letter n with cedilla":"Latin small letter n with cedilla","Latin small letter o with breve":"Latin small letter o with breve","Latin small letter o with double acute":"Latin small letter o with double acute","Latin small letter o with macron":"Latin small letter o with macron","Latin small letter r with acute":"Latin small letter r with acute","Latin small letter r with caron":"Latin small letter r with caron","Latin small letter r with cedilla":"Latin small letter r with cedilla","Latin small letter s with acute":"Latin small letter s with acute","Latin small letter s with caron":"Latin small letter s with caron","Latin small letter s with cedilla":"Latin small letter s with cedilla","Latin small letter s with circumflex":"Latin small letter s with circumflex","Latin small letter t with caron":"Latin small letter t with caron","Latin small letter t with cedilla":"Latin small letter t with cedilla","Latin small letter t with stroke":"Latin small letter t with stroke","Latin small letter u with breve":"Latin small letter u with breve","Latin small letter u with double acute":"Latin small letter u with double acute","Latin small letter u with macron":"Latin small letter u with macron","Latin small letter u with ogonek":"Latin small letter u with ogonek","Latin small letter u with ring above":"Latin small letter u with ring above","Latin small letter u with tilde":"Latin small letter u with tilde","Latin small letter w with circumflex":"Latin small letter w with circumflex","Latin small letter y with circumflex":"Latin small letter y with circumflex","Latin small letter z with acute":"Latin small letter z with acute","Latin small letter z with caron":"Latin small letter z with caron","Latin small letter z with dot above":"Latin small letter z with dot above","Latin small ligature ij":"Latin small ligature ij","Latin small ligature oe":"Latin small ligature oe","Left double quotation mark":"Left double quotation mark","Left single quotation mark":"Left single quotation mark","Left-pointing double angle quotation mark":"Left-pointing double angle quotation mark","leftwards arrow to bar":"leftwards arrow to bar","leftwards dashed arrow":"leftwards dashed arrow","leftwards double arrow":"leftwards double arrow","Less-than or equal to":"Less-than or equal to","Less-than sign":"Less-than sign","Lira sign":"Lira sign","Livre tournois sign":"Livre tournois sign","Logical and":"Logical and","Logical or":"Logical or",Macron:"Macron","Manat sign":"Manat sign","Mill sign":"Mill sign","Minus sign":"Minus sign","Multiplication sign":"Multiplication sign","N-ary product":"N-ary product","N-ary summation":"N-ary summation",Nabla:"Nabla","Naira sign":"Naira sign","New sheqel sign":"New sheqel sign","Nordic mark sign":"Nordic mark sign","Not an element of":"Not an element of","Not equal to":"Not equal to","Not sign":"Not sign","on with exclamation mark with left right arrow above":"on with exclamation mark with left right arrow above",Overline:"Overline","Paragraph sign":"Paragraph sign","Partial differential":"Partial differential","Per mille sign":"Per mille sign","Per ten thousand sign":"Per ten thousand sign","Peseta sign":"Peseta sign","Peso sign":"Peso sign","Plus-minus sign":"Plus-minus sign","Pound sign":"Pound sign","Proportional to":"Proportional to","Question exclamation mark":"Question exclamation mark","Registered sign":"Registered sign","Reversed paragraph sign":"Reversed paragraph sign","Right double quotation mark":"Right double quotation mark","Right single quotation mark":"Right single quotation mark","Right-pointing double angle quotation mark":"Right-pointing double angle quotation mark","rightwards arrow to bar":"rightwards arrow to bar","rightwards dashed arrow":"rightwards dashed arrow","rightwards double arrow":"rightwards double arrow","Ruble sign":"Ruble sign","Rupee sign":"Rupee sign","Section sign":"Section sign","Single left-pointing angle quotation mark":"Single left-pointing angle quotation mark","Single low-9 quotation mark":"Single low-9 quotation mark","Single right-pointing angle quotation mark":"Single right-pointing angle quotation mark","soon with rightwards arrow above":"soon with rightwards arrow above","Special characters":"Special characters","Spesmilo sign":"Spesmilo sign","Square root":"Square root","Tenge sign":"Tenge sign","There exists":"There exists","Tilde operator":"Tilde operator","top with upwards arrow above":"top with upwards arrow above","Trade mark sign":"Trade mark sign","Tugrik sign":"Tugrik sign","Turkish lira sign":"Turkish lira sign","Two dot leader":"Two dot leader",Union:"Union","up down arrow with base":"up down arrow with base","upwards arrow to bar":"upwards arrow to bar","upwards dashed arrow":"upwards dashed arrow","upwards double arrow":"upwards double arrow","Vulgar fraction one half":"Vulgar fraction one half","Vulgar fraction one quarter":"Vulgar fraction one quarter","Vulgar fraction three quarters":"Vulgar fraction three quarters","Won sign":"Won sign","Yen sign":"Yen sign"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const o=e["en-au"]=e["en-au"]||{};o.dictionary=Object.assign(o.dictionary||{},{"%0 of %1":"%0 of %1",Aquamarine:"Aquamarine",Black:"Black",Blue:"Blue",Cancel:"Cancel","Dim grey":"Dim grey","Dropdown toolbar":"Dropdown toolbar","Edit block":"Edit block","Editor toolbar":"Editor toolbar",Green:"Green",Grey:"Grey","Insert paragraph after block":"Insert paragraph after block","Insert paragraph before block":"Insert paragraph before block","Light blue":"Light blue","Light green":"Light green","Light grey":"Light grey",Next:"Next",Orange:"Orange",Previous:"Previous",Purple:"Purple",Red:"Red",Redo:"Redo","Remove color":"Remove colour","Restore default":"","Rich Text Editor":"Rich Text Editor","Rich Text Editor, %0":"Rich Text Editor, %0",Save:"Save","Select all":"Select all","Show more items":"Show more items",Turquoise:"Turquoise",Undo:"Undo","Upload in progress":"Upload in progress",White:"White","Widget toolbar":"Widget toolbar",Yellow:"Yellow"}),o.getPluralForm=function(e){return 1!=e}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/en-gb.js b/core/assets/vendor/ckeditor5/translations/en-gb.js
new file mode 100644
index 000000000000..1fb52e2aa538
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/en-gb.js
@@ -0,0 +1 @@
+!function(n){const i=n["en-gb"]=n["en-gb"]||{};i.dictionary=Object.assign(i.dictionary||{},{"Align center":"Align center","Align left":"Align left","Align right":"Align right",Justify:"Justify","Text alignment":"Text alignment","Text alignment toolbar":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const t=i["en-gb"]=i["en-gb"]||{};t.dictionary=Object.assign(t.dictionary||{},{Bold:"Bold",Code:"Code",Italic:"Italic",Strikethrough:"Strikethrough",Subscript:"Subscript",Superscript:"Superscript",Underline:"Underline"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const o=n["en-gb"]=n["en-gb"]||{};o.dictionary=Object.assign(o.dictionary||{},{"Block quote":"Block quote"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const n=e["en-gb"]=e["en-gb"]||{};n.dictionary=Object.assign(n.dictionary||{},{"Choose heading":"Choose heading",Heading:"Heading","Heading 1":"Heading 1","Heading 2":"Heading 2","Heading 3":"Heading 3","Heading 4":"Heading 4","Heading 5":"Heading 5","Heading 6":"Heading 6",Paragraph:"Paragraph","Type or paste your content here.":"","Type your title":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e["en-gb"]=e["en-gb"]||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"","Centered image":"Centred image","Change image text alternative":"Change image text alternative","Enter image caption":"Enter image caption","Full size image":"Full size image","Image resize list":"","Image toolbar":"","image widget":"Image widget","In line":"",Insert:"","Insert image":"Insert image","Insert image via URL":"","Left aligned image":"Left aligned image",Original:"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Right aligned image":"Right aligned image","Side image":"Side image","Text alternative":"Text alternative",Update:"","Update image URL":"","Upload failed":"Upload failed","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const e=n["en-gb"]=n["en-gb"]||{};e.dictionary=Object.assign(e.dictionary||{},{"Decrease indent":"Decrease indent","Increase indent":"Increase indent"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n["en-gb"]=n["en-gb"]||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"Downloadable","Edit link":"Edit link",Link:"Link","Link image":"","Link URL":"Link URL","Open in a new tab":"Open in a new tab","Open link in new tab":"Open link in new tab","This link has no URL":"This link has no URL",Unlink:"Unlink"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e["en-gb"]=e["en-gb"]||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"Bulleted List","Bulleted list styles toolbar":"",Circle:"",Decimal:"","Decimal with leading zero":"",Disc:"","Lower-latin":"","Lower–roman":"","Numbered List":"Numbered List","Numbered list styles toolbar":"",Square:"","To-do List":"","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const o=n["en-gb"]=n["en-gb"]||{};o.dictionary=Object.assign(o.dictionary||{},{"Remove Format":"Remove Format"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e["en-gb"]=e["en-gb"]||{};l.dictionary=Object.assign(l.dictionary||{},{"Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align table to the left":"","Align table to the right":"",Alignment:"",Background:"",Border:"","Cell properties":"","Center table":"",Color:"","Color picker":"",Column:"Column",Dashed:"","Delete column":"Delete column","Delete row":"Delete row",Dimensions:"",Dotted:"",Double:"","Enter table caption":"",Groove:"","Header column":"Header column","Header row":"Header row",Height:"","Horizontal text alignment toolbar":"","Insert column left":"Insert column left","Insert column right":"Insert column right","Insert row above":"Insert row above","Insert row below":"Insert row below","Insert table":"Insert table",Inset:"","Justify cell text":"","Merge cell down":"Merge cell down","Merge cell left":"Merge cell left","Merge cell right":"Merge cell right","Merge cell up":"Merge cell up","Merge cells":"Merge cells",None:"",Outset:"",Padding:"",Ridge:"",Row:"Row","Select column":"","Select row":"",Solid:"","Split cell horizontally":"Split cell horizontally","Split cell vertically":"Split cell vertically",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':"",'The value is invalid. Try "10px" or "2em" or simply "2".':"","Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"",Width:""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const o=e["en-gb"]=e["en-gb"]||{};o.dictionary=Object.assign(o.dictionary||{},{"%0 of %1":"%0 of %1",Aquamarine:"Aquamarine",Black:"Black",Blue:"Blue",Cancel:"Cancel","Dim grey":"Dim grey","Dropdown toolbar":"","Edit block":"Edit block","Editor toolbar":"",Green:"Green",Grey:"Grey","Light blue":"Light blue","Light green":"Light green","Light grey":"Light grey",Next:"Next",Orange:"Orange",Previous:"Previous",Purple:"Purple",Red:"Red",Redo:"Redo","Remove color":"Remove colour","Restore default":"","Rich Text Editor":"Rich Text Editor","Rich Text Editor, %0":"Rich Text Editor, %0",Save:"Save","Show more items":"",Turquoise:"Turquoise",Undo:"Undo","Upload in progress":"Upload in progress",White:"White",Yellow:"Yellow"}),o.getPluralForm=function(e){return 1!=e}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/eo.js b/core/assets/vendor/ckeditor5/translations/eo.js
new file mode 100644
index 000000000000..5270850a0a7e
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/eo.js
@@ -0,0 +1 @@
+!function(i){const o=i.eo=i.eo||{};o.dictionary=Object.assign(o.dictionary||{},{Bold:"grasa",Code:"",Italic:"kursiva",Strikethrough:"",Subscript:"",Superscript:"",Underline:""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(a){const e=a.eo=a.eo||{};e.dictionary=Object.assign(e.dictionary||{},{"Choose heading":"Elektu ĉapon",Heading:"Ĉapo","Heading 1":"Ĉapo 1","Heading 2":"Ĉapo 2","Heading 3":"Ĉapo 3","Heading 4":"","Heading 5":"","Heading 6":"",Paragraph:"Paragrafo","Type or paste your content here.":"","Type your title":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.eo=e.eo||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"","Centered image":"","Change image text alternative":"Ŝanĝu la alternativan tekston de la bildo","Enter image caption":"Skribu klarigon pri la bildo","Full size image":"Bildo kun reala dimensio","Image resize list":"","Image toolbar":"","image widget":"bilda fenestraĵo","In line":"",Insert:"","Insert image":"Enmetu bildon","Insert image via URL":"","Left aligned image":"",Original:"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Right aligned image":"","Side image":"Flanka biildo","Text alternative":"Alternativa teksto",Update:"","Update image URL":"","Upload failed":"","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.eo=i.eo||{};n.dictionary=Object.assign(n.dictionary||{},{Downloadable:"","Edit link":"",Link:"Ligilo","Link image":"","Link URL":"URL de la ligilo","Open in a new tab":"","Open link in new tab":"","This link has no URL":"",Unlink:"Malligi"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.eo=e.eo||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"Bula Listo","Bulleted list styles toolbar":"",Circle:"",Decimal:"","Decimal with leading zero":"",Disc:"","Lower-latin":"","Lower–roman":"","Numbered List":"Numerita Listo","Numbered list styles toolbar":"",Square:"","To-do List":"","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const o=e.eo=e.eo||{};o.dictionary=Object.assign(o.dictionary||{},{"%0 of %1":"",Aquamarine:"",Black:"",Blue:"",Cancel:"Nuligi","Dim grey":"","Dropdown toolbar":"","Edit block":"","Editor toolbar":"",Green:"",Grey:"","Light blue":"","Light green":"","Light grey":"",Next:"",Orange:"",Previous:"",Purple:"",Red:"",Redo:"Refari","Remove color":"","Restore default":"","Rich Text Editor":"Redaktilo de Riĉa Teksto","Rich Text Editor, %0":"Redaktilo de Riĉa Teksto, %0",Save:"Konservi","Show more items":"",Turquoise:"",Undo:"Malfari",White:"",Yellow:""}),o.getPluralForm=function(e){return 1!=e}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/es.js b/core/assets/vendor/ckeditor5/translations/es.js
new file mode 100644
index 000000000000..018170a31e81
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/es.js
@@ -0,0 +1 @@
+!function(e){const i=e.es=e.es||{};i.dictionary=Object.assign(i.dictionary||{},{"Align center":"Centrar","Align left":"Alinear a la izquierda","Align right":"Alinear a la derecha",Justify:"Justificar","Text alignment":"Alineación del texto","Text alignment toolbar":"Barra de herramientas de alineación del texto"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const d=i.es=i.es||{};d.dictionary=Object.assign(d.dictionary||{},{Bold:"Negrita",Code:"Código",Italic:"Cursiva",Strikethrough:"Tachado",Subscript:"Subíndice",Superscript:"Superíndice",Underline:"Subrayado"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const o=i.es=i.es||{};o.dictionary=Object.assign(o.dictionary||{},{"Block quote":"Cita de bloque"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(a){const e=a.es=a.es||{};e.dictionary=Object.assign(e.dictionary||{},{"Choose heading":"Elegir Encabezado",Heading:"Encabezado","Heading 1":"Encabezado 1","Heading 2":"Encabezado 2","Heading 3":"Encabezado 3","Heading 4":"Encabezado 4","Heading 5":"Encabezado 5","Heading 6":"Encabezado 6",Paragraph:"Párrafo","Type or paste your content here.":"Introduce o pega tu contenido aquí","Type your title":"Introduce tu título"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.es=n.es||{};i.dictionary=Object.assign(i.dictionary||{},{"Horizontal line":"Línea horizontal"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const a=e.es=e.es||{};a.dictionary=Object.assign(a.dictionary||{},{"Break text":"","Centered image":"Imagen centrada","Change image text alternative":"Cambiar el texto alternativo de la imagen","Enter image caption":"Introducir título de la imagen","Full size image":"Imagen a tamaño completo","Image resize list":"","Image toolbar":"Barra de herramientas de imagen","image widget":"Widget de imagen","In line":"",Insert:"","Insert image":"Insertar imagen","Insert image via URL":"","Left aligned image":"Imagen alineada a la izquierda",Original:"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Right aligned image":"Imagen alineada a la derecha","Side image":"Imagen lateral","Text alternative":"Texto alternativo",Update:"","Update image URL":"","Upload failed":"Fallo en la subida","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.es=n.es||{};i.dictionary=Object.assign(i.dictionary||{},{"Decrease indent":"Disminuir sangría","Increase indent":"Aumentar sangría"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const a=i.es=i.es||{};a.dictionary=Object.assign(a.dictionary||{},{"Choose language":"Elija el idioma",Language:"Idioma","Remove language":"Quitar idioma"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const e=n.es=n.es||{};e.dictionary=Object.assign(e.dictionary||{},{Downloadable:"Descargable","Edit link":"Editar enlace",Link:"Enlace","Link image":"","Link URL":"URL del enlace","Open in a new tab":"Abrir en una pestaña nueva ","Open link in new tab":"Abrir enlace en una pestaña nueva","This link has no URL":"Este enlace no tiene URL",Unlink:"Quitar enlace"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e.es=e.es||{};t.dictionary=Object.assign(t.dictionary||{},{"Bulleted List":"Lista de puntos","Bulleted list styles toolbar":"",Circle:"",Decimal:"","Decimal with leading zero":"",Disc:"","Lower-latin":"","Lower–roman":"","Numbered List":"Lista numerada","Numbered list styles toolbar":"",Square:"","To-do List":"Lista de tareas","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(o){const i=o.es=o.es||{};i.dictionary=Object.assign(i.dictionary||{},{"Remove Format":"Quitar Formato"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.es=e.es||{};l.dictionary=Object.assign(l.dictionary||{},{"Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align table to the left":"","Align table to the right":"",Alignment:"",Background:"",Border:"","Cell properties":"","Center table":"",Color:"","Color picker":"",Column:"Columna",Dashed:"","Delete column":"Eliminar columna","Delete row":"Eliminar fila",Dimensions:"",Dotted:"",Double:"","Enter table caption":"",Groove:"","Header column":"Columna de encabezado","Header row":"Fila de encabezado",Height:"","Horizontal text alignment toolbar":"","Insert column left":"Insertar columna izquierda","Insert column right":"Insertar columna derecha","Insert row above":"Insertar fila encima","Insert row below":"Insertar fila debajo","Insert table":"Insertar tabla",Inset:"","Justify cell text":"","Merge cell down":"Combinar celda inferior","Merge cell left":"Combinar celda izquierda","Merge cell right":"Combinar celda derecha","Merge cell up":"Combinar celda superior","Merge cells":"Combinar celdas",None:"",Outset:"",Padding:"",Ridge:"",Row:"Fila","Select column":"","Select row":"",Solid:"","Split cell horizontally":"Dividir celdas horizontalmente","Split cell vertically":"Dividir celdas verticalmente",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"Barra de herramientas de tabla",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':"",'The value is invalid. Try "10px" or "2em" or simply "2".':"","Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"",Width:""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(t){const a=t.es=t.es||{};a.dictionary=Object.assign(a.dictionary||{},{"Almost equal to":"",Angle:"","Approximately equal to":"","Asterisk operator":"","Austral sign":"","back with leftwards arrow above":"","Bitcoin sign":"Signo del bitcóin","Cedi sign":"","Cent sign":"Signo del centavo","Character categories":"","Colon sign":"Signo del colón","Contains as member":"","Copyright sign":"Signo de derechos de autor","Cruzeiro sign":"Signo del cruceiro","Currency sign":"Signo monetario","Degree sign":"Signo de grado","Division sign":"Signo de división","Dollar sign":"Signo del dólar","Dong sign":"","Double dagger":"","Double exclamation mark":"","Double low-9 quotation mark":"","Double question mark":"","downwards arrow to bar":"","downwards dashed arrow":"","downwards double arrow":"","Drachma sign":"","Element of":"","Em dash":"Raya","Empty set":"","En dash":"Semirraya","end with leftwards arrow above":"","Euro sign":"Signo del euro","Euro-currency sign":"Signo de la moneda euro","Exclamation question mark":"","For all":"","Fraction slash":"Barra fraccionaria","French franc sign":"Signo del franco francés","German penny sign":"","Greater-than or equal to":"","Greater-than sign":"","Guarani sign":"Signo del guaraní","Horizontal ellipsis":"Puntos suspensivos horizontales","Hryvnia sign":"","Identical to":"","Indian rupee sign":"",Infinity:"",Integral:"",Intersection:"","Inverted exclamation mark":"Signo de exclamación de apertura","Inverted question mark":"Signo de interrogación de apertura","Kip sign":"","Latin capital letter a with breve":"","Latin capital letter a with macron":"","Latin capital letter a with ogonek":"","Latin capital letter c with acute":"","Latin capital letter c with caron":"","Latin capital letter c with circumflex":"","Latin capital letter c with dot above":"","Latin capital letter d with caron":"","Latin capital letter d with stroke":"","Latin capital letter e with breve":"","Latin capital letter e with caron":"","Latin capital letter e with dot above":"","Latin capital letter e with macron":"","Latin capital letter e with ogonek":"","Latin capital letter eng":"","Latin capital letter g with breve":"","Latin capital letter g with cedilla":"","Latin capital letter g with circumflex":"","Latin capital letter g with dot above":"","Latin capital letter h with circumflex":"","Latin capital letter h with stroke":"","Latin capital letter i with breve":"","Latin capital letter i with dot above":"","Latin capital letter i with macron":"","Latin capital letter i with ogonek":"","Latin capital letter i with tilde":"","Latin capital letter j with circumflex":"","Latin capital letter k with cedilla":"","Latin capital letter l with acute":"","Latin capital letter l with caron":"","Latin capital letter l with cedilla":"","Latin capital letter l with middle dot":"","Latin capital letter l with stroke":"","Latin capital letter n with acute":"","Latin capital letter n with caron":"","Latin capital letter n with cedilla":"","Latin capital letter o with breve":"","Latin capital letter o with double acute":"","Latin capital letter o with macron":"","Latin capital letter r with acute":"","Latin capital letter r with caron":"","Latin capital letter r with cedilla":"","Latin capital letter s with acute":"","Latin capital letter s with caron":"","Latin capital letter s with cedilla":"","Latin capital letter s with circumflex":"","Latin capital letter t with caron":"","Latin capital letter t with cedilla":"","Latin capital letter t with stroke":"","Latin capital letter u with breve":"","Latin capital letter u with double acute":"","Latin capital letter u with macron":"","Latin capital letter u with ogonek":"","Latin capital letter u with ring above":"","Latin capital letter u with tilde":"","Latin capital letter w with circumflex":"","Latin capital letter y with circumflex":"","Latin capital letter y with diaeresis":"","Latin capital letter z with acute":"","Latin capital letter z with caron":"","Latin capital letter z with dot above":"","Latin capital ligature ij":"","Latin capital ligature oe":"","Latin small letter a with breve":"","Latin small letter a with macron":"","Latin small letter a with ogonek":"","Latin small letter c with acute":"","Latin small letter c with caron":"","Latin small letter c with circumflex":"","Latin small letter c with dot above":"","Latin small letter d with caron":"","Latin small letter d with stroke":"","Latin small letter dotless i":"","Latin small letter e with breve":"","Latin small letter e with caron":"","Latin small letter e with dot above":"","Latin small letter e with macron":"","Latin small letter e with ogonek":"","Latin small letter eng":"","Latin small letter f with hook":"","Latin small letter g with breve":"","Latin small letter g with cedilla":"","Latin small letter g with circumflex":"","Latin small letter g with dot above":"","Latin small letter h with circumflex":"","Latin small letter h with stroke":"","Latin small letter i with breve":"","Latin small letter i with macron":"","Latin small letter i with ogonek":"","Latin small letter i with tilde":"","Latin small letter j with circumflex":"","Latin small letter k with cedilla":"","Latin small letter kra":"","Latin small letter l with acute":"","Latin small letter l with caron":"","Latin small letter l with cedilla":"","Latin small letter l with middle dot":"","Latin small letter l with stroke":"","Latin small letter long s":"","Latin small letter n preceded by apostrophe":"","Latin small letter n with acute":"","Latin small letter n with caron":"","Latin small letter n with cedilla":"","Latin small letter o with breve":"","Latin small letter o with double acute":"","Latin small letter o with macron":"","Latin small letter r with acute":"","Latin small letter r with caron":"","Latin small letter r with cedilla":"","Latin small letter s with acute":"","Latin small letter s with caron":"","Latin small letter s with cedilla":"","Latin small letter s with circumflex":"","Latin small letter t with caron":"","Latin small letter t with cedilla":"","Latin small letter t with stroke":"","Latin small letter u with breve":"","Latin small letter u with double acute":"","Latin small letter u with macron":"","Latin small letter u with ogonek":"","Latin small letter u with ring above":"","Latin small letter u with tilde":"","Latin small letter w with circumflex":"","Latin small letter y with circumflex":"","Latin small letter z with acute":"","Latin small letter z with caron":"","Latin small letter z with dot above":"","Latin small ligature ij":"","Latin small ligature oe":"","Left double quotation mark":"","Left single quotation mark":"","Left-pointing double angle quotation mark":"","leftwards arrow to bar":"","leftwards dashed arrow":"","leftwards double arrow":"","Less-than or equal to":"","Less-than sign":"","Lira sign":"Signo de la lira","Livre tournois sign":"","Logical and":"","Logical or":"",Macron:"","Manat sign":"","Mill sign":"","Minus sign":"Signo de resta","Multiplication sign":"Signo de multiplicación","N-ary product":"","N-ary summation":"",Nabla:"","Naira sign":"","New sheqel sign":"Signo del nuevo séquel","Nordic mark sign":"","Not an element of":"","Not equal to":"","Not sign":"","on with exclamation mark with left right arrow above":"",Overline:"","Paragraph sign":"Signo de párrafo","Partial differential":"","Per mille sign":"","Per ten thousand sign":"","Peseta sign":"Signo de la peseta","Peso sign":"Signo del peso","Plus-minus sign":"","Pound sign":"Signo de la libra","Proportional to":"","Question exclamation mark":"","Registered sign":"Signo de marca registrada","Reversed paragraph sign":"","Right double quotation mark":"","Right single quotation mark":"","Right-pointing double angle quotation mark":"","rightwards arrow to bar":"","rightwards dashed arrow":"","rightwards double arrow":"","Ruble sign":"Signo del rublo","Rupee sign":"Signo de la rupia","Section sign":"Signo de sección","Single left-pointing angle quotation mark":"","Single low-9 quotation mark":"","Single right-pointing angle quotation mark":"","soon with rightwards arrow above":"","Special characters":"Caracteres especiales","Spesmilo sign":"","Square root":"","Tenge sign":"","There exists":"","Tilde operator":"","top with upwards arrow above":"","Trade mark sign":"Signo de marca comercial","Tugrik sign":"","Turkish lira sign":"","Two dot leader":"",Union:"","up down arrow with base":"","upwards arrow to bar":"","upwards dashed arrow":"","upwards double arrow":"","Vulgar fraction one half":"","Vulgar fraction one quarter":"","Vulgar fraction three quarters":"","Won sign":"Signo del won","Yen sign":"Signo del yen"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const r=e.es=e.es||{};r.dictionary=Object.assign(r.dictionary||{},{"%0 of %1":"%0 de %1",Aquamarine:"Aguamarina",Black:"Negro",Blue:"Azul",Cancel:"Cancelar","Dim grey":"Gris Oscuro","Dropdown toolbar":"Barra de herramientas desplegable","Edit block":"Cuadro de edición","Editor toolbar":"Barra de herramientas de edición",Green:"Verde",Grey:"Gris","Insert paragraph after block":"","Insert paragraph before block":"","Light blue":"Azul Claro","Light green":"Verde Claro","Light grey":"Gris Claro",Next:"Siguiente",Orange:"Anaranjado",Previous:"Anterior",Purple:"Morado",Red:"Rojo",Redo:"Rehacer","Remove color":"Quitar color","Restore default":"Restaurar valores predeterminados","Rich Text Editor":"Editor de Texto Enriquecido","Rich Text Editor, %0":"Editor de Texto Enriquecido, %0",Save:"Guardar","Select all":"Seleccionar todo","Show more items":"Mostrar más elementos",Turquoise:"Turquesa",Undo:"Deshacer","Upload in progress":"Subida en progreso",White:"Blanco","Widget toolbar":"Barra de herramientas del widget",Yellow:"Amarillo"}),r.getPluralForm=function(e){return 1!=e}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/et.js b/core/assets/vendor/ckeditor5/translations/et.js
new file mode 100644
index 000000000000..c93f01ad1726
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/et.js
@@ -0,0 +1 @@
+!function(n){const i=n.et=n.et||{};i.dictionary=Object.assign(i.dictionary||{},{"Align center":"Keskjoondus","Align left":"Vasakjoondus","Align right":"Paremjoondus",Justify:"Rööpjoondus","Text alignment":"Teksti joondamine","Text alignment toolbar":"Teksti joonduse tööriistariba"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.et=i.et||{};n.dictionary=Object.assign(n.dictionary||{},{Bold:"Rasvane",Code:"Kood",Italic:"Kaldkiri",Strikethrough:"Läbijoonitud",Subscript:"Alaindeks",Superscript:"Ülaindeks",Underline:"Allajoonitud"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(t){const i=t.et=t.et||{};i.dictionary=Object.assign(i.dictionary||{},{"Block quote":"Tsitaat"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const e=i.et=i.et||{};e.dictionary=Object.assign(e.dictionary||{},{"Choose heading":"Vali pealkiri",Heading:"Pealkiri","Heading 1":"Pealkiri 1","Heading 2":"Pealkiri 2","Heading 3":"Pealkiri 3","Heading 4":"Pealkiri 4","Heading 5":"Pealkiri 5","Heading 6":"Pealkiri 6",Paragraph:"Lõik","Type or paste your content here.":"Siia tipi või kopeeri tekst.","Type your title":"Sisesta pealkiri"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const o=n.et=n.et||{};o.dictionary=Object.assign(o.dictionary||{},{"Horizontal line":"Horisontaalne joon"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.et=e.et||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"","Centered image":"Keskele joondatud pilt","Change image text alternative":"Muuda pildi asenduskirjeldust","Enter image caption":"Sisesta pildi pealkiri","Full size image":"Täissuuruses pilt","Image resize list":"","Image toolbar":"Piltide tööriistariba","image widget":"pildi vidin","In line":"",Insert:"","Insert image":"Siseta pilt","Insert image via URL":"","Left aligned image":"Vasakule joondatud pilt",Original:"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Right aligned image":"Paremale joondatud pilt","Side image":"Pilt küljel","Text alternative":"Asenduskirjeldus",Update:"","Update image URL":"","Upload failed":"Üleslaadimine ebaõnnestus","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const e=n.et=n.et||{};e.dictionary=Object.assign(e.dictionary||{},{"Decrease indent":"Vähenda taanet","Increase indent":"Suurenda taanet"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.et=i.et||{};n.dictionary=Object.assign(n.dictionary||{},{Downloadable:"Allalaaditav","Edit link":"Muuda linki",Link:"Link","Link image":"","Link URL":"Lingi URL","Open in a new tab":"Ava uuel kaardil","Open link in new tab":"Ava link uuel vahekaardil","This link has no URL":"Sellel lingil puudub URL",Unlink:"Eemalda link"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.et=e.et||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"Punktidega loetelu","Bulleted list styles toolbar":"",Circle:"",Decimal:"","Decimal with leading zero":"",Disc:"","Lower-latin":"","Lower–roman":"","Numbered List":"Nummerdatud loetelu","Numbered list styles toolbar":"",Square:"","To-do List":"Tööde nimekiri","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.et=i.et||{};n.dictionary=Object.assign(n.dictionary||{},{"Remove Format":"Eemalda vorming"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e.et=e.et||{};t.dictionary=Object.assign(t.dictionary||{},{"Align cell text to the bottom":"Lahtri tekst all","Align cell text to the center":"Lahtri tekst keskel","Align cell text to the left":"Lahtri tekst vasakul","Align cell text to the middle":"Lahtri tekst kõrguse järgi keskel","Align cell text to the right":"Lahtri tekst paremal","Align cell text to the top":"Lahtri tekst üleval","Align table to the left":"Tabel joondatud vasakule","Align table to the right":"Tabel joondatud paremale",Alignment:"Joondus",Background:"Taust",Border:"Ääris","Cell properties":"Lahtri omadused","Center table":"Tabel joondatud keskele",Color:"Värvus","Color picker":"Värvi valija",Column:"Veerg",Dashed:"Kriipsjoon","Delete column":"Kustuta veerg","Delete row":"Kustuta rida",Dimensions:"Mõõtmed",Dotted:"Punktiir",Double:"Topelt","Enter table caption":"",Groove:"Kraav","Header column":"Päise veerg","Header row":"Päise rida",Height:"Kõrgus","Horizontal text alignment toolbar":"Teksti rõhtpaigutuse tööriistariba","Insert column left":"Sisesta veerg vasakule","Insert column right":"Sisesta veerg paremale","Insert row above":"Sisesta rida ülespoole","Insert row below":"Sisesta rida allapoole","Insert table":"Sisesta tabel",Inset:"Süvik","Justify cell text":"Lahtri tekst rööpjoondatud","Merge cell down":"Liida alumise lahtriga","Merge cell left":"Liida vasakul oleva lahtriga","Merge cell right":"Liida paremal oleva lahtriga","Merge cell up":"Liida ülemise lahtriga","Merge cells":"Liida lahtrid",None:"Puudub",Outset:"Küngas",Padding:"Vahe sisuni",Ridge:"Vall",Row:"Rida","Select column":"Vali veerg","Select row":"Vali rida",Solid:"Pidev","Split cell horizontally":"Jaga lahter horisontaalselt","Split cell vertically":"Jaga lahter vertikaalselt",Style:"Stiil","Table alignment toolbar":"Tabeli paigutuse tööriistariba","Table cell text alignment":"Teksti paigutus lahtris","Table properties":"Tabeli omadused","Table toolbar":"Tabelite tööriistariba",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':'Värvus ei sobi. Proovi "#FF0000" või "rgb(255,0,0)" või "red".','The value is invalid. Try "10px" or "2em" or simply "2".':'Väärtus ei sobi. Proovi "10px", "2em" või lihtsalt "2".',"Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"Teksti püstpaigutuse tööriistariba",Width:"Laius"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(t){const a=t.et=t.et||{};a.dictionary=Object.assign(a.dictionary||{},{"Almost equal to":"",Angle:"","Approximately equal to":"","Asterisk operator":"","Austral sign":"","back with leftwards arrow above":"","Bitcoin sign":"","Cedi sign":"","Cent sign":"Sendi märk","Character categories":"","Colon sign":"","Contains as member":"","Copyright sign":"","Cruzeiro sign":"","Currency sign":"","Degree sign":"","Division sign":"","Dollar sign":"","Dong sign":"","Double dagger":"","Double exclamation mark":"","Double low-9 quotation mark":"","Double question mark":"","downwards arrow to bar":"","downwards dashed arrow":"","downwards double arrow":"","Drachma sign":"","Element of":"","Em dash":"","Empty set":"","En dash":"","end with leftwards arrow above":"","Euro sign":"Euro märk","Euro-currency sign":"","Exclamation question mark":"","For all":"","Fraction slash":"","French franc sign":"","German penny sign":"","Greater-than or equal to":"","Greater-than sign":"","Guarani sign":"","Horizontal ellipsis":"","Hryvnia sign":"","Identical to":"","Indian rupee sign":"",Infinity:"",Integral:"",Intersection:"","Inverted exclamation mark":"","Inverted question mark":"","Kip sign":"","Latin capital letter a with breve":"","Latin capital letter a with macron":"","Latin capital letter a with ogonek":"","Latin capital letter c with acute":"","Latin capital letter c with caron":"","Latin capital letter c with circumflex":"","Latin capital letter c with dot above":"","Latin capital letter d with caron":"","Latin capital letter d with stroke":"","Latin capital letter e with breve":"","Latin capital letter e with caron":"","Latin capital letter e with dot above":"","Latin capital letter e with macron":"","Latin capital letter e with ogonek":"","Latin capital letter eng":"","Latin capital letter g with breve":"","Latin capital letter g with cedilla":"","Latin capital letter g with circumflex":"","Latin capital letter g with dot above":"","Latin capital letter h with circumflex":"","Latin capital letter h with stroke":"","Latin capital letter i with breve":"","Latin capital letter i with dot above":"","Latin capital letter i with macron":"","Latin capital letter i with ogonek":"","Latin capital letter i with tilde":"","Latin capital letter j with circumflex":"","Latin capital letter k with cedilla":"","Latin capital letter l with acute":"","Latin capital letter l with caron":"","Latin capital letter l with cedilla":"","Latin capital letter l with middle dot":"","Latin capital letter l with stroke":"","Latin capital letter n with acute":"","Latin capital letter n with caron":"","Latin capital letter n with cedilla":"","Latin capital letter o with breve":"","Latin capital letter o with double acute":"","Latin capital letter o with macron":"","Latin capital letter r with acute":"","Latin capital letter r with caron":"","Latin capital letter r with cedilla":"","Latin capital letter s with acute":"","Latin capital letter s with caron":"","Latin capital letter s with cedilla":"","Latin capital letter s with circumflex":"","Latin capital letter t with caron":"","Latin capital letter t with cedilla":"","Latin capital letter t with stroke":"","Latin capital letter u with breve":"","Latin capital letter u with double acute":"","Latin capital letter u with macron":"","Latin capital letter u with ogonek":"","Latin capital letter u with ring above":"","Latin capital letter u with tilde":"","Latin capital letter w with circumflex":"","Latin capital letter y with circumflex":"","Latin capital letter y with diaeresis":"","Latin capital letter z with acute":"","Latin capital letter z with caron":"","Latin capital letter z with dot above":"","Latin capital ligature ij":"","Latin capital ligature oe":"","Latin small letter a with breve":"","Latin small letter a with macron":"","Latin small letter a with ogonek":"","Latin small letter c with acute":"","Latin small letter c with caron":"","Latin small letter c with circumflex":"","Latin small letter c with dot above":"","Latin small letter d with caron":"","Latin small letter d with stroke":"","Latin small letter dotless i":"","Latin small letter e with breve":"","Latin small letter e with caron":"","Latin small letter e with dot above":"","Latin small letter e with macron":"","Latin small letter e with ogonek":"","Latin small letter eng":"","Latin small letter f with hook":"","Latin small letter g with breve":"","Latin small letter g with cedilla":"","Latin small letter g with circumflex":"","Latin small letter g with dot above":"","Latin small letter h with circumflex":"","Latin small letter h with stroke":"","Latin small letter i with breve":"","Latin small letter i with macron":"","Latin small letter i with ogonek":"","Latin small letter i with tilde":"","Latin small letter j with circumflex":"","Latin small letter k with cedilla":"","Latin small letter kra":"","Latin small letter l with acute":"","Latin small letter l with caron":"","Latin small letter l with cedilla":"","Latin small letter l with middle dot":"","Latin small letter l with stroke":"","Latin small letter long s":"","Latin small letter n preceded by apostrophe":"","Latin small letter n with acute":"","Latin small letter n with caron":"","Latin small letter n with cedilla":"","Latin small letter o with breve":"","Latin small letter o with double acute":"","Latin small letter o with macron":"","Latin small letter r with acute":"","Latin small letter r with caron":"","Latin small letter r with cedilla":"","Latin small letter s with acute":"","Latin small letter s with caron":"","Latin small letter s with cedilla":"","Latin small letter s with circumflex":"","Latin small letter t with caron":"","Latin small letter t with cedilla":"","Latin small letter t with stroke":"","Latin small letter u with breve":"","Latin small letter u with double acute":"","Latin small letter u with macron":"","Latin small letter u with ogonek":"","Latin small letter u with ring above":"","Latin small letter u with tilde":"","Latin small letter w with circumflex":"","Latin small letter y with circumflex":"","Latin small letter z with acute":"","Latin small letter z with caron":"","Latin small letter z with dot above":"","Latin small ligature ij":"","Latin small ligature oe":"","Left double quotation mark":"","Left single quotation mark":"","Left-pointing double angle quotation mark":"","leftwards arrow to bar":"","leftwards dashed arrow":"","leftwards double arrow":"","Less-than or equal to":"","Less-than sign":"","Lira sign":"","Livre tournois sign":"","Logical and":"","Logical or":"",Macron:"","Manat sign":"","Mill sign":"","Minus sign":"Miinusmärk","Multiplication sign":"","N-ary product":"","N-ary summation":"",Nabla:"","Naira sign":"","New sheqel sign":"","Nordic mark sign":"","Not an element of":"","Not equal to":"","Not sign":"","on with exclamation mark with left right arrow above":"",Overline:"","Paragraph sign":"","Partial differential":"","Per mille sign":"","Per ten thousand sign":"","Peseta sign":"","Peso sign":"","Plus-minus sign":"","Pound sign":"Naela märk","Proportional to":"","Question exclamation mark":"","Registered sign":"","Reversed paragraph sign":"","Right double quotation mark":"","Right single quotation mark":"","Right-pointing double angle quotation mark":"","rightwards arrow to bar":"","rightwards dashed arrow":"","rightwards double arrow":"","Ruble sign":"","Rupee sign":"","Section sign":"","Single left-pointing angle quotation mark":"","Single low-9 quotation mark":"","Single right-pointing angle quotation mark":"","soon with rightwards arrow above":"","Special characters":"Erimärgid","Spesmilo sign":"","Square root":"","Tenge sign":"","There exists":"","Tilde operator":"","top with upwards arrow above":"","Trade mark sign":"","Tugrik sign":"","Turkish lira sign":"","Two dot leader":"",Union:"","up down arrow with base":"","upwards arrow to bar":"","upwards dashed arrow":"","upwards double arrow":"","Vulgar fraction one half":"","Vulgar fraction one quarter":"","Vulgar fraction three quarters":"","Won sign":"","Yen sign":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.et=e.et||{};i.dictionary=Object.assign(i.dictionary||{},{"%0 of %1":"%0 / %1",Aquamarine:"Akvamariin",Black:"Must",Blue:"Sinine",Cancel:"Loobu","Dim grey":"Tumehall","Dropdown toolbar":"Avatav tööriistariba","Edit block":"Muuda plokki","Editor toolbar":"Redaktori tööriistariba",Green:"Roheline",Grey:"Hall","Insert paragraph after block":"","Insert paragraph before block":"","Light blue":"Helesinine","Light green":"Heleroheline","Light grey":"Helehall",Next:"Järgmine",Orange:"Oranž",Previous:"Eelmine",Purple:"Lilla",Red:"Punane",Redo:"Tee uuesti","Remove color":"Eemalda värv","Restore default":"","Rich Text Editor":"Tekstiredaktor","Rich Text Editor, %0":"Tekstiredaktor, %0",Save:"Salvesta","Select all":"Vali kõik","Show more items":"Näita veel",Turquoise:"Türkiis",Undo:"Võta tagasi","Upload in progress":"Üleslaadimine pooleli",White:"Valge","Widget toolbar":"Vidinate tööriistariba",Yellow:"Kollane"}),i.getPluralForm=function(e){return 1!=e}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/eu.js b/core/assets/vendor/ckeditor5/translations/eu.js
new file mode 100644
index 000000000000..f2e07d72f5fe
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/eu.js
@@ -0,0 +1 @@
+!function(i){const n=i.eu=i.eu||{};n.dictionary=Object.assign(n.dictionary||{},{Bold:"Lodia",Code:"Kodea",Italic:"Etzana",Strikethrough:"",Subscript:"",Superscript:"",Underline:"Azpimarra"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.eu=i.eu||{};n.dictionary=Object.assign(n.dictionary||{},{"Block quote":"Aipua"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(a){const e=a.eu=a.eu||{};e.dictionary=Object.assign(e.dictionary||{},{"Choose heading":"Aukeratu izenburua",Heading:"Izenburua","Heading 1":"Izenburua 1","Heading 2":"Izenburua 2","Heading 3":"Izenburua 3","Heading 4":"","Heading 5":"","Heading 6":"",Paragraph:"Paragrafoa","Type or paste your content here.":"","Type your title":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const a=e.eu=e.eu||{};a.dictionary=Object.assign(a.dictionary||{},{"Break text":"","Centered image":"Zentratutako irudia","Change image text alternative":"Aldatu irudiaren ordezko testua","Enter image caption":"Sartu irudiaren epigrafea","Full size image":"Tamaina osoko irudia","Image resize list":"","Image toolbar":"","image widget":"irudi widgeta","In line":"",Insert:"","Insert image":"Txertatu irudia","Insert image via URL":"","Left aligned image":"Ezkerrean lerrokatutako irudia",Original:"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Right aligned image":"Eskuinean lerrokatutako irudia","Side image":"Alboko irudia","Text alternative":"Ordezko testua",Update:"","Update image URL":"","Upload failed":"Kargatzeak huts egin du","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.eu=n.eu||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"","Edit link":"",Link:"Esteka","Link image":"","Link URL":"Estekaren URLa","Open in a new tab":"","Open link in new tab":"","This link has no URL":"",Unlink:"Desestekatu"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.eu=e.eu||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"Buletdun zerrenda","Bulleted list styles toolbar":"",Circle:"",Decimal:"","Decimal with leading zero":"",Disc:"","Lower-latin":"","Lower–roman":"","Numbered List":"Zenbakidun zerrenda","Numbered list styles toolbar":"",Square:"","To-do List":"","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const r=e.eu=e.eu||{};r.dictionary=Object.assign(r.dictionary||{},{"%0 of %1":"",Aquamarine:"",Black:"",Blue:"",Cancel:"Utzi","Dim grey":"","Dropdown toolbar":"","Edit block":"","Editor toolbar":"",Green:"",Grey:"","Light blue":"","Light green":"","Light grey":"",Next:"",Orange:"",Previous:"",Purple:"",Red:"",Redo:"Berregin","Remove color":"","Restore default":"","Rich Text Editor":"Testu aberastuaren editorea","Rich Text Editor, %0":"Testu aberastuaren editorea, %0",Save:"Gorde","Show more items":"",Turquoise:"",Undo:"Desegin",White:"",Yellow:""}),r.getPluralForm=function(e){return 1!=e}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/fa.js b/core/assets/vendor/ckeditor5/translations/fa.js
new file mode 100644
index 000000000000..85cbfe433467
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/fa.js
@@ -0,0 +1 @@
+!function(n){const i=n.fa=n.fa||{};i.dictionary=Object.assign(i.dictionary||{},{"Align center":"تراز وسط","Align left":"تراز چپ","Align right":"تراز راست",Justify:"هم تراز کردن","Text alignment":"تراز متن","Text alignment toolbar":"نوار ابزار ترازبندی متن"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.fa=i.fa||{};n.dictionary=Object.assign(n.dictionary||{},{Bold:"درشت",Code:"کد",Italic:"کج",Strikethrough:"خط خورده",Subscript:"پایین نویس",Superscript:"بالانویس",Underline:"خط زیر"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.fa=i.fa||{};n.dictionary=Object.assign(n.dictionary||{},{"Block quote":" بلوک نقل قول"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const a=n.fa=n.fa||{};a.dictionary=Object.assign(a.dictionary||{},{"Choose heading":"انتخاب عنوان",Heading:"عنوان","Heading 1":"عنوان 1","Heading 2":"عنوان 2","Heading 3":"عنوان 3","Heading 4":"عنوان 4","Heading 5":"عنوان 5","Heading 6":"عنوان 6",Paragraph:"پاراگراف","Type or paste your content here.":"محتوای خود را در اینجا تایپ یا پیست کنید.","Type your title":"عنوان خود را تایپ کنید"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.fa=i.fa||{};n.dictionary=Object.assign(n.dictionary||{},{"Horizontal line":"خط افقی"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.fa=e.fa||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"","Centered image":"تصویر در وسط","Change image text alternative":"تغییر متن جایگزین تصویر","Enter image caption":"عنوان تصویر را وارد کنید","Full size image":"تصویر در اندازه کامل","Image resize list":"","Image toolbar":"نوارابزار تصویر","image widget":"ابزاره تصویر","In line":"",Insert:"","Insert image":"قرار دادن تصویر","Insert image via URL":"","Left aligned image":"تصویر تراز شده چپ",Original:"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Right aligned image":"تصویر تراز شده راست","Side image":"تصویر جانبی","Text alternative":"متن جایگزین",Update:"","Update image URL":"","Upload failed":"آپلود ناموفق بود","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.fa=n.fa||{};i.dictionary=Object.assign(i.dictionary||{},{"Decrease indent":"کاهش تورفتگی","Increase indent":"افزایش تورفتگی"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.fa=n.fa||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"قابل بارگیری","Edit link":"ویرایش پیوند",Link:"پیوند","Link image":"اتصال پیوند به تصویر","Link URL":"نشانی اینترنتی پیوند","Open in a new tab":"بازکردن در برگه جدید","Open link in new tab":"باز کردن پیوند در برگه جدید","This link has no URL":"این پیوند نشانی اینترنتی ندارد",Unlink:"لغو پیوند"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.fa=e.fa||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"لیست نشانه‌دار","Bulleted list styles toolbar":"",Circle:"",Decimal:"","Decimal with leading zero":"",Disc:"","Lower-latin":"","Lower–roman":"","Numbered List":"لیست عددی","Numbered list styles toolbar":"",Square:"","To-do List":"لیست انجام کار","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.fa=i.fa||{};n.dictionary=Object.assign(n.dictionary||{},{"Remove Format":"حذف کردن قالب"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e.fa=e.fa||{};t.dictionary=Object.assign(t.dictionary||{},{"Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"متن سلول را در سمت راست تراز کنید","Align cell text to the top":"","Align table to the left":"","Align table to the right":"جدول را در سمت راست تراز کنید",Alignment:"ترازبندی",Background:"زمینه",Border:"حاشیه","Cell properties":"خصوصیات سلول","Center table":"جدول وسط",Color:"رنگ","Color picker":"",Column:"ستون",Dashed:"نقطه چین","Delete column":"حذف ستون","Delete row":"حذف سطر",Dimensions:"ابعاد",Dotted:"خط چین",Double:"دوبل","Enter table caption":"",Groove:"خط دار کردن","Header column":"ستون سربرگ","Header row":"سطر سربرگ",Height:"ارتفاع","Horizontal text alignment toolbar":"","Insert column left":"درج ستون در سمت چپ","Insert column right":"درج ستون در سمت راست","Insert row above":"درج سطر در بالا","Insert row below":"درج سطر در پایین","Insert table":"درج جدول",Inset:"","Justify cell text":"","Merge cell down":"ادغام سلول پایین","Merge cell left":"ادغام سلول چپ","Merge cell right":"ادغام سلول راست","Merge cell up":"ادغام سلول بالا","Merge cells":"ادغام سلول ها",None:"هیچ کدام",Outset:"",Padding:"حاشیه داخلی",Ridge:"",Row:"سطر","Select column":"","Select row":"",Solid:"توپر","Split cell horizontally":"تقسیم افقی سلول","Split cell vertically":"تقسیم عمودی سلول",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"خصوصیات جدول","Table toolbar":"نوارابزار جدول",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':"",'The value is invalid. Try "10px" or "2em" or simply "2".':"","Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"",Width:"عرض"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(t){const a=t.fa=t.fa||{};a.dictionary=Object.assign(a.dictionary||{},{"Almost equal to":"",Angle:"","Approximately equal to":"","Asterisk operator":"","Austral sign":"","back with leftwards arrow above":"","Bitcoin sign":"","Cedi sign":"","Cent sign":"","Character categories":"","Colon sign":"","Contains as member":"","Copyright sign":"","Cruzeiro sign":"","Currency sign":"","Degree sign":"","Division sign":"","Dollar sign":"","Dong sign":"","Double dagger":"","Double exclamation mark":"","Double low-9 quotation mark":"","Double question mark":"","downwards arrow to bar":"","downwards dashed arrow":"","downwards double arrow":"downwards double arrow","Drachma sign":"","Element of":"","Em dash":"","Empty set":"","En dash":"","end with leftwards arrow above":"","Euro sign":"","Euro-currency sign":"","Exclamation question mark":"","For all":"","Fraction slash":"","French franc sign":"","German penny sign":"","Greater-than or equal to":"","Greater-than sign":"","Guarani sign":"","Horizontal ellipsis":"","Hryvnia sign":"","Identical to":"","Indian rupee sign":"",Infinity:"",Integral:"",Intersection:"","Inverted exclamation mark":"","Inverted question mark":"","Kip sign":"","Latin capital letter a with breve":"","Latin capital letter a with macron":"","Latin capital letter a with ogonek":"","Latin capital letter c with acute":"","Latin capital letter c with caron":"","Latin capital letter c with circumflex":"","Latin capital letter c with dot above":"","Latin capital letter d with caron":"","Latin capital letter d with stroke":"","Latin capital letter e with breve":"","Latin capital letter e with caron":"","Latin capital letter e with dot above":"","Latin capital letter e with macron":"","Latin capital letter e with ogonek":"","Latin capital letter eng":"","Latin capital letter g with breve":"","Latin capital letter g with cedilla":"","Latin capital letter g with circumflex":"","Latin capital letter g with dot above":"","Latin capital letter h with circumflex":"","Latin capital letter h with stroke":"","Latin capital letter i with breve":"","Latin capital letter i with dot above":"","Latin capital letter i with macron":"","Latin capital letter i with ogonek":"","Latin capital letter i with tilde":"","Latin capital letter j with circumflex":"","Latin capital letter k with cedilla":"","Latin capital letter l with acute":"","Latin capital letter l with caron":"","Latin capital letter l with cedilla":"","Latin capital letter l with middle dot":"","Latin capital letter l with stroke":"","Latin capital letter n with acute":"","Latin capital letter n with caron":"","Latin capital letter n with cedilla":"","Latin capital letter o with breve":"","Latin capital letter o with double acute":"","Latin capital letter o with macron":"","Latin capital letter r with acute":"","Latin capital letter r with caron":"","Latin capital letter r with cedilla":"","Latin capital letter s with acute":"","Latin capital letter s with caron":"","Latin capital letter s with cedilla":"","Latin capital letter s with circumflex":"","Latin capital letter t with caron":"","Latin capital letter t with cedilla":"","Latin capital letter t with stroke":"","Latin capital letter u with breve":"","Latin capital letter u with double acute":"","Latin capital letter u with macron":"","Latin capital letter u with ogonek":"","Latin capital letter u with ring above":"","Latin capital letter u with tilde":"","Latin capital letter w with circumflex":"","Latin capital letter y with circumflex":"","Latin capital letter y with diaeresis":"","Latin capital letter z with acute":"","Latin capital letter z with caron":"","Latin capital letter z with dot above":"","Latin capital ligature ij":"","Latin capital ligature oe":"","Latin small letter a with breve":"","Latin small letter a with macron":"","Latin small letter a with ogonek":"","Latin small letter c with acute":"","Latin small letter c with caron":"","Latin small letter c with circumflex":"","Latin small letter c with dot above":"","Latin small letter d with caron":"","Latin small letter d with stroke":"","Latin small letter dotless i":"","Latin small letter e with breve":"","Latin small letter e with caron":"","Latin small letter e with dot above":"","Latin small letter e with macron":"","Latin small letter e with ogonek":"","Latin small letter eng":"","Latin small letter f with hook":"","Latin small letter g with breve":"","Latin small letter g with cedilla":"","Latin small letter g with circumflex":"","Latin small letter g with dot above":"","Latin small letter h with circumflex":"","Latin small letter h with stroke":"","Latin small letter i with breve":"","Latin small letter i with macron":"","Latin small letter i with ogonek":"","Latin small letter i with tilde":"","Latin small letter j with circumflex":"","Latin small letter k with cedilla":"","Latin small letter kra":"","Latin small letter l with acute":"","Latin small letter l with caron":"","Latin small letter l with cedilla":"","Latin small letter l with middle dot":"","Latin small letter l with stroke":"","Latin small letter long s":"","Latin small letter n preceded by apostrophe":"","Latin small letter n with acute":"","Latin small letter n with caron":"","Latin small letter n with cedilla":"","Latin small letter o with breve":"","Latin small letter o with double acute":"","Latin small letter o with macron":"","Latin small letter r with acute":"","Latin small letter r with caron":"","Latin small letter r with cedilla":"","Latin small letter s with acute":"","Latin small letter s with caron":"","Latin small letter s with cedilla":"","Latin small letter s with circumflex":"","Latin small letter t with caron":"","Latin small letter t with cedilla":"","Latin small letter t with stroke":"","Latin small letter u with breve":"","Latin small letter u with double acute":"","Latin small letter u with macron":"","Latin small letter u with ogonek":"","Latin small letter u with ring above":"","Latin small letter u with tilde":"","Latin small letter w with circumflex":"","Latin small letter y with circumflex":"","Latin small letter z with acute":"","Latin small letter z with caron":"","Latin small letter z with dot above":"","Latin small ligature ij":"","Latin small ligature oe":"","Left double quotation mark":"","Left single quotation mark":"","Left-pointing double angle quotation mark":"","leftwards arrow to bar":"","leftwards dashed arrow":"leftwards dashed arrow","leftwards double arrow":"پیکان دوتایی چپ","Less-than or equal to":"","Less-than sign":"","Lira sign":"","Livre tournois sign":"","Logical and":"","Logical or":"",Macron:"","Manat sign":"","Mill sign":"","Minus sign":"","Multiplication sign":"","N-ary product":"","N-ary summation":"",Nabla:"","Naira sign":"","New sheqel sign":"","Nordic mark sign":"","Not an element of":"","Not equal to":"","Not sign":"","on with exclamation mark with left right arrow above":"",Overline:"","Paragraph sign":"","Partial differential":"","Per mille sign":"","Per ten thousand sign":"","Peseta sign":"","Peso sign":"","Plus-minus sign":"","Pound sign":"","Proportional to":"","Question exclamation mark":"","Registered sign":"","Reversed paragraph sign":"","Right double quotation mark":"","Right single quotation mark":"","Right-pointing double angle quotation mark":"","rightwards arrow to bar":"","rightwards dashed arrow":"","rightwards double arrow":"","Ruble sign":"","Rupee sign":"","Section sign":"","Single left-pointing angle quotation mark":"","Single low-9 quotation mark":"","Single right-pointing angle quotation mark":"","soon with rightwards arrow above":"","Special characters":"کاراکترهای ویژه","Spesmilo sign":"","Square root":"","Tenge sign":"","There exists":"","Tilde operator":"","top with upwards arrow above":"","Trade mark sign":"","Tugrik sign":"","Turkish lira sign":"","Two dot leader":"",Union:"","up down arrow with base":"","upwards arrow to bar":"","upwards dashed arrow":"","upwards double arrow":"","Vulgar fraction one half":"","Vulgar fraction one quarter":"","Vulgar fraction three quarters":"","Won sign":"","Yen sign":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const o=e.fa=e.fa||{};o.dictionary=Object.assign(o.dictionary||{},{"%0 of %1":"0% از 1%",Aquamarine:"زمرد کبود",Black:"سیاه",Blue:"آبی",Cancel:"لغو","Dim grey":"خاکستری تیره","Dropdown toolbar":"نوارابزار کشویی","Edit block":"ویرایش قطعه","Editor toolbar":"نوارابزار ویرایشگر",Green:"سبز",Grey:"خاکستری","Insert paragraph after block":"درج پاراگراف بعد از بلوک","Insert paragraph before block":"درج پاراگراف قبل از بلوک","Light blue":"آبی روشن","Light green":"سبز روشن","Light grey":"خاکستری روشن",Next:"بعدی",Orange:"نارنجی",Previous:"قبلی",Purple:"بنفش",Red:"قرمز",Redo:"باز انجام","Remove color":"حذف رنگ","Restore default":"","Rich Text Editor":"ویرایشگر متن غنی","Rich Text Editor, %0":"ویرایشگر متن غنی، %0",Save:"ذخیره","Select all":"انتخاب همه","Show more items":"نمایش گزینه‌های بیشتر",Turquoise:"فیروزه ای",Undo:"بازگردانی","Upload in progress":"آپلود در حال انجام",White:"سفید","Widget toolbar":"نوار ابزار ویجت",Yellow:"زرد"}),o.getPluralForm=function(e){return e>1}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/fi.js b/core/assets/vendor/ckeditor5/translations/fi.js
new file mode 100644
index 000000000000..4a198f5cb539
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/fi.js
@@ -0,0 +1 @@
+!function(a){const i=a.fi=a.fi||{};i.dictionary=Object.assign(i.dictionary||{},{"Align center":"Tasaa keskelle","Align left":"Tasaa vasemmalle","Align right":"Tasaa oikealle",Justify:"Tasaa molemmat reunat","Text alignment":"Tekstin tasaus","Text alignment toolbar":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.fi=i.fi||{};n.dictionary=Object.assign(n.dictionary||{},{Bold:"Lihavointi",Code:"Koodi",Italic:"Kursivointi",Strikethrough:"Yliviivaus",Subscript:"Alaindeksi",Superscript:"Yläindeksi",Underline:"Alleviivaus"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.fi=i.fi||{};n.dictionary=Object.assign(n.dictionary||{},{"Block quote":"Lainaus"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const o=i.fi=i.fi||{};o.dictionary=Object.assign(o.dictionary||{},{"Choose heading":"Valitse otsikko",Heading:"Otsikkotyyli","Heading 1":"Otsikko 1","Heading 2":"Otsikko 2","Heading 3":"Otsikko 3","Heading 4":"Otsikko 4","Heading 5":"Otsikko 5","Heading 6":"Otsikko 6",Paragraph:"Kappale","Type or paste your content here.":"","Type your title":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.fi=e.fi||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"","Centered image":"Keskitetty kuva","Change image text alternative":"Vaihda kuvan vaihtoehtoinen teksti","Enter image caption":"Syötä kuvateksti","Full size image":"Täysikokoinen kuva","Image resize list":"","Image toolbar":"","image widget":"Kuvavimpain","In line":"",Insert:"","Insert image":"Lisää kuva","Insert image via URL":"","Left aligned image":"Vasemmalle tasattu kuva",Original:"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Right aligned image":"Oikealle tasattu kuva","Side image":"Pieni kuva","Text alternative":"Vaihtoehtoinen teksti",Update:"","Update image URL":"","Upload failed":"Lataus epäonnistui","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.fi=n.fi||{};i.dictionary=Object.assign(i.dictionary||{},{"Decrease indent":"Vähennä sisennystä","Increase indent":"Lisää sisennystä"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.fi=i.fi||{};n.dictionary=Object.assign(n.dictionary||{},{Downloadable:"","Edit link":"Muokkaa linkkiä",Link:"Linkki","Link image":"","Link URL":"Linkin osoite","Open in a new tab":"","Open link in new tab":"Avaa linkki uudessa välilehdessä","This link has no URL":"Linkillä ei ole URL-osoitetta",Unlink:"Poista linkki"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.fi=e.fi||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"Lista","Bulleted list styles toolbar":"",Circle:"",Decimal:"","Decimal with leading zero":"",Disc:"","Lower-latin":"","Lower–roman":"","Numbered List":"Numeroitu lista","Numbered list styles toolbar":"",Square:"","To-do List":"","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const o=i.fi=i.fi||{};o.dictionary=Object.assign(o.dictionary||{},{"Remove Format":"Poista muotoilu"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.fi=e.fi||{};l.dictionary=Object.assign(l.dictionary||{},{"Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align table to the left":"","Align table to the right":"",Alignment:"",Background:"",Border:"","Cell properties":"","Center table":"",Color:"","Color picker":"",Column:"Sarake",Dashed:"","Delete column":"Poista sarake","Delete row":"Poista rivi",Dimensions:"",Dotted:"",Double:"","Enter table caption":"",Groove:"","Header column":"Otsikkosarake","Header row":"Otsikkorivi",Height:"","Horizontal text alignment toolbar":"","Insert column left":"Lisää sarake vasemmalle","Insert column right":"Lisää sarake oikealle","Insert row above":"Lisää rivi ylle","Insert row below":"Lisää rivi alle","Insert table":"Lisää taulukko",Inset:"","Justify cell text":"","Merge cell down":"Yhdistä solu alas","Merge cell left":"Yhdistä solu vasemmalle","Merge cell right":"Yhdistä solu oikealle","Merge cell up":"Yhdistä solu ylös","Merge cells":"Yhdistä tai jaa soluja",None:"",Outset:"",Padding:"",Ridge:"",Row:"Rivi","Select column":"Valitse sarake","Select row":"Valitse rivi",Solid:"","Split cell horizontally":"Jaa solu vaakasuunnassa","Split cell vertically":"Jaa solu pystysuunnassa",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':"",'The value is invalid. Try "10px" or "2em" or simply "2".':"","Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"",Width:""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.fi=e.fi||{};i.dictionary=Object.assign(i.dictionary||{},{"%0 of %1":"",Aquamarine:"Akvamariini",Black:"Musta",Blue:"Sininen",Cancel:"Peruuta","Dim grey":"","Dropdown toolbar":"","Edit block":"Muokkaa lohkoa","Editor toolbar":"",Green:"Vihreä",Grey:"Harmaa","Light blue":"Vaaleansininen","Light green":"Vaaleanvihreä","Light grey":"Vaaleanharmaa",Next:"",Orange:"Oranssi",Previous:"",Purple:"Purppura",Red:"Punainen",Redo:"Tee uudelleen","Remove color":"Poista väri","Restore default":"","Rich Text Editor":"Rikas tekstieditori","Rich Text Editor, %0":"Rikas tekstieditori, %0",Save:"Tallenna","Show more items":"",Turquoise:"Turkoosi",Undo:"Peru","Upload in progress":"Lähetys käynnissä",White:"Valkoinen",Yellow:"Keltainen"}),i.getPluralForm=function(e){return 1!=e}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/fr.js b/core/assets/vendor/ckeditor5/translations/fr.js
new file mode 100644
index 000000000000..e8d435d21ac4
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/fr.js
@@ -0,0 +1 @@
+!function(e){const t=e.fr=e.fr||{};t.dictionary=Object.assign(t.dictionary||{},{"Align center":"Centrer","Align left":"Aligner à gauche","Align right":"Aligner à droite",Justify:"Justifier","Text alignment":"Alignement du texte","Text alignment toolbar":"Barre d'outils d'alignement du texte"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.fr=i.fr||{};n.dictionary=Object.assign(n.dictionary||{},{Bold:"Gras",Code:"Code",Italic:"Italique",Strikethrough:"Barré",Subscript:"Indice",Superscript:"Exposant",Underline:"Souligné"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.fr=i.fr||{};n.dictionary=Object.assign(n.dictionary||{},{"Block quote":"Citation"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.fr=e.fr||{};i.dictionary=Object.assign(i.dictionary||{},{"Choose heading":"Choisir l'en-tête",Heading:"En-tête","Heading 1":"Titre 1","Heading 2":"Titre 2","Heading 3":"Titre 3","Heading 4":"Titre 4","Heading 5":"Titre 5","Heading 6":"Titre 6",Paragraph:"Paragraphe","Type or paste your content here.":"Noter ou coller votre contenu ici","Type your title":"Rentrer votre titre"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.fr=i.fr||{};n.dictionary=Object.assign(n.dictionary||{},{"Horizontal line":"Ligne horizontale"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.fr=e.fr||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"","Centered image":"Image centrée","Change image text alternative":"Changer le texte alternatif à l’image","Enter image caption":"Saisir la légende de l’image","Full size image":"Image taille réelle","Image resize list":"Liste des tailles d'images","Image toolbar":"Barre d'outils des images","image widget":"Objet image","In line":"",Insert:"Insérer","Insert image":"Insérer une image","Insert image via URL":"Insérer une image à partir d'une URL","Left aligned image":"Image alignée à gauche",Original:"Taille originale","Resize image":"Redimensionner l'image","Resize image to %0":"Redimensionner à %0","Resize image to the original size":"Appliquer les dimensions d'origine","Right aligned image":"Image alignée à droite","Side image":"Image latérale","Text alternative":"Texte alternatif",Update:"Modifier","Update image URL":"Modifier l'URL de l'image","Upload failed":"Échec de l'envoi","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const n=e.fr=e.fr||{};n.dictionary=Object.assign(n.dictionary||{},{"Decrease indent":"Diminuer le retrait","Increase indent":"Augmenter le retrait"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(a){const n=a.fr=a.fr||{};n.dictionary=Object.assign(n.dictionary||{},{"Choose language":"Choisir la langue",Language:"Langue","Remove language":"Supprimer la langue"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.fr=n.fr||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"Fichier téléchargeable","Edit link":"Modifier le lien",Link:"Lien","Link image":"Lien d'image","Link URL":"URL du lien","Open in a new tab":"Ouvrir dans un nouvel onglet","Open link in new tab":"Ouvrir le lien dans un nouvel onglet","This link has no URL":"Ce lien n'a pas d'URL",Unlink:"Supprimer le lien"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const s=e.fr=e.fr||{};s.dictionary=Object.assign(s.dictionary||{},{"Bulleted List":"Liste à puces","Bulleted list styles toolbar":"Barre d'outils des styles de liste à puce",Circle:"Cercle",Decimal:"Chiffres","Decimal with leading zero":"Chiffres avec des zéros supplémentaire",Disc:"Disque","Lower-latin":"Lettres minuscules","Lower–roman":"Chiffres romains en minuscules","Numbered List":"Liste numérotée","Numbered list styles toolbar":"Barre d'outils des styles de liste numérotée",Square:"Carré","To-do List":"Liste de tâches","Toggle the circle list style":'Activer / désactiver le style de liste "cercle"',"Toggle the decimal list style":'Activer / désactiver le style de liste "chiffres"',"Toggle the decimal with leading zero list style":'Activer / désactiver le style de liste "chiffres de mêmes longueurs"',"Toggle the disc list style":'Activer / désactiver le style de liste "disque"',"Toggle the lower–latin list style":'Activer / désactiver le style de liste "lettres minuscules"',"Toggle the lower–roman list style":'Activer / désactiver le style de liste "chiffres romains en minuscules"',"Toggle the square list style":'Activer / désactiver le style de liste "carré"',"Toggle the upper–latin list style":'Activer / désactiver le style de liste "lettres majuscules"',"Toggle the upper–roman list style":'Activer / désactiver le style de liste "chiffres romains en majuscules"',"Upper-latin":"Lettres majuscules","Upper-roman":"Chiffres romains en majuscules"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const o=n.fr=n.fr||{};o.dictionary=Object.assign(o.dictionary||{},{"Remove Format":"Enlever le format"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.fr=e.fr||{};l.dictionary=Object.assign(l.dictionary||{},{"Align cell text to the bottom":"Aligner le texte en bas","Align cell text to the center":"Aligner la cellule au centre","Align cell text to the left":"Aligner la cellule à gauche","Align cell text to the middle":"Aligner le texte au milieu","Align cell text to the right":"Aligner la cellule à droite","Align cell text to the top":"Aligner le texte en haut","Align table to the left":"Aligner le tableau à gauche","Align table to the right":"Aligner le tableau à droite",Alignment:"Alignement",Background:"Fond",Border:"Bordure","Cell properties":"Propriétés de la cellule","Center table":"Centrer le tableau ",Color:"Couleur","Color picker":"Pipette à couleurs",Column:"Colonne",Dashed:"Tirets","Delete column":"Supprimer la colonne","Delete row":"Supprimer la ligne",Dimensions:"Dimensions",Dotted:"Pointillés",Double:"Double","Enter table caption":"",Groove:"Rainuré","Header column":"Colonne d'entête","Header row":"Ligne d'entête",Height:"Hauteur","Horizontal text alignment toolbar":"Barre d'outils pour modifier l'alignement horizontal du texte","Insert column left":"Insérer une colonne à gauche","Insert column right":"Insérer une colonne à droite","Insert row above":"Insérer une ligne au-dessus","Insert row below":"Insérer une ligne en-dessous","Insert table":"Insérer un tableau",Inset:"Relief intérieur","Justify cell text":"Justifier le contenu de la cellule","Merge cell down":"Fusionner la cellule en-dessous","Merge cell left":"Fusionner la cellule à gauche","Merge cell right":"Fusionner la cellule à droite","Merge cell up":"Fusionner la cellule au-dessus","Merge cells":"Fusionner les cellules",None:"Aucun",Outset:"Relief extérieur",Padding:"Remplissage pour aérer le texte",Ridge:"Relief",Row:"Ligne","Select column":"Sélectionner la colonne","Select row":"Sélectionner la ligne",Solid:"Continu","Split cell horizontally":"Scinder la cellule horizontalement","Split cell vertically":"Scinder la cellule verticalement",Style:"Style","Table alignment toolbar":"Barre d'outils pour modifier l'alignement du tableau","Table cell text alignment":"Alignement du texte de la cellule","Table properties":"Propriétés du tableau","Table toolbar":"Barre d'outils des tableaux",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':'La couleur est invalide. Essayez "#FF0000" ou "rgb(255,0,0)" ou "red".','The value is invalid. Try "10px" or "2em" or simply "2".':'La valeur est invalide. Essayez "10px" ou "2em" ou simplement "2".',"Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"Barre d'outils pour modifier l'alignement vertical du texte",Width:"Largeur"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e.fr=e.fr||{};t.dictionary=Object.assign(t.dictionary||{},{"Almost equal to":"Presque égal à",Angle:"Angle","Approximately equal to":"Environ égal à","Asterisk operator":"Astérisque","Austral sign":"Austral","back with leftwards arrow above":"Précédent avec flèche vers la gauche","Bitcoin sign":"Bitcoin","Cedi sign":"Cédi","Cent sign":"Centime","Character categories":"Catégories de caractères","Colon sign":"Deux points","Contains as member":"Contient","Copyright sign":"Copyright","Cruzeiro sign":"Cruzeiro","Currency sign":"Symbole monétaire","Degree sign":"Degré","Division sign":"Division","Dollar sign":"Dollar","Dong sign":"Dong","Double dagger":"Croix de Lorraine","Double exclamation mark":"Double point d'exclamation","Double low-9 quotation mark":"Guillemet-virgule double inférieur","Double question mark":"Double point d'interrogation","downwards arrow to bar":"Flèche vers le bas avec barre de fin","downwards dashed arrow":"Flèche en pointillés vers le bas","downwards double arrow":"Double flèche vers le bas","Drachma sign":"Drachme","Element of":"Appartient à","Em dash":"Tiret long","Empty set":"Élément vide","En dash":"Tiret","end with leftwards arrow above":"Fin avec flèche vers la gauche","Euro sign":"Euro","Euro-currency sign":"Symbole monétaire de l'euro","Exclamation question mark":"Point exclamation et question","For all":"Pour tout","Fraction slash":"Fraction","French franc sign":"Franc français","German penny sign":"Pfennig","Greater-than or equal to":"Signe supérieur ou égal","Greater-than sign":"Signe supérieur","Guarani sign":"Guarani","Horizontal ellipsis":"Trois points","Hryvnia sign":"Hryvnia","Identical to":"Identique à","Indian rupee sign":"Roupie indienne",Infinity:"Infini",Integral:"Intégrale",Intersection:"Intersection","Inverted exclamation mark":"Point d'exclamation inversé","Inverted question mark":"Point d'interrogation inversé","Kip sign":"Kip","Latin capital letter a with breve":"A bref majuscule","Latin capital letter a with macron":"A barre majuscule","Latin capital letter a with ogonek":"A ogonek majuscule","Latin capital letter c with acute":"C accent aigu majuscule","Latin capital letter c with caron":"C caron majuscule","Latin capital letter c with circumflex":"C circonflexe majuscule","Latin capital letter c with dot above":"C point suscrit majuscule","Latin capital letter d with caron":"D caron majuscule","Latin capital letter d with stroke":"D barré majuscule","Latin capital letter e with breve":"E bref majuscule","Latin capital letter e with caron":"E caron majuscule","Latin capital letter e with dot above":"E point suscrit majuscule","Latin capital letter e with macron":"E macron majuscule","Latin capital letter e with ogonek":"E ogonek majuscule","Latin capital letter eng":"Eng majuscule","Latin capital letter g with breve":"G bref majuscule","Latin capital letter g with cedilla":"G cédille majuscule","Latin capital letter g with circumflex":"G accent circonflexe majuscule","Latin capital letter g with dot above":"G point suscrit majuscule","Latin capital letter h with circumflex":"H accent circonflexe majuscule","Latin capital letter h with stroke":"H barré majuscule","Latin capital letter i with breve":"I bref majuscule","Latin capital letter i with dot above":"I point suscrit majuscule","Latin capital letter i with macron":"I macron majuscule","Latin capital letter i with ogonek":"I ogonek majuscule","Latin capital letter i with tilde":"I tilde majuscule","Latin capital letter j with circumflex":"J accent circonflexe majuscule","Latin capital letter k with cedilla":"K cédille majuscule","Latin capital letter l with acute":"L accent aigu majuscule","Latin capital letter l with caron":"L caron majuscule","Latin capital letter l with cedilla":"L cédille majuscule","Latin capital letter l with middle dot":"L point médian majuscule","Latin capital letter l with stroke":"L barré majuscule","Latin capital letter n with acute":"N accent aigu majuscule","Latin capital letter n with caron":"N caron majuscule","Latin capital letter n with cedilla":"N cédille majuscule","Latin capital letter o with breve":"O bref majuscule","Latin capital letter o with double acute":"O double accent aigu majuscule","Latin capital letter o with macron":"O macron majuscule","Latin capital letter r with acute":"R accent aigu majuscule","Latin capital letter r with caron":"R caron majuscule","Latin capital letter r with cedilla":"R cédille majuscule","Latin capital letter s with acute":"S accent aigu majuscule","Latin capital letter s with caron":"S caron majuscule","Latin capital letter s with cedilla":"S cédille majuscule","Latin capital letter s with circumflex":"S circonflexe majuscule","Latin capital letter t with caron":"T caron majuscule","Latin capital letter t with cedilla":"T cédille majuscule","Latin capital letter t with stroke":"T barré majuscule","Latin capital letter u with breve":"U bref majuscule","Latin capital letter u with double acute":"U double accent aigu majuscule","Latin capital letter u with macron":"U macron majuscule","Latin capital letter u with ogonek":"U ogonek majuscule","Latin capital letter u with ring above":"U rond en chef majuscule","Latin capital letter u with tilde":"U tilde majuscule","Latin capital letter w with circumflex":"W circonflexe majuscule","Latin capital letter y with circumflex":"Y circonflexe majuscule","Latin capital letter y with diaeresis":"Y tréma majuscule","Latin capital letter z with acute":"Z accent circonflexe majuscule","Latin capital letter z with caron":"Z caron majuscule","Latin capital letter z with dot above":"Z point suscrit majuscule","Latin capital ligature ij":"Digramme soudé IJ majuscule","Latin capital ligature oe":"O-E entrelacé majuscule","Latin small letter a with breve":"A bref minuscule","Latin small letter a with macron":"A barre minuscule","Latin small letter a with ogonek":"A ogonek minuscule","Latin small letter c with acute":"C accent aigu minuscule","Latin small letter c with caron":"C caron minuscule","Latin small letter c with circumflex":"C circonflexe minuscule","Latin small letter c with dot above":"C point suscrit minuscule","Latin small letter d with caron":"C caron minuscule","Latin small letter d with stroke":"D barré minuscule","Latin small letter dotless i":"I sans point minuscule","Latin small letter e with breve":"E bref minuscule","Latin small letter e with caron":"E caron minuscule","Latin small letter e with dot above":"E point suscrit minuscule","Latin small letter e with macron":"E macron minuscule","Latin small letter e with ogonek":"E ogonek minuscule","Latin small letter eng":"Eng minuscule","Latin small letter f with hook":"Fonction","Latin small letter g with breve":"G bref minuscule","Latin small letter g with cedilla":"G cédille minuscule","Latin small letter g with circumflex":"G accent circonflexe minuscule","Latin small letter g with dot above":"G point suscrit minuscule","Latin small letter h with circumflex":"H accent circonflexe minuscule","Latin small letter h with stroke":"H barré minuscule","Latin small letter i with breve":"I bref minuscule","Latin small letter i with macron":"I macron minuscule","Latin small letter i with ogonek":"I ogonek minuscule","Latin small letter i with tilde":"I tilde minuscule","Latin small letter j with circumflex":"J accent circonflexe minuscule","Latin small letter k with cedilla":"K cédille minuscule","Latin small letter kra":"Kra minuscule","Latin small letter l with acute":"L accent aigu minuscule","Latin small letter l with caron":"L caron minuscule","Latin small letter l with cedilla":"L cédille minuscule","Latin small letter l with middle dot":"L point médian minuscule","Latin small letter l with stroke":"L barré minuscule","Latin small letter long s":"S long minuscule","Latin small letter n preceded by apostrophe":"Apostrophe N minuscule","Latin small letter n with acute":"N accent aigu minuscule","Latin small letter n with caron":"N caron minuscule","Latin small letter n with cedilla":"N cédille minuscule","Latin small letter o with breve":"O bref minuscule","Latin small letter o with double acute":"O double accent aigu minuscule","Latin small letter o with macron":"O macron minuscule","Latin small letter r with acute":"R accent aigu minuscule","Latin small letter r with caron":"R caron minuscule","Latin small letter r with cedilla":"R cédille minuscule","Latin small letter s with acute":"S accent aigu minuscule","Latin small letter s with caron":"S caron minuscule","Latin small letter s with cedilla":"S cédille minuscule","Latin small letter s with circumflex":"S circonflexe minuscule","Latin small letter t with caron":"T caron minuscule","Latin small letter t with cedilla":"T cédille minuscule","Latin small letter t with stroke":"T barré minuscule","Latin small letter u with breve":"U bref minuscule","Latin small letter u with double acute":"U double accent aigu minuscule","Latin small letter u with macron":"U macron minuscule","Latin small letter u with ogonek":"U ogonek minuscule","Latin small letter u with ring above":"U rond en chef minuscule","Latin small letter u with tilde":"U tilde minuscule","Latin small letter w with circumflex":"W circonflexe minuscule","Latin small letter y with circumflex":"Y circonflexe minuscule","Latin small letter z with acute":"Z accent circonflexe minuscule","Latin small letter z with caron":"Z caron minuscule","Latin small letter z with dot above":"Z point suscrit minuscule","Latin small ligature ij":"Digramme soudé IJ minuscule","Latin small ligature oe":"O-E entrelacé minuscule","Left double quotation mark":"Guillemet-apostrophe double culbuté","Left single quotation mark":"Guillemet-apostrophe culbuté","Left-pointing double angle quotation mark":"Guillemet double vers la gauche","leftwards arrow to bar":"Flèche vers la gauche avec barre de fin","leftwards dashed arrow":"Flèche en pointillés vers la gauche","leftwards double arrow":"Double flèche vers la gauche","Less-than or equal to":"Signe inférieur ou égal","Less-than sign":"Signe inférieur","Lira sign":"Lire","Livre tournois sign":"Livre tournois","Logical and":"Et logique","Logical or":"Ou logique",Macron:"Macron","Manat sign":"Manat","Mill sign":"Moulin","Minus sign":"Moins","Multiplication sign":"Multiplication","N-ary product":"Produit","N-ary summation":"Somme",Nabla:"Nabla","Naira sign":"Naira","New sheqel sign":"Shekel","Nordic mark sign":"Mark nordique","Not an element of":"N'appartient pas à","Not equal to":"Différent de","Not sign":"Négation logique","on with exclamation mark with left right arrow above":"Allumé avec flèches vers la gauche et la droite",Overline:"Macron long","Paragraph sign":"Fin de paragraphe","Partial differential":"Partiellement différent","Per mille sign":"Pour mille","Per ten thousand sign":"Pour dix milles","Peseta sign":"Peseta","Peso sign":"Peso","Plus-minus sign":"Plus ou moins","Pound sign":"Livre sterling","Proportional to":"Proportionnel à","Question exclamation mark":"Point d'interrogation et exclamation","Registered sign":"Registered","Reversed paragraph sign":"Fin de paragraphe inversé","Right double quotation mark":"Guillemet-apostrophe double","Right single quotation mark":"Guillemet-apostrophe","Right-pointing double angle quotation mark":"Guillemet double vers la droite","rightwards arrow to bar":"Flèche vers la droite avec barre de fin","rightwards dashed arrow":"Flèche en pointillés vers la droite","rightwards double arrow":"Double flèche vers la droite","Ruble sign":"Rouble","Rupee sign":"Roupie","Section sign":"Paragraphe","Single left-pointing angle quotation mark":"Guillemet simple vers la gauche","Single low-9 quotation mark":"Guillemet-virgule inférieur","Single right-pointing angle quotation mark":"Guillemet simple vers la droite","soon with rightwards arrow above":"Bientôt avec flèche vers la droite","Special characters":"Caractères spéciaux","Spesmilo sign":"Spesmilo","Square root":"Racine carrée","Tenge sign":"Tenge","There exists":"Existe","Tilde operator":"Tilde","top with upwards arrow above":"Haut avec flèche vers le haut","Trade mark sign":"Marque déposée","Tugrik sign":"Tugrik","Turkish lira sign":"Lire turque","Two dot leader":"Deux points",Union:"Union","up down arrow with base":"Flèche haut et bas avec barre de fin","upwards arrow to bar":"Flèche vers le haut avec barre de fin","upwards dashed arrow":"Flèche en pointillés vers le haut","upwards double arrow":"Double flèche vers le haut","Vulgar fraction one half":"Un demi","Vulgar fraction one quarter":"Un quart","Vulgar fraction three quarters":"Trois quarts","Won sign":"Won","Yen sign":"Yen"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const r=e.fr=e.fr||{};r.dictionary=Object.assign(r.dictionary||{},{"%0 of %1":"%0 sur %1",Aquamarine:"Bleu vert",Black:"Noir",Blue:"Bleu",Cancel:"Annuler","Dim grey":"Gris pâle","Dropdown toolbar":"Barre d'outils dans un menu déroulant","Edit block":"Modifier le bloc","Editor toolbar":"Barre d'outils de l'éditeur",Green:"Vert",Grey:"Gris","Insert paragraph after block":"Insérer du texte après ce bloc","Insert paragraph before block":"Insérer du texte avant ce bloc","Light blue":"Bleu clair","Light green":"Vert clair","Light grey":"Gris clair",Next:"Suivant",Orange:"Orange",Previous:"Précedent",Purple:"Violet",Red:"Rouge",Redo:"Restaurer","Remove color":"Enlever la couleur","Restore default":"","Rich Text Editor":"Éditeur de texte enrichi","Rich Text Editor, %0":"Éditeur de texte enrichi, %0",Save:"Enregistrer","Select all":"Sélectionner tout","Show more items":"Montrer plus d'éléments",Turquoise:"Turquoise",Undo:"Annuler","Upload in progress":"Téléchargement en cours",White:"Blanc","Widget toolbar":"Barre d'outils du widget",Yellow:"Jaune"}),r.getPluralForm=function(e){return e>1}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/gl.js b/core/assets/vendor/ckeditor5/translations/gl.js
new file mode 100644
index 000000000000..68c616804b60
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/gl.js
@@ -0,0 +1 @@
+!function(t){const e=t.gl=t.gl||{};e.dictionary=Object.assign(e.dictionary||{},{"Align center":"Centrar horizontalmente","Align left":"Aliñar á esquerda","Align right":"Aliñar á dereita",Justify:"Xustificado","Text alignment":"Aliñamento do texto","Text alignment toolbar":"Barra de ferramentas de aliñamento de textos"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const c=i.gl=i.gl||{};c.dictionary=Object.assign(c.dictionary||{},{Bold:"Negra",Code:"Código",Italic:"Itálica",Strikethrough:"Riscado",Subscript:"Subíndice",Superscript:"Superíndice",Underline:"Subliñado"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const o=i.gl=i.gl||{};o.dictionary=Object.assign(o.dictionary||{},{"Block quote":"Cita de bloque"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(o){const t=o.gl=o.gl||{};t.dictionary=Object.assign(t.dictionary||{},{"Choose heading":"Escolla o título",Heading:"Título","Heading 1":"Título 1","Heading 2":"Título 2","Heading 3":"Título 3","Heading 4":"Título 4","Heading 5":"Título 5","Heading 6":"Título 6",Paragraph:"Parágrafo","Type or paste your content here.":"Escriba ou pegue o seu contido aquí.","Type your title":"Escriba o seu título"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.gl=i.gl||{};n.dictionary=Object.assign(n.dictionary||{},{"Horizontal line":"Liña horizontal"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(a){const e=a.gl=a.gl||{};e.dictionary=Object.assign(e.dictionary||{},{"Break text":"Romper o texto","Centered image":"Imaxe centrada horizontalmente","Change image text alternative":"Cambiar o texto alternativo da imaxe","Enter image caption":"Introduza o título da imaxe","Full size image":"Imaxe a tamaño completo","Image resize list":"Lista de tamaños de imaxe","Image toolbar":"Barra de ferramentas de imaxe","image widget":"Trebello de imaxe","In line":"En liña",Insert:"Inserir","Insert image":"Inserir imaxe","Insert image via URL":"Inserir imaxe a través de URL","Left aligned image":"Imaxe aliñada á esquerda",Original:"Orixinal","Resize image":"Redimensionar a imaxe","Resize image to %0":"Redimensionar a imaxe ao %0","Resize image to the original size":"Aplicar o tamaño orixinal da imaxe","Right aligned image":"Imaxe aliñada á dereita","Side image":"Lado da imaxe","Text alternative":"Texto alternativo",Update:"Actualizar","Update image URL":"Actualizar o URL da imaxe","Upload failed":"Fallou o envío","Wrap text":"Envolver o texto"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.gl=n.gl||{};i.dictionary=Object.assign(i.dictionary||{},{"Decrease indent":"Reducir sangrado","Increase indent":"Aumentar sangrado"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(o){const a=o.gl=o.gl||{};a.dictionary=Object.assign(a.dictionary||{},{"Choose language":"Escolla o idioma",Language:"Idioma","Remove language":"Retirar o idioma"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const a=n.gl=n.gl||{};a.dictionary=Object.assign(a.dictionary||{},{Downloadable:"Descargábel","Edit link":"Editar a ligazón",Link:"Ligar","Link image":"Ligazón da imaxe","Link URL":"URL de ligazón","Open in a new tab":"Abrir nunha nova lapela","Open link in new tab":"Abrir a ligazón nunha nova lapela","This link has no URL":"Esta ligazón non ten URL",Unlink:"Desligar"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const a=e.gl=e.gl||{};a.dictionary=Object.assign(a.dictionary||{},{"Bulleted List":"Lista con viñetas","Bulleted list styles toolbar":"Barra de ferramentas de estilos de lista con viñetas",Circle:"Círculos",Decimal:"Decimais","Decimal with leading zero":"Decimais con cero á esquerda",Disc:"Discos","Lower-latin":"Letras minúsculas","Lower–roman":"Núm, romanos en minúscula","Numbered List":"Lista numerada","Numbered list styles toolbar":"Barra de ferramentas de estilos de lista numerada",Square:"Cadrados","To-do List":"Lista de cousas por facer","Toggle the circle list style":"Alternar o estilo da lista «círculos»","Toggle the decimal list style":"Alternar o estilo da lista «decimais»","Toggle the decimal with leading zero list style":"Activar/desactivar o estilo «decimais con cero á esquerda»","Toggle the disc list style":"Alternar o estilo da lista «discos»","Toggle the lower–latin list style":"Activar/desactivar o estilo da lista «letras minúsculas»","Toggle the lower–roman list style":"Activar/desactivar o estilo da lista «núm. romanos en minúscula»","Toggle the square list style":"Alternar o estilo da lista «cadrados»","Toggle the upper–latin list style":"Activar/desactivar o estilo da lista «letras maiúsculas»","Toggle the upper–roman list style":"Activar/desactivar o estilo da lista «núm. romanos en maiúscula»","Upper-latin":"Letras maiúsculas","Upper-roman":"Núm, romanos en maiúscula"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(o){const i=o.gl=o.gl||{};i.dictionary=Object.assign(i.dictionary||{},{"Remove Format":"Retirar o formato"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.gl=i.gl||{};n.dictionary=Object.assign(n.dictionary||{},{Source:"Orixe"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const a=e.gl=e.gl||{};a.dictionary=Object.assign(a.dictionary||{},{"Align cell text to the bottom":"Aliñar o texto da cela á base","Align cell text to the center":"Aliñar o texto da cela ao centro","Align cell text to the left":"Aliñar o texto da cela á esquerda","Align cell text to the middle":"Aliñar o texto da cela ao medio","Align cell text to the right":"Aliña o texto da cela á dereita","Align cell text to the top":"Aliñar o texto da cela á parte superior","Align table to the left":"Aliñar a táboa á esquerda","Align table to the right":"Aliñar a táboa á dereita",Alignment:"Aliñamento",Background:"Fondo",Border:"Bordo","Cell properties":"Propiedades da cela","Center table":"Centrar a táboa",Color:"Cor","Color picker":"Selector de cores",Column:"Columna",Dashed:"Raiado","Delete column":"Eliminar columna","Delete row":"Eliminar fila",Dimensions:"Dimensións",Dotted:"Punteado",Double:"Dobre","Enter table caption":"Introduza o título da táboa",Groove:"Rañura","Header column":"Cabeceira de columna","Header row":"Cabeceira de fila",Height:"Alto","Horizontal text alignment toolbar":"Barra de ferramentas de aliñamento de texto horizontal","Insert column left":"Inserir columna á esquerda","Insert column right":"Inserir columna á dereita","Insert row above":"Inserir fila enriba","Insert row below":"Inserir fila embaixo","Insert table":"Inserir táboa",Inset:"Inserción","Justify cell text":"Xustificar o texto da cela","Merge cell down":"Combinar cela cara  abaixo","Merge cell left":"Combinar cela cara a esquerda","Merge cell right":"Combinar cela cara a dereita","Merge cell up":"Combinar cela cara arriba","Merge cells":"Combinar celas",None:"Ningún",Outset:"Inicio",Padding:"Recheo",Ridge:"Crista",Row:"Fila","Select column":"Seleccionar columna","Select row":"Seleccionar fila",Solid:"Sólido","Split cell horizontally":"Dividir cela en horizontal","Split cell vertically":"Dividir cela en vertical",Style:"Estilo","Table alignment toolbar":"Barra de ferramentas de aliñamento da táboa","Table cell text alignment":"Aliñamento do texto das celas da táboa","Table properties":"Propiedades da táboa","Table toolbar":"Barra de ferramentas de táboas",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':"A cor non é válida. Probe «#FF0000» ou «rgb(255,0,0)» ou «vermello».",'The value is invalid. Try "10px" or "2em" or simply "2".':"O valor non é válido. Probe «10px» ou «2em» ou simplemente «2».","Toggle caption off":"Desactivar os subtítulos","Toggle caption on":"Activar os subtítulos","Vertical text alignment toolbar":"Barra de ferramentas de aliñamento de texto vertical",Width:"Largo"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.gl=i.gl||{};n.dictionary=Object.assign(n.dictionary||{},{"HTML object":"Obxecto HTML"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(a){const o=a.gl=a.gl||{};o.dictionary=Object.assign(o.dictionary||{},{"Almost equal to":"Case igual a",Angle:"Ángulo","Approximately equal to":"Aproximadamente igual a","Asterisk operator":"Operador asterisco","Austral sign":"Símbolo do austral","back with leftwards arrow above":"cara atrás, coa frecha cara á esquerda enriba","Bitcoin sign":"Símbolo do Bitcoin","Cedi sign":"Símbolo do cedi","Cent sign":"Símbolo do centavo","Character categories":"Categorías de caracteres","Colon sign":"Símbolo do colón","Contains as member":"Conten a","Copyright sign":"Símbolo de copyright","Cruzeiro sign":"Símbolo do cruceiro","Currency sign":"Símbolo de moeda","Degree sign":"Signo de grao","Division sign":"Signo de división","Dollar sign":"Símbolo do dolar","Dong sign":"Símbolo do dong","Double dagger":"Daga dobre","Double exclamation mark":"Marca de dobre exclamación","Double low-9 quotation mark":"Marca de acoutamento comiña dobre baixo-9","Double question mark":"Marca de dobre interrogación","downwards arrow to bar":"frecha cara abaixo con tope","downwards dashed arrow":"frecha de guións cara abaixo","downwards double arrow":"frecha dobre cara abaixo","Drachma sign":"Símbolo do dracma","Element of":"Pertenza","Em dash":"Guión longo (raia)","Empty set":"Conxunto baleiro","En dash":"Guión curto","end with leftwards arrow above":"final, coa frecha cara á esquerda enriba","Euro sign":"Símbolo do euro","Euro-currency sign":"Símbolo da moeda do euro","Exclamation question mark":"Marca de exclamación interrogación","For all":"Para todo","Fraction slash":"Barra de fracción","French franc sign":"Símbolo do franco francés","German penny sign":"Símbolo do penique alemán","Greater-than or equal to":"Maior ou igual que","Greater-than sign":"Maior que","Guarani sign":"Símbolo do guaraní","Horizontal ellipsis":"Elipse horizontal","Hryvnia sign":"Símbolo do hryvnia","Identical to":"Idéntico a","Indian rupee sign":"Símbolo da rupia india",Infinity:"Infinito",Integral:"Integral",Intersection:"Intersección","Inverted exclamation mark":"Marca invertida de exclamación","Inverted question mark":"Marca invertida de interrogación","Kip sign":"Símbolo do kip","Latin capital letter a with breve":"A maiúsculo latino con acento breve","Latin capital letter a with macron":"A maiúsculo latino con macron","Latin capital letter a with ogonek":"A maiúsculo latino con ogonek","Latin capital letter c with acute":"C maiúsculo latino con acento agudo","Latin capital letter c with caron":"C maiúsculo latino con caron","Latin capital letter c with circumflex":"C maiúsculo latino con acento circunflexo","Latin capital letter c with dot above":"C maiúsculo latino con punto enriba","Latin capital letter d with caron":"D maiúsculo latino con caron","Latin capital letter d with stroke":"D maiúsculo latino barrado","Latin capital letter e with breve":"E maiúsculo latino con acento breve","Latin capital letter e with caron":"E maiúsculo latino con caron","Latin capital letter e with dot above":"E maiúsculo latino con punto enriba","Latin capital letter e with macron":"E maiúsculo latino con macron","Latin capital letter e with ogonek":"E maiúsculo latino con ogonek","Latin capital letter eng":"Eng (engma) mziúsculo latino","Latin capital letter g with breve":"G maiúsculo latino con acento breve","Latin capital letter g with cedilla":"G maiúsculo latino con cedilla","Latin capital letter g with circumflex":"G maiúsculo latino con acento circunflexo","Latin capital letter g with dot above":"G maiúsculo latino con punto enriba","Latin capital letter h with circumflex":"H maiúsculo latino con acento circunflexo","Latin capital letter h with stroke":"H maiúsculo latino barrado","Latin capital letter i with breve":"I maiúsculo latino con acento breve","Latin capital letter i with dot above":"I maiúsculo latino con punto enriba","Latin capital letter i with macron":"I maiúsculo latino con macron","Latin capital letter i with ogonek":"I maiúsculo latino con ogonek","Latin capital letter i with tilde":"I maiúsculo latino con til","Latin capital letter j with circumflex":"J maiúsculo latino con acento circunflexo","Latin capital letter k with cedilla":"K maiúsculo latino con cedilla","Latin capital letter l with acute":"L maiúsculo latino con acento agudo","Latin capital letter l with caron":"L maiúsculo latino con caron","Latin capital letter l with cedilla":"L maiúsculo latino con cedilla","Latin capital letter l with middle dot":"L maiúsculo latino con punto medio","Latin capital letter l with stroke":"L maiúsculo latino barrado","Latin capital letter n with acute":"N maiúsculo latino con acento agudo","Latin capital letter n with caron":"N maiúsculo latino con caron","Latin capital letter n with cedilla":"N maiúsculo latino con cedilla","Latin capital letter o with breve":"O maiúsculo latino con acento breve","Latin capital letter o with double acute":"O maiúsculo latino con acento agudo dobre","Latin capital letter o with macron":"O maiúsculo latino con macron","Latin capital letter r with acute":"R maiúsculo latino con acento agudo","Latin capital letter r with caron":"R maiúsculo latino con caron","Latin capital letter r with cedilla":"R maiúsculo latino con cedilla","Latin capital letter s with acute":"S maiúsculo latino con acento agudo","Latin capital letter s with caron":"S maiúsculo latino con caron","Latin capital letter s with cedilla":"S maiúsculo latino con cedilla","Latin capital letter s with circumflex":"S maiúsculo latino con acento circunflexo","Latin capital letter t with caron":"T maiúsculo latino con caron","Latin capital letter t with cedilla":"T maiúsculo latino con cedilla","Latin capital letter t with stroke":"T maiúsculo latino barrado","Latin capital letter u with breve":"U maiúsculo latino con acento breve","Latin capital letter u with double acute":"U maiúsculo latino con acento agudo dobre","Latin capital letter u with macron":"U maiúsculo latino con macron","Latin capital letter u with ogonek":"U maiúsculo latino con ogonek","Latin capital letter u with ring above":"U maiúsculo latino con anel enriba","Latin capital letter u with tilde":"U maiúsculo latino con til","Latin capital letter w with circumflex":"W maiúsculo latino con acento circunflexo","Latin capital letter y with circumflex":"Y maiúsculo latino con acento circunflexo","Latin capital letter y with diaeresis":"Y maiúsculo latino con diérese","Latin capital letter z with acute":"Z maiúsculo latino con acento agudo","Latin capital letter z with caron":"Z maiúsculo latino con caron","Latin capital letter z with dot above":"Z maiúsculo latino con punto enriba","Latin capital ligature ij":"Ligadura IJ maiúsculo latino","Latin capital ligature oe":"Ligadura OE maiúsculo latino","Latin small letter a with breve":"a minúsculo latino con acento breve","Latin small letter a with macron":"a minúsculo latino con macron","Latin small letter a with ogonek":"a minúsculo latino con ogonek","Latin small letter c with acute":"c minúsculo latino con acento agudo","Latin small letter c with caron":"cminúsculo latino con caron","Latin small letter c with circumflex":"c minúsculo latino con acento circunflexo","Latin small letter c with dot above":"c minúsculo latino con punto enriba","Latin small letter d with caron":"d minúsculo latino con caron","Latin small letter d with stroke":"d minúsculo latino barrado","Latin small letter dotless i":"i minúsculo latino sen punto","Latin small letter e with breve":"e minúsculo latino con acento breve","Latin small letter e with caron":"e minúsculo latino con caron","Latin small letter e with dot above":"e  minúsculo latino con punto enriba","Latin small letter e with macron":"e minúsculo latino con macron","Latin small letter e with ogonek":"e minúsculo latino con ogonek","Latin small letter eng":"Eng (engma) minúsculo latino","Latin small letter f with hook":"f minúsculo latino con gancho","Latin small letter g with breve":"g minúsculo latino con acento breve","Latin small letter g with cedilla":"g minúsculo latino con cedilla","Latin small letter g with circumflex":"g minúsculo latino con acento circunflexo","Latin small letter g with dot above":"g minúsculo latino con punto enriba","Latin small letter h with circumflex":"h minúsculo latino con acento circunflexo","Latin small letter h with stroke":"h minúsculo latino barrado","Latin small letter i with breve":"i minúsculo latino con acento breve","Latin small letter i with macron":"i minúsculo latino con macron","Latin small letter i with ogonek":"i minúsculo latino con ogonek","Latin small letter i with tilde":"i minúsculo latino con til","Latin small letter j with circumflex":"j minúsculo latino con acento circunflexo","Latin small letter k with cedilla":"k minúsculo latino con cedilla","Latin small letter kra":"Letra kra minúscula","Latin small letter l with acute":"l minúsculo latino con acento agudo","Latin small letter l with caron":"l minúsculo latino con caron","Latin small letter l with cedilla":"l minúsculo latino con cedilla","Latin small letter l with middle dot":"l minúsculo latino con punto medio","Latin small letter l with stroke":"l minúsculo latino barrado","Latin small letter long s":"s minúsculo latino larga","Latin small letter n preceded by apostrophe":"n minúsculo latino precedido de apostrofe","Latin small letter n with acute":"n minúsculo latino con acento agudo","Latin small letter n with caron":"n minúsculo latino con caron","Latin small letter n with cedilla":"n minúsculo latino con cedilla","Latin small letter o with breve":"o minúsculo latino con acento breve","Latin small letter o with double acute":"o minúsculo latino con acento agudo dobre","Latin small letter o with macron":"o minúsculo latino con macron","Latin small letter r with acute":"r minúsculo latino con acento agudo","Latin small letter r with caron":"r minúsculo latino con caron","Latin small letter r with cedilla":"r minúsculo latino con cedilla","Latin small letter s with acute":"s minúsculo latino con acento agudo","Latin small letter s with caron":"s minúsculo latino con caron","Latin small letter s with cedilla":"s minúsculo latino con cedilla","Latin small letter s with circumflex":"s minúsculo latino con acento circunflexo","Latin small letter t with caron":"t minúsculo latino con caron","Latin small letter t with cedilla":"t minúsculo latino con cedilla","Latin small letter t with stroke":"t minúsculo latino barrado","Latin small letter u with breve":"u minúsculo latino con acento breve","Latin small letter u with double acute":"u minúsculo latino con acento agudo dobre","Latin small letter u with macron":"u minúsculo latino con macron","Latin small letter u with ogonek":"u minúsculo latino con ogonek","Latin small letter u with ring above":"u minúsculo latino con anel enriba","Latin small letter u with tilde":"u minúsculo latino con til","Latin small letter w with circumflex":"w minúsculo latino con acento circunflexo","Latin small letter y with circumflex":"y minúsculo latino con acento circunflexo","Latin small letter z with acute":"z minúsculo latino con acento agudo","Latin small letter z with caron":"z minúsculo latino con caron","Latin small letter z with dot above":"z minúsculo latino con punto enriba","Latin small ligature ij":"Ligadura ij minúsculo latino","Latin small ligature oe":"Ligadura oe minúsculo latino","Left double quotation mark":"Marca de acoutamento comiña dobre esquerda","Left single quotation mark":"Marca de acoutamento comiña sinxela esquerda","Left-pointing double angle quotation mark":"Marca de acoutamento ángulo esquerdo dobre","leftwards arrow to bar":"frecha cara á esquerda con tope","leftwards dashed arrow":"frecha de guións cara á esquerda","leftwards double arrow":"frecha dobre cara á esquerda","Less-than or equal to":"Menor ou igual que","Less-than sign":"Menor que","Lira sign":"Símbolo da lira","Livre tournois sign":"Símbolo da libra tournois","Logical and":"E lóxico (conxunción)","Logical or":"Ou lóxico (disxunción)",Macron:"Macron","Manat sign":"Símbolo do manat","Mill sign":"Símbolo do mill","Minus sign":"Signo menos","Multiplication sign":"Signo de multiplicación","N-ary product":"Produto de n elementos, produtorio","N-ary summation":"Suma de n elementos, sumatorio",Nabla:"Nabla (Gradiente)","Naira sign":"Símbolo da naira","New sheqel sign":"Símbolo do novo xequel","Nordic mark sign":"Símbolo do marco nordico","Not an element of":"Non pertenza","Not equal to":"Distinto de","Not sign":"Signo non","on with exclamation mark with left right arrow above":"activado, con signo de exclamación coa frecha esquerda-dereita enrriba",Overline:"Liña superior","Paragraph sign":"Signo de parágrafo","Partial differential":"Derivada parcial","Per mille sign":"Signo de por milleiro","Per ten thousand sign":"Signo de por dez mil","Peseta sign":"Símbolo da peseta","Peso sign":"Símbolo do peso","Plus-minus sign":"Signo más/menos","Pound sign":"Símbolo da libra","Proportional to":"Proporcional a","Question exclamation mark":"Marca de interrogación exclamación","Registered sign":"Símbolo de rexistrado","Reversed paragraph sign":"Signo invertido do parágrafo","Right double quotation mark":"Marca de acoutamento comiña dobre dereita","Right single quotation mark":"Marca de acoutamento comiña sinxela dereita","Right-pointing double angle quotation mark":"Marca de acoutamento ángulo dereito dobre","rightwards arrow to bar":"frecha cara á dereita con tope","rightwards dashed arrow":"frecha de guións cara á dereita","rightwards double arrow":"frecha dobre cara á dereita","Ruble sign":"Símbolo do rublo","Rupee sign":"Símbolo da rupia","Section sign":"Signo de sección","Single left-pointing angle quotation mark":"Marca de acoutamento ángulo esquerdo sinxelo","Single low-9 quotation mark":"Marca de acoutamento comiña sinxela baixo-9","Single right-pointing angle quotation mark":"Marca de acoutamento ángulo dereito sinxelo","soon with rightwards arrow above":"logo, coa frecha cara á dereita enriba","Special characters":"Caracteres especiais","Spesmilo sign":"Símbolo do spesmilo","Square root":"Raíz cadrada","Tenge sign":"Símbolo do tenge","There exists":"Existe","Tilde operator":"Operador til","top with upwards arrow above":"superior, coa frecha cara arriba enriba","Trade mark sign":"Símbolo de marca de fábrica","Tugrik sign":"Símbolo do tugrik","Turkish lira sign":"Símbolo da lira turca","Two dot leader":"Líder de dous puntos",Union:"Unión","up down arrow with base":"frecha arriba-abaixo con base","upwards arrow to bar":"frecha cara arriba con tope","upwards dashed arrow":"frecha de guións cara arriba","upwards double arrow":"frecha dobre cara arriba","Vulgar fraction one half":"Fracción común dun medio","Vulgar fraction one quarter":"Fracción común dun cuarto","Vulgar fraction three quarters":"Fracción común de tres cuartos","Won sign":"Símbolo do won","Yen sign":"Símbolo do yen"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const r=e.gl=e.gl||{};r.dictionary=Object.assign(r.dictionary||{},{"%0 of %1":"%0 de %1",Aquamarine:"Augamariña",Black:"Negro",Blue:"Azul",Cancel:"Cancelar","Dim grey":"Gris fume","Dropdown toolbar":"Barra de ferramentas despregábel","Edit block":"Editar bloque","Editor toolbar":"Barra de ferramentas do editor",Green:"Verde",Grey:"Gris","Insert paragraph after block":"Inserir parágrafo após o bloque","Insert paragraph before block":"Inserir parágrafo antes do bloque","Light blue":"Azul claro","Light green":"Verde claro","Light grey":"Gris claro",Next:"Seguinte",Orange:"Laranxa",Previous:"Anterior",Purple:"Púrpura",Red:"Vermello",Redo:"Refacer","Remove color":"Retirar a cor","Restore default":"Restaurar valores predeterminados","Rich Text Editor":"Editor de texto mellorado","Rich Text Editor, %0":"Editor de texto mellorado, %0",Save:"Gardar","Select all":"Seleccionar todo","Show more items":"Amosar máis elementos",Turquoise:"Turquesa",Undo:"Desfacer","Upload in progress":"Envío en proceso",White:"Branco","Widget toolbar":"Barra de ferramentas de trebellos",Yellow:"Amarelo"}),r.getPluralForm=function(e){return 1!=e}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/gu.js b/core/assets/vendor/ckeditor5/translations/gu.js
new file mode 100644
index 000000000000..2d023aa82436
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/gu.js
@@ -0,0 +1 @@
+!function(i){const n=i.gu=i.gu||{};n.dictionary=Object.assign(n.dictionary||{},{Bold:"ઘાટુ - બોલ્ડ્",Code:"",Italic:"ત્રાંસુ - ઇટલિક્",Strikethrough:"",Subscript:"",Superscript:"",Underline:"નીચે લિટી - અન્ડરલાઇન્"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.gu=i.gu||{};n.dictionary=Object.assign(n.dictionary||{},{"Block quote":" વિચાર ટાંકો"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/he.js b/core/assets/vendor/ckeditor5/translations/he.js
new file mode 100644
index 000000000000..7fc0e372e7be
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/he.js
@@ -0,0 +1 @@
+!function(n){const i=n.he=n.he||{};i.dictionary=Object.assign(i.dictionary||{},{"Align center":"יישור באמצע","Align left":"יישור לשמאל","Align right":"יישור לימין",Justify:"מרכוז גבולות","Text alignment":"יישור טקסט","Text alignment toolbar":"סרגל כלים יישור טקסט"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.he=i.he||{};n.dictionary=Object.assign(n.dictionary||{},{Bold:"מודגש",Code:"קוד",Italic:"נטוי",Strikethrough:"קו חוצה",Subscript:"כתב תחתי",Superscript:"כתב עילי",Underline:"קו תחתון"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.he=i.he||{};n.dictionary=Object.assign(n.dictionary||{},{"Block quote":"בלוק ציטוט"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const n=e.he=e.he||{};n.dictionary=Object.assign(n.dictionary||{},{"Choose heading":"בחר סוג כותרת",Heading:"כותרת","Heading 1":"כותרת 1","Heading 2":"כותרת 2","Heading 3":"כותרת 3","Heading 4":"כותרת 4","Heading 5":"כותרת 5","Heading 6":"כותרת 6",Paragraph:"פיסקה","Type or paste your content here.":"הזן או הדבק את התוכן כאן","Type your title":"הזן כותרת"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.he=i.he||{};n.dictionary=Object.assign(n.dictionary||{},{"Horizontal line":"קו אופקי"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.he=e.he||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"","Centered image":"תמונה ממרוכזת","Change image text alternative":"שינוי טקסט אלטרנטיבי לתמונה","Enter image caption":"הזן כותרת תמונה","Full size image":"תמונה בפריסה מלאה","Image resize list":"","Image toolbar":"סרגל תמונה","image widget":"תמונה","In line":"",Insert:"","Insert image":"הוספת תמונה","Insert image via URL":"","Left aligned image":"תמונה מיושרת לשמאל",Original:"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Right aligned image":"תמונה מיושרת לימין","Side image":"תמונת צד","Text alternative":"טקסט אלטרנטיבי",Update:"","Update image URL":"","Upload failed":"העלאה נכשלה","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.he=n.he||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"","Edit link":"עריכת קישור",Link:"קישור","Link image":"","Link URL":"קישור כתובת אתר","Open in a new tab":"","Open link in new tab":"פתח קישור בכרטיסייה חדשה","This link has no URL":"לקישור זה אין כתובת אתר",Unlink:"ביטול קישור"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.he=e.he||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"רשימה מנוקדת","Bulleted list styles toolbar":"",Circle:"",Decimal:"","Decimal with leading zero":"",Disc:"","Lower-latin":"","Lower–roman":"","Numbered List":"רשימה ממוספרת","Numbered list styles toolbar":"",Square:"","To-do List":"רשימת מטלות","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const o=e.he=e.he||{};o.dictionary=Object.assign(o.dictionary||{},{"%0 of %1":"0% מתוך %1",Aquamarine:"",Black:"",Blue:"",Cancel:"ביטול","Dim grey":"","Dropdown toolbar":"סרגל כלים נפתח","Edit block":"הגדרות בלוק","Editor toolbar":"סרגל הכלים",Green:"",Grey:"","Insert paragraph after block":"","Insert paragraph before block":"","Light blue":"","Light green":"","Light grey":"",Next:"הבא",Orange:"",Previous:"הקודם",Purple:"",Red:"",Redo:"ביצוע מחדש","Remove color":"","Restore default":"","Rich Text Editor":"עורך טקסט עשיר","Rich Text Editor, %0":"עורך טקסט עשיר, %0",Save:"שמירה","Show more items":"הצד פריטים נוספים",Turquoise:"",Undo:"ביטול","Upload in progress":"העלאה מתבצעת",White:"","Widget toolbar":"סרגל יישומון",Yellow:""}),o.getPluralForm=function(e){return 1==e&&e%1==0?0:2==e&&e%1==0?1:e%10==0&&e%1==0&&e>10?2:3}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/hi.js b/core/assets/vendor/ckeditor5/translations/hi.js
new file mode 100644
index 000000000000..9974a59f6dc0
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/hi.js
@@ -0,0 +1 @@
+!function(i){const n=i.hi=i.hi||{};n.dictionary=Object.assign(n.dictionary||{},{"Align center":"Align center","Align left":"Align left","Align right":"Align right",Justify:"Justify","Text alignment":"Text alignment","Text alignment toolbar":"Text alignment toolbar"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const t=i.hi=i.hi||{};t.dictionary=Object.assign(t.dictionary||{},{Bold:"Bold",Code:"Code",Italic:"Italic",Strikethrough:"Strikethrough",Subscript:"Subscript",Superscript:"Superscript",Underline:"Underline"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const o=i.hi=i.hi||{};o.dictionary=Object.assign(o.dictionary||{},{"Block quote":"Block quote"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.hi=e.hi||{};i.dictionary=Object.assign(i.dictionary||{},{"Choose heading":"Choose heading",Heading:"Heading","Heading 1":"Heading 1","Heading 2":"Heading 2","Heading 3":"Heading 3","Heading 4":"Heading 4","Heading 5":"Heading 5","Heading 6":"Heading 6",Paragraph:"Paragraph","Type or paste your content here.":"Type or paste your content here.","Type your title":"Type your title"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.hi=i.hi||{};n.dictionary=Object.assign(n.dictionary||{},{"Horizontal line":"Horizontal line"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.hi=e.hi||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"","Centered image":"Centered image","Change image text alternative":"Change image text alternative","Enter image caption":"Enter image caption","Full size image":"Full size image","Image resize list":"Image resize list","Image toolbar":"Image toolbar","image widget":"image widget","In line":"",Insert:"Insert","Insert image":"Insert image","Insert image via URL":"Insert image via URL","Left aligned image":"Left aligned image",Original:"Original","Resize image":"Resize image","Resize image to %0":"Resize image to %0","Resize image to the original size":"Resize image to the original size","Right aligned image":"Right aligned image","Side image":"Side image","Text alternative":"Text alternative",Update:"Update","Update image URL":"Update image URL","Upload failed":"Upload failed","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const e=n.hi=n.hi||{};e.dictionary=Object.assign(e.dictionary||{},{"Decrease indent":"Decrease indent","Increase indent":"Increase indent"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.hi=n.hi||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"Downloadable","Edit link":"Edit link",Link:"Link","Link image":"Link image","Link URL":"Link URL","Open in a new tab":"Open in a new tab","Open link in new tab":"Open link in new tab","This link has no URL":"This link has no URL",Unlink:"Unlink"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.hi=e.hi||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"Bulleted List","Bulleted list styles toolbar":"Bulleted list styles toolbar",Circle:"Circle",Decimal:"Decimal","Decimal with leading zero":"Decimal with leading zero",Disc:"Disc","Lower-latin":"Lower-latin","Lower–roman":"Lower–roman","Numbered List":"Numbered List","Numbered list styles toolbar":"Numbered list styles toolbar",Square:"Square","To-do List":"To-do List","Toggle the circle list style":"Toggle the circle list style","Toggle the decimal list style":"Toggle the decimal list style","Toggle the decimal with leading zero list style":"Toggle the decimal with leading zero list style","Toggle the disc list style":"Toggle the disc list style","Toggle the lower–latin list style":"Toggle the lower–latin list style","Toggle the lower–roman list style":"Toggle the lower–roman list style","Toggle the square list style":"Toggle the square list style","Toggle the upper–latin list style":"Toggle the upper–latin list style","Toggle the upper–roman list style":"Toggle the upper–roman list style","Upper-latin":"Upper-latin","Upper-roman":"Upper-roman"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const o=i.hi=i.hi||{};o.dictionary=Object.assign(o.dictionary||{},{"Remove Format":"Remove Format"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e.hi=e.hi||{};t.dictionary=Object.assign(t.dictionary||{},{"Align cell text to the bottom":"Align cell text to the bottom","Align cell text to the center":"Align cell text to the center","Align cell text to the left":"Align cell text to the left","Align cell text to the middle":"Align cell text to the middle","Align cell text to the right":"Align cell text to the right","Align cell text to the top":"Align cell text to the top","Align table to the left":"Align table to the left","Align table to the right":"Align table to the right",Alignment:"Alignment",Background:"Background",Border:"Border","Cell properties":"Cell properties","Center table":"Center table",Color:"Color","Color picker":"Color picker",Column:"Column",Dashed:"Dashed","Delete column":"Delete column","Delete row":"Delete row",Dimensions:"Dimensions",Dotted:"Dotted",Double:"Double","Enter table caption":"",Groove:"Groove","Header column":"Header column","Header row":"Header row",Height:"Height","Horizontal text alignment toolbar":"Horizontal text alignment toolbar","Insert column left":"Insert column left","Insert column right":"Insert column right","Insert row above":"Insert row above","Insert row below":"Insert row below","Insert table":"Insert table",Inset:"Inset","Justify cell text":"Justify cell text","Merge cell down":"Merge cell down","Merge cell left":"Merge cell left","Merge cell right":"Merge cell right","Merge cell up":"Merge cell up","Merge cells":"Merge cells",None:"None",Outset:"Outset",Padding:"Padding",Ridge:"Ridge",Row:"Row","Select column":"Select column","Select row":"Select row",Solid:"Solid","Split cell horizontally":"Split cell horizontally","Split cell vertically":"Split cell vertically",Style:"Style","Table alignment toolbar":"Table alignment toolbar","Table cell text alignment":"Table cell text alignment","Table properties":"Table properties","Table toolbar":"Table toolbar",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".','The value is invalid. Try "10px" or "2em" or simply "2".':'The value is invalid. Try "10px" or "2em" or simply "2".',"Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"Vertical text alignment toolbar",Width:"Width"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(t){const a=t.hi=t.hi||{};a.dictionary=Object.assign(a.dictionary||{},{"Almost equal to":"Almost equal to",Angle:"Angle","Approximately equal to":"Approximately equal to","Asterisk operator":"Asterisk operator","Austral sign":"Austral sign","back with leftwards arrow above":"back with leftwards arrow above","Bitcoin sign":"Bitcoin sign","Cedi sign":"Cedi sign","Cent sign":"Cent sign","Character categories":"Character categories","Colon sign":"Colon sign","Contains as member":"Contains as member","Copyright sign":"Copyright sign","Cruzeiro sign":"Cruzeiro sign","Currency sign":"Currency sign","Degree sign":"Degree sign","Division sign":"Division sign","Dollar sign":"Dollar sign","Dong sign":"Dong sign","Double dagger":"Double dagger","Double exclamation mark":"Double exclamation mark","Double low-9 quotation mark":"Double low-9 quotation mark","Double question mark":"Double question mark","downwards arrow to bar":"downwards arrow to bar","downwards dashed arrow":"downwards dashed arrow","downwards double arrow":"downwards double arrow","Drachma sign":"Drachma sign","Element of":"Element of","Em dash":"Em dash","Empty set":"Empty set","En dash":"En dash","end with leftwards arrow above":"end with leftwards arrow above","Euro sign":"Euro sign","Euro-currency sign":"Euro-currency sign","Exclamation question mark":"Exclamation question mark","For all":"For all","Fraction slash":"Fraction slash","French franc sign":"French franc sign","German penny sign":"German penny sign","Greater-than or equal to":"Greater-than or equal to","Greater-than sign":"Greater-than sign","Guarani sign":"Guarani sign","Horizontal ellipsis":"Horizontal ellipsis","Hryvnia sign":"Hryvnia sign","Identical to":"Identical to","Indian rupee sign":"Indian rupee sign",Infinity:"Infinity",Integral:"Integral",Intersection:"Intersection","Inverted exclamation mark":"Inverted exclamation mark","Inverted question mark":"Inverted question mark","Kip sign":"Kip sign","Latin capital letter a with breve":"Latin capital letter a with breve","Latin capital letter a with macron":"Latin capital letter a with macron","Latin capital letter a with ogonek":"Latin capital letter a with ogonek","Latin capital letter c with acute":"Latin capital letter c with acute","Latin capital letter c with caron":"Latin capital letter c with caron","Latin capital letter c with circumflex":"Latin capital letter c with circumflex","Latin capital letter c with dot above":"Latin capital letter c with dot above","Latin capital letter d with caron":"Latin capital letter d with caron","Latin capital letter d with stroke":"Latin capital letter d with stroke","Latin capital letter e with breve":"Latin capital letter e with breve","Latin capital letter e with caron":"Latin capital letter e with caron","Latin capital letter e with dot above":"Latin capital letter e with dot above","Latin capital letter e with macron":"Latin capital letter e with macron","Latin capital letter e with ogonek":"Latin capital letter e with ogonek","Latin capital letter eng":"Latin capital letter eng","Latin capital letter g with breve":"Latin capital letter g with breve","Latin capital letter g with cedilla":"Latin capital letter g with cedilla","Latin capital letter g with circumflex":"Latin capital letter g with circumflex","Latin capital letter g with dot above":"Latin capital letter g with dot above","Latin capital letter h with circumflex":"Latin capital letter h with circumflex","Latin capital letter h with stroke":"Latin capital letter h with stroke","Latin capital letter i with breve":"Latin capital letter i with breve","Latin capital letter i with dot above":"Latin capital letter i with dot above","Latin capital letter i with macron":"Latin capital letter i with macron","Latin capital letter i with ogonek":"Latin capital letter i with ogonek","Latin capital letter i with tilde":"Latin capital letter i with tilde","Latin capital letter j with circumflex":"Latin capital letter j with circumflex","Latin capital letter k with cedilla":"Latin capital letter k with cedilla","Latin capital letter l with acute":"Latin capital letter l with acute","Latin capital letter l with caron":"Latin capital letter l with caron","Latin capital letter l with cedilla":"Latin capital letter l with cedilla","Latin capital letter l with middle dot":"Latin capital letter l with middle dot","Latin capital letter l with stroke":"Latin capital letter l with stroke","Latin capital letter n with acute":"Latin capital letter n with acute","Latin capital letter n with caron":"Latin capital letter n with caron","Latin capital letter n with cedilla":"Latin capital letter n with cedilla","Latin capital letter o with breve":"Latin capital letter o with breve","Latin capital letter o with double acute":"Latin capital letter o with double acute","Latin capital letter o with macron":"Latin capital letter o with macron","Latin capital letter r with acute":"Latin capital letter r with acute","Latin capital letter r with caron":"Latin capital letter r with caron","Latin capital letter r with cedilla":"Latin capital letter r with cedilla","Latin capital letter s with acute":"Latin capital letter s with acute","Latin capital letter s with caron":"Latin capital letter s with caron","Latin capital letter s with cedilla":"Latin capital letter s with cedilla","Latin capital letter s with circumflex":"Latin capital letter s with circumflex","Latin capital letter t with caron":"Latin capital letter t with caron","Latin capital letter t with cedilla":"Latin capital letter t with cedilla","Latin capital letter t with stroke":"Latin capital letter t with stroke","Latin capital letter u with breve":"Latin capital letter u with breve","Latin capital letter u with double acute":"Latin capital letter u with double acute","Latin capital letter u with macron":"Latin capital letter u with macron","Latin capital letter u with ogonek":"Latin capital letter u with ogonek","Latin capital letter u with ring above":"Latin capital letter u with ring above","Latin capital letter u with tilde":"Latin capital letter u with tilde","Latin capital letter w with circumflex":"Latin capital letter w with circumflex","Latin capital letter y with circumflex":"Latin capital letter y with circumflex","Latin capital letter y with diaeresis":"Latin capital letter y with diaeresis","Latin capital letter z with acute":"Latin capital letter z with acute","Latin capital letter z with caron":"Latin capital letter z with caron","Latin capital letter z with dot above":"Latin capital letter z with dot above","Latin capital ligature ij":"Latin capital ligature ij","Latin capital ligature oe":"Latin capital ligature oe","Latin small letter a with breve":"Latin small letter a with breve","Latin small letter a with macron":"Latin small letter a with macron","Latin small letter a with ogonek":"Latin small letter a with ogonek","Latin small letter c with acute":"Latin small letter c with acute","Latin small letter c with caron":"Latin small letter c with caron","Latin small letter c with circumflex":"Latin small letter c with circumflex","Latin small letter c with dot above":"Latin small letter c with dot above","Latin small letter d with caron":"Latin small letter d with caron","Latin small letter d with stroke":"Latin small letter d with stroke","Latin small letter dotless i":"Latin small letter dotless i","Latin small letter e with breve":"Latin small letter e with breve","Latin small letter e with caron":"Latin small letter e with caron","Latin small letter e with dot above":"Latin small letter e with dot above","Latin small letter e with macron":"Latin small letter e with macron","Latin small letter e with ogonek":"Latin small letter e with ogonek","Latin small letter eng":"Latin small letter eng","Latin small letter f with hook":"Latin small letter f with hook","Latin small letter g with breve":"Latin small letter g with breve","Latin small letter g with cedilla":"Latin small letter g with cedilla","Latin small letter g with circumflex":"Latin small letter g with circumflex","Latin small letter g with dot above":"Latin small letter g with dot above","Latin small letter h with circumflex":"Latin small letter h with circumflex","Latin small letter h with stroke":"Latin small letter h with stroke","Latin small letter i with breve":"Latin small letter i with breve","Latin small letter i with macron":"Latin small letter i with macron","Latin small letter i with ogonek":"Latin small letter i with ogonek","Latin small letter i with tilde":"Latin small letter i with tilde","Latin small letter j with circumflex":"Latin small letter j with circumflex","Latin small letter k with cedilla":"Latin small letter k with cedilla","Latin small letter kra":"Latin small letter kra","Latin small letter l with acute":"Latin small letter l with acute","Latin small letter l with caron":"Latin small letter l with caron","Latin small letter l with cedilla":"Latin small letter l with cedilla","Latin small letter l with middle dot":"Latin small letter l with middle dot","Latin small letter l with stroke":"Latin small letter l with stroke","Latin small letter long s":"Latin small letter long s","Latin small letter n preceded by apostrophe":"Latin small letter n preceded by apostrophe","Latin small letter n with acute":"Latin small letter n with acute","Latin small letter n with caron":"Latin small letter n with caron","Latin small letter n with cedilla":"Latin small letter n with cedilla","Latin small letter o with breve":"Latin small letter o with breve","Latin small letter o with double acute":"Latin small letter o with double acute","Latin small letter o with macron":"Latin small letter o with macron","Latin small letter r with acute":"Latin small letter r with acute","Latin small letter r with caron":"Latin small letter r with caron","Latin small letter r with cedilla":"Latin small letter r with cedilla","Latin small letter s with acute":"Latin small letter s with acute","Latin small letter s with caron":"Latin small letter s with caron","Latin small letter s with cedilla":"Latin small letter s with cedilla","Latin small letter s with circumflex":"Latin small letter s with circumflex","Latin small letter t with caron":"Latin small letter t with caron","Latin small letter t with cedilla":"Latin small letter t with cedilla","Latin small letter t with stroke":"Latin small letter t with stroke","Latin small letter u with breve":"Latin small letter u with breve","Latin small letter u with double acute":"Latin small letter u with double acute","Latin small letter u with macron":"Latin small letter u with macron","Latin small letter u with ogonek":"Latin small letter u with ogonek","Latin small letter u with ring above":"Latin small letter u with ring above","Latin small letter u with tilde":"Latin small letter u with tilde","Latin small letter w with circumflex":"Latin small letter w with circumflex","Latin small letter y with circumflex":"Latin small letter y with circumflex","Latin small letter z with acute":"Latin small letter z with acute","Latin small letter z with caron":"Latin small letter z with caron","Latin small letter z with dot above":"Latin small letter z with dot above","Latin small ligature ij":"Latin small ligature ij","Latin small ligature oe":"Latin small ligature oe","Left double quotation mark":"Left double quotation mark","Left single quotation mark":"Left single quotation mark","Left-pointing double angle quotation mark":"Left-pointing double angle quotation mark","leftwards arrow to bar":"leftwards arrow to bar","leftwards dashed arrow":"leftwards dashed arrow","leftwards double arrow":"leftwards double arrow","Less-than or equal to":"Less-than or equal to","Less-than sign":"Less-than sign","Lira sign":"Lira sign","Livre tournois sign":"Livre tournois sign","Logical and":"Logical and","Logical or":"Logical or",Macron:"Macron","Manat sign":"Manat sign","Mill sign":"Mill sign","Minus sign":"Minus sign","Multiplication sign":"Multiplication sign","N-ary product":"N-ary product","N-ary summation":"N-ary summation",Nabla:"Nabla","Naira sign":"Naira sign","New sheqel sign":"New sheqel sign","Nordic mark sign":"Nordic mark sign","Not an element of":"Not an element of","Not equal to":"Not equal to","Not sign":"Not sign","on with exclamation mark with left right arrow above":"on with exclamation mark with left right arrow above",Overline:"Overline","Paragraph sign":"Paragraph sign","Partial differential":"Partial differential","Per mille sign":"Per mille sign","Per ten thousand sign":"Per ten thousand sign","Peseta sign":"Peseta sign","Peso sign":"Peso sign","Plus-minus sign":"Plus-minus sign","Pound sign":"Pound sign","Proportional to":"Proportional to","Question exclamation mark":"Question exclamation mark","Registered sign":"Registered sign","Reversed paragraph sign":"Reversed paragraph sign","Right double quotation mark":"Right double quotation mark","Right single quotation mark":"Right single quotation mark","Right-pointing double angle quotation mark":"Right-pointing double angle quotation mark","rightwards arrow to bar":"rightwards arrow to bar","rightwards dashed arrow":"rightwards dashed arrow","rightwards double arrow":"rightwards double arrow","Ruble sign":"Ruble sign","Rupee sign":"Rupee sign","Section sign":"Section sign","Single left-pointing angle quotation mark":"Single left-pointing angle quotation mark","Single low-9 quotation mark":"Single low-9 quotation mark","Single right-pointing angle quotation mark":"Single right-pointing angle quotation mark","soon with rightwards arrow above":"soon with rightwards arrow above","Special characters":"Special characters","Spesmilo sign":"Spesmilo sign","Square root":"Square root","Tenge sign":"Tenge sign","There exists":"There exists","Tilde operator":"Tilde operator","top with upwards arrow above":"top with upwards arrow above","Trade mark sign":"Trade mark sign","Tugrik sign":"Tugrik sign","Turkish lira sign":"Turkish lira sign","Two dot leader":"Two dot leader",Union:"Union","up down arrow with base":"up down arrow with base","upwards arrow to bar":"upwards arrow to bar","upwards dashed arrow":"upwards dashed arrow","upwards double arrow":"upwards double arrow","Vulgar fraction one half":"Vulgar fraction one half","Vulgar fraction one quarter":"Vulgar fraction one quarter","Vulgar fraction three quarters":"Vulgar fraction three quarters","Won sign":"Won sign","Yen sign":"Yen sign"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const o=e.hi=e.hi||{};o.dictionary=Object.assign(o.dictionary||{},{"%0 of %1":"%0 of %1",Aquamarine:"Aquamarine",Black:"Black",Blue:"Blue",Cancel:"Cancel","Dim grey":"Dim grey","Dropdown toolbar":"Dropdown toolbar","Edit block":"Edit block","Editor toolbar":"Editor toolbar",Green:"Green",Grey:"Grey","Insert paragraph after block":"Insert paragraph after block","Insert paragraph before block":"Insert paragraph before block","Light blue":"Light blue","Light green":"Light green","Light grey":"Light grey",Next:"Next",Orange:"Orange",Previous:"Previous",Purple:"Purple",Red:"Red",Redo:"Redo","Remove color":"Remove color","Restore default":"","Rich Text Editor":"Rich Text Editor","Rich Text Editor, %0":"Rich Text Editor, %0",Save:"Save","Select all":"Select all","Show more items":"Show more items",Turquoise:"Turquoise",Undo:"Undo","Upload in progress":"Upload in progress",White:"White","Widget toolbar":"Widget toolbar",Yellow:"Yellow"}),o.getPluralForm=function(e){return 1!=e}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/hr.js b/core/assets/vendor/ckeditor5/translations/hr.js
new file mode 100644
index 000000000000..895df5bc7fca
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/hr.js
@@ -0,0 +1 @@
+!function(n){const a=n.hr=n.hr||{};a.dictionary=Object.assign(a.dictionary||{},{"Align center":"Poravnaj po sredini","Align left":"Poravnaj ulijevo","Align right":"Poravnaj udesno",Justify:"Razvuci","Text alignment":"Poravnanje teksta","Text alignment toolbar":"Traka za poravnanje"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const o=n.hr=n.hr||{};o.dictionary=Object.assign(o.dictionary||{},{Bold:"Podebljano",Code:"Kod",Italic:"Ukošeno",Strikethrough:"Precrtano",Subscript:"Indeks",Superscript:"Eksponent",Underline:"Podcrtavanje"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const o=i.hr=i.hr||{};o.dictionary=Object.assign(o.dictionary||{},{"Block quote":"Blok citat"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(a){const e=a.hr=a.hr||{};e.dictionary=Object.assign(e.dictionary||{},{"Choose heading":"Odaberite naslov",Heading:"Naslov","Heading 1":"Naslov 1","Heading 2":"Naslov 2","Heading 3":"Naslov 3","Heading 4":"Naslov 4","Heading 5":"Naslov 5","Heading 6":"Naslov 6",Paragraph:"Paragraf","Type or paste your content here.":"Utipkajte ili zalijepite Vaš sadržaj ovdje.","Type your title":"Utipkajte naslov"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.hr=i.hr||{};n.dictionary=Object.assign(n.dictionary||{},{"Horizontal line":"Vodoravna linija"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.hr=e.hr||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"","Centered image":"Centrirana slika","Change image text alternative":"Promijeni alternativni tekst slike","Enter image caption":"Unesite naslov slike","Full size image":"Slika pune veličine","Image resize list":"","Image toolbar":"Traka za slike","image widget":"Slika widget","In line":"",Insert:"","Insert image":"Umetni sliku","Insert image via URL":"","Left aligned image":"Lijevo poravnata slika",Original:"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Right aligned image":"Slika poravnata desno","Side image":"Slika sa strane","Text alternative":"Alternativni tekst",Update:"","Update image URL":"","Upload failed":"Slanje nije uspjelo","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const e=n.hr=n.hr||{};e.dictionary=Object.assign(e.dictionary||{},{"Decrease indent":"Umanji uvlačenje","Increase indent":"Povećaj uvlačenje"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.hr=i.hr||{};n.dictionary=Object.assign(n.dictionary||{},{Downloadable:"Moguće preuzeti","Edit link":"Uredi vezu",Link:"Veza","Link image":"","Link URL":"URL veze","Open in a new tab":"Otvori u novoj kartici","Open link in new tab":"Otvori vezu u novoj kartici","This link has no URL":"Ova veza nema URL",Unlink:"Ukloni vezu"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e.hr=e.hr||{};t.dictionary=Object.assign(t.dictionary||{},{"Bulleted List":"Obična lista","Bulleted list styles toolbar":"",Circle:"",Decimal:"","Decimal with leading zero":"",Disc:"","Lower-latin":"","Lower–roman":"","Numbered List":"Brojčana lista","Numbered list styles toolbar":"",Square:"","To-do List":"Lista zadataka za obaviti","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(o){const i=o.hr=o.hr||{};i.dictionary=Object.assign(i.dictionary||{},{"Remove Format":"Ukloni format"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const a=e.hr=e.hr||{};a.dictionary=Object.assign(a.dictionary||{},{"Align cell text to the bottom":"Tekst ćelije poravnaj prema dolje","Align cell text to the center":"Tekst ćelije poravnaj u sredinu","Align cell text to the left":"Tekst ćelije poravnaj lijevo","Align cell text to the middle":"Tekst ćelije poravnaj u sredinu","Align cell text to the right":"Tekst ćelije poravnaj udesno","Align cell text to the top":"Tekst ćelije poravnaj prema gore","Align table to the left":"Poravnaj tablicu ulijevo","Align table to the right":"Poravnaj tablicu udesno",Alignment:"Poravnanje",Background:"Pozadina",Border:"Granica","Cell properties":"Svojstva ćelije","Center table":"Centriraj tablicu",Color:"Boja","Color picker":"Birač boje",Column:"Kolona",Dashed:"Crtičasta","Delete column":"Obriši kolonu","Delete row":"Obriši red",Dimensions:"Dimenzije",Dotted:"Točkasta",Double:"Dvostruka","Enter table caption":"",Groove:"","Header column":"Kolona zaglavlja","Header row":"Red zaglavlja",Height:"Visina","Horizontal text alignment toolbar":"Alatna traka za horizontalno poravnanje teksta","Insert column left":"Umetni stupac lijevo","Insert column right":"Umetni stupac desno","Insert row above":"Ubaci red iznad","Insert row below":"Ubaci red ispod","Insert table":"Ubaci tablicu",Inset:"","Justify cell text":"Razvuci tekst ćelije","Merge cell down":"Spoji ćelije prema dolje","Merge cell left":"Spoji ćelije prema lijevo","Merge cell right":"Spoji ćelije prema desno","Merge cell up":"Spoji ćelije prema gore","Merge cells":"Spoji ćelije",None:"Nikakva",Outset:"",Padding:"Podstava",Ridge:"Greben",Row:"Red","Select column":"Odaberi stupac","Select row":"Odaberi redak",Solid:"Neprekidna","Split cell horizontally":"Razdvoji ćeliju vodoravno","Split cell vertically":"Razdvoji ćeliju okomito",Style:"Stil","Table alignment toolbar":"Alatna traka za poravnanje tablice","Table cell text alignment":"Poravnanje teksta ćelije tablice","Table properties":"Svojstva tablice","Table toolbar":"Traka za tablice",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':'Neispravna boja. Pokušajte "#FF0000" ili "rgb(255,0,0)" ili "red".','The value is invalid. Try "10px" or "2em" or simply "2".':'Neispravna vrijednost. Pokušajte "10px" ili "2em" ili jednostavno "2".',"Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"Alatna traka za vertikalno poravnanje teksta",Width:"Širina"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(a){const e=a.hr=a.hr||{};e.dictionary=Object.assign(e.dictionary||{},{"%0 of %1":"%0 od %1",Aquamarine:"Akvamarin",Black:"Crna",Blue:"Plava",Cancel:"Poništi","Dim grey":"Tamnosiva","Dropdown toolbar":"Traka padajućeg izbornika","Edit block":"Uredi blok","Editor toolbar":"Traka uređivača",Green:"Zelena",Grey:"Siva","Insert paragraph after block":"","Insert paragraph before block":"","Light blue":"Svijetloplava","Light green":"Svijetlozelena","Light grey":"Svijetlosiva",Next:"Sljedeći",Orange:"Narančasta",Previous:"Prethodni",Purple:"Ljubičasta",Red:"Crvena",Redo:"Ponovi","Remove color":"Ukloni boju","Restore default":"","Rich Text Editor":"Rich Text Editor","Rich Text Editor, %0":"Rich Text Editor, %0",Save:"Snimi","Select all":"Odaberi sve","Show more items":"Prikaži više stavaka",Turquoise:"Tirkizna",Undo:"Poništi","Upload in progress":"Slanje u tijeku",White:"Bijela","Widget toolbar":"Traka sa spravicama",Yellow:"Žuta"}),e.getPluralForm=function(a){return a%10==1&&a%100!=11?0:a%10>=2&&a%10<=4&&(a%100<10||a%100>=20)?1:2}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/hu.js b/core/assets/vendor/ckeditor5/translations/hu.js
new file mode 100644
index 000000000000..bb550b93a502
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/hu.js
@@ -0,0 +1 @@
+!function(i){const t=i.hu=i.hu||{};t.dictionary=Object.assign(t.dictionary||{},{"Align center":"Középre igazítás","Align left":"Balra igazítás","Align right":"Jobbra igazítás",Justify:"Sorkizárt","Text alignment":"Szöveg igazítása","Text alignment toolbar":"Szöveg igazítás eszköztár"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(t){const i=t.hu=t.hu||{};i.dictionary=Object.assign(i.dictionary||{},{Bold:"Félkövér",Code:"Forráskód",Italic:"Dőlt",Strikethrough:"Áthúzott",Subscript:"Alsó index",Superscript:"Felső index",Underline:"Aláhúzott"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.hu=i.hu||{};n.dictionary=Object.assign(n.dictionary||{},{"Block quote":"Idézet"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const a=e.hu=e.hu||{};a.dictionary=Object.assign(a.dictionary||{},{"Choose heading":"Stílus megadása",Heading:"Stílusok","Heading 1":"Címsor 1","Heading 2":"Címsor 2","Heading 3":"Címsor 3","Heading 4":"Címsor 4","Heading 5":"Címsor 5","Heading 6":"Címsor 6",Paragraph:"Bekezdés","Type or paste your content here.":"Írja be, vagy illessze be a tartalmat.","Type your title":"Adja meg a címet"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.hu=n.hu||{};i.dictionary=Object.assign(i.dictionary||{},{"Horizontal line":"Vízszintes elválasztóvonal"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e.hu=e.hu||{};t.dictionary=Object.assign(t.dictionary||{},{"Break text":"Sortörés","Centered image":"Középre igazított kép","Change image text alternative":"Helyettesítő szöveg módosítása","Enter image caption":"Képaláírás megadása","Full size image":"Teljes méretű kép","Image resize list":"Kép átméretezési lista","Image toolbar":"Kép eszköztár","image widget":"képmodul","In line":"Soron belül",Insert:"Beszúrás","Insert image":"Kép beszúrása","Insert image via URL":"Kép beszúrása URL alapján","Left aligned image":"Balra igazított kép",Original:"Eredeti","Resize image":"Kép átméretezése","Resize image to %0":"Kép méretezése %0","Resize image to the original size":"Kép méretezése az eredeti méretre","Right aligned image":"Jobbra igazított kép","Side image":"Oldalsó kép","Text alternative":"Helyettesítő szöveg",Update:"Módosítás","Update image URL":"Kép URL módosítása","Upload failed":"A feltöltés nem sikerült","Wrap text":"Körbefuttatás"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const e=n.hu=n.hu||{};e.dictionary=Object.assign(e.dictionary||{},{"Decrease indent":"Behúzás csökkentése","Increase indent":"Behúzás növelése"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(a){const e=a.hu=a.hu||{};e.dictionary=Object.assign(e.dictionary||{},{"Choose language":"Nyelv választása",Language:"Nyelv","Remove language":"Nyelv eltávolítása"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.hu=n.hu||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"Letölthető","Edit link":"Link szerkesztése",Link:"Link","Link image":"Hivatkozás","Link URL":"URL link","Open in a new tab":"Megnyitás új lapon","Open link in new tab":"Link megnyitása új ablakban","This link has no URL":"A link nem tartalmaz URL-t",Unlink:"Link eltávolítása"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e.hu=e.hu||{};t.dictionary=Object.assign(t.dictionary||{},{"Bulleted List":"Pontozott lista","Bulleted list styles toolbar":"",Circle:"Kör",Decimal:"Szám","Decimal with leading zero":"Nullával kezdődő szám",Disc:"Korong","Lower-latin":"Kisbetűs latin szám","Lower–roman":"Kisbetűs római szám","Numbered List":"Számozott lista","Numbered list styles toolbar":"",Square:"Négyzet","To-do List":"Tennivaló lista","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"Nagybetűs latin szám","Upper-roman":"Nagybetűs római szám"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(o){const i=o.hu=o.hu||{};i.dictionary=Object.assign(i.dictionary||{},{"Remove Format":"Formázás eltávolítása"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.hu=i.hu||{};n.dictionary=Object.assign(n.dictionary||{},{Source:"Forrás"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.hu=e.hu||{};l.dictionary=Object.assign(l.dictionary||{},{"Align cell text to the bottom":"Szöveg igazítása a cellában alulra","Align cell text to the center":"Szöveg igazítása a cellában középre","Align cell text to the left":"Szöveg igazítása a cellában balra","Align cell text to the middle":"Szöveg igazítása a cellában középre","Align cell text to the right":"Szöveg igazítása a cellában jobbra","Align cell text to the top":"Szöveg igazítása a cellában felülre","Align table to the left":"Tábla igazítása balra","Align table to the right":"Tábla igazítása jobbra",Alignment:"Igazítás",Background:"Háttér",Border:"Keret","Cell properties":"Cella tulajdonságok","Center table":"Tábla igazítása középre",Color:"Szín","Color picker":"Szín választása",Column:"Oszlop",Dashed:"Szaggatott","Delete column":"Oszlop törlése","Delete row":"Sor törlése",Dimensions:"Méretek",Dotted:"Pontozott",Double:"Dupla","Enter table caption":"Táblázat feliratának megadása",Groove:"Árok","Header column":"Oszlop fejléc","Header row":"Sor fejléc",Height:"Magasság","Horizontal text alignment toolbar":"Vízszintes szövegigazítási eszköztár","Insert column left":"Oszlop beszúrása balra","Insert column right":"Oszlop beszúrása jobbra","Insert row above":"Sor beszúrása fölé","Insert row below":"Sor beszúrása alá","Insert table":"Táblázat beszúrása",Inset:"Mélyített","Justify cell text":"Szöveg igazítása a cellában sorkizártra","Merge cell down":"Cellák egyesítése lefelé","Merge cell left":"Cellák egyesítése balra","Merge cell right":"Cellák egyesítése jobbra","Merge cell up":"Cellák egyesítése felfelé","Merge cells":"Cellaegyesítés",None:"Nincs",Outset:"Kiemelkedő",Padding:"Térköz",Ridge:"Gerinc",Row:"Sor","Select column":"Oszlop kijelölése","Select row":"Sor kijelölése",Solid:"Tömör","Split cell horizontally":"Cella felosztása vízszintesen","Split cell vertically":"Cella felosztása függőlegesen",Style:"Stílus","Table alignment toolbar":"Táblázatigazítási eszköztár","Table cell text alignment":"Szöveg igazítása a cellában","Table properties":"Táblázat tulajdonságai","Table toolbar":"Táblázat eszköztár",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':'A szín érványtelen. Próbáld így "#FF0000" vagy "rgb(255,0,0)" vagy "red".','The value is invalid. Try "10px" or "2em" or simply "2".':'Az érték érvénytelen. Próbáld így "10px" vagy "2em" vagy csak egyszerűen "2".',"Toggle caption off":"Felirat kikapcsolása","Toggle caption on":"Felirat bekapcsolása","Vertical text alignment toolbar":"Függőleges szövegigazítási eszköztár",Width:"Szélesség"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.hu=i.hu||{};n.dictionary=Object.assign(n.dictionary||{},{"HTML object":"HTML objektum"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(t){const a=t.hu=t.hu||{};a.dictionary=Object.assign(a.dictionary||{},{"Almost equal to":"",Angle:"","Approximately equal to":"","Asterisk operator":"","Austral sign":"","back with leftwards arrow above":"","Bitcoin sign":"Bitcoin jel","Cedi sign":"","Cent sign":"Cent jel","Character categories":"","Colon sign":"Kettőspont","Contains as member":"","Copyright sign":"Copyright jele","Cruzeiro sign":"","Currency sign":"Pénznem jel","Degree sign":"","Division sign":"","Dollar sign":"Dollár jel","Dong sign":"","Double dagger":"","Double exclamation mark":"","Double low-9 quotation mark":"","Double question mark":"","downwards arrow to bar":"","downwards dashed arrow":"szaggatott nyíl lefelé","downwards double arrow":"dupla nyíl lefelé","Drachma sign":"","Element of":"","Em dash":"","Empty set":"","En dash":"","end with leftwards arrow above":"","Euro sign":"Euró jel","Euro-currency sign":"Euró pénznem jel","Exclamation question mark":"","For all":"","Fraction slash":"","French franc sign":"Francia frank jel","German penny sign":"","Greater-than or equal to":"","Greater-than sign":"","Guarani sign":"","Horizontal ellipsis":"","Hryvnia sign":"","Identical to":"","Indian rupee sign":"",Infinity:"",Integral:"",Intersection:"","Inverted exclamation mark":"","Inverted question mark":"Fordított kérdőjel","Kip sign":"","Latin capital letter a with breve":"","Latin capital letter a with macron":"","Latin capital letter a with ogonek":"","Latin capital letter c with acute":"","Latin capital letter c with caron":"","Latin capital letter c with circumflex":"","Latin capital letter c with dot above":"","Latin capital letter d with caron":"","Latin capital letter d with stroke":"","Latin capital letter e with breve":"","Latin capital letter e with caron":"","Latin capital letter e with dot above":"","Latin capital letter e with macron":"","Latin capital letter e with ogonek":"","Latin capital letter eng":"","Latin capital letter g with breve":"","Latin capital letter g with cedilla":"","Latin capital letter g with circumflex":"","Latin capital letter g with dot above":"","Latin capital letter h with circumflex":"","Latin capital letter h with stroke":"","Latin capital letter i with breve":"","Latin capital letter i with dot above":"","Latin capital letter i with macron":"","Latin capital letter i with ogonek":"","Latin capital letter i with tilde":"","Latin capital letter j with circumflex":"","Latin capital letter k with cedilla":"","Latin capital letter l with acute":"","Latin capital letter l with caron":"","Latin capital letter l with cedilla":"","Latin capital letter l with middle dot":"","Latin capital letter l with stroke":"","Latin capital letter n with acute":"","Latin capital letter n with caron":"","Latin capital letter n with cedilla":"","Latin capital letter o with breve":"","Latin capital letter o with double acute":"","Latin capital letter o with macron":"","Latin capital letter r with acute":"","Latin capital letter r with caron":"","Latin capital letter r with cedilla":"","Latin capital letter s with acute":"","Latin capital letter s with caron":"","Latin capital letter s with cedilla":"","Latin capital letter s with circumflex":"","Latin capital letter t with caron":"","Latin capital letter t with cedilla":"","Latin capital letter t with stroke":"","Latin capital letter u with breve":"","Latin capital letter u with double acute":"","Latin capital letter u with macron":"","Latin capital letter u with ogonek":"","Latin capital letter u with ring above":"","Latin capital letter u with tilde":"","Latin capital letter w with circumflex":"","Latin capital letter y with circumflex":"","Latin capital letter y with diaeresis":"","Latin capital letter z with acute":"","Latin capital letter z with caron":"","Latin capital letter z with dot above":"","Latin capital ligature ij":"","Latin capital ligature oe":"","Latin small letter a with breve":"","Latin small letter a with macron":"","Latin small letter a with ogonek":"","Latin small letter c with acute":"","Latin small letter c with caron":"","Latin small letter c with circumflex":"","Latin small letter c with dot above":"","Latin small letter d with caron":"","Latin small letter d with stroke":"","Latin small letter dotless i":"","Latin small letter e with breve":"","Latin small letter e with caron":"","Latin small letter e with dot above":"","Latin small letter e with macron":"","Latin small letter e with ogonek":"","Latin small letter eng":"","Latin small letter f with hook":"","Latin small letter g with breve":"","Latin small letter g with cedilla":"","Latin small letter g with circumflex":"","Latin small letter g with dot above":"","Latin small letter h with circumflex":"","Latin small letter h with stroke":"","Latin small letter i with breve":"","Latin small letter i with macron":"","Latin small letter i with ogonek":"","Latin small letter i with tilde":"","Latin small letter j with circumflex":"","Latin small letter k with cedilla":"","Latin small letter kra":"","Latin small letter l with acute":"","Latin small letter l with caron":"","Latin small letter l with cedilla":"","Latin small letter l with middle dot":"","Latin small letter l with stroke":"","Latin small letter long s":"","Latin small letter n preceded by apostrophe":"","Latin small letter n with acute":"","Latin small letter n with caron":"","Latin small letter n with cedilla":"","Latin small letter o with breve":"","Latin small letter o with double acute":"","Latin small letter o with macron":"","Latin small letter r with acute":"","Latin small letter r with caron":"","Latin small letter r with cedilla":"","Latin small letter s with acute":"","Latin small letter s with caron":"","Latin small letter s with cedilla":"","Latin small letter s with circumflex":"","Latin small letter t with caron":"","Latin small letter t with cedilla":"","Latin small letter t with stroke":"","Latin small letter u with breve":"","Latin small letter u with double acute":"","Latin small letter u with macron":"","Latin small letter u with ogonek":"","Latin small letter u with ring above":"","Latin small letter u with tilde":"","Latin small letter w with circumflex":"","Latin small letter y with circumflex":"","Latin small letter z with acute":"","Latin small letter z with caron":"","Latin small letter z with dot above":"","Latin small ligature ij":"","Latin small ligature oe":"","Left double quotation mark":"","Left single quotation mark":"","Left-pointing double angle quotation mark":"","leftwards arrow to bar":"","leftwards dashed arrow":"szaggatott nyíl balra","leftwards double arrow":"dupla nyíl balra","Less-than or equal to":"","Less-than sign":"","Lira sign":"Líra jel","Livre tournois sign":"","Logical and":"","Logical or":"",Macron:"","Manat sign":"","Mill sign":"","Minus sign":"","Multiplication sign":"","N-ary product":"","N-ary summation":"",Nabla:"","Naira sign":"","New sheqel sign":"","Nordic mark sign":"","Not an element of":"","Not equal to":"","Not sign":"","on with exclamation mark with left right arrow above":"",Overline:"","Paragraph sign":"","Partial differential":"","Per mille sign":"","Per ten thousand sign":"","Peseta sign":"","Peso sign":"","Plus-minus sign":"","Pound sign":"Font jel","Proportional to":"","Question exclamation mark":"","Registered sign":"","Reversed paragraph sign":"","Right double quotation mark":"","Right single quotation mark":"","Right-pointing double angle quotation mark":"","rightwards arrow to bar":"","rightwards dashed arrow":"szaggatott nyíl jobbra","rightwards double arrow":"dupla nyíl jobbra","Ruble sign":"","Rupee sign":"","Section sign":"","Single left-pointing angle quotation mark":"","Single low-9 quotation mark":"","Single right-pointing angle quotation mark":"","soon with rightwards arrow above":"","Special characters":"Speciális karakterek","Spesmilo sign":"","Square root":"","Tenge sign":"","There exists":"","Tilde operator":"","top with upwards arrow above":"","Trade mark sign":"","Tugrik sign":"","Turkish lira sign":"","Two dot leader":"",Union:"","up down arrow with base":"","upwards arrow to bar":"","upwards dashed arrow":"szaggatott nyíl felfelé","upwards double arrow":"dupla nyíl felfelé","Vulgar fraction one half":"","Vulgar fraction one quarter":"","Vulgar fraction three quarters":"","Won sign":"","Yen sign":"Yen jel"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e.hu=e.hu||{};t.dictionary=Object.assign(t.dictionary||{},{"%0 of %1":"%0 / %1",Aquamarine:"Kékeszöld",Black:"Fekete",Blue:"Kék",Cancel:"Mégsem","Dim grey":"Halvány szürke","Dropdown toolbar":"Lenyíló eszköztár","Edit block":"Blokk szerkesztése","Editor toolbar":"Szerkesztő eszköztár",Green:"Zöld",Grey:"Szürke","Insert paragraph after block":"Bekezdés beszúrása utána","Insert paragraph before block":"Bekezdés beszúrása elé","Light blue":"Világoskék","Light green":"Világoszöld","Light grey":"Világosszürke",Next:"Következő",Orange:"Narancs",Previous:"Előző",Purple:"Lila",Red:"Piros",Redo:"Újra","Remove color":"Szín eltávolítása","Restore default":"Alapértelmezés visszaállítása","Rich Text Editor":"Bővített szövegszerkesztő","Rich Text Editor, %0":"Bővített szövegszerkesztő, %0",Save:"Mentés","Select all":"Mindet kijelöl","Show more items":"További elemek",Turquoise:"Türkiz",Undo:"Visszavonás","Upload in progress":"A feltöltés folyamatban",White:"Fehér","Widget toolbar":"Widget eszköztár",Yellow:"Sárga"}),t.getPluralForm=function(e){return 1!=e}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/id.js b/core/assets/vendor/ckeditor5/translations/id.js
new file mode 100644
index 000000000000..4a06298dfd26
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/id.js
@@ -0,0 +1 @@
+!function(a){const t=a.id=a.id||{};t.dictionary=Object.assign(t.dictionary||{},{"Align center":"Rata tengah","Align left":"Rata kiri","Align right":"Rata kanan",Justify:"Rata kanan-kiri","Text alignment":"Perataan teks","Text alignment toolbar":"Alat perataan teks"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const r=i.id=i.id||{};r.dictionary=Object.assign(r.dictionary||{},{Bold:"Tebal",Code:"Kode",Italic:"Miring",Strikethrough:"Coret",Subscript:"Subskrip",Superscript:"Superskrip",Underline:"Garis bawah"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.id=i.id||{};n.dictionary=Object.assign(n.dictionary||{},{"Block quote":"Kutipan"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(a){const i=a.id=a.id||{};i.dictionary=Object.assign(i.dictionary||{},{"Choose heading":"Pilih tajuk",Heading:"Tajuk","Heading 1":"Tajuk 1","Heading 2":"Tajuk 2","Heading 3":"Tajuk 3","Heading 4":"Tajuk 4","Heading 5":"Tajuk 5","Heading 6":"Tajuk 6",Paragraph:"Paragraf","Type or paste your content here.":"Ketik atau tempel konten Anda di sini.","Type your title":"Ketik judul Anda"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.id=i.id||{};n.dictionary=Object.assign(n.dictionary||{},{"Horizontal line":"Garis horizontal"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(a){const e=a.id=a.id||{};e.dictionary=Object.assign(e.dictionary||{},{"Break text":"","Centered image":"Gambar rata tengah","Change image text alternative":"Ganti alternatif teks gambar","Enter image caption":"Tambahkan deskripsi gambar","Full size image":"Gambar ukuran penuh","Image resize list":"Daftar ukuran gambar","Image toolbar":"Alat gambar","image widget":"widget gambar","In line":"",Insert:"Sisipkan","Insert image":"Sisipkan gambar","Insert image via URL":"Sisipkan gambar melalui URL","Left aligned image":"Gambar rata kiri",Original:"Asli","Resize image":"Ubah ukuran gambar","Resize image to %0":"Ubah ukuran gambar ke %0","Resize image to the original size":"Ubah ukuran gambar ke ukuran asli","Right aligned image":"Gambar rata kanan","Side image":"Gambar sisi","Text alternative":"Alternatif teks",Update:"Perbarui","Update image URL":"Perbarui URL gambar","Upload failed":"Gagal mengunggah","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.id=n.id||{};i.dictionary=Object.assign(i.dictionary||{},{"Decrease indent":"Kurangi indentasi","Increase indent":"Tambah indentasi"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(a){const i=a.id=a.id||{};i.dictionary=Object.assign(i.dictionary||{},{"Choose language":"Pilih bahasa",Language:"Bahasa","Remove language":"Singkirkan bahasa"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const a=n.id=n.id||{};a.dictionary=Object.assign(a.dictionary||{},{Downloadable:"Dapat diunduh","Edit link":"Sunting tautan",Link:"Tautan","Link image":"","Link URL":"URL tautan","Open in a new tab":"Buka di tab baru","Open link in new tab":"Buka tautan di tab baru","This link has no URL":"Tautan ini tidak memiliki URL",Unlink:"Hapus tautan"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.id=e.id||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"Daftar Tak Berangka","Bulleted list styles toolbar":"Bilah alat gaya daftar bullet",Circle:"Lingkaran",Decimal:"Desimal","Decimal with leading zero":"Desimal dengan awalan nol",Disc:"Disk","Lower-latin":"","Lower–roman":"","Numbered List":"Daftar Berangka","Numbered list styles toolbar":"Bilah alat gaya daftar angka",Square:"Kotak","To-do List":"Daftar untuk-dikerjakan","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const o=i.id=i.id||{};o.dictionary=Object.assign(o.dictionary||{},{"Remove Format":"Hapus Format"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.id=e.id||{};l.dictionary=Object.assign(l.dictionary||{},{"Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align table to the left":"","Align table to the right":"",Alignment:"",Background:"Latar belakang",Border:"Garis batas","Cell properties":"Properti sel","Center table":"",Color:"Warna","Color picker":"",Column:"Kolom",Dashed:"","Delete column":"Hapus kolom","Delete row":"Hapus baris",Dimensions:"Dimensi",Dotted:"",Double:"","Enter table caption":"",Groove:"","Header column":"Kolom tajuk","Header row":"Baris tajuk",Height:"Tinggi","Horizontal text alignment toolbar":"","Insert column left":"Sisipkan kolom ke kiri","Insert column right":"Sisipkan kolom ke kanan","Insert row above":"Sisipkan baris ke atas","Insert row below":"Sisipkan baris ke bawah","Insert table":"Sisipkan tabel",Inset:"","Justify cell text":"","Merge cell down":"Gabungkan sel ke bawah","Merge cell left":"Gabungkan sel ke kiri","Merge cell right":"Gabungkan sel ke kanan","Merge cell up":"Gabungkan sel ke atas","Merge cells":"Gabungkan sel",None:"",Outset:"",Padding:"",Ridge:"",Row:"Baris","Select column":"Seleksi kolom","Select row":"Seleksi baris",Solid:"","Split cell horizontally":"Bagikan sel secara horizontal","Split cell vertically":"Bagikan sel secara vertikal",Style:"Gaya","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"Properti tabel","Table toolbar":"Alat tabel",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':"",'The value is invalid. Try "10px" or "2em" or simply "2".':"","Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"",Width:"Lebar"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(a){const e=a.id=a.id||{};e.dictionary=Object.assign(e.dictionary||{},{"%0 of %1":"%0 dari %1",Aquamarine:"Biru laut",Black:"Hitam",Blue:"Biru",Cancel:"Batal","Dim grey":"Kelabu gelap","Dropdown toolbar":"Alat dropdown","Edit block":"Sunting blok","Editor toolbar":"Alat editor",Green:"Hijau",Grey:"Kelabu","Insert paragraph after block":"","Insert paragraph before block":"","Light blue":"Biru terang","Light green":"Hijau terang","Light grey":"Kelabu terang",Next:"Berikutnya",Orange:"Jingga",Previous:"Sebelumnya",Purple:"Ungu",Red:"Merah",Redo:"Lakukan lagi","Remove color":"Hapus warna","Restore default":"","Rich Text Editor":"Editor Teks Kaya","Rich Text Editor, %0":"Editor Teks Kaya, %0",Save:"Simpan","Show more items":"",Turquoise:"Turkish",Undo:"Batal","Upload in progress":"Sedang mengunggah",White:"Putih","Widget toolbar":"Alat widget",Yellow:"Kuning"}),e.getPluralForm=function(a){return 0}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/it.js b/core/assets/vendor/ckeditor5/translations/it.js
new file mode 100644
index 000000000000..0109c4aa6edc
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/it.js
@@ -0,0 +1 @@
+!function(i){const n=i.it=i.it||{};n.dictionary=Object.assign(n.dictionary||{},{"Align center":"Allinea al centro","Align left":"Allinea a sinistra","Align right":"Allinea a destra",Justify:"Giustifica","Text alignment":"Allineamento del testo","Text alignment toolbar":"Barra degli strumenti dell'allineamento"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const t=i.it=i.it||{};t.dictionary=Object.assign(t.dictionary||{},{Bold:"Grassetto",Code:"Codice",Italic:"Corsivo",Strikethrough:"Barrato",Subscript:"Pedice",Superscript:"Apice",Underline:"Sottolineato"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const o=i.it=i.it||{};o.dictionary=Object.assign(o.dictionary||{},{"Block quote":"Blocco citazione"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const n=e.it=e.it||{};n.dictionary=Object.assign(n.dictionary||{},{"Choose heading":"Seleziona intestazione",Heading:"Intestazione","Heading 1":"Intestazione 1","Heading 2":"Intestazione 2","Heading 3":"Intestazione 3","Heading 4":"Intestazione 4","Heading 5":"Intestazione 5","Heading 6":"Intestazione 6",Paragraph:"Paragrafo","Type or paste your content here.":"Inserire o incollare qui il proprio contenuto.","Type your title":"Inserire il proprio titolo"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.it=i.it||{};n.dictionary=Object.assign(n.dictionary||{},{"Horizontal line":"Linea orizzontale"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const e=i.it=i.it||{};e.dictionary=Object.assign(e.dictionary||{},{"Break text":"Interrompi testo","Centered image":"Immagine centrata","Change image text alternative":"Cambia testo alternativo dell'immagine","Enter image caption":"inserire didascalia dell'immagine","Full size image":"Immagine a dimensione intera","Image resize list":"Elenco ridimensionamenti immagine","Image toolbar":"Barra degli strumenti dell'immagine","image widget":"Widget immagine","In line":"In linea",Insert:"Inserisci","Insert image":"Inserisci immagine","Insert image via URL":"Inserisci immagine tramite URL","Left aligned image":"Immagine allineata a sinistra",Original:"Originale","Resize image":"Ridimensiona immagine","Resize image to %0":"Ridimensiona immagine a %0","Resize image to the original size":"Ridimensiona immagine alle dimensioni originali","Right aligned image":"Immagine allineata a destra","Side image":"Immagine laterale","Text alternative":"Testo alternativo",Update:"Aggiorna","Update image URL":"Aggiorna URL immagine","Upload failed":"Caricamento fallito","Wrap text":"Testo a capo"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.it=i.it||{};n.dictionary=Object.assign(n.dictionary||{},{"Decrease indent":"Riduci rientro","Increase indent":"Aumenta rientro"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.it=i.it||{};n.dictionary=Object.assign(n.dictionary||{},{"Choose language":"Seleziona lingua",Language:"Lingua","Remove language":"Rimuovi lingua"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.it=n.it||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"Scaricabile","Edit link":"Modifica collegamento",Link:"Collegamento","Link image":"Collega immagine","Link URL":"URL del collegamento","Open in a new tab":"Apri in una nuova scheda","Open link in new tab":"Apri collegamento in nuova scheda","This link has no URL":"Questo collegamento non ha un URL",Unlink:"Elimina collegamento"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.it=e.it||{};i.dictionary=Object.assign(i.dictionary||{},{"Bulleted List":"Elenco puntato","Bulleted list styles toolbar":"Barra degli strumenti con gli stili degli elenchi puntati",Circle:"Cerchio",Decimal:"Numero","Decimal with leading zero":"Numero con zero anteposto",Disc:"Disco","Lower-latin":"Lettera minuscola","Lower–roman":"Numero romano minuscolo","Numbered List":"Elenco numerato","Numbered list styles toolbar":"Barra degli strumenti con gli stili degli elenchi numerati",Square:"Quadrato","To-do List":"Elenco cose da fare","Toggle the circle list style":"Attiva/disattiva lo stile degli elenchi con cerchi","Toggle the decimal list style":"Attiva/disattiva lo stile degli elenchi con numeri","Toggle the decimal with leading zero list style":"Attiva/disattiva lo stile degli elenchi con numeri con zero anteposto","Toggle the disc list style":"Attiva/disattiva lo stile degli elenchi con dischi","Toggle the lower–latin list style":"Attiva/disattiva lo stile degli elenchi con lettere minuscole","Toggle the lower–roman list style":"Attiva/disattiva lo stile degli elenchi con numeri romani minuscoli","Toggle the square list style":"Attiva/disattiva lo stile degli elenchi con quadrati","Toggle the upper–latin list style":"Attiva/disattiva lo stile degli elenchi con lettere maiuscole","Toggle the upper–roman list style":"Attiva/disattiva lo stile degli elenchi con numeri romani maiuscoli","Upper-latin":"Lettera maiuscola","Upper-roman":"Numero romano maiuscolo"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const o=i.it=i.it||{};o.dictionary=Object.assign(o.dictionary||{},{"Remove Format":"Rimuovi formato"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.it=i.it||{};n.dictionary=Object.assign(n.dictionary||{},{Source:"Sorgente"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.it=e.it||{};l.dictionary=Object.assign(l.dictionary||{},{"Align cell text to the bottom":"Allinea il testo della cella in basso","Align cell text to the center":"Allinea il testo della cella al centro","Align cell text to the left":"Allinea il testo della cella a sinistra","Align cell text to the middle":"Allinea il testo della cella in mezzo","Align cell text to the right":"Allinea il testo della cella a destra","Align cell text to the top":"Allinea il testo della cella in alto","Align table to the left":"Allinea tabella a sinistra","Align table to the right":"Allinea tabella a destra",Alignment:"Allineamento",Background:"Sfondo",Border:"Bordo","Cell properties":"Proprietà cella","Center table":"Allinea tabella al centro",Color:"Colore","Color picker":"Selezione colore",Column:"Colonna",Dashed:"Tratteggiato","Delete column":"Elimina colonna","Delete row":"Elimina riga",Dimensions:"Dimensioni",Dotted:"Punteggiato",Double:"Doppio","Enter table caption":"Inserire la didascalia della tabella",Groove:"Scanalatura","Header column":"Intestazione colonna","Header row":"Riga d'intestazione",Height:"Altezza","Horizontal text alignment toolbar":"Barra degli strumenti dell'allineamento orizzontale del testo","Insert column left":"Inserisci colonna a sinistra","Insert column right":"Inserisci colonna a destra","Insert row above":"Inserisci riga sopra","Insert row below":"Inserisci riga sotto","Insert table":"Inserisci tabella",Inset:"Incassato","Justify cell text":"Testo della cella giustificato","Merge cell down":"Unisci cella sotto","Merge cell left":"Unisci cella a sinistra","Merge cell right":"Unisci cella a destra","Merge cell up":"Unisci cella sopra","Merge cells":"Unisci celle",None:"Nessuno",Outset:"Rialzato",Padding:"Spaziatura interna",Ridge:"Rilievo",Row:"Riga","Select column":"Seleziona colonna","Select row":"Seleziona riga",Solid:"Solido","Split cell horizontally":"Dividi cella orizzontalmente","Split cell vertically":"Dividi cella verticalmente",Style:"Stile","Table alignment toolbar":"Barra degli strumenti dell'allineamento della tabella","Table cell text alignment":"Allineamento del testo nella cella della tabella","Table properties":"Proprietà tabella","Table toolbar":"Barra degli strumenti della tabella",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':'Il colore non è valido. Provare "#FF0000" o "rgb(255,0,0)" o "red".','The value is invalid. Try "10px" or "2em" or simply "2".':'Il valore non è valido. Provare "10px" o "2em" o semplicemente "2".',"Toggle caption off":"Attiva didascalia","Toggle caption on":"Disattiva didascalia","Vertical text alignment toolbar":"Barra degli strumenti dell'allineamento verticale del testo",Width:"Larghezza"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const t=i.it=i.it||{};t.dictionary=Object.assign(t.dictionary||{},{"HTML object":"Oggetto HTML"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(a){const t=a.it=a.it||{};t.dictionary=Object.assign(t.dictionary||{},{"Almost equal to":"Quasi uguale a",Angle:"Angolo","Approximately equal to":"Approssimativamente uguale a","Asterisk operator":"Operatore asterisco","Austral sign":"Simbolo austral","back with leftwards arrow above":"back con sopra freccia verso sinistra","Bitcoin sign":"Simbolo bitcoin","Cedi sign":"Simbolo cedi","Cent sign":"Simbolo centesimo","Character categories":"Categorie di caratteri","Colon sign":"Simbolo colon","Contains as member":"Contiene","Copyright sign":"Simbolo copyright","Cruzeiro sign":"Simbolo cruzeiro","Currency sign":"Simbolo valuta","Degree sign":"Simbolo gradi","Division sign":"Segno di divisione","Dollar sign":"Simbolo dollaro","Dong sign":"Simbolo dong","Double dagger":"Doppio obelisco","Double exclamation mark":"Doppio punto esclamativo","Double low-9 quotation mark":"Doppie virgolette basse","Double question mark":"Doppio punto interrogativo","downwards arrow to bar":"Freccia verso barra in basso","downwards dashed arrow":"Freccia tratteggiata verso il basso","downwards double arrow":"Freccia doppia verso il basso","Drachma sign":"Simbolo dracma","Element of":"Elemento di","Em dash":"Trattino lungo (em)","Empty set":"Insieme vuoto","En dash":"Trattino medio (en)","end with leftwards arrow above":"end con sopra freccia verso sinistra","Euro sign":"Simbolo euro","Euro-currency sign":"Simbolo valuta euro","Exclamation question mark":"Punti esclamativo e interrogativo","For all":"Per ogni","Fraction slash":"Barra di frazione","French franc sign":"Simbolo franco francese","German penny sign":"Simbolo pfennig tedesco","Greater-than or equal to":"Maggiore o uguale a","Greater-than sign":"Simbolo maggiore di","Guarani sign":"Simbolo guaraní","Horizontal ellipsis":"Puntini di sospensione orizzontali","Hryvnia sign":"Simbolo grivnia","Identical to":"Identico a","Indian rupee sign":"Simbolo rupia indiana",Infinity:"Infinito",Integral:"Integrale",Intersection:"Intersezione","Inverted exclamation mark":"Punto esclamativo invertito","Inverted question mark":"Punto interrogativo invertito","Kip sign":"Simbolo kip","Latin capital letter a with breve":"Lettera A latina maiuscola con breve","Latin capital letter a with macron":"Lettera A latina maiuscola con macron","Latin capital letter a with ogonek":"Lettera A latina maiuscola con codetta","Latin capital letter c with acute":"Lettera C latina maiuscola con accento acuto","Latin capital letter c with caron":"Lettera C latina maiuscola con pipa","Latin capital letter c with circumflex":"Lettera C latina maiuscola con accento circonflesso","Latin capital letter c with dot above":"Lettera C latina maiuscola con punto sovrascritto","Latin capital letter d with caron":"Lettera D latina maiuscola con pipa","Latin capital letter d with stroke":"Lettera D latina maiuscola con barra","Latin capital letter e with breve":"Lettera E latina maiuscola con accento breve","Latin capital letter e with caron":"Lettera E latina maiuscola con pipa","Latin capital letter e with dot above":"Lettera E latina maiuscola con punto sovrascritto","Latin capital letter e with macron":"Lettera E latina maiuscola con macron","Latin capital letter e with ogonek":"Lettera E latina maiuscola con codetta","Latin capital letter eng":"Nasale velare maiuscola","Latin capital letter g with breve":"Lettera G latina maiuscola con breve","Latin capital letter g with cedilla":"Lettera G latina maiuscola con cediglia","Latin capital letter g with circumflex":"Lettera G latina maiuscola con accento circonflesso","Latin capital letter g with dot above":"Lettera G latina maiuscola con punto sovrascritto","Latin capital letter h with circumflex":"Lettera H latina maiuscola con accento circonflesso","Latin capital letter h with stroke":"Lettera H latina maiuscola con barra","Latin capital letter i with breve":"Lettera I latina maiuscola con breve","Latin capital letter i with dot above":"Lettera I latina maiuscola con punto sovrascritto","Latin capital letter i with macron":"Lettera I latina maiuscola con macron","Latin capital letter i with ogonek":"Lettera I latina maiuscola con codetta","Latin capital letter i with tilde":"Lettera I latina maiuscola con tilde","Latin capital letter j with circumflex":"Lettera J latina maiuscola con accento circonflesso","Latin capital letter k with cedilla":"Lettera K latina maiuscola con cediglia","Latin capital letter l with acute":"Lettera L latina maiuscola con accento acuto","Latin capital letter l with caron":"Lettera L latina maiuscola con pipa","Latin capital letter l with cedilla":"Lettera L latina maiuscola con cediglia","Latin capital letter l with middle dot":"Lettera L latina maiuscola con punto in mezzo","Latin capital letter l with stroke":"Lettera L latina maiuscola con barra","Latin capital letter n with acute":"Lettera N latina maiuscola con accento acuto","Latin capital letter n with caron":"Lettera N latina maiuscola con pipa","Latin capital letter n with cedilla":"Lettera N latina maiuscola con cediglia","Latin capital letter o with breve":"Lettera O latina maiuscola con breve","Latin capital letter o with double acute":"Lettera O latina maiuscola con doppio accento acuto","Latin capital letter o with macron":"Lettera O latina maiuscola con macron","Latin capital letter r with acute":"Lettera R latina maiuscola con accento acuto","Latin capital letter r with caron":"Lettera R latina maiuscola con pipa","Latin capital letter r with cedilla":"Lettera R latina maiuscola con cediglia","Latin capital letter s with acute":"Lettera S latina maiuscola con accento acuto","Latin capital letter s with caron":"Lettera S latina maiuscola con pipa","Latin capital letter s with cedilla":"Lettera S latina maiuscola con cediglia","Latin capital letter s with circumflex":"Lettera S latina maiuscola con accento circonflesso","Latin capital letter t with caron":"Lettera T latina maiuscola con pipa","Latin capital letter t with cedilla":"Lettera T latina maiuscola con cediglia","Latin capital letter t with stroke":"Lettera T latina maiuscola con barra","Latin capital letter u with breve":"Lettera U latina maiuscola con breve","Latin capital letter u with double acute":"Lettera U latina maiuscola con doppio accento acuto","Latin capital letter u with macron":"Lettera U latina maiuscola con macron","Latin capital letter u with ogonek":"Lettera U latina maiuscola con codetta","Latin capital letter u with ring above":"Lettera U latina maiuscola con anello in alto","Latin capital letter u with tilde":"Lettera U latina maiuscola con tilde","Latin capital letter w with circumflex":"Lettera W latina maiuscola con accento circonflesso","Latin capital letter y with circumflex":"Lettera Y latina maiuscola con accento circonflesso","Latin capital letter y with diaeresis":"Lettera Y latina maiuscola con dieresi","Latin capital letter z with acute":"Lettera Z latina maiuscola con accento acuto","Latin capital letter z with caron":"Lettera Z latina maiuscola con pipa","Latin capital letter z with dot above":"Lettera Z latina maiuscola con punto sovrascritto","Latin capital ligature ij":"Legatura IJ latina maiuscola","Latin capital ligature oe":"Legatura OE latina maiuscola","Latin small letter a with breve":"Lettera A latina minuscola con breve","Latin small letter a with macron":"Lettera A latina minuscola con macron","Latin small letter a with ogonek":"Lettera A latina minuscola con codetta","Latin small letter c with acute":"Lettera C latina minuscola con accento acuto","Latin small letter c with caron":"Lettera C latina minuscola con pipa","Latin small letter c with circumflex":"Lettera C latina minuscola con accento circonflesso","Latin small letter c with dot above":"Lettera C latina minuscola con punto sovrascritto","Latin small letter d with caron":"Lettera D latina minuscola con pipa","Latin small letter d with stroke":"Lettera D latina minuscola con barra","Latin small letter dotless i":"Lettera I latina minuscola senza punto","Latin small letter e with breve":"Lettera E latina minuscola con accento breve","Latin small letter e with caron":"Lettera E latina minuscola con pipa","Latin small letter e with dot above":"Lettera E latina minuscola con punto sovrascritto","Latin small letter e with macron":"Lettera E latina minuscola con macron","Latin small letter e with ogonek":"Lettera E latina minuscola con codetta","Latin small letter eng":"Nasale velare minuscola","Latin small letter f with hook":"Lettera f latina minuscola con gancio","Latin small letter g with breve":"Lettera G latina minuscola con breve","Latin small letter g with cedilla":"Lettera G latina minuscola con cediglia","Latin small letter g with circumflex":"Lettera G latina minuscola con accento circonflesso","Latin small letter g with dot above":"Lettera G latina minuscola con punto sovrascritto","Latin small letter h with circumflex":"Lettera H latina minuscola con accento circonflesso","Latin small letter h with stroke":"Lettera H latina minuscola con barra","Latin small letter i with breve":"Lettera I latina minuscola con breve","Latin small letter i with macron":"Lettera I latina minuscola con macron","Latin small letter i with ogonek":"Lettera I latina minuscola con codetta","Latin small letter i with tilde":"Lettera I latina minuscola con tilde","Latin small letter j with circumflex":"Lettera J latina minuscola con accento circonflesso","Latin small letter k with cedilla":"Lettera K latina minuscola con cediglia","Latin small letter kra":"Lettera Kra latina minuscola","Latin small letter l with acute":"Lettera L latina minuscola con accento acuto","Latin small letter l with caron":"Lettera L latina minuscola con pipa","Latin small letter l with cedilla":"Lettera L latina minuscola con cediglia","Latin small letter l with middle dot":"Lettera L latina minuscola con punto in mezzo","Latin small letter l with stroke":"Lettera L latina minuscola con barra","Latin small letter long s":"Lettera S latina lunga minuscola","Latin small letter n preceded by apostrophe":"Lettera N latina minuscola preceduta da apostrofo","Latin small letter n with acute":"Lettera N latina minuscola con accento acuto","Latin small letter n with caron":"Lettera N latina minuscola con pipa","Latin small letter n with cedilla":"Lettera N latina minuscola con cediglia","Latin small letter o with breve":"Lettera O latina minuscola con breve","Latin small letter o with double acute":"Lettera O latina minuscola con doppio accento acuto","Latin small letter o with macron":"Lettera O latina minuscola con macron","Latin small letter r with acute":"Lettera R latina minuscola con accento acuto","Latin small letter r with caron":"Lettera R latina minuscola con pipa","Latin small letter r with cedilla":"Lettera R latina minuscola con cediglia","Latin small letter s with acute":"Lettera S latina minuscola con accento acuto","Latin small letter s with caron":"Lettera S latina minuscola con pipa","Latin small letter s with cedilla":"Lettera S latina minuscola con cediglia","Latin small letter s with circumflex":"Lettera S latina minuscola con accento circonflesso","Latin small letter t with caron":"Lettera T latina minuscola con pipa","Latin small letter t with cedilla":"Lettera T latina minuscola con cediglia","Latin small letter t with stroke":"Lettera T latina minuscola con barra","Latin small letter u with breve":"Lettera U latina minuscola con breve","Latin small letter u with double acute":"Lettera U latina minuscola con doppio accento acuto","Latin small letter u with macron":"Lettera U latina minuscola con macron","Latin small letter u with ogonek":"Lettera U latina minuscola con codetta","Latin small letter u with ring above":"Lettera U latina minuscola con cerchio in alto","Latin small letter u with tilde":"Lettera U latina minuscola con tilde","Latin small letter w with circumflex":"Lettera W latina minuscola con accento circonflesso","Latin small letter y with circumflex":"Lettera Y latina minuscola con accento circonflesso","Latin small letter z with acute":"Lettera Z latina minuscola con accento acuto","Latin small letter z with caron":"Lettera Z latina minuscola con pipa","Latin small letter z with dot above":"Lettera Z latina minuscola con punto sovrascritto","Latin small ligature ij":"Legatura IJ latina minuscola","Latin small ligature oe":"Legatura OE latina minuscola","Left double quotation mark":"Doppie virgolette a sinistra","Left single quotation mark":"Virgoletta a sinistra","Left-pointing double angle quotation mark":"Virgolette doppie angolari a sinistra","leftwards arrow to bar":"Freccia verso barra a sinistra","leftwards dashed arrow":"Freccia tratteggiata verso sinistra","leftwards double arrow":"Freccia doppia verso sinistra","Less-than or equal to":"Minore o uguale a","Less-than sign":"Simbolo minore di","Lira sign":"Simbolo lira","Livre tournois sign":"Simbolo livre tournois","Logical and":"E logico","Logical or":"O logico",Macron:"Macron","Manat sign":"Simbolo manat","Mill sign":"Simbolo millesimo","Minus sign":"Segno di sottrazione","Multiplication sign":"Segno di moltiplicazione","N-ary product":"Prodotto ennesimo","N-ary summation":"Sommatoria",Nabla:"Nabla","Naira sign":"Simbolo naira","New sheqel sign":"Simbolo nuovo shekel","Nordic mark sign":"Simbolo marco nordico","Not an element of":"Non parte di","Not equal to":"Non uguale a","Not sign":"Simbolo Not","on with exclamation mark with left right arrow above":"on! con sopra freccia verso sinistra",Overline:"Linea alta","Paragraph sign":"Simbolo paragrafo","Partial differential":"Derivata parziale","Per mille sign":"Simbolo per mille","Per ten thousand sign":"Simbolo per diecimila","Peseta sign":"Simbolo peseta","Peso sign":"Simbolo peso","Plus-minus sign":"Segno più o meno","Pound sign":"Simbolo sterlina","Proportional to":"Proporzionale a","Question exclamation mark":"Punti interrogativo ed esclamativo","Registered sign":"Simbolo marchio registrato","Reversed paragraph sign":"Simbolo paragrafo invertito","Right double quotation mark":"Doppie virgolette a destra","Right single quotation mark":"Virgoletta a destra","Right-pointing double angle quotation mark":"Virgolette doppie angolari a destra","rightwards arrow to bar":"Freccia verso barra a destra","rightwards dashed arrow":"Freccia tratteggiata verso destra","rightwards double arrow":"Freccia doppia verso destra","Ruble sign":"Simbolo rublo","Rupee sign":"Simbolo rupia","Section sign":"Simbolo sezione","Single left-pointing angle quotation mark":"Virgoletta angolare a sinistra","Single low-9 quotation mark":"Virgoletta bassa","Single right-pointing angle quotation mark":"Virgoletta angolare a destra","soon with rightwards arrow above":"soon con sopra freccia verso destra","Special characters":"Caratteri speciali","Spesmilo sign":"Simbolo spesmilo","Square root":"Radice quadrata","Tenge sign":"Simbolo tenge","There exists":"Esiste","Tilde operator":"Operatore tilde","top with upwards arrow above":"top con sopra freccia verso l'alto","Trade mark sign":"Simbolo trademark","Tugrik sign":"Simbolo tugrik","Turkish lira sign":"Simbolo lira turca","Two dot leader":"Due punti iniziali",Union:"Unione","up down arrow with base":"Doppia freccia verticale con base","upwards arrow to bar":"Freccia verso barra in alto","upwards dashed arrow":"Freccia tratteggiata verso l'alto","upwards double arrow":"Freccia doppia verso l'alto","Vulgar fraction one half":"Frazione semplice un mezzo","Vulgar fraction one quarter":"Frazione semplice un quarto","Vulgar fraction three quarters":"Frazione semplice tre quarti","Won sign":"Simbolo won","Yen sign":"Simbolo yen"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(o){const r=o.it=o.it||{};r.dictionary=Object.assign(r.dictionary||{},{"%0 of %1":"%0 di %1",Aquamarine:"Aquamarina",Black:"Nero",Blue:"Blu",Cancel:"Annulla","Dim grey":"Grigio tenue","Dropdown toolbar":"Barra degli strumenti del menu a discesa","Edit block":"Modifica blocco","Editor toolbar":"Barra degli strumenti dell'editor",Green:"Verde",Grey:"Grigio","Insert paragraph after block":"Inserisci paragrafo dopo blocco","Insert paragraph before block":"Inserisci paragrafo prima di blocco","Light blue":"Azzurro","Light green":"Verde chiaro","Light grey":"Grigio chiaro",Next:"Avanti",Orange:"Arancio",Previous:"Indietro",Purple:"Porpora",Red:"Rosso",Redo:"Ripristina","Remove color":"Rimuovi colore","Restore default":"Ripristina predefinito","Rich Text Editor":"Editor di testo formattato","Rich Text Editor, %0":"Editor di testo formattato, %0",Save:"Salva","Select all":"Seleziona tutto","Show more items":"Mostra più elementi",Turquoise:"Turchese",Undo:"Annulla","Upload in progress":"Caricamento in corso",White:"Bianco","Widget toolbar":"Barra degli strumenti del widget",Yellow:"Giallo"}),r.getPluralForm=function(o){return 1!=o}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/ja.js b/core/assets/vendor/ckeditor5/translations/ja.js
new file mode 100644
index 000000000000..1ff28067cc5b
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/ja.js
@@ -0,0 +1 @@
+!function(n){const i=n.ja=n.ja||{};i.dictionary=Object.assign(i.dictionary||{},{"Align center":"中央揃え","Align left":"左揃え","Align right":"右揃え",Justify:"両端揃え","Text alignment":"文字揃え","Text alignment toolbar":"テキストの整列"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.ja=i.ja||{};n.dictionary=Object.assign(n.dictionary||{},{Bold:"ボールド",Code:"コード",Italic:"イタリック",Strikethrough:"取り消し線",Subscript:"下付き文字",Superscript:"上付き文字",Underline:"アンダーライン"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.ja=i.ja||{};n.dictionary=Object.assign(n.dictionary||{},{"Block quote":"ブロッククオート(引用)"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const a=n.ja=n.ja||{};a.dictionary=Object.assign(a.dictionary||{},{"Choose heading":"見出しを選択",Heading:"見出し","Heading 1":"見出し1","Heading 2":"見出し2","Heading 3":"見出し3 ","Heading 4":"見出し4","Heading 5":"見出し5","Heading 6":"見出し6",Paragraph:"段落","Type or paste your content here.":"コンテンツをここに入力または貼り付けしてください。","Type your title":"タイトルを入力"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.ja=i.ja||{};n.dictionary=Object.assign(n.dictionary||{},{"Horizontal line":"区切り"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.ja=e.ja||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"","Centered image":"中央寄せ画像","Change image text alternative":"画像の代替テキストを変更","Enter image caption":"画像の注釈を入力","Full size image":"フルサイズ画像","Image resize list":"画像サイズリスト","Image toolbar":"画像","image widget":"画像ウィジェット","In line":"",Insert:"挿入","Insert image":"画像挿入","Insert image via URL":"画像URLを挿入","Left aligned image":"左寄せ画像",Original:"オリジナル","Resize image":"画像サイズ","Resize image to %0":"画像サイズを%0に変更","Resize image to the original size":"画像サイズを元のサイズに変更","Right aligned image":"右寄せ画像","Side image":"サイドイメージ","Text alternative":"代替テキスト",Update:"更新","Update image URL":"画像URLを更新","Upload failed":"アップロード失敗","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.ja=n.ja||{};i.dictionary=Object.assign(i.dictionary||{},{"Decrease indent":"インデントの削除","Increase indent":"インデントの追加"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.ja=n.ja||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"ダウンロード可能","Edit link":"リンクを編集",Link:"リンク","Link image":"リンク画像","Link URL":"リンクURL","Open in a new tab":"新しいタブで開く","Open link in new tab":"新しいタブでリンクを開く","This link has no URL":"リンクにURLが設定されていません",Unlink:"リンク解除"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.ja=e.ja||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"箇条書きリスト","Bulleted list styles toolbar":"",Circle:"",Decimal:"","Decimal with leading zero":"",Disc:"","Lower-latin":"","Lower–roman":"","Numbered List":"番号付きリスト","Numbered list styles toolbar":"",Square:"","To-do List":"","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.ja=i.ja||{};n.dictionary=Object.assign(n.dictionary||{},{"Remove Format":"フォーマットの削除"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e.ja=e.ja||{};t.dictionary=Object.assign(t.dictionary||{},{"Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align table to the left":"","Align table to the right":"",Alignment:"",Background:"",Border:"","Cell properties":"","Center table":"",Color:"","Color picker":"",Column:"列",Dashed:"","Delete column":"列を削除","Delete row":"行を削除",Dimensions:"",Dotted:"",Double:"","Enter table caption":"",Groove:"","Header column":"見出し列","Header row":"見出し行",Height:"","Horizontal text alignment toolbar":"","Insert column left":"","Insert column right":"","Insert row above":"上に行を挿入","Insert row below":"下に行を挿入","Insert table":"表の挿入",Inset:"","Justify cell text":"","Merge cell down":"下のセルと結合","Merge cell left":"左のセルと結合","Merge cell right":"右のセルと結合","Merge cell up":"上のセルと結合","Merge cells":"セルを結合",None:"",Outset:"",Padding:"",Ridge:"",Row:"行","Select column":"","Select row":"",Solid:"","Split cell horizontally":"縦にセルを分離","Split cell vertically":"横にセルを分離",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':"",'The value is invalid. Try "10px" or "2em" or simply "2".':"","Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"",Width:""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(t){const a=t.ja=t.ja||{};a.dictionary=Object.assign(a.dictionary||{},{"Almost equal to":"",Angle:"","Approximately equal to":"","Asterisk operator":"","Austral sign":"","back with leftwards arrow above":"","Bitcoin sign":"","Cedi sign":"","Cent sign":"","Character categories":"","Colon sign":"","Contains as member":"","Copyright sign":"","Cruzeiro sign":"","Currency sign":"","Degree sign":"","Division sign":"","Dollar sign":"","Dong sign":"","Double dagger":"","Double exclamation mark":"","Double low-9 quotation mark":"","Double question mark":"","downwards arrow to bar":"","downwards dashed arrow":"","downwards double arrow":"","Drachma sign":"","Element of":"","Em dash":"","Empty set":"","En dash":"","end with leftwards arrow above":"","Euro sign":"","Euro-currency sign":"","Exclamation question mark":"","For all":"","Fraction slash":"","French franc sign":"","German penny sign":"","Greater-than or equal to":"","Greater-than sign":"","Guarani sign":"","Horizontal ellipsis":"","Hryvnia sign":"","Identical to":"","Indian rupee sign":"",Infinity:"",Integral:"",Intersection:"","Inverted exclamation mark":"","Inverted question mark":"","Kip sign":"","Latin capital letter a with breve":"","Latin capital letter a with macron":"","Latin capital letter a with ogonek":"","Latin capital letter c with acute":"","Latin capital letter c with caron":"","Latin capital letter c with circumflex":"","Latin capital letter c with dot above":"","Latin capital letter d with caron":"","Latin capital letter d with stroke":"","Latin capital letter e with breve":"","Latin capital letter e with caron":"","Latin capital letter e with dot above":"","Latin capital letter e with macron":"","Latin capital letter e with ogonek":"","Latin capital letter eng":"","Latin capital letter g with breve":"","Latin capital letter g with cedilla":"","Latin capital letter g with circumflex":"","Latin capital letter g with dot above":"","Latin capital letter h with circumflex":"","Latin capital letter h with stroke":"","Latin capital letter i with breve":"","Latin capital letter i with dot above":"","Latin capital letter i with macron":"","Latin capital letter i with ogonek":"","Latin capital letter i with tilde":"","Latin capital letter j with circumflex":"","Latin capital letter k with cedilla":"","Latin capital letter l with acute":"","Latin capital letter l with caron":"","Latin capital letter l with cedilla":"","Latin capital letter l with middle dot":"","Latin capital letter l with stroke":"","Latin capital letter n with acute":"","Latin capital letter n with caron":"","Latin capital letter n with cedilla":"","Latin capital letter o with breve":"","Latin capital letter o with double acute":"","Latin capital letter o with macron":"","Latin capital letter r with acute":"","Latin capital letter r with caron":"","Latin capital letter r with cedilla":"","Latin capital letter s with acute":"","Latin capital letter s with caron":"","Latin capital letter s with cedilla":"","Latin capital letter s with circumflex":"","Latin capital letter t with caron":"","Latin capital letter t with cedilla":"","Latin capital letter t with stroke":"","Latin capital letter u with breve":"","Latin capital letter u with double acute":"","Latin capital letter u with macron":"","Latin capital letter u with ogonek":"","Latin capital letter u with ring above":"","Latin capital letter u with tilde":"","Latin capital letter w with circumflex":"","Latin capital letter y with circumflex":"","Latin capital letter y with diaeresis":"","Latin capital letter z with acute":"","Latin capital letter z with caron":"","Latin capital letter z with dot above":"","Latin capital ligature ij":"","Latin capital ligature oe":"","Latin small letter a with breve":"","Latin small letter a with macron":"","Latin small letter a with ogonek":"","Latin small letter c with acute":"","Latin small letter c with caron":"","Latin small letter c with circumflex":"","Latin small letter c with dot above":"","Latin small letter d with caron":"","Latin small letter d with stroke":"","Latin small letter dotless i":"","Latin small letter e with breve":"","Latin small letter e with caron":"","Latin small letter e with dot above":"","Latin small letter e with macron":"","Latin small letter e with ogonek":"","Latin small letter eng":"","Latin small letter f with hook":"","Latin small letter g with breve":"","Latin small letter g with cedilla":"","Latin small letter g with circumflex":"","Latin small letter g with dot above":"","Latin small letter h with circumflex":"","Latin small letter h with stroke":"","Latin small letter i with breve":"","Latin small letter i with macron":"","Latin small letter i with ogonek":"","Latin small letter i with tilde":"","Latin small letter j with circumflex":"","Latin small letter k with cedilla":"","Latin small letter kra":"","Latin small letter l with acute":"","Latin small letter l with caron":"","Latin small letter l with cedilla":"","Latin small letter l with middle dot":"","Latin small letter l with stroke":"","Latin small letter long s":"","Latin small letter n preceded by apostrophe":"","Latin small letter n with acute":"","Latin small letter n with caron":"","Latin small letter n with cedilla":"","Latin small letter o with breve":"","Latin small letter o with double acute":"","Latin small letter o with macron":"","Latin small letter r with acute":"","Latin small letter r with caron":"","Latin small letter r with cedilla":"","Latin small letter s with acute":"","Latin small letter s with caron":"","Latin small letter s with cedilla":"","Latin small letter s with circumflex":"","Latin small letter t with caron":"","Latin small letter t with cedilla":"","Latin small letter t with stroke":"","Latin small letter u with breve":"","Latin small letter u with double acute":"","Latin small letter u with macron":"","Latin small letter u with ogonek":"","Latin small letter u with ring above":"","Latin small letter u with tilde":"","Latin small letter w with circumflex":"","Latin small letter y with circumflex":"","Latin small letter z with acute":"","Latin small letter z with caron":"","Latin small letter z with dot above":"","Latin small ligature ij":"","Latin small ligature oe":"","Left double quotation mark":"","Left single quotation mark":"","Left-pointing double angle quotation mark":"","leftwards arrow to bar":"","leftwards dashed arrow":"","leftwards double arrow":"","Less-than or equal to":"","Less-than sign":"","Lira sign":"","Livre tournois sign":"","Logical and":"","Logical or":"",Macron:"","Manat sign":"","Mill sign":"","Minus sign":"","Multiplication sign":"","N-ary product":"","N-ary summation":"",Nabla:"","Naira sign":"","New sheqel sign":"","Nordic mark sign":"","Not an element of":"","Not equal to":"","Not sign":"","on with exclamation mark with left right arrow above":"",Overline:"","Paragraph sign":"","Partial differential":"","Per mille sign":"","Per ten thousand sign":"","Peseta sign":"","Peso sign":"","Plus-minus sign":"","Pound sign":"","Proportional to":"","Question exclamation mark":"","Registered sign":"","Reversed paragraph sign":"","Right double quotation mark":"","Right single quotation mark":"","Right-pointing double angle quotation mark":"","rightwards arrow to bar":"","rightwards dashed arrow":"","rightwards double arrow":"","Ruble sign":"","Rupee sign":"","Section sign":"","Single left-pointing angle quotation mark":"","Single low-9 quotation mark":"","Single right-pointing angle quotation mark":"","soon with rightwards arrow above":"","Special characters":"特殊文字","Spesmilo sign":"","Square root":"","Tenge sign":"","There exists":"","Tilde operator":"","top with upwards arrow above":"","Trade mark sign":"","Tugrik sign":"","Turkish lira sign":"","Two dot leader":"",Union:"","up down arrow with base":"","upwards arrow to bar":"","upwards dashed arrow":"","upwards double arrow":"","Vulgar fraction one half":"","Vulgar fraction one quarter":"","Vulgar fraction three quarters":"","Won sign":"","Yen sign":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const o=e.ja=e.ja||{};o.dictionary=Object.assign(o.dictionary||{},{"%0 of %1":"",Aquamarine:"薄い青緑",Black:"黒",Blue:"青",Cancel:"キャンセル","Dim grey":"暗い灰色","Dropdown toolbar":"","Edit block":"","Editor toolbar":"",Green:"緑",Grey:"灰色","Insert paragraph after block":"ブロックの後にパラグラフを挿入","Insert paragraph before block":"ブロックの前にパラグラフを挿入","Light blue":"明るい青","Light green":"明るい緑","Light grey":"明るい灰色",Next:"",Orange:"オレンジ",Previous:"",Purple:"紫",Red:"赤",Redo:"やり直し","Remove color":"カラーを削除","Restore default":"","Rich Text Editor":"リッチテキストエディター","Rich Text Editor, %0":"リッチテキストエディター, %0",Save:"保存","Select all":"すべて選択","Show more items":"",Turquoise:"水色",Undo:"元に戻す","Upload in progress":"アップロード中",White:"白","Widget toolbar":"ウィジェットツールバー",Yellow:"黄"}),o.getPluralForm=function(e){return 0}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/kk.js b/core/assets/vendor/ckeditor5/translations/kk.js
new file mode 100644
index 000000000000..0bcf7db44bd4
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/kk.js
@@ -0,0 +1 @@
+!function(n){const i=n.kk=n.kk||{};i.dictionary=Object.assign(i.dictionary||{},{"Align center":"Ортадан туралау","Align left":"Солға туралау","Align right":"Оңға туралау",Justify:"","Text alignment":"Мәтінді туралау","Text alignment toolbar":"Мәтінді туралау құралдар тақтасы"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/km.js b/core/assets/vendor/ckeditor5/translations/km.js
new file mode 100644
index 000000000000..5ef6ffe10517
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/km.js
@@ -0,0 +1 @@
+!function(n){const i=n.km=n.km||{};i.dictionary=Object.assign(i.dictionary||{},{"Align center":"តម្រឹម​កណ្ដាល","Align left":"តម្រឹម​ឆ្វេង","Align right":"តម្រឹម​ស្ដាំ",Justify:"តម្រឹម​សងខាង","Text alignment":"ការ​តម្រឹម​អក្សរ","Text alignment toolbar":"របារ​ឧបករណ៍​តម្រឹម​អក្សរ"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.km=i.km||{};n.dictionary=Object.assign(n.dictionary||{},{Bold:"ដិត",Code:"កូដ",Italic:"ទ្រេត",Strikethrough:"ឆូតកណ្ដាល",Subscript:"អក្សរ​តូចក្រោម",Superscript:"អក្សរ​តូចលើ",Underline:"គូស​បន្ទាត់​ក្រោម"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.km=i.km||{};n.dictionary=Object.assign(n.dictionary||{},{"Block quote":"ប្លុក​ពាក្យ​សម្រង់"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const e=n.km=n.km||{};e.dictionary=Object.assign(e.dictionary||{},{"Choose heading":"ជ្រើសរើស​ក្បាលអត្ថបទ",Heading:"ក្បាលអត្ថបទ","Heading 1":"ក្បាលអត្ថបទ 1","Heading 2":"ក្បាលអត្ថបទ 2","Heading 3":"ក្បាលអត្ថបទ 3","Heading 4":"","Heading 5":"","Heading 6":"",Paragraph:"កថាខណ្ឌ","Type or paste your content here.":"","Type your title":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.km=e.km||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"","Centered image":"","Change image text alternative":"","Enter image caption":"បញ្ចូល​ពាក្យ​ពណ៌នា​រូបភាព","Full size image":"រូបភាព​ពេញ​ទំហំ","Image resize list":"","Image toolbar":"","image widget":"វិដជិត​រូបភាព","In line":"",Insert:"","Insert image":"បញ្ចូល​រូបភាព","Insert image via URL":"","Left aligned image":"",Original:"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Right aligned image":"","Side image":"រូបភាព​នៅ​ខាង","Text alternative":"",Update:"","Update image URL":"","Upload failed":"អាប់ឡូត​មិនបាន","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.km=n.km||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"","Edit link":"",Link:"តំណ","Link image":"","Link URL":"URL តំណ","Open in a new tab":"","Open link in new tab":"","This link has no URL":"",Unlink:"ផ្ដាច់​តំណ"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.km=e.km||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"បញ្ជី​ជា​ចំណុច","Bulleted list styles toolbar":"",Circle:"",Decimal:"","Decimal with leading zero":"",Disc:"","Lower-latin":"","Lower–roman":"","Numbered List":"បញ្ជី​ជា​លេខ","Numbered list styles toolbar":"",Square:"","To-do List":"","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const o=e.km=e.km||{};o.dictionary=Object.assign(o.dictionary||{},{"%0 of %1":"",Aquamarine:"",Black:"",Blue:"",Cancel:"បោះបង់","Dim grey":"","Dropdown toolbar":"","Edit block":"","Editor toolbar":"",Green:"",Grey:"","Light blue":"","Light green":"","Light grey":"",Next:"",Orange:"",Previous:"",Purple:"",Red:"",Redo:"ធ្វើ​វិញ","Remove color":"","Restore default":"","Rich Text Editor":"កម្មវិធី​កែសម្រួល​អត្ថបទ​សម្បូរបែប","Rich Text Editor, %0":"កម្មវិធី​កែសម្រួល​អត្ថបទ​សម្បូរបែប, %0",Save:"រក្សាទុ","Show more items":"",Turquoise:"",Undo:"លែង​ធ្វើ​វិញ",White:"",Yellow:""}),o.getPluralForm=function(e){return 0}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/kn.js b/core/assets/vendor/ckeditor5/translations/kn.js
new file mode 100644
index 000000000000..4af863edc30f
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/kn.js
@@ -0,0 +1 @@
+!function(i){const n=i.kn=i.kn||{};n.dictionary=Object.assign(n.dictionary||{},{Bold:"‍‍ದಪ್ಪ",Code:"",Italic:"‍ಇಟಾಲಿಕ್",Strikethrough:"",Subscript:"",Superscript:"",Underline:""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.kn=n.kn||{};i.dictionary=Object.assign(i.dictionary||{},{"Block quote":"‍‍‍‍ಗುರುತಿಸಲಾದ ‍‍ಉಲ್ಲೇಖ"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const e=n.kn=n.kn||{};e.dictionary=Object.assign(e.dictionary||{},{"Choose heading":"ಶೀರ್ಷಿಕೆ ಆಯ್ಕೆಮಾಡು",Heading:"ಶೀರ್ಷಿಕೆ","Heading 1":"ಶೀರ್ಷಿಕೆ 1","Heading 2":"ಶೀರ್ಷಿಕೆ 2","Heading 3":"ಶೀರ್ಷಿಕೆ 3","Heading 4":"","Heading 5":"","Heading 6":"",Paragraph:"ಪ್ಯಾರಾಗ್ರಾಫ್","Type or paste your content here.":"","Type your title":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.kn=e.kn||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"","Centered image":"","Change image text alternative":"‍ಚಿತ್ರದ ಬದಲಿ ಪಠ್ಯ ಬದಲಾಯಿಸು","Enter image caption":"‍ಚಿತ್ರದ ಶೀರ್ಷಿಕೆ ಸೇರಿಸು","Full size image":"‍ಪೂರ್ಣ ‍‍ಅಳತೆಯ ಚಿತ್ರ","Image resize list":"","Image toolbar":"","image widget":"‍ಚಿತ್ರ ವಿಜೆಟ್","In line":"",Insert:"","Insert image":"","Insert image via URL":"","Left aligned image":"",Original:"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Right aligned image":"","Side image":"‍ಪಕ್ಕದ ಚಿತ್ರ","Text alternative":"‍ಪಠ್ಯದ ಬದಲಿ",Update:"","Update image URL":"","Upload failed":"","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.kn=n.kn||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"","Edit link":"",Link:"‍ಕೊಂಡಿ","Link image":"","Link URL":"‍ಕೊಂಡಿ ಸಂಪರ್ಕಿಸು","Open in a new tab":"","Open link in new tab":"","This link has no URL":"",Unlink:"‍ಕೊಂಡಿ ತೆಗೆ"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.kn=e.kn||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"‍‍ಬುಲೆಟ್ ಪಟ್ಟಿ","Bulleted list styles toolbar":"",Circle:"",Decimal:"","Decimal with leading zero":"",Disc:"","Lower-latin":"","Lower–roman":"","Numbered List":"‍ಸಂಖ್ಯೆಯ ಪಟ್ಟಿ‍","Numbered list styles toolbar":"",Square:"","To-do List":"","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const o=e.kn=e.kn||{};o.dictionary=Object.assign(o.dictionary||{},{"%0 of %1":"",Aquamarine:"",Black:"",Blue:"",Cancel:"ರದ್ದುಮಾಡು","Dim grey":"","Dropdown toolbar":"","Edit block":"","Editor toolbar":"",Green:"",Grey:"","Light blue":"","Light green":"","Light grey":"",Next:"",Orange:"",Previous:"",Purple:"",Red:"",Redo:"‍ಮತ್ತೆ ಮಾಡು","Remove color":"","Restore default":"","Rich Text Editor":"‍ಸಮೃದ್ಧ ಪಠ್ಯ ಸಂಪಾದಕ‍‍","Rich Text Editor, %0":"‍ಸಮೃದ್ಧ ಪಠ್ಯ ಸಂಪಾದಕ‍, %0",Save:"ಉಳಿಸು","Show more items":"",Turquoise:"",Undo:"‍‍ರದ್ದು",White:"",Yellow:""}),o.getPluralForm=function(e){return e>1}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/ko.js b/core/assets/vendor/ckeditor5/translations/ko.js
new file mode 100644
index 000000000000..dab245730572
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/ko.js
@@ -0,0 +1 @@
+!function(n){const i=n.ko=n.ko||{};i.dictionary=Object.assign(i.dictionary||{},{"Align center":"가운데 정렬","Align left":"왼쪽 정렬","Align right":"오른쪽 정렬",Justify:"양쪽 정렬","Text alignment":"텍스트 정렬","Text alignment toolbar":"텍스트 정렬 툴바"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const o=i.ko=i.ko||{};o.dictionary=Object.assign(o.dictionary||{},{Bold:"굵게",Code:"코드",Italic:"기울임꼴",Strikethrough:"취소선",Subscript:"아래 첨자",Superscript:"위 첨자",Underline:"밑줄"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(o){const i=o.ko=o.ko||{};i.dictionary=Object.assign(i.dictionary||{},{"Block quote":"인용 단락"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const e=n.ko=n.ko||{};e.dictionary=Object.assign(e.dictionary||{},{"Choose heading":"제목 선택",Heading:"제목","Heading 1":"제목 1","Heading 2":"제목 2","Heading 3":"제목 3","Heading 4":"제목 4","Heading 5":"제목 5","Heading 6":"제목 6",Paragraph:"문단","Type or paste your content here.":"여기에 내용을 입력하거나 붙여넣기 하세요.","Type your title":"제목을 입력해주세요"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.ko=i.ko||{};n.dictionary=Object.assign(n.dictionary||{},{"Horizontal line":"수평선"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.ko=e.ko||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"","Centered image":"가운데 정렬","Change image text alternative":"대체 문구 변경","Enter image caption":"사진 설명을 입력하세요","Full size image":"꽉 찬 크기","Image resize list":"사진 크기 목록","Image toolbar":"사진 툴바","image widget":"사진 위젯","In line":"",Insert:"","Insert image":"사진 삽입","Insert image via URL":"","Left aligned image":"왼쪽 정렬",Original:"원본","Resize image":"사진 크기 조절","Resize image to %0":"사진의 크기를 %0으로 조절","Resize image to the original size":"사진을 원래 크기로 돌려놓기","Right aligned image":"오른쪽 정렬","Side image":"본문 옆에 배치","Text alternative":"대체 문구",Update:"","Update image URL":"","Upload failed":"업로드 실패","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.ko=n.ko||{};i.dictionary=Object.assign(i.dictionary||{},{"Decrease indent":"들여쓰기 줄이기","Increase indent":"들여쓰기 늘리기"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.ko=n.ko||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"다운로드 가능","Edit link":"링크 편집",Link:"링크","Link image":"사진 링크","Link URL":"링크 주소","Open in a new tab":"새 탭에서 열기","Open link in new tab":"새 탭에서 링크 열기","This link has no URL":"이 링크에는 URL이 없습니다.",Unlink:"링크 삭제"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.ko=e.ko||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"불릿 목록","Bulleted list styles toolbar":"",Circle:"",Decimal:"","Decimal with leading zero":"",Disc:"","Lower-latin":"","Lower–roman":"","Numbered List":"번호 목록","Numbered list styles toolbar":"",Square:"","To-do List":"확인 목록","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(o){const i=o.ko=o.ko||{};i.dictionary=Object.assign(i.dictionary||{},{"Remove Format":"서식 지우기"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e.ko=e.ko||{};t.dictionary=Object.assign(t.dictionary||{},{"Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align table to the left":"","Align table to the right":"",Alignment:"",Background:"",Border:"","Cell properties":"","Center table":"",Color:"","Color picker":"",Column:"",Dashed:"","Delete column":"","Delete row":"",Dimensions:"",Dotted:"",Double:"","Enter table caption":"",Groove:"","Header column":"","Header row":"",Height:"","Horizontal text alignment toolbar":"","Insert column left":"","Insert column right":"","Insert row above":"","Insert row below":"","Insert table":"테이블 삽입",Inset:"","Justify cell text":"","Merge cell down":"","Merge cell left":"","Merge cell right":"","Merge cell up":"","Merge cells":"",None:"",Outset:"",Padding:"",Ridge:"",Row:"","Select column":"","Select row":"",Solid:"","Split cell horizontally":"","Split cell vertically":"",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':"",'The value is invalid. Try "10px" or "2em" or simply "2".':"","Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"",Width:""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(t){const a=t.ko=t.ko||{};a.dictionary=Object.assign(a.dictionary||{},{"Almost equal to":"",Angle:"","Approximately equal to":"","Asterisk operator":"","Austral sign":"","back with leftwards arrow above":"","Bitcoin sign":"","Cedi sign":"","Cent sign":"","Character categories":"","Colon sign":"","Contains as member":"","Copyright sign":"","Cruzeiro sign":"","Currency sign":"","Degree sign":"","Division sign":"","Dollar sign":"","Dong sign":"","Double dagger":"","Double exclamation mark":"","Double low-9 quotation mark":"","Double question mark":"","downwards arrow to bar":"","downwards dashed arrow":"","downwards double arrow":"","Drachma sign":"","Element of":"","Em dash":"","Empty set":"","En dash":"","end with leftwards arrow above":"","Euro sign":"","Euro-currency sign":"","Exclamation question mark":"","For all":"","Fraction slash":"","French franc sign":"","German penny sign":"","Greater-than or equal to":"","Greater-than sign":"","Guarani sign":"","Horizontal ellipsis":"","Hryvnia sign":"","Identical to":"","Indian rupee sign":"",Infinity:"",Integral:"",Intersection:"","Inverted exclamation mark":"","Inverted question mark":"","Kip sign":"","Latin capital letter a with breve":"","Latin capital letter a with macron":"","Latin capital letter a with ogonek":"","Latin capital letter c with acute":"","Latin capital letter c with caron":"","Latin capital letter c with circumflex":"","Latin capital letter c with dot above":"","Latin capital letter d with caron":"","Latin capital letter d with stroke":"","Latin capital letter e with breve":"","Latin capital letter e with caron":"","Latin capital letter e with dot above":"","Latin capital letter e with macron":"","Latin capital letter e with ogonek":"","Latin capital letter eng":"","Latin capital letter g with breve":"","Latin capital letter g with cedilla":"","Latin capital letter g with circumflex":"","Latin capital letter g with dot above":"","Latin capital letter h with circumflex":"","Latin capital letter h with stroke":"","Latin capital letter i with breve":"","Latin capital letter i with dot above":"","Latin capital letter i with macron":"","Latin capital letter i with ogonek":"","Latin capital letter i with tilde":"","Latin capital letter j with circumflex":"","Latin capital letter k with cedilla":"","Latin capital letter l with acute":"","Latin capital letter l with caron":"","Latin capital letter l with cedilla":"","Latin capital letter l with middle dot":"","Latin capital letter l with stroke":"","Latin capital letter n with acute":"","Latin capital letter n with caron":"","Latin capital letter n with cedilla":"","Latin capital letter o with breve":"","Latin capital letter o with double acute":"","Latin capital letter o with macron":"","Latin capital letter r with acute":"","Latin capital letter r with caron":"","Latin capital letter r with cedilla":"","Latin capital letter s with acute":"","Latin capital letter s with caron":"","Latin capital letter s with cedilla":"","Latin capital letter s with circumflex":"","Latin capital letter t with caron":"","Latin capital letter t with cedilla":"","Latin capital letter t with stroke":"","Latin capital letter u with breve":"","Latin capital letter u with double acute":"","Latin capital letter u with macron":"","Latin capital letter u with ogonek":"","Latin capital letter u with ring above":"","Latin capital letter u with tilde":"","Latin capital letter w with circumflex":"","Latin capital letter y with circumflex":"","Latin capital letter y with diaeresis":"","Latin capital letter z with acute":"","Latin capital letter z with caron":"","Latin capital letter z with dot above":"","Latin capital ligature ij":"","Latin capital ligature oe":"","Latin small letter a with breve":"","Latin small letter a with macron":"","Latin small letter a with ogonek":"","Latin small letter c with acute":"","Latin small letter c with caron":"","Latin small letter c with circumflex":"","Latin small letter c with dot above":"","Latin small letter d with caron":"","Latin small letter d with stroke":"","Latin small letter dotless i":"","Latin small letter e with breve":"","Latin small letter e with caron":"","Latin small letter e with dot above":"","Latin small letter e with macron":"","Latin small letter e with ogonek":"","Latin small letter eng":"","Latin small letter f with hook":"","Latin small letter g with breve":"","Latin small letter g with cedilla":"","Latin small letter g with circumflex":"","Latin small letter g with dot above":"","Latin small letter h with circumflex":"","Latin small letter h with stroke":"","Latin small letter i with breve":"","Latin small letter i with macron":"","Latin small letter i with ogonek":"","Latin small letter i with tilde":"","Latin small letter j with circumflex":"","Latin small letter k with cedilla":"","Latin small letter kra":"","Latin small letter l with acute":"","Latin small letter l with caron":"","Latin small letter l with cedilla":"","Latin small letter l with middle dot":"","Latin small letter l with stroke":"","Latin small letter long s":"","Latin small letter n preceded by apostrophe":"","Latin small letter n with acute":"","Latin small letter n with caron":"","Latin small letter n with cedilla":"","Latin small letter o with breve":"","Latin small letter o with double acute":"","Latin small letter o with macron":"","Latin small letter r with acute":"","Latin small letter r with caron":"","Latin small letter r with cedilla":"","Latin small letter s with acute":"","Latin small letter s with caron":"","Latin small letter s with cedilla":"","Latin small letter s with circumflex":"","Latin small letter t with caron":"","Latin small letter t with cedilla":"","Latin small letter t with stroke":"","Latin small letter u with breve":"","Latin small letter u with double acute":"","Latin small letter u with macron":"","Latin small letter u with ogonek":"","Latin small letter u with ring above":"","Latin small letter u with tilde":"","Latin small letter w with circumflex":"","Latin small letter y with circumflex":"","Latin small letter z with acute":"","Latin small letter z with caron":"","Latin small letter z with dot above":"","Latin small ligature ij":"","Latin small ligature oe":"","Left double quotation mark":"","Left single quotation mark":"","Left-pointing double angle quotation mark":"","leftwards arrow to bar":"","leftwards dashed arrow":"","leftwards double arrow":"","Less-than or equal to":"","Less-than sign":"","Lira sign":"","Livre tournois sign":"","Logical and":"","Logical or":"",Macron:"","Manat sign":"","Mill sign":"","Minus sign":"","Multiplication sign":"","N-ary product":"","N-ary summation":"",Nabla:"","Naira sign":"","New sheqel sign":"","Nordic mark sign":"","Not an element of":"","Not equal to":"","Not sign":"","on with exclamation mark with left right arrow above":"",Overline:"","Paragraph sign":"","Partial differential":"","Per mille sign":"","Per ten thousand sign":"","Peseta sign":"","Peso sign":"","Plus-minus sign":"","Pound sign":"","Proportional to":"","Question exclamation mark":"","Registered sign":"","Reversed paragraph sign":"","Right double quotation mark":"","Right single quotation mark":"","Right-pointing double angle quotation mark":"","rightwards arrow to bar":"","rightwards dashed arrow":"","rightwards double arrow":"","Ruble sign":"","Rupee sign":"","Section sign":"","Single left-pointing angle quotation mark":"","Single low-9 quotation mark":"","Single right-pointing angle quotation mark":"","soon with rightwards arrow above":"","Special characters":"특수 문자","Spesmilo sign":"","Square root":"","Tenge sign":"","There exists":"","Tilde operator":"","top with upwards arrow above":"","Trade mark sign":"","Tugrik sign":"","Turkish lira sign":"","Two dot leader":"",Union:"","up down arrow with base":"","upwards arrow to bar":"","upwards dashed arrow":"","upwards double arrow":"","Vulgar fraction one half":"","Vulgar fraction one quarter":"","Vulgar fraction three quarters":"","Won sign":"","Yen sign":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const o=e.ko=e.ko||{};o.dictionary=Object.assign(o.dictionary||{},{"%0 of %1":"0% / %1",Aquamarine:"연한 청록색",Black:"검은색",Blue:"파랑색",Cancel:"취소","Dim grey":"진한 회색","Dropdown toolbar":"드롭다운 툴바","Edit block":"편집 영역","Editor toolbar":"에디터 툴바",Green:"초록색",Grey:"회색","Insert paragraph after block":"","Insert paragraph before block":"","Light blue":"연한 파랑색","Light green":"밝은 초록색","Light grey":"밝은 회색",Next:"다음",Orange:"주황색",Previous:"이전",Purple:"보라색",Red:"빨간색",Redo:"다시 실행","Remove color":"색깔 제거","Restore default":"","Rich Text Editor":"리치 텍스트 편집기","Rich Text Editor, %0":"리치 텍스트 편집기, %0",Save:"저장","Select all":"전체 선택","Show more items":"더보기",Turquoise:"청록색",Undo:"실행 취소","Upload in progress":"업로드 진행 중",White:"흰색","Widget toolbar":"위젯 툴바",Yellow:"노랑색"}),o.getPluralForm=function(e){return 0}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/ku.js b/core/assets/vendor/ckeditor5/translations/ku.js
new file mode 100644
index 000000000000..1a40202c83e9
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/ku.js
@@ -0,0 +1 @@
+!function(n){const i=n.ku=n.ku||{};i.dictionary=Object.assign(i.dictionary||{},{"Align center":"بەهێڵکردنی ناورەڕاست","Align left":"بەهێڵکردنی چەپ","Align right":"بەهێڵکردنی ڕاست",Justify:"هاوستوونی","Text alignment":"ڕیززکردنی تێکست","Text alignment toolbar":"تووڵامرازی ڕیززکردنی تێکست"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.ku=i.ku||{};n.dictionary=Object.assign(n.dictionary||{},{Bold:"قەڵەو",Code:"کۆد",Italic:"لار",Strikethrough:"هێڵ بەسەرداهاتوو",Subscript:"ژێرنووس",Superscript:"سەرنووس",Underline:"ژێرهێڵ"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.ku=i.ku||{};n.dictionary=Object.assign(n.dictionary||{},{"Block quote":"وتەی وەرگیراو"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const e=n.ku=n.ku||{};e.dictionary=Object.assign(e.dictionary||{},{"Choose heading":"سەرنووسە هەڵبژێرە",Heading:"سەرنووسە","Heading 1":"سەرنووسەی 1","Heading 2":"سەرنووسەی 2","Heading 3":"سەرنووسەی 3","Heading 4":"سەرنووسەی 4","Heading 5":"سەرنووسەی 5","Heading 6":"سەرنووسەی 6",Paragraph:"پەراگراف","Type or paste your content here.":"بنووسە یاخوود ناوەڕۆکی کۆپیکراو لیڕە بلکێنە","Type your title":"نوسینی ناونیشان"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.ku=i.ku||{};n.dictionary=Object.assign(n.dictionary||{},{"Horizontal line":"هێڵی ئاسۆیی"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.ku=e.ku||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"","Centered image":"ناوەڕاستکراوی وێنە","Change image text alternative":"گۆڕینی جێگروەی تێکیسی وێنە","Enter image caption":"سەردێڕی وێنە دابنێ","Full size image":"پڕ بەقەبارەی وێنە","Image resize list":"","Image toolbar":"تووڵامرازی وێنە","image widget":"وێدجیتی وێنە","In line":"",Insert:"","Insert image":"وێنە دابنێ","Insert image via URL":"","Left aligned image":"ڕیزکردنی وێنە بۆ لای چەپ",Original:"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Right aligned image":"ڕیزکردنی وێنە بۆ لای ڕاست","Side image":"لای وێنە","Text alternative":"جێگرەوەی تێکست",Update:"","Update image URL":"","Upload failed":"بارکردنەکە سەرنەکەووت","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.ku=n.ku||{};i.dictionary=Object.assign(i.dictionary||{},{"Decrease indent":"کەمکردنەوەی بۆشایی","Increase indent":"زیادکردنی بۆشایی"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.ku=n.ku||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"Downloadable","Edit link":"دەستکاری بەستەر",Link:"بەستەر","Link image":"","Link URL":"ناونیشانی بەستەر","Open in a new tab":"کردنەوەی لە پەنجەرەیەکی نوێ","Open link in new tab":"کردنەوەی بەستەرەکە لە پەڕەیەکی نوێ","This link has no URL":"ئەم بەستەرە ناونیشانی نیە",Unlink:"لابردنی بەستەر"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.ku=e.ku||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"لیستەی خاڵەیی","Bulleted list styles toolbar":"",Circle:"",Decimal:"","Decimal with leading zero":"",Disc:"","Lower-latin":"","Lower–roman":"","Numbered List":"لیستەی ژمارەیی","Numbered list styles toolbar":"",Square:"","To-do List":"لیستەی کردن","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.ku=i.ku||{};n.dictionary=Object.assign(n.dictionary||{},{"Remove Format":"لابردنی شێواز"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e.ku=e.ku||{};t.dictionary=Object.assign(t.dictionary||{},{"Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align table to the left":"","Align table to the right":"",Alignment:"",Background:"",Border:"","Cell properties":"","Center table":"",Color:"","Color picker":"",Column:"ستوون",Dashed:"","Delete column":"سڕینەوەی ستوون","Delete row":"سڕینەوەی ڕیز",Dimensions:"",Dotted:"",Double:"","Enter table caption":"",Groove:"","Header column":"ستوونی دەسپێک","Header row":"ڕیزی دەسپێک",Height:"","Horizontal text alignment toolbar":"","Insert column left":"دانانی ستوون لە چەپ","Insert column right":"دانانی ستوون لە ڕاست","Insert row above":"دانانی ڕیز لە سەرەوە","Insert row below":"دانانی ڕیز لە ژێرەوە","Insert table":"خشتە دابنێ",Inset:"","Justify cell text":"","Merge cell down":"تێکەڵکردنی خانەکان بەرەو ژێرەوە","Merge cell left":"تێکەڵکردنی خانەکان بەرەو چەپ","Merge cell right":"تێکەڵکردنی خانەکان بەرەو ڕاست","Merge cell up":"تێکەڵکردنی خانەکان بەرەو سەر","Merge cells":"تێکەڵکردنی خانەکان",None:"",Outset:"",Padding:"",Ridge:"",Row:"ڕیز","Select column":"","Select row":"",Solid:"","Split cell horizontally":"بەشکردنی خانەکان بە ئاسۆیی","Split cell vertically":"بەشکردنی خانەکان بە ئەستوونی",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"تووڵامرازی خشتە",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':"",'The value is invalid. Try "10px" or "2em" or simply "2".':"","Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"",Width:""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const o=e.ku=e.ku||{};o.dictionary=Object.assign(o.dictionary||{},{"%0 of %1":"%0 لە %1",Aquamarine:"شینی دەریایی",Black:"ڕەش",Blue:"شین",Cancel:"هەڵوەشاندنەوە","Dim grey":"ڕەساسی تاریک","Dropdown toolbar":"تووڵامرازی لیستەیی","Edit block":"دەستکاری بلۆک","Editor toolbar":"تووڵامرازی دەسکاریکەر",Green:"سەوز",Grey:"ڕەساسی","Insert paragraph after block":"","Insert paragraph before block":"","Light blue":"شینی ڕووناک","Light green":"سەوزی ڕووناک","Light grey":"ڕەساسی ڕووناک",Next:"دواتر",Orange:"پرتەقاڵی",Previous:"پێشتر",Purple:"مۆر",Red:"سور",Redo:"هەلگەڕاندنەوە","Remove color":"لابردنی ڕەنگ","Restore default":"","Rich Text Editor":"سەرنوسەری دەقی بەپیت","Rich Text Editor, %0":"سەرنوسەری دەقی بەپیت, %0",Save:"پاشکەوتکردن","Show more items":"بڕگەی زیاتر نیشانبدە",Turquoise:"شینی ئاسمانی",Undo:"وەک خۆی لێ بکەوە","Upload in progress":"بارکردنەکە لە جێبەجێکردن دایە",White:"سپی","Widget toolbar":"تووڵامرازی ویدجێت",Yellow:"زەرد"}),o.getPluralForm=function(e){return 1!=e}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/lt.js b/core/assets/vendor/ckeditor5/translations/lt.js
new file mode 100644
index 000000000000..4e31868fe8df
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/lt.js
@@ -0,0 +1 @@
+!function(i){const t=i.lt=i.lt||{};t.dictionary=Object.assign(t.dictionary||{},{"Align center":"Centruoti","Align left":"Lygiuoti į kairę","Align right":"Lygiuoti į dešinę",Justify:"Lygiuoti per visą plotį","Text alignment":"Teksto lygiavimas","Text alignment toolbar":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const a=i.lt=i.lt||{};a.dictionary=Object.assign(a.dictionary||{},{Bold:"Paryškintas",Code:"Kodas",Italic:"Kursyvas",Strikethrough:"Perbrauktas",Subscript:"Žemiau",Superscript:"Aukščiau",Underline:"Pabrauktas"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(t){const i=t.lt=t.lt||{};i.dictionary=Object.assign(i.dictionary||{},{"Block quote":"Citata"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(a){const t=a.lt=a.lt||{};t.dictionary=Object.assign(t.dictionary||{},{"Choose heading":"Pasirinkite antraštę",Heading:"Antraštė","Heading 1":"Antraštė 1","Heading 2":"Antraštė 2","Heading 3":"Antraštė 3","Heading 4":"Antraštė 4","Heading 5":"Antraštė 5","Heading 6":"Antraštė 6",Paragraph:"Paragrafas","Type or paste your content here.":"","Type your title":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.lt=e.lt||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"","Centered image":"Vaizdas centre","Change image text alternative":"Pakeisti vaizdo alternatyvųjį tekstą","Enter image caption":"Įveskite vaizdo antraštę","Full size image":"Pilno dydžio vaizdas","Image resize list":"","Image toolbar":"","image widget":"vaizdų valdiklis","In line":"",Insert:"","Insert image":"Įterpti vaizdą","Insert image via URL":"","Left aligned image":"Vaizdas kairėje",Original:"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Right aligned image":"Vaizdas dešinėje","Side image":"Vaizdas šone","Text alternative":"Alternatyvusis tekstas",Update:"","Update image URL":"","Upload failed":"Įkelti nepavyko","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.lt=i.lt||{};n.dictionary=Object.assign(n.dictionary||{},{"Decrease indent":"Sumažinti atitraukimą","Increase indent":"Padidinti atitraukimą"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.lt=n.lt||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"","Edit link":"Keisti nuorodą",Link:"Pridėti nuorodą","Link image":"","Link URL":"Nuorodos URL","Open in a new tab":"","Open link in new tab":"Atidaryti nuorodą naujame skirtuke","This link has no URL":"Ši nuorda neturi URL",Unlink:"Pašalinti nuorodą"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.lt=e.lt||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"Sąrašas","Bulleted list styles toolbar":"",Circle:"",Decimal:"","Decimal with leading zero":"",Disc:"","Lower-latin":"","Lower–roman":"","Numbered List":"Numeruotas rąrašas","Numbered list styles toolbar":"",Square:"","To-do List":"","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const t=i.lt=i.lt||{};t.dictionary=Object.assign(t.dictionary||{},{"Remove Format":"Naikinti formatavimą"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e.lt=e.lt||{};t.dictionary=Object.assign(t.dictionary||{},{"Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align table to the left":"","Align table to the right":"",Alignment:"",Background:"",Border:"","Cell properties":"","Center table":"",Color:"","Color picker":"",Column:"Stulpelis",Dashed:"","Delete column":"Ištrinti stulpelį","Delete row":"Ištrinti eilutę",Dimensions:"",Dotted:"",Double:"","Enter table caption":"",Groove:"","Header column":"Antraštės stulpelis","Header row":"Antraštės eilutė",Height:"","Horizontal text alignment toolbar":"","Insert column left":"Įterpti stulpelį kairėje","Insert column right":"Įterpti stulpelį dešinėje","Insert row above":"Įterpti eilutę aukščiau","Insert row below":"Įterpti eilutę žemiau","Insert table":"Įterpti lentelę",Inset:"","Justify cell text":"","Merge cell down":"Prijungti langelį apačioje","Merge cell left":"Prijungti langelį kairėje","Merge cell right":"Prijungti langelį dešinėje","Merge cell up":"Prijungti langelį viršuje","Merge cells":"Sujungti langelius",None:"",Outset:"",Padding:"",Ridge:"",Row:"Eilutė","Select column":"","Select row":"",Solid:"","Split cell horizontally":"Padalinti langelį horizontaliai","Split cell vertically":"Padalinti langelį vertikaliai",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':"",'The value is invalid. Try "10px" or "2em" or simply "2".':"","Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"",Width:""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const o=i.lt=i.lt||{};o.dictionary=Object.assign(o.dictionary||{},{"%0 of %1":"",Aquamarine:"Aquamarine",Black:"Juoda",Blue:"Mėlyna",Cancel:"Atšaukti","Dim grey":"Pilkšva","Dropdown toolbar":"","Edit block":"Redaguoti bloką","Editor toolbar":"",Green:"Žalia",Grey:"Pilka","Light blue":"Šviesiai mėlyna","Light green":"Šviesiai žalia","Light grey":"Šviesiai pilka",Next:"",Orange:"Oranžinė",Previous:"",Purple:"Violetinė",Red:"Raudona",Redo:"Pirmyn","Remove color":"Pašalinti spalvą","Restore default":"","Rich Text Editor":"Raiškiojo teksto redaktorius","Rich Text Editor, %0":"Raiškiojo teksto redaktorius, %0",Save:"Išsaugoti","Show more items":"",Turquoise:"Turkio",Undo:"Atgal","Upload in progress":"Įkelima",White:"Balta",Yellow:"Geltona"}),o.getPluralForm=function(i){return i%10==1&&(i%100>19||i%100<11)?0:i%10>=2&&i%10<=9&&(i%100>19||i%100<11)?1:i%1!=0?2:3}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/lv.js b/core/assets/vendor/ckeditor5/translations/lv.js
new file mode 100644
index 000000000000..344d7527afe0
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/lv.js
@@ -0,0 +1 @@
+!function(i){const n=i.lv=i.lv||{};n.dictionary=Object.assign(n.dictionary||{},{"Align center":"Centrēt","Align left":"Pa kreisi","Align right":"Pa labi",Justify:"Izlīdzināt abas malas","Text alignment":"Teksta izlīdzināšana","Text alignment toolbar":"Teksta līdzināšanas rīkjosla"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(s){const t=s.lv=s.lv||{};t.dictionary=Object.assign(t.dictionary||{},{Bold:"Trekns",Code:"Kods",Italic:"Kursīvs",Strikethrough:"Nosvītrots",Subscript:"Apakšraksts",Superscript:"Augšraksts",Underline:"Pasvītrots"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.lv=i.lv||{};n.dictionary=Object.assign(n.dictionary||{},{"Block quote":"Citāts"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(s){const i=s.lv=s.lv||{};i.dictionary=Object.assign(i.dictionary||{},{"Choose heading":"Izvēlēties virsrakstu",Heading:"Virsraksts","Heading 1":"Virsraksts 1","Heading 2":"Virsraksts 2","Heading 3":"Virsraksts 3","Heading 4":"Virsraksts 4","Heading 5":"Virsraksts 5","Heading 6":"Virsraksts 6",Paragraph:"Pagrāfs","Type or paste your content here.":"Rakstiet vai ielīmējiet saturu šeit.","Type your title":"Ievadiet virsrakstu"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.lv=i.lv||{};n.dictionary=Object.assign(n.dictionary||{},{"Horizontal line":"Horizontāli atdalošā līnija"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(t){const e=t.lv=t.lv||{};e.dictionary=Object.assign(e.dictionary||{},{"Break text":"","Centered image":"Centrēts attēls","Change image text alternative":"Mainīt attēla alternatīvo tekstu","Enter image caption":"Ievadiet attēla parakstu","Full size image":"Pilna izmēra attēls","Image resize list":"","Image toolbar":"Attēlu rīkjosla","image widget":"attēla sīkrīks","In line":"",Insert:"","Insert image":"Ievietot attēlu","Insert image via URL":"","Left aligned image":"Pa kreisi līdzināts attēls",Original:"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Right aligned image":"Pa labi līdzināts attēls","Side image":"Sānā novietots attēls","Text alternative":"Alternatīvais teksts",Update:"","Update image URL":"","Upload failed":"Augšupielāde neizdevusies","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.lv=i.lv||{};n.dictionary=Object.assign(n.dictionary||{},{"Decrease indent":"Samazināt atkāpi","Increase indent":"Palielināt atkāpi"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.lv=i.lv||{};n.dictionary=Object.assign(n.dictionary||{},{Downloadable:"Lejupielādējams","Edit link":"Labot Saiti",Link:"Saite","Link image":"","Link URL":"Saites URL","Open in a new tab":"Atvērt jaunā cilnē","Open link in new tab":"Atvērt saiti jaunā cilnē","This link has no URL":"Saitei nav norādīts URL",Unlink:"Noņemt Saiti"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e.lv=e.lv||{};t.dictionary=Object.assign(t.dictionary||{},{"Bulleted List":"Nenumurēts Saraksts","Bulleted list styles toolbar":"",Circle:"",Decimal:"","Decimal with leading zero":"",Disc:"","Lower-latin":"","Lower–roman":"","Numbered List":"Numurēts Saraksts","Numbered list styles toolbar":"",Square:"","To-do List":"To-do Saraksts","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(o){const i=o.lv=o.lv||{};i.dictionary=Object.assign(i.dictionary||{},{"Remove Format":"Noņemt formatējumu"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e.lv=e.lv||{};t.dictionary=Object.assign(t.dictionary||{},{"Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align table to the left":"","Align table to the right":"",Alignment:"",Background:"",Border:"","Cell properties":"","Center table":"",Color:"","Color picker":"",Column:"Kolonna",Dashed:"","Delete column":"Dzēst kolonnu","Delete row":"Dzēst rindu",Dimensions:"",Dotted:"",Double:"","Enter table caption":"",Groove:"","Header column":"Šī kolonna ir galvene","Header row":"Šī rinda ir galvene",Height:"","Horizontal text alignment toolbar":"","Insert column left":"Ievietot kolonnu pa kreisi","Insert column right":"Ievietot kolonnu pa labi","Insert row above":"Ievietot rindu virs","Insert row below":"Ievietot rindu zem","Insert table":"Ievietot tabulu",Inset:"","Justify cell text":"","Merge cell down":"Apvienot šūnas uz leju","Merge cell left":"Apvienot šūnas pa kreisi","Merge cell right":"Apvienot šūnas pa labi","Merge cell up":"Apvienot šūnas uz augšu","Merge cells":"Apvienot šūnas",None:"",Outset:"",Padding:"",Ridge:"",Row:"Rinda","Select column":"","Select row":"",Solid:"","Split cell horizontally":"Atdalīt šūnu horizontāli","Split cell vertically":"Atdalīt šūnu vertikāli",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"Tabulas rīkjosla",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':"",'The value is invalid. Try "10px" or "2em" or simply "2".':"","Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"",Width:""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const a=e.lv=e.lv||{};a.dictionary=Object.assign(a.dictionary||{},{"%0 of %1":"%0 no %1",Aquamarine:"Akvamarīns",Black:"Melns",Blue:"Zils",Cancel:"Atcelt","Dim grey":"Blāvi pelēks","Dropdown toolbar":"Papildus izvēlnes rīkjosla","Edit block":"Labot bloku","Editor toolbar":"Redaktora rīkjosla",Green:"Zaļš",Grey:"Pelēks","Insert paragraph after block":"","Insert paragraph before block":"","Light blue":"Gaiši zils","Light green":"Gaiši zaļš","Light grey":"Gaiši pelēks",Next:"Nākamā",Orange:"Oranžs",Previous:"Iepriekšējā",Purple:"Violets",Red:"Sarkans",Redo:"Uz priekšu","Remove color":"Noņemt krāsu","Restore default":"","Rich Text Editor":"Bagātinātais Teksta Redaktors","Rich Text Editor, %0":"Bagātinātais Teksta Redaktors, %0",Save:"Saglabāt","Show more items":"Parādīt vairāk vienumus",Turquoise:"Tirkīza",Undo:"Atsaukt","Upload in progress":"Notiek augšupielāde",White:"Balts","Widget toolbar":"Sīkrīku rīkjosla",Yellow:"Dzeltens"}),a.getPluralForm=function(e){return e%10==1&&e%100!=11?0:0!=e?1:2}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/nb.js b/core/assets/vendor/ckeditor5/translations/nb.js
new file mode 100644
index 000000000000..575e55bfd0d8
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/nb.js
@@ -0,0 +1 @@
+!function(t){const n=t.nb=t.nb||{};n.dictionary=Object.assign(n.dictionary||{},{"Align center":"Midstill","Align left":"Venstrejuster","Align right":"Høyrejuster",Justify:"Blokkjuster","Text alignment":"Tekstjustering","Text alignment toolbar":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.nb=n.nb||{};i.dictionary=Object.assign(i.dictionary||{},{Bold:"Fet",Code:"Kode",Italic:"Kursiv",Strikethrough:"Gjennomstreking",Subscript:"",Superscript:"",Underline:"Understreking"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.nb=n.nb||{};i.dictionary=Object.assign(i.dictionary||{},{"Block quote":"Blokksitat"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.nb=e.nb||{};i.dictionary=Object.assign(i.dictionary||{},{"Choose heading":"Velg overskrift",Heading:"Overskrift","Heading 1":"Overskrift 1","Heading 2":"Overskrift 2","Heading 3":"Overskrift 3","Heading 4":"","Heading 5":"","Heading 6":"",Paragraph:"Avsnitt","Type or paste your content here.":"","Type your title":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.nb=e.nb||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"","Centered image":"Midtstilt bilde","Change image text alternative":"Endre tekstalternativ for bilde","Enter image caption":"Skriv inn bildetekst","Full size image":"Bilde i full størrelse","Image resize list":"","Image toolbar":"","image widget":"Bilde-widget","In line":"",Insert:"","Insert image":"Sett inn bilde","Insert image via URL":"","Left aligned image":"Venstrejustert bilde",Original:"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Right aligned image":"Høyrejustert bilde","Side image":"Sidebilde","Text alternative":"Tekstalternativ for bilde",Update:"","Update image URL":"","Upload failed":"Opplasting feilet","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const e=n.nb=n.nb||{};e.dictionary=Object.assign(e.dictionary||{},{Downloadable:"","Edit link":"Rediger lenke",Link:"Lenke","Link image":"","Link URL":"URL for lenke","Open in a new tab":"","Open link in new tab":"Åpne lenke i ny fane","This link has no URL":"Denne lenken har ingen URL",Unlink:"Fjern lenke"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e.nb=e.nb||{};t.dictionary=Object.assign(t.dictionary||{},{"Bulleted List":"Punktmerket liste","Bulleted list styles toolbar":"",Circle:"",Decimal:"","Decimal with leading zero":"",Disc:"","Lower-latin":"","Lower–roman":"","Numbered List":"Nummerert liste","Numbered list styles toolbar":"",Square:"","To-do List":"","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.nb=e.nb||{};l.dictionary=Object.assign(l.dictionary||{},{"Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align table to the left":"","Align table to the right":"",Alignment:"",Background:"",Border:"","Cell properties":"","Center table":"",Color:"","Color picker":"",Column:"Kolonne",Dashed:"","Delete column":"Slett kolonne","Delete row":"Slett rad",Dimensions:"",Dotted:"",Double:"","Enter table caption":"",Groove:"","Header column":"Overskriftkolonne","Header row":"Overskriftrad",Height:"","Horizontal text alignment toolbar":"","Insert column left":"","Insert column right":"","Insert row above":"Sett inn rad over","Insert row below":"Sett inn rad under","Insert table":"Sett inn tabell",Inset:"","Justify cell text":"","Merge cell down":"Slå sammen celle ned","Merge cell left":"Slå sammen celle til venstre","Merge cell right":"Slå sammen celle til høyre","Merge cell up":"Slå sammen celle opp","Merge cells":"Slå sammen celler",None:"",Outset:"",Padding:"",Ridge:"",Row:"Rad","Select column":"","Select row":"",Solid:"","Split cell horizontally":"Del celle horisontalt","Split cell vertically":"Del celle vertikalt",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':"",'The value is invalid. Try "10px" or "2em" or simply "2".':"","Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"",Width:""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const o=e.nb=e.nb||{};o.dictionary=Object.assign(o.dictionary||{},{"%0 of %1":"",Aquamarine:"",Black:"",Blue:"",Cancel:"Avbryt","Dim grey":"","Dropdown toolbar":"","Edit block":"","Editor toolbar":"",Green:"",Grey:"","Light blue":"","Light green":"","Light grey":"",Next:"",Orange:"",Previous:"",Purple:"",Red:"",Redo:"Gjør om","Remove color":"","Restore default":"","Rich Text Editor":"Rikteksteditor","Rich Text Editor, %0":"Rikteksteditor, %0",Save:"Lagre","Show more items":"",Turquoise:"",Undo:"Angre","Upload in progress":"Opplasting pågår",White:"",Yellow:""}),o.getPluralForm=function(e){return 1!=e}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/ne.js b/core/assets/vendor/ckeditor5/translations/ne.js
new file mode 100644
index 000000000000..03346b74b69d
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/ne.js
@@ -0,0 +1 @@
+!function(n){const i=n.ne=n.ne||{};i.dictionary=Object.assign(i.dictionary||{},{"Align center":"केन्द्र पङ्क्तिबद्ध गर्नुहोस्","Align left":"बायाँ पङ्क्तिबद्ध गर्नुहोस्","Align right":"दायाँ पङ्क्तिबद्ध गर्नुहोस्",Justify:"जस्टिफाइ गर्नुहोस्","Text alignment":"पाठ संरेखण","Text alignment toolbar":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.ne=i.ne||{};n.dictionary=Object.assign(n.dictionary||{},{Bold:"बोल्ड",Code:"कोड",Italic:"इटालिक",Strikethrough:"स्ट्राइकथ्रू",Subscript:"सबस्क्रिप्ट",Superscript:"सुपरस्क्रिप्ट",Underline:"रेखांकन"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.ne=n.ne||{};i.dictionary=Object.assign(i.dictionary||{},{"Block quote":"ब्लक उद्धरण"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const e=n.ne=n.ne||{};e.dictionary=Object.assign(e.dictionary||{},{"Choose heading":"शीर्षक छनौट गर्नुहोस्",Heading:"शीर्षक","Heading 1":"शीर्षक-एक","Heading 2":"शीर्षक २","Heading 3":"शीर्षक ३","Heading 4":"शीर्षक ४","Heading 5":"शीर्षक ५","Heading 6":"शीर्षक ६",Paragraph:"अनुच्छेद","Type or paste your content here.":"","Type your title":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.ne=e.ne||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"","Centered image":"केन्द्रित तस्वीर","Change image text alternative":"तस्वीर पाठ विकल्प परिवर्तन गर्नुहोस्","Enter image caption":"तस्वीर क्याप्शन प्रविष्ट गर्नुहोस्","Full size image":"पूर्ण आकार तस्वीर","Image resize list":"","Image toolbar":"","image widget":"तस्वीर विजेट","In line":"",Insert:"","Insert image":"तस्वीर सम्मिलित गर्नुहोस्","Insert image via URL":"","Left aligned image":"बायाँ पङ्क्ति तस्वीर",Original:"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Right aligned image":"दायाँ पङ्क्तिबद्ध तस्वीर","Side image":"साइड तस्वीर","Text alternative":"पाठ विकल्प",Update:"","Update image URL":"","Upload failed":"अपलोड असफल भयो","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const e=n.ne=n.ne||{};e.dictionary=Object.assign(e.dictionary||{},{"Decrease indent":"इन्डेन्ट घटाउन","Increase indent":"इन्डेन्ट बढाउन"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.ne=n.ne||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"डाउनलोड योग्य","Edit link":"लिङ्क सम्पादन गर्नुहोस्",Link:"लिङ्क","Link image":"","Link URL":"लिङ्क यूआरएल","Open in a new tab":"नयाँ ट्याबमा खोल्न","Open link in new tab":"नयाँ ट्याबमा लिङ्क खोल्नुहोस्","This link has no URL":"यो लिङ्कसँग यूआरएल छैन",Unlink:"अनलिङ्क गर्नुहोस्"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.ne=e.ne||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"गोली चिन्ह अङ्कित सूची","Bulleted list styles toolbar":"",Circle:"",Decimal:"","Decimal with leading zero":"",Disc:"","Lower-latin":"","Lower–roman":"","Numbered List":"सूचीबद्ध सूची","Numbered list styles toolbar":"",Square:"","To-do List":"","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.ne=n.ne||{};i.dictionary=Object.assign(i.dictionary||{},{"Remove Format":"ढाँचा हटाउनुहोस्"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e.ne=e.ne||{};t.dictionary=Object.assign(t.dictionary||{},{"Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align table to the left":"","Align table to the right":"",Alignment:"",Background:"",Border:"","Cell properties":"","Center table":"",Color:"","Color picker":"",Column:"स्तम्भ",Dashed:"","Delete column":"स्तम्भ मेटाउनुहोस्","Delete row":"पङ्क्ति मेटाउनुहोस्",Dimensions:"",Dotted:"",Double:"","Enter table caption":"",Groove:"","Header column":"हेडर स्तम्भ","Header row":"हेडर पङ्क्ति",Height:"","Horizontal text alignment toolbar":"","Insert column left":"बायाँ स्तम्भ सम्मिलित गर्न","Insert column right":"दायाँ स्तम्भ सम्मिलित गर्न","Insert row above":"माथि पंक्ति सम्मिलित गर्नुहोस्","Insert row below":"तल पंक्ति सम्मिलित गर्नुहोस्","Insert table":"तालिका सम्मिलित गर्नुहोस्",Inset:"","Justify cell text":"","Merge cell down":"कक्ष तल मर्ज गर्नुहोस्","Merge cell left":"सेल बायाँ मर्ज गर्नुहोस्","Merge cell right":"दायाँ कक्ष मर्ज गर्नुहोस्","Merge cell up":"कक्ष माथि मर्ज गर्नुहोस्","Merge cells":"कक्ष मर्ज गर्नुहोस्",None:"",Outset:"",Padding:"",Ridge:"",Row:"पङ्क्ति","Select column":"","Select row":"",Solid:"","Split cell horizontally":"क्षैतिज कक्ष विभाजित गर्नुहोस्","Split cell vertically":"ठाडो कक्ष विभाजित गर्नुहोस्",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':"",'The value is invalid. Try "10px" or "2em" or simply "2".':"","Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"",Width:""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const o=e.ne=e.ne||{};o.dictionary=Object.assign(o.dictionary||{},{"%0 of %1":"०% मध्ये १%",Aquamarine:"अव्कवामरिन",Black:"कालो",Blue:"निलो",Cancel:"रद्द गर्नुहोस्","Dim grey":"धमिलो खैरो","Dropdown toolbar":"","Edit block":"ब्लक सम्पादन गर्न","Editor toolbar":"",Green:"हरियो",Grey:"खैरो","Light blue":"हल्का निलो","Light green":"हल्का हरियो","Light grey":"हल्का खैरो",Next:"अर्को",Orange:"सुन्तला रंग",Previous:"अघिल्लो",Purple:"बैंगनी रंग",Red:"रातो",Redo:"रिडु","Remove color":"रंग हटाउन","Restore default":"","Rich Text Editor":"धनी पाठ सम्पादक","Rich Text Editor, %0":"धनी पाठ सम्पादक, %0",Save:"सुरक्षित गर्नुहोस्","Show more items":"",Turquoise:"त्रकोइस",Undo:"पूर्ववत","Upload in progress":"अपलोड हुदैछ",White:"सेतो",Yellow:"पहेंलो"}),o.getPluralForm=function(e){return 1!=e}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/nl.js b/core/assets/vendor/ckeditor5/translations/nl.js
new file mode 100644
index 000000000000..221a417e0b7f
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/nl.js
@@ -0,0 +1 @@
+!function(i){const n=i.nl=i.nl||{};n.dictionary=Object.assign(n.dictionary||{},{"Align center":"Midden uitlijnen","Align left":"Links uitlijnen","Align right":"Rechts uitlijnen",Justify:"Volledig uitlijnen","Text alignment":"Tekst uitlijning","Text alignment toolbar":"Tekst uitlijning werkbalk"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.nl=i.nl||{};n.dictionary=Object.assign(n.dictionary||{},{Bold:"Vet",Code:"Code",Italic:"Cursief",Strikethrough:"Doorhalen",Subscript:"Subscript",Superscript:"Superscript",Underline:"Onderlijnen"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.nl=n.nl||{};i.dictionary=Object.assign(i.dictionary||{},{"Block quote":"Blok citaat"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(o){const n=o.nl=o.nl||{};n.dictionary=Object.assign(n.dictionary||{},{"Choose heading":"Kies kop",Heading:"Koppen","Heading 1":"Kop 1","Heading 2":"Kop 2","Heading 3":"Kop 3","Heading 4":"Kop 4","Heading 5":"Kop 5","Heading 6":"Kop 6",Paragraph:"Paragraaf","Type or paste your content here.":"Voer of plak uw inhoud in.","Type your title":"Voor uw titel in"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.nl=n.nl||{};i.dictionary=Object.assign(i.dictionary||{},{"Horizontal line":"Horizontale lijn"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.nl=e.nl||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"","Centered image":"Gecentreerde afbeelding","Change image text alternative":"Verander alt-tekst van de afbeelding","Enter image caption":"Typ een afbeeldingsbijschrift","Full size image":"Afbeelding op volledige grootte","Image resize list":"","Image toolbar":"Afbeeldingswerkbalk","image widget":"afbeeldingswidget","In line":"",Insert:"Invoegen","Insert image":"Afbeelding toevoegen","Insert image via URL":"","Left aligned image":"Links uitgelijnde afbeelding",Original:"Origineel","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Right aligned image":"Rechts uitgelijnde afbeelding","Side image":"Afbeelding naast tekst","Text alternative":"Alt-tekst",Update:"","Update image URL":"","Upload failed":"Uploaden afbeelding mislukt","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.nl=n.nl||{};i.dictionary=Object.assign(i.dictionary||{},{"Decrease indent":"Minder inspringen","Increase indent":"Inspringen"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(a){const n=a.nl=a.nl||{};n.dictionary=Object.assign(n.dictionary||{},{"Choose language":"Kies taal",Language:"Taal","Remove language":"Taal verwijderen"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.nl=n.nl||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"Downloadbaar","Edit link":"Bewerk link",Link:"Link","Link image":"Link afbeelding","Link URL":"Link URL","Open in a new tab":"Open een nieuw tabblad","Open link in new tab":"Open link in nieuw tabblad","This link has no URL":"Deze link heeft geen URL",Unlink:"Verwijder link"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.nl=e.nl||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"Ongenummerde lijst","Bulleted list styles toolbar":"",Circle:"Cirkel",Decimal:"Decimaal","Decimal with leading zero":"",Disc:"Schijf","Lower-latin":"","Lower–roman":"","Numbered List":"Genummerde lijst","Numbered list styles toolbar":"",Square:"Vierkant","To-do List":"To-do lijst","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.nl=n.nl||{};i.dictionary=Object.assign(i.dictionary||{},{"Remove Format":"Verwijder format"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.nl=n.nl||{};i.dictionary=Object.assign(i.dictionary||{},{Source:"Bron"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.nl=e.nl||{};l.dictionary=Object.assign(l.dictionary||{},{"Align cell text to the bottom":"","Align cell text to the center":"Tekst in de cel centreren","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align table to the left":"","Align table to the right":"",Alignment:"Uitlijning",Background:"Achtergrond",Border:"Rand","Cell properties":"Celeigenschappen","Center table":"Tabel centreren",Color:"Kleur","Color picker":"",Column:"Kolom",Dashed:"","Delete column":"Verwijder kolom","Delete row":"Verwijder rij",Dimensions:"",Dotted:"Stippellijn",Double:"Dubbel","Enter table caption":"",Groove:"","Header column":"Titel kolom","Header row":"Titel rij",Height:"Hoogte","Horizontal text alignment toolbar":"","Insert column left":"Kolom links invoegen","Insert column right":"Kolom rechts invoegen","Insert row above":"Rij hierboven invoegen","Insert row below":"Rij hieronder invoegen","Insert table":"Tabel invoegen",Inset:"","Justify cell text":"","Merge cell down":"Cel hieronder samenvoegen","Merge cell left":"Cel hiervoor samenvoegen","Merge cell right":"Cel hierna samenvoegen","Merge cell up":"Cel hierboven samenvoegen","Merge cells":"Cellen samenvoegen",None:"Geen",Outset:"",Padding:"",Ridge:"",Row:"Rij","Select column":"Selecteer kolom","Select row":"Selecteer rij",Solid:"","Split cell horizontally":"Splits cel horizontaal","Split cell vertically":"Splits cel verticaal",Style:"Stijl","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"Tabeleigenschappen","Table toolbar":"Tabel werkbalk",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':'De kleur in niet correct, probeer "#FF0000" of "rgb(255,0,0)" of "red".','The value is invalid. Try "10px" or "2em" or simply "2".':"","Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"",Width:"Breedte"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.nl=n.nl||{};i.dictionary=Object.assign(i.dictionary||{},{"HTML object":"HTML object"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e.nl=e.nl||{};t.dictionary=Object.assign(t.dictionary||{},{"Almost equal to":"Bijna gelijk aan",Angle:"Hoek","Approximately equal to":"Ongeveer gelijk aan","Asterisk operator":"Asterisk teken","Austral sign":"Austral teken","back with leftwards arrow above":"back met linkswijzende pijl erboven","Bitcoin sign":"Bitcoin teken","Cedi sign":"Cedi teken","Cent sign":"Cent teken","Character categories":"Karakter categorieën","Colon sign":"Colón teken","Contains as member":"Bevat als onderdeel","Copyright sign":"","Cruzeiro sign":"Cruzeiro teken","Currency sign":"Valuta teken","Degree sign":"Graden teken","Division sign":"Deel teken","Dollar sign":"Dollar teken","Dong sign":"Dong teken","Double dagger":"","Double exclamation mark":"","Double low-9 quotation mark":"","Double question mark":"","downwards arrow to bar":"benedenwijzende pijl naar streep","downwards dashed arrow":"benedenwijzende gestreepte pijl","downwards double arrow":"benedenwijzende dubbele pijl","Drachma sign":"Drachme teken","Element of":"Onderdeel van","Em dash":"Kastlijntje","Empty set":"Lege set","En dash":"Half kastlijntje","end with leftwards arrow above":"end met linkswijzende pijl erboven","Euro sign":"Euro teken","Euro-currency sign":"Euro-valuta teken","Exclamation question mark":"","For all":"Voor alles","Fraction slash":"Breuk teken","French franc sign":"Franse frank teken","German penny sign":"Duitse penny teken","Greater-than or equal to":"Groter-dan of gelijk aan","Greater-than sign":"Groter-dan teken","Guarani sign":"Guarani teken","Horizontal ellipsis":"","Hryvnia sign":"Grivna teken","Identical to":"Gelijk aan","Indian rupee sign":"Indiaanse roepie teken",Infinity:"Infinity",Integral:"Integraal",Intersection:"Kruispunt","Inverted exclamation mark":"","Inverted question mark":"","Kip sign":"Kip teken","Latin capital letter a with breve":"Latijnse hoofdletter a met breve","Latin capital letter a with macron":"Latijnse hoofdletter a met macron","Latin capital letter a with ogonek":"Latijnse hoofdletter a met ogonek","Latin capital letter c with acute":"Latijnse hoofdletter c met acute","Latin capital letter c with caron":"Latijnse hoofdletter c met caron","Latin capital letter c with circumflex":"Latijnse hoofdletter c met circumflex","Latin capital letter c with dot above":"Latijnse hoofdletter c met punt erboven","Latin capital letter d with caron":"Latijnse hoofdletter d met caron","Latin capital letter d with stroke":"","Latin capital letter e with breve":"","Latin capital letter e with caron":"","Latin capital letter e with dot above":"","Latin capital letter e with macron":"","Latin capital letter e with ogonek":"","Latin capital letter eng":"","Latin capital letter g with breve":"","Latin capital letter g with cedilla":"","Latin capital letter g with circumflex":"","Latin capital letter g with dot above":"","Latin capital letter h with circumflex":"","Latin capital letter h with stroke":"","Latin capital letter i with breve":"","Latin capital letter i with dot above":"","Latin capital letter i with macron":"","Latin capital letter i with ogonek":"","Latin capital letter i with tilde":"","Latin capital letter j with circumflex":"","Latin capital letter k with cedilla":"","Latin capital letter l with acute":"","Latin capital letter l with caron":"","Latin capital letter l with cedilla":"","Latin capital letter l with middle dot":"","Latin capital letter l with stroke":"","Latin capital letter n with acute":"","Latin capital letter n with caron":"","Latin capital letter n with cedilla":"","Latin capital letter o with breve":"","Latin capital letter o with double acute":"","Latin capital letter o with macron":"","Latin capital letter r with acute":"","Latin capital letter r with caron":"","Latin capital letter r with cedilla":"","Latin capital letter s with acute":"","Latin capital letter s with caron":"","Latin capital letter s with cedilla":"","Latin capital letter s with circumflex":"","Latin capital letter t with caron":"","Latin capital letter t with cedilla":"","Latin capital letter t with stroke":"","Latin capital letter u with breve":"","Latin capital letter u with double acute":"","Latin capital letter u with macron":"","Latin capital letter u with ogonek":"","Latin capital letter u with ring above":"","Latin capital letter u with tilde":"","Latin capital letter w with circumflex":"","Latin capital letter y with circumflex":"","Latin capital letter y with diaeresis":"","Latin capital letter z with acute":"","Latin capital letter z with caron":"","Latin capital letter z with dot above":"","Latin capital ligature ij":"","Latin capital ligature oe":"","Latin small letter a with breve":"Latijnse kleine letter a met breve","Latin small letter a with macron":"Latijnse kleine letter a met macron","Latin small letter a with ogonek":"Latijnse kleine letter a met ogonek","Latin small letter c with acute":"Latijnse kleine letter c met acute","Latin small letter c with caron":"Latijnse kleine letter c met caron","Latin small letter c with circumflex":"Latijnse kleine letter c met circumflex","Latin small letter c with dot above":"Latijnse kleine letter met punt erboven","Latin small letter d with caron":"Latijnse kleine letter d met caron","Latin small letter d with stroke":"","Latin small letter dotless i":"","Latin small letter e with breve":"","Latin small letter e with caron":"","Latin small letter e with dot above":"","Latin small letter e with macron":"","Latin small letter e with ogonek":"","Latin small letter eng":"","Latin small letter f with hook":"Latijnse kleine letter f met hoek","Latin small letter g with breve":"","Latin small letter g with cedilla":"","Latin small letter g with circumflex":"","Latin small letter g with dot above":"","Latin small letter h with circumflex":"","Latin small letter h with stroke":"","Latin small letter i with breve":"","Latin small letter i with macron":"","Latin small letter i with ogonek":"","Latin small letter i with tilde":"","Latin small letter j with circumflex":"","Latin small letter k with cedilla":"","Latin small letter kra":"","Latin small letter l with acute":"","Latin small letter l with caron":"","Latin small letter l with cedilla":"","Latin small letter l with middle dot":"","Latin small letter l with stroke":"","Latin small letter long s":"","Latin small letter n preceded by apostrophe":"","Latin small letter n with acute":"","Latin small letter n with caron":"","Latin small letter n with cedilla":"","Latin small letter o with breve":"","Latin small letter o with double acute":"","Latin small letter o with macron":"","Latin small letter r with acute":"","Latin small letter r with caron":"","Latin small letter r with cedilla":"","Latin small letter s with acute":"","Latin small letter s with caron":"","Latin small letter s with cedilla":"","Latin small letter s with circumflex":"","Latin small letter t with caron":"","Latin small letter t with cedilla":"","Latin small letter t with stroke":"","Latin small letter u with breve":"","Latin small letter u with double acute":"","Latin small letter u with macron":"","Latin small letter u with ogonek":"","Latin small letter u with ring above":"","Latin small letter u with tilde":"","Latin small letter w with circumflex":"","Latin small letter y with circumflex":"","Latin small letter z with acute":"","Latin small letter z with caron":"","Latin small letter z with dot above":"","Latin small ligature ij":"","Latin small ligature oe":"","Left double quotation mark":"","Left single quotation mark":"","Left-pointing double angle quotation mark":"","leftwards arrow to bar":"linkswijzende pijl naar streep","leftwards dashed arrow":"linkswijzende gestreepte pijl","leftwards double arrow":"linkswijzende dubbele pijl","Less-than or equal to":"Kleiner-dan of gelijk aan","Less-than sign":"Kleiner-dan teken","Lira sign":"Lira teken","Livre tournois sign":"Livre tournois teken","Logical and":"Logische en","Logical or":"Logische of",Macron:"Makron","Manat sign":"Manat teken","Mill sign":"Mill teken","Minus sign":"Min teken","Multiplication sign":"Vermenigvuldigingsteken","N-ary product":"N-ary product","N-ary summation":"N-ary sommatie",Nabla:"Nabla","Naira sign":"Naira teken","New sheqel sign":"Nieuwe sjekel teken","Nordic mark sign":"Noorse mark teken","Not an element of":"Geen onderdeel van","Not equal to":"Niet gelijk aan","Not sign":"Niet teken","on with exclamation mark with left right arrow above":"on met uitroepteken met links rechts pijl erboven",Overline:"Overline","Paragraph sign":"Paragraaf teken","Partial differential":"Gedeeltelijk differentieel","Per mille sign":"","Per ten thousand sign":"","Peseta sign":"Peseta teken","Peso sign":"Peso teken","Plus-minus sign":"Plus-minus teken","Pound sign":"Pond teken","Proportional to":"Verhoudend tot","Question exclamation mark":"","Registered sign":"","Reversed paragraph sign":"Omgekeerd paragraaf teken","Right double quotation mark":"","Right single quotation mark":"","Right-pointing double angle quotation mark":"","rightwards arrow to bar":"rechtswijzende pijl naar streep","rightwards dashed arrow":"rechtswijzende gestreepte pijl","rightwards double arrow":"rechtswijzende dubbele pijl","Ruble sign":"Roebel teken","Rupee sign":"Roepie teken","Section sign":"","Single left-pointing angle quotation mark":"","Single low-9 quotation mark":"","Single right-pointing angle quotation mark":"","soon with rightwards arrow above":"soon met rechtswijzende pijl erboven","Special characters":"Speciale karakters","Spesmilo sign":"Spesmilo teken","Square root":"Vierkantswortel","Tenge sign":"Tenge teken","There exists":"Er bestaat","Tilde operator":"Tidle teken","top with upwards arrow above":"top met bovenwijzende pijl erboven","Trade mark sign":"","Tugrik sign":"Tugrik teken","Turkish lira sign":"Turkse lira teken","Two dot leader":"",Union:"Unie","up down arrow with base":"boven beneden pijl met streep","upwards arrow to bar":"bovenwijzende pijl naar streep","upwards dashed arrow":"bovenwijzende gestreepte pijl","upwards double arrow":"bovenwijzende dubbele pijl","Vulgar fraction one half":"Gewone breuk een half","Vulgar fraction one quarter":"Gewone breuk een kwart","Vulgar fraction three quarters":"Gewone breuk driekwart","Won sign":"Won teken","Yen sign":"Yen teken"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const r=e.nl=e.nl||{};r.dictionary=Object.assign(r.dictionary||{},{"%0 of %1":"0% van 1%",Aquamarine:"Aquamarijn",Black:"Zwart",Blue:"Blauw",Cancel:"Annuleren","Dim grey":"Gedimd grijs","Dropdown toolbar":"Drop-down werkbalk","Edit block":"Blok aanpassen","Editor toolbar":"Editor welkbalk",Green:"Groen",Grey:"Grijs","Insert paragraph after block":"Voeg paragraaf toe na blok","Insert paragraph before block":"Voeg paragraaf toe voor blok","Light blue":"Lichtblauw","Light green":"Lichtgroen","Light grey":"Lichtgrijs",Next:"Volgende",Orange:"Oranje",Previous:"Vorige",Purple:"Paars",Red:"Rood",Redo:"Opnieuw","Remove color":"Verwijder kleur","Restore default":"Standaardinstellingen terugzetten","Rich Text Editor":"Tekstbewerker","Rich Text Editor, %0":"Tekstbewerker, 0%",Save:"Opslaan","Select all":"Selecteer alles","Show more items":"Meer items weergeven",Turquoise:"Turquoise",Undo:"Ongedaan maken","Upload in progress":"Bezig met uploaden",White:"Wit","Widget toolbar":"Widget werkbalk",Yellow:"Geel"}),r.getPluralForm=function(e){return 1!=e}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/no.js b/core/assets/vendor/ckeditor5/translations/no.js
new file mode 100644
index 000000000000..f6e1e70875de
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/no.js
@@ -0,0 +1 @@
+!function(t){const n=t.no=t.no||{};n.dictionary=Object.assign(n.dictionary||{},{"Align center":"Midtstill","Align left":"Venstrejuster","Align right":"Høyrejuster",Justify:"Blokkjuster","Text alignment":"Tekstjustering","Text alignment toolbar":"Verktøylinje for tekstjustering"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(t){const e=t.no=t.no||{};e.dictionary=Object.assign(e.dictionary||{},{Bold:"Fet",Code:"Kode",Italic:"Kursiv",Strikethrough:"Gjennomstreket",Subscript:"Senket skrift",Superscript:"Hevet skrift",Underline:"Understreket"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(o){const n=o.no=o.no||{};n.dictionary=Object.assign(n.dictionary||{},{"Block quote":"Blokksitat"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const e=i.no=i.no||{};e.dictionary=Object.assign(e.dictionary||{},{"Choose heading":"Velg overskrift",Heading:"Overskrift","Heading 1":"Overskrift 1","Heading 2":"Overskrift 2","Heading 3":"Overskrift 3","Heading 4":"Overskrift 4","Heading 5":"Overskrift 5","Heading 6":"Overskrift 6",Paragraph:"Avsnitt","Type or paste your content here.":"Skriv eller lim inn ditt innhold her","Type your title":"Skriv inn tittel"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.no=n.no||{};i.dictionary=Object.assign(i.dictionary||{},{"Horizontal line":"Horisontal linje"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.no=e.no||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"","Centered image":"Midtstilt bilde","Change image text alternative":"Endre tekstalternativ til bildet","Enter image caption":"Skriv inn bildetekst","Full size image":"Bilde i full størrelse","Image resize list":"","Image toolbar":"Verktøylinje for bilde","image widget":"Bilde-widget","In line":"",Insert:"","Insert image":"Sett inn bilde","Insert image via URL":"","Left aligned image":"Venstrejustert bilde",Original:"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Right aligned image":"Høyrejustert bilde","Side image":"Sidestilt bilde","Text alternative":"Tekstalternativ",Update:"","Update image URL":"","Upload failed":"Kunne ikke laste opp","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.no=n.no||{};i.dictionary=Object.assign(i.dictionary||{},{"Decrease indent":"Reduser innrykk","Increase indent":"Øk innrykk"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const e=n.no=n.no||{};e.dictionary=Object.assign(e.dictionary||{},{Downloadable:"Nedlastbar","Edit link":"Rediger lenke",Link:"Lenke","Link image":"","Link URL":"Lenke-URL","Open in a new tab":"Åpne i ny fane","Open link in new tab":"Åpne lenke i ny fane","This link has no URL":"Denne lenken mangler en URL",Unlink:"Fjern lenke"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.no=e.no||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"Punktliste","Bulleted list styles toolbar":"",Circle:"",Decimal:"","Decimal with leading zero":"",Disc:"","Lower-latin":"","Lower–roman":"","Numbered List":"Nummerert liste","Numbered list styles toolbar":"",Square:"","To-do List":"Oppgaveliste","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const o=n.no=n.no||{};o.dictionary=Object.assign(o.dictionary||{},{"Remove Format":"Fjern formatering"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e.no=e.no||{};t.dictionary=Object.assign(t.dictionary||{},{"Align cell text to the bottom":"Juster celletekst til bunn ","Align cell text to the center":"Juster celletekst til midten ","Align cell text to the left":"Juster celletekst til venstre ","Align cell text to the middle":"Juster celletekst til midten","Align cell text to the right":"Juster celletekst til høyre ","Align cell text to the top":"Juster celletekst til topp","Align table to the left":"Juster tabell til venstre ","Align table to the right":"Juster tabell til høyre ",Alignment:"Justering",Background:"Bakgrunn ",Border:"Kantlinje ","Cell properties":"Celleegenskaper ","Center table":"Sentrer tabell ",Color:"Farge","Color picker":"Fargevalg ",Column:"Kolonne",Dashed:"Stiplet","Delete column":"Slett kolonne","Delete row":"Slett rad",Dimensions:"Dimensjoner",Dotted:"Stiplede",Double:"Dobbel ","Enter table caption":"",Groove:"Grov","Header column":"Overskriftkolonne","Header row":"Overskriftrad",Height:"Høyde","Horizontal text alignment toolbar":"Verktøylinje for justering av tekst horisontalt ","Insert column left":"Sett inn kolonne til venstre","Insert column right":"Sett inn kolonne til høyre","Insert row above":"Sett inn rad over","Insert row below":"Sett inn rad under","Insert table":"Sett inn tabell",Inset:"Innover","Justify cell text":"Rett celletekst ","Merge cell down":"Slå sammen celle under","Merge cell left":"Slå sammen celle til venstre","Merge cell right":"Slå sammen celle til høyre","Merge cell up":"Slå sammen celle over","Merge cells":"Slå sammen celler",None:"Ingen",Outset:"Utover",Padding:"Fylling",Ridge:"Kjede",Row:"Rad","Select column":"Velg kolonne ","Select row":"Velg rad",Solid:"Hel","Split cell horizontally":"Del opp celle horisontalt","Split cell vertically":"Del opp celle vertikalt",Style:"Stil ","Table alignment toolbar":"Verktøylinje for justering av tabell ","Table cell text alignment":"Celle tekstjustering ","Table properties":"Egenskaper for tabell","Table toolbar":"Tabell verktøylinje ",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':"Ugyldig farge ",'The value is invalid. Try "10px" or "2em" or simply "2".':"Ugyldig verdi ","Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"Verktøylinje for justering av tekst vertikalt ",Width:"Bredde"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const r=e.no=e.no||{};r.dictionary=Object.assign(r.dictionary||{},{"%0 of %1":"%0 av %1",Aquamarine:"Akvamarin",Black:"Svart",Blue:"Blå",Cancel:"Avbryt","Dim grey":"Svak grå","Dropdown toolbar":"Verktøylinje for nedtrekksliste","Edit block":"Rediger blokk","Editor toolbar":"Verktøylinje for redigeringsverktøy",Green:"Grønn",Grey:"Grå","Insert paragraph after block":"","Insert paragraph before block":"","Light blue":"Lyseblå","Light green":"Lysegrønn","Light grey":"Lysegrå",Next:"Neste",Orange:"Oransje",Previous:"Forrige",Purple:"Lilla",Red:"Rød",Redo:"Gjør om","Remove color":"Fjern farge","Restore default":"Tilbakestill til standard","Rich Text Editor":"Tekstredigeringsverktøy for rik tekst","Rich Text Editor, %0":"Tekstredigeringsverktøy for rik tekst, %0",Save:"Lagre","Select all":"Velg alt ","Show more items":"Vis flere elementer",Turquoise:"Turkis",Undo:"Angre","Upload in progress":"Laster opp fil",White:"Hvit","Widget toolbar":"Widget verktøylinje ",Yellow:"Gul"}),r.getPluralForm=function(e){return 1!=e}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/oc.js b/core/assets/vendor/ckeditor5/translations/oc.js
new file mode 100644
index 000000000000..7d662342f2eb
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/oc.js
@@ -0,0 +1 @@
+!function(i){const c=i.oc=i.oc||{};c.dictionary=Object.assign(c.dictionary||{},{Bold:"Gras",Code:"",Italic:"Italica",Strikethrough:"",Subscript:"",Superscript:"",Underline:""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(o){const n=o.oc=o.oc||{};n.dictionary=Object.assign(n.dictionary||{},{"%0 of %1":"",Cancel:"Anullar","Remove color":"","Restore default":"",Save:"Enregistrar","Show more items":""}),n.getPluralForm=function(o){return o>1}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/pl.js b/core/assets/vendor/ckeditor5/translations/pl.js
new file mode 100644
index 000000000000..7f0331f91389
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/pl.js
@@ -0,0 +1 @@
+!function(n){const i=n.pl=n.pl||{};i.dictionary=Object.assign(i.dictionary||{},{"Align center":"Wyrównaj do środka","Align left":"Wyrównaj do lewej","Align right":"Wyrównaj do prawej",Justify:"Wyrównaj obustronnie","Text alignment":"Wyrównanie tekstu","Text alignment toolbar":"Pasek narzędzi wyrównania tekstu"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.pl=e.pl||{};i.dictionary=Object.assign(i.dictionary||{},{Bold:"Pogrubienie",Code:"Kod",Italic:"Kursywa",Strikethrough:"Przekreślenie",Subscript:"Indeks dolny",Superscript:"Indeks górny",Underline:"Podkreślenie"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(o){const i=o.pl=o.pl||{};i.dictionary=Object.assign(i.dictionary||{},{"Block quote":"Cytat blokowy"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const a=e.pl=e.pl||{};a.dictionary=Object.assign(a.dictionary||{},{"Choose heading":"Wybierz nagłówek",Heading:"Nagłówek","Heading 1":"Nagłówek 1","Heading 2":"Nagłówek 2","Heading 3":"Nagłówek 3","Heading 4":"Nagłówek 4","Heading 5":"Nagłówek 5","Heading 6":"Nagłówek 6",Paragraph:"Akapit","Type or paste your content here.":"Wpisz lub wklej tutaj treść dokumentu.","Type your title":"Podaj tytuł"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.pl=i.pl||{};n.dictionary=Object.assign(n.dictionary||{},{"Horizontal line":"Linia pozioma"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(a){const e=a.pl=a.pl||{};e.dictionary=Object.assign(e.dictionary||{},{"Break text":"","Centered image":"Obraz wyrównany do środka","Change image text alternative":"Zmień tekst zastępczy obrazka","Enter image caption":"Wstaw tytuł obrazka","Full size image":"Obraz w pełnym rozmiarze","Image resize list":"","Image toolbar":"Pasek narzędzi obrazka","image widget":"Obraz","In line":"",Insert:"Wstaw","Insert image":"Wstaw obraz","Insert image via URL":"Wstaw obraz z adresu URL","Left aligned image":"Obraz wyrównany do lewej",Original:"Oryginalny","Resize image":"Zmień rozmiar obrazka","Resize image to %0":"Zmień rozmiar do %0","Resize image to the original size":"Przywróć oryginalny rozmiar obrazu","Right aligned image":"Obraz wyrównany do prawej","Side image":"Obraz dosunięty do brzegu, oblewany tekstem","Text alternative":"Tekst zastępczy obrazka",Update:"Zaktualizuj","Update image URL":"Uaktualnij obraz z adresu URL","Upload failed":"Przesyłanie obrazu nie powiodło się","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.pl=i.pl||{};n.dictionary=Object.assign(n.dictionary||{},{"Decrease indent":"Zmniejsz wcięcie","Increase indent":"Zwiększ wcięcie"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const a=n.pl=n.pl||{};a.dictionary=Object.assign(a.dictionary||{},{"Choose language":"Wybierz język",Language:"Język","Remove language":"Usuń język"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const o=n.pl=n.pl||{};o.dictionary=Object.assign(o.dictionary||{},{Downloadable:"Do pobrania","Edit link":"Edytuj odnośnik",Link:"Wstaw odnośnik","Link image":"Wstaw odnośnik do obrazka","Link URL":"Adres URL","Open in a new tab":"Otwórz w nowej zakładce","Open link in new tab":"Otwórz odnośnik w nowej zakładce","This link has no URL":"Nie podano adresu URL odnośnika",Unlink:"Usuń odnośnik"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.pl=e.pl||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"Lista wypunktowana","Bulleted list styles toolbar":"",Circle:"",Decimal:"","Decimal with leading zero":"",Disc:"","Lower-latin":"","Lower–roman":"","Numbered List":"Lista numerowana","Numbered list styles toolbar":"",Square:"","To-do List":"Lista rzeczy do zrobienia","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(o){const i=o.pl=o.pl||{};i.dictionary=Object.assign(i.dictionary||{},{"Remove Format":"Usuń formatowanie"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.pl=i.pl||{};n.dictionary=Object.assign(n.dictionary||{},{Source:"Źródło"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const o=e.pl=e.pl||{};o.dictionary=Object.assign(o.dictionary||{},{"Align cell text to the bottom":"Wyrównaj tekst w komórce do dołu","Align cell text to the center":"Wyrównaj tekst w komórce do środka","Align cell text to the left":"Wyrównaj tekst w komórce do lewej","Align cell text to the middle":"Wyrównaj tekst w komórce do środka","Align cell text to the right":"Wyrównaj tekst w komórce do prawej","Align cell text to the top":"Wyrównaj tekst w komórce do góry","Align table to the left":"Wyrównaj tabelę do lewej","Align table to the right":"Wyrównaj tabelę do prawej",Alignment:"Wyrównanie",Background:"Tło",Border:"Obramowanie","Cell properties":"Właściwości komórki","Center table":"Wyrównaj tabelę do środka",Color:"Kolor","Color picker":"Wybór koloru",Column:"Kolumna",Dashed:"Kreskowane","Delete column":"Usuń kolumnę","Delete row":"Usuń wiersz",Dimensions:"Wymiary",Dotted:"Kropkowane",Double:"Podwójne","Enter table caption":"Wprowadź podpis tabeli",Groove:"Wklęsłe","Header column":"Kolumna nagłówka","Header row":"Wiersz nagłówka",Height:"Wysokość","Horizontal text alignment toolbar":"Pasek narzędzi wyrównania tekstu w poziomie","Insert column left":"Wstaw kolumnę z lewej","Insert column right":"Wstaw kolumnę z prawej","Insert row above":"Wstaw wiersz ponad","Insert row below":"Wstaw wiersz poniżej","Insert table":"Wstaw tabelę",Inset:"Zapadnięte","Justify cell text":"Wyjustuj tekst komórki","Merge cell down":"Scal komórkę w dół","Merge cell left":"Scal komórkę w lewo","Merge cell right":"Scal komórkę w prawo","Merge cell up":"Scal komórkę w górę","Merge cells":"Scal komórki",None:"Brak",Outset:"Wysunięte",Padding:"Dopełnienie",Ridge:"Wypukłe",Row:"Wiersz","Select column":"Zaznacz kolumnę","Select row":"Zaznacz wiersz",Solid:"Ciągłe","Split cell horizontally":"Podziel komórkę poziomo","Split cell vertically":"Podziel komórkę pionowo",Style:"Styl","Table alignment toolbar":"Pasek narzędzi wyrównania tabeli","Table cell text alignment":"Wyrównanie tekstu komórki tabeli","Table properties":"Właściwości tabeli","Table toolbar":"Pasek narzędzi tabel",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':'Kolor jest niepoprawny. Spróbuj wpisać "#FF0000", "rgb(255,0,0)" lub "red".','The value is invalid. Try "10px" or "2em" or simply "2".':'Wartość jest niepoprawna. Spróbuj  wpisać "10px", "2em" lub po prostu "2".',"Toggle caption off":"Ukryj podpis tabeli","Toggle caption on":"Pokaż podpis tabeli","Vertical text alignment toolbar":"Pasek narzędzi wyrównania tekstu w pionie",Width:"Szerokość"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.pl=i.pl||{};n.dictionary=Object.assign(n.dictionary||{},{"HTML object":"Obiekt HTML"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(t){const a=t.pl=t.pl||{};a.dictionary=Object.assign(a.dictionary||{},{"Almost equal to":"",Angle:"","Approximately equal to":"","Asterisk operator":"","Austral sign":"Znak australa","back with leftwards arrow above":"","Bitcoin sign":"Znak bitcoina","Cedi sign":"Znak cedi","Cent sign":"Znak centa","Character categories":"Kategorie znaków","Colon sign":"Znak colona","Contains as member":"","Copyright sign":"","Cruzeiro sign":"Znak cruzeiro","Currency sign":"Znak waluty","Degree sign":"","Division sign":"","Dollar sign":"Znak dolara","Dong sign":"Znak donga","Double dagger":"","Double exclamation mark":"","Double low-9 quotation mark":"","Double question mark":"","downwards arrow to bar":"","downwards dashed arrow":"","downwards double arrow":"","Drachma sign":"Znak drachmy","Element of":"","Em dash":"","Empty set":"","En dash":"","end with leftwards arrow above":"","Euro sign":"Znak euro","Euro-currency sign":"Znak euro","Exclamation question mark":"","For all":"","Fraction slash":"","French franc sign":"Znak franka francuskiego","German penny sign":"Znak feniga","Greater-than or equal to":"","Greater-than sign":"","Guarani sign":"Znak guarani","Horizontal ellipsis":"","Hryvnia sign":"Znak hrywny","Identical to":"","Indian rupee sign":"Znak rupii indyjskiej",Infinity:"",Integral:"",Intersection:"","Inverted exclamation mark":"","Inverted question mark":"","Kip sign":"Znak kipa","Latin capital letter a with breve":"","Latin capital letter a with macron":"","Latin capital letter a with ogonek":"","Latin capital letter c with acute":"","Latin capital letter c with caron":"","Latin capital letter c with circumflex":"","Latin capital letter c with dot above":"","Latin capital letter d with caron":"","Latin capital letter d with stroke":"","Latin capital letter e with breve":"","Latin capital letter e with caron":"","Latin capital letter e with dot above":"","Latin capital letter e with macron":"","Latin capital letter e with ogonek":"","Latin capital letter eng":"","Latin capital letter g with breve":"","Latin capital letter g with cedilla":"","Latin capital letter g with circumflex":"","Latin capital letter g with dot above":"","Latin capital letter h with circumflex":"","Latin capital letter h with stroke":"","Latin capital letter i with breve":"","Latin capital letter i with dot above":"","Latin capital letter i with macron":"","Latin capital letter i with ogonek":"","Latin capital letter i with tilde":"","Latin capital letter j with circumflex":"","Latin capital letter k with cedilla":"","Latin capital letter l with acute":"","Latin capital letter l with caron":"","Latin capital letter l with cedilla":"","Latin capital letter l with middle dot":"","Latin capital letter l with stroke":"","Latin capital letter n with acute":"","Latin capital letter n with caron":"","Latin capital letter n with cedilla":"","Latin capital letter o with breve":"","Latin capital letter o with double acute":"","Latin capital letter o with macron":"","Latin capital letter r with acute":"","Latin capital letter r with caron":"","Latin capital letter r with cedilla":"","Latin capital letter s with acute":"","Latin capital letter s with caron":"","Latin capital letter s with cedilla":"","Latin capital letter s with circumflex":"","Latin capital letter t with caron":"","Latin capital letter t with cedilla":"","Latin capital letter t with stroke":"","Latin capital letter u with breve":"","Latin capital letter u with double acute":"","Latin capital letter u with macron":"","Latin capital letter u with ogonek":"","Latin capital letter u with ring above":"","Latin capital letter u with tilde":"","Latin capital letter w with circumflex":"","Latin capital letter y with circumflex":"","Latin capital letter y with diaeresis":"","Latin capital letter z with acute":"","Latin capital letter z with caron":"","Latin capital letter z with dot above":"","Latin capital ligature ij":"","Latin capital ligature oe":"","Latin small letter a with breve":"","Latin small letter a with macron":"","Latin small letter a with ogonek":"","Latin small letter c with acute":"","Latin small letter c with caron":"","Latin small letter c with circumflex":"","Latin small letter c with dot above":"","Latin small letter d with caron":"","Latin small letter d with stroke":"","Latin small letter dotless i":"","Latin small letter e with breve":"","Latin small letter e with caron":"","Latin small letter e with dot above":"","Latin small letter e with macron":"","Latin small letter e with ogonek":"","Latin small letter eng":"","Latin small letter f with hook":"","Latin small letter g with breve":"","Latin small letter g with cedilla":"","Latin small letter g with circumflex":"","Latin small letter g with dot above":"","Latin small letter h with circumflex":"","Latin small letter h with stroke":"","Latin small letter i with breve":"","Latin small letter i with macron":"","Latin small letter i with ogonek":"","Latin small letter i with tilde":"","Latin small letter j with circumflex":"","Latin small letter k with cedilla":"","Latin small letter kra":"","Latin small letter l with acute":"","Latin small letter l with caron":"","Latin small letter l with cedilla":"","Latin small letter l with middle dot":"","Latin small letter l with stroke":"","Latin small letter long s":"","Latin small letter n preceded by apostrophe":"","Latin small letter n with acute":"","Latin small letter n with caron":"","Latin small letter n with cedilla":"","Latin small letter o with breve":"","Latin small letter o with double acute":"","Latin small letter o with macron":"","Latin small letter r with acute":"","Latin small letter r with caron":"","Latin small letter r with cedilla":"","Latin small letter s with acute":"","Latin small letter s with caron":"","Latin small letter s with cedilla":"","Latin small letter s with circumflex":"","Latin small letter t with caron":"","Latin small letter t with cedilla":"","Latin small letter t with stroke":"","Latin small letter u with breve":"","Latin small letter u with double acute":"","Latin small letter u with macron":"","Latin small letter u with ogonek":"","Latin small letter u with ring above":"","Latin small letter u with tilde":"","Latin small letter w with circumflex":"","Latin small letter y with circumflex":"","Latin small letter z with acute":"","Latin small letter z with caron":"","Latin small letter z with dot above":"","Latin small ligature ij":"","Latin small ligature oe":"","Left double quotation mark":"","Left single quotation mark":"","Left-pointing double angle quotation mark":"","leftwards arrow to bar":"","leftwards dashed arrow":"","leftwards double arrow":"","Less-than or equal to":"","Less-than sign":"","Lira sign":"Znak liry","Livre tournois sign":"","Logical and":"","Logical or":"",Macron:"","Manat sign":"Znak manata","Mill sign":"","Minus sign":"","Multiplication sign":"","N-ary product":"","N-ary summation":"",Nabla:"","Naira sign":"Znak nairy","New sheqel sign":"Znak nowego szekla","Nordic mark sign":"Znak marki nordyckiej","Not an element of":"","Not equal to":"","Not sign":"","on with exclamation mark with left right arrow above":"",Overline:"","Paragraph sign":"","Partial differential":"","Per mille sign":"","Per ten thousand sign":"","Peseta sign":"Znak pesety","Peso sign":"Znak peso","Plus-minus sign":"","Pound sign":"Znak funta","Proportional to":"","Question exclamation mark":"","Registered sign":"","Reversed paragraph sign":"","Right double quotation mark":"","Right single quotation mark":"","Right-pointing double angle quotation mark":"","rightwards arrow to bar":"","rightwards dashed arrow":"","rightwards double arrow":"","Ruble sign":"Znak rubla","Rupee sign":"Znak rupii","Section sign":"","Single left-pointing angle quotation mark":"","Single low-9 quotation mark":"","Single right-pointing angle quotation mark":"","soon with rightwards arrow above":"","Special characters":"Znaki specjalne","Spesmilo sign":"","Square root":"","Tenge sign":"Znak tenge","There exists":"","Tilde operator":"","top with upwards arrow above":"","Trade mark sign":"","Tugrik sign":"Znak tugrika","Turkish lira sign":"Znak liry tureckiej","Two dot leader":"",Union:"","up down arrow with base":"","upwards arrow to bar":"","upwards dashed arrow":"","upwards double arrow":"","Vulgar fraction one half":"","Vulgar fraction one quarter":"","Vulgar fraction three quarters":"","Won sign":"Znak wona","Yen sign":"Znak jena"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(o){const e=o.pl=o.pl||{};e.dictionary=Object.assign(e.dictionary||{},{"%0 of %1":"%0 z %1",Aquamarine:"Akwamaryna",Black:"Czarny",Blue:"Niebieski",Cancel:"Anuluj","Dim grey":"Ciemnoszary","Dropdown toolbar":"Rozwijany pasek narzędzi","Edit block":"Edytuj blok","Editor toolbar":"Pasek narzędzi edytora",Green:"Zielony",Grey:"Szary","Insert paragraph after block":"Wstaw akapit po bloku","Insert paragraph before block":"Wstaw akapit przed blokiem","Light blue":"Jasnoniebieski","Light green":"Jasnozielony","Light grey":"Jasnoszary",Next:"Następny",Orange:"Pomarańczowy",Previous:"Poprzedni",Purple:"Purpurowy",Red:"Czerwony",Redo:"Ponów","Remove color":"Usuń kolor","Restore default":"Przywróć domyślne","Rich Text Editor":"Edytor tekstu sformatowanego","Rich Text Editor, %0":"Edytor tekstu sformatowanego, %0",Save:"Zapisz","Select all":"Zaznacz wszystko","Show more items":"Pokaż więcej",Turquoise:"Turkusowy",Undo:"Cofnij","Upload in progress":"Trwa przesyłanie",White:"Biały","Widget toolbar":"Pasek widgetów",Yellow:"Żółty"}),e.getPluralForm=function(o){return 1==o?0:o%10>=2&&o%10<=4&&(o%100<12||o%100>14)?1:1!=o&&o%10>=0&&o%10<=1||o%10>=5&&o%10<=9||o%100>=12&&o%100<=14?2:3}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/pt-br.js b/core/assets/vendor/ckeditor5/translations/pt-br.js
new file mode 100644
index 000000000000..6603bb870fe9
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/pt-br.js
@@ -0,0 +1 @@
+!function(t){const i=t["pt-br"]=t["pt-br"]||{};i.dictionary=Object.assign(i.dictionary||{},{"Align center":"Centralizar","Align left":"Alinhar à esquerda","Align right":"Alinhar à direita",Justify:"Justificar","Text alignment":"Alinhamento do texto","Text alignment toolbar":"Ferramentas de alinhamento de texto"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const o=i["pt-br"]=i["pt-br"]||{};o.dictionary=Object.assign(o.dictionary||{},{Bold:"Negrito",Code:"Código",Italic:"Itálico",Strikethrough:"Tachado",Subscript:"Subscrito",Superscript:"Sobrescrito",Underline:"Sublinhado"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(o){const i=o["pt-br"]=o["pt-br"]||{};i.dictionary=Object.assign(i.dictionary||{},{"Block quote":"Bloco de citação"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(o){const t=o["pt-br"]=o["pt-br"]||{};t.dictionary=Object.assign(t.dictionary||{},{"Choose heading":"Escolha o título",Heading:"Titulo","Heading 1":"Título 1","Heading 2":"Título 2","Heading 3":"Título 3","Heading 4":"Título 4","Heading 5":"Título 5","Heading 6":"Título 6",Paragraph:"Parágrafo","Type or paste your content here.":"Digite ou cole o conteúdo aqui.","Type your title":"Digite o título"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i["pt-br"]=i["pt-br"]||{};n.dictionary=Object.assign(n.dictionary||{},{"Horizontal line":"Linha horizontal"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const a=e["pt-br"]=e["pt-br"]||{};a.dictionary=Object.assign(a.dictionary||{},{"Break text":"","Centered image":"Imagem centralizada","Change image text alternative":"Alterar texto alternativo da imagem","Enter image caption":"Inserir legenda da imagem","Full size image":"Imagem completa","Image resize list":"Lista de redimensionamento de imagem","Image toolbar":"Ferramentas de Imagem","image widget":"Ferramenta de imagem","In line":"",Insert:"Inserir","Insert image":"Inserir imagem","Insert image via URL":"Inserir imagem via URL","Left aligned image":"Imagem alinhada à esquerda",Original:"Original","Resize image":"Redimensionar imagem","Resize image to %0":"Redimensionar a imagem para 0%","Resize image to the original size":"Redimensionar a imagem para o tamanho original","Right aligned image":"Imagem alinhada à direita","Side image":"Imagem lateral","Text alternative":"Texto alternativo",Update:"Atualizar","Update image URL":"","Upload failed":"Falha ao subir arquivo","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n["pt-br"]=n["pt-br"]||{};i.dictionary=Object.assign(i.dictionary||{},{"Decrease indent":"Diminuir indentação","Increase indent":"Aumentar indentação"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n["pt-br"]=n["pt-br"]||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"Pode ser baixado","Edit link":"Editar link",Link:"Link","Link image":"Link da imagem","Link URL":"URL","Open in a new tab":"Abrir em nova aba","Open link in new tab":"Abrir link em nova aba","This link has no URL":"Este link não possui uma URL",Unlink:"Remover link"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e["pt-br"]=e["pt-br"]||{};t.dictionary=Object.assign(t.dictionary||{},{"Bulleted List":"Lista com marcadores","Bulleted list styles toolbar":"Barra de ferramentas de estilos de lista com marcador",Circle:"Círculo",Decimal:"Decimal","Decimal with leading zero":"Decimal com zero à esquerda",Disc:"Disco","Lower-latin":"Latim inferior","Lower–roman":"Romano inferior","Numbered List":"Lista numerada","Numbered list styles toolbar":"Barra de ferramentas de estilos de lista numerada",Square:"Quadrado","To-do List":"Lista de Tarefas","Toggle the circle list style":"Alternar o estilo da lista de círculo","Toggle the decimal list style":"Alternar o estilo de lista decimal","Toggle the decimal with leading zero list style":"Alternar o decimal com estilo de lista zero à esquerda","Toggle the disc list style":"Alternar o estilo da lista de disco","Toggle the lower–latin list style":"Alternar o estilo de lista latina inferior","Toggle the lower–roman list style":"Alternar o estilo de lista romana inferior","Toggle the square list style":"Alternar o estilo de lista quadrada","Toggle the upper–latin list style":"Alternar o estilo de lista latino superior","Toggle the upper–roman list style":"Alternar o estilo de lista romana superior","Upper-latin":"Latim superior","Upper-roman":"Romano superior"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(o){const t=o["pt-br"]=o["pt-br"]||{};t.dictionary=Object.assign(t.dictionary||{},{"Remove Format":"Remover Formatação"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const a=e["pt-br"]=e["pt-br"]||{};a.dictionary=Object.assign(a.dictionary||{},{"Align cell text to the bottom":"Alinhar texto da célula para baixo","Align cell text to the center":"Alinhar texto da célula centralizado","Align cell text to the left":"Alinhar texto da célula para a esquerda","Align cell text to the middle":"Alinhar texto da célula para o meio","Align cell text to the right":"Alinhar texto da célula para a direita","Align cell text to the top":"Alinhar texto da célula para o topo","Align table to the left":"Alinhar tabela para esquerda","Align table to the right":"Alinhar tabela para direita",Alignment:"Alinhamento",Background:"Cor de fundo",Border:"Borda","Cell properties":"Propriedades da célula","Center table":"Centralizar tabela",Color:"Cor","Color picker":"Seletor de cor",Column:"Coluna",Dashed:"Tracejada","Delete column":"Excluir coluna","Delete row":"Excluir linha",Dimensions:"Dimensões",Dotted:"Pontilhada",Double:"Dupla","Enter table caption":"",Groove:"Ranhura","Header column":"Coluna de cabeçalho","Header row":"Linha de cabeçalho",Height:"Altura","Horizontal text alignment toolbar":"Ferramentas de alinhamento horizontal do texto","Insert column left":"Inserir coluna à esquerda","Insert column right":"Inserir coluna à direita","Insert row above":"Inserir linha acima","Insert row below":"Inserir linha abaixo","Insert table":"Inserir tabela",Inset:"Baixo relevo","Justify cell text":"Justificar texto da célula","Merge cell down":"Mesclar abaixo","Merge cell left":"Mesclar à esquerda","Merge cell right":"Mesclar à direita","Merge cell up":"Mesclar acima","Merge cells":"Mesclar células",None:"Sem borda",Outset:"Alto relevo",Padding:"Margem interna",Ridge:"Crista",Row:"Linha","Select column":"Selecionar coluna","Select row":"Selecionar linha",Solid:"Sólida","Split cell horizontally":"Dividir horizontalmente","Split cell vertically":"Dividir verticalmente",Style:"Estilo","Table alignment toolbar":"Ferramentas de alinhamento da tabela","Table cell text alignment":"Alinhamento do texto na célula","Table properties":"Propriedades da tabela","Table toolbar":"Ferramentas de Tabela",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':'Cor inválida. Tente "#FF0000" ou "rgb(255,0,0)" ou "red"','The value is invalid. Try "10px" or "2em" or simply "2".':'Valor inválido. Tente "10px" ou "2em" ou apenas "2"',"Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"Ferramentas de alinhamento vertical do texto",Width:"Largura"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(a){const o=a["pt-br"]=a["pt-br"]||{};o.dictionary=Object.assign(o.dictionary||{},{"Almost equal to":"Quase igual a",Angle:"Ângulo","Approximately equal to":"Aproximadamente igual a","Asterisk operator":"Operador asterisco","Austral sign":"Símbolo de Austral","back with leftwards arrow above":"volta com a seta esquerda acima","Bitcoin sign":"Símbolo do Bitcoin","Cedi sign":"Símbolo de Cedi","Cent sign":"Símbolo de Centavo","Character categories":"Categoria de caracteres","Colon sign":"Sinal de dois pontos","Contains as member":"Contém como membro","Copyright sign":"Símbolo de direitos reservados","Cruzeiro sign":"Símbolo do Cruzeiro","Currency sign":"Símbolo de moeda","Degree sign":"Sinal de grau","Division sign":"Sinal de divisão","Dollar sign":"Símbolo do dólar","Dong sign":"Símbolo do Dong","Double dagger":"Adaga dupla","Double exclamation mark":"Sinal do ponto de exclamação duplo","Double low-9 quotation mark":"Aspas duplas baixas simples","Double question mark":"Ponto de interrogação duplo","downwards arrow to bar":"seta para baixo para barra","downwards dashed arrow":"Seta tracejada para baixo","downwards double arrow":"Seta dupla para baixo","Drachma sign":"Sinal de Dracma","Element of":"Elemento de","Em dash":"Travessão","Empty set":"Conjunto vazio","En dash":"Traço","end with leftwards arrow above":"termina com a seta esquerda acima","Euro sign":"Símbolo do Euro","Euro-currency sign":"Símbolo da Moeda do Euro","Exclamation question mark":"Ponto de exclamação","For all":"Para todos","Fraction slash":"Barra de fração","French franc sign":"Símbolo do Franco Francês","German penny sign":"Símbolo do Centavo Alemão","Greater-than or equal to":"Maior que ou igual a","Greater-than sign":"Sinal maior que","Guarani sign":"Símbolo de Guarani","Horizontal ellipsis":"Elipse horizontal","Hryvnia sign":"Símbolo de Hryvnia","Identical to":"Idêntico a","Indian rupee sign":"Símbolo da Rupia Indiana",Infinity:"Infinito",Integral:"Integral",Intersection:"Interseção","Inverted exclamation mark":"Ponto de exclamação invertido","Inverted question mark":"Ponto de interrogação invertido","Kip sign":"Símbolo do Kip","Latin capital letter a with breve":"Símbolo latim maiúsculo A com breve","Latin capital letter a with macron":"Símbolo latim maiúsculo A com macron","Latin capital letter a with ogonek":"Símbolo latim maiúsculo A com ogonek","Latin capital letter c with acute":"Símbolo latim maiúsculo C com acento agudo","Latin capital letter c with caron":"Símbolo latim maiúsculo C com caron","Latin capital letter c with circumflex":"Símbolo latim maiúsculo C com acento circunflexo","Latin capital letter c with dot above":"Símbolo latim maiúsculo C com ponto acima","Latin capital letter d with caron":"Símbolo latim maiúsculo D com caron","Latin capital letter d with stroke":"Símbolo latin maiúsculo D com um traçado vertical","Latin capital letter e with breve":"Símbolo latim maiúsculo E com breve","Latin capital letter e with caron":"Símbolo latim maiúsculo E com caron","Latin capital letter e with dot above":"Símbolo latim maiúsculo E com ponto acima","Latin capital letter e with macron":"Símbolo latim maiúsculo E com macron","Latin capital letter e with ogonek":"Símbolo latim maiúsculo E com ogonek","Latin capital letter eng":"Símbolo latim maiúsculo Eng","Latin capital letter g with breve":"Símbolo latim maiúsculo G com breve","Latin capital letter g with cedilla":"Símbolo latim maiúsculo G com cedilha","Latin capital letter g with circumflex":"Símbolo latim maiúsculo G com acento circunflexo","Latin capital letter g with dot above":"Símbolo latim maiúsculo G com ponto acima","Latin capital letter h with circumflex":"Símbolo latim maiúsculo H com acento circunflexo","Latin capital letter h with stroke":"Símbolo latin maiúsculo H com um traçado vertical","Latin capital letter i with breve":"Símbolo latim maiúsculo I com breve","Latin capital letter i with dot above":"Símbolo latim maiúsculo I com ponto acima","Latin capital letter i with macron":"Símbolo latim maiúsculo I com macron","Latin capital letter i with ogonek":"Símbolo latim maiúsculo I com ogonek","Latin capital letter i with tilde":"Símbolo latim maiúsculo I com til","Latin capital letter j with circumflex":"Símbolo latim maiúsculo J com acento circunflexo","Latin capital letter k with cedilla":"Símbolo latim maiúsculo K com cedilha","Latin capital letter l with acute":"Símbolo latim maiúsculo l com acento agudo","Latin capital letter l with caron":"Símbolo latim maiúsculo I com caron","Latin capital letter l with cedilla":"Símbolo latim maiúsculo L com cedilha","Latin capital letter l with middle dot":"Símbolo latin maiúsculo L com ponto no meio","Latin capital letter l with stroke":"Símbolo latin maiúsculo L com um traçado vertical","Latin capital letter n with acute":"Símbolo latim maiúsculo N com acento agudo","Latin capital letter n with caron":"Símbolo latim maiúsculo N com caron","Latin capital letter n with cedilla":"Símbolo latim maiúsculo N com cedilha","Latin capital letter o with breve":"Símbolo latim maiúsculo O com breve","Latin capital letter o with double acute":"Símbolo latim maiúsculo O com acento agudo duplo","Latin capital letter o with macron":"Símbolo latim maiúsculo I com macron","Latin capital letter r with acute":"Símbolo latim maiúsculo R com acento agudo","Latin capital letter r with caron":"Símbolo latim maiúsculo R com caron","Latin capital letter r with cedilla":"Símbolo latim maiúsculo R com cedilha","Latin capital letter s with acute":"Símbolo latim maiúsculo S com acento agudo","Latin capital letter s with caron":"Símbolo latim maiúsculo S com caron","Latin capital letter s with cedilla":"Símbolo latim maiúsculo S com cedilha","Latin capital letter s with circumflex":"Símbolo latim maiúsculo S com acento circunflexo","Latin capital letter t with caron":"Símbolo latim maiúsculo T com caron","Latin capital letter t with cedilla":"Símbolo latim maiúsculo T com cedilha","Latin capital letter t with stroke":"Símbolo latin maiúsculo T com um traçado vertical","Latin capital letter u with breve":"Símbolo latim maiúsculo U com breve","Latin capital letter u with double acute":"Símbolo latim maiúsculo U com acento agudo duplo","Latin capital letter u with macron":"Símbolo latim maiúsculo I com macron","Latin capital letter u with ogonek":"Símbolo latim maiúsculo U com ogonek","Latin capital letter u with ring above":"Símbolo latim maiúsculo U com anel acima","Latin capital letter u with tilde":"Símbolo latim maiúsculo U com til","Latin capital letter w with circumflex":"Símbolo latim maiúsculo W com acento circunflexo","Latin capital letter y with circumflex":"Símbolo latim maiúsculo Y com acento circunflexo","Latin capital letter y with diaeresis":"Símbolo latim maiúsculo Z com trema","Latin capital letter z with acute":"Símbolo latim maiúsculo Z com acento agudo","Latin capital letter z with caron":"Símbolo latim maiúsculo Z com caron","Latin capital letter z with dot above":"Símbolo latim maiúsculo Z com ponto acima","Latin capital ligature ij":"Símbolo latin maiúsculo ligadura IJ","Latin capital ligature oe":"Símbolo latin maiúsculo ligadura OE","Latin small letter a with breve":"Símbolo latim minúsculo A com breve","Latin small letter a with macron":"Símbolo latim minúsculo A com macron","Latin small letter a with ogonek":"Símbolo latim minúsculo A com ogonek","Latin small letter c with acute":"Símbolo latim minúsculo C com acento agudo","Latin small letter c with caron":"Símbolo latim minúsculo C com caron","Latin small letter c with circumflex":"Símbolo latim minúsculo C com acento circunflexo","Latin small letter c with dot above":"Símbolo latim minúsculo C com ponto acima","Latin small letter d with caron":"Símbolo latim minúsculo D com caron","Latin small letter d with stroke":"Símbolo latin minúsculo D com um traçado vertical","Latin small letter dotless i":"Símbolo latin sem ponto I","Latin small letter e with breve":"Símbolo latim minúsculo E com breve","Latin small letter e with caron":"Símbolo latim minúsculo E com caron","Latin small letter e with dot above":"Símbolo latim minúsculo E com ponto acima","Latin small letter e with macron":"Símbolo latim minúsculo E com macron","Latin small letter e with ogonek":"Símbolo latim minúsculo E com ogonek","Latin small letter eng":"Símbolo latim minúsculo Eng","Latin small letter f with hook":"Símbolo latim minúsculo F com gancho","Latin small letter g with breve":"Símbolo latim minúsculo G com breve","Latin small letter g with cedilla":"Símbolo latim minúsculo G com cedilha","Latin small letter g with circumflex":"Símbolo latim minúsculo G com acento circunflexo","Latin small letter g with dot above":"Símbolo latim minúsculo G com ponto acima","Latin small letter h with circumflex":"Símbolo latim minúsculo H com acento circunflexo","Latin small letter h with stroke":"Símbolo latin minúsculo H com um traçado vertical","Latin small letter i with breve":"Símbolo latim minúsculo I com breve","Latin small letter i with macron":"Símbolo latim minúsculo I com macron","Latin small letter i with ogonek":"Símbolo latim minúsculo I com ogonek","Latin small letter i with tilde":"Símbolo latim minúsculo I com til","Latin small letter j with circumflex":"Símbolo latim minúsculo J com acento circunflexo","Latin small letter k with cedilla":"Símbolo latim minúsculo K com cedilha","Latin small letter kra":"Símbolo latin minúsculo K","Latin small letter l with acute":"Símbolo latim minúsculo I com acento agudo","Latin small letter l with caron":"Símbolo latim minúsculo I com caron","Latin small letter l with cedilla":"Símbolo latim minúsculo L com cedilha","Latin small letter l with middle dot":"Símbolo latin minúsculo L com ponto no meio","Latin small letter l with stroke":"Símbolo latin minúsculo L com um traçado vertical","Latin small letter long s":"Símbolo latim minúsculo long s","Latin small letter n preceded by apostrophe":"Símbolo latim minúsculo N precedido por apóstrofe","Latin small letter n with acute":"Símbolo latim minúsculo N com acento agudo","Latin small letter n with caron":"Símbolo latim minúsculo N com caron","Latin small letter n with cedilla":"Símbolo latim minúsculo N com cedilha","Latin small letter o with breve":"Símbolo latim minúsculo O com breve","Latin small letter o with double acute":"Símbolo latim minúsculo O com acento agudo duplo","Latin small letter o with macron":"Símbolo latim minúsculo O com macron","Latin small letter r with acute":"Símbolo latim minúsculo R com acento agudo","Latin small letter r with caron":"Símbolo latim minúsculo R com caron","Latin small letter r with cedilla":"Símbolo latim minúsculo R com cedilha","Latin small letter s with acute":"Símbolo latim minúsculo S com acento agudo","Latin small letter s with caron":"Símbolo latim minúsculo S com caron","Latin small letter s with cedilla":"Símbolo latim minúsculo S com cedilha","Latin small letter s with circumflex":"Símbolo latim minúsculo S com acento circunflexo","Latin small letter t with caron":"Símbolo latim minúsculo T com caron","Latin small letter t with cedilla":"Símbolo latim minúsculo T com cedilha","Latin small letter t with stroke":"Símbolo latin minúsculo T com um traçado vertical","Latin small letter u with breve":"Símbolo latim minúsculo U com breve","Latin small letter u with double acute":"Símbolo latim minúsculo U com acento agudo","Latin small letter u with macron":"Símbolo latim minúsculo U com macron","Latin small letter u with ogonek":"Símbolo latim minúsculo U com ogonek","Latin small letter u with ring above":"Símbolo latim minúsculo U com anel acima","Latin small letter u with tilde":"Símbolo latim minúsculo U com til","Latin small letter w with circumflex":"Símbolo latim minúsculo W com acento circunflexo","Latin small letter y with circumflex":"Símbolo latim minúsculo Y com acento circunflexo","Latin small letter z with acute":"Símbolo latim minúsculo Z com acento agudo","Latin small letter z with caron":"Símbolo latim minúsculo Z com caron","Latin small letter z with dot above":"Símbolo latim minúsculo Z com ponto acima","Latin small ligature ij":"Símbolo latin minúsculo ligadura IJ","Latin small ligature oe":"Símbolo latin minúsculo ligadura OE","Left double quotation mark":"Aspas dupla esquerda","Left single quotation mark":"Aspas simples esquerda","Left-pointing double angle quotation mark":"Aspas angulares duplas esquerda","leftwards arrow to bar":"seta para a esquerda para barra","leftwards dashed arrow":"Seta tracejada para esquerda","leftwards double arrow":"Seta dupla para esquerda","Less-than or equal to":"Menor que ou igual a","Less-than sign":"Sinal menor que","Lira sign":"Símbolo da Lira","Livre tournois sign":"Símbolo de Livre tournois","Logical and":"Operador lógico AND","Logical or":"Operador lógico OR",Macron:"Macron","Manat sign":"Símbolo do Manat","Mill sign":"Símbolo de Mill","Minus sign":"Sinal de menos","Multiplication sign":"Sinal de multiplicação","N-ary product":"Símbolo Produto N-ário","N-ary summation":"Somatório",Nabla:"Nabla","Naira sign":"Símbolo de Naira","New sheqel sign":"Símbolo do Novo Sheqel","Nordic mark sign":"Símbolo da Marca Nórdica","Not an element of":"Não é um elemento de","Not equal to":"Diferente de","Not sign":"Sinal de não","on with exclamation mark with left right arrow above":"com ponto de exclamação com a seta esquerda direita acima",Overline:"Sobrepor","Paragraph sign":"Símbolo de parágrafo","Partial differential":"Diferencial parcial","Per mille sign":"Símbolo de por 1 mil","Per ten thousand sign":"Símbolo de por 10 mil","Peseta sign":"Símbolo de Peseta","Peso sign":"Sinal de Peso","Plus-minus sign":"Sinal de mais ou menos","Pound sign":"Símbolo de Libra","Proportional to":"Proporcional a","Question exclamation mark":"Ponto de interrogação","Registered sign":"Símbolo de registrado","Reversed paragraph sign":"Símbolo de parágrafo reverso","Right double quotation mark":"Aspas dupla direita","Right single quotation mark":"Aspas simples direita","Right-pointing double angle quotation mark":"Aspas angulares duplas direita","rightwards arrow to bar":"seta para a direita para barra","rightwards dashed arrow":"Seta tracejada para direita","rightwards double arrow":"Seta dupla para direita","Ruble sign":"Símbolo do Rublo Russo","Rupee sign":"Símbolo da Rupia","Section sign":"Símbolo de seleção","Single left-pointing angle quotation mark":"Aspas angulares simples esquerda","Single low-9 quotation mark":"Aspas baixas simples","Single right-pointing angle quotation mark":"Aspas angulares simples direita","soon with rightwards arrow above":"Símbolo soon com a seta para a direita acima","Special characters":"Caracteres especiais","Spesmilo sign":"Símbolo do Spesmilo","Square root":"Raiz quadrada","Tenge sign":"Símbolo do Tenge","There exists":"Existe","Tilde operator":"Operador til","top with upwards arrow above":"Símbolo topo com a seta para cima acima","Trade mark sign":"Símbolo de marca registrada","Tugrik sign":"Símbolo de Tugrik","Turkish lira sign":"Símbolo da Lira Turca","Two dot leader":"Dois pontos",Union:"União","up down arrow with base":"seta para baixo com base","upwards arrow to bar":"seta para cima para barra","upwards dashed arrow":"Seta tracejada para cima","upwards double arrow":"Seta dupla para cima","Vulgar fraction one half":"Fração um meio","Vulgar fraction one quarter":"Fração um quarto","Vulgar fraction three quarters":"Fração três quartos","Won sign":"Símbolo do Won","Yen sign":"Símbolo do Yen"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(r){const e=r["pt-br"]=r["pt-br"]||{};e.dictionary=Object.assign(e.dictionary||{},{"%0 of %1":"%0 de %1",Aquamarine:"Água-marinha",Black:"Preto",Blue:"Azul",Cancel:"Cancelar","Dim grey":"Cinza escuro","Dropdown toolbar":"Barra de Ferramentas da Lista Suspensa","Edit block":"Editor de bloco","Editor toolbar":"Ferramentas do Editor",Green:"Verde",Grey:"Cinza","Insert paragraph after block":"Inserir parágrafo após o bloco","Insert paragraph before block":"Inserir parágrafo antes do bloco","Light blue":"Azul claro","Light green":"Verde claro","Light grey":"Cinza claro",Next:"Próximo",Orange:"Laranja",Previous:"Anterior",Purple:"Púrpura",Red:"Vermelho",Redo:"Refazer","Remove color":"Remover cor","Restore default":"","Rich Text Editor":"Editor de Formatação","Rich Text Editor, %0":"Editor de Formatação, %0",Save:"Salvar","Select all":"Selecionar tudo","Show more items":"Exibir mais itens",Turquoise:"Turquesa",Undo:"Desfazer","Upload in progress":"Enviando dados",White:"Branco","Widget toolbar":"Ferramentas de Widgets",Yellow:"Amarelo"}),e.getPluralForm=function(r){return r>1}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/pt.js b/core/assets/vendor/ckeditor5/translations/pt.js
new file mode 100644
index 000000000000..9339e80932db
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/pt.js
@@ -0,0 +1 @@
+!function(t){const n=t.pt=t.pt||{};n.dictionary=Object.assign(n.dictionary||{},{"Align center":"Alinhar ao centro","Align left":"Alinhar à esquerda","Align right":"Alinhar à direita",Justify:"Justificar","Text alignment":"Alinhamento de texto","Text alignment toolbar":"Ferramentas de alinhamento de texto"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const t=i.pt=i.pt||{};t.dictionary=Object.assign(t.dictionary||{},{Bold:"Negrito",Code:"Código",Italic:"Itálico",Strikethrough:"",Subscript:"",Superscript:"",Underline:""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(a){const e=a.pt=a.pt||{};e.dictionary=Object.assign(e.dictionary||{},{"Choose heading":"",Heading:"Cabeçalho","Heading 1":"Cabeçalho 1","Heading 2":"Cabeçalho 2","Heading 3":"Cabeçalho 3","Heading 4":"","Heading 5":"","Heading 6":"",Paragraph:"Parágrafo","Type or paste your content here.":"","Type your title":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const a=e.pt=e.pt||{};a.dictionary=Object.assign(a.dictionary||{},{"Break text":"","Centered image":"Imagem centrada","Change image text alternative":"","Enter image caption":"Indicar legenda da imagem","Full size image":"Imagem em tamanho completo","Image resize list":"","Image toolbar":"","image widget":"módulo de imagem","In line":"",Insert:"","Insert image":"Inserir imagem","Insert image via URL":"","Left aligned image":"",Original:"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Right aligned image":"","Side image":"Imagem lateral","Text alternative":"Texto alternativo",Update:"","Update image URL":"","Upload failed":"Falha ao carregar","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.pt=i.pt||{};n.dictionary=Object.assign(n.dictionary||{},{Downloadable:"","Edit link":"",Link:"Hiperligação","Link image":"","Link URL":"URL da ligação","Open in a new tab":"","Open link in new tab":"","This link has no URL":"",Unlink:"Desligar"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e.pt=e.pt||{};t.dictionary=Object.assign(t.dictionary||{},{"Bulleted List":"Lista não ordenada","Bulleted list styles toolbar":"",Circle:"",Decimal:"","Decimal with leading zero":"",Disc:"","Lower-latin":"","Lower–roman":"","Numbered List":"Lista ordenada","Numbered list styles toolbar":"",Square:"","To-do List":"","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const o=e.pt=e.pt||{};o.dictionary=Object.assign(o.dictionary||{},{"%0 of %1":"",Aquamarine:"",Black:"",Blue:"",Cancel:"Cancelar","Dim grey":"","Dropdown toolbar":"","Edit block":"","Editor toolbar":"",Green:"",Grey:"","Light blue":"","Light green":"","Light grey":"",Next:"",Orange:"",Previous:"",Purple:"",Red:"",Redo:"Refazer","Remove color":"","Restore default":"","Rich Text Editor":"Editor de texto avançado","Rich Text Editor, %0":"Editor de texto avançado, %0",Save:"Guardar","Show more items":"",Turquoise:"",Undo:"Desfazer",White:"",Yellow:""}),o.getPluralForm=function(e){return 1!=e}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/ro.js b/core/assets/vendor/ckeditor5/translations/ro.js
new file mode 100644
index 000000000000..82d9e6e35fc4
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/ro.js
@@ -0,0 +1 @@
+!function(i){const n=i.ro=i.ro||{};n.dictionary=Object.assign(n.dictionary||{},{"Align center":"Aliniază la centru","Align left":"Aliniază la stânga","Align right":"Aliniază la dreapta",Justify:"Aliniază stânga-dreapta","Text alignment":"Aliniere text","Text alignment toolbar":"Bara aliniere text"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.ro=i.ro||{};n.dictionary=Object.assign(n.dictionary||{},{Bold:"Îngroșat",Code:"Cod",Italic:"Cursiv",Strikethrough:"Tăiere text cu o linie",Subscript:"Indice",Superscript:"Exponent",Underline:"Subliniat"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(o){const i=o.ro=o.ro||{};i.dictionary=Object.assign(i.dictionary||{},{"Block quote":"Bloc citat"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const t=i.ro=i.ro||{};t.dictionary=Object.assign(t.dictionary||{},{"Choose heading":"Alege titlu",Heading:"Titlu","Heading 1":"Titlu 1","Heading 2":"Titlu 2","Heading 3":"Titlu 3","Heading 4":"Titlu 4","Heading 5":"Titlu 5","Heading 6":"Titlu 6",Paragraph:"Paragraf","Type or paste your content here.":"Scrie sau inserează aici conținutul tău","Type your title":"Scrie titlul tău"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.ro=i.ro||{};n.dictionary=Object.assign(n.dictionary||{},{"Horizontal line":"Linie orizontală"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const e=i.ro=i.ro||{};e.dictionary=Object.assign(e.dictionary||{},{"Break text":"","Centered image":"Imagine aliniată pe centru","Change image text alternative":"Schimbă textul alternativ al imaginii","Enter image caption":"Introdu titlul descriptiv al imaginii","Full size image":"Imagine mărime completă","Image resize list":"Lista cu mărimi de redimensionare","Image toolbar":"Bară imagine","image widget":"widget imagine","In line":"",Insert:"Inserează","Insert image":"Inserează imagine","Insert image via URL":"Inserează o imagine via URL","Left aligned image":"Imagine aliniată la stânga",Original:"Original","Resize image":"Redimensionează imaginea","Resize image to %0":"Redimensionează imaginea la %0","Resize image to the original size":"Redimensionează imaginea la mărimea originală","Right aligned image":"Imagine aliniată la dreapta","Side image":"Imagine laterală","Text alternative":"Text alternativ",Update:"Actualizează","Update image URL":"Actualizează o imagine via URL","Upload failed":"Încărcare eșuată","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const e=n.ro=n.ro||{};e.dictionary=Object.assign(e.dictionary||{},{"Decrease indent":"Micșorează indent","Increase indent":"Mărește indent"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(a){const e=a.ro=a.ro||{};e.dictionary=Object.assign(e.dictionary||{},{"Choose language":"Alege limba",Language:"Limbă","Remove language":"Șterge limba"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.ro=n.ro||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"Descărcabil","Edit link":"Modifică link",Link:"Link","Link image":"Link imagine","Link URL":"Link URL","Open in a new tab":"Deschide în tab nou","Open link in new tab":"Deschide link în tab nou","This link has no URL":"Acest link nu are niciun URL",Unlink:"Șterge link"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(t){const i=t.ro=t.ro||{};i.dictionary=Object.assign(i.dictionary||{},{"Bulleted List":"Listă cu puncte","Bulleted list styles toolbar":"Toolbar Listă cu puncte",Circle:"Cerc",Decimal:"Număr","Decimal with leading zero":"Număr cu zero la început ",Disc:"Disc","Lower-latin":"Litere mici latine","Lower–roman":"Litere mici romane","Numbered List":"Listă numerotată","Numbered list styles toolbar":"Toolbar Listă numerotată",Square:"Pătrat","To-do List":"Listă cu activități","Toggle the circle list style":"Comutați stilul la lista cu cercuri","Toggle the decimal list style":"Comutați stilul la lista cu numere","Toggle the decimal with leading zero list style":"Comutați stilul la lista cu numere cu zero la început","Toggle the disc list style":"Comutați stilul la lista cu discuri","Toggle the lower–latin list style":"Comutați stilul la lista cu litere mici latine","Toggle the lower–roman list style":"Comutați stilul la lista cu litere mici romane","Toggle the square list style":"Comutați stilul la lista cu pătrate","Toggle the upper–latin list style":"Comutați stilul la lista cu litere mari latine","Toggle the upper–roman list style":"Comutați stilul la lista cu litere mari romane","Upper-latin":"Litere mari latine","Upper-roman":"Litere mari romane"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(o){const i=o.ro=o.ro||{};i.dictionary=Object.assign(i.dictionary||{},{"Remove Format":"Șterge formatare"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.ro=e.ro||{};l.dictionary=Object.assign(l.dictionary||{},{"Align cell text to the bottom":"Alinează textul celulei jos","Align cell text to the center":"Alinează textul celulei la centru","Align cell text to the left":"Alinează textul celulei la stânga","Align cell text to the middle":"Alinează textul celulei la mijloc","Align cell text to the right":"Alinează textul celulei la dreapta","Align cell text to the top":"Alinează textul celulei sus","Align table to the left":"Alinează tabela la stânga","Align table to the right":"Alinează tabela la dreapta",Alignment:"Aliniere",Background:"Fundal",Border:"Bordură","Cell properties":"Proprietățile celulei","Center table":"Tabelă centrată",Color:"Culoare","Color picker":"Alegere culoare",Column:"Coloană",Dashed:"Linii întrerupte","Delete column":"Șterge coloană","Delete row":"Șterge rând",Dimensions:"Dimensiuni",Dotted:"Punctată",Double:"Dublă","Enter table caption":"Adaugă subtitlul tabelei",Groove:"Groove","Header column":"Antet coloană","Header row":"Rând antet",Height:"Înălțime","Horizontal text alignment toolbar":"Toolbar aliniere text orizontală","Insert column left":"Inserează coloană la stânga","Insert column right":"Inserează coloană la dreapta","Insert row above":"Inserează rând deasupra","Insert row below":"Inserează rând dedesubt","Insert table":"Inserează tabel",Inset:"Inserează","Justify cell text":"Textul celulei justify","Merge cell down":"Îmbină celula în jos","Merge cell left":"Îmbină celula la stânga","Merge cell right":"Îmbină celula la dreapta","Merge cell up":"Îmbină celula în sus","Merge cells":"Îmbină celulele",None:"Nimic",Outset:"Elimină",Padding:"Spațiere",Ridge:"Crestată",Row:"Rând","Select column":"Selectează coloana","Select row":"Selectează linia",Solid:"Solidă","Split cell horizontally":"Scindează celula pe orizontală","Split cell vertically":"Scindează celula pe verticală",Style:"Stil","Table alignment toolbar":"Toolbar aliniere tabelă","Table cell text alignment":"Alinierea textului celulei tabelei","Table properties":"Proprietățile tabelei","Table toolbar":"Bară tabel",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':'Culoarea este invalidă. Încearcă "#FF0000" sau "rgb(255,0,0)" sau "red".','The value is invalid. Try "10px" or "2em" or simply "2".':'Valoarea este invalidă. Încearcă "10px" sau "2em" sau simplu "2".',"Toggle caption off":"Dezactivați subtitlul","Toggle caption on":"Activați subtitlul","Vertical text alignment toolbar":"Toolbar aliniere text verticală",Width:"Lungime"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const r=e.ro=e.ro||{};r.dictionary=Object.assign(r.dictionary||{},{"%0 of %1":"%0 din %1",Aquamarine:"Acvamarin",Black:"Negru",Blue:"Albastru",Cancel:"Anulare","Dim grey":"Gri slab","Dropdown toolbar":"Bară listă opțiuni","Edit block":"Editează bloc","Editor toolbar":"Bară editor",Green:"Verde",Grey:"Gri","Insert paragraph after block":"Inserează un paragraf după bloc","Insert paragraph before block":"Inserează un paragraf înaintea blocului","Light blue":"Albastru deschis","Light green":"Verde deschis","Light grey":"Gri deschis",Next:"Înainte",Orange:"Portocaliu",Previous:"Înapoi",Purple:"Violet",Red:"Roșu",Redo:"Revenire","Remove color":"Șterge culoare","Restore default":"Reface la default","Rich Text Editor":"Editor de text","Rich Text Editor, %0":"Editor de text, %0",Save:"Salvare","Select all":"Selectează-le pe toate","Show more items":"Arată mai multe elemente",Turquoise:"Turcoaz",Undo:"Anulare","Upload in progress":"Încărcare în curs",White:"Alb","Widget toolbar":"Bară widget",Yellow:"Galben"}),r.getPluralForm=function(e){return 1==e?0:e%100>19||e%100==0&&0!=e?2:1}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/ru.js b/core/assets/vendor/ckeditor5/translations/ru.js
new file mode 100644
index 000000000000..d894fd48bbd6
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/ru.js
@@ -0,0 +1 @@
+!function(n){const i=n.ru=n.ru||{};i.dictionary=Object.assign(i.dictionary||{},{"Align center":"Выравнивание по центру","Align left":"Выравнивание по левому краю","Align right":"Выравнивание по правому краю",Justify:"Выравнивание по ширине","Text alignment":"Выравнивание текста","Text alignment toolbar":"Выравнивание"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.ru=i.ru||{};n.dictionary=Object.assign(n.dictionary||{},{Bold:"Жирный",Code:"Исходный код",Italic:"Курсив",Strikethrough:"Зачеркнутый",Subscript:"Подстрочный",Superscript:"Надстрочный",Underline:"Подчеркнутый"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.ru=i.ru||{};n.dictionary=Object.assign(n.dictionary||{},{"Block quote":"Цитата"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const e=n.ru=n.ru||{};e.dictionary=Object.assign(e.dictionary||{},{"Choose heading":"Выбор стиля",Heading:"Стиль","Heading 1":"Заголовок 1","Heading 2":"Заголовок 2","Heading 3":"Заголовок 3","Heading 4":"Заголовок 4","Heading 5":"Заголовок 5","Heading 6":"Заголовок 6",Paragraph:"Параграф","Type or paste your content here.":"Введите или вставьте сюда ваш текст","Type your title":"Введите заголовок"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.ru=i.ru||{};n.dictionary=Object.assign(n.dictionary||{},{"Horizontal line":"Горизонтальная линия"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.ru=e.ru||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"Разрывать текст","Centered image":"Выравнивание по центру","Change image text alternative":"Редактировать альтернативный текст","Enter image caption":"Подпись к изображению","Full size image":"Оригинальный размер изображения","Image resize list":"Список размеров","Image toolbar":"Панель инструментов изображения","image widget":"Виджет изображений","In line":"В тексте",Insert:"Вставить","Insert image":"Вставить изображение","Insert image via URL":"Вставить изображение по URL","Left aligned image":"Выравнивание по левому краю",Original:"Оригинальный","Resize image":"Изменить размер изображения","Resize image to %0":"Изменить размер изображения до %0","Resize image to the original size":"Вернуть размер изображения к оригинальному","Right aligned image":"Выравнивание по правому краю","Side image":"Боковое изображение","Text alternative":"Альтернативный текст",Update:"Изменить","Update image URL":"Изменить URL изображения","Upload failed":"Загрузка не выполнена","Wrap text":"Обтекать текст"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.ru=n.ru||{};i.dictionary=Object.assign(i.dictionary||{},{"Decrease indent":"Уменьшить отступ","Increase indent":"Увеличить отступ"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const a=n.ru=n.ru||{};a.dictionary=Object.assign(a.dictionary||{},{"Choose language":"Выбрать язык",Language:"Язык","Remove language":"Убрать язык"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.ru=n.ru||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"Загружаемые","Edit link":"Редактировать ссылку",Link:"Ссылка","Link image":"Ссылка на изображение","Link URL":"Ссылка URL","Open in a new tab":"Открыть в новой вкладке","Open link in new tab":"Открыть ссылку в новой вкладке","This link has no URL":"Для этой ссылки не установлен адрес URL",Unlink:"Убрать ссылку"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.ru=e.ru||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"Маркированный список","Bulleted list styles toolbar":"Стили маркированного списка",Circle:"Окружность",Decimal:"Десятичный","Decimal with leading zero":"Десятичный с ведущим нулем",Disc:"Диск","Lower-latin":"Малые латинские","Lower–roman":"Малые римские","Numbered List":"Нумерованный список","Numbered list styles toolbar":"Стили нумерованного списка",Square:"Квадрат","To-do List":"Список задач","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"Большие латинские","Upper-roman":"Большие римские"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.ru=i.ru||{};n.dictionary=Object.assign(n.dictionary||{},{"Remove Format":"Убрать форматирование"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.ru=i.ru||{};n.dictionary=Object.assign(n.dictionary||{},{Source:"HTML редактор"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e.ru=e.ru||{};t.dictionary=Object.assign(t.dictionary||{},{"Align cell text to the bottom":"Выровнять текст ячейки по нижнему краю","Align cell text to the center":"Выровнять текст по центру","Align cell text to the left":"Выровнять текст по левому краю","Align cell text to the middle":"Выровнять текст ячейки по центру","Align cell text to the right":"Выровнять текст по правому краю","Align cell text to the top":"Выровнять текст ячейки по верхнему краю","Align table to the left":"Выровнять таблицу по левому краю","Align table to the right":"Выровнять таблицу по правому краю",Alignment:"Выравнивание",Background:"Фон",Border:"Граница","Cell properties":"Свойства ячейки","Center table":"Выровнять таблицу по центру",Color:"Цвет","Color picker":"Выбор цвета",Column:"Столбец",Dashed:"Пунктирная","Delete column":"Удалить столбец","Delete row":"Удалить строку",Dimensions:"Размеры",Dotted:"Точечная",Double:"Двойная","Enter table caption":"Подпись таблицы",Groove:"Желобчатая","Header column":"Столбец заголовков","Header row":"Строка заголовков",Height:"Высота","Horizontal text alignment toolbar":"Панель инструментов горизонтального выравнивания текста","Insert column left":"Вставить столбец слева","Insert column right":"Вставить столбец справа","Insert row above":"Вставить строку выше","Insert row below":"Вставить строку ниже","Insert table":"Вставить таблицу",Inset:"Вдавленная","Justify cell text":"Выровнять текст по ширине","Merge cell down":"Объединить с ячейкой снизу","Merge cell left":"Объединить с ячейкой слева","Merge cell right":"Объединить с ячейкой справа","Merge cell up":"Объединить с ячейкой сверху","Merge cells":"Объединить ячейки",None:"Нет",Outset:"Выпуклая",Padding:"Отступ",Ridge:"Ребристая",Row:"Строка","Select column":"Выбрать столбец","Select row":"Выбрать строку",Solid:"Сплошная","Split cell horizontally":"Разделить ячейку горизонтально","Split cell vertically":"Разделить ячейку вертикально",Style:"Стиль","Table alignment toolbar":"Панель инструментов выравнивания таблицы","Table cell text alignment":"Выравнивание текста в ячейке таблицы","Table properties":"Свойства таблицы","Table toolbar":"Панель инструментов таблицы",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':'Неверный цвет. Попробуйте "#FF0000" или "rgb(255,0,0)" или "red".','The value is invalid. Try "10px" or "2em" or simply "2".':'Неверное значение. Попробуйте "10px" или "2em" или просто "2".',"Toggle caption off":"Выключить описание","Toggle caption on":"Включить описание","Vertical text alignment toolbar":"Панель инструментов вертикального выравнивания текста",Width:"Ширина"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.ru=i.ru||{};n.dictionary=Object.assign(n.dictionary||{},{"HTML object":"HTML объект"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(t){const a=t.ru=t.ru||{};a.dictionary=Object.assign(a.dictionary||{},{"Almost equal to":"",Angle:"","Approximately equal to":"","Asterisk operator":"","Austral sign":"","back with leftwards arrow above":"","Bitcoin sign":"","Cedi sign":"","Cent sign":"","Character categories":"Категории","Colon sign":"","Contains as member":"","Copyright sign":"","Cruzeiro sign":"","Currency sign":"","Degree sign":"","Division sign":"","Dollar sign":"","Dong sign":"","Double dagger":"","Double exclamation mark":"","Double low-9 quotation mark":"","Double question mark":"","downwards arrow to bar":"","downwards dashed arrow":"","downwards double arrow":"","Drachma sign":"","Element of":"","Em dash":"","Empty set":"","En dash":"","end with leftwards arrow above":"","Euro sign":"","Euro-currency sign":"","Exclamation question mark":"","For all":"","Fraction slash":"","French franc sign":"","German penny sign":"","Greater-than or equal to":"","Greater-than sign":"","Guarani sign":"","Horizontal ellipsis":"","Hryvnia sign":"","Identical to":"","Indian rupee sign":"",Infinity:"",Integral:"",Intersection:"","Inverted exclamation mark":"","Inverted question mark":"","Kip sign":"","Latin capital letter a with breve":"","Latin capital letter a with macron":"","Latin capital letter a with ogonek":"","Latin capital letter c with acute":"","Latin capital letter c with caron":"","Latin capital letter c with circumflex":"","Latin capital letter c with dot above":"","Latin capital letter d with caron":"","Latin capital letter d with stroke":"","Latin capital letter e with breve":"","Latin capital letter e with caron":"","Latin capital letter e with dot above":"","Latin capital letter e with macron":"","Latin capital letter e with ogonek":"","Latin capital letter eng":"","Latin capital letter g with breve":"","Latin capital letter g with cedilla":"","Latin capital letter g with circumflex":"","Latin capital letter g with dot above":"","Latin capital letter h with circumflex":"","Latin capital letter h with stroke":"","Latin capital letter i with breve":"","Latin capital letter i with dot above":"","Latin capital letter i with macron":"","Latin capital letter i with ogonek":"","Latin capital letter i with tilde":"","Latin capital letter j with circumflex":"","Latin capital letter k with cedilla":"","Latin capital letter l with acute":"","Latin capital letter l with caron":"","Latin capital letter l with cedilla":"","Latin capital letter l with middle dot":"","Latin capital letter l with stroke":"","Latin capital letter n with acute":"","Latin capital letter n with caron":"","Latin capital letter n with cedilla":"","Latin capital letter o with breve":"","Latin capital letter o with double acute":"","Latin capital letter o with macron":"","Latin capital letter r with acute":"","Latin capital letter r with caron":"","Latin capital letter r with cedilla":"","Latin capital letter s with acute":"","Latin capital letter s with caron":"","Latin capital letter s with cedilla":"","Latin capital letter s with circumflex":"","Latin capital letter t with caron":"","Latin capital letter t with cedilla":"","Latin capital letter t with stroke":"","Latin capital letter u with breve":"","Latin capital letter u with double acute":"","Latin capital letter u with macron":"","Latin capital letter u with ogonek":"","Latin capital letter u with ring above":"","Latin capital letter u with tilde":"","Latin capital letter w with circumflex":"","Latin capital letter y with circumflex":"","Latin capital letter y with diaeresis":"","Latin capital letter z with acute":"","Latin capital letter z with caron":"","Latin capital letter z with dot above":"","Latin capital ligature ij":"","Latin capital ligature oe":"","Latin small letter a with breve":"","Latin small letter a with macron":"","Latin small letter a with ogonek":"","Latin small letter c with acute":"","Latin small letter c with caron":"","Latin small letter c with circumflex":"","Latin small letter c with dot above":"","Latin small letter d with caron":"","Latin small letter d with stroke":"","Latin small letter dotless i":"","Latin small letter e with breve":"","Latin small letter e with caron":"","Latin small letter e with dot above":"","Latin small letter e with macron":"","Latin small letter e with ogonek":"","Latin small letter eng":"","Latin small letter f with hook":"","Latin small letter g with breve":"","Latin small letter g with cedilla":"","Latin small letter g with circumflex":"","Latin small letter g with dot above":"","Latin small letter h with circumflex":"","Latin small letter h with stroke":"","Latin small letter i with breve":"","Latin small letter i with macron":"","Latin small letter i with ogonek":"","Latin small letter i with tilde":"","Latin small letter j with circumflex":"","Latin small letter k with cedilla":"","Latin small letter kra":"","Latin small letter l with acute":"","Latin small letter l with caron":"","Latin small letter l with cedilla":"","Latin small letter l with middle dot":"","Latin small letter l with stroke":"","Latin small letter long s":"","Latin small letter n preceded by apostrophe":"","Latin small letter n with acute":"","Latin small letter n with caron":"","Latin small letter n with cedilla":"","Latin small letter o with breve":"","Latin small letter o with double acute":"","Latin small letter o with macron":"","Latin small letter r with acute":"","Latin small letter r with caron":"","Latin small letter r with cedilla":"","Latin small letter s with acute":"","Latin small letter s with caron":"","Latin small letter s with cedilla":"","Latin small letter s with circumflex":"","Latin small letter t with caron":"","Latin small letter t with cedilla":"","Latin small letter t with stroke":"","Latin small letter u with breve":"","Latin small letter u with double acute":"","Latin small letter u with macron":"","Latin small letter u with ogonek":"","Latin small letter u with ring above":"","Latin small letter u with tilde":"","Latin small letter w with circumflex":"","Latin small letter y with circumflex":"","Latin small letter z with acute":"","Latin small letter z with caron":"","Latin small letter z with dot above":"","Latin small ligature ij":"","Latin small ligature oe":"","Left double quotation mark":"","Left single quotation mark":"","Left-pointing double angle quotation mark":"","leftwards arrow to bar":"","leftwards dashed arrow":"","leftwards double arrow":"","Less-than or equal to":"","Less-than sign":"","Lira sign":"","Livre tournois sign":"","Logical and":"","Logical or":"",Macron:"","Manat sign":"","Mill sign":"","Minus sign":"","Multiplication sign":"","N-ary product":"","N-ary summation":"",Nabla:"","Naira sign":"","New sheqel sign":"","Nordic mark sign":"","Not an element of":"","Not equal to":"","Not sign":"","on with exclamation mark with left right arrow above":"",Overline:"","Paragraph sign":"","Partial differential":"","Per mille sign":"","Per ten thousand sign":"","Peseta sign":"","Peso sign":"","Plus-minus sign":"","Pound sign":"","Proportional to":"","Question exclamation mark":"","Registered sign":"","Reversed paragraph sign":"","Right double quotation mark":"","Right single quotation mark":"","Right-pointing double angle quotation mark":"","rightwards arrow to bar":"","rightwards dashed arrow":"","rightwards double arrow":"","Ruble sign":"","Rupee sign":"","Section sign":"","Single left-pointing angle quotation mark":"","Single low-9 quotation mark":"","Single right-pointing angle quotation mark":"","soon with rightwards arrow above":"","Special characters":"Спецсимволы","Spesmilo sign":"","Square root":"","Tenge sign":"","There exists":"","Tilde operator":"","top with upwards arrow above":"","Trade mark sign":"","Tugrik sign":"","Turkish lira sign":"","Two dot leader":"",Union:"","up down arrow with base":"","upwards arrow to bar":"","upwards dashed arrow":"","upwards double arrow":"","Vulgar fraction one half":"","Vulgar fraction one quarter":"","Vulgar fraction three quarters":"","Won sign":"","Yen sign":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const r=e.ru=e.ru||{};r.dictionary=Object.assign(r.dictionary||{},{"%0 of %1":"%0 из %1",Aquamarine:"Аквамариновый",Black:"Чёрный",Blue:"Синий",Cancel:"Отмена","Dim grey":"Тёмно-серый","Dropdown toolbar":"Выпадающая панель инструментов","Edit block":"Редактировать блок","Editor toolbar":"Панель инструментов редактора",Green:"Зелёный",Grey:"Серый","Insert paragraph after block":"Вставить параграф после блока","Insert paragraph before block":"Вставить параграф перед блоком","Light blue":"Голубой","Light green":"Салатовый","Light grey":"Светло-серый",Next:"Следующий",Orange:"Оранжевый",Previous:"Предыдущий",Purple:"Фиолетовый",Red:"Красный",Redo:"Повторить","Remove color":"Убрать цвет","Restore default":"По умолчанию","Rich Text Editor":"Редактор","Rich Text Editor, %0":"Редактор, %0",Save:"Сохранить","Select all":"Выбрать все","Show more items":"Другие инструменты",Turquoise:"Бирюзовый",Undo:"Отменить","Upload in progress":"Идёт загрузка",White:"Белый","Widget toolbar":"Панель инструментов виджета",Yellow:"Жёлтый"}),r.getPluralForm=function(e){return e%10==1&&e%100!=11?0:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?1:e%10==0||e%10>=5&&e%10<=9||e%100>=11&&e%100<=14?2:3}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/si.js b/core/assets/vendor/ckeditor5/translations/si.js
new file mode 100644
index 000000000000..e6af8b2a9d83
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/si.js
@@ -0,0 +1 @@
+!function(i){const n=i.si=i.si||{};n.dictionary=Object.assign(n.dictionary||{},{Bold:"තදකුරු",Code:"",Italic:"ඇලකුරු",Strikethrough:"",Subscript:"",Superscript:"",Underline:""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.si=e.si||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"","Centered image":"","Change image text alternative":"","Enter image caption":"","Full size image":"","Image resize list":"","Image toolbar":"","image widget":"","In line":"",Insert:"","Insert image":"පින්තූරය ඇතුල් කරන්න","Insert image via URL":"","Left aligned image":"",Original:"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Right aligned image":"","Side image":"","Text alternative":"",Update:"","Update image URL":"","Upload failed":"උඩුගත කිරීම අසාර්ථක විය","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.si=e.si||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"බුලටිත ලැයිස්තුව","Bulleted list styles toolbar":"",Circle:"",Decimal:"","Decimal with leading zero":"",Disc:"","Lower-latin":"","Lower–roman":"","Numbered List":"අංකිත ලැයිස්තුව","Numbered list styles toolbar":"",Square:"","To-do List":"","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.si=n.si||{};i.dictionary=Object.assign(i.dictionary||{},{Redo:"නැවත කරන්න",Undo:"අහෝසි කරන්න"}),i.getPluralForm=function(n){return 1!=n}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/sk.js b/core/assets/vendor/ckeditor5/translations/sk.js
new file mode 100644
index 000000000000..dc3ddbac9037
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/sk.js
@@ -0,0 +1 @@
+!function(n){const a=n.sk=n.sk||{};a.dictionary=Object.assign(a.dictionary||{},{"Align center":"Zarovnať na stred","Align left":"Zarovnať vľavo","Align right":"Zarovnať vpravo",Justify:"Do bloku","Text alignment":"Zarovnanie textu","Text alignment toolbar":"Panel nástrojov zarovnania textu"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.sk=n.sk||{};i.dictionary=Object.assign(i.dictionary||{},{Bold:"Tučné",Code:"Kód",Italic:"Kurzíva",Strikethrough:"Preškrtnuté",Subscript:"Dolný index",Superscript:"Horný index",Underline:"Podčiarknuté"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.sk=i.sk||{};n.dictionary=Object.assign(n.dictionary||{},{"Block quote":"Citát"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const a=i.sk=i.sk||{};a.dictionary=Object.assign(a.dictionary||{},{"Choose heading":"Vyberte nadpis",Heading:"Nadpis","Heading 1":"Nadpis 1","Heading 2":"Nadpis 2","Heading 3":"Nadpis 3","Heading 4":"Nadpis 4","Heading 5":"Nadpis 5","Heading 6":"Nadpis 6",Paragraph:"Odsek","Type or paste your content here.":"Vložte obsah","Type your title":"Vložte nadpis"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.sk=i.sk||{};n.dictionary=Object.assign(n.dictionary||{},{"Horizontal line":"Vodorovná čiara"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const a=e.sk=e.sk||{};a.dictionary=Object.assign(a.dictionary||{},{"Break text":"","Centered image":"Zarovnať na stred","Change image text alternative":"Zmeňte alternatívny text obrázka","Enter image caption":"Vložte popis obrázka","Full size image":"Obrázok v plnej veľkosti","Image resize list":"Zoznam možností zmeny veľkosti","Image toolbar":"Panel nástrojov obrázka","image widget":"widget obrázka","In line":"",Insert:"Vložiť","Insert image":"Vložiť obrázok","Insert image via URL":"Vložiť obrázok pomocou URL","Left aligned image":"Zarovnať vľavo",Original:"Originál","Resize image":"Zmeniť veľkosť obrázka","Resize image to %0":"Zmeniť veľkosť na %0","Resize image to the original size":"Zmeniť veľkosť na pôvodnú","Right aligned image":"Zarovnať vpravo","Side image":"Bočný obrázok","Text alternative":"Alternatívny text",Update:"Aktualizovať","Update image URL":"Aktualizovať URL obrázka","Upload failed":"Nahrávanie zlyhalo","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.sk=n.sk||{};i.dictionary=Object.assign(i.dictionary||{},{"Decrease indent":"Zmenšiť odsadenie","Increase indent":"Zväčšiť odsadenie"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(a){const n=a.sk=a.sk||{};n.dictionary=Object.assign(n.dictionary||{},{"Choose language":"Vybrať jazyk",Language:"Jazyk","Remove language":"Odstrániť jazyk"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.sk=n.sk||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"Na stiahnutie","Edit link":"Upraviť odkaz",Link:"Odkaz","Link image":"Adresa obrázku","Link URL":"URL adresa","Open in a new tab":"Otvoriť v novej záložke","Open link in new tab":"Otvoriť odkaz v novom okne","This link has no URL":"Tento odkaz nemá nastavenú URL adresu",Unlink:"Zrušiť odkaz"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.sk=e.sk||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"Zoznam s odrážkami","Bulleted list styles toolbar":"Panel zoznamu s odrážkami",Circle:"Kruh",Decimal:"Čísla","Decimal with leading zero":"Čísla s nulou na začiatku",Disc:"Plný kruh","Lower-latin":"Malé písmená","Lower–roman":"Malé rímske čísla","Numbered List":"Číslovaný zoznam","Numbered list styles toolbar":"Panel so štýlmi číslovaného zoznamu",Square:"Štvorec","To-do List":"To-do zoznam","Toggle the circle list style":"Prepnúť na zoznam s kruhovým označením","Toggle the decimal list style":"Prepnúť na číselný zoznam","Toggle the decimal with leading zero list style":"Prepnúť na číselný zoznam s nulou na začiatku","Toggle the disc list style":"Prepnúť na zoznam s označením plného kruhu","Toggle the lower–latin list style":"Prepnúť na zoznam s malými písmenami","Toggle the lower–roman list style":"Prepnúť na zoznam s malými rímskymi číslami","Toggle the square list style":"Prepnúť na zoznam so štvorcovým označením","Toggle the upper–latin list style":"Prepnúť na zoznam s veľkými písmenami","Toggle the upper–roman list style":"Prepnúť na zoznam s veľkými rímskymi číslami","Upper-latin":"Veľké písmená","Upper-roman":"Veľké rímske čísla"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const o=i.sk=i.sk||{};o.dictionary=Object.assign(o.dictionary||{},{"Remove Format":"Vyčistiť formátovanie"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e.sk=e.sk||{};t.dictionary=Object.assign(t.dictionary||{},{"Align cell text to the bottom":"Zarovnať text bunky nadol","Align cell text to the center":"Zarovnať text bunky na stred","Align cell text to the left":"Zarovnať text bunky doľava","Align cell text to the middle":"Zarovnať text bunky na stred","Align cell text to the right":"Zarovnať text bunky doprava","Align cell text to the top":"Zarovnať text bunky nahor","Align table to the left":"Zarovnať tabuľku doľava","Align table to the right":"Zarovnať tabuľku doprava",Alignment:"Zarovnanie",Background:"Pozadie",Border:"Orámovanie","Cell properties":"Vlastnosti bunky","Center table":"Centrovať tabuľku",Color:"Farba","Color picker":"Vybrať farbu",Column:"Stĺpec",Dashed:"Čiarkovaná","Delete column":"Odstrániť stĺpec","Delete row":"Odstrániť riadok",Dimensions:"Rozmery",Dotted:"Bodkovaná",Double:"Dvojitá","Enter table caption":"",Groove:"Drážkovaná","Header column":"Stĺpec hlavičky","Header row":"Riadok hlavičky",Height:"Výška","Horizontal text alignment toolbar":"Horizontálne zarovnanie textu v panely","Insert column left":"Vložiť stĺpec vľavo","Insert column right":"Vložiť stĺpec vpravo","Insert row above":"Vložiť riadok nad","Insert row below":"Vložiť riadok pod","Insert table":"Vložiť tabuľku",Inset:"Vložená z vnútra","Justify cell text":"Zarovnať text bunky z oboch strán","Merge cell down":"Zlúčiť bunku dole","Merge cell left":"Zlúčiť bunku vľavo","Merge cell right":"Zlúčiť bunku vpravo","Merge cell up":"Zlúčiť bunku hore","Merge cells":"Zlúčiť bunky",None:"Žiadna",Outset:"Vložená zvonku",Padding:"Vnútorný okraj",Ridge:"Rámovaná",Row:"Riadok","Select column":"Vybrať stĺpec","Select row":"Vybrať riadok",Solid:"Plná","Split cell horizontally":"Rozdeliť bunku vodorovne","Split cell vertically":"Rozdeliť bunku zvislo",Style:"Štýl","Table alignment toolbar":"Panel zarovnania tabuľky","Table cell text alignment":"Zarovnanie textu v bunke","Table properties":"Vlastnosti tabuľky","Table toolbar":"Panel nástrojov tabuľky",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':'Farba má nesprávny formát. Skúste "#FF0000", "rgb(255,0,0)" alebo "red".','The value is invalid. Try "10px" or "2em" or simply "2".':'Hodnota je nesprávna. Skúste "10px", "2em" alebo jednoducho "2".',"Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"Vertikálne zarovnanie textu v panely",Width:"Šírka"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(a){const t=a.sk=a.sk||{};t.dictionary=Object.assign(t.dictionary||{},{"Almost equal to":"Čiastočne rovný",Angle:"Uhol","Approximately equal to":"Aproximácia","Asterisk operator":"Hviezdička / násobenie","Austral sign":"Znak Austral","back with leftwards arrow above":"Šípka späť","Bitcoin sign":"Mena Bitcoin","Cedi sign":"Znak Cedi","Cent sign":"Znak cent","Character categories":"Kategórie znakov","Colon sign":"Dvojbodka","Contains as member":"Obsahuje prvok","Copyright sign":"Copyright","Cruzeiro sign":"Mena Cruzeiro","Currency sign":"Znak meny","Degree sign":"Znak stupeň","Division sign":"Delenie","Dollar sign":"Znak Dolár","Dong sign":"Znak Dong","Double dagger":"Dvojkríž","Double exclamation mark":"Dvojitý výkričník","Double low-9 quotation mark":"Dvojitá spodná uvodzovka","Double question mark":"Dvojitý otáznik","downwards arrow to bar":"šípka nadol do zvislej čiary","downwards dashed arrow":"prerušovaná šípka nadol","downwards double arrow":"dvojitá šípka nadol","Drachma sign":"Znak Drachma","Element of":"Patrí / Je súčasťou","Em dash":"Dlhá pomĺčka","Empty set":"Prázdna množina","En dash":"Pomĺčka","end with leftwards arrow above":"Šípka koniec","Euro sign":"Znak Euro","Euro-currency sign":"Mena Euro","Exclamation question mark":"Výkričník a otáznik","For all":"Pre všetky prvky v množine","Fraction slash":"Lomítko / Delenie","French franc sign":"Mena Francúzsky Frank","German penny sign":"Nemecká penny","Greater-than or equal to":"Väčší alebo rovný","Greater-than sign":"Väčší ako","Guarani sign":"Znak Guarani","Horizontal ellipsis":"Trojbodka","Hryvnia sign":"Znak Hryvnia","Identical to":"Identický k","Indian rupee sign":"Znak Indická rupia",Infinity:"Nekonečno",Integral:"Integrál",Intersection:"Priesečník / Prienik","Inverted exclamation mark":"Obrátený výkričník","Inverted question mark":"Obrátený otáznik","Kip sign":"Znak Kip","Latin capital letter a with breve":"Latinské veľké písmeno a s mäkčeňom","Latin capital letter a with macron":"Latinské veľké písmeno a s čiarou","Latin capital letter a with ogonek":"Latinské veľké písmeno a s háčikom","Latin capital letter c with acute":"Latinské veľké písmeno c s dĺžňom","Latin capital letter c with caron":"Latinské veľké písmeno c s mäkčeňom","Latin capital letter c with circumflex":"Latinské veľké písmeno c s obráteným mäkčeňom","Latin capital letter c with dot above":"Latinské veľké písmeno c s bodkou nad znakom","Latin capital letter d with caron":"Latinské veľké písmeno d s mäkčeňom","Latin capital letter d with stroke":"Latinské veľké písmeno d s prečiarknutím","Latin capital letter e with breve":"Latinské veľké písmeno e s mäkčeňom","Latin capital letter e with caron":"Latinské veľké písmeno e s mäkčeňom","Latin capital letter e with dot above":"Latinské veľké písmeno e s bodkou nad znakom","Latin capital letter e with macron":"Latinské veľké písmeno e s čiarou","Latin capital letter e with ogonek":"Latinské veľké písmeno e s háčikom","Latin capital letter eng":"Latinské veľké písmeno Eng","Latin capital letter g with breve":"Latinské veľké písmeno g s mäkčeňom","Latin capital letter g with cedilla":"Latinské veľké písmeno g s háčikom","Latin capital letter g with circumflex":"Latinské veľké písmeno g s obráteným mäkčeňom","Latin capital letter g with dot above":"Latinské veľké písmeno g s bodkou nad znakom","Latin capital letter h with circumflex":"Latinské veľké písmeno h s obráteným mäkčeňom","Latin capital letter h with stroke":"Latinské veľké písmeno h s prečiarknutím","Latin capital letter i with breve":"Latinské veľké písmeno i s mäkčeňom","Latin capital letter i with dot above":"Latinské veľké písmeno i s bodkou nad znakom","Latin capital letter i with macron":"Latinské veľké písmeno i s čiarou","Latin capital letter i with ogonek":"Latinské veľké písmeno i s háčikom","Latin capital letter i with tilde":"Latinské veľké písmeno i s vlnovkou","Latin capital letter j with circumflex":"Latinské veľké písmeno j s obráteným mäkčeňom","Latin capital letter k with cedilla":"Latinské veľké písmeno k s háčikom","Latin capital letter l with acute":"Latinské veľké písmeno l s dĺžňom","Latin capital letter l with caron":"Latinské veľké písmeno l s mäkčeňom","Latin capital letter l with cedilla":"Latinské veľké písmeno l s háčikom","Latin capital letter l with middle dot":"Latinské veľké písmeno l s bodkou uprostred","Latin capital letter l with stroke":"Latinské veľké písmeno l s prečiarknutím","Latin capital letter n with acute":"Latinské veľké písmeno n s dĺžňom","Latin capital letter n with caron":"Latinské veľké písmeno n s mäkčeňom","Latin capital letter n with cedilla":"Latinské veľké písmeno n s háčikom","Latin capital letter o with breve":"Latinské veľké písmeno o s mäkčeňom","Latin capital letter o with double acute":"Latinské veľké písmeno o s dĺžňom","Latin capital letter o with macron":"Latinské veľké písmeno o s čiarou","Latin capital letter r with acute":"Latinské veľké písmeno r s dĺžňom","Latin capital letter r with caron":"Latinské veľké písmeno r s mäkčeňom","Latin capital letter r with cedilla":"Latinské veľké písmeno r s háčikom","Latin capital letter s with acute":"Latinské veľké písmeno s s dĺžňom","Latin capital letter s with caron":"Latinské veľké písmeno s s mäkčeňom","Latin capital letter s with cedilla":"Latinské veľké písmeno s s háčikom","Latin capital letter s with circumflex":"Latinské veľké písmeno s s obráteným mäkčeňom","Latin capital letter t with caron":"Latinské veľké písmeno t s mäkčeňom","Latin capital letter t with cedilla":"Latinské veľké písmeno t s háčikom","Latin capital letter t with stroke":"Latinské veľké písmeno t s prečiarknutím","Latin capital letter u with breve":"Latinské veľké písmeno u s mäkčeňom","Latin capital letter u with double acute":"Latinské veľké písmeno u s dvojitým dĺžňom","Latin capital letter u with macron":"Latinské veľké písmeno u s čiarou","Latin capital letter u with ogonek":"Latinské veľké písmeno u s háčikom","Latin capital letter u with ring above":"Latinské veľké písmeno u s krúžkom nad znakom","Latin capital letter u with tilde":"Latinské veľké písmeno u s vlnovkou","Latin capital letter w with circumflex":"Latinské veľké písmeno w s obráteným mäkčeňom","Latin capital letter y with circumflex":"Latinské veľké písmeno y s obráteným mäkčeňom","Latin capital letter y with diaeresis":"Latinské veľké písmeno y s dvojbodkou nad znakom","Latin capital letter z with acute":"Latinské veľké písmeno z s dĺžňom","Latin capital letter z with caron":"Latinské veľké písmeno z s mäkčeňom","Latin capital letter z with dot above":"Latinské veľké písmeno z s bodkou nad znakom","Latin capital ligature ij":"Latinský veľký znak ligatúry ij","Latin capital ligature oe":"Latinský veľký znak ligatúry oe","Latin small letter a with breve":"Latinské malé písmeno a s mäkčeňom","Latin small letter a with macron":"Latinské malé písmeno a s čiarou","Latin small letter a with ogonek":"Latinské malé písmeno a s háčikom","Latin small letter c with acute":"Latinské malé písmeno c s dĺžňom","Latin small letter c with caron":"Latinské malé písmeno c s mäkčeňom","Latin small letter c with circumflex":"Latinské malé písmeno c s obráteným mäkčeňom","Latin small letter c with dot above":"Latinské malé písmeno c s bodkou nad znakom","Latin small letter d with caron":"Latinské malé písmeno d s mäkčeňom","Latin small letter d with stroke":"Latinské malé písmeno d s prečiarknutím","Latin small letter dotless i":"Latinské malé písmeno i bez bodky","Latin small letter e with breve":"Latinské malé písmeno e s mäkčeňom","Latin small letter e with caron":"Latinské malé písmeno e s mäkčeňom","Latin small letter e with dot above":"Latinské malé písmeno e s bodkou nad znakom","Latin small letter e with macron":"Latinské malé písmeno e s čiarou","Latin small letter e with ogonek":"Latinské malé písmeno e s háčikom","Latin small letter eng":"Latinské malé písmeno Eng","Latin small letter f with hook":"Funkcia","Latin small letter g with breve":"Latinské malé písmeno g s mäkčeňom","Latin small letter g with cedilla":"Latinské malé písmeno g s háčikom","Latin small letter g with circumflex":"Latinské malé písmeno g s obráteným mäkčeňom","Latin small letter g with dot above":"Latinské malé písmeno g s bodkou nad znakom","Latin small letter h with circumflex":"Latinské malé písmeno h s obráteným mäkčeňom","Latin small letter h with stroke":"Latinské malé písmeno h s prečiarknutím","Latin small letter i with breve":"Latinské malé písmeno i s mäkčeňom","Latin small letter i with macron":"Latinské malé písmeno i s čiarou","Latin small letter i with ogonek":"Latinské malé písmeno i s háčikom","Latin small letter i with tilde":"Latinské malé písmeno i s vlnovkou","Latin small letter j with circumflex":"Latinské malé písmeno j s obráteným mäkčeňom","Latin small letter k with cedilla":"Latinské malé písmeno k s háčikom","Latin small letter kra":"latinský malý znak Kra","Latin small letter l with acute":"Latinské malé písmeno l s dĺžňom","Latin small letter l with caron":"Latinské malé písmeno l s mäkčeňom","Latin small letter l with cedilla":"Latinské malé písmeno l s háčikom","Latin small letter l with middle dot":"Latinské malé písmeno l s bodkou uprostred","Latin small letter l with stroke":"Latinské malé písmeno l s prečiarknutím","Latin small letter long s":"Malé dlhé písmeno s","Latin small letter n preceded by apostrophe":"Latinské malé písmeno n s apostrofom","Latin small letter n with acute":"Latinské malé písmeno n s dĺžňom","Latin small letter n with caron":"Latinské malé písmeno n s mäkčeňom","Latin small letter n with cedilla":"Latinské malé písmeno n s háčikom","Latin small letter o with breve":"Latinské malé písmeno o s mäkčeňom","Latin small letter o with double acute":"Latinské malé písmeno o s dĺžňom","Latin small letter o with macron":"Latinské malé písmeno o s čiarou","Latin small letter r with acute":"Latinské malé písmeno r s dĺžňom","Latin small letter r with caron":"Latinské malé písmeno r s mäkčeňom","Latin small letter r with cedilla":"Latinské malé písmeno r s háčikom","Latin small letter s with acute":"Latinské malé písmeno s s dĺžňom","Latin small letter s with caron":"Latinské malé písmeno s s mäkčeňom","Latin small letter s with cedilla":"Latinské malé písmeno s s háčikom","Latin small letter s with circumflex":"Latinské malé písmeno s s obráteným mäkčeňom","Latin small letter t with caron":"Latinské malé písmeno t s mäkčeňom","Latin small letter t with cedilla":"Latinské malé písmeno t s háčikom","Latin small letter t with stroke":"Latinské malé písmeno t s prečiarknutím","Latin small letter u with breve":"Latinské malé písmeno u s mäkčeňom","Latin small letter u with double acute":"Latinské malé písmeno u s dvojitým dĺžňom","Latin small letter u with macron":"Latinské malé písmeno o s čiarou","Latin small letter u with ogonek":"Latinské malé písmeno u s háčikom","Latin small letter u with ring above":"Latinské malé písmeno u s krúžkom nad znakom","Latin small letter u with tilde":"Latinské malé písmeno u s vlnovkou","Latin small letter w with circumflex":"Latinské malé písmeno w s obráteným mäkčeňom","Latin small letter y with circumflex":"Latinské malé písmeno y s obráteným mäkčeňom","Latin small letter z with acute":"Latinské malé písmeno z s dĺžňom","Latin small letter z with caron":"Malé písmeno s z mäkčeňom","Latin small letter z with dot above":"Latinské malé písmeno z s bodkou nad znakom","Latin small ligature ij":"Latinský malý znak ligatúry ij","Latin small ligature oe":"Latinský malý znak ligatúry oe","Left double quotation mark":"Ľavá dvojitá uvodzovka","Left single quotation mark":"Ľavá uvodzovka","Left-pointing double angle quotation mark":"Dvojitá šípka ukazujúca doľava","leftwards arrow to bar":"šípka doľava do zvislej čiary","leftwards dashed arrow":"prerušovaná šípka doľava","leftwards double arrow":"dvojitá šípka doľava","Less-than or equal to":"Menší alebo rovný","Less-than sign":"Menší ako","Lira sign":"Mena Líra","Livre tournois sign":"Znak Livre tournois","Logical and":"Logický AND","Logical or":"Logický OR",Macron:"Horná čiara","Manat sign":"Znak Manat","Mill sign":"Znak Mill","Minus sign":"Znak mínus","Multiplication sign":"Násobenie","N-ary product":"Znak cyklického násobenia","N-ary summation":"Znak cyklického sčítania",Nabla:"Nabla","Naira sign":"Znak Naira","New sheqel sign":"Nový znak šekelu","Nordic mark sign":"Znak Nórska marka","Not an element of":"Nepatrí / Nie je súčasťou","Not equal to":"Nerovná sa","Not sign":"Nie je rovný","on with exclamation mark with left right arrow above":"ON s výkričníkom so šípkou doľava doprava hore",Overline:"Preškrtnutie","Paragraph sign":"Odsek","Partial differential":"Parciálna diferencia","Per mille sign":"Promile","Per ten thousand sign":"Na desaťtisíc","Peseta sign":"Znak Peseta","Peso sign":"Znak Peso","Plus-minus sign":"Znak plus-mínus","Pound sign":"Znak Libra","Proportional to":"Úmerný k","Question exclamation mark":"Otáznik a výkričník","Registered sign":"Registrovaný","Reversed paragraph sign":"Obrátený znak odseku","Right double quotation mark":"Pravá dvojitá uvodzovka","Right single quotation mark":"Pravá uvodzovka","Right-pointing double angle quotation mark":"Dvojitá šípka ukazujúca doprava","rightwards arrow to bar":"šípka doprava do zvislej čiary","rightwards dashed arrow":"čiarkovaná šípka doprava","rightwards double arrow":"dvojitá šípka doprava","Ruble sign":"Znak Ruble","Rupee sign":"Znak Rupee","Section sign":"Sekcia","Single left-pointing angle quotation mark":"Šípka ukazujúca doľava","Single low-9 quotation mark":"Spodná uvodzovka","Single right-pointing angle quotation mark":"Šípka ukazujúca doprava","soon with rightwards arrow above":"čoskoro so šípkou doprava hore","Special characters":"Špeciálne znaky","Spesmilo sign":"Znak Spesmilo","Square root":"Odmocnina","Tenge sign":"Znak Tenge","There exists":"Existuje v množine","Tilde operator":"Vlnovka","top with upwards arrow above":"TOP so šípkou hore","Trade mark sign":"Ochranná známka","Tugrik sign":"Znak Tugrik","Turkish lira sign":"Znak Turecká líra","Two dot leader":"Horizontálna dvojbodka",Union:"Zjednotenie","up down arrow with base":"Šípka hore-dole od základne","upwards arrow to bar":"šípka nahor do zvislej čiary","upwards dashed arrow":"čiarkovaná šípka nahor","upwards double arrow":"dvojitá šípka nahor","Vulgar fraction one half":"Polovica","Vulgar fraction one quarter":"Jedna štvrtina","Vulgar fraction three quarters":"Tri štvrtiny","Won sign":"Znak Won","Yen sign":"Znak Jen"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(o){const e=o.sk=o.sk||{};e.dictionary=Object.assign(e.dictionary||{},{"%0 of %1":"%0 z %1",Aquamarine:"Akvamarínová",Black:"Čierna",Blue:"Modrá",Cancel:"Zrušiť","Dim grey":"Tmavosivá","Dropdown toolbar":"Panel nástrojov roletového menu","Edit block":"Upraviť odsek","Editor toolbar":"Panel nástrojov editora",Green:"Zelená",Grey:"Sivá","Insert paragraph after block":"Vložiť odstavec za blok","Insert paragraph before block":"Vložiť odstavec pred blok","Light blue":"Bledomodrá","Light green":"Bledozelená","Light grey":"Bledosivá",Next:"Ďalšie",Orange:"Oranžová",Previous:"Predchádzajúce",Purple:"Fialová",Red:"Červená",Redo:"Znova","Remove color":"Zrušiť farbu","Restore default":"","Rich Text Editor":"Editor s formátovaním","Rich Text Editor, %0":"Editor s formátovaním, %0",Save:"Uložiť","Select all":"Označiť všetko","Show more items":"Zobraziť viac položiek",Turquoise:"Tyrkysová",Undo:"Späť","Upload in progress":"Prebieha nahrávanie",White:"Biela","Widget toolbar":"Panel nástrojov ovládacieho prvku",Yellow:"Žltá"}),e.getPluralForm=function(o){return o%1==0&&1==o?0:o%1==0&&o>=2&&o<=4?1:o%1!=0?2:3}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/sl.js b/core/assets/vendor/ckeditor5/translations/sl.js
new file mode 100644
index 000000000000..60bc2569f0ee
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/sl.js
@@ -0,0 +1 @@
+!function(a){const n=a.sl=a.sl||{};n.dictionary=Object.assign(n.dictionary||{},{"Align center":"Sredinska poravnava","Align left":"Poravnava levo","Align right":"Poravnava desno",Justify:"Postavi na sredino","Text alignment":"Poravnava besedila","Text alignment toolbar":"Orodna vrstica besedila"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(o){const i=o.sl=o.sl||{};i.dictionary=Object.assign(i.dictionary||{},{Bold:"Krepko",Code:"Koda",Italic:"Poševno",Strikethrough:"Prečrtano",Subscript:"Naročnik",Superscript:"Nadpis",Underline:"Podčrtaj"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const o=i.sl=i.sl||{};o.dictionary=Object.assign(o.dictionary||{},{"Block quote":"Blokiraj citat"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(a){const i=a.sl=a.sl||{};i.dictionary=Object.assign(i.dictionary||{},{"Choose heading":"Izberi naslov",Heading:"Naslov","Heading 1":"Naslov 1","Heading 2":"Naslov 2","Heading 3":"Naslov 3","Heading 4":"Naslov 4","Heading 5":"Naslov 5","Heading 6":"Naslov 6",Paragraph:"Odstavek","Type or paste your content here.":"Vnesi ali prilepi vsebino","Type your title":"Vnesi naslov"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.sl=n.sl||{};i.dictionary=Object.assign(i.dictionary||{},{"Horizontal line":"Vodoravna črta"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const o=e.sl=e.sl||{};o.dictionary=Object.assign(o.dictionary||{},{"%0 of %1":"",Aquamarine:"Akvamarin",Black:"Črna",Blue:"Modra",Cancel:"Prekliči","Dim grey":"Temno siva","Dropdown toolbar":"","Edit block":"","Editor toolbar":"",Green:"Zelena",Grey:"Siva","Light blue":"Svetlo modra","Light green":"Svetlo zelena","Light grey":"Svetlo siva",Next:"",Orange:"Oranžna",Previous:"",Purple:"Vijolična",Red:"Rdeča","Remove color":"Odstrani barvo","Restore default":"","Rich Text Editor":"","Rich Text Editor, %0":"",Save:"Shrani","Show more items":"",Turquoise:"Turkizna",White:"Bela",Yellow:"Rumena"}),o.getPluralForm=function(e){return e%100==1?0:e%100==2?1:e%100==3||e%100==4?2:3}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/sq.js b/core/assets/vendor/ckeditor5/translations/sq.js
new file mode 100644
index 000000000000..9e3a0a94aba5
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/sq.js
@@ -0,0 +1 @@
+!function(t){const i=t.sq=t.sq||{};i.dictionary=Object.assign(i.dictionary||{},{"Align center":"Radhit në mes","Align left":"Radhit majtas","Align right":"Radhit djathtas",Justify:"Plotësim","Text alignment":"Radhitja e tekstit","Text alignment toolbar":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.sq=i.sq||{};n.dictionary=Object.assign(n.dictionary||{},{Bold:"Trash",Code:"Kod",Italic:"Pjerrtë",Strikethrough:"Vi në mes",Subscript:"",Superscript:"",Underline:"Nënvizuar"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const o=n.sq=n.sq||{};o.dictionary=Object.assign(o.dictionary||{},{"Block quote":"Thonjëzat"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.sq=i.sq||{};n.dictionary=Object.assign(n.dictionary||{},{"Choose heading":"Përzgjidh nëntitullin",Heading:"Nëntitulli","Heading 1":"Nëntitulli 1","Heading 2":"Nëntitulli 2","Heading 3":"Nëntitulli 3","Heading 4":"","Heading 5":"","Heading 6":"",Paragraph:"Paragrafi","Type or paste your content here.":"","Type your title":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e.sq=e.sq||{};t.dictionary=Object.assign(t.dictionary||{},{"Break text":"","Centered image":"Foto e vendosur në mes","Change image text alternative":"Ndrysho tekstin zgjedhor të fotos","Enter image caption":"Shto përshkrimin e fotos","Full size image":"Foto me madhësi të plotë","Image resize list":"","Image toolbar":"","image widget":"Vegla e fotos","In line":"",Insert:"","Insert image":"Shto Foto","Insert image via URL":"","Left aligned image":"Foto e vendosur majtas",Original:"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Right aligned image":"Foto e vendosur djathtas","Side image":"Foto anësore","Text alternative":"Teksti zgjedhor",Update:"","Update image URL":"","Upload failed":"Ngarkimi dështoi","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.sq=n.sq||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"","Edit link":"Redakto nyjën",Link:"Shto nyjën","Link image":"","Link URL":"Nyja e URL-së","Open in a new tab":"","Open link in new tab":"Hap nyjën në faqe të re","This link has no URL":"Kjo nyje nuk ka URL",Unlink:"Largo nyjën"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.sq=e.sq||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"Listë me Pika","Bulleted list styles toolbar":"",Circle:"",Decimal:"","Decimal with leading zero":"",Disc:"","Lower-latin":"","Lower–roman":"","Numbered List":"Listë me Numra","Numbered list styles toolbar":"",Square:"","To-do List":"","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(t){const e=t.sq=t.sq||{};e.dictionary=Object.assign(e.dictionary||{},{"Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align table to the left":"","Align table to the right":"",Alignment:"",Background:"",Border:"","Cell properties":"","Center table":"",Color:"","Color picker":"",Column:"Kolona",Dashed:"","Delete column":"Gris kolonën","Delete row":"Grish rreshtin",Dimensions:"",Dotted:"",Double:"","Enter table caption":"",Groove:"","Header column":"Kolona e kokës","Header row":"Rreshti i kokës",Height:"","Horizontal text alignment toolbar":"","Insert column left":"","Insert column right":"","Insert row above":"Shto rresht sipër","Insert row below":"Shto rresht poshtë","Insert table":"Shto tabelë",Inset:"","Justify cell text":"","Merge cell down":"Bashko kutizat poshtë","Merge cell left":"Bashko kutizat majtas","Merge cell right":"Bashko kutizat djathtas","Merge cell up":"Bashko kutizat sipër","Merge cells":"Bashko kutizat",None:"",Outset:"",Padding:"",Ridge:"",Row:"Rreshti","Select column":"","Select row":"",Solid:"","Split cell horizontally":"Ndaj kutizat horizontalisht","Split cell vertically":"Ndajë kutizat vertikalisht",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':"",'The value is invalid. Try "10px" or "2em" or simply "2".':"","Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"",Width:""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const o=e.sq=e.sq||{};o.dictionary=Object.assign(o.dictionary||{},{"%0 of %1":"",Aquamarine:"",Black:"",Blue:"",Cancel:"Anulo","Dim grey":"","Dropdown toolbar":"","Edit block":"","Editor toolbar":"",Green:"",Grey:"","Light blue":"","Light green":"","Light grey":"",Next:"",Orange:"",Previous:"",Purple:"",Red:"",Redo:"Ribëj","Remove color":"","Restore default":"","Rich Text Editor":"Redaktues i Tekstit të Pasur","Rich Text Editor, %0":"Redaktues i Tekstit të Pasur, %0",Save:"Ruaj","Show more items":"",Turquoise:"",Undo:"Rikthe","Upload in progress":"Duke ngarkuar",White:"",Yellow:""}),o.getPluralForm=function(e){return 1!=e}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/sr-latn.js b/core/assets/vendor/ckeditor5/translations/sr-latn.js
new file mode 100644
index 000000000000..8f01a2c44c61
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/sr-latn.js
@@ -0,0 +1 @@
+!function(n){const a=n["sr-latn"]=n["sr-latn"]||{};a.dictionary=Object.assign(a.dictionary||{},{"Align center":"Centralno ravnanje","Align left":"Levo ravnanje","Align right":"Desno ravnanje",Justify:"Obostrano ravnanje","Text alignment":"Ravnanje teksta","Text alignment toolbar":"Alatke za ravnanje teksta"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const o=n["sr-latn"]=n["sr-latn"]||{};o.dictionary=Object.assign(o.dictionary||{},{Bold:"Podebljano",Code:"Kod",Italic:"Kurziv",Strikethrough:"Precrtan",Subscript:"Index dole",Superscript:"Index gore",Underline:"Podvučen"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const t=n["sr-latn"]=n["sr-latn"]||{};t.dictionary=Object.assign(t.dictionary||{},{"Block quote":"Citat"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(a){const i=a["sr-latn"]=a["sr-latn"]||{};i.dictionary=Object.assign(i.dictionary||{},{"Choose heading":"Odredi stil",Heading:"Stilovi","Heading 1":"Naslov 1","Heading 2":"Naslov 2","Heading 3":"Naslov 3","Heading 4":"Naslov 4","Heading 5":"Naslov 5","Heading 6":"Naslov 6",Paragraph:"Pasus","Type or paste your content here.":"Upišite ili nalepite naslov","Type your title":"Odredite naslov"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n["sr-latn"]=n["sr-latn"]||{};i.dictionary=Object.assign(i.dictionary||{},{"Horizontal line":"Horizontalna razdelna linija"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e["sr-latn"]=e["sr-latn"]||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"Prelom teksta","Centered image":"Slika u sredini","Change image text alternative":"Izmena alternativnog teksta","Enter image caption":"Odredi tekst ispod slike","Full size image":"Slika u punoj veličini","Image resize list":"Lista veličine slike","Image toolbar":"Slika traka sa alatkama","image widget":"modul sa slikom","In line":"U redu",Insert:"Ubaci","Insert image":"Dodaj sliku","Insert image via URL":"Ubaci sliku preko URL-a","Left aligned image":"Leva slika",Original:"Original","Resize image":"Promenite veličinu slike","Resize image to %0":"Promenite veličinu slike na% 0","Resize image to the original size":"Promenite veličinu slike do originalne veličine","Right aligned image":"Desna slika","Side image":"Bočna slika","Text alternative":"Alternativni tekst",Update:"Ažuriraj","Update image URL":"Ažuriraj URL slike","Upload failed":"Postavljanje neuspešno","Wrap text":"Prelomiti tekst"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const e=n["sr-latn"]=n["sr-latn"]||{};e.dictionary=Object.assign(e.dictionary||{},{"Decrease indent":"Smanji uvlačenje","Increase indent":"Povećaj uclačenje"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const a=n["sr-latn"]=n["sr-latn"]||{};a.dictionary=Object.assign(a.dictionary||{},{"Choose language":"Izaberi jezik",Language:"Jezik","Remove language":"Odstrani jezik"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n["sr-latn"]=n["sr-latn"]||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"Moguće preuzimanje","Edit link":"Ispravi link",Link:"Link","Link image":"Link slike","Link URL":"URL link","Open in a new tab":"Otvori u novoj kartici","Open link in new tab":"Otvori link u novom prozoru","This link has no URL":"Link ne sadrži URL",Unlink:"Оtkloni link"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const e=i["sr-latn"]=i["sr-latn"]||{};e.dictionary=Object.assign(e.dictionary||{},{"Bulleted List":"Nabrajane liste","Bulleted list styles toolbar":"Traka sa alatkama za nabrajane liste",Circle:"Krug",Decimal:"Decimala","Decimal with leading zero":"Decimalni broj sa nulom na početku",Disc:"Disk","Lower-latin":"Donji - latinski","Lower–roman":"Donji - rimski","Numbered List":"Lista sa brojevima","Numbered list styles toolbar":"Traka sa altakama za liste sa brojevima",Square:"Kvadrat","To-do List":"Lista obaveza","Toggle the circle list style":"Uključite / isključite stil liste krugova","Toggle the decimal list style":"Uključi / isključi stil dekadne liste","Toggle the decimal with leading zero list style":"Prebaci decimalni znak sa vodećim stilom liste nula","Toggle the disc list style":"Uključite / isključite stil liste diskova","Toggle the lower–latin list style":"Uključite / isključite stil donje liste latinice","Toggle the lower–roman list style":"Uključite / isključite stil donje rimske liste","Toggle the square list style":"Uključite / isključite stil liste kvadrata","Toggle the upper–latin list style":"Uključite / isključite stil gornje liste latinice","Toggle the upper–roman list style":"Uključite / isključite stil gornje rimske liste","Upper-latin":"Gornji - latinski","Upper-roman":"Gornji - rimski"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n["sr-latn"]=n["sr-latn"]||{};i.dictionary=Object.assign(i.dictionary||{},{"Remove Format":"Ukloni formatiranje"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n["sr-latn"]=n["sr-latn"]||{};i.dictionary=Object.assign(i.dictionary||{},{Source:"Izvor"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const a=e["sr-latn"]=e["sr-latn"]||{};a.dictionary=Object.assign(a.dictionary||{},{"Align cell text to the bottom":"Poravnajte tekst ćelije prema dole","Align cell text to the center":"Poravnajte tekst ćelije u sredinu","Align cell text to the left":"Poravnajte tekst ćelije levo","Align cell text to the middle":"Poravnajte tekst ćelije u sredinu","Align cell text to the right":"Poravnajte tekst ćelije desno","Align cell text to the top":"Poravnajte tekst ćelije prema gore","Align table to the left":"Poravnajte tabelu na levu stranu","Align table to the right":"Poravnajte tabelu na desnu stranu",Alignment:"Poravnanje",Background:"Pozadina",Border:"Granica","Cell properties":"Svojstva ćelije","Center table":"Centar tabele",Color:"Boja","Color picker":"Birač boja",Column:"Kolona",Dashed:"Razbijeno","Delete column":"Briši kolonu","Delete row":"Briši red",Dimensions:"Dimenzija",Dotted:"Sa tačkama",Double:"Dvostruki","Enter table caption":"Unesite naslov tabele",Groove:"Kolosek","Header column":"Kolona za zaglavlje","Header row":"Red za zaglavlje",Height:"Visina","Horizontal text alignment toolbar":"Horizontalna traka sa alatkama za  poravnavanje teksta","Insert column left":"Dodaj kolonu levo","Insert column right":"Dodaj kolonu desno","Insert row above":"Dodaj red iznad","Insert row below":"Dodaj red ispod","Insert table":"Dodaj tabelu",Inset:"Prilog","Justify cell text":"Opravdajte tekst ćelije","Merge cell down":"Spoj ćelije na dole","Merge cell left":"Spoj ćelije na levo","Merge cell right":"Spoj ćelije na desno","Merge cell up":"Spoj ćelije na gore","Merge cells":"Spoj ćelije",None:"Nijedan",Outset:"Početak",Padding:"Postavljanje",Ridge:"Greben",Row:"Red","Select column":"Odaberi kolonu","Select row":"Odaberi red",Solid:"Čvrst","Split cell horizontally":"Deli ćelije vodoravno","Split cell vertically":"Deli ćelije uspravno",Style:"Stil","Table alignment toolbar":"Traka sa alatkama za poravnavanje tabele","Table cell text alignment":"Poravnaj tekst u tabeli","Table properties":"Svojstva tabele","Table toolbar":"Tabela traka sa alatkama",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':'Boja je nevažeća. Pokušajte sa "# FF0000" ili "rgb (255,0,0)" ili "crvena".','The value is invalid. Try "10px" or "2em" or simply "2".':"Vrednost je nevažeća. Pokušajte sa „10pk“ ili „2em“ ili jednostavno „2“.","Toggle caption off":"Isključivanje natpisa","Toggle caption on":"Uključite naslov","Vertical text alignment toolbar":"Vertikalna traka sa alatkama za poravnavanje teksta",Width:"Širina"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const t=n["sr-latn"]=n["sr-latn"]||{};t.dictionary=Object.assign(t.dictionary||{},{"HTML object":"HTML objеkat"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(a){const t=a["sr-latn"]=a["sr-latn"]||{};t.dictionary=Object.assign(t.dictionary||{},{"Almost equal to":"Skoro jednako",Angle:"Ugao","Approximately equal to":"Otprilike jednako","Asterisk operator":"Asterisk operator","Austral sign":"Australni znak","back with leftwards arrow above":"Nazad sa strelicom levo","Bitcoin sign":"Znak bitcoina","Cedi sign":"Znak cedi","Cent sign":"Znak centа","Character categories":"Kategorija karaktera","Colon sign":"Dvotačka","Contains as member":"Sadrži kao član","Copyright sign":"Simbol autorskog prava","Cruzeiro sign":"Znak cruzeiro","Currency sign":"Znak valute","Degree sign":"Znak stepena","Division sign":"Znak divizije","Dollar sign":"Znak dolara","Dong sign":"Znak dong","Double dagger":"Dvostruki bodež","Double exclamation mark":"Dvosrtuki uzvičnik","Double low-9 quotation mark":"Dvostruki niski-9 navodnik","Double question mark":"Dvostruki upitnik","downwards arrow to bar":"Strelica prema dole ka traci","downwards dashed arrow":"Prekidana strelica prema dole","downwards double arrow":"Dupla strelica prema dole","Drachma sign":"Znak drahma","Element of":"Element od","Em dash":"Em crtica","Empty set":"Prazan set","En dash":"En crtica","end with leftwards arrow above":"Završite strelicom levo","Euro sign":"Znak eura","Euro-currency sign":"Znak valute eura","Exclamation question mark":"Znak uzvičnika upitnika","For all":"Za sve","Fraction slash":"Crta frakcije","French franc sign":"Znak francuskog franaka","German penny sign":"Znak nemački peni","Greater-than or equal to":"Znak veće od ili jednako","Greater-than sign":"Znak veće od","Guarani sign":"Znak guarani","Horizontal ellipsis":"Horizontalna elipsa","Hryvnia sign":"Znak grivna","Identical to":"Identičan","Indian rupee sign":"Znak indijske rupije",Infinity:"Beskonačnost",Integral:"Integral",Intersection:"Raskrsnica","Inverted exclamation mark":"Obrnuti uzvičnik","Inverted question mark":"Obrnuti upitnik","Kip sign":"Znak kip","Latin capital letter a with breve":"Latinsko veliko slovo a sa brevom","Latin capital letter a with macron":"Latinsko veliko slovo a sa makronom","Latin capital letter a with ogonek":"Latinsko veliko slovo a sa ogonek","Latin capital letter c with acute":"Latinsko veliko slovo c sa akutom","Latin capital letter c with caron":"Latinsko veliko slovo c sa caronom","Latin capital letter c with circumflex":"Latinsko veliko slovo c sa circumflex","Latin capital letter c with dot above":"Latinsko veliko slovo c sa tačkom iznad","Latin capital letter d with caron":"Latinsko veliko slovo d sa caronom","Latin capital letter d with stroke":"Latinsko veliko slovo d sa stroke","Latin capital letter e with breve":"Latinsko veliko slovo e sa breve","Latin capital letter e with caron":"Latinsko veliko slovo e sa caron","Latin capital letter e with dot above":"Latinsko veliko slovo e sa tačkom iznad","Latin capital letter e with macron":"Latinsko veliko slovo e sa macron","Latin capital letter e with ogonek":"Latinsko veliko slovo e sa ogonek","Latin capital letter eng":"Latinsko veliko slovo eng","Latin capital letter g with breve":"Latinsko veliko slovo g sa breve","Latin capital letter g with cedilla":"Latinsko veliko slovo g sa cedillom","Latin capital letter g with circumflex":"Latinsko veliko slovo g sa circumflex","Latin capital letter g with dot above":"Latinsko veliko slovo g sa tačkom iznad","Latin capital letter h with circumflex":"Latinsko veliko slovo h sa circumflex","Latin capital letter h with stroke":"Latinsko veliko slovo h sa stroke","Latin capital letter i with breve":"Latinsko veloko slovo i sa breve","Latin capital letter i with dot above":"Latinsko veliko slovo i sa tackom iznad","Latin capital letter i with macron":"Latinsko veliko slovo i sa macron","Latin capital letter i with ogonek":"Latinsko veliko slovo i sa ogonek","Latin capital letter i with tilde":"Latinsko veliko slovo i sa tildom","Latin capital letter j with circumflex":"Latinsko veliko slovo j sa circumflex","Latin capital letter k with cedilla":"Latinsko veliko slovo k sa cedila","Latin capital letter l with acute":"Latinsko veloko slovo l sa akutom","Latin capital letter l with caron":"Latinsko veliko slovo l sa caron","Latin capital letter l with cedilla":"Latinsko veliko slovo l sa cedila","Latin capital letter l with middle dot":"Latinsko veliko slovo l sa srednjom tačkom","Latin capital letter l with stroke":"Latinsko veliko slovo l sa stroke","Latin capital letter n with acute":"Latinsko veliko slovo n sa akutom ","Latin capital letter n with caron":"Latinsko veliko slovo n sa caron","Latin capital letter n with cedilla":"Latinsko veliko slovo n sa cedilom","Latin capital letter o with breve":"Latinsko veliko slovo o sa breve","Latin capital letter o with double acute":"Latinsko veliko slovo o sa dvostrukom akutom","Latin capital letter o with macron":"Latinsko veliko slovo o sa macron","Latin capital letter r with acute":"Latinsko veliko slovo r sa akutom","Latin capital letter r with caron":"Latinsko veliko slovo r sa caron","Latin capital letter r with cedilla":"Latinsko veliko slovo r sa cedila","Latin capital letter s with acute":"Latinsko veliko slovo s sa akutom","Latin capital letter s with caron":"Latinsko veliko slovo s sa caron","Latin capital letter s with cedilla":"Latinsko veliko slovo s sa cedila","Latin capital letter s with circumflex":"Latinsko veliko slovo s sa circumflex","Latin capital letter t with caron":"Latinsko veliko slovo t sa caron","Latin capital letter t with cedilla":"Latinsko veliko slovo t sa cedila","Latin capital letter t with stroke":"Latinsko veliko slovo t sa stroke","Latin capital letter u with breve":"Latinsko veliko slovo u sa breve","Latin capital letter u with double acute":"Latinsko veliko slovo u s dvostrukom akutom","Latin capital letter u with macron":"Latinsko veliko slovo u sa macron","Latin capital letter u with ogonek":"Latinsko veliko slovo u sa ogonek","Latin capital letter u with ring above":"Latinsko veliko slovo u s prstenom iznad","Latin capital letter u with tilde":"Latinsko veliko slovo u sa tildom","Latin capital letter w with circumflex":"Latinsko veliko slovo w sa circumflex","Latin capital letter y with circumflex":"Latinsko veliko slovo y sa circumflex","Latin capital letter y with diaeresis":"Latinsko veliko slovo y sa dijarezom","Latin capital letter z with acute":"Latinsko veliko slovo z sa akutom","Latin capital letter z with caron":"Latinsko veliko slovo z sa caron","Latin capital letter z with dot above":"Latinsko veliko slovo z sa tačkom iznad","Latin capital ligature ij":"Latinska velika ligatura ij","Latin capital ligature oe":"Latinska velika ligatura oe","Latin small letter a with breve":"Latinsko malo slovo a sa  brevom","Latin small letter a with macron":"Latinsko malo slovo a sa makronom","Latin small letter a with ogonek":"Latinsko malo slovo a sa ogonek","Latin small letter c with acute":"Latinsko malo slovo c sa akutom","Latin small letter c with caron":"Latinsko malo slovo c sa caronom","Latin small letter c with circumflex":"Latino malo slovo c sa circumflex","Latin small letter c with dot above":"Latinsko malo slovo c sa tačkom iznad","Latin small letter d with caron":"Latinsko malo slovo d sa caronom","Latin small letter d with stroke":"Latinsko malo slovo d sa stroke","Latin small letter dotless i":"Latinsko malo slovo i bez tačke","Latin small letter e with breve":"Latinsko malo slovo e sa breve","Latin small letter e with caron":"Latinsko malo slovo e sa caron","Latin small letter e with dot above":"Latinsko malo slovo e sa tačkom iznad","Latin small letter e with macron":"Latinsko malo slovo e sa macron","Latin small letter e with ogonek":"Latinsko malo slovo e sa ogonek","Latin small letter eng":"Latinsko malo slovo eng","Latin small letter f with hook":"Latinsko malo slovo f sa kukom","Latin small letter g with breve":"Latinsko malo slovo g sa breve","Latin small letter g with cedilla":"Latinsko malo slovo g sa cedillom","Latin small letter g with circumflex":"Latinsko malo slovo g sa circumflex","Latin small letter g with dot above":"Latinsko malo slovo g sa tačkom iznad","Latin small letter h with circumflex":"Latinsko malo slovo h sa circumflex","Latin small letter h with stroke":"Latinsko malo slovo h sa stroke","Latin small letter i with breve":"Latinsko malo slovo i sa breve","Latin small letter i with macron":"Latinsko malo slovo i sa macron","Latin small letter i with ogonek":"Latinsko malo slovo i sa ogonek","Latin small letter i with tilde":"Latinsko malo slovo i sa tildom","Latin small letter j with circumflex":"Latinsko malo slovo j sa circumflex","Latin small letter k with cedilla":"Latinsko malo slovo k sa cedila","Latin small letter kra":"Latinsko malo slovo kra","Latin small letter l with acute":"Latinsko malo slovo l sa akutom","Latin small letter l with caron":"Latinsko malo slovo l sa caron","Latin small letter l with cedilla":"Latinsko malo slovo l sa cedila","Latin small letter l with middle dot":"Latinsko malo slovo l sa srednjom tačkom","Latin small letter l with stroke":"Latinsko malo slovo l sa stroke","Latin small letter long s":"Latinsko malo slovo dugačko s","Latin small letter n preceded by apostrophe":"Latinsko malo slovo n koje prethodi apostrof","Latin small letter n with acute":"Latinsko malo slovo n sa akutom ","Latin small letter n with caron":"Latinsko malo slovo n sa caron ","Latin small letter n with cedilla":"Latinsko malo slovo n sa cedilom","Latin small letter o with breve":"Latinsko malo slovo o sa breve","Latin small letter o with double acute":"Latinsko malo slovo o sa dvostrukom akutom","Latin small letter o with macron":"Latinsko malo slovo o sa macron","Latin small letter r with acute":"Latinsko malo slovo r sa akutom","Latin small letter r with caron":"Latinsko malo slovo r sa caron","Latin small letter r with cedilla":"Latinsko malo slovo r sa cedila","Latin small letter s with acute":"Latinsko malo slovo s sa akutom","Latin small letter s with caron":"Latinsko malo slovo s sa caron","Latin small letter s with cedilla":"Latinsko malo slovo s sa cedila","Latin small letter s with circumflex":"Latinsko malo slovo s sa circumflex","Latin small letter t with caron":"Latinsko malo slovo t sa caron","Latin small letter t with cedilla":"Latinsko malo slovo t sa cedila","Latin small letter t with stroke":"Latinsko malo slovo t sa stroke","Latin small letter u with breve":"Latinsko malo slovo u sa breve","Latin small letter u with double acute":"Latinsko malo slovo u s dvostrukom akutom","Latin small letter u with macron":"Latinsko malo slovo u sa macron","Latin small letter u with ogonek":"Latinsko malo slovo u sa ogonek","Latin small letter u with ring above":"Latinsko malo slovo u s prstenom iznad","Latin small letter u with tilde":"Latinsko malo slovo u sa tildom","Latin small letter w with circumflex":"Latinsko malo slovo w sa circumflex","Latin small letter y with circumflex":"Latinsko malo slovo y sa circumflex","Latin small letter z with acute":"Latinsko malo slovo z sa akutom","Latin small letter z with caron":"Latinsko malo slovo z sa caron","Latin small letter z with dot above":"Latinsko malo slovo z sa tačkom iznad","Latin small ligature ij":"Latinska mala ligatura ij","Latin small ligature oe":"Latinska mala ligatura oe","Left double quotation mark":"Levi dvostruki navodnik","Left single quotation mark":"Levi pojedinačni navodnik","Left-pointing double angle quotation mark":"Levi dvostrani navodnik dvostrukog ugla","leftwards arrow to bar":"Strelica nalevo ka traci","leftwards dashed arrow":"Prekidana strelica levo","leftwards double arrow":"Dupla strlica levo","Less-than or equal to":"Znak manje od ili jednako","Less-than sign":"Znak manje od","Lira sign":"Znak lire","Livre tournois sign":"Znak livre tournois","Logical and":"Logički i","Logical or":"Logički ili",Macron:"Macron","Manat sign":"Znak manat","Mill sign":"Znak mlina","Minus sign":"Znak minus","Multiplication sign":"Znak množenja","N-ary product":"N-ari proizvod","N-ary summation":"N-ari zbir",Nabla:"Nabla","Naira sign":"Znak naira","New sheqel sign":"Znak novi šekel","Nordic mark sign":"Nordijski znak","Not an element of":"Nije element","Not equal to":"Nejednako sa","Not sign":"Nije znak","on with exclamation mark with left right arrow above":"Uključeno sa uzvičnikom sa strelicom levo desno",Overline:"Overline","Paragraph sign":"Znak paragraf","Partial differential":"Delimični diferencijal","Per mille sign":"Znak per mile","Per ten thousand sign":"Znak za deset hiljada","Peseta sign":"Znak pezeta","Peso sign":"Znak peso","Plus-minus sign":"Znak plus-minus","Pound sign":"Znak funti","Proportional to":"Srazmerno","Question exclamation mark":"Znak upitnika uzvičnika","Registered sign":"Registrovani znak","Reversed paragraph sign":"Obrnuti znak paragrafa","Right double quotation mark":"Desni dvostruki navodnik","Right single quotation mark":"Desni pojedinačni navodnik","Right-pointing double angle quotation mark":"Desni dvostrani navodnik dvostrukog ugla","rightwards arrow to bar":"Strelica nadesno ka traci","rightwards dashed arrow":"Prekidana strelica desno","rightwards double arrow":"Dupla strelica desno","Ruble sign":"Znak ruble","Rupee sign":"Znak rupia","Section sign":"Znak sekcija","Single left-pointing angle quotation mark":"Pojedinačni navodnik ugla levog pokazivanja","Single low-9 quotation mark":"Jedan niski-9 navodnik","Single right-pointing angle quotation mark":"Pojedinačni navodnik ugla desnog pokazivanja","soon with rightwards arrow above":"Uskoro sa strelicom nadesno","Special characters":"Specijalni karakteri","Spesmilo sign":"Znak spesmilio","Square root":"Kvadratni koren","Tenge sign":"Znak tenge","There exists":"Postoji","Tilde operator":"Tilde operator","top with upwards arrow above":"Na vrhu sa strelicom prema gore","Trade mark sign":"Znak brenda","Tugrik sign":"Znak tugrik","Turkish lira sign":"Znak turskih lira","Two dot leader":"Vodja sa dve tačke",Union:"Unija","up down arrow with base":"Strelica nadole sa bazom","upwards arrow to bar":"Strelica prema gore ka traci","upwards dashed arrow":"Prekidana strelica prema gore","upwards double arrow":"Dupla strelica prema gore","Vulgar fraction one half":"Vulgarna frakcija jedna polovina","Vulgar fraction one quarter":"Vulgarna frakcija jedna četvrtina","Vulgar fraction three quarters":"Vulgarna frakcija tri četvrtine","Won sign":"Znak von","Yen sign":"Znak jena"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(a){const e=a["sr-latn"]=a["sr-latn"]||{};e.dictionary=Object.assign(e.dictionary||{},{"%0 of %1":"%0 of %1",Aquamarine:"Zelenkastoplava",Black:"Crna",Blue:"Plava",Cancel:"Odustani","Dim grey":"Bledo siva","Dropdown toolbar":"Padajuća traka sa alatkama","Edit block":"Blok uređivač","Editor toolbar":"Uređivač traka sa alatkama",Green:"Zelena",Grey:"Siva","Insert paragraph after block":"Уметните одломак после блока","Insert paragraph before block":"Уметните одломак пре блока","Light blue":"Svetloplava","Light green":"Svetlo zelena","Light grey":"Svetlo siva",Next:"Sledeći",Orange:"Narandžasta",Previous:"Prethodni",Purple:"Ljubičasta",Red:"Crvena",Redo:"Ponovo","Remove color":"Otkloni boju","Restore default":"Vrati podrazumevano","Rich Text Editor":"Prošireni uređivač teksta","Rich Text Editor, %0":"Prošireni uređivač teksta, %0",Save:"Sačuvaj","Select all":"Označi sve","Show more items":"Prikaži još stavki",Turquoise:"Tirkizna",Undo:"Povlačenje","Upload in progress":"Postavljanje u toku",White:"Bela","Widget toolbar":"Видгет трака са алаткама",Yellow:"Žuta"}),e.getPluralForm=function(a){return a%10==1&&a%100!=11?0:a%10>=2&&a%10<=4&&(a%100<10||a%100>=20)?1:2}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/sr.js b/core/assets/vendor/ckeditor5/translations/sr.js
new file mode 100644
index 000000000000..d334aa32f29e
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/sr.js
@@ -0,0 +1 @@
+!function(n){const i=n.sr=n.sr||{};i.dictionary=Object.assign(i.dictionary||{},{"Align center":"Централно равнанје","Align left":"Лево равнање","Align right":"Десно равнање",Justify:"Обострано равнање","Text alignment":"Равнање текста","Text alignment toolbar":"Алатке за равнање текста"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.sr=i.sr||{};n.dictionary=Object.assign(n.dictionary||{},{Bold:"Подебљано",Code:"Код",Italic:"Курзив",Strikethrough:"Прецртан",Subscript:"Индекс доле",Superscript:"Индекс горе",Underline:"Подвучен"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.sr=i.sr||{};n.dictionary=Object.assign(n.dictionary||{},{"Block quote":"Цитат"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const e=n.sr=n.sr||{};e.dictionary=Object.assign(e.dictionary||{},{"Choose heading":"Одреди стил",Heading:"Стилови","Heading 1":"Наслов 1","Heading 2":"Наслов 2","Heading 3":"Наслов 3","Heading 4":"Наслов 4","Heading 5":"Наслов 5","Heading 6":"Наслов 6",Paragraph:"Пасус","Type or paste your content here.":"Упишите или налепите наслов","Type your title":"Одредите наслов"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.sr=i.sr||{};n.dictionary=Object.assign(n.dictionary||{},{"Horizontal line":"Хоризонтална разделна линија"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.sr=e.sr||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"Прелом текста","Centered image":"Слика у средини","Change image text alternative":"Измена алтернативног текста","Enter image caption":"Одреди текст испод слике","Full size image":"Слика у пуној величини","Image resize list":"Листа величине слике","Image toolbar":"Слика трака са алтакама","image widget":"модул са сликом","In line":"У реду",Insert:"Убаци","Insert image":"Додај слику","Insert image via URL":"Убаци слику преко УРЛ-а","Left aligned image":"Лева слика",Original:"Оригинал","Resize image":"Промените величину слике","Resize image to %0":"Промените величину слике на% 0","Resize image to the original size":"Промените величину слике до оригиналне величине","Right aligned image":"Десна слика","Side image":"Бочна слика","Text alternative":"Алтернативни текст",Update:"Ажурирај","Update image URL":"Ажурирај УРЛ слике","Upload failed":"Постављање неуспешно","Wrap text":"Преломити текст"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.sr=n.sr||{};i.dictionary=Object.assign(i.dictionary||{},{"Decrease indent":"Смањи увлачење","Increase indent":"Повећај увлачење"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const a=n.sr=n.sr||{};a.dictionary=Object.assign(a.dictionary||{},{"Choose language":"Изабери језик",Language:"Језик","Remove language":"Одстрани језик"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.sr=n.sr||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"Могуће преузимање","Edit link":"Исправи линк",Link:"Линк","Link image":"Линк слике","Link URL":"УРЛ линк","Open in a new tab":"Отвори у новој картици","Open link in new tab":"Отвори линк у новом прозору","This link has no URL":"Линк не садржи УРЛ",Unlink:"Отклони линк"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.sr=e.sr||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"Набрајане листе","Bulleted list styles toolbar":"Трака са алаткама за набрајане листе",Circle:"Круг",Decimal:"Децимала","Decimal with leading zero":"Децимала са нулом на почетку",Disc:"Диск","Lower-latin":"Доњи - латински","Lower–roman":"Доњи - римски","Numbered List":"Листа са бројевима","Numbered list styles toolbar":"Трака са алаткама за листе са бројевима",Square:"Квадрат","To-do List":"Листа обавеза","Toggle the circle list style":"Укључи / искључи стил листе кругова","Toggle the decimal list style":"Укључи / искључи стил декадне листе","Toggle the decimal with leading zero list style":"Пребаци децимални знак са водећим стилом листе нула","Toggle the disc list style":"Укључите / искључите стил листе дискова","Toggle the lower–latin list style":"Укључите / искључите стил доње листе латинице","Toggle the lower–roman list style":"Укључите/ искључите стил доње римске листе","Toggle the square list style":"Укључи / искључи стил листе квадрата","Toggle the upper–latin list style":"Укључите / искључите стил горње листе латинице","Toggle the upper–roman list style":"Укључите / искључите стил горње римске листе","Upper-latin":"Горњи - латински","Upper-roman":"Горњи - римски"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.sr=i.sr||{};n.dictionary=Object.assign(n.dictionary||{},{"Remove Format":"Уклони форматирање"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.sr=i.sr||{};n.dictionary=Object.assign(n.dictionary||{},{Source:"Извор"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e.sr=e.sr||{};t.dictionary=Object.assign(t.dictionary||{},{"Align cell text to the bottom":"Поравнајте текст ћелије према доле","Align cell text to the center":"Поравнајте текст ћелије у средину","Align cell text to the left":"Поравнајте текст ћелије лево","Align cell text to the middle":"Поравнајте текст ћелије у средину","Align cell text to the right":"Поравнајте текст ћелије десно","Align cell text to the top":"Поравнајте текст ћелије према горе","Align table to the left":"Поравнајте табелу на леву страну","Align table to the right":"Поравнајте табелу на десну страну",Alignment:"Поравнање",Background:"Позадина",Border:"Граница","Cell properties":"Својства ћелије","Center table":"Центар табеле",Color:"Боја","Color picker":"Бирач боја",Column:"Колона",Dashed:"Разбијено","Delete column":"Бриши колону","Delete row":"Бриши ред",Dimensions:"Димензија",Dotted:"Са тачкама",Double:"Двоструко","Enter table caption":"Унесите наслов табеле ",Groove:"Колосек","Header column":"Колона за заглавље","Header row":"Ред за заглавлје",Height:"Висина","Horizontal text alignment toolbar":"Хоризонтална трака са алаткама за поравнање текста","Insert column left":"Додај колону лево","Insert column right":"Додај колону десно","Insert row above":"Додај ред изнад","Insert row below":"Додај ред испод","Insert table":"Додај табелу",Inset:"Прилог","Justify cell text":"Оправдајте текст ћелије","Merge cell down":"Спој ћелије на доле","Merge cell left":"Cпој ћелије на лево","Merge cell right":"Спој ћелије на десно","Merge cell up":"Спој ћелије на горе","Merge cells":"Спој ћелије",None:"Ниједан",Outset:"Почетак",Padding:"Постављање",Ridge:"Гребен",Row:"Ред","Select column":"Изабери колону","Select row":"Изабери ред",Solid:"Чврст","Split cell horizontally":"Дели ћелије водоравно","Split cell vertically":"Дели ћелије усправно",Style:"Стил","Table alignment toolbar":"Трака са алаткама за поравнање табеле","Table cell text alignment":"Поравнај тексту табели","Table properties":"Својства табеле","Table toolbar":"Табела трака са алаткама",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':'Боја је неважећа. Покушајте са "#FF0000" или "rgb(255,0,0)" или "црвена".','The value is invalid. Try "10px" or "2em" or simply "2".':'Вредност је неважећа. Покушајте са "10px" или "2em" или једноставно "2".',"Toggle caption off":"Искључивање натписа ","Toggle caption on":"Укључите наслов ","Vertical text alignment toolbar":"Вертикална трака са алаткама за поравнање текста",Width:"Ширина"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.sr=i.sr||{};n.dictionary=Object.assign(n.dictionary||{},{"HTML object":"ХТМЛ објекат "})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(t){const a=t.sr=t.sr||{};a.dictionary=Object.assign(a.dictionary||{},{"Almost equal to":"Скоро једнако",Angle:"Угао","Approximately equal to":"Отприлике једнако","Asterisk operator":"Астерикс оператор","Austral sign":"Аустрални знак","back with leftwards arrow above":"Назад са стрелицом лево","Bitcoin sign":"Знак биткиона","Cedi sign":"Знак цеди","Cent sign":"Знак цента","Character categories":"Категорија карактера","Colon sign":"Двотачка","Contains as member":"Садржи као члан","Copyright sign":"Симбол ауторског права","Cruzeiro sign":"Знак црузеиро","Currency sign":"Знак валуте","Degree sign":"Знак степена","Division sign":"Знак дивизије","Dollar sign":"Знак долара","Dong sign":"Знак донг","Double dagger":"Двоструки бодеж","Double exclamation mark":"Двоструки узвичник","Double low-9 quotation mark":"Двоструки ниски -9 наводник","Double question mark":"Двоструки упитник","downwards arrow to bar":"Стрелица према доле ка траци","downwards dashed arrow":"Прекидана стрелица према доле","downwards double arrow":"Дупла стрелица према доле","Drachma sign":"Знак драхма","Element of":"Елемент од","Em dash":"Ем цртица","Empty set":"Празан сет","En dash":"Ен цртица","end with leftwards arrow above":"Завршите стрелицом лево","Euro sign":"Знак еура","Euro-currency sign":"Знак валуте еура","Exclamation question mark":"Знак узвичника упитника","For all":"За све","Fraction slash":"Црта фракције","French franc sign":"Знак француског франака","German penny sign":"Знак немачки пени","Greater-than or equal to":"Знак веће од или једнако","Greater-than sign":"Знак веће од","Guarani sign":"Знак гуарани","Horizontal ellipsis":"Хоризонтална елипса","Hryvnia sign":"Знак гривна","Identical to":"Идентичан","Indian rupee sign":"Знак индијске рупије",Infinity:"Бесконачност",Integral:"Интеграл",Intersection:"Раскрсница","Inverted exclamation mark":"Обрнути узвичник","Inverted question mark":"Обрнути упитник","Kip sign":"Знак кип","Latin capital letter a with breve":"Латинско велико слово а  са бревом ","Latin capital letter a with macron":"Латинско белико слово а са макроном","Latin capital letter a with ogonek":"Латинско велико слово а са огонек","Latin capital letter c with acute":"Латинско велико слово ц са акутом","Latin capital letter c with caron":"Латинско велико слово ц са цароном","Latin capital letter c with circumflex":"Латинско велико слово ц са цирцумфлекс","Latin capital letter c with dot above":"Латинско велико слово ц са тачком изнад","Latin capital letter d with caron":"Латинско велико слово д са цароном","Latin capital letter d with stroke":"Латинско велико слово д са строке","Latin capital letter e with breve":"Латинско велико слово е са бреве","Latin capital letter e with caron":"Латинско велико слово е са царон","Latin capital letter e with dot above":"Латинско велико слово е са тачком изнад","Latin capital letter e with macron":"Латинско велико слово е са мацрон","Latin capital letter e with ogonek":"Латинско велико слово е са огонек","Latin capital letter eng":"Латинско велико слово енг","Latin capital letter g with breve":"Латинск велико слово г са бреве","Latin capital letter g with cedilla":"Латинско велико слово г са цедилом","Latin capital letter g with circumflex":"Латинско велико слово г са цирцумфлекс","Latin capital letter g with dot above":"Латинско велико слово г са тачком изнад","Latin capital letter h with circumflex":"Латинско велико слово х са цирцумфлекс","Latin capital letter h with stroke":"Латинско велико слово х са строке","Latin capital letter i with breve":"Латинско велико слово и са бреве","Latin capital letter i with dot above":"Латинско велико слово и са тачком изнад","Latin capital letter i with macron":"Латинско велико слово и са мацрон","Latin capital letter i with ogonek":"Латинско велоко слово и са огонек","Latin capital letter i with tilde":"Латинско велико слово и са тилдом","Latin capital letter j with circumflex":"Латинско велико слово ј са цирцумфлекс","Latin capital letter k with cedilla":"Латинско велико слово к са цедила","Latin capital letter l with acute":"Лаинско велико слово л са акутом","Latin capital letter l with caron":"Латинско велико слово л са царон","Latin capital letter l with cedilla":"Латинско велико слово л са цедила","Latin capital letter l with middle dot":"Латинско велико слово л са среднјом тачком","Latin capital letter l with stroke":"Латинско велико слово л са строке","Latin capital letter n with acute":"Латинско влико слово н са акутом","Latin capital letter n with caron":"Латинско велико слово н са царон","Latin capital letter n with cedilla":"Латинско велико слово н са цедилом","Latin capital letter o with breve":"Латинско велико слово о са бреве","Latin capital letter o with double acute":"Латинско велико слово о са двоструком акутом","Latin capital letter o with macron":"Латинско велико слово о са мацрон","Latin capital letter r with acute":"Латинско велико слово р са акутом","Latin capital letter r with caron":"Латинско велико слово р са царон","Latin capital letter r with cedilla":"Латинско велико слово р са цедила","Latin capital letter s with acute":"Латинско велоко слово с са акутом","Latin capital letter s with caron":"Латинско велико слово с са царон","Latin capital letter s with cedilla":"Латинско велико слово с са цедила","Latin capital letter s with circumflex":"Латинско велико слово с са цирцумфлекс","Latin capital letter t with caron":"Латинско велико слово т са царон","Latin capital letter t with cedilla":"Латинско велико слово т са цедила","Latin capital letter t with stroke":"Латинско велико слово т са строке","Latin capital letter u with breve":"Латинско велико слово у са бреве","Latin capital letter u with double acute":"Латинско велико слово у с двоструким акутом","Latin capital letter u with macron":"Латинско велико слово у са мацрон","Latin capital letter u with ogonek":"Латинско велико слово у са огонек","Latin capital letter u with ring above":"Латинско велико слово у с престеном изнад","Latin capital letter u with tilde":"Латинско велико слово у са тилдом","Latin capital letter w with circumflex":"Латинско велико слово дупло в са цирцумфлекс","Latin capital letter y with circumflex":"Латинско велико слово ипсилон са цирцумфлекс","Latin capital letter y with diaeresis":"Латинско велико слово ипсилон са дијарезом","Latin capital letter z with acute":"Латинско велико слово з са акутом","Latin capital letter z with caron":"Латинско велико слово з са царон","Latin capital letter z with dot above":"Латинско велико слово з са тачком изнад","Latin capital ligature ij":"Латинска велика лигатура иј","Latin capital ligature oe":"Латинска велика лигатура ое","Latin small letter a with breve":"Латинско мало слово а са бревом","Latin small letter a with macron":"Латинско мало слово а са макроном","Latin small letter a with ogonek":"Латинско мало слово с са огонек","Latin small letter c with acute":"Латинско мало слово ц са акутом","Latin small letter c with caron":"Латинско мало слово ц са цароном","Latin small letter c with circumflex":"Латинско мало слово ц са цирцумфлекс","Latin small letter c with dot above":"Латинско мало слвово ц са тачком изнад","Latin small letter d with caron":"Латинско мало слово д са цароном","Latin small letter d with stroke":"Латинско мало слово д са строке","Latin small letter dotless i":"Латинско мало слово и без тачке","Latin small letter e with breve":"Латинско мало слово е са бреве","Latin small letter e with caron":"Латинско мало слово е са царон","Latin small letter e with dot above":"Латинско мало слово е са тачком изнад","Latin small letter e with macron":"Латинско мало слово е са мацрон","Latin small letter e with ogonek":"Латинско мало слво е са огонек","Latin small letter eng":"Латинско мало слово енг","Latin small letter f with hook":"Латинско мало слово ф са куком","Latin small letter g with breve":"Латинско мало слово г са бреве","Latin small letter g with cedilla":"Латинско мало слово г са цедилом","Latin small letter g with circumflex":"Латинско мало слобо г са цирцумфлекс","Latin small letter g with dot above":"Латинско мало слово г са тачком изнад","Latin small letter h with circumflex":"Латинско мало слово х са цирцумфлекс","Latin small letter h with stroke":"Латинско мало слово х са строке","Latin small letter i with breve":"Латинско мало слово и са бреве","Latin small letter i with macron":"Латинско мало слово и са мацрон","Latin small letter i with ogonek":"Латинско мало слово и са огонек","Latin small letter i with tilde":"Латинско мало слово и са тилдом","Latin small letter j with circumflex":"Латнцско мало слово ј са цирцумфлекс","Latin small letter k with cedilla":"Латинско мало слово к са цедила","Latin small letter kra":"Латинско мало слово кра","Latin small letter l with acute":"Латинско мало слово л са акутом","Latin small letter l with caron":"Латинско мало слово л са царон","Latin small letter l with cedilla":"Латинско мало слово л са цедила","Latin small letter l with middle dot":"Латинско мало слово са цреднјом тачком","Latin small letter l with stroke":"Латинско мало слово л са строке","Latin small letter long s":"Латинско мало слово дугачко с","Latin small letter n preceded by apostrophe":"Латинско мало слово н које претходи апостроф","Latin small letter n with acute":"Латинско мало слово н са  акутом","Latin small letter n with caron":"Латинско мало слово н са царон","Latin small letter n with cedilla":"Латинско мало слово н са цедилом","Latin small letter o with breve":"Латинско мало слово о са бреве","Latin small letter o with double acute":"Латинско мало слово о са двоструком акутом","Latin small letter o with macron":"Латинско мало слово о са марон","Latin small letter r with acute":"Латинско мало слово р са акутом","Latin small letter r with caron":"Латинско мало слово р са царон","Latin small letter r with cedilla":"Латинско мало слово р са цедила","Latin small letter s with acute":"Латинско мало слово с са акутом","Latin small letter s with caron":"Латинско мало слово с са царон","Latin small letter s with cedilla":"Латинско мало слово с са цедила","Latin small letter s with circumflex":"Латинско мало слово с са цирцумфлекс","Latin small letter t with caron":"Латинско мало слово т са царон","Latin small letter t with cedilla":"Латинско мало слово т са цедила","Latin small letter t with stroke":"Латинско мало слово т са строке","Latin small letter u with breve":"Латинско мало слово у са бреве","Latin small letter u with double acute":"Латинско мало слово у с двоструким акутом","Latin small letter u with macron":"Латинско мало слово у са мацрон","Latin small letter u with ogonek":"Латинско мало слово у са огонек","Latin small letter u with ring above":"Латинско мало слово у с прстеном изнад","Latin small letter u with tilde":"Латинско мало слово у са тилдом","Latin small letter w with circumflex":"Латинско мало слово дупло в са цирцумфлекс","Latin small letter y with circumflex":"Латинско мало слово ипсилон са цирцумфлекс","Latin small letter z with acute":"Латинско мало слово з са акутом","Latin small letter z with caron":"Латинско мало слово з са царон","Latin small letter z with dot above":"Латинско мало слово з са тачком изнад","Latin small ligature ij":"Латинска мала лигатура иј","Latin small ligature oe":"Латинска мала лигатура ое","Left double quotation mark":"Леви двоструки наводник","Left single quotation mark":"Леви појединачни наводник","Left-pointing double angle quotation mark":"Леви двострани наводник двоструког угла ","leftwards arrow to bar":"Стрелица налево ка траци","leftwards dashed arrow":"Прекидана стрелица лево","leftwards double arrow":"Дупла стрелица лево","Less-than or equal to":"Збак мање од или једнако","Less-than sign":"Знак мање од","Lira sign":"Знак лире","Livre tournois sign":"Знак ливре тоурноис","Logical and":"Логички и","Logical or":"Локички или",Macron:"Мацрон","Manat sign":"Знак манат","Mill sign":"Знак млна","Minus sign":"Знак минус","Multiplication sign":"Знак множења","N-ary product":"Н-ари производ","N-ary summation":"Н-ари збир",Nabla:"Набла","Naira sign":"Знак наира","New sheqel sign":"Знак нови шекел","Nordic mark sign":"Нордијски знак","Not an element of":"Није елемент","Not equal to":"Неједнако са","Not sign":"Није знак","on with exclamation mark with left right arrow above":"Укључено са узвичником са стрелицомлево десно",Overline:"Оверлине","Paragraph sign":"Знак параграф","Partial differential":"Делимични диференцијал","Per mille sign":"Знак пер миле","Per ten thousand sign":"Знак за десет хиљада","Peseta sign":"Знак пезета","Peso sign":"Знак песо","Plus-minus sign":"Знак плус-минус","Pound sign":"Знак фунти","Proportional to":"Сразмерно","Question exclamation mark":"Знак упитника узвичника","Registered sign":"Регистровани знак","Reversed paragraph sign":"Обрнути знак параграфа","Right double quotation mark":"Десни двоструки наводник","Right single quotation mark":"Десни појединачни наводник","Right-pointing double angle quotation mark":"Десни двострани наводик двоструког угла ","rightwards arrow to bar":"Стрелица надесно ка траци","rightwards dashed arrow":"Прекидана стрелица десно","rightwards double arrow":"Дупла стрелица десно","Ruble sign":"Знак рубле","Rupee sign":"Знак рупиа","Section sign":"Знак селекција","Single left-pointing angle quotation mark":"Појединачни наводник угла левог показиванја","Single low-9 quotation mark":"Један ниски -9 наводник","Single right-pointing angle quotation mark":"Појединачни наводник угла десног показивања","soon with rightwards arrow above":"Ускоро са стрелицом надесно","Special characters":"Специјални карактери","Spesmilo sign":"Знак спесмилио","Square root":"Квадратни корен","Tenge sign":"Знак тенге","There exists":"Постоји","Tilde operator":"Тилде оператор","top with upwards arrow above":"На врху са стрелицом према горе","Trade mark sign":"Знак бренда","Tugrik sign":"Знак тугрик","Turkish lira sign":"Знак турских лира","Two dot leader":"Вођа са две тачке",Union:"Унија","up down arrow with base":"Стрелица на доле са базом","upwards arrow to bar":"Стрелица према горе ка траци","upwards dashed arrow":"Прекидана стрелица према горе","upwards double arrow":"Дупла стрелица према горе","Vulgar fraction one half":"Вулгарна фракција једна половина","Vulgar fraction one quarter":"Вулгарна фракција једна четвртина","Vulgar fraction three quarters":"Вулгарна фрација три четвртине","Won sign":"Знак вон","Yen sign":"Знак јена"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const o=e.sr=e.sr||{};o.dictionary=Object.assign(o.dictionary||{},{"%0 of %1":"%0 of %1",Aquamarine:"Зеленкастоплава",Black:"Црна",Blue:"Плава",Cancel:"Одустани","Dim grey":"Бледо сива","Dropdown toolbar":"Падајућа трака са алаткама","Edit block":"Блок уређивач","Editor toolbar":"Уређивач трака са алаткама",Green:"Зелена",Grey:"Сива","Insert paragraph after block":"Umetnite odlomak posle bloka","Insert paragraph before block":"Umetnite odlomak pre bloka","Light blue":"Светлоплава","Light green":"Светлозелена","Light grey":"Светло сива",Next:"Следећи",Orange:"Нараџаста",Previous:"Претходни",Purple:"Љубичаста",Red:"Црвена",Redo:"Поново","Remove color":"Отклони боју","Restore default":"Врати подразумевано","Rich Text Editor":"Проширен уређивач текста","Rich Text Editor, %0":"Проширени уређивач текста, %0",Save:"Сачувај","Select all":"Означи све.","Show more items":"Прикажи још ставки",Turquoise:"Тиркизна",Undo:"Повлачење","Upload in progress":"Постављање у току",White:"Бела","Widget toolbar":"Widget traka sa alatkama",Yellow:"Жута"}),o.getPluralForm=function(e){return e%10==1&&e%100!=11?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/sv.js b/core/assets/vendor/ckeditor5/translations/sv.js
new file mode 100644
index 000000000000..f14a47207a79
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/sv.js
@@ -0,0 +1 @@
+!function(t){const n=t.sv=t.sv||{};n.dictionary=Object.assign(n.dictionary||{},{"Align center":"Centrera","Align left":"Vänsterjustera","Align right":"Högerjustera",Justify:"Justera till marginaler","Text alignment":"Textjustering","Text alignment toolbar":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const t=n.sv=n.sv||{};t.dictionary=Object.assign(t.dictionary||{},{Bold:"Fet",Code:"Kod",Italic:"Kursiv",Strikethrough:"Genomstruken",Subscript:"Nedsänkta tecken",Superscript:"Upphöjda tecken",Underline:"Understrykning"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const o=i.sv=i.sv||{};o.dictionary=Object.assign(o.dictionary||{},{"Block quote":"Blockcitat"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const r=i.sv=i.sv||{};r.dictionary=Object.assign(r.dictionary||{},{"Choose heading":"Välj rubrik",Heading:"Rubrik","Heading 1":"Rubrik 1","Heading 2":"Rubrik 2","Heading 3":"Rubrik 3","Heading 4":"Rubrik 4","Heading 5":"Rubrik 5","Heading 6":"Rubrik 6",Paragraph:"Paragraf","Type or paste your content here.":"","Type your title":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.sv=e.sv||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"","Centered image":"Centrerad bild","Change image text alternative":"Ändra bildens alternativa text","Enter image caption":"Fyll i bildtext","Full size image":"Bild i full storlek","Image resize list":"","Image toolbar":"","image widget":"image widget","In line":"",Insert:"","Insert image":"Infoga bild","Insert image via URL":"","Left aligned image":"Vänsterjusterad bild",Original:"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Right aligned image":"Högerjusterad bild","Side image":"Kantbild","Text alternative":"Alternativ text",Update:"","Update image URL":"","Upload failed":"Uppladdning misslyckades","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.sv=n.sv||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"","Edit link":"Redigera länk",Link:"Länk","Link image":"","Link URL":"Länkens URL","Open in a new tab":"","Open link in new tab":"Öppna länk i ny flik","This link has no URL":"Denna länk saknar URL",Unlink:"Ta bort länk"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.sv=e.sv||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"Punktlista","Bulleted list styles toolbar":"",Circle:"",Decimal:"","Decimal with leading zero":"",Disc:"","Lower-latin":"","Lower–roman":"","Numbered List":"Numrerad lista","Numbered list styles toolbar":"",Square:"","To-do List":"","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.sv=i.sv||{};n.dictionary=Object.assign(n.dictionary||{},{"Remove Format":"Radera formatering"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e.sv=e.sv||{};t.dictionary=Object.assign(t.dictionary||{},{"Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align table to the left":"","Align table to the right":"",Alignment:"",Background:"",Border:"","Cell properties":"","Center table":"",Color:"","Color picker":"",Column:"Kolumn",Dashed:"","Delete column":"Ta bort kolumn","Delete row":"Ta bort rad",Dimensions:"",Dotted:"",Double:"","Enter table caption":"",Groove:"","Header column":"","Header row":"",Height:"","Horizontal text alignment toolbar":"","Insert column left":"","Insert column right":"","Insert row above":"","Insert row below":"","Insert table":"Lägg in tabell",Inset:"","Justify cell text":"","Merge cell down":"","Merge cell left":"","Merge cell right":"","Merge cell up":"","Merge cells":"",None:"",Outset:"",Padding:"",Ridge:"",Row:"Rad","Select column":"","Select row":"",Solid:"","Split cell horizontally":"","Split cell vertically":"",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':"",'The value is invalid. Try "10px" or "2em" or simply "2".':"","Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"",Width:""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const o=e.sv=e.sv||{};o.dictionary=Object.assign(o.dictionary||{},{"%0 of %1":"",Aquamarine:"",Black:"",Blue:"",Cancel:"Avbryt","Dim grey":"","Dropdown toolbar":"","Edit block":"","Editor toolbar":"",Green:"",Grey:"","Light blue":"","Light green":"","Light grey":"",Next:"",Orange:"",Previous:"",Purple:"",Red:"",Redo:"Gör om","Remove color":"","Restore default":"","Rich Text Editor":"Rich Text-editor","Rich Text Editor, %0":"Rich Text-editor, %0",Save:"Spara","Show more items":"",Turquoise:"",Undo:"Ångra",White:"",Yellow:""}),o.getPluralForm=function(e){return 1!=e}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/th.js b/core/assets/vendor/ckeditor5/translations/th.js
new file mode 100644
index 000000000000..5881f41eef44
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/th.js
@@ -0,0 +1 @@
+!function(i){const n=i.th=i.th||{};n.dictionary=Object.assign(n.dictionary||{},{"Block quote":"คำพูดบล็อก"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const e=n.th=n.th||{};e.dictionary=Object.assign(e.dictionary||{},{"Choose heading":"เลือกขนาดหัวข้อ",Heading:"หัวข้อ","Heading 1":"หัวข้อขนาด 1","Heading 2":"","Heading 3":"","Heading 4":"","Heading 5":"","Heading 6":"",Paragraph:"ย่อหน้า","Type or paste your content here.":"","Type your title":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.th=i.th||{};n.dictionary=Object.assign(n.dictionary||{},{"Horizontal line":"เส้นแนวนอน"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.th=e.th||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"","Centered image":"จัดแนวรูปกึ่งกลาง","Change image text alternative":"เปลี่ยนข้อความเมื่อไม่พบรูป","Enter image caption":"ระบุคำอธิบายภาพ","Full size image":"รูปขนาดเต็ม","Image resize list":"","Image toolbar":"เครื่องมือรูปภาพ","image widget":"วิดเจ็ตรูปภาพ","In line":"",Insert:"","Insert image":"แทรกรูป","Insert image via URL":"","Left aligned image":"จัดแนวภาพซ้าย",Original:"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Right aligned image":"จัดแนวภาพขวา","Side image":"รูปด้านข้าง","Text alternative":"ข้อความเมื่อไม่พบรูป",Update:"","Update image URL":"","Upload failed":"อัปโหลดไม่สำเร็จ","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.th=n.th||{};i.dictionary=Object.assign(i.dictionary||{},{"Decrease indent":"ลดการเยื้อง","Increase indent":"เพิ่มการเยื้อง"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.th=i.th||{};n.dictionary=Object.assign(n.dictionary||{},{"Remove Format":"ลบรูปแบบ"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e.th=e.th||{};t.dictionary=Object.assign(t.dictionary||{},{"Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align table to the left":"","Align table to the right":"",Alignment:"",Background:"",Border:"","Cell properties":"","Center table":"",Color:"","Color picker":"",Column:"คอลัมน์",Dashed:"","Delete column":"ลบคอลัมน์","Delete row":"ลบแถว",Dimensions:"",Dotted:"",Double:"","Enter table caption":"",Groove:"","Header column":"หัวข้อคอลัมน์","Header row":"ส่วนหัวแถว",Height:"","Horizontal text alignment toolbar":"","Insert column left":"แทรกคอลัมน์ทางซ้าย","Insert column right":"แทรกคอลัมน์ทางขวา","Insert row above":"แทรกส่วนหัวด้านบน","Insert row below":"แทรกส่วนหัวด้านล่าง","Insert table":"แทรกตาราง",Inset:"","Justify cell text":"","Merge cell down":"ผสานเซลล์ด้านล่าง","Merge cell left":"ผสานเซลล์ด้านซ้าย","Merge cell right":"ผสานเซลล์ด้านขวา","Merge cell up":"ผสานเซลล์ด้านบน","Merge cells":"ผสานเซลล์",None:"",Outset:"",Padding:"",Ridge:"",Row:"แถว","Select column":"","Select row":"",Solid:"","Split cell horizontally":"แยกเซลล์แนวนอน","Split cell vertically":"แยกเซลล์แนวตั้ง",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"เครื่องมือตาราง",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':"",'The value is invalid. Try "10px" or "2em" or simply "2".':"","Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"",Width:""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const o=e.th=e.th||{};o.dictionary=Object.assign(o.dictionary||{},{"%0 of %1":"",Aquamarine:"พลอยสีฟ้า",Black:"สีดำ",Blue:"สีน้ำเงิน",Cancel:"ยกเลิก","Dim grey":"สีเทาเข้ม","Dropdown toolbar":"","Edit block":"","Editor toolbar":"",Green:"สีเขียว",Grey:"สีเทา","Insert paragraph after block":"","Insert paragraph before block":"","Light blue":"สีฟ้า","Light green":"สีเขียวอ่อน","Light grey":"สีเทาอ่อน",Next:"",Orange:"สีส้ม",Previous:"",Purple:"สีม่วง",Red:"สีแดง",Redo:"ทำซ้ำ","Remove color":"ลบสี","Restore default":"","Rich Text Editor":"","Rich Text Editor, %0":"",Save:"บันทึก","Show more items":"",Turquoise:"สีเขียวขุ่น",Undo:"ย้อนกลับ","Upload in progress":"กำลังดำเนินการอัปโหลด",White:"สีขาว","Widget toolbar":"แถมเครื่องมือวิดเจ็ต",Yellow:"สีเหลือง"}),o.getPluralForm=function(e){return 0}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/tk.js b/core/assets/vendor/ckeditor5/translations/tk.js
new file mode 100644
index 000000000000..85a2e92ce28c
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/tk.js
@@ -0,0 +1 @@
+!function(e){const i=e.tk=e.tk||{};i.dictionary=Object.assign(i.dictionary||{},{"Align center":"Merkeze deňleşdir","Align left":"Çepe deňleşdiriň","Align right":"Saga deňleşdiriň",Justify:"Akla","Text alignment":"Tekstiň deňleşdirilmegi","Text alignment toolbar":"Teksti deňleşdirmek gurallar paneli"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const t=i.tk=i.tk||{};t.dictionary=Object.assign(t.dictionary||{},{Bold:"Galyň",Code:"Kod",Italic:"Italik",Strikethrough:"Üsti çyzykly",Subscript:"Aşaky ýazgy",Superscript:"Üst ýazgy",Underline:"Aşagy çyzykly"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const t=i.tk=i.tk||{};t.dictionary=Object.assign(t.dictionary||{},{"Block quote":"Sitata blokirläň"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(a){const y=a.tk=a.tk||{};y.dictionary=Object.assign(y.dictionary||{},{"Choose heading":"Sözbaşy saýlaň",Heading:"Sözbaşy","Heading 1":"Sözbaşy 1","Heading 2":"Sözbaşy 2","Heading 3":"Sözbaşy 3","Heading 4":"Sözbaşy 4","Heading 5":"Sözbaşy 5","Heading 6":"Sözbaşy 6",Paragraph:"Abzas","Type or paste your content here.":"Mazmunyňyzy şu ýere ýazyň ýa-da goýuň.","Type your title":"Sözbaşyny ýazyň"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.tk=i.tk||{};n.dictionary=Object.assign(n.dictionary||{},{"Horizontal line":"Gorizontal çyzyk"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const a=e.tk=e.tk||{};a.dictionary=Object.assign(a.dictionary||{},{"Break text":"","Centered image":"Merkezleşdirilen surat","Change image text alternative":"Surat tekstiniň alternatiwasyny üýtgediň","Enter image caption":"Surat ýazgysyny giriziň","Full size image":"Doly ululykdaky surat","Image resize list":"","Image toolbar":"Surat gurallar paneli","image widget":"surat widjeti","In line":"",Insert:"","Insert image":"Surat goýuň","Insert image via URL":"","Left aligned image":"Çep deňleşdirilen surat",Original:"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Right aligned image":"Sag deňleşdirilen surat","Side image":"Gapdal surat","Text alternative":"Tekstiň alternatiwasy",Update:"","Update image URL":"","Upload failed":"Ýükläp bolmady","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const e=n.tk=n.tk||{};e.dictionary=Object.assign(e.dictionary||{},{"Decrease indent":"Indent peseltmek","Increase indent":"Indent köpeltmek"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const a=i.tk=i.tk||{};a.dictionary=Object.assign(a.dictionary||{},{"Choose language":"Dili saýlaň",Language:"Dil","Remove language":"Dili pozuň"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(a){const n=a.tk=a.tk||{};n.dictionary=Object.assign(n.dictionary||{},{Downloadable:"Göçürip alyp bolýar","Edit link":"Baglanyşygy üýtget",Link:"Baglanyşyk","Link image":"Surat baglanyşygy","Link URL":"URL baglanyşygy","Open in a new tab":"Täze goýmada açyň","Open link in new tab":"Täze goýmada baglanyşyk açyň","This link has no URL":"Bu baglanyşykda URL ýok",Unlink:"Baglanyşygy aýyr"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.tk=e.tk||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"Bullet sanawy","Bulleted list styles toolbar":"",Circle:"",Decimal:"","Decimal with leading zero":"",Disc:"","Lower-latin":"","Lower–roman":"","Numbered List":"Sanly sanaw","Numbered list styles toolbar":"",Square:"","To-do List":"Edilmeli işleriň sanawy","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(o){const t=o.tk=o.tk||{};t.dictionary=Object.assign(t.dictionary||{},{"Remove Format":"Formaty aýyryň"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.tk=e.tk||{};l.dictionary=Object.assign(l.dictionary||{},{"Align cell text to the bottom":"Öýjük tekstini aşagyna deňleşdiriň","Align cell text to the center":"Öýjük tekstini merkeze deňleşdiriň","Align cell text to the left":"Öýjük tekstini çepe deňleşdiriň","Align cell text to the middle":"Öýjük tekstini ortasyna deňleşdiriň","Align cell text to the right":"Öýjük tekstini saga deňleşdiriň","Align cell text to the top":"Öýjük tekstini ýokarsyna deňleşdiriň","Align table to the left":"Tablisany çepe deňleşdiriň","Align table to the right":"Tablisany sag tarapa deňleşdiriň",Alignment:"Deňleşdirmek",Background:"Arka",Border:"Serhet","Cell properties":"Öýjük aýratynlyklary","Center table":"Tablisany merkezleşdiriň",Color:"Reňk","Color picker":"Reňk saýlaýjy",Column:"Sütün",Dashed:"Çyzykly","Delete column":"Sütüni pozuň","Delete row":"Setiri poz",Dimensions:"Ölçegleri",Dotted:"Nokatly",Double:"Goşa","Enter table caption":"",Groove:"Groove","Header column":"Sözbaşy sütüni","Header row":"Sözbaşy hatary",Height:"Boý","Horizontal text alignment toolbar":"Kese tekst tekizlemek gurallar paneli","Insert column left":"Sütüni çepe goýuň","Insert column right":"Sütüni saga goýuň","Insert row above":"Hatary ýokaryk goýuň","Insert row below":"Hatary aşak goýuň","Insert table":"Tablisa goýuň",Inset:"Inset","Justify cell text":"Öýjük tekstini esaslandyryň","Merge cell down":"Öýjügi aşak birleşdiriň","Merge cell left":"Öýjügi çepe birleşdiriň","Merge cell right":"Öýjügi saga birleşdiriň","Merge cell up":"Öýjügi ýokary birleşdiriň","Merge cells":"Öýjükleri birleşdiriň",None:"Hiç",Outset:"Outset",Padding:"Padding",Ridge:"Kertik",Row:"Setir","Select column":"Sütün saýlaň","Select row":"Setir saýlaň",Solid:"Gaty","Split cell horizontally":"Öýjügi keseligine bölüň","Split cell vertically":"Öýjügi dikligine bölüň",Style:"Stil","Table alignment toolbar":"Tablisa deňleşdirmek gurallar paneli","Table cell text alignment":"Tablisa öýjükleriniň tekstini deňleşdirmek","Table properties":"Tablisa aýratynlyklary","Table toolbar":"Tablisa gurallar paneli",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':'Reňki nädogry "#FF0000" ýa-da "rgb(255,0,0)" ýa-da "gyzyl" barlap görüň.','The value is invalid. Try "10px" or "2em" or simply "2".':'Baha nädogry "10px" ýa-da "2em" ýa-da diňe "2" barlap görüň.',"Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"Dik tekst tekizlemek gurallar paneli",Width:"Ini"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(t){const a=t.tk=t.tk||{};a.dictionary=Object.assign(a.dictionary||{},{"Almost equal to":"",Angle:"","Approximately equal to":"","Asterisk operator":"","Austral sign":"","back with leftwards arrow above":"","Bitcoin sign":"","Cedi sign":"","Cent sign":"","Character categories":"","Colon sign":"Iki nokat nyşany","Contains as member":"","Copyright sign":"","Cruzeiro sign":"","Currency sign":"","Degree sign":"","Division sign":"","Dollar sign":"","Dong sign":"","Double dagger":"","Double exclamation mark":"","Double low-9 quotation mark":"","Double question mark":"","downwards arrow to bar":"","downwards dashed arrow":"","downwards double arrow":"","Drachma sign":"","Element of":"","Em dash":"","Empty set":"","En dash":"","end with leftwards arrow above":"","Euro sign":"","Euro-currency sign":"","Exclamation question mark":"","For all":"","Fraction slash":"","French franc sign":"","German penny sign":"","Greater-than or equal to":"","Greater-than sign":"","Guarani sign":"","Horizontal ellipsis":"","Hryvnia sign":"","Identical to":"","Indian rupee sign":"",Infinity:"",Integral:"",Intersection:"","Inverted exclamation mark":"","Inverted question mark":"","Kip sign":"","Latin capital letter a with breve":"","Latin capital letter a with macron":"","Latin capital letter a with ogonek":"","Latin capital letter c with acute":"","Latin capital letter c with caron":"","Latin capital letter c with circumflex":"","Latin capital letter c with dot above":"","Latin capital letter d with caron":"","Latin capital letter d with stroke":"","Latin capital letter e with breve":"","Latin capital letter e with caron":"","Latin capital letter e with dot above":"","Latin capital letter e with macron":"","Latin capital letter e with ogonek":"","Latin capital letter eng":"","Latin capital letter g with breve":"","Latin capital letter g with cedilla":"","Latin capital letter g with circumflex":"","Latin capital letter g with dot above":"","Latin capital letter h with circumflex":"","Latin capital letter h with stroke":"","Latin capital letter i with breve":"","Latin capital letter i with dot above":"","Latin capital letter i with macron":"","Latin capital letter i with ogonek":"","Latin capital letter i with tilde":"","Latin capital letter j with circumflex":"","Latin capital letter k with cedilla":"","Latin capital letter l with acute":"","Latin capital letter l with caron":"","Latin capital letter l with cedilla":"","Latin capital letter l with middle dot":"","Latin capital letter l with stroke":"","Latin capital letter n with acute":"","Latin capital letter n with caron":"","Latin capital letter n with cedilla":"","Latin capital letter o with breve":"","Latin capital letter o with double acute":"","Latin capital letter o with macron":"","Latin capital letter r with acute":"","Latin capital letter r with caron":"","Latin capital letter r with cedilla":"","Latin capital letter s with acute":"","Latin capital letter s with caron":"","Latin capital letter s with cedilla":"","Latin capital letter s with circumflex":"","Latin capital letter t with caron":"","Latin capital letter t with cedilla":"","Latin capital letter t with stroke":"","Latin capital letter u with breve":"","Latin capital letter u with double acute":"","Latin capital letter u with macron":"","Latin capital letter u with ogonek":"","Latin capital letter u with ring above":"","Latin capital letter u with tilde":"","Latin capital letter w with circumflex":"","Latin capital letter y with circumflex":"","Latin capital letter y with diaeresis":"","Latin capital letter z with acute":"","Latin capital letter z with caron":"","Latin capital letter z with dot above":"","Latin capital ligature ij":"","Latin capital ligature oe":"","Latin small letter a with breve":"","Latin small letter a with macron":"","Latin small letter a with ogonek":"","Latin small letter c with acute":"","Latin small letter c with caron":"","Latin small letter c with circumflex":"","Latin small letter c with dot above":"","Latin small letter d with caron":"","Latin small letter d with stroke":"","Latin small letter dotless i":"","Latin small letter e with breve":"","Latin small letter e with caron":"","Latin small letter e with dot above":"","Latin small letter e with macron":"","Latin small letter e with ogonek":"","Latin small letter eng":"","Latin small letter f with hook":"","Latin small letter g with breve":"","Latin small letter g with cedilla":"","Latin small letter g with circumflex":"","Latin small letter g with dot above":"","Latin small letter h with circumflex":"","Latin small letter h with stroke":"","Latin small letter i with breve":"","Latin small letter i with macron":"","Latin small letter i with ogonek":"","Latin small letter i with tilde":"","Latin small letter j with circumflex":"","Latin small letter k with cedilla":"","Latin small letter kra":"","Latin small letter l with acute":"","Latin small letter l with caron":"","Latin small letter l with cedilla":"","Latin small letter l with middle dot":"","Latin small letter l with stroke":"","Latin small letter long s":"","Latin small letter n preceded by apostrophe":"","Latin small letter n with acute":"","Latin small letter n with caron":"","Latin small letter n with cedilla":"","Latin small letter o with breve":"","Latin small letter o with double acute":"","Latin small letter o with macron":"","Latin small letter r with acute":"","Latin small letter r with caron":"","Latin small letter r with cedilla":"","Latin small letter s with acute":"","Latin small letter s with caron":"","Latin small letter s with cedilla":"","Latin small letter s with circumflex":"","Latin small letter t with caron":"","Latin small letter t with cedilla":"","Latin small letter t with stroke":"","Latin small letter u with breve":"","Latin small letter u with double acute":"","Latin small letter u with macron":"","Latin small letter u with ogonek":"","Latin small letter u with ring above":"","Latin small letter u with tilde":"","Latin small letter w with circumflex":"","Latin small letter y with circumflex":"","Latin small letter z with acute":"","Latin small letter z with caron":"","Latin small letter z with dot above":"","Latin small ligature ij":"","Latin small ligature oe":"","Left double quotation mark":"","Left single quotation mark":"","Left-pointing double angle quotation mark":"","leftwards arrow to bar":"","leftwards dashed arrow":"","leftwards double arrow":"çepe tarap goşa ok","Less-than or equal to":"","Less-than sign":"","Lira sign":"","Livre tournois sign":"","Logical and":"","Logical or":"",Macron:"","Manat sign":"","Mill sign":"","Minus sign":"","Multiplication sign":"","N-ary product":"","N-ary summation":"",Nabla:"","Naira sign":"","New sheqel sign":"","Nordic mark sign":"","Not an element of":"","Not equal to":"","Not sign":"","on with exclamation mark with left right arrow above":"",Overline:"","Paragraph sign":"","Partial differential":"","Per mille sign":"","Per ten thousand sign":"","Peseta sign":"","Peso sign":"","Plus-minus sign":"","Pound sign":"","Proportional to":"","Question exclamation mark":"","Registered sign":"","Reversed paragraph sign":"","Right double quotation mark":"","Right single quotation mark":"","Right-pointing double angle quotation mark":"","rightwards arrow to bar":"","rightwards dashed arrow":"","rightwards double arrow":"","Ruble sign":"","Rupee sign":"","Section sign":"","Single left-pointing angle quotation mark":"","Single low-9 quotation mark":"","Single right-pointing angle quotation mark":"","soon with rightwards arrow above":"","Special characters":"Ýörite nyşanlar","Spesmilo sign":"","Square root":"","Tenge sign":"","There exists":"","Tilde operator":"","top with upwards arrow above":"","Trade mark sign":"","Tugrik sign":"","Turkish lira sign":"","Two dot leader":"",Union:"","up down arrow with base":"","upwards arrow to bar":"","upwards dashed arrow":"","upwards double arrow":"","Vulgar fraction one half":"","Vulgar fraction one quarter":"","Vulgar fraction three quarters":"","Won sign":"","Yen sign":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(a){const e=a.tk=a.tk||{};e.dictionary=Object.assign(e.dictionary||{},{"%0 of %1":"1%-iň 0%-i",Aquamarine:"Akuamarin",Black:"Gara",Blue:"Gök",Cancel:"Ýatyr","Dim grey":"Goýy çal","Dropdown toolbar":"Açylýan gurallar paneli","Edit block":"Bloky redaktirläň","Editor toolbar":"Redaktor gurallar paneli",Green:"Ýaşyl",Grey:"Çal","Insert paragraph after block":"Blokdan soň abzas goýuň","Insert paragraph before block":"Blokdan öň abzas goýuň","Light blue":"Açyk gök","Light green":"Açyk ýaşyl","Light grey":"Açyk çal",Next:"Indiki",Orange:"Mämişi",Previous:"Öňki",Purple:"Gyrmyzy",Red:"Gyzyl",Redo:"Öňe gaýtar","Remove color":"Reňki aýyryň","Restore default":"","Rich Text Editor":"Baý Tekst Redaktory","Rich Text Editor, %0":"Baý Tekst Redaktory, %0",Save:"Saklaň","Select all":"Ählisini saýla","Show more items":"Has köp zady görkeziň",Turquoise:"Turkuaz",Undo:"Yza gaýtar","Upload in progress":"Ýüklemek dowam edýär",White:"Ak","Widget toolbar":"Widget gurallar paneli",Yellow:"Sary"}),e.getPluralForm=function(a){return 1!=a}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/tr.js b/core/assets/vendor/ckeditor5/translations/tr.js
new file mode 100644
index 000000000000..6ae4c4d783bf
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/tr.js
@@ -0,0 +1 @@
+!function(a){const i=a.tr=a.tr||{};i.dictionary=Object.assign(i.dictionary||{},{"Align center":"Ortala","Align left":"Sola hizala","Align right":"Sağa hizala",Justify:"İki yana yasla","Text alignment":"Yazı hizalama","Text alignment toolbar":"Yazı Hizlama Araç Çubuğu"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const t=i.tr=i.tr||{};t.dictionary=Object.assign(t.dictionary||{},{Bold:"Kalın",Code:"Kod",Italic:"İtalik",Strikethrough:"Üstü çizili",Subscript:"Alt Simge",Superscript:"Üst Simge",Underline:"Altı Çizgili"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const t=n.tr=n.tr||{};t.dictionary=Object.assign(t.dictionary||{},{"Block quote":"Alıntı"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(a){const e=a.tr=a.tr||{};e.dictionary=Object.assign(e.dictionary||{},{"Choose heading":"Başlık tipi seç",Heading:"Başlık","Heading 1":"1. Seviye Başlık","Heading 2":"2. Seviye Başlık","Heading 3":"3. Seviye Başlık","Heading 4":"4. Seviye Başlık","Heading 5":"5. Seviye Başlık","Heading 6":"6. Seviye Başlık",Paragraph:"Paragraf","Type or paste your content here.":"İçeriğinizi buraya yapıştırın yada yazın.","Type your title":"Başlığınızı yazınız"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.tr=i.tr||{};n.dictionary=Object.assign(n.dictionary||{},{"Horizontal line":"Yatay çiizgi"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const a=e.tr=e.tr||{};a.dictionary=Object.assign(a.dictionary||{},{"Break text":"","Centered image":"Ortalanmış görsel","Change image text alternative":"Görsel alternatif yazısını değiştir","Enter image caption":"Resim açıklaması gir","Full size image":"Tam Boyut Görsel","Image resize list":"","Image toolbar":"Resim araç çubuğu","image widget":"resim aracı","In line":"",Insert:"","Insert image":"Görsel Ekle","Insert image via URL":"","Left aligned image":"Sola hizalı görsel",Original:"Orijinal","Resize image":"Resmi boyutlandır","Resize image to %0":"Resmi %0 ölçülerine boyutlandır","Resize image to the original size":"Resmi orijinal büyüklüğüne al","Right aligned image":"Sağa hizalı görsel","Side image":"Yan Görsel","Text alternative":"Yazı alternatifi",Update:"Güncelle","Update image URL":"","Upload failed":"Yükleme başarsız","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.tr=i.tr||{};n.dictionary=Object.assign(n.dictionary||{},{"Decrease indent":"Girintiyi azalt","Increase indent":"Girintiyi arttır"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.tr=n.tr||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"İndirilebilir","Edit link":"Bağlantıyı değiştir",Link:"Bağlantı","Link image":"","Link URL":"Bağlantı Adresi","Open in a new tab":"Yeni sekmede aç","Open link in new tab":"Yeni sekmede aç","This link has no URL":"Bağlantı adresi yok",Unlink:"Bağlantıyı kaldır"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.tr=e.tr||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"Simgeli Liste","Bulleted list styles toolbar":"",Circle:"",Decimal:"","Decimal with leading zero":"",Disc:"","Lower-latin":"","Lower–roman":"","Numbered List":"Numaralı Liste","Numbered list styles toolbar":"",Square:"","To-do List":"Yapılacaklar Listesi","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.tr=i.tr||{};n.dictionary=Object.assign(n.dictionary||{},{"Remove Format":"Biçimlendirmeyi Kaldır"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.tr=e.tr||{};l.dictionary=Object.assign(l.dictionary||{},{"Align cell text to the bottom":"Hücre içindeki metni alta hizala","Align cell text to the center":"Hücre içindeki metnini ortaya hizalama","Align cell text to the left":"Hücre içindeki metnini sola hizala","Align cell text to the middle":"Hücre içindeki metni ortaya hizala","Align cell text to the right":"Hücre içindeki metnini sağa hizala","Align cell text to the top":"Hücre içindeki metni üste hizala","Align table to the left":"Tabloyu sola hizala","Align table to the right":"Tabloyu sağa hizala",Alignment:"Hizalama",Background:"Arkaplan",Border:"Kenar","Cell properties":"Hücre özellikleri","Center table":"Tabloyu ortala",Color:"Renk","Color picker":"Renk seçici",Column:"Kolon",Dashed:"Kesik çizgili","Delete column":"Kolonu sil","Delete row":"Satırı sil",Dimensions:"Ölçüler",Dotted:"Noktalı",Double:"Çift","Enter table caption":"",Groove:"Yiv","Header column":"Başlık kolonu","Header row":"Başlık satırı",Height:"Yükseklik","Horizontal text alignment toolbar":"Yatay metin hizalama araç çubuğu","Insert column left":"Sola kolon ekle","Insert column right":"Sağa kolon ekle","Insert row above":"Üste satır ekle","Insert row below":"Alta satır ekle","Insert table":"Tablo Ekle",Inset:"İçe","Justify cell text":"Hücre içindeki metini iki yana yasla","Merge cell down":"Aşağıya doğru birleştir","Merge cell left":"Sola doğru birleştir","Merge cell right":"Sağa doğru birleştir","Merge cell up":"Yukarı doğru birleştir","Merge cells":"Hücreleri birleştir",None:"Yok",Outset:"Dışarıya",Padding:"İç boşluk",Ridge:"Yükselti",Row:"Satır","Select column":"Kolon seç","Select row":"Satır seç",Solid:"Dolu","Split cell horizontally":"Hücreyi yatay böl","Split cell vertically":"Hücreyi dikey böl",Style:"Stil","Table alignment toolbar":"Tablo hizalama araç çubuğu","Table cell text alignment":"Tablo hücresi metin hizalaması","Table properties":"Tablo özellikleri","Table toolbar":"Tablo araç çubuğu",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':'Geçersiz renk. "#FF0000" veya "rgb(255,0,0)" veya "red" deneyin.','The value is invalid. Try "10px" or "2em" or simply "2".':'Geçersiz değer. "10px" veya "2em" veya sadece "2" deneyin.',"Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"Dikey metin hizalama araç çubuğu",Width:"Genişlik"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(a){const t=a.tr=a.tr||{};t.dictionary=Object.assign(t.dictionary||{},{"Almost equal to":"Neredeyse eşit",Angle:"Açı","Approximately equal to":"Yaklaşık olarak eşit","Asterisk operator":"Yıldız operatörü","Austral sign":"Austral işareti","back with leftwards arrow above":"geri sol ok yukarıda","Bitcoin sign":"Bitcoin işareti","Cedi sign":"Cedi işareti","Cent sign":"Kuruş işareti","Character categories":"Karakter kategorileri","Colon sign":"İki nokta üst üste işareti","Contains as member":"Üye olarak içerir","Copyright sign":"Telif hakkı işareti","Cruzeiro sign":"Cruzeiro işareti","Currency sign":"Para birimi işareti","Degree sign":"Derece işareti","Division sign":"Bölme işareti","Dollar sign":"Dolar işareti","Dong sign":"Dong işareti","Double dagger":"Çift hançer","Double exclamation mark":"Çift ünlem işareti","Double low-9 quotation mark":"Çift düşük 9 tırnak işareti","Double question mark":"Çift soru işareti","downwards arrow to bar":"aşağı ok çubuğu","downwards dashed arrow":"aşağı doğru kesik ok","downwards double arrow":"aşağı çift ok","Drachma sign":"Drahmisi işareti","Element of":"Öğesi","Em dash":"Uzun çizgi","Empty set":"Boş küme","En dash":"Çizgi","end with leftwards arrow above":"sona sol ok yukarıda","Euro sign":"Avro işareti","Euro-currency sign":"Avro para birimi simgesi","Exclamation question mark":"Ünlem soru işareti","For all":"Hepsi için","Fraction slash":"Kesir eğik çizgi","French franc sign":"Fransız Frangı işareti","German penny sign":"Alman kuruş işareti","Greater-than or equal to":"Büyük veya eşit","Greater-than sign":"Büyüktür işareti","Guarani sign":"Guarani işareti","Horizontal ellipsis":"Yatay elips","Hryvnia sign":"Grivnası işareti","Identical to":"Benzeri","Indian rupee sign":"Hint Rupisi işareti",Infinity:"Sonsuzluk",Integral:"İntegral",Intersection:"Kesişim","Inverted exclamation mark":"Ters ünlem işareti","Inverted question mark":"Ters soru işareti","Kip sign":"Kip işareti","Latin capital letter a with breve":"Üstü yuvarlak büyük a harfi","Latin capital letter a with macron":"Üstü çizili büyük a harfi","Latin capital letter a with ogonek":"Altı kuyruklu işaretli büyük a harfi","Latin capital letter c with acute":"Üzeri tırnaklı büyük c harfi","Latin capital letter c with caron":"Üstü ters şapkalı büyük c harfi","Latin capital letter c with circumflex":"Üzeri şapkalı büyük c harfi","Latin capital letter c with dot above":"Üstü noktalı büyük c harfi","Latin capital letter d with caron":"Üstü ters şapkalı büyük d harfi","Latin capital letter d with stroke":"Ortası çizgili büyük d harfi","Latin capital letter e with breve":"Üstü ters şapkalı büyük e harfi","Latin capital letter e with caron":"Üstü ters şapkalı büyük e harfi","Latin capital letter e with dot above":"Üstü noktalı büyük e harfi","Latin capital letter e with macron":"Üstü çizili büyük e harfi","Latin capital letter e with ogonek":"Altı kuyruklu büyük e harfi","Latin capital letter eng":"Alttan kuyruklu büyük n harfi","Latin capital letter g with breve":"Üstü ters şapkalı büyük g harfi","Latin capital letter g with cedilla":"Altı kuyruklu büyük g harfi","Latin capital letter g with circumflex":"Üzeri şapkalı büyük g harfi","Latin capital letter g with dot above":"Üstü noktalı büyük g harfi","Latin capital letter h with circumflex":"Üzeri şapkalı büyük h harfi","Latin capital letter h with stroke":"Üst kısmı çizgili büyük h harfi","Latin capital letter i with breve":"Üstü ters şapkalı büyük i harfi","Latin capital letter i with dot above":"Üstü noktalı büyük i harfi","Latin capital letter i with macron":"Üstü çizili büyük i harfi","Latin capital letter i with ogonek":"Altı kuyruklu büyük i harfi","Latin capital letter i with tilde":"Üstü tilda işaretli büyük i harfi","Latin capital letter j with circumflex":"Üzeri şapkalı büyük j harfi","Latin capital letter k with cedilla":"Altı kuyruklu büyük k harfi","Latin capital letter l with acute":"Üzeri tırnaklı büyük L harfi","Latin capital letter l with caron":"Üstü ters şapkalı büyük L harfi","Latin capital letter l with cedilla":"Altı kuyruklu büyük L harfi","Latin capital letter l with middle dot":"Ortası noktalı büyük L harfi","Latin capital letter l with stroke":"Üst kısmı çizgili büyük L harfi","Latin capital letter n with acute":"Üzeri tırnaklı büyük n harfi","Latin capital letter n with caron":"Üstü ters şapkalı büyük n harfi","Latin capital letter n with cedilla":"Altı kuyruklu büyük n harfi","Latin capital letter o with breve":"Üstü ters şapkalı büyük o harfi","Latin capital letter o with double acute":"Üstü çift tırnaklı büyük o harfi","Latin capital letter o with macron":"Üstü çizili büyük o harfi","Latin capital letter r with acute":"Üzeri tırnaklı büyük r harfi","Latin capital letter r with caron":"Üstü ters şapkalı büyük r harfi","Latin capital letter r with cedilla":"Altı kuyruklu büyük r harfi","Latin capital letter s with acute":"Üzeri tırnaklı büyük s harfi","Latin capital letter s with caron":"Üstü ters şapkalı büyük s harfi","Latin capital letter s with cedilla":"Altı kuyruklu büyük s harfi","Latin capital letter s with circumflex":"Üzeri şapkalı büyük s harfi","Latin capital letter t with caron":"Üstü ters şapkalı büyük t harfi","Latin capital letter t with cedilla":"Altı kuyruklu büyük t harfi","Latin capital letter t with stroke":"Üst kısmı çizgili büyük t harfi","Latin capital letter u with breve":"Üstü ters şapkalı büyük u harfi","Latin capital letter u with double acute":"Üstü çift tırnaklı büyük u harfi","Latin capital letter u with macron":"Üstü çizili büyük u harfi","Latin capital letter u with ogonek":"Altı kuyruklu büyük u harfi","Latin capital letter u with ring above":"Üstü derece işaretli büyük u harfi","Latin capital letter u with tilde":"Üstü tildalı büyük u harfi","Latin capital letter w with circumflex":"Üzeri şapkalı büyük w harfi","Latin capital letter y with circumflex":"Üzeri şapkalı büyük y harfi","Latin capital letter y with diaeresis":"Üstü çift noktalı büyük y harfi","Latin capital letter z with acute":"Üzeri tırnaklı büyük z harfi","Latin capital letter z with caron":"Üstü ters şapkalı büyük z harfi","Latin capital letter z with dot above":"Üstü noktalı büyük z harfi","Latin capital ligature ij":"Büyük ij harfi","Latin capital ligature oe":"Büyük yunan OE harfi","Latin small letter a with breve":"Üstü yuvarlak küçük a harfi","Latin small letter a with macron":"Üstü çizili küçük a harfi","Latin small letter a with ogonek":"Altı kuyruklu işaretli küçük a harfi","Latin small letter c with acute":"Üzeri tırnaklı küçük c harfi","Latin small letter c with caron":"Üstü ters şapkalı küçük c harfi","Latin small letter c with circumflex":"Üzeri şapkalı küçük c harfi","Latin small letter c with dot above":"Üstü noktalı küçük c harfi","Latin small letter d with caron":"Üstü ters şapkalı küçük d harfi","Latin small letter d with stroke":"Ortası çizgili küçük d harfi","Latin small letter dotless i":"Noktası küçük i harfi","Latin small letter e with breve":"Üstü ters şapkalı küçük e harfi","Latin small letter e with caron":"Üstü ters şapkalı küçük e harfi","Latin small letter e with dot above":"Üstü noktalı küçük e harfi","Latin small letter e with macron":"Üstü çizili küçük e harfi","Latin small letter e with ogonek":"Altı kuyruklu küçük e harfi","Latin small letter eng":"Alttan kuyruklu küçük n harfi","Latin small letter f with hook":"Latince küçük f harfi","Latin small letter g with breve":"Üstü ters şapkalı küçük g harfi","Latin small letter g with cedilla":"Altı kuyruklu küçük g harfi","Latin small letter g with circumflex":"Üzeri şapkalı küçük g harfi","Latin small letter g with dot above":"Üstü noktalı küçük g harfi","Latin small letter h with circumflex":"Üzeri şapkalı küçük g harfi","Latin small letter h with stroke":"Üst kısmı çizgili küçük h harfi","Latin small letter i with breve":"Üstü ters şapkalı küçük i harfi","Latin small letter i with macron":"Üstü çizili küçük i harfi","Latin small letter i with ogonek":"Altı kuyruklu küçük i harfi","Latin small letter i with tilde":"Üstü tilda işaretli küçük i harfi","Latin small letter j with circumflex":"Üzeri şapkalı küçük j harfi","Latin small letter k with cedilla":"Altı kuyruklu küçük k harfi","Latin small letter kra":"Küçük küt k harfi","Latin small letter l with acute":"Üzeri tırnaklı küçük L harfi","Latin small letter l with caron":"Üstü ters şapkalı küçük L harfi","Latin small letter l with cedilla":"Altı kuyruklu küçük L harfi","Latin small letter l with middle dot":"Ortası noktalı küçük L harfi","Latin small letter l with stroke":"Üst kısmı çizgili küçük L harfi","Latin small letter long s":"Uzun küçük s harfi","Latin small letter n preceded by apostrophe":"Önden apostrof küçük n harfi","Latin small letter n with acute":"Üzeri tırnaklı küçük n harfi","Latin small letter n with caron":"Üstü ters şapkalı küçük n harfi","Latin small letter n with cedilla":"Altı kuyruklu küçük n harfi","Latin small letter o with breve":"Üstü ters şapkalı küçük o harfi","Latin small letter o with double acute":"Üstü çift tırnaklı küçük o harfi","Latin small letter o with macron":"Üstü çizili küçük o harfi","Latin small letter r with acute":"Üzeri tırnaklı küçük r harfi","Latin small letter r with caron":"Üstü ters şapkalı küçük r harfi","Latin small letter r with cedilla":"Altı kuyruklu küçük r harfi","Latin small letter s with acute":"Üzeri tırnaklı küçük s harfi","Latin small letter s with caron":"Üstü ters şapkalı küçük s harfi","Latin small letter s with cedilla":"Altı kuyruklu küçük s harfi","Latin small letter s with circumflex":"Üzeri şapkalı küçük s harfi","Latin small letter t with caron":"Üstü ters şapkalı küçük t harfi","Latin small letter t with cedilla":"Altı kuyruklu küçük t harfi","Latin small letter t with stroke":"Üst kısmı çizgili küçük t harfi","Latin small letter u with breve":"Üstü ters şapkalı küçük u harfi","Latin small letter u with double acute":"Üstü çift tırnaklı küçük u harfi","Latin small letter u with macron":"Üstü çizili küçük u harfi","Latin small letter u with ogonek":"Altı kuyruklu küçük u harfi","Latin small letter u with ring above":"Üstü derece işaretli küçük u harfi","Latin small letter u with tilde":"Üstü tildalı küçük u harfi","Latin small letter w with circumflex":"Üzeri şapkalı küçük w harfi","Latin small letter y with circumflex":"Üzeri şapkalı küçük y harfi","Latin small letter z with acute":"Üzeri tırnaklı küçük z harfi","Latin small letter z with caron":"Üstü ters şapkalı küçük z harfi","Latin small letter z with dot above":"Üstü noktalı küçük z harfi","Latin small ligature ij":"Küçük ij harfi","Latin small ligature oe":"Küçük yunan OE harfi","Left double quotation mark":"Sol çift tırnak işareti","Left single quotation mark":"Sol tek tırnak işareti","Left-pointing double angle quotation mark":"Sola dönük çift açılı tırnak işareti","leftwards arrow to bar":"sola ok çubuğu","leftwards dashed arrow":"sola kesik çizgili ok","leftwards double arrow":"sola çift ok","Less-than or equal to":"Küçük veya eşit","Less-than sign":"Küçüktür işareti","Lira sign":"Lira işareti","Livre tournois sign":"Livre tournois işareti","Logical and":"Mantıksal VE","Logical or":"Mantıksal VEYA",Macron:"Uzatma işareti","Manat sign":"Manat işareti","Mill sign":"Mill işareti","Minus sign":"Eksi işareti","Multiplication sign":"Çarpma işareti","N-ary product":"N-ary ürünü","N-ary summation":"N-ary toplamı",Nabla:"Nabla","Naira sign":"Naira işareti","New sheqel sign":"Yeni şekel işareti","Nordic mark sign":"İskandinav işareti","Not an element of":"Onun öğesi değil","Not equal to":"Eşit değil","Not sign":"İmzalanmamış","on with exclamation mark with left right arrow above":"üzerinde sol sağ ok bulunan ünlem işaretiyle",Overline:"Üstü çizili","Paragraph sign":"Paragraf işareti","Partial differential":"Kısmi diferansiyel","Per mille sign":"Bin işareti için","Per ten thousand sign":"Her on bine göre işareti","Peseta sign":"Peseta işareti","Peso sign":"Peso işareti","Plus-minus sign":"Artı eksi işareti","Pound sign":"Sterlin işareti","Proportional to":"Orantılı","Question exclamation mark":"Soru ünlem işareti","Registered sign":"Kayıtlı işareti","Reversed paragraph sign":"Ters paragraf işareti","Right double quotation mark":"Sağ çift tırnak işareti","Right single quotation mark":"Sağ tek tırnak işareti","Right-pointing double angle quotation mark":"Sağa bakan çift açılı tırnak işareti","rightwards arrow to bar":"sağa ok çubuğu","rightwards dashed arrow":"sağa kesik çizgili ok","rightwards double arrow":"sağa çift ok","Ruble sign":"Ruble işareti","Rupee sign":"Rupi işareti","Section sign":"Bölüm işareti","Single left-pointing angle quotation mark":"Tek sola dönük açı tırnak işareti","Single low-9 quotation mark":"Tek düşük 9 tırnak işareti","Single right-pointing angle quotation mark":"Sağa bakan tek açılı tırnak işareti","soon with rightwards arrow above":"yakında sağ ok ile","Special characters":"Özel karakterler","Spesmilo sign":"Spesmilo işareti","Square root":"Kare kök","Tenge sign":"Tenge işareti","There exists":"Var","Tilde operator":"Tilde operatörü","top with upwards arrow above":"en üst yukarı oku","Trade mark sign":"Ticari marka işareti","Tugrik sign":"Tugrik işareti","Turkish lira sign":"Türk Lirası işareti","Two dot leader":"Öncelikli iki nokta",Union:"Birleşik","up down arrow with base":"taban ile yukarı aşağı ok","upwards arrow to bar":"yukarı ok çubuğu","upwards dashed arrow":"yukarı doğru kesik ok","upwards double arrow":"yukarı çift ok","Vulgar fraction one half":"Kaba kesir bir buçuk","Vulgar fraction one quarter":"Kaba kesir bir çeyrek","Vulgar fraction three quarters":"Kaba bölüm dörtte üç","Won sign":"Kazanılan işaret","Yen sign":"Yen işareti"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const r=e.tr=e.tr||{};r.dictionary=Object.assign(r.dictionary||{},{"%0 of %1":"%0/%1",Aquamarine:"Su Yeşili",Black:"Siyah",Blue:"Mavi",Cancel:"İptal","Dim grey":"Koyu Gri","Dropdown toolbar":"Açılır araç çubuğu","Edit block":"Bloğu Düzenle","Editor toolbar":"Düzenleme araç çubuğu",Green:"Yeşil",Grey:"Gri","Insert paragraph after block":"","Insert paragraph before block":"","Light blue":"Açık Mavi","Light green":"Açık Yeşil","Light grey":"Açık Gri",Next:"Sonraki",Orange:"Turuncu",Previous:"Önceki",Purple:"Mor",Red:"Kırmızı",Redo:"Tekrar yap","Remove color":"Rengi Sil","Restore default":"","Rich Text Editor":"Zengin İçerik Editörü","Rich Text Editor, %0":"Zengin İçerik Editörü, %0",Save:"Kaydet","Select all":"Hepsini seç","Show more items":"Daha fazla öğe göster",Turquoise:"Turkuaz",Undo:"Geri al","Upload in progress":"Yükleme işlemi devam ediyor",White:"Beyaz","Widget toolbar":"Bileşen araç çubuğu",Yellow:"Sarı"}),r.getPluralForm=function(e){return e>1}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/tt.js b/core/assets/vendor/ckeditor5/translations/tt.js
new file mode 100644
index 000000000000..4b4281a5cec5
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/tt.js
@@ -0,0 +1 @@
+!function(t){const i=t.tt=t.tt||{};i.dictionary=Object.assign(i.dictionary||{},{Bold:"Калын",Code:"Код",Italic:"",Strikethrough:"",Subscript:"",Superscript:"",Underline:""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(o){const t=o.tt=o.tt||{};t.dictionary=Object.assign(t.dictionary||{},{"%0 of %1":"",Cancel:"",Redo:"Кабатла","Remove color":"","Restore default":"",Save:"Сакла","Show more items":"",Undo:""}),t.getPluralForm=function(o){return 0}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/ug.js b/core/assets/vendor/ckeditor5/translations/ug.js
new file mode 100644
index 000000000000..ae6a91a9145e
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/ug.js
@@ -0,0 +1 @@
+!function(n){const i=n.ug=n.ug||{};i.dictionary=Object.assign(i.dictionary||{},{"Align center":"ئوتتۇرىغا توغرىلاش","Align left":"سولغا توغرىلاش","Align right":"ئوڭغا توغرىلاش",Justify:"تەكشىلەش","Text alignment":"تېكىست توغرىلاش","Text alignment toolbar":"تېكىست توغرىلاش قورالبالدىقى"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.ug=i.ug||{};n.dictionary=Object.assign(n.dictionary||{},{Bold:"توم",Code:"كود",Italic:"يانتۇ",Strikethrough:"ئۆچۈرۈش سىزىقى",Subscript:"ئاستبەلگە",Superscript:"ئۈستبەلگە",Underline:"ئاستى سىزىق"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.ug=i.ug||{};n.dictionary=Object.assign(n.dictionary||{},{"Block quote":"نەقىل"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const e=n.ug=n.ug||{};e.dictionary=Object.assign(e.dictionary||{},{"Choose heading":"ماۋزۇ تاللاش",Heading:"ماۋزۇ","Heading 1":"ماۋزۇ 1","Heading 2":"ماۋزۇ 2","Heading 3":"ماۋزۇ 3","Heading 4":"ماۋزۇ 4","Heading 5":"ماۋزۇ 5","Heading 6":"ماۋزۇ 6",Paragraph:"ئابزاس","Type or paste your content here.":"","Type your title":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.ug=e.ug||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"","Centered image":"ئوتتۇردىكى رەسىم","Change image text alternative":"رەسىملىك تېكىست تاللىغۇچنى ئۆزگەرتىش","Enter image caption":"رەسىمنىڭ تېمىسىنى كىرگۈزۈڭ","Full size image":"ئەسلى چوڭلۇقتىكى رەسىم","Image resize list":"","Image toolbar":"","image widget":"رەسىمچىك","In line":"",Insert:"","Insert image":"رەسىم قىستۇرۇش","Insert image via URL":"","Left aligned image":"سولغا توغۇرلانغان رەسىم",Original:"","Resize image":"","Resize image to %0":"","Resize image to the original size":"","Right aligned image":"ئوڭغا توغۇرلانغان رەسىم","Side image":"يان رەسىم","Text alternative":"تېكىست ئاملاشتۇرۇش",Update:"","Update image URL":"","Upload failed":"چىقىرىش مەغلۇپ بولدى","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.ug=n.ug||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"","Edit link":"",Link:"ئۇلانما","Link image":"","Link URL":"ئۇلاش ئادىرسى","Open in a new tab":"","Open link in new tab":"","This link has no URL":"",Unlink:"ئۇلانمىنى ئۈزۈش"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.ug=e.ug||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"بەلگە تىزىملىك","Bulleted list styles toolbar":"",Circle:"",Decimal:"","Decimal with leading zero":"",Disc:"","Lower-latin":"","Lower–roman":"","Numbered List":"نومۇرلۇق تىزىملىك","Numbered list styles toolbar":"",Square:"","To-do List":"","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e.ug=e.ug||{};t.dictionary=Object.assign(t.dictionary||{},{"Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align table to the left":"","Align table to the right":"",Alignment:"",Background:"",Border:"","Cell properties":"","Center table":"",Color:"","Color picker":"",Column:"",Dashed:"","Delete column":"","Delete row":"",Dimensions:"",Dotted:"",Double:"","Enter table caption":"",Groove:"","Header column":"","Header row":"",Height:"","Horizontal text alignment toolbar":"","Insert column left":"","Insert column right":"","Insert row above":"","Insert row below":"","Insert table":"جەدۋەل قىستۇر",Inset:"","Justify cell text":"","Merge cell down":"","Merge cell left":"","Merge cell right":"","Merge cell up":"","Merge cells":"",None:"",Outset:"",Padding:"",Ridge:"",Row:"","Select column":"","Select row":"",Solid:"","Split cell horizontally":"","Split cell vertically":"",Style:"","Table alignment toolbar":"","Table cell text alignment":"","Table properties":"","Table toolbar":"",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':"",'The value is invalid. Try "10px" or "2em" or simply "2".':"","Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"",Width:""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const o=e.ug=e.ug||{};o.dictionary=Object.assign(o.dictionary||{},{"%0 of %1":"",Aquamarine:"",Black:"",Blue:"",Cancel:"ئىناۋەتسىز","Dim grey":"","Dropdown toolbar":"","Edit block":"","Editor toolbar":"",Green:"",Grey:"","Light blue":"","Light green":"","Light grey":"",Next:"",Orange:"",Previous:"",Purple:"",Red:"",Redo:"تەكرارلاش","Remove color":"رەڭنى چىقىرىۋېتىش","Restore default":"","Rich Text Editor":"تېكىست تەھرىرلىگۈچ","Rich Text Editor, %0":"تېكىست تەھرىرلىگۈچ، 0%",Save:"ساقلاش","Show more items":"",Turquoise:"",Undo:"يېنىۋېلىش",White:"",Yellow:""}),o.getPluralForm=function(e){return 1!=e}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/uk.js b/core/assets/vendor/ckeditor5/translations/uk.js
new file mode 100644
index 000000000000..54b38775ade1
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/uk.js
@@ -0,0 +1 @@
+!function(n){const i=n.uk=n.uk||{};i.dictionary=Object.assign(i.dictionary||{},{"Align center":"По центру","Align left":"По лівому краю","Align right":"По правому краю",Justify:"По ширині","Text alignment":"Вирівнювання тексту","Text alignment toolbar":"Панель інструментів вирівнювання тексту"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.uk=i.uk||{};n.dictionary=Object.assign(n.dictionary||{},{Bold:"Жирний",Code:"Код",Italic:"Курсив",Strikethrough:"Закреслений",Subscript:"Нижній індекс",Superscript:"Верхній індекс",Underline:"Підкреслений"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.uk=i.uk||{};n.dictionary=Object.assign(n.dictionary||{},{"Block quote":"Цитата"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const e=n.uk=n.uk||{};e.dictionary=Object.assign(e.dictionary||{},{"Choose heading":"Оберіть заголовок",Heading:"Заголовок","Heading 1":"Заголовок 1","Heading 2":"Заголовок 2","Heading 3":"Заголовок 3","Heading 4":"Заголовок 4","Heading 5":"Заголовок 5","Heading 6":"Заголовок 6",Paragraph:"Параграф","Type or paste your content here.":"Введіть або вставте свій вміст тут.","Type your title":"Введіть назву"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.uk=i.uk||{};n.dictionary=Object.assign(n.dictionary||{},{"Horizontal line":"Горизонтальна лінія"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.uk=e.uk||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"","Centered image":"Зображення по центру","Change image text alternative":"Змінити текстову альтернативу зображення","Enter image caption":"Введіть підпис зображення","Full size image":"Повний розмір зображення","Image resize list":"Перелік розмірів","Image toolbar":"Панелі інструментів зображення","image widget":"Віджет зображення","In line":"",Insert:"Вставити","Insert image":"Вставити зображення","Insert image via URL":"Вставити зображення через посилання","Left aligned image":"Зображення ліворуч",Original:"Оригінал","Resize image":"Розтягнути зображення","Resize image to %0":"Розтягнути зображення до %0","Resize image to the original size":"Розтягнути зображення до оригінального розміру","Right aligned image":"Зображення праворуч","Side image":"Бокове зображення","Text alternative":"Текстова альтернатива",Update:"Оновити","Update image URL":"Оновити посилання на зображення","Upload failed":"Завантаження не вдалось","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.uk=n.uk||{};i.dictionary=Object.assign(i.dictionary||{},{"Decrease indent":"Зменшити відступ","Increase indent":"Збільшити відступ"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const a=n.uk=n.uk||{};a.dictionary=Object.assign(a.dictionary||{},{"Choose language":"Обрати мову",Language:"Мова","Remove language":"Видалити мову"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.uk=n.uk||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"Завантажувальне","Edit link":"Редагувати посилання",Link:"Посилання","Link image":"Посилання зображення","Link URL":"URL посилання","Open in a new tab":"Вікрити у новій вкладці","Open link in new tab":"Відкрити посилання у новій вкладці","This link has no URL":"Це посилання не має URL",Unlink:"Видалити посилання"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.uk=e.uk||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"Маркерний список","Bulleted list styles toolbar":"Панель маркерних списків",Circle:"Коло",Decimal:"Цифри","Decimal with leading zero":"Цифри із провідним нулем",Disc:"Круг","Lower-latin":"","Lower–roman":"","Numbered List":"Нумерований список","Numbered list styles toolbar":"Панель нумерованих списків",Square:"Квадрат","To-do List":"Список справ","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.uk=i.uk||{};n.dictionary=Object.assign(n.dictionary||{},{"Remove Format":"Видалити форматування"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e.uk=e.uk||{};t.dictionary=Object.assign(t.dictionary||{},{"Align cell text to the bottom":"Вирівняти текст комірки по низу","Align cell text to the center":"Вирівняти текст по центру","Align cell text to the left":"Вирівняти текст по лівому краю","Align cell text to the middle":"Вирівняти текст комірки по середині","Align cell text to the right":"Вирівняти текст по правому краю","Align cell text to the top":"Вирівняти текст комірки по верху ","Align table to the left":"Вирівняти таблицю по лівому краю","Align table to the right":"Вирівняти таблицю по правому краю ",Alignment:"Вирівнювання",Background:"Фон",Border:"Межа","Cell properties":"Властивості комірок","Center table":"Відцентрувати таблицю",Color:"Колір","Color picker":"Вибір кольору",Column:"Стовпець",Dashed:"Пунктирна","Delete column":"Видалити стовпець","Delete row":"Видалити рядок",Dimensions:"Розміри",Dotted:"Точкова",Double:"Подвійна","Enter table caption":"",Groove:"Жолобчаста","Header column":"Заголовок стовпця","Header row":"Заголовок рядка",Height:"Висота","Horizontal text alignment toolbar":"Панель інструментів вирівнювання горизонтального тексту","Insert column left":"Вставити стовпець зліва","Insert column right":"Вставити стовпець справа","Insert row above":"Вставити рядок знизу","Insert row below":"Вставити рядок зверху","Insert table":"Вставити таблицю",Inset:"Угнута","Justify cell text":"Вирівняти текст по ширині ","Merge cell down":"Поєднати комірки внизу","Merge cell left":"Поєднати комірки ліворуч","Merge cell right":"Поєднати комірки праворуч","Merge cell up":"Поєднати комірки вгору","Merge cells":"Поєднати комірки",None:"Не вказано",Outset:"Випукла",Padding:"Заповнення",Ridge:"Ребриста",Row:"Рядок","Select column":"Виберіть стовпчик","Select row":"Виберіть рядок",Solid:"Суцільний","Split cell horizontally":"Розділити комірки горизонтально","Split cell vertically":"Розділити комірки вертикально",Style:"Стиль","Table alignment toolbar":"Панель інструментів вирівнювання таблиці","Table cell text alignment":"Вирівнювання тексту комірки","Table properties":"Властивості таблиці","Table toolbar":"Панель інструментів таблиці",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':'Колір недійсний. Спробуйте "#FF0000" або "rgb(255,0,0)" або "red"','The value is invalid. Try "10px" or "2em" or simply "2".':'Значення недійсне. Спробуйте "10px" або "2em" або просто "2"',"Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"Панель інструментів вертикального вирівнювання тексту",Width:"Ширина"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const o=e.uk=e.uk||{};o.dictionary=Object.assign(o.dictionary||{},{"%0 of %1":"%0 із %1",Aquamarine:"Аквамариновий",Black:"Чорний",Blue:"Синій",Cancel:"Відміна","Dim grey":"Темно-сірий","Dropdown toolbar":"Випадаюча панель інструментів","Edit block":"Редагувати блок","Editor toolbar":"Панель інструментів редактора",Green:"Зелений",Grey:"Сірий","Insert paragraph after block":"Додати абзац після блока","Insert paragraph before block":"Додати абзац перед блоком","Light blue":"Світло-синій","Light green":"Світло-зелений","Light grey":"Світло-сірий",Next:"Наступний",Orange:"Помаранчевий",Previous:"Попередній",Purple:"Фіолетовий",Red:"Червоний",Redo:"Повтор","Remove color":"Видалити колір","Restore default":"","Rich Text Editor":"Розширений текстовий редактор","Rich Text Editor, %0":"Розширений текстовий редактор, %0",Save:"Зберегти","Select all":"Вибрати все","Show more items":"Показати більше",Turquoise:"Бірюзовий",Undo:"Відміна","Upload in progress":"Виконується завантаження",White:"Білий","Widget toolbar":"Панель інструментів віджетів",Yellow:"Жовтий"}),o.getPluralForm=function(e){return e%1==0&&e%10==1&&e%100!=11?0:e%1==0&&e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?1:e%1==0&&(e%10==0||e%10>=5&&e%10<=9||e%100>=11&&e%100<=14)?2:3}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/vi.js b/core/assets/vendor/ckeditor5/translations/vi.js
new file mode 100644
index 000000000000..8be30edc4e6c
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/vi.js
@@ -0,0 +1 @@
+!function(n){const i=n.vi=n.vi||{};i.dictionary=Object.assign(i.dictionary||{},{"Align center":"Canh giữa","Align left":"Canh trái","Align right":"Canh phải",Justify:"Canh đều","Text alignment":"Căn chỉnh văn bản","Text alignment toolbar":"Thanh công cụ canh chữ"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.vi=i.vi||{};n.dictionary=Object.assign(n.dictionary||{},{Bold:"Đậm",Code:"Code",Italic:"Nghiêng",Strikethrough:"Gạch ngang",Subscript:"Chữ nhỏ dưới",Superscript:"Chữ nhỏ trên",Underline:"Gạch dưới"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.vi=i.vi||{};n.dictionary=Object.assign(n.dictionary||{},{"Block quote":"Trích dẫn"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.vi=i.vi||{};n.dictionary=Object.assign(n.dictionary||{},{"Choose heading":"Chọn tiêu đề",Heading:"Tiêu đề","Heading 1":"Tiêu đề 1","Heading 2":"Tiêu đề 2","Heading 3":"Tiêu đề 3","Heading 4":"Tiêu đề 4","Heading 5":"Tiêu đề 5","Heading 6":"Tiêu đề 6",Paragraph:"Đoạn văn","Type or paste your content here.":"Nhập hoặc dán nội dung tại đây","Type your title":"Nhập tựa đề"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.vi=n.vi||{};i.dictionary=Object.assign(i.dictionary||{},{"Horizontal line":"Đường ngang"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const e=n.vi=n.vi||{};e.dictionary=Object.assign(e.dictionary||{},{"Break text":"","Centered image":"Ảnh canh giữa","Change image text alternative":"Đổi chữ alt của ảnh","Enter image caption":"Nhập mô tả ảnh","Full size image":"Ảnh đầy đủ","Image resize list":"Danh sách ảnh đã chỉnh kích thước","Image toolbar":"Thanh công cụ hình ảnh","image widget":"tiện ích ảnh","In line":"",Insert:"Chèn","Insert image":"Chèn ảnh","Insert image via URL":"Chèn ảnh từ URL","Left aligned image":"Ảnh canh trái",Original:"Nguyên bản","Resize image":"Chỉnh kích cỡ ảnh","Resize image to %0":"Chỉnh kích cỡ ảnh về %0","Resize image to the original size":"Chỉnh về ảnh kích cỡ nguyên gốc","Right aligned image":"Ảnh canh phải","Side image":"Ảnh một bên","Text alternative":"Chữ alt",Update:"Cập nhật","Update image URL":"Cập nhật ảnh từ URL","Upload failed":"Tải thất bại","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.vi=n.vi||{};i.dictionary=Object.assign(i.dictionary||{},{"Decrease indent":"Giảm lề","Increase indent":"Tăng lề"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.vi=n.vi||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"Có thể tải về","Edit link":"Sửa liên kết",Link:"Chèn liên kết","Link image":"Liên kết của ảnh","Link URL":"Đường dẫn liên kết","Open in a new tab":"Mở trên tab mới","Open link in new tab":"Mở liên kết","This link has no URL":"Liên kết không có đường dẫn",Unlink:"Bỏ liên kết"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.vi=e.vi||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"Danh sách đánh ký hiệu","Bulleted list styles toolbar":"",Circle:"",Decimal:"","Decimal with leading zero":"",Disc:"","Lower-latin":"","Lower–roman":"","Numbered List":"Danh sách đánh số","Numbered list styles toolbar":"",Square:"","To-do List":"Danh sách cần làm","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.vi=i.vi||{};n.dictionary=Object.assign(n.dictionary||{},{"Remove Format":"Xóa định dang"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(t){const e=t.vi=t.vi||{};e.dictionary=Object.assign(e.dictionary||{},{"Align cell text to the bottom":"","Align cell text to the center":"","Align cell text to the left":"","Align cell text to the middle":"","Align cell text to the right":"","Align cell text to the top":"","Align table to the left":"","Align table to the right":"",Alignment:"Căn lề",Background:"Màu nền",Border:"Viền","Cell properties":"Thuộc tính của ô","Center table":"",Color:"Màu","Color picker":"",Column:"Cột",Dashed:"","Delete column":"Xoá cột","Delete row":"Xoá hàng",Dimensions:"Kích thước",Dotted:"",Double:"","Enter table caption":"",Groove:"","Header column":"Tiêu đề cột","Header row":"Tiêu đề hàng",Height:"Cao","Horizontal text alignment toolbar":"","Insert column left":"Thêm cột vào bên trái","Insert column right":"Thêm cột vào bên phải","Insert row above":"Thêm hàng phía trên","Insert row below":"Thêm hàng ở dưới","Insert table":"Tạo bảng",Inset:"","Justify cell text":"","Merge cell down":"Sát nhập ô xuống dưới","Merge cell left":"Sát nhập ô qua trái","Merge cell right":"Sát nhập ô qua phải","Merge cell up":"Sát nhập ô lên trên","Merge cells":"Sát nhập ô",None:"",Outset:"",Padding:"Cách lề",Ridge:"",Row:"Hàng","Select column":"Chọn cột","Select row":"Chọn hàng",Solid:"","Split cell horizontally":"Tách ô theo chiều ngang","Split cell vertically":"Tách ô theo chiều dọc",Style:"Kiểu","Table alignment toolbar":"","Table cell text alignment":"Căn lề văn bản trong ô","Table properties":"Thuộc tính của bảng","Table toolbar":"Thanh công cụ bảng",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':"",'The value is invalid. Try "10px" or "2em" or simply "2".':"","Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"",Width:"Rộng"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const o=n.vi=n.vi||{};o.dictionary=Object.assign(o.dictionary||{},{"%0 of %1":"%0 đến %1",Aquamarine:"Xanh ngọc biển",Black:"Đen",Blue:"Xanh biển",Cancel:"Hủy","Dim grey":"Xám mờ","Dropdown toolbar":"Thanh công cụ danh mục","Edit block":"Chỉnh sửa đoạn","Editor toolbar":"Thanh công cụ biên tập",Green:"Xanh lá",Grey:"Xám","Insert paragraph after block":"","Insert paragraph before block":"","Light blue":"Xanh dương","Light green":"Xanh lá nhạt","Light grey":"Xám nhạt",Next:"Tiếp theo",Orange:"Cam",Previous:"Quay lại",Purple:"Tím",Red:"Đỏ",Redo:"Tiếp tục","Remove color":"Xóa màu","Restore default":"","Rich Text Editor":"Trình soạn thảo văn bản","Rich Text Editor, %0":"Trình soạn thảo văn bản, %0",Save:"Lưu","Show more items":"Xem thêm",Turquoise:"Xanh ngọc bích",Undo:"Hoàn tác","Upload in progress":"Đang tải lên",White:"Trắng","Widget toolbar":"Thanh công cụ tiện ích",Yellow:"Vàng"}),o.getPluralForm=function(n){return 0}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/zh-cn.js b/core/assets/vendor/ckeditor5/translations/zh-cn.js
new file mode 100644
index 000000000000..7a5cc92ea173
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/zh-cn.js
@@ -0,0 +1 @@
+!function(n){const i=n["zh-cn"]=n["zh-cn"]||{};i.dictionary=Object.assign(i.dictionary||{},{"Align center":"居中对齐","Align left":"左对齐","Align right":"右对齐",Justify:"两端对齐","Text alignment":"对齐","Text alignment toolbar":"对齐工具栏"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i["zh-cn"]=i["zh-cn"]||{};n.dictionary=Object.assign(n.dictionary||{},{Bold:"加粗",Code:"代码",Italic:"倾斜",Strikethrough:"删除线",Subscript:"下标",Superscript:"上标",Underline:"下划线"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const c=n["zh-cn"]=n["zh-cn"]||{};c.dictionary=Object.assign(c.dictionary||{},{"Block quote":"块引用"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const e=n["zh-cn"]=n["zh-cn"]||{};e.dictionary=Object.assign(e.dictionary||{},{"Choose heading":"标题类型",Heading:"标题","Heading 1":"标题 1","Heading 2":"标题 2","Heading 3":"标题 3","Heading 4":"标题 4","Heading 5":"标题 5","Heading 6":"标题 6",Paragraph:"段落","Type or paste your content here.":"在这里输入或粘贴内容","Type your title":"输入标题"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n["zh-cn"]=n["zh-cn"]||{};i.dictionary=Object.assign(i.dictionary||{},{"Horizontal line":"水平线"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e["zh-cn"]=e["zh-cn"]||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"","Centered image":"图片居中","Change image text alternative":"更改图片替换文本","Enter image caption":"输入图片标题","Full size image":"图片通栏显示","Image resize list":"图片大小列表","Image toolbar":"图片工具栏","image widget":"图像小部件","In line":"",Insert:"插入","Insert image":"插入图像","Insert image via URL":"通过URL地址插入图片","Left aligned image":"图片左侧对齐",Original:"原始大小","Resize image":"调整图像大小","Resize image to %0":"调整图像大小为0%","Resize image to the original size":"调整图像大小为原始大小","Right aligned image":"图片右侧对齐","Side image":"图片侧边显示","Text alternative":"替换文本",Update:"更新","Update image URL":"更新图片URL地址","Upload failed":"上传失败","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n["zh-cn"]=n["zh-cn"]||{};i.dictionary=Object.assign(i.dictionary||{},{"Decrease indent":"减少缩进","Increase indent":"增加缩进"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const a=n["zh-cn"]=n["zh-cn"]||{};a.dictionary=Object.assign(a.dictionary||{},{"Choose language":"选择语言",Language:"语言","Remove language":"移除语言"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n["zh-cn"]=n["zh-cn"]||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"可下载","Edit link":"修改链接",Link:"超链接","Link image":"链接图片","Link URL":"链接网址","Open in a new tab":"在新标签页中打开","Open link in new tab":"在新标签页中打开链接","This link has no URL":"此链接没有设置网址",Unlink:"取消超链接"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e["zh-cn"]=e["zh-cn"]||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"项目符号列表","Bulleted list styles toolbar":"项目符号列表样式工具条",Circle:"空心圆点",Decimal:"阿拉伯数字","Decimal with leading zero":"前导零阿拉伯数字",Disc:"实心圆点","Lower-latin":"小写拉丁字母","Lower–roman":"小写罗马数字","Numbered List":"项目编号列表","Numbered list styles toolbar":"项目编号列表样式工具条",Square:"实心方块","To-do List":"待办列表","Toggle the circle list style":"切换空心原点列表样式","Toggle the decimal list style":"切换阿拉伯数字列表样式","Toggle the decimal with leading zero list style":"切换前导零阿拉伯数字列表样式","Toggle the disc list style":"切换实心原点列表样式","Toggle the lower–latin list style":"切换小写拉丁字母列表样式","Toggle the lower–roman list style":"切换小写罗马数字列表样式","Toggle the square list style":"切换实心方块列表样式","Toggle the upper–latin list style":"切换大写拉丁字母列表样式","Toggle the upper–roman list style":"切换大写罗马数字列表样式","Upper-latin":"大写拉丁字母","Upper-roman":"大写罗马数字"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n["zh-cn"]=n["zh-cn"]||{};i.dictionary=Object.assign(i.dictionary||{},{"Remove Format":"移除格式"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const c=n["zh-cn"]=n["zh-cn"]||{};c.dictionary=Object.assign(c.dictionary||{},{Source:"源代码"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e["zh-cn"]=e["zh-cn"]||{};t.dictionary=Object.assign(t.dictionary||{},{"Align cell text to the bottom":"使单元格文本对齐到底部","Align cell text to the center":"使单元格文本水平居中","Align cell text to the left":"使单元格文本左对齐","Align cell text to the middle":"使单元格文本垂直居中","Align cell text to the right":"使单元格文本右对齐","Align cell text to the top":"使单元格文本对齐到顶部","Align table to the left":"使表格左对齐","Align table to the right":"使表格右对齐",Alignment:"对齐",Background:"背景",Border:"边框","Cell properties":"单元格属性","Center table":"表格居中",Color:"颜色","Color picker":"颜色选择器",Column:"列",Dashed:"虚线","Delete column":"删除本列","Delete row":"删除本行",Dimensions:"尺寸",Dotted:"点状虚线",Double:"双线","Enter table caption":"",Groove:"凹槽边框","Header column":"标题列","Header row":"标题行",Height:"高度","Horizontal text alignment toolbar":"水平文本对齐工具栏","Insert column left":"左侧插入列","Insert column right":"右侧插入列","Insert row above":"在上面插入一行","Insert row below":"在下面插入一行","Insert table":"插入表格",Inset:"凹边框","Justify cell text":"对齐单元格文本","Merge cell down":"向下合并单元格","Merge cell left":"向左合并单元格","Merge cell right":"向右合并单元格","Merge cell up":"向上合并单元格","Merge cells":"合并单元格",None:"无",Outset:"凸边框",Padding:"内边距",Ridge:"垄状边框",Row:"行","Select column":"选择列","Select row":"选择行",Solid:"实线","Split cell horizontally":"横向拆分单元格","Split cell vertically":"纵向拆分单元格",Style:"样式","Table alignment toolbar":"表格对齐工具栏","Table cell text alignment":"表格单元格中的文本水平对齐","Table properties":"表格属性","Table toolbar":"表格工具栏",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':'颜色无效。尝试使用"#FF0000"、"rgb(255,0,0)"或者"red"。','The value is invalid. Try "10px" or "2em" or simply "2".':"无效值。尝试使用“10px”、“2ex”或者只写“2”。","Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"垂直文本对齐工具栏",Width:"宽度"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(t){const a=t["zh-cn"]=t["zh-cn"]||{};a.dictionary=Object.assign(a.dictionary||{},{"Almost equal to":"约等于",Angle:"角","Approximately equal to":"近似等于","Asterisk operator":"星号运算符","Austral sign":"澳大利亚货币符号","back with leftwards arrow above":"带有back标识的向左箭头","Bitcoin sign":"比特币符号","Cedi sign":"塞地符号","Cent sign":"分币符号","Character categories":"字符类别","Colon sign":"科朗符号","Contains as member":"包含","Copyright sign":"版权符号","Cruzeiro sign":"克鲁塞罗符号","Currency sign":"货币符号","Degree sign":"度数符号","Division sign":"除号","Dollar sign":"美元符号","Dong sign":"越南盾符号","Double dagger":"双剑号","Double exclamation mark":"双叹号","Double low-9 quotation mark":"低位后双引号","Double question mark":"双问号","downwards arrow to bar":"头部带杠的向下箭头","downwards dashed arrow":"向下虚线箭头","downwards double arrow":"向下双箭头","Drachma sign":"德拉克马符号","Element of":"属于","Em dash":"长破折号","Empty set":"空集","En dash":"短破折号","end with leftwards arrow above":"带有end标识的向左箭头","Euro sign":"欧元符号","Euro-currency sign":"欧元货币符号","Exclamation question mark":"感叹疑问号","For all":"对于全部","Fraction slash":"分数斜线","French franc sign":"法国法郎符号","German penny sign":"德国便士符号","Greater-than or equal to":"大于等于","Greater-than sign":"大于号","Guarani sign":"瓜拉尼货币符号","Horizontal ellipsis":"省略号","Hryvnia sign":"戈里夫纳符号","Identical to":"恒等于","Indian rupee sign":"印度卢比符号",Infinity:"无穷大",Integral:"积分",Intersection:"交集","Inverted exclamation mark":"反感叹号","Inverted question mark":"反问号","Kip sign":" 基普符号","Latin capital letter a with breve":"带短音符的大写拉丁字母a","Latin capital letter a with macron":"带长音符的大写拉丁字母a","Latin capital letter a with ogonek":"带反尾形符的大写拉丁字母a","Latin capital letter c with acute":"带锐音符的大写拉丁字母c","Latin capital letter c with caron":"带抑扬符的大写拉丁字母c","Latin capital letter c with circumflex":"带扬抑符的大写拉丁字母c","Latin capital letter c with dot above":"带上点的大写拉丁字母c","Latin capital letter d with caron":"带抑扬符的大写拉丁字母d","Latin capital letter d with stroke":"带删节线的大写拉丁字母d","Latin capital letter e with breve":"带短音符的大写拉丁字母e","Latin capital letter e with caron":"带抑扬符的大写拉丁字母e","Latin capital letter e with dot above":"带上点的大写拉丁字母e","Latin capital letter e with macron":"带长音符的大写拉丁字母e","Latin capital letter e with ogonek":"带反尾形符的大写拉丁字母e","Latin capital letter eng":"大写拉丁字母eng","Latin capital letter g with breve":"带短音符的大写拉丁字母g","Latin capital letter g with cedilla":"带软音符的大写拉丁字母g","Latin capital letter g with circumflex":"带扬抑符的大写拉丁字母g","Latin capital letter g with dot above":"带上点的大写拉丁字母g","Latin capital letter h with circumflex":"带扬抑符的大写拉丁字母h","Latin capital letter h with stroke":"带删节线的大写拉丁字母h","Latin capital letter i with breve":"带短音符的大写拉丁字母i","Latin capital letter i with dot above":"带上点的大写拉丁字母i","Latin capital letter i with macron":"带长音符的大写拉丁字母i","Latin capital letter i with ogonek":"带反尾形符的大写拉丁字母i","Latin capital letter i with tilde":"带腭化符的大写拉丁字母i","Latin capital letter j with circumflex":"带扬抑符的大写拉丁字母j","Latin capital letter k with cedilla":"带软音符的大写拉丁字母k","Latin capital letter l with acute":"带锐音符的大写拉丁字母l","Latin capital letter l with caron":"带抑扬符的大写拉丁字母l","Latin capital letter l with cedilla":"带软音符的大写拉丁字母l","Latin capital letter l with middle dot":"带中点的大写拉丁字母l","Latin capital letter l with stroke":"带删节线的大写拉丁字母l","Latin capital letter n with acute":"带锐音符的大写拉丁字母n","Latin capital letter n with caron":"带抑扬符的大写拉丁字母n","Latin capital letter n with cedilla":"带软音符的大写拉丁字母n","Latin capital letter o with breve":"带短音符的大写拉丁字母o","Latin capital letter o with double acute":"带双锐音符的大写拉丁字母o","Latin capital letter o with macron":"带长音符的大写拉丁字母o","Latin capital letter r with acute":"带锐音符的大写拉丁字母r","Latin capital letter r with caron":"带抑扬符的大写拉丁字母r","Latin capital letter r with cedilla":"带软音符的大写拉丁字母r","Latin capital letter s with acute":"带锐音符的大写拉丁字母s","Latin capital letter s with caron":"带抑扬符的大写拉丁字母s","Latin capital letter s with cedilla":"带软音符的大写拉丁字母s","Latin capital letter s with circumflex":"带扬抑符的大写拉丁字母s","Latin capital letter t with caron":"带抑扬符的大写拉丁字母t","Latin capital letter t with cedilla":"带软音符的大写拉丁字母t","Latin capital letter t with stroke":"带删节线的大写拉丁字母t","Latin capital letter u with breve":"带短音符的大写拉丁字母u","Latin capital letter u with double acute":"带双锐音符的大写拉丁字母u","Latin capital letter u with macron":"带长音符的大写拉丁字母u","Latin capital letter u with ogonek":"带反尾形符的大写拉丁字母u","Latin capital letter u with ring above":"带上圆圈的大写拉丁字母u","Latin capital letter u with tilde":"带腭化符的大写拉丁字母u","Latin capital letter w with circumflex":"带扬抑符的大写拉丁字母w","Latin capital letter y with circumflex":"带扬抑符的大写拉丁字母y","Latin capital letter y with diaeresis":"带分音符的大写拉丁字母y","Latin capital letter z with acute":"带锐音符的大写拉丁字母z","Latin capital letter z with caron":"带抑扬符的大写拉丁字母z","Latin capital letter z with dot above":"带上点的大写拉丁字母z","Latin capital ligature ij":"大写拉丁连字符ij","Latin capital ligature oe":"大写拉丁连字符oe","Latin small letter a with breve":"带短音符的小写拉丁字母a","Latin small letter a with macron":"带长音符的小写拉丁字母a","Latin small letter a with ogonek":"带反尾形符的小写拉丁字母a","Latin small letter c with acute":"带锐音符的小写拉丁字母c","Latin small letter c with caron":"带抑扬符的小写拉丁字母c","Latin small letter c with circumflex":"带扬抑符的小写拉丁字母c","Latin small letter c with dot above":"带上点的小写拉丁字母c","Latin small letter d with caron":"带抑扬符的小写拉丁字母d","Latin small letter d with stroke":"带删节线的小写拉丁字母d","Latin small letter dotless i":"没有点的小写拉丁字母i","Latin small letter e with breve":"带短音符的小写拉丁字母e","Latin small letter e with caron":"带抑扬符的小写拉丁字母e","Latin small letter e with dot above":"带上点的小写拉丁字母e","Latin small letter e with macron":"带长音符的小写拉丁字母e","Latin small letter e with ogonek":"带反尾形符的小写拉丁字母e","Latin small letter eng":"小写拉丁字母eng","Latin small letter f with hook":"带钩的拉丁文小写字母 F","Latin small letter g with breve":"带短音符的小写拉丁字母g","Latin small letter g with cedilla":"带软音符的小写拉丁字母g","Latin small letter g with circumflex":"带扬抑符的小写拉丁字母g","Latin small letter g with dot above":"带上点的小写拉丁字母g","Latin small letter h with circumflex":"带扬抑符的小写拉丁字母h","Latin small letter h with stroke":"带删节线的小写拉丁字母h","Latin small letter i with breve":"带短音符的小写拉丁字母i","Latin small letter i with macron":"带长音符的小写拉丁字母i","Latin small letter i with ogonek":"带反尾形符的小写拉丁字母i","Latin small letter i with tilde":"带腭化符的小写拉丁字母i","Latin small letter j with circumflex":"带扬抑符的小写拉丁字母j","Latin small letter k with cedilla":"带软音符的小写拉丁字母k","Latin small letter kra":"小写拉丁字母kra","Latin small letter l with acute":"带锐音符的小写拉丁字母l","Latin small letter l with caron":"带抑扬符的小写拉丁字母l","Latin small letter l with cedilla":"带软音符的小写拉丁字母l","Latin small letter l with middle dot":"带中点的小写拉丁字母l","Latin small letter l with stroke":"带删节线的小写拉丁字母l","Latin small letter long s":"小写拉丁字母长s","Latin small letter n preceded by apostrophe":"冠以撇号的小写拉丁字母n","Latin small letter n with acute":"带锐音符的小写拉丁字母n","Latin small letter n with caron":"带抑扬符的小写拉丁字母n","Latin small letter n with cedilla":"带软音符的小写拉丁字母n","Latin small letter o with breve":"带短音符的小写拉丁字母o","Latin small letter o with double acute":"带双锐音符的小写拉丁字母o","Latin small letter o with macron":"带长音符的小写拉丁字母o","Latin small letter r with acute":"带锐音符的小写拉丁字母r","Latin small letter r with caron":"带抑扬符的小写拉丁字母r","Latin small letter r with cedilla":"带软音符的小写拉丁字母r","Latin small letter s with acute":"带锐音符的小写拉丁字母s","Latin small letter s with caron":"带抑扬符的小写拉丁字母s","Latin small letter s with cedilla":"带软音符的小写拉丁字母s","Latin small letter s with circumflex":"带扬抑符的小写拉丁字母s","Latin small letter t with caron":"带抑扬符的小写拉丁字母t","Latin small letter t with cedilla":"带软音符的小写拉丁字母t","Latin small letter t with stroke":"带删节线的小写拉丁字母t","Latin small letter u with breve":"带短音符的小写拉丁字母u","Latin small letter u with double acute":"带双锐音符的小写拉丁字母u","Latin small letter u with macron":"带长音符的小写拉丁字母u","Latin small letter u with ogonek":"带反尾形符的小写拉丁字母u","Latin small letter u with ring above":"带上圆圈的小写拉丁字母u","Latin small letter u with tilde":"带腭化符的小写拉丁字母u","Latin small letter w with circumflex":"带扬抑符的小写拉丁字母w","Latin small letter y with circumflex":"带扬抑符的小写拉丁字母y","Latin small letter z with acute":"带锐音符的小写拉丁字母z","Latin small letter z with caron":"带抑扬符的小写拉丁字母z","Latin small letter z with dot above":"带上点的小写拉丁字母z","Latin small ligature ij":"小写拉丁连字符ij","Latin small ligature oe":"小写拉丁连字符oe","Left double quotation mark":"左双引号","Left single quotation mark":"左单引号","Left-pointing double angle quotation mark":"双左尖括号","leftwards arrow to bar":"头部带杠的向左箭头","leftwards dashed arrow":"向左虚线箭头","leftwards double arrow":"向左双箭头","Less-than or equal to":"小于等于","Less-than sign":"小于号","Lira sign":"里拉符号","Livre tournois sign":"里弗尔符号","Logical and":"逻辑与","Logical or":"逻辑或",Macron:"长音符号","Manat sign":"马纳特符号","Mill sign":"密尔符号","Minus sign":"负号","Multiplication sign":"称号","N-ary product":"N 元乘积","N-ary summation":"N 元求和",Nabla:"劈形算符","Naira sign":"奈拉符号","New sheqel sign":"新谢克尔符号","Nordic mark sign":"北欧马克征符号","Not an element of":"不属于","Not equal to":"不等于","Not sign":"非","on with exclamation mark with left right arrow above":"带有NO!标识的左右双向箭头",Overline:"上划线","Paragraph sign":"段落符号","Partial differential":"偏微分","Per mille sign":"千分号","Per ten thousand sign":"万分号","Peseta sign":"比塞塔符号","Peso sign":"比索符号","Plus-minus sign":"正负号","Pound sign":"英镑符号","Proportional to":"比例","Question exclamation mark":"疑问感叹号","Registered sign":"注册商标","Reversed paragraph sign":"反向段落符号","Right double quotation mark":"右双引号","Right single quotation mark":"右单引号","Right-pointing double angle quotation mark":"双右尖括号","rightwards arrow to bar":"头部带杠的向右箭头","rightwards dashed arrow":"向右虚线箭头","rightwards double arrow":"向右双箭头","Ruble sign":"俄罗斯卢布","Rupee sign":"卢比符号","Section sign":"节标记","Single left-pointing angle quotation mark":"单左尖括号","Single low-9 quotation mark":"低位后单引号","Single right-pointing angle quotation mark":"单右尖括号","soon with rightwards arrow above":"带有soon标识的向右箭头","Special characters":"特殊字符","Spesmilo sign":"斯佩斯米洛符号","Square root":"平方根","Tenge sign":"坚戈符号","There exists":"存在","Tilde operator":"波浪线运算符","top with upwards arrow above":"带有top标识的向上箭头","Trade mark sign":"商标符号","Tugrik sign":"图格里克符号","Turkish lira sign":"土耳其里拉符号","Two dot leader":"二点前导符",Union:"并集","up down arrow with base":"处于基线的上下箭头","upwards arrow to bar":"头部带杠的向上箭头","upwards dashed arrow":"向上虚线箭头","upwards double arrow":"向上双箭头","Vulgar fraction one half":"普通分数二分之一","Vulgar fraction one quarter":"普通分数四分之一","Vulgar fraction three quarters":"普通分数四分之三","Won sign":"韩元符号","Yen sign":"日元符号"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const o=e["zh-cn"]=e["zh-cn"]||{};o.dictionary=Object.assign(o.dictionary||{},{"%0 of %1":"第 %0 步,共 %1 步",Aquamarine:"海蓝色",Black:"黑色",Blue:"蓝色",Cancel:"取消","Dim grey":"暗灰色","Dropdown toolbar":"下拉工具栏","Edit block":"编辑框","Editor toolbar":"编辑器工具栏",Green:"绿色",Grey:"灰色","Insert paragraph after block":"在后面插入段落","Insert paragraph before block":"在前面插入段落","Light blue":"浅蓝色","Light green":"浅绿色","Light grey":"浅灰色",Next:"下一步",Orange:"橙色",Previous:"上一步",Purple:"紫色",Red:"红色",Redo:"重做","Remove color":"移除颜色","Restore default":"恢复默认","Rich Text Editor":"富文本编辑器","Rich Text Editor, %0":"富文本编辑器, %0",Save:"保存","Select all":"全选","Show more items":"显示更多",Turquoise:"青色",Undo:"撤销","Upload in progress":"正在上传",White:"白色","Widget toolbar":"小部件工具栏",Yellow:"黄色"}),o.getPluralForm=function(e){return 0}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor5/translations/zh.js b/core/assets/vendor/ckeditor5/translations/zh.js
new file mode 100644
index 000000000000..d12f7f167360
--- /dev/null
+++ b/core/assets/vendor/ckeditor5/translations/zh.js
@@ -0,0 +1 @@
+!function(n){const i=n.zh=n.zh||{};i.dictionary=Object.assign(i.dictionary||{},{"Align center":"置中對齊","Align left":"靠左對齊","Align right":"靠右對齊",Justify:"左右對齊","Text alignment":"文字對齊","Text alignment toolbar":"文字對齊"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.zh=i.zh||{};n.dictionary=Object.assign(n.dictionary||{},{Bold:"粗體",Code:"代碼",Italic:"斜體",Strikethrough:"刪除線",Subscript:"下標",Superscript:"上標",Underline:"底線"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.zh=i.zh||{};n.dictionary=Object.assign(n.dictionary||{},{"Block quote":"段落引用"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const e=n.zh=n.zh||{};e.dictionary=Object.assign(e.dictionary||{},{"Choose heading":"選取標題",Heading:"標題","Heading 1":"標題 1","Heading 2":"標題 2","Heading 3":"標題 3","Heading 4":"標題 4","Heading 5":"標題 5","Heading 6":"標題 6",Paragraph:"段落","Type or paste your content here.":"在此輸入或貼上你的內容。","Type your title":"輸入你的標題"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.zh=i.zh||{};n.dictionary=Object.assign(n.dictionary||{},{"Horizontal line":"水平線"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const i=e.zh=e.zh||{};i.dictionary=Object.assign(i.dictionary||{},{"Break text":"","Centered image":"置中圖片","Change image text alternative":"修改圖片的替代文字","Enter image caption":"輸入圖片說明","Full size image":"完整尺寸圖片","Image resize list":"圖片縮放清單","Image toolbar":"圖片工具","image widget":"圖片小工具","In line":"",Insert:"","Insert image":"插入圖片","Insert image via URL":"","Left aligned image":"向左對齊圖片",Original:"原始圖片","Resize image":"縮放圖片","Resize image to %0":"縮放圖片到 %0","Resize image to the original size":"縮放圖片到原始尺寸","Right aligned image":"向右對齊圖片","Side image":"側邊圖片","Text alternative":"替代文字",Update:"","Update image URL":"","Upload failed":"上傳失敗","Wrap text":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.zh=n.zh||{};i.dictionary=Object.assign(i.dictionary||{},{"Decrease indent":"減少縮排","Increase indent":"增加縮排"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const a=n.zh=n.zh||{};a.dictionary=Object.assign(a.dictionary||{},{"Choose language":"選擇語言",Language:"語言","Remove language":"移除語言"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(n){const i=n.zh=n.zh||{};i.dictionary=Object.assign(i.dictionary||{},{Downloadable:"可下載","Edit link":"編輯連結",Link:"連結","Link image":"圖片連結","Link URL":"連結˙ URL","Open in a new tab":"在新視窗開啟","Open link in new tab":"在新視窗開啟連結","This link has no URL":"連結沒有URL",Unlink:"移除連結"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const l=e.zh=e.zh||{};l.dictionary=Object.assign(l.dictionary||{},{"Bulleted List":"符號清單","Bulleted list styles toolbar":"",Circle:"",Decimal:"","Decimal with leading zero":"",Disc:"","Lower-latin":"","Lower–roman":"","Numbered List":"有序清單","Numbered list styles toolbar":"",Square:"","To-do List":"代辦清單","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"","Upper-latin":"","Upper-roman":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.zh=i.zh||{};n.dictionary=Object.assign(n.dictionary||{},{"Remove Format":"移除格式"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(i){const n=i.zh=i.zh||{};n.dictionary=Object.assign(n.dictionary||{},{Source:"原始碼"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const t=e.zh=e.zh||{};t.dictionary=Object.assign(t.dictionary||{},{"Align cell text to the bottom":"向下對齊","Align cell text to the center":"置中對齊","Align cell text to the left":"靠左對齊","Align cell text to the middle":"置中對齊","Align cell text to the right":"靠右對齊","Align cell text to the top":"向上對齊","Align table to the left":"靠左對齊","Align table to the right":"靠右對齊",Alignment:"對齊",Background:"背景顏色",Border:"邊框","Cell properties":"儲存格屬性","Center table":"置中對齊",Color:"文字顏色","Color picker":"顏色選擇",Column:"欄",Dashed:"虛線","Delete column":"刪除欄","Delete row":"刪除列",Dimensions:"尺寸",Dotted:"點線",Double:"雙線","Enter table caption":"",Groove:"內凹線","Header column":"標題欄","Header row":"標題列",Height:"高度","Horizontal text alignment toolbar":"水平對齊","Insert column left":"插入左方欄","Insert column right":"插入右方欄","Insert row above":"插入上方列","Insert row below":"插入下方列","Insert table":"插入表格",Inset:"內邊線","Justify cell text":"分散對齊","Merge cell down":"合併下方儲存格","Merge cell left":"合併左方儲存格","Merge cell right":"合併右方儲存格","Merge cell up":"合併上方儲存格","Merge cells":"合併儲存格",None:"無",Outset:"外框線",Padding:"儲存格留白",Ridge:"凸起線",Row:"列","Select column":"選擇欄","Select row":"選擇列",Solid:"實線","Split cell horizontally":"水平分割儲存格","Split cell vertically":"垂直分割儲存格",Style:"樣式","Table alignment toolbar":"表格對齊","Table cell text alignment":"儲存格文字對齊","Table properties":"表格屬性","Table toolbar":"表格工具",'The color is invalid. Try "#FF0000" or "rgb(255,0,0)" or "red".':'顏色代碼錯誤。試試看 "#FF0000" 或 "rgb(255, 0, 0)" 或 "red"。','The value is invalid. Try "10px" or "2em" or simply "2".':'尺寸代碼錯誤。試試看 "10px" 或 "2em" 或簡單寫 "2"。',"Toggle caption off":"","Toggle caption on":"","Vertical text alignment toolbar":"垂直對齊",Width:"寬度"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(t){const a=t.zh=t.zh||{};a.dictionary=Object.assign(a.dictionary||{},{"Almost equal to":"",Angle:"","Approximately equal to":"","Asterisk operator":"","Austral sign":"","back with leftwards arrow above":"","Bitcoin sign":"","Cedi sign":"","Cent sign":"","Character categories":"","Colon sign":"","Contains as member":"","Copyright sign":"","Cruzeiro sign":"","Currency sign":"","Degree sign":"","Division sign":"","Dollar sign":"","Dong sign":"","Double dagger":"","Double exclamation mark":"","Double low-9 quotation mark":"","Double question mark":"","downwards arrow to bar":"向下停止箭頭","downwards dashed arrow":"向下虛線箭頭","downwards double arrow":"向下雙箭頭","Drachma sign":"","Element of":"","Em dash":"","Empty set":"","En dash":"","end with leftwards arrow above":"","Euro sign":"","Euro-currency sign":"","Exclamation question mark":"","For all":"","Fraction slash":"","French franc sign":"","German penny sign":"","Greater-than or equal to":"","Greater-than sign":"","Guarani sign":"","Horizontal ellipsis":"","Hryvnia sign":"","Identical to":"","Indian rupee sign":"",Infinity:"",Integral:"",Intersection:"","Inverted exclamation mark":"","Inverted question mark":"","Kip sign":"","Latin capital letter a with breve":"","Latin capital letter a with macron":"","Latin capital letter a with ogonek":"","Latin capital letter c with acute":"","Latin capital letter c with caron":"","Latin capital letter c with circumflex":"","Latin capital letter c with dot above":"","Latin capital letter d with caron":"","Latin capital letter d with stroke":"","Latin capital letter e with breve":"","Latin capital letter e with caron":"","Latin capital letter e with dot above":"","Latin capital letter e with macron":"","Latin capital letter e with ogonek":"","Latin capital letter eng":"","Latin capital letter g with breve":"","Latin capital letter g with cedilla":"","Latin capital letter g with circumflex":"","Latin capital letter g with dot above":"","Latin capital letter h with circumflex":"","Latin capital letter h with stroke":"","Latin capital letter i with breve":"","Latin capital letter i with dot above":"","Latin capital letter i with macron":"","Latin capital letter i with ogonek":"","Latin capital letter i with tilde":"","Latin capital letter j with circumflex":"","Latin capital letter k with cedilla":"","Latin capital letter l with acute":"","Latin capital letter l with caron":"","Latin capital letter l with cedilla":"","Latin capital letter l with middle dot":"","Latin capital letter l with stroke":"","Latin capital letter n with acute":"","Latin capital letter n with caron":"","Latin capital letter n with cedilla":"","Latin capital letter o with breve":"","Latin capital letter o with double acute":"","Latin capital letter o with macron":"","Latin capital letter r with acute":"","Latin capital letter r with caron":"","Latin capital letter r with cedilla":"","Latin capital letter s with acute":"","Latin capital letter s with caron":"","Latin capital letter s with cedilla":"","Latin capital letter s with circumflex":"","Latin capital letter t with caron":"","Latin capital letter t with cedilla":"","Latin capital letter t with stroke":"","Latin capital letter u with breve":"","Latin capital letter u with double acute":"","Latin capital letter u with macron":"","Latin capital letter u with ogonek":"","Latin capital letter u with ring above":"","Latin capital letter u with tilde":"","Latin capital letter w with circumflex":"","Latin capital letter y with circumflex":"","Latin capital letter y with diaeresis":"","Latin capital letter z with acute":"","Latin capital letter z with caron":"","Latin capital letter z with dot above":"","Latin capital ligature ij":"","Latin capital ligature oe":"","Latin small letter a with breve":"","Latin small letter a with macron":"","Latin small letter a with ogonek":"","Latin small letter c with acute":"","Latin small letter c with caron":"","Latin small letter c with circumflex":"","Latin small letter c with dot above":"","Latin small letter d with caron":"","Latin small letter d with stroke":"","Latin small letter dotless i":"","Latin small letter e with breve":"","Latin small letter e with caron":"","Latin small letter e with dot above":"","Latin small letter e with macron":"","Latin small letter e with ogonek":"","Latin small letter eng":"","Latin small letter f with hook":"","Latin small letter g with breve":"","Latin small letter g with cedilla":"","Latin small letter g with circumflex":"","Latin small letter g with dot above":"","Latin small letter h with circumflex":"","Latin small letter h with stroke":"","Latin small letter i with breve":"","Latin small letter i with macron":"","Latin small letter i with ogonek":"","Latin small letter i with tilde":"","Latin small letter j with circumflex":"","Latin small letter k with cedilla":"","Latin small letter kra":"","Latin small letter l with acute":"","Latin small letter l with caron":"","Latin small letter l with cedilla":"","Latin small letter l with middle dot":"","Latin small letter l with stroke":"","Latin small letter long s":"","Latin small letter n preceded by apostrophe":"","Latin small letter n with acute":"","Latin small letter n with caron":"","Latin small letter n with cedilla":"","Latin small letter o with breve":"","Latin small letter o with double acute":"","Latin small letter o with macron":"","Latin small letter r with acute":"","Latin small letter r with caron":"","Latin small letter r with cedilla":"","Latin small letter s with acute":"","Latin small letter s with caron":"","Latin small letter s with cedilla":"","Latin small letter s with circumflex":"","Latin small letter t with caron":"","Latin small letter t with cedilla":"","Latin small letter t with stroke":"","Latin small letter u with breve":"","Latin small letter u with double acute":"","Latin small letter u with macron":"","Latin small letter u with ogonek":"","Latin small letter u with ring above":"","Latin small letter u with tilde":"","Latin small letter w with circumflex":"","Latin small letter y with circumflex":"","Latin small letter z with acute":"","Latin small letter z with caron":"","Latin small letter z with dot above":"","Latin small ligature ij":"","Latin small ligature oe":"","Left double quotation mark":"","Left single quotation mark":"","Left-pointing double angle quotation mark":"","leftwards arrow to bar":"向左停止箭頭","leftwards dashed arrow":"向左虛線箭頭","leftwards double arrow":"向左雙箭頭","Less-than or equal to":"","Less-than sign":"","Lira sign":"","Livre tournois sign":"","Logical and":"","Logical or":"",Macron:"","Manat sign":"","Mill sign":"","Minus sign":"","Multiplication sign":"","N-ary product":"","N-ary summation":"",Nabla:"","Naira sign":"","New sheqel sign":"","Nordic mark sign":"","Not an element of":"","Not equal to":"","Not sign":"","on with exclamation mark with left right arrow above":"",Overline:"","Paragraph sign":"","Partial differential":"","Per mille sign":"","Per ten thousand sign":"","Peseta sign":"","Peso sign":"","Plus-minus sign":"","Pound sign":"","Proportional to":"","Question exclamation mark":"","Registered sign":"","Reversed paragraph sign":"","Right double quotation mark":"","Right single quotation mark":"","Right-pointing double angle quotation mark":"","rightwards arrow to bar":"向右停止箭頭","rightwards dashed arrow":"向右虛線箭頭","rightwards double arrow":"向右雙箭頭","Ruble sign":"","Rupee sign":"","Section sign":"","Single left-pointing angle quotation mark":"","Single low-9 quotation mark":"","Single right-pointing angle quotation mark":"","soon with rightwards arrow above":"","Special characters":"特殊字元","Spesmilo sign":"","Square root":"","Tenge sign":"","There exists":"","Tilde operator":"","top with upwards arrow above":"","Trade mark sign":"","Tugrik sign":"","Turkish lira sign":"","Two dot leader":"",Union:"","up down arrow with base":"","upwards arrow to bar":"向上停止箭頭","upwards dashed arrow":"向上虛線箭頭","upwards double arrow":"向上雙箭頭","Vulgar fraction one half":"","Vulgar fraction one quarter":"","Vulgar fraction three quarters":"","Won sign":"","Yen sign":""})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));!function(e){const o=e.zh=e.zh||{};o.dictionary=Object.assign(o.dictionary||{},{"%0 of %1":"%0/%1",Aquamarine:"淺綠色",Black:"黑色",Blue:"藍色",Cancel:"取消","Dim grey":"淡灰色","Dropdown toolbar":"下拉選單","Edit block":"編輯區塊","Editor toolbar":"編輯器工具",Green:"綠色",Grey:"灰色","Insert paragraph after block":"在這個區塊後面插入一個段落","Insert paragraph before block":"在這個區塊前面插入一個段落","Light blue":"亮藍色","Light green":"亮綠色","Light grey":"亮灰色",Next:"下一",Orange:"橘色",Previous:"上一",Purple:"紫色",Red:"紅色",Redo:"重做","Remove color":"移除顏色","Restore default":"","Rich Text Editor":"豐富文字編輯器","Rich Text Editor, %0":"豐富文字編輯器,%0",Save:"儲存","Select all":"選取全部","Show more items":"顯示更多",Turquoise:"藍綠色",Undo:"取消","Upload in progress":"正在上傳",White:"白色","Widget toolbar":"小工具",Yellow:"黃色"}),o.getPluralForm=function(e){return 0}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/core/composer.json b/core/composer.json
index 0121aca5c95a..2566db7afb71 100644
--- a/core/composer.json
+++ b/core/composer.json
@@ -65,6 +65,7 @@
         "drupal/book": "self.version",
         "drupal/breakpoint": "self.version",
         "drupal/ckeditor": "self.version",
+        "drupal/ckeditor5": "self.version",
         "drupal/claro": "self.version",
         "drupal/classy": "self.version",
         "drupal/color": "self.version",
diff --git a/core/core.libraries.yml b/core/core.libraries.yml
index f4449213627e..826fa73e4d12 100644
--- a/core/core.libraries.yml
+++ b/core/core.libraries.yml
@@ -22,6 +22,234 @@ ckeditor:
   js:
     assets/vendor/ckeditor/ckeditor.js: { preprocess: false, minified: true }
 
+ckeditor5:
+  remote: https://github.com/ckeditor/ckeditor5
+  version: "31.0.0"
+  license:
+    name: GNU-GPL-2.0-or-later
+    url: https://github.com/ckeditor/ckeditor5/blob/v31.0.0/LICENSE.md
+    gpl-compatible: true
+  js:
+    assets/vendor/ckeditor5/ckeditor5-dll.js: { preprocess: false, minified: true }
+
+ckeditor5.editorClassic:
+  remote: https://github.com/ckeditor/ckeditor5
+  version: "31.0.0"
+  license:
+    name: GNU-GPL-2.0-or-later
+    url: https://github.com/ckeditor/ckeditor5/blob/v31.0.0/LICENSE.md
+    gpl-compatible: true
+  js:
+    assets/vendor/ckeditor5/editor-classic.js: { preprocess: false, minified: true }
+  dependencies:
+    - core/ckeditor5
+
+ckeditor5.editorDecoupled:
+  remote: https://github.com/ckeditor/ckeditor5
+  version: "31.0.0"
+  license:
+    name: GNU-GPL-2.0-or-later
+    url: https://github.com/ckeditor/ckeditor5/blob/v31.0.0/LICENSE.md
+    gpl-compatible: true
+  js:
+    assets/vendor/ckeditor5/editor-decoupled.js: { preprocess: false, minified: true }
+  dependencies:
+    - core/ckeditor5
+    - core/ckeditor5.htmlSupport
+
+ckeditor5.internal:
+  remote: https://github.com/ckeditor/ckeditor5
+  version: "31.0.0"
+  license:
+    name: GNU-GPL-2.0-or-later
+    url: https://github.com/ckeditor/ckeditor5/blob/v31.0.0/LICENSE.md
+    gpl-compatible: true
+  js:
+    assets/vendor/ckeditor5/essentials.js: { preprocess: false, minified: true }
+    assets/vendor/ckeditor5/heading.js: { preprocess: false, minified: true }
+  dependencies:
+    - core/ckeditor5
+
+ckeditor5.basic:
+  remote: https://github.com/ckeditor/ckeditor5
+  version: "31.0.0"
+  license:
+    name: GNU-GPL-2.0-or-later
+    url: https://github.com/ckeditor/ckeditor5/blob/v31.0.0/LICENSE.md
+    gpl-compatible: true
+  js:
+    assets/vendor/ckeditor5/basic-styles.js: { preprocess: false, minified: true }
+  dependencies:
+    - core/ckeditor5
+
+ckeditor5.specialCharacters:
+  remote: https://github.com/ckeditor/ckeditor5
+  version: "31.0.0"
+  license:
+    name: GNU-GPL-2.0-or-later
+    url: https://github.com/ckeditor/ckeditor5/blob/v31.0.0/LICENSE.md
+    gpl-compatible: true
+  js:
+    assets/vendor/ckeditor5/special-characters.js: { preprocess: false, minified: true }
+  dependencies:
+    - core/ckeditor5
+
+ckeditor5.blockquote:
+  remote: https://github.com/ckeditor/ckeditor5
+  version: "31.0.0"
+  license:
+    name: GNU-GPL-2.0-or-later
+    url: https://github.com/ckeditor/ckeditor5/blob/v31.0.0/LICENSE.md
+    gpl-compatible: true
+  js:
+    assets/vendor/ckeditor5/block-quote.js: { preprocess: false, minified: true }
+  dependencies:
+    - core/ckeditor5
+
+ckeditor5.image:
+  remote: https://github.com/ckeditor/ckeditor5
+  version: "31.0.0"
+  license:
+    name: GNU-GPL-2.0-or-later
+    url: https://github.com/ckeditor/ckeditor5/blob/v31.0.0/LICENSE.md
+    gpl-compatible: true
+  js:
+    assets/vendor/ckeditor5/image.js: { preprocess: false, minified: true }
+  dependencies:
+    - core/ckeditor5
+
+ckeditor5.link:
+  remote: https://github.com/ckeditor/ckeditor5
+  version: "31.0.0"
+  license:
+    name: GNU-GPL-2.0-or-later
+    url: https://github.com/ckeditor/ckeditor5/blob/v31.0.0/LICENSE.md
+    gpl-compatible: true
+  js:
+    assets/vendor/ckeditor5/link.js: { preprocess: false, minified: true }
+  dependencies:
+    - core/ckeditor5
+
+ckeditor5.list:
+  remote: https://github.com/ckeditor/ckeditor5
+  version: "31.0.0"
+  license:
+    name: GNU-GPL-2.0-or-later
+    url: https://github.com/ckeditor/ckeditor5/blob/v31.0.0/LICENSE.md
+    gpl-compatible: true
+  js:
+    assets/vendor/ckeditor5/list.js: { preprocess: false, minified: true }
+  dependencies:
+    - core/ckeditor5
+
+ckeditor5.horizontalLine:
+  remote: https://github.com/ckeditor/ckeditor5
+  version: "31.0.0"
+  license:
+    name: GNU-GPL-2.0-or-later
+    url: https://github.com/ckeditor/ckeditor5/blob/v31.0.0/LICENSE.md
+    gpl-compatible: true
+  js:
+    assets/vendor/ckeditor5/horizontal-line.js: { preprocess: false, minified: true }
+  dependencies:
+    - core/ckeditor5
+
+ckeditor5.htmlSupport:
+  remote: https://github.com/ckeditor/ckeditor5
+  version: "31.0.0"
+  license:
+    name: GNU-GPL-2.0-or-later
+    url: https://github.com/ckeditor/ckeditor5/blob/v31.0.0/LICENSE.md
+    gpl-compatible: true
+  js:
+    assets/vendor/ckeditor5/html-support.js: { preprocess: false, minified: true }
+  dependencies:
+    - core/ckeditor5
+
+ckeditor5.alignment:
+  remote: https://github.com/ckeditor/ckeditor5
+  version: "31.0.0"
+  license:
+    name: GNU-GPL-2.0-or-later
+    url: https://github.com/ckeditor/ckeditor5/blob/v31.0.0/LICENSE.md
+    gpl-compatible: true
+  js:
+    assets/vendor/ckeditor5/alignment.js: { preprocess: false, minified: true }
+  dependencies:
+    - core/ckeditor5
+
+ckeditor5.removeFormat:
+  remote: https://github.com/ckeditor/ckeditor5
+  version: "31.0.0"
+  license:
+    name: GNU-GPL-2.0-or-later
+    url: https://github.com/ckeditor/ckeditor5/blob/v31.0.0/LICENSE.md
+    gpl-compatible: true
+  js:
+    assets/vendor/ckeditor5/remove-format.js: { preprocess: false, minified: true }
+  dependencies:
+    - core/ckeditor5
+
+ckeditor5.pasteFromOffice:
+  remote: https://github.com/ckeditor/ckeditor5
+  version: "31.0.0"
+  license:
+    name: GNU-GPL-2.0-or-later
+    url: https://github.com/ckeditor/ckeditor5/blob/v31.0.0/LICENSE.md
+    gpl-compatible: true
+  js:
+    assets/vendor/ckeditor5/paste-from-office.js: { preprocess: false, minified: true }
+  dependencies:
+    - ckeditor5/ckeditor5
+
+ckeditor5.indent:
+  remote: https://github.com/ckeditor/ckeditor5
+  version: "31.0.0"
+  license:
+    name: GNU-GPL-2.0-or-later
+    url: https://github.com/ckeditor/ckeditor5/blob/v31.0.0/LICENSE.md
+    gpl-compatible: true
+  js:
+    assets/vendor/ckeditor5/indent.js: { preprocess: false, minified: true }
+  dependencies:
+    - core/ckeditor5
+
+ckeditor5.sourceEditing:
+  remote: https://github.com/ckeditor/ckeditor5
+  version: "31.0.0"
+  license:
+    name: GNU-GPL-2.0-or-later
+    url: https://github.com/ckeditor/ckeditor5/blob/v31.0.0/LICENSE.md
+    gpl-compatible: true
+  js:
+    assets/vendor/ckeditor5/source-editing.js: { preprocess: false, minified: true }
+  dependencies:
+    - core/ckeditor5
+
+ckeditor5.table:
+  remote: https://github.com/ckeditor/ckeditor5
+  version: "31.0.0"
+  license:
+    name: GNU-GPL-2.0-or-later
+    url: https://github.com/ckeditor/ckeditor5/blob/v31.0.0/LICENSE.md
+    gpl-compatible: true
+  js:
+    assets/vendor/ckeditor5/table.js: { preprocess: false, minified: true }
+  dependencies:
+    - core/ckeditor5
+
+ckeditor5.language:
+  remote: https://github.com/ckeditor/ckeditor5
+  version: "31.0.0"
+  license:
+    name: GNU-GPL-2.0-or-later
+    url: https://github.com/ckeditor/ckeditor5/blob/v31.0.0/LICENSE.md
+    gpl-compatible: true
+  js:
+    assets/vendor/ckeditor5/language.js: { preprocess: false, minified: true }
+  dependencies:
+    - core/ckeditor5
+
 css.escape:
   remote: https://github.com/mathiasbynens/CSS.escape
   version: "1.5.1"
diff --git a/core/modules/ckeditor5/ckeditor5.api.php b/core/modules/ckeditor5/ckeditor5.api.php
new file mode 100644
index 000000000000..dce79025ebf5
--- /dev/null
+++ b/core/modules/ckeditor5/ckeditor5.api.php
@@ -0,0 +1,235 @@
+<?php
+
+/**
+ * @file
+ * Documentation related to CKEditor 5.
+ */
+
+use Drupal\ckeditor5\Plugin\CKEditor5PluginDefinition;
+
+/**
+ * @defgroup ckeditor5_architecture CKEditor 5 architecture
+ * @{
+ *
+ * @section overview Overview
+ * The CKEditor 5 module integrates CKEditor 5 with Drupal's filtering and text
+ * editor APIs.
+ *
+ * Where possible, it uses upstream CKEditor plugins, but it also relies on
+ * Drupal-specific CKEditor plugins to ensure a consistent user experience.
+ *
+ * @see https://ckeditor.com/ckeditor-5/
+ *
+ * @section data_models Data models
+ * Drupal and CKEditor 5 have very different data models.
+ *
+ * Drupal stores blobs of HTML that remains manageable thanks to the use of
+ * filters and granular HTML restrictions — crucially this remains manageable
+ * thanks to those restrictions but also because Drupal does not need to
+ * process, render, understand or otherwise interact with it.
+ *
+ * @see \Drupal\text\Plugin\Field\FieldType\TextItemBase
+ * @see \Drupal\filter\Plugin\Filter\FilterInterface::getHTMLRestrictions()
+ *
+ * On the other hand, CKEditor 5 must not only be able to render these
+ * blobs, but also allow editing and creating it. This requires a much deeper
+ * understanding of that HTML.
+ *
+ * CKEditor 5 (in contrast with CKEditor 4) therefore has its own data model to
+ * represent this information — that data model is explicitly not HTML.
+ *
+ * Therefore all interactions between Drupal and CKEditor 5 need to translate
+ * between these different data models.
+ *
+ * @see https://ckeditor.com/docs/ckeditor5/latest/framework/guides/architecture/editing-engine.html#element-types-and-custom-data
+ *
+ * @section plugins CKEditor 5 Plugins
+ * CKEditor 5 plugins may use either YAML or a PHP annotation for their
+ * definitions. A PHP class does not need an annotation if it is defined in yml.
+ *
+ * To be discovered, YAML definition files must be named
+ * {module_name}.ckeditor5.yml.
+ *
+ * @see ckeditor5.ckeditor5.yml for many examples of CKEditor 5 plugin
+ * configuration as YAML.
+ *
+ * The minimally required metadata: the CKEditor 5 plugins to load, the label
+ * and the HTML elements it can generate — here's an example for a module
+ * providing a Marquee plugin, both in yml and Annotation form:
+ *
+ * @code
+ * MODULE_NAME_marquee:
+ *   ckeditor5:
+ *     plugins: [PACKAGE.CLASS]
+ *   drupal:
+ *     label: Marquee
+ *     elements:
+ *     - <marquee>
+ * @endcode
+ *
+ * and
+ *
+ * @code
+ *  * @CKEditor5Plugin(
+ *  *   id = "MODULE_NAME_marquee",
+ *  *   ckeditor5 = @CKEditor5AspectsOfCKEditor5Plugin(
+ *  *     plugins = { "PACKAGE.CLASS" },
+ *  *   ),
+ *  *   drupal = @DrupalAspectsOfCKEditor5Plugin(
+ *  *     label = @Translation("Marquee"),
+ *  *     elements = { "<marquee>" },
+ *  *   )
+ *  * )
+ * @endcode
+ *
+ * The metadata relating strictly to the CKEditor 5 plugin's JS code is stored
+ * in the 'ckeditor5' key; all other metadata is stored in the 'drupal' key.
+ *
+ * If the plugin has a dependency on another module, adding the 'provider' key
+ * will prevent the plugin from being loaded if that module is not installed.
+ *
+ * All of these can be defined in YAML or annotations. A given plugin should
+ * choose one or the other, as a definition can't parse both at once.
+ *
+ * Overview of all available plugin definition properties:
+ *
+ * - provider: Allows a plugin to have a dependency on another module. If it has
+ *   a value, a module with a machine name matching that value must be installed
+ *   for the configured plugin to load.
+ * - ckeditor5.plugins: A list CKEditor 5 JavaScript plugins to load, as
+ *   '{package.Class}' , such as 'drupalMedia.DrupalMedia'.
+ * - ckeditor5.config: A keyed array of additional values for the constructor of
+ *   the CKEditor 5 JavaScript plugins being loaded. i.e. this becomes the
+ *   CKEditor 5 plugin configuration settings (see
+ *   https://ckeditor.com/docs/ckeditor5/latest/builds/guides/integration/configuration.html)
+ *   for a given plugin.
+ * - drupal.label: Human-readable name of the CKEditor 5 plugin.
+ * - drupal.library: A Drupal asset library to load with the plugin.
+ * - drupal.admin_library: A Drupal asset library that will load in the text
+ *   format admin UI when the plugin is available.
+ * - drupal.class: Optional PHP class that makes it possible for the plugin to
+ *   provide dynamic values, or a configuration UI. The value should be
+ *   formatted as '\Drupal\{module_name}\Plugin\CKEditor5Plugin\{class_name}' to
+ *   make it discoverable.
+ * - drupal.elements: A list of elements and attributes the plugin allows use of
+ *   within CKEditor 5. This uses the same syntax as the 'filter_html' plugin
+ *   with an additional special keyword: '<$block>' . Using
+ *   '<$block [attribute(s)]>`  will permit the provided attributes in all block
+ *   level tags that are explicitly enabled in any plugin. i.e. if only '<p>',
+ *   '<h3>' and '<h2>' tags are allowed, then '<$block data-something>'  will
+ *   allow the 'data-something' attribute for '<p>', '<h3>' and '<h2>' tags.
+ * - drupal.toolbar_items: List of toolbar items the plugin provides. Keyed by a
+ *   machine name and the value being a pair defining the label:
+ *   @code
+ *   toolbar_items:
+ *     indent:
+ *       label: Indent
+ *     outdent:
+ *       label: Outdent
+ *   @encode
+ * - drupal.conditions: Conditions required for the plugin to load (other than
+ *   module dependencies, which are defined by the 'provider' property).
+ *   Conditions can check for three different things:
+ *   - 'toolbarItem': a toolbar item that must be enabled
+ *   - 'filter': a filter that must be enabled
+ *   - 'imageUploadStatus': TRUE if image upload must be enabled, FALSE if it
+ *      must not be enabled
+ *   - 'plugins': a list of CKEditor 5 Drupal plugin IDs that must be enabled
+ *
+ * All of these can be defined in YAML or annotations. A given plugin should
+ * choose one or the other, as a definition can't parse both at once.
+ *
+ * @see \Drupal\ckeditor5\Annotation\CKEditor5Plugin
+ * @see \Drupal\ckeditor5\Annotation\CKEditor5AspectsOfCKEditor5Plugin
+ * @see \Drupal\ckeditor5\Annotation\DrupalAspectsOfCKEditor5Plugin
+ *
+ * @section upgrade_path Upgrade path
+ *
+ * Modules can provide upgrade paths similar to the built-in upgrade path for
+ * Drupal core's CKEditor 4 to CKEditor 5, by providing a CKEditor4To5Upgrade
+ * plugin. This plugin type allows:
+ * - mapping a CKEditor 4 button to an equivalent CKEditor 5 toolbar item
+ * - mapping CKEditor 4 plugin settings to equivalent CKEditor 5 plugin
+ *   configuration.
+ * The supported CKEditor 4 buttons and/or CKEditor 4 plugin settings must be
+ * specified in the annotation.
+ * See Drupal core's implementation for an example.
+ *
+ * @see \Drupal\ckeditor5\Annotation\CKEditor4To5Upgrade
+ * @see \Drupal\ckeditor5\Plugin\CKEditor4To5UpgradePluginInterface
+ * @see \Drupal\ckeditor5\Plugin\CKEditor4To5Upgrade\Core
+ *
+ * @section public_api Public API
+ *
+ * The CKEditor 5 module provides no public API, other than:
+ * - the annotations and interfaces mentioned above;
+ * - to help implement CKEditor 5 plugins:
+ *   \Drupal\ckeditor5\Plugin\CKEditor5PluginConfigurableTrait and
+ *   \Drupal\ckeditor5\Plugin\CKEditor5PluginDefault;
+ * - \Drupal\ckeditor5\Plugin\CKEditor5PluginDefinition, which is used to
+ *   interact with plugin definitions in hook_ckeditor5_plugin_info_alter();
+ * - to help contributed modules write tests:
+ *   \Drupal\Tests\ckeditor5\Kernel\CKEditor5ValidationTestTrait and
+ *   \Drupal\Tests\ckeditor5\Traits\CKEditor5TestTrait;
+ * - to help contributed modules write configuration schemas for configurable
+ *   plugins, the data types in config/schema/ckeditor5.data_types.yml are
+ *   likely to be useful. They automatically get validation constraints applied;
+ * - to help contributed modules write validation constraints for configurable
+ *   plugins, it is strongly recommended to subclass
+ *   \Drupal\Tests\ckeditor5\Kernel\ValidatorsTest. For very complex validation
+ *   constraints that need to access text editor and/or format, use
+ *   \Drupal\ckeditor5\Plugin\Validation\Constraint\TextEditorObjectDependentValidatorTrait.
+ *
+ * @}
+ */
+
+/**
+ * @addtogroup hooks
+ * @{
+ */
+
+/**
+ * Modify the list of available CKEditor 5 plugins.
+ *
+ * This hook may be used to modify plugin properties after they have been
+ * specified by other modules.
+ *
+ * @param array $plugin_definitions
+ *   An array of all the existing plugin definitions, passed by reference.
+ *
+ * @see \Drupal\ckeditor5\Plugin\CKEditor5PluginManager
+ */
+function hook_ckeditor5_plugin_info_alter(array &$plugin_definitions): void {
+  assert($plugin_definitions['ckeditor5_link'] instanceof CKEditor5PluginDefinition);
+  $link_plugin_definition = $plugin_definitions['ckeditor5_link']->toArray();
+  $link_plugin_definition['ckeditor5']['config']['link']['decorators'][] = [
+    'mode' => 'manual',
+    'label' => t('Open in new window'),
+    'attributes' => [
+      'target' => '_blank',
+    ],
+  ];
+  $plugin_definitions['ckeditor5_link'] = new CKEditor5PluginDefinition($link_plugin_definition);
+}
+
+/**
+ * Modify the list of available CKEditor 4 to 5 Upgrade plugins.
+ *
+ * This hook may be used to modify plugin properties after they have been
+ * specified by other modules. For example, to override a default upgrade path.
+ *
+ * @param array $plugin_definitions
+ *   An array of all the existing plugin definitions, passed by reference.
+ *
+ * @see \Drupal\ckeditor5\Plugin\CKEditor4To5UpgradePluginManager
+ */
+function hook_ckeditor4to5upgrade_plugin_info_alter(array &$plugin_definitions): void {
+  // Remove core's upgrade path for the "Maximize" button (which is: there is no
+  // equivalent). This allows a different CKEditor4To5Upgrade plugin to define
+  // this upgrade path instead.
+  unset($plugin_definitions['core']['cke4_buttons']['Maximize']);
+}
+
+/**
+ * @} End of "addtogroup hooks".
+ */
diff --git a/core/modules/ckeditor5/ckeditor5.ckeditor5.yml b/core/modules/ckeditor5/ckeditor5.ckeditor5.yml
new file mode 100644
index 000000000000..474322d1c6a6
--- /dev/null
+++ b/core/modules/ckeditor5/ckeditor5.ckeditor5.yml
@@ -0,0 +1,510 @@
+# CKEditor 5 Drupal plugin definitions.
+# @see this module's README.md for details on defining CKEditor 5 plugins in
+# Drupal.
+
+ckeditor5_essentials:
+  ckeditor5:
+    plugins:
+      - drupalHtmlEngine.DrupalHtmlEngine
+      - essentials.Essentials
+  drupal:
+    label: Essentials
+    library: ckeditor5/drupal.ckeditor5.internal
+    admin_library: ckeditor5/admin.internal
+    toolbar_items:
+      undo:
+        label: Undo
+      redo:
+        label: Redo
+    elements:
+      - <br>
+    conditions: []
+
+ckeditor5_paragraph:
+  ckeditor5:
+    plugins: [paragraph.Paragraph]
+  drupal:
+    label: Paragraph
+    library: core/ckeditor5.internal
+    admin_library: ckeditor5/admin.internal
+    elements:
+      - <p>
+
+ckeditor5_heading:
+  ckeditor5:
+    plugins: [heading.Heading]
+    config:
+      heading:
+        # These are the options passed to the CKEditor heading constructor
+        # @see https://ckeditor.com/docs/ckeditor5/latest/api/module_heading_heading-HeadingConfig.html#member-options
+        #   for details on what each of these config properties do.
+        options:
+          - { model: 'paragraph', title: 'Paragraph', class: 'ck-heading_paragraph' }
+          - { model: 'heading1', view: 'h1', title: 'Heading 1', class: 'ck-heading_heading1' }
+          - { model: 'heading2', view: 'h2', title: 'Heading 2', class: 'ck-heading_heading2' }
+          - { model: 'heading3', view: 'h3', title: 'Heading 3', class: 'ck-heading_heading3' }
+          - { model: 'heading4', view: 'h4', title: 'Heading 4', class: 'ck-heading_heading4' }
+          - { model: 'heading5', view: 'h5', title: 'Heading 5', class: 'ck-heading_heading5' }
+          - { model: 'heading6', view: 'h6', title: 'Heading 6', class: 'ck-heading_heading6' }
+  drupal:
+    label: Headings
+    library: core/ckeditor5.internal
+    admin_library: ckeditor5/admin.heading
+    class: Drupal\ckeditor5\Plugin\CKEditor5Plugin\Heading
+    toolbar_items:
+      heading:
+        label: Heading
+    elements:
+      - <h1>
+      - <h2>
+      - <h3>
+      - <h4>
+      - <h5>
+      - <h6>
+
+ckeditor5_htmlSupport:
+  ckeditor5:
+    plugins: [htmlSupport.GeneralHtmlSupport]
+    config:
+      htmlSupport:
+        allow:
+          -
+            name:
+              regexp:
+                pattern: /.*/
+            attributes: true
+            classes: true
+            styles: true
+  drupal:
+    label: Arbitrary HTML support
+    elements: false
+    library: core/ckeditor5.htmlSupport
+    # @see \Drupal\ckeditor5\Plugin\CKEditor5PluginManagerInterface::getEnabledDefinitions()
+    conditions: []
+
+ckeditor5_specialCharacters:
+  ckeditor5:
+    plugins:
+      - specialCharacters.SpecialCharacters
+      - specialCharacters.SpecialCharactersEssentials
+  drupal:
+    label: Special characters
+    library: core/ckeditor5.specialCharacters
+    admin_library: ckeditor5/admin.specialCharacters
+    toolbar_items:
+      specialCharacters:
+        label: Special characters
+    elements: false
+
+ckeditor5_sourceEditing:
+  ckeditor5:
+    plugins:
+      - sourceEditing.SourceEditing
+      - htmlSupport.GeneralHtmlSupport
+  drupal:
+    label: Source editing
+    class: \Drupal\ckeditor5\Plugin\CKEditor5Plugin\SourceEditing
+    # This is the only CKEditor 5 plugin allowed to generate a superset of elements.
+    # @see \Drupal\ckeditor5\Plugin\CKEditor5Plugin\SourceEditing::getElementsSubset()
+    elements: ['<*>']
+    library: core/ckeditor5.sourceEditing
+    admin_library: ckeditor5/admin.sourceEditing
+    toolbar_items:
+      sourceEditing:
+        label: Source
+
+ckeditor5_bold:
+  ckeditor5:
+    plugins: [basicStyles.Bold]
+  drupal:
+    label: Bold
+    library: core/ckeditor5.basic
+    admin_library: ckeditor5/admin.basic
+    toolbar_items:
+      bold:
+        label: Bold
+    elements:
+      - <strong>
+
+ckeditor5_emphasis:
+  ckeditor5:
+    plugins:
+      - basicStyles.Italic
+      - drupalEmphasis.DrupalEmphasis
+  drupal:
+    label: Emphasis
+    library: ckeditor5/drupal.ckeditor5.emphasis
+    admin_library: ckeditor5/admin.basic
+    toolbar_items:
+      italic:
+        label: Italic
+    elements:
+      - <em>
+
+ckeditor5_underline:
+  ckeditor5:
+    plugins: [basicStyles.Underline]
+  drupal:
+    label: Underline
+    library: core/ckeditor5.basic
+    admin_library: ckeditor5/admin.basic
+    toolbar_items:
+      underline:
+        label: Underline
+    elements:
+      - <u>
+
+ckeditor5_code:
+  ckeditor5:
+    plugins: [basicStyles.Code]
+  drupal:
+    label: Code
+    library: core/ckeditor5.basic
+    admin_library: ckeditor5/admin.basic
+    toolbar_items:
+      code:
+        label: Code
+    elements:
+      - <code>
+
+ckeditor5_strikethrough:
+  ckeditor5:
+    plugins: [basicStyles.Strikethrough]
+  drupal:
+    label: Strikethrough
+    library: core/ckeditor5.basic
+    admin_library: ckeditor5/admin.basic
+    toolbar_items:
+      strikethrough:
+        label: Strikethrough
+    elements:
+      - <s>
+
+ckeditor5_subscript:
+  ckeditor5:
+    plugins: [basicStyles.Subscript]
+  drupal:
+    label: Subscript
+    library: core/ckeditor5.basic
+    admin_library: ckeditor5/admin.basic
+    toolbar_items:
+      subscript:
+        label: Subscript
+    elements:
+      - <sub>
+
+ckeditor5_superscript:
+  ckeditor5:
+    plugins: [basicStyles.Superscript]
+  drupal:
+    label: Superscript
+    library: core/ckeditor5.basic
+    admin_library: ckeditor5/admin.basic
+    toolbar_items:
+      superscript:
+        label: Superscript
+    elements:
+      - <sup>
+
+ckeditor5_blockquote:
+  ckeditor5:
+    plugins:
+      - blockQuote.BlockQuote
+  drupal:
+    label: Block quote
+    library: core/ckeditor5.blockquote
+    admin_library: ckeditor5/admin.blockquote
+    toolbar_items:
+      blockQuote:
+        label: Block quote
+    elements:
+      - <blockquote>
+
+ckeditor5_link:
+  ckeditor5:
+    plugins:
+      - link.Link
+  drupal:
+    label: Link
+    library: core/ckeditor5.link
+    admin_library: ckeditor5/admin.link
+    toolbar_items:
+      link:
+        label: Link
+    elements:
+      - <a href>
+
+ckeditor5_linkImage:
+  ckeditor5:
+    plugins:
+      - link.LinkImage
+    config:
+      # Append the "Link" button to the image balloon toolbar.
+      image:
+        toolbar:
+          - '|'
+          - linkImage
+  drupal:
+    label: Linked Image
+    elements: false
+    conditions:
+      plugins:
+        - ckeditor5_link
+        - ckeditor5_image
+
+ckeditor5_linkMedia:
+  ckeditor5:
+    plugins:
+      - drupalMedia.DrupalLinkMedia
+    config:
+      # Append the "Link" button to the media balloon toolbar.
+      drupalMedia:
+        toolbar: [drupalLinkMedia]
+  drupal:
+    label: Linked Media
+    elements: false
+    conditions:
+      plugins:
+        - ckeditor5_link
+        - media_media
+
+ckeditor5_list:
+  ckeditor5:
+    plugins: [list.List]
+  drupal:
+    label: List
+    library: core/ckeditor5.list
+    admin_library: ckeditor5/admin.list
+    toolbar_items:
+      bulletedList:
+        label: Bulleted list
+      numberedList:
+        label: Numbered list
+    elements:
+      - <ul>
+      - <ol>
+      - <li>
+
+ckeditor5_horizontalLine:
+  ckeditor5:
+    plugins: [horizontalLine.HorizontalLine]
+  drupal:
+    label: Horizontal line
+    library: core/ckeditor5.horizontalLine
+    admin_library: ckeditor5/admin.horizontalLine
+    toolbar_items:
+      horizontalLine:
+        label: Horizontal line
+    elements:
+      - <hr>
+
+ckeditor5_alignment:
+  ckeditor5:
+    plugins: [alignment.Alignment]
+    config:
+      # @see core/modules/system/css/components/align.module.css
+      alignment:
+        options:
+          - name: left
+            className: text-align-left
+          - name: center
+            className: text-align-center
+          - name: right
+            className: text-align-right
+          - name: justify
+            className: text-align-justify
+  drupal:
+    label: Alignment
+    library: core/ckeditor5.alignment
+    admin_library: ckeditor5/admin.alignment
+    toolbar_items:
+      alignment:
+        label: Text alignment
+      "alignment:left":
+        label: Align left
+      "alignment:center":
+        label: Align center
+      "alignment:right":
+        label: Align right
+      "alignment:justify":
+        label: justify
+    elements:
+      - <$block class="text-align-left text-align-center text-align-right text-align-justify">
+
+ckeditor5_removeFormat:
+  ckeditor5:
+    plugins: [removeFormat.RemoveFormat]
+  drupal:
+    label: Remove Format
+    library: core/ckeditor5.removeFormat
+    admin_library: ckeditor5/admin.removeFormat
+    toolbar_items:
+      removeFormat:
+        label: Remove Format
+    elements: false
+
+ckeditor5_pasteFromOffice:
+  ckeditor5:
+    plugins: [pasteFromOffice.PasteFromOffice]
+  drupal:
+    label: Paste From Office
+    library: core/ckeditor5.pasteFromOffice
+    elements: false
+    conditions: []
+
+ckeditor5_table:
+  ckeditor5:
+    plugins:
+      - table.Table
+      - table.TableToolbar
+    config:
+      table:
+        contentToolbar: [tableColumn, tableRow, mergeTableCells]
+  drupal:
+    label: Table
+    library: core/ckeditor5.table
+    admin_library: ckeditor5/admin.table
+    toolbar_items:
+      insertTable:
+        label: table
+    elements:
+      - <table>
+      - <tr>
+      - <td>
+      - <th>
+      - <thead>
+      - <tbody>
+      - <tfoot>
+
+ckeditor5_image:
+  ckeditor5:
+    plugins:
+      - image.Image
+      - image.ImageToolbar
+      - drupalImage.DrupalImage
+    config:
+      image:
+        toolbar: [imageTextAlternative]
+  drupal:
+    label: Image
+    library: ckeditor5/drupal.ckeditor5.image
+    elements:
+      - <img src alt data-entity-uuid data-entity-type height width>
+    conditions:
+      toolbarItem: uploadImage
+      imageUploadStatus: true
+
+ckeditor5_imageCaption:
+  ckeditor5:
+    plugins:
+      - image.ImageCaption
+    config:
+      image:
+        toolbar: [toggleImageCaption]
+  drupal:
+    label: Image caption
+    elements:
+      - <img data-caption>
+    conditions:
+      toolbarItem: uploadImage
+      imageUploadStatus: true
+      filter: filter_caption
+
+ckeditor5_imageAlign:
+  ckeditor5:
+    plugins:
+      - image.ImageStyle
+    config:
+      image:
+        toolbar:
+          - name: 'imageStyle:icons'
+            items:
+              - 'imageStyle:alignLeft'
+              - 'imageStyle:alignCenter'
+              - 'imageStyle:alignRight'
+            defaultItem: 'imageStyle:alignCenter'
+  drupal:
+    label: Image align
+    elements:
+      - <img data-align>
+    conditions:
+      toolbarItem: uploadImage
+      imageUploadStatus: true
+      filter: filter_align
+
+ckeditor5_indent:
+  ckeditor5:
+    plugins: [indent.Indent]
+  drupal:
+    label: Indent
+    elements: false
+    library: core/ckeditor5.indent
+    admin_library: ckeditor5/admin.indent
+    toolbar_items:
+      indent:
+        label: Indent
+      outdent:
+        label: Outdent
+
+ckeditor5_language:
+  ckeditor5:
+    plugins: [language.TextPartLanguage]
+  drupal:
+    label: Language
+    library: ckeditor5/ckeditor5.language
+    admin_library: ckeditor5/admin.language
+    class: Drupal\ckeditor5\Plugin\CKEditor5Plugin\Language
+    toolbar_items:
+      textPartLanguage:
+        label: Language
+    elements:
+      - <span lang dir>
+
+media_media:
+  provider: media
+  ckeditor5:
+    plugins:
+      - drupalMedia.DrupalMedia
+    config:
+      drupalMedia:
+        toolbar: [mediaImageTextAlternative]
+        themeError:
+          func:
+            name: Drupal.theme
+            args: [mediaEmbedPreviewError]
+            invoke: true
+  drupal:
+    label: Media
+    library: ckeditor5/drupal.ckeditor5.media
+    class: Drupal\ckeditor5\Plugin\CKEditor5Plugin\Media
+    elements:
+      - <drupal-media data-entity-type data-entity-uuid alt>
+    conditions:
+      filter: media_embed
+
+media_library_mediaLibrary:
+  provider: media_library
+  ckeditor5:
+    plugins: []
+    config:
+      drupalMedia:
+        openDialog:
+          func:
+            name: Drupal.ckeditor5.openDialog
+            invoke: false
+        dialogSettings:
+          height: 75%
+          dialogClass: media-library-widget-modal
+          title: Add or select media
+  drupal:
+    label: Media Library
+    elements: false
+    admin_library: ckeditor5/admin.drupalmedia
+    class: Drupal\ckeditor5\Plugin\CKEditor5Plugin\MediaLibrary
+    library: editor/drupal.editor.dialog
+    toolbar_items:
+        drupalMedia:
+          label: Drupal media
+    conditions:
+      filter: media_embed
+      toolbarItem: drupalMedia
diff --git a/core/modules/ckeditor5/ckeditor5.info.yml b/core/modules/ckeditor5/ckeditor5.info.yml
new file mode 100644
index 000000000000..6d93d11a3fa0
--- /dev/null
+++ b/core/modules/ckeditor5/ckeditor5.info.yml
@@ -0,0 +1,8 @@
+name: CKEditor 5
+type: module
+description: "WYSIWYG editing for rich text fields using CKEditor 5."
+version: VERSION
+package: Core (Experimental)
+lifecycle: experimental
+dependencies:
+  - drupal:editor
diff --git a/core/modules/ckeditor5/ckeditor5.libraries.yml b/core/modules/ckeditor5/ckeditor5.libraries.yml
new file mode 100644
index 000000000000..a4f082c2c5ca
--- /dev/null
+++ b/core/modules/ckeditor5/ckeditor5.libraries.yml
@@ -0,0 +1,184 @@
+# cspell:ignore imageupload
+
+ckeditor5.language:
+  css:
+    component:
+      css/language.css: {}
+  dependencies:
+    - core/ckeditor5.language
+
+drupal.ckeditor5.internal:
+  js:
+    js/build/drupalHtmlEngine.js: { preprocess: false, minified: true }
+  dependencies:
+    - core/ckeditor5.internal
+
+drupal.ckeditor5:
+  js:
+    js/ckeditor5.js: {}
+  css:
+    theme:
+      css/quickedit.css: { }
+  dependencies:
+    - core/jquery
+    - core/drupal
+    - core/drupal.debounce
+    - core/ckeditor5.editorClassic
+    - core/ckeditor5.editorDecoupled
+    - core/ckeditor5
+    - editor/drupal.editor
+    - ckeditor5/drupal.ckeditor5.quickedit-temporary-work-around
+
+drupal.ckeditor5.quickedit-temporary-work-around:
+  deprecated: "Temporary work-around until https://www.drupal.org/project/drupal/issues/3196689 lands."
+  css:
+    theme:
+      css/quickedit-override.css: {}
+
+drupal.ckeditor5.image:
+  js:
+    js/build/drupalImage.js: { preprocess: false, minified: true }
+  dependencies:
+    - core/ckeditor5.image
+
+drupal.ckeditor5.emphasis:
+  version: VERSION
+  js:
+    js/build/drupalEmphasis.js: { preprocess: false, minified: true }
+  dependencies:
+    - core/ckeditor5.basic
+
+drupal.ckeditor5.media:
+  js:
+    js/media_embed_ckeditor5.theme.js: {}
+    js/build/drupalMedia.js: { preprocess: false, minified: true }
+  dependencies:
+    - core/ckeditor5
+    - core/drupal
+
+ie11.user.warnings:
+  js:
+    js/ie11.user.warnings.js: { }
+  css:
+    theme:
+      css/ie-warnings.css: { }
+  dependencies:
+    - core/drupal
+    - core/drupal.message
+    - editor/drupal.editor
+    - core/modernizr
+
+ie11.filter.warnings:
+  js:
+    js/ie11.filter.warnings.js: {}
+  dependencies:
+    - core/drupal
+    - core/drupal.message
+    - core/once
+    - core/modernizr
+
+drupal.ckeditor5.filter.admin:
+  js:
+    js/ckeditor5.filter.admin.js: {}
+  css:
+    theme:
+      css/filter.admin.css: { }
+  dependencies:
+    - core/drupal
+    - core/drupal.message
+    - core/once
+    - core/drupal.ajax
+
+admin:
+  js:
+    js/ckeditor5.admin.js: { }
+  css:
+    theme:
+      css/toolbar.admin.css: { }
+  dependencies:
+    - core/sortable
+    - filter/drupal.filter.admin
+    - core/jquery
+    - core/once
+
+admin.specialCharacters:
+  css:
+    theme:
+      css/special-characters.css: { }
+
+admin.removeFormat:
+  css:
+    theme:
+      css/remove-format.css: { }
+
+admin.internal:
+  css:
+    theme:
+      css/internal.admin.css: { }
+
+admin.basic:
+  css:
+    theme:
+      css/basic.admin.css: { }
+
+admin.blockquote:
+  css:
+    theme:
+      css/blockquote.admin.css: { }
+
+admin.link:
+  css:
+    theme:
+      css/link.admin.css: { }
+
+admin.list:
+  css:
+    theme:
+      css/list.admin.css: { }
+
+admin.heading:
+  css:
+    theme:
+      css/heading.admin.css: { }
+  dependencies:
+    - core/ckeditor5.internal
+
+admin.horizontalLine:
+  css:
+    theme:
+      css/horizontal-line.admin.css: { }
+
+admin.alignment:
+  css:
+    theme:
+      css/alignment.admin.css: { }
+
+admin.imageupload:
+  css:
+    theme:
+      css/imageupload.admin.css: { }
+
+admin.indent:
+  css:
+    theme:
+      css/indent.admin.css: { }
+
+admin.language:
+  css:
+    theme:
+      css/language.admin.css: { }
+
+admin.drupalmedia:
+  css:
+    theme:
+      css/drupalmedia.admin.css: { }
+
+admin.sourceEditing:
+  css:
+    theme:
+      css/source-editing.admin.css: { }
+
+admin.table:
+  css:
+    theme:
+      css/table.admin.css: { }
diff --git a/core/modules/ckeditor5/ckeditor5.module b/core/modules/ckeditor5/ckeditor5.module
new file mode 100644
index 000000000000..b6ccf9711ce9
--- /dev/null
+++ b/core/modules/ckeditor5/ckeditor5.module
@@ -0,0 +1,398 @@
+<?php
+
+/**
+ * @file
+ * Implements hooks for the CKEditor 5 module.
+ */
+
+declare(strict_types = 1);
+
+use Drupal\ckeditor5\Plugin\Editor\CKEditor5;
+use Drupal\Core\Ajax\AjaxResponse;
+use Drupal\Core\Ajax\InvokeCommand;
+use Drupal\Core\Ajax\MessageCommand;
+use Drupal\Core\Ajax\PrependCommand;
+use Drupal\Core\Ajax\ReplaceCommand;
+use Drupal\Core\Ajax\RemoveCommand;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Render\Element;
+use Drupal\Core\Routing\RouteMatchInterface;
+use Drupal\Core\Url;
+use Symfony\Component\Validator\Constraints\Choice;
+
+/**
+ * Implements hook_help().
+ */
+function ckeditor5_help($route_name, RouteMatchInterface $route_match) {
+  switch ($route_name) {
+    case 'help.page.ckeditor5':
+      $output = '';
+      $output .= '<h3>' . t('About') . '</h3>';
+      $output .= '<p>' . t('The CKEditor 5 module provides a highly-accessible, highly-usable visual text editor and adds a toolbar to text fields. Users can use buttons to format content and to create semantically correct and valid HTML. The CKEditor module uses the framework provided by the <a href=":text_editor">Text Editor module</a>. It requires JavaScript to be enabled in the browser. For more information, see the <a href=":doc_url">online documentation for the CKEditor 5 module</a> and the <a href=":cke5_url">CKEditor 5 website</a>.', [':doc_url' => 'https://www.drupal.org/docs/contributed-modules/ckeditor-5', ':cke5_url' => 'https://ckeditor.com/ckeditor-5/', ':text_editor' => Url::fromRoute('help.page', ['name' => 'editor'])->toString()]) . '</p>';
+      $output .= '<h3>' . t('Uses') . '</h3>';
+      $output .= '<dl>';
+      $output .= '<dt>' . t('Enabling CKEditor 5 for individual text formats') . '</dt>';
+      $output .= '<dd>' . t('CKEditor 5 has to be enabled and configured separately for individual text formats from the <a href=":formats">Text formats and editors page</a> because the filter settings for each text format can be different. For more information, see the <a href=":text_editor">Text Editor help page</a> and <a href=":filter">Filter help page</a>.', [':formats' => Url::fromRoute('filter.admin_overview')->toString(), ':text_editor' => Url::fromRoute('help.page', ['name' => 'editor'])->toString(), ':filter' => Url::fromRoute('help.page', ['name' => 'filter'])->toString()]) . '</dd>';
+      $output .= '<dt>' . t('Migration for existing text formats switching to CKEditor 5') . '</dt>';
+      $output .= '<dd>' . t('Text formats switching to CKEditor 5 from CKEditor 4 (or no text editor) should be able to do so with minimal effort and zero data loss. Existing configuration will be automatically migrated to CKEditor 5 compatible configuration. In instances where functionality can not be migrated, detailed messages are provided explaining what is necessary for feature parity.') . '</dd>';
+      $output .= '<dt>' . t('Configuring the toolbar') . '</dt>';
+      $output .= '<dd>' . t('When CKEditor 5 is chosen from the <em>Text editor</em> drop-down menu, its toolbar configuration is displayed. You can add and remove buttons from the <em>Active toolbar</em> by dragging and dropping them. Separators and rows can be added to organize the buttons.') . '</dd>';
+      $output .= '<dt>' . t('Filtering HTML content') . '</dt>';
+      $output .= '<dd>' . t("Unlike other text editors, plugin configuration determines the tags and attributes allowed in text formats using CKEditor 5. If using the <em>Limit allowed HTML tags and correct faulty HTML</em> filter, this filter's values will be automatically set based on enabled plugins and toolbar items.");
+      $output .= '<dt>' . t('Toggling between formatted text and HTML source') . '</dt>';
+      $output .= '<dd>' . t('If the <em>Source</em> button is available in the toolbar, users can click this button to disable the visual editor and edit the HTML source directly. After toggling back, the visual editor uses the HTML tags allowed via plugin configuration (and not explicity disallowed by filters) to format the text. Tags not enabled via plugin configuration will be be stripped out of the HTML source when the user toggles back to the text editor.') . '</dd>';
+      $output .= '<dt>' . t('Developing CKEditor 5 plugins in Drupal') . '</dt>';
+      $output .= '<dd>' . t('See the <a href=":dev_docs_url">online documentation</a> for detailed information on developing CKEditor 5 plugins for use in Drupal.', [':dev_docs_url' => 'https://www.drupal.org/docs/contributed-modules/ckeditor-5/plugin-and-contrib-module-development']) . '</dd>';
+      $output .= '</dd>';
+      $output .= '<dt>' . t('Accessibility features') . '</dt>';
+      $output .= '<dd>' . t('The built in WYSIWYG editor (CKEditor 5) comes with a number of accessibility features. CKEditor 5 comes with built in <a href=":shortcuts">keyboard shortcuts</a>, which can be beneficial for both power users and keyboard only users.', [':shortcuts' => 'https://ckeditor.com/docs/ckeditor5/latest/features/keyboard-support.html']) . '</dd>';
+      $output .= '<dt>' . t('Generating accessible content') . '</dt>';
+      $output .= '<dd>';
+      $output .= '<ul>';
+      // @todo Uncomment this in https://www.drupal.org/project/ckeditor5/issues/3230230
+      // $output .= '<li>' . t('HTML tables can be created with table headers and caption/summary elements.') . '</li>';
+      // @todo Uncomment this in https://www.drupal.org/project/ckeditor5/issues/3222757
+      // $output .= '<li>' . t('Alt text is required by default on images added through CKEditor (note that this can be overridden).') . '</li>';
+      $output .= '<li>' . t('Semantic HTML5 figure/figcaption are available to add captions to images.') . '</li>';
+      $output .= '<li>' . t('To support multilingual page content, CKEditor 5 can be configured to include a language button in the toolbar.') . '</li>';
+      $output .= '</ul>';
+      $output .= '</dd>';
+      $output .= '</dl>';
+      return $output;
+  }
+}
+
+/**
+ * Implements hook_theme().
+ */
+function ckeditor5_theme() {
+  return [
+    // The theme hook is used for rendering the CKEditor 5 toolbar settings in
+    // the Drupal admin UI. The toolbar settings UI is internal, and utilizing
+    // it outside of core usages is not supported because the UI can change at
+    // any point.
+    // @internal
+    'ckeditor5_settings_toolbar' => [
+      'render element' => 'form',
+    ],
+  ];
+}
+
+/**
+ * Implements hook_module_implements_alter().
+ */
+function ckeditor5_module_implements_alter(&$implementations, $hook) {
+  // This module's implementation of form_filter_format_form_alter() must happen
+  // after the editor module's implementation, as that implementation adds the
+  // active editor to $form_state. It must also happen after the media module's
+  // implementation so media_filter_format_edit_form_validate can be removed
+  // from the validation chain, as that validator is not needed with CKEditor 5
+  // and will trigger a false error.
+  if ($hook === 'form_alter' && isset($implementations['ckeditor5']) && isset($implementations['editor'])) {
+    $group = $implementations['ckeditor5'];
+    unset($implementations['ckeditor5']);
+
+    $offset = array_search('editor', array_keys($implementations)) + 1;
+    if (array_key_exists('media', $implementations)) {
+      $media_offset = array_search('media', array_keys($implementations)) + 1;
+      $offset = max([$offset, $media_offset]);
+    }
+    $implementations = array_slice($implementations, 0, $offset, TRUE) +
+      ['ckeditor5' => $group] +
+      array_slice($implementations, $offset, NULL, TRUE);
+  }
+}
+
+/**
+ * Implements hook_form_FORM_ID_alter().
+ */
+function ckeditor5_form_filter_format_form_alter(array &$form, FormStateInterface $form_state, $form_id) {
+  $editor = $form_state->get('editor');
+
+  // CKEditor 5 plugin config determines the available HTML tags. If an HTML
+  // restricting filter is enabled and the editor is CKEditor 5, the 'Allowed
+  // HTML tags' field is made read only and automatically populated with the
+  // values needed by CKEditor 5 plugins.
+  // @see \Drupal\ckeditor5\Plugin\Editor\CKEditor5::buildConfigurationForm()
+  if ($editor && $editor->getEditor() === 'ckeditor5') {
+    if (isset($form['filters']['settings']['filter_html']['allowed_html'])) {
+      $filter_allowed_html = &$form['filters']['settings']['filter_html']['allowed_html'];
+
+      if (isset($form['editor']['settings']['subform']['plugins']['ckeditor5_sourceEditing']['allowed_tags'])) {
+        $source_allowed_tags = &$form['editor']['settings']['subform']['plugins']['ckeditor5_sourceEditing']['allowed_tags'];
+        // @todo if this triggers the callback via keyboard navigation such as
+        //   tab, focus should move to the next element, not to the rebuilt
+        //   "allowed tags" field
+        //   https://www.drupal.org/project/ckeditor5/issues/3231321.
+        $source_allowed_tags['#ajax'] = [
+          'callback' => '_update_ckeditor5_html_filter',
+          'trigger_as' => ['name' => 'editor_configure'],
+          'event' => 'change',
+        ];
+      }
+
+      $filter_allowed_html['#value_callback'] = [CKEditor5::class, 'getGeneratedAllowedHtmlValue'];
+      // Set readonly and add the form-disabled wrapper class as using #disabled
+      // or the disabled attribute will prevent the new values from being
+      // validated.
+      $filter_allowed_html['#attributes']['readonly'] = TRUE;
+      $filter_allowed_html['#wrapper_attributes']['class'][] = 'form-disabled';
+
+      $filter_allowed_html['#description'] = t('With CKEditor 5 this is a
+          read-only field. The allowed HTML tags and attributes are determined
+          by the CKEditor 5 configuration. Manually removing tags would break
+          enabled functionality, and any manually added tags would be removed by
+          CKEditor 5 on render.');
+
+      // The media_filter_format_edit_form_validate validator is not needed
+      // with CKEditor 5 as it exists to enforce the inclusion of specific
+      // allowed tags that are added automatically by CKEditor 5. The
+      // validator is removed so it does not conflict with the automatic
+      // addition of those allowed tags.
+      $key = array_search('media_filter_format_edit_form_validate', $form['#validate']);
+      if ($key !== FALSE) {
+        unset($form['#validate'][$key]);
+      }
+    }
+  }
+
+  // Override the AJAX callbacks for changing editors, so multiple areas of the
+  // form can be updated on change.
+  $form['editor']['editor']['#ajax'] = [
+    'callback' => '_update_ckeditor5_html_filter',
+    'trigger_as' => ['name' => 'editor_configure'],
+  ];
+  $form['editor']['configure']['#ajax'] = [
+    'callback' => '_update_ckeditor5_html_filter',
+  ];
+
+  $form['editor']['settings']['subform']['toolbar']['items']['#ajax'] = [
+    'callback' => '_update_ckeditor5_html_filter',
+    'trigger_as' => ['name' => 'editor_configure'],
+    'event' => 'change',
+    'ckeditor5_only' => 'true',
+  ];
+
+  foreach (Element::children($form['filters']['status']) as $filter_type) {
+    $form['filters']['status'][$filter_type]['#ajax'] = [
+      'callback' => '_update_ckeditor5_html_filter',
+      'trigger_as' => ['name' => 'editor_configure'],
+      'event' => 'change',
+      'ckeditor5_only' => 'true',
+    ];
+  }
+
+  if (!function_exists('_add_ajax_listeners_to_plugin_inputs')) {
+
+    /**
+     * Recursively adds AJAX listeners to plugin settings elements.
+     *
+     * These are added so allowed tags and other fields that have values
+     * dependent on plugin settings can be updated via AJAX when these settings
+     * are changed in the editor form.
+     *
+     * @param array $plugins_config_form
+     *   The plugins config subform render array.
+     */
+    function _add_ajax_listeners_to_plugin_inputs(array &$plugins_config_form): void {
+      $field_types = [
+        'checkbox',
+        'select',
+        'radios',
+      ];
+      if (isset($plugins_config_form['#type']) && in_array($plugins_config_form['#type'], $field_types) && !isset($plugins_config_form['#ajax'])) {
+        $plugins_config_form['#ajax'] = [
+          'callback' => '_update_ckeditor5_html_filter',
+          'trigger_as' => ['name' => 'editor_configure'],
+          'event' => 'change',
+          'ckeditor5_only' => 'true',
+        ];
+      }
+
+      foreach ($plugins_config_form as $key => &$value) {
+        if (is_array($value) && strpos($key, '#') === FALSE) {
+          _add_ajax_listeners_to_plugin_inputs($value);
+        }
+      }
+    }
+
+  }
+
+  if (isset($form['editor']['settings']['subform']['plugins'])) {
+    _add_ajax_listeners_to_plugin_inputs($form['editor']['settings']['subform']['plugins']);
+  }
+
+  // Add an ID to the filter settings vertical tabs wrapper to facilitate AJAX
+  // updates.
+  $form['filter_settings']['#wrapper_attributes']['id'] = 'filter-settings-wrapper';
+
+  // Add an ID to the editor settings vertical tabs wrapper so it can be easily
+  // targeted by JavaScript.
+  // @todo consider moving this to editor.module when this module is moved to
+  //   Drupal core https://www.drupal.org/project/ckeditor5/issues/3231322.
+  $form['editor']['settings']['subform']['plugin_settings']['#wrapper_attributes']['id'] = 'plugin-settings-wrapper';
+
+  $form['#after_build'][] = [CKEditor5::class, 'assessActiveTextEditorAfterBuild'];
+  $form['#validate'][] = [CKEditor5::class, 'validateSwitchingToCKEditor5'];
+}
+
+/**
+ * AJAX callback handler for filter_format_form().
+ *
+ * Used instead of editor_form_filter_admin_form_ajax from the editor module.
+ */
+function _update_ckeditor5_html_filter(array $form, FormStateInterface $form_state) {
+  $response = new AjaxResponse();
+  $renderer = \Drupal::service('renderer');
+
+  // Replace the editor settings with the settings for the currently selected
+  // editor. This is the default behavior of editor.module. Except when using
+  // CKEditor 5: then we only want CKEditor 5's plugin settings to be updated:
+  // the client side-rendered admin UI would otherwise be dependent on network
+  // latency.
+  $renderedField = $renderer->render($form['editor']['settings']);
+  if ($form_state->get('ckeditor5_is_active') && $form_state->get('ckeditor5_is_selected')) {
+    $response->addCommand(new ReplaceCommand('#plugin-settings-wrapper', $form['editor']['settings']['subform']['plugin_settings']['#markup']));
+  }
+  else {
+    $response->addCommand(new ReplaceCommand('#editor-settings-wrapper', $renderedField));
+  }
+
+  if ($form_state->get('ckeditor5_is_active')) {
+    // Delete all existing validation messages, replace them with the current set.
+    $response->addCommand(new RemoveCommand('#ckeditor5-realtime-validation-messages-container > *'));
+    $messages = \Drupal::messenger()->deleteAll();
+    foreach ($messages as $type => $messages_by_type) {
+      foreach ($messages_by_type as $message) {
+        $response->addCommand(new MessageCommand($message, '#ckeditor5-realtime-validation-messages-container', ['type' => $type], FALSE));
+      }
+    }
+  }
+  else {
+    // If switching to CKEditor 5 triggers a validation error, the real-time
+    // validation messages container will not exist, because CKEditor 5's
+    // configuration form will not be rendered.
+    // In this case, render it into the (empty) editor settings wrapper. When
+    // the validation error is addressed, CKEditor 5's configuration form will
+    // get rendered and will overwrite those validation error messages.
+    $response->addCommand(new PrependCommand('#editor-settings-wrapper', ['#type' => 'status_messages']));
+  }
+
+  // Rebuild filter_settings form item when one of the following is true:
+  // - Switching to CKEditor 5 from another text editor, and the current
+  //   configuration triggers no fundamental compatibility errors.
+  // - Switching from CKEditor 5 to a different editor.
+  // - The editor is not being switched, and is currently CKEditor 5.
+  if ($form_state->get('ckeditor5_is_active') || ($form_state->get('ckeditor5_is_selected') && !$form_state->getError($form['editor']['editor']))) {
+    // Replace the filter settings with the settings for the currently selected
+    // editor.
+    $renderedSettings = $renderer->render($form['filter_settings']);
+    $response->addCommand(new ReplaceCommand('#filter-settings-wrapper', $renderedSettings));
+  }
+
+  // If switching to CKEditor 5 from another editor and there are errors in that
+  // switch, add an error class to the editor select, otherwise remove.
+  $response->addCommand(new InvokeCommand('[data-drupal-selector="edit-editor-editor"]', !$form_state->get('ckeditor5_is_active') && $form_state->get('ckeditor5_is_selected') && !empty($form_state->getErrors()) ? 'addClass' : 'removeClass', ['error']));
+
+  if (!function_exists('_add_attachments_to_editor_update_response')) {
+
+    /**
+     * Recursively find #attach items in the form and add as attachments to the
+     * AJAX response.
+     *
+     * @param array $form
+     *   A form array.
+     * @param \Drupal\Core\Ajax\AjaxResponse $response
+     *   The AJAX response attachments will be added to.
+     */
+    function _add_attachments_to_editor_update_response(array $form, AjaxResponse &$response): void {
+      foreach ($form as $key => $value) {
+        if ($key === "#attached") {
+          $response->addAttachments(array_diff_key($value, ['placeholders' => '']));
+        }
+        elseif (is_array($value) && strpos((string) $key, '#') === FALSE) {
+          _add_attachments_to_editor_update_response($value, $response);
+        }
+      }
+    }
+
+  }
+
+  _add_attachments_to_editor_update_response($form, $response);
+
+  return $response;
+}
+
+/**
+ * Implements hook_library_info_alter().
+ */
+function ckeditor5_library_info_alter(&$libraries, $extension) {
+  if ($extension === 'filter') {
+    $libraries['drupal.filter.admin']['dependencies'][] = 'ckeditor5/ie11.filter.warnings';
+    $libraries['drupal.filter.admin']['dependencies'][] = 'ckeditor5/drupal.ckeditor5.filter.admin';
+  }
+
+  // If the 'ckeditor5/ie11.user.warnings' library is added as a dependency of
+  // other Ckeditor 5 libraries, it won't reliably work as the CKEditor 5 assets
+  // are loaded via AJAX, and the IE11-incompatible syntax in CKEditor 5 can
+  // prevent the AJAX call from successfully loading the functionality in
+  // 'ckeditor5/ie11.user.warnings'. Adding this as a dependency of
+  // 'system/base', as excessive as it may seem, is the most reliable way to
+  // assure it is loaded as part of the page request.
+  if ($extension === 'system') {
+    $libraries['base']['dependencies'][] = 'ckeditor5/ie11.user.warnings';
+  }
+
+  if ($extension === 'core') {
+    // Generate libraries for each of the CKEditor 5 translation files so that
+    // the correct translation file can be attached depending on the current
+    // language.
+    $files = scandir('core/assets/vendor/ckeditor5/translations');
+    foreach ($files as $file) {
+      if ($file[0] !== '.' && preg_match('/\.js$/', $file)) {
+        $langcode = basename($file, '.js');
+        $libraries['ckeditor5.translations.' . $langcode] = [
+          'remote' => $libraries['ckeditor5']['remote'],
+          'version' => $libraries['ckeditor5']['version'],
+          'license' => $libraries['ckeditor5']['license'],
+          'js' => [
+            'assets/vendor/ckeditor5/translations/' . $file => ['preprocess' => FALSE, 'minified' => TRUE],
+          ],
+        ];
+      }
+    }
+  }
+}
+
+/**
+ * Implements hook_validation_constraint_alter().
+ */
+function ckeditor5_validation_constraint_alter(array &$definitions) {
+  // Add the Symfony validation constraints that Drupal core does not add in
+  // \Drupal\Core\Validation\ConstraintManager::registerDefinitions() for
+  // unknown reasons. Do it defensively, to not break when this changes.
+  if (!isset($definitions['Choice'])) {
+    $definitions['Choice'] = [
+      'label' => 'Choice',
+      'class' => Choice::class,
+      'type' => FALSE,
+      'provider' => 'core',
+      'id' => 'Choice',
+    ];
+  }
+}
+
+/**
+ * Implements hook_config_schema_info_alter().
+ */
+function ckeditor5_config_schema_info_alter(&$definitions) {
+  // In \Drupal\Tests\config\Functional\ConfigImportAllTest, this hook may be
+  // called without ckeditor5.pair.schema.yml being active.
+  if (!isset($definitions['ckeditor5_valid_pair__format_and_editor'])) {
+    return;
+  }
+  // @see filter.format.*.filters
+  $definitions['ckeditor5_valid_pair__format_and_editor']['mapping']['filters'] = $definitions['filter.format.*']['mapping']['filters'];
+  // @see @see editor.editor.*.image_upload
+  $definitions['ckeditor5_valid_pair__format_and_editor']['mapping']['image_upload'] = $definitions['editor.editor.*']['mapping']['image_upload'];
+}
diff --git a/core/modules/ckeditor5/ckeditor5.routing.yml b/core/modules/ckeditor5/ckeditor5.routing.yml
new file mode 100644
index 000000000000..9efcc338f707
--- /dev/null
+++ b/core/modules/ckeditor5/ckeditor5.routing.yml
@@ -0,0 +1,27 @@
+ckeditor5.upload_image:
+  path: '/ckeditor5/upload-image/{editor}'
+  defaults:
+    _controller: '\Drupal\ckeditor5\Controller\CKEditor5ImageController::upload'
+  methods: [POST]
+  requirements:
+    _entity_access: 'editor.use'
+    _custom_access: '\Drupal\ckeditor5\Controller\CKEditor5ImageController::imageUploadEnabledAccess'
+    _csrf_token: 'TRUE'
+  options:
+    parameters:
+      editor:
+        type: entity:editor
+
+ckeditor5.media_image:
+  path: '/ckeditor5/{editor}/is-media-image'
+  defaults:
+    _controller: '\Drupal\ckeditor5\Controller\CKEditor5MediaController::isMediaImage'
+  methods: [GET]
+  requirements:
+    _entity_access: 'editor.use'
+    _custom_access: '\Drupal\ckeditor5\Controller\CKEditor5MediaController::access'
+    _csrf_token: 'TRUE'
+  options:
+    parameters:
+      editor:
+        type: entity:editor
diff --git a/core/modules/ckeditor5/ckeditor5.services.yml b/core/modules/ckeditor5/ckeditor5.services.yml
new file mode 100644
index 000000000000..033840825af5
--- /dev/null
+++ b/core/modules/ckeditor5/ckeditor5.services.yml
@@ -0,0 +1,15 @@
+services:
+  plugin.manager.ckeditor5.plugin:
+    class: Drupal\ckeditor5\Plugin\CKEditor5PluginManager
+    parent: default_plugin_manager
+  # @todo Remove in Drupal 11: https://www.drupal.org/project/ckeditor5/issues/3239012
+  plugin.manager.ckeditor4to5upgrade.plugin:
+    public: false
+    class: Drupal\ckeditor5\Plugin\CKEditor4To5UpgradePluginManager
+    parent: default_plugin_manager
+  ckeditor5.smart_default_settings:
+    class: Drupal\ckeditor5\SmartDefaultSettings
+    arguments:
+      - '@plugin.manager.ckeditor5.plugin'
+      - '@plugin.manager.ckeditor4to5upgrade.plugin'
+      - '@?plugin.manager.ckeditor.plugin'
diff --git a/core/modules/ckeditor5/config/schema/ckeditor5.data_types.yml b/core/modules/ckeditor5/config/schema/ckeditor5.data_types.yml
new file mode 100644
index 000000000000..9ee32d4a17a4
--- /dev/null
+++ b/core/modules/ckeditor5/config/schema/ckeditor5.data_types.yml
@@ -0,0 +1,12 @@
+# @see https://ckeditor.com/docs/ckeditor5/latest/features/toolbar/toolbar.html
+ckeditor5.toolbar_item:
+  type: string
+  label: 'Toolbar item'
+  constraints:
+    CKEditor5ToolbarItem: []
+
+ckeditor5.element:
+  type: string
+  label: 'Element'
+  constraints:
+    CKEditor5Element: []
diff --git a/core/modules/ckeditor5/config/schema/ckeditor5.pair.schema.yml b/core/modules/ckeditor5/config/schema/ckeditor5.pair.schema.yml
new file mode 100644
index 000000000000..8bf146455cd2
--- /dev/null
+++ b/core/modules/ckeditor5/config/schema/ckeditor5.pair.schema.yml
@@ -0,0 +1,15 @@
+# @see ckeditor5_config_schema_info_alter()
+ckeditor5_valid_pair__format_and_editor:
+  type: mapping
+  label: 'Text Format plus Text Editor pair using CKEditor 5'
+  constraints:
+    CKEditor5FundamentalCompatibility: []
+  mapping:
+    settings:
+      type: editor.settings.ckeditor5
+    # @see ckeditor5_config_schema_info_alter()
+    # @see filter.format.*.filters
+    filters: {}
+    # @see ckeditor5_config_schema_info_alter()
+    # @see editor.editor.*.image_upload
+    image_upload: {}
diff --git a/core/modules/ckeditor5/config/schema/ckeditor5.schema.yml b/core/modules/ckeditor5/config/schema/ckeditor5.schema.yml
new file mode 100644
index 000000000000..29171f9e36d9
--- /dev/null
+++ b/core/modules/ckeditor5/config/schema/ckeditor5.schema.yml
@@ -0,0 +1,76 @@
+# Schema for the configuration files of the CKEditor5 module.
+
+editor.settings.ckeditor5:
+  type: mapping
+  label: 'CKEditor 5 settings'
+  mapping:
+    toolbar:
+      type: mapping
+      label: 'Toolbar configuration'
+      mapping:
+        items:
+          type: sequence
+          label: 'Items'
+          sequence:
+            type: ckeditor5.toolbar_item
+            label: 'Button'
+            constraints:
+              # Each active CKEditor 5 toolbar item whose plugin has conditions must have those conditions met.
+              CKEditor5ToolbarItemConditionsMet: []
+    plugins:
+      type: sequence
+      label: 'Plugins'
+      sequence:
+        type: ckeditor5.plugin.[%key]
+  constraints:
+    # Each enabled CKEditor 5 plugin that implements \Drupal\ckeditor5\Plugin\CKEditor5PluginConfigurableInterface
+    # must exist in here.
+    CKEditor5EnabledConfigurablePlugins: []
+
+# Plugin \Drupal\ckeditor5\Plugin\CKEditor5Plugin\Language
+ckeditor5.plugin.ckeditor5_language:
+  type: mapping
+  label: 'Language'
+  mapping:
+    language_list:
+      type: string
+      label: 'Language list ID'
+      constraints:
+        # Configuring this does not make sense without the corresponding button.
+        CKEditor5ToolbarItemDependencyConstraint:
+          toolbarItem: textPartLanguage
+        # Only two possible values are accepted.
+        Choice:
+          - un
+          - all
+
+# Plugin \Drupal\ckeditor5\Plugin\CKEditor5Plugin\Heading
+ckeditor5.plugin.ckeditor5_heading:
+  type: mapping
+  label: Headings
+  mapping:
+    enabled_headings:
+      type: sequence
+      label: 'Enabled Headings'
+      constraints:
+        NotBlank:
+          message: "Enable at least one heading, otherwise disable the Heading plugin."
+      sequence:
+        type: string
+        label: 'Heading type'
+        constraints:
+          Choice:
+            callback: \Drupal\ckeditor5\Plugin\CKEditor5Plugin\Heading::validChoices
+
+ckeditor5.plugin.ckeditor5_sourceEditing:
+  type: mapping
+  label: Source Editing
+  mapping:
+    allowed_tags:
+      type: sequence
+      label: 'Allowed Tags'
+      sequence:
+        type: ckeditor5.element
+        label: 'Allowed Tag'
+        constraints:
+          SourceEditingRedundantTags: []
diff --git a/core/modules/ckeditor5/css/alignment.admin.css b/core/modules/ckeditor5/css/alignment.admin.css
new file mode 100644
index 000000000000..2830a9d55656
--- /dev/null
+++ b/core/modules/ckeditor5/css/alignment.admin.css
@@ -0,0 +1,45 @@
+.ckeditor5-toolbar-button-alignment\:left {
+  background-image: url(../icons/align-left.svg);
+}
+.ckeditor5-toolbar-button-alignment\:right {
+  background-image: url(../icons/align-right.svg);
+}
+.ckeditor5-toolbar-button-alignment\:center {
+  background-image: url(../icons/align-center.svg);
+}
+.ckeditor5-toolbar-button-alignment\:justify {
+  background-image: url(../icons/align-justify.svg);
+}
+.ckeditor5-toolbar-button-alignment {
+  background-image: url(../icons/align-left.svg);
+}
+
+.ckeditor5-toolbar-button-alignment {
+  display: flex;
+  align-items: center;
+  justify-content: flex-end;
+  padding-right: 20px;
+  background-position-x: 10px;
+}
+[dir="rtl"] .ckeditor5-toolbar-button-alignment {
+  padding-right: 0;
+  padding-left: 20px;
+  background-position-x: 30px;
+}
+.ckeditor5-toolbar-button-alignment::after {
+  position: relative;
+  right: -10px;
+  display: inline-block;
+  width: 7px;
+  height: 7px;
+  content: "";
+  transform: rotate(135deg);
+  color: #000;
+  border-width: 2px 2px 0 0;
+  border-style: solid;
+  background-position-x: -10px;
+}
+[dir="rtl"] .ckeditor5-toolbar-button-alignment::after {
+  right: 10px;
+  background-position-x: 10px;
+}
diff --git a/core/modules/ckeditor5/css/basic.admin.css b/core/modules/ckeditor5/css/basic.admin.css
new file mode 100644
index 000000000000..8db1109e328c
--- /dev/null
+++ b/core/modules/ckeditor5/css/basic.admin.css
@@ -0,0 +1,27 @@
+.ckeditor5-toolbar-button-bold {
+  background-image: url(../icons/bold.svg);
+}
+
+.ckeditor5-toolbar-button-italic {
+  background-image: url(../icons/italic.svg);
+}
+
+.ckeditor5-toolbar-button-underline {
+  background-image: url(../icons/underline.svg);
+}
+
+.ckeditor5-toolbar-button-code {
+  background-image: url(../icons/code.svg);
+}
+
+.ckeditor5-toolbar-button-strikethrough {
+  background-image: url(../icons/strikethrough.svg);
+}
+
+.ckeditor5-toolbar-button-subscript {
+  background-image: url(../icons/subscript.svg);
+}
+
+.ckeditor5-toolbar-button-superscript {
+  background-image: url(../icons/superscript.svg);
+}
diff --git a/core/modules/ckeditor5/css/blockquote.admin.css b/core/modules/ckeditor5/css/blockquote.admin.css
new file mode 100644
index 000000000000..7f6ac95c7708
--- /dev/null
+++ b/core/modules/ckeditor5/css/blockquote.admin.css
@@ -0,0 +1,3 @@
+.ckeditor5-toolbar-button-blockQuote {
+  background-image: url(../icons/blockquote.svg);
+}
diff --git a/core/modules/ckeditor5/css/drupalmedia.admin.css b/core/modules/ckeditor5/css/drupalmedia.admin.css
new file mode 100644
index 000000000000..7a381a053dc8
--- /dev/null
+++ b/core/modules/ckeditor5/css/drupalmedia.admin.css
@@ -0,0 +1,4 @@
+/* cspell:ignore medialibrary */
+.ckeditor5-toolbar-button-drupalMedia {
+  background-image: url(../icons/medialibrary.svg);
+}
diff --git a/core/modules/ckeditor5/css/filter.admin.css b/core/modules/ckeditor5/css/filter.admin.css
new file mode 100644
index 000000000000..dc9c54cbb3bf
--- /dev/null
+++ b/core/modules/ckeditor5/css/filter.admin.css
@@ -0,0 +1,4 @@
+.ckeditor5-filter-attention {
+  padding: 4px;
+  outline: 1px red dashed;
+}
diff --git a/core/modules/ckeditor5/css/heading.admin.css b/core/modules/ckeditor5/css/heading.admin.css
new file mode 100644
index 000000000000..d16d435a4a2d
--- /dev/null
+++ b/core/modules/ckeditor5/css/heading.admin.css
@@ -0,0 +1,23 @@
+/**
+ * @file
+ * Styles for header options in the admin UI.
+ *
+ * These styles are copied from CKEditor 5's editor styles, which load when an
+ * editor is present, but are not guaranteed to load in the admin UI.
+ */
+
+.ck.ck-heading_heading1 {
+  font-size: 20px;
+}
+
+.ck.ck-heading_heading2 {
+  font-size: 17px;
+}
+
+.ck.ck-heading_heading3 {
+  font-size: 14px;
+}
+
+.ck[class*="ck-heading_heading"] {
+  font-weight: bold;
+}
diff --git a/core/modules/ckeditor5/css/horizontal-line.admin.css b/core/modules/ckeditor5/css/horizontal-line.admin.css
new file mode 100644
index 000000000000..383eb2a10d5b
--- /dev/null
+++ b/core/modules/ckeditor5/css/horizontal-line.admin.css
@@ -0,0 +1,4 @@
+/* cspell:ignore horizontalline */
+.ckeditor5-toolbar-button-horizontalLine {
+  background-image: url(../icons/horizontalline.svg);
+}
diff --git a/core/modules/ckeditor5/css/ie-warnings.css b/core/modules/ckeditor5/css/ie-warnings.css
new file mode 100644
index 000000000000..dcdcc362e3e7
--- /dev/null
+++ b/core/modules/ckeditor5/css/ie-warnings.css
@@ -0,0 +1,17 @@
+.quickedit-field.quickedit-highlighted.ck5-ie11,
+.quickedit-form.quickedit-highlighted.ck5-ie11,
+.quickedit-field .quickedit-highlighted.ck5-ie11 {
+  cursor: default;
+  box-shadow: 0 0 0 1px #f00, 0 0 0 2px #f00;
+}
+
+.quickedit .icon.ck5-ie11 {
+  margin-left: 0.5em;
+  padding-left: 1.5em;
+}
+
+.quickedit .icon.ck5-ie11:before {
+  background-image: url(../../../misc/icons/e32700/error.svg);
+  background-position: left center;
+  background-size: 1.3em;
+}
diff --git a/core/modules/ckeditor5/css/imageupload.admin.css b/core/modules/ckeditor5/css/imageupload.admin.css
new file mode 100644
index 000000000000..5d4f9549b0fd
--- /dev/null
+++ b/core/modules/ckeditor5/css/imageupload.admin.css
@@ -0,0 +1,4 @@
+/* cspell:ignore imageupload */
+.ckeditor5-toolbar-button-uploadImage {
+  background-image: url(../icons/imageupload.svg);
+}
diff --git a/core/modules/ckeditor5/css/indent.admin.css b/core/modules/ckeditor5/css/indent.admin.css
new file mode 100644
index 000000000000..1d6f8f04221e
--- /dev/null
+++ b/core/modules/ckeditor5/css/indent.admin.css
@@ -0,0 +1,7 @@
+.ckeditor5-toolbar-button-indent {
+  background-image: url(../icons/indent.svg);
+}
+
+.ckeditor5-toolbar-button-outdent {
+  background-image: url(../icons/outdent.svg);
+}
diff --git a/core/modules/ckeditor5/css/internal.admin.css b/core/modules/ckeditor5/css/internal.admin.css
new file mode 100644
index 000000000000..62a5ac434b9d
--- /dev/null
+++ b/core/modules/ckeditor5/css/internal.admin.css
@@ -0,0 +1,45 @@
+.ckeditor5-toolbar-button-divider {
+  background-image: url(../icons/divider.svg);
+}
+.ckeditor5-toolbar-button-wrapping {
+  background-image: url(../icons/separator.svg);
+}
+
+.ckeditor5-toolbar-button-undo {
+  background-image: url(../icons/undo.svg);
+}
+
+.ckeditor5-toolbar-button-redo {
+  background-image: url(../icons/redo.svg);
+}
+
+.ckeditor5-toolbar-button-heading {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  width: 100px;
+  color: #000;
+}
+.ckeditor5-toolbar-button-heading::before {
+  margin-left: 10px;
+  content: "Heading";
+  font-size: 14px;
+}
+[dir="rtl"] .ckeditor5-toolbar-button-heading::before {
+  margin-right: 10px;
+  margin-left: 0;
+}
+.ckeditor5-toolbar-button-heading::after {
+  display: inline-block;
+  width: 7px;
+  height: 7px;
+  margin-right: 10px;
+  content: "";
+  transform: rotate(135deg);
+  border-width: 2px 2px 0 0;
+  border-style: solid;
+}
+[dir="rtl"] .ckeditor5-toolbar-button-heading::after {
+  margin-right: 0;
+  margin-left: 10px;
+}
diff --git a/core/modules/ckeditor5/css/language.admin.css b/core/modules/ckeditor5/css/language.admin.css
new file mode 100644
index 000000000000..42ebab47e99b
--- /dev/null
+++ b/core/modules/ckeditor5/css/language.admin.css
@@ -0,0 +1,30 @@
+.ckeditor5-toolbar-button-textPartLanguage {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  width: 110px;
+  color: #000;
+}
+.ckeditor5-toolbar-button-textPartLanguage::before {
+  margin-left: 10px;
+  content: "Language";
+  font-size: 14px;
+}
+[dir="rtl"] .ckeditor5-toolbar-button-textPartLanguage::before {
+  margin-right: 10px;
+  margin-left: 0;
+}
+.ckeditor5-toolbar-button-textPartLanguage::after {
+  display: inline-block;
+  width: 7px;
+  height: 7px;
+  margin-right: 10px;
+  content: "";
+  transform: rotate(135deg);
+  border-width: 2px 2px 0 0;
+  border-style: solid;
+}
+[dir="rtl"] .ckeditor5-toolbar-button-textPartLanguage::after {
+  margin-right: 0;
+  margin-left: 10px;
+}
diff --git a/core/modules/ckeditor5/css/language.css b/core/modules/ckeditor5/css/language.css
new file mode 100644
index 000000000000..b13e52150e23
--- /dev/null
+++ b/core/modules/ckeditor5/css/language.css
@@ -0,0 +1,19 @@
+/**
+ * @file
+ * Language: add styling for elements that have a language attribute.
+ */
+
+/**
+ * Show the user that a 'lang' tag has been applied by adding a thin dotted
+ * border. We also append the value of the tag between brackets, for example:
+ * '(en)'. Since the html element has a 'lang' attribute too we only target
+ * elements within the html scope.
+ */
+.ck-content [lang] {
+  outline: 1px dotted gray;
+}
+.ck-content [lang]:after {
+  content: " ("attr(lang)")";
+  color: #666;
+  font-size: 10px;
+}
diff --git a/core/modules/ckeditor5/css/link.admin.css b/core/modules/ckeditor5/css/link.admin.css
new file mode 100644
index 000000000000..e6e2ccdb1138
--- /dev/null
+++ b/core/modules/ckeditor5/css/link.admin.css
@@ -0,0 +1,3 @@
+.ckeditor5-toolbar-button-link {
+  background-image: url(../icons/link.svg);
+}
diff --git a/core/modules/ckeditor5/css/list.admin.css b/core/modules/ckeditor5/css/list.admin.css
new file mode 100644
index 000000000000..7c37fa0cf05b
--- /dev/null
+++ b/core/modules/ckeditor5/css/list.admin.css
@@ -0,0 +1,8 @@
+/* cspell:ignore bulletedlist numberedlist */
+.ckeditor5-toolbar-button-bulletedList {
+  background-image: url(../icons/bulletedlist.svg);
+}
+
+.ckeditor5-toolbar-button-numberedList {
+  background-image: url(../icons/numberedlist.svg);
+}
diff --git a/core/modules/ckeditor5/css/quickedit-override.css b/core/modules/ckeditor5/css/quickedit-override.css
new file mode 100644
index 000000000000..e64eb0d03cf1
--- /dev/null
+++ b/core/modules/ckeditor5/css/quickedit-override.css
@@ -0,0 +1,9 @@
+.quickedit-editable,
+.quickedit-editing.ck.ck-editor__editable_inline {
+  top: inherit !important;
+  left: inherit !important;
+  margin-bottom: inherit !important;
+}
+.quickedit-editing.ck.ck-editor__editable_inline > :first-child {
+  margin-top: inherit;
+}
diff --git a/core/modules/ckeditor5/css/quickedit.css b/core/modules/ckeditor5/css/quickedit.css
new file mode 100644
index 000000000000..297adfc497be
--- /dev/null
+++ b/core/modules/ckeditor5/css/quickedit.css
@@ -0,0 +1,4 @@
+.quickedit-toolgroup.wysiwyg-main .ck.ck-toolbar {
+  border: none;
+  background: none;
+}
diff --git a/core/modules/ckeditor5/css/remove-format.css b/core/modules/ckeditor5/css/remove-format.css
new file mode 100644
index 000000000000..4796738743dd
--- /dev/null
+++ b/core/modules/ckeditor5/css/remove-format.css
@@ -0,0 +1,3 @@
+.ckeditor5-toolbar-button-removeFormat {
+  background-image: url(../icons/remove-format.svg);
+}
diff --git a/core/modules/ckeditor5/css/source-editing.admin.css b/core/modules/ckeditor5/css/source-editing.admin.css
new file mode 100644
index 000000000000..3f23cc3f3d1c
--- /dev/null
+++ b/core/modules/ckeditor5/css/source-editing.admin.css
@@ -0,0 +1,3 @@
+.ckeditor5-toolbar-button-sourceEditing {
+  background-image: url(../icons/source-editing.svg);
+}
diff --git a/core/modules/ckeditor5/css/special-characters.css b/core/modules/ckeditor5/css/special-characters.css
new file mode 100644
index 000000000000..8f726e11a8ef
--- /dev/null
+++ b/core/modules/ckeditor5/css/special-characters.css
@@ -0,0 +1,3 @@
+.ckeditor5-toolbar-button-specialCharacters {
+  background-image: url(../icons/special-characters.svg);
+}
diff --git a/core/modules/ckeditor5/css/table.admin.css b/core/modules/ckeditor5/css/table.admin.css
new file mode 100644
index 000000000000..807e961faa2b
--- /dev/null
+++ b/core/modules/ckeditor5/css/table.admin.css
@@ -0,0 +1,3 @@
+.ckeditor5-toolbar-button-insertTable {
+  background-image: url(../icons/table.svg);
+}
diff --git a/core/modules/ckeditor5/css/toolbar.admin.css b/core/modules/ckeditor5/css/toolbar.admin.css
new file mode 100644
index 000000000000..40b04dd95124
--- /dev/null
+++ b/core/modules/ckeditor5/css/toolbar.admin.css
@@ -0,0 +1,99 @@
+.ckeditor5-toolbar-disabled {
+  display: flex;
+  justify-content: space-between;
+}
+.ckeditor5-toolbar-available {
+  flex: 1;
+}
+
+.ckeditor5-toolbar-tray {
+  display: flex;
+  flex-flow: row wrap;
+  align-items: center;
+  min-height: 40px;
+  margin: 0 0 0.5em 0;
+  padding: 0;
+  list-style: none;
+  /* Disallow any user selections in the drag-and-drop toolbar config UI. */
+  user-select: none;
+}
+
+.ckeditor5-toolbar-active__buttons {
+  margin: 5px 0;
+  padding: 0.1667em 0.1667em 0.08em;
+  border: 1px solid #c4c4c4;
+  border-radius: 2px;
+  background: #fafafa;
+}
+
+.ckeditor5-toolbar-item,
+.ckeditor5-toolbar-button {
+  display: block;
+  min-width: 36px;
+  height: 36px;
+  cursor: move;
+  border-radius: 2px;
+}
+
+.ckeditor5-toolbar-item {
+  position: relative;
+  margin: 5px 8px 5px 0;
+}
+
+.ckeditor5-toolbar-disabled .ckeditor5-toolbar-item {
+  border: 1px solid #e6e6e6;
+}
+
+.ckeditor5-toolbar-button {
+  border: none;
+  background-color: #eee;
+  background-repeat: no-repeat;
+  background-position: center;
+  background-size: 20px;
+}
+
+.ckeditor5-toolbar-button:focus,
+.ckeditor5-toolbar-button:hover {
+  color: #000;
+  background-color: #e6e6e6;
+}
+
+.ckeditor5-toolbar-button:focus,
+.ckeditor5-toolbar-button:hover,
+.ckeditor5-toolbar-button {
+  text-decoration: none;
+}
+.ckeditor5-toolbar-tooltip {
+  position: absolute;
+  z-index: 1;
+  left: 50%;
+  display: block;
+  padding: 6px 10px;
+  transform: translate(-50%, 2px);
+  text-transform: capitalize;
+  color: #fff;
+  border-radius: 3px;
+  background: #333;
+  font-size: 12px;
+  line-height: 1;
+}
+
+.ckeditor5-toolbar-tooltip::before {
+  position: absolute;
+  top: -10px;
+  left: 50%;
+  width: 0;
+  height: 5px;
+  content: "";
+  transform: translateX(-50%);
+  border-right: solid 5px transparent;
+  border-bottom: solid 5px #333;
+  border-left: solid 5px transparent;
+}
+
+.ckeditor5-toolbar-button + .ckeditor5-toolbar-tooltip {
+  visibility: hidden;
+}
+.ckeditor5-toolbar-button[data-expanded="true"] + .ckeditor5-toolbar-tooltip {
+  visibility: visible;
+}
diff --git a/core/modules/ckeditor5/icons/align-center.svg b/core/modules/ckeditor5/icons/align-center.svg
new file mode 100644
index 000000000000..4d5a61dc2f3c
--- /dev/null
+++ b/core/modules/ckeditor5/icons/align-center.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M2 3.75c0 .414.336.75.75.75h14.5a.75.75 0 1 0 0-1.5H2.75a.75.75 0 0 0-.75.75zm0 8c0 .414.336.75.75.75h14.5a.75.75 0 1 0 0-1.5H2.75a.75.75 0 0 0-.75.75zm2.286 4c0 .414.336.75.75.75h9.928a.75.75 0 1 0 0-1.5H5.036a.75.75 0 0 0-.75.75zm0-8c0 .414.336.75.75.75h9.928a.75.75 0 1 0 0-1.5H5.036a.75.75 0 0 0-.75.75z"/></svg>
\ No newline at end of file
diff --git a/core/modules/ckeditor5/icons/align-justify.svg b/core/modules/ckeditor5/icons/align-justify.svg
new file mode 100644
index 000000000000..277c3de58056
--- /dev/null
+++ b/core/modules/ckeditor5/icons/align-justify.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M2 3.75c0 .414.336.75.75.75h14.5a.75.75 0 1 0 0-1.5H2.75a.75.75 0 0 0-.75.75zm0 8c0 .414.336.75.75.75h14.5a.75.75 0 1 0 0-1.5H2.75a.75.75 0 0 0-.75.75zm0 4c0 .414.336.75.75.75h9.929a.75.75 0 1 0 0-1.5H2.75a.75.75 0 0 0-.75.75zm0-8c0 .414.336.75.75.75h14.5a.75.75 0 1 0 0-1.5H2.75a.75.75 0 0 0-.75.75z"/></svg>
\ No newline at end of file
diff --git a/core/modules/ckeditor5/icons/align-left.svg b/core/modules/ckeditor5/icons/align-left.svg
new file mode 100644
index 000000000000..bf1a93259835
--- /dev/null
+++ b/core/modules/ckeditor5/icons/align-left.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M2 3.75c0 .414.336.75.75.75h14.5a.75.75 0 1 0 0-1.5H2.75a.75.75 0 0 0-.75.75zm0 8c0 .414.336.75.75.75h14.5a.75.75 0 1 0 0-1.5H2.75a.75.75 0 0 0-.75.75zm0 4c0 .414.336.75.75.75h9.929a.75.75 0 1 0 0-1.5H2.75a.75.75 0 0 0-.75.75zm0-8c0 .414.336.75.75.75h9.929a.75.75 0 1 0 0-1.5H2.75a.75.75 0 0 0-.75.75z"/></svg>
\ No newline at end of file
diff --git a/core/modules/ckeditor5/icons/align-right.svg b/core/modules/ckeditor5/icons/align-right.svg
new file mode 100644
index 000000000000..4d51b5bdfbbe
--- /dev/null
+++ b/core/modules/ckeditor5/icons/align-right.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M18 3.75a.75.75 0 0 1-.75.75H2.75a.75.75 0 1 1 0-1.5h14.5a.75.75 0 0 1 .75.75zm0 8a.75.75 0 0 1-.75.75H2.75a.75.75 0 1 1 0-1.5h14.5a.75.75 0 0 1 .75.75zm0 4a.75.75 0 0 1-.75.75H7.321a.75.75 0 1 1 0-1.5h9.929a.75.75 0 0 1 .75.75zm0-8a.75.75 0 0 1-.75.75H7.321a.75.75 0 1 1 0-1.5h9.929a.75.75 0 0 1 .75.75z"/></svg>
\ No newline at end of file
diff --git a/core/modules/ckeditor5/icons/blockquote.svg b/core/modules/ckeditor5/icons/blockquote.svg
new file mode 100644
index 000000000000..9f67095ddc23
--- /dev/null
+++ b/core/modules/ckeditor5/icons/blockquote.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M3 10.423a6.5 6.5 0 0 1 6.056-6.408l.038.67C6.448 5.423 5.354 7.663 5.22 10H9c.552 0 .5.432.5.986v4.511c0 .554-.448.503-1 .503h-5c-.552 0-.5-.449-.5-1.003v-4.574zm8 0a6.5 6.5 0 0 1 6.056-6.408l.038.67c-2.646.739-3.74 2.979-3.873 5.315H17c.552 0 .5.432.5.986v4.511c0 .554-.448.503-1 .503h-5c-.552 0-.5-.449-.5-1.003v-4.574z"></path></svg>
diff --git a/core/modules/ckeditor5/icons/bold.svg b/core/modules/ckeditor5/icons/bold.svg
new file mode 100644
index 000000000000..15b145fc7f54
--- /dev/null
+++ b/core/modules/ckeditor5/icons/bold.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M10.187 17H5.773c-.637 0-1.092-.138-1.364-.415-.273-.277-.409-.718-.409-1.323V4.738c0-.617.14-1.062.419-1.332.279-.27.73-.406 1.354-.406h4.68c.69 0 1.288.041 1.793.124.506.083.96.242 1.36.478.341.197.644.447.906.75a3.262 3.262 0 0 1 .808 2.162c0 1.401-.722 2.426-2.167 3.075C15.05 10.175 16 11.315 16 13.01a3.756 3.756 0 0 1-2.296 3.504 6.1 6.1 0 0 1-1.517.377c-.571.073-1.238.11-2 .11zm-.217-6.217H7v4.087h3.069c1.977 0 2.965-.69 2.965-2.072 0-.707-.256-1.22-.768-1.537-.512-.319-1.277-.478-2.296-.478zM7 5.13v3.619h2.606c.729 0 1.292-.067 1.69-.2a1.6 1.6 0 0 0 .91-.765c.165-.267.247-.566.247-.897 0-.707-.26-1.176-.778-1.409-.519-.232-1.31-.348-2.375-.348H7z"></path></svg>
diff --git a/core/modules/ckeditor5/icons/bulletedlist.svg b/core/modules/ckeditor5/icons/bulletedlist.svg
new file mode 100644
index 000000000000..cad4a657f26b
--- /dev/null
+++ b/core/modules/ckeditor5/icons/bulletedlist.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M7 5.75c0 .414.336.75.75.75h9.5a.75.75 0 1 0 0-1.5h-9.5a.75.75 0 0 0-.75.75zm-6 0C1 4.784 1.777 4 2.75 4c.966 0 1.75.777 1.75 1.75 0 .966-.777 1.75-1.75 1.75C1.784 7.5 1 6.723 1 5.75zm6 9c0 .414.336.75.75.75h9.5a.75.75 0 1 0 0-1.5h-9.5a.75.75 0 0 0-.75.75zm-6 0c0-.966.777-1.75 1.75-1.75.966 0 1.75.777 1.75 1.75 0 .966-.777 1.75-1.75 1.75-.966 0-1.75-.777-1.75-1.75z"></path></svg>
diff --git a/core/modules/ckeditor5/icons/code.svg b/core/modules/ckeditor5/icons/code.svg
new file mode 100644
index 000000000000..fe08f7604f23
--- /dev/null
+++ b/core/modules/ckeditor5/icons/code.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="m12.5 5.7 5.2 3.9v1.3l-5.6 4c-.1.2-.3.2-.5.2-.3-.1-.6-.7-.6-1l.3-.4 4.7-3.5L11.5 7l-.2-.2c-.1-.3-.1-.6 0-.8.2-.2.5-.4.8-.4a.8.8 0 0 1 .4.1zm-5.2 0L2 9.6v1.3l5.6 4c.1.2.3.2.5.2.3-.1.7-.7.6-1 0-.1 0-.3-.2-.4l-5-3.5L8.2 7l.2-.2c.1-.3.1-.6 0-.8-.2-.2-.5-.4-.8-.4a.8.8 0 0 0-.3.1z"/></svg>
diff --git a/core/modules/ckeditor5/icons/divider.svg b/core/modules/ckeditor5/icons/divider.svg
new file mode 100644
index 000000000000..7d0545391cb8
--- /dev/null
+++ b/core/modules/ckeditor5/icons/divider.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><rect x="9" y="2" width="2" height="16" /></svg>
diff --git a/core/modules/ckeditor5/icons/horizontalline.svg b/core/modules/ckeditor5/icons/horizontalline.svg
new file mode 100644
index 000000000000..a89a54851345
--- /dev/null
+++ b/core/modules/ckeditor5/icons/horizontalline.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M2 9h16v2H2z"/></svg>
diff --git a/core/modules/ckeditor5/icons/imageupload.svg b/core/modules/ckeditor5/icons/imageupload.svg
new file mode 100644
index 000000000000..954eebdfe523
--- /dev/null
+++ b/core/modules/ckeditor5/icons/imageupload.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M6.91 10.54c.26-.23.64-.21.88.03l3.36 3.14 2.23-2.06a.64.64 0 0 1 .87 0l2.52 2.97V4.5H3.2v10.12l3.71-4.08zm10.27-7.51c.6 0 1.09.47 1.09 1.05v11.84c0 .59-.49 1.06-1.09 1.06H2.79c-.6 0-1.09-.47-1.09-1.06V4.08c0-.58.49-1.05 1.1-1.05h14.38zm-5.22 5.56a1.96 1.96 0 1 1 3.4-1.96 1.96 1.96 0 0 1-3.4 1.96z"></path></svg>
diff --git a/core/modules/ckeditor5/icons/indent.svg b/core/modules/ckeditor5/icons/indent.svg
new file mode 100644
index 000000000000..cd360e2f26f0
--- /dev/null
+++ b/core/modules/ckeditor5/icons/indent.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M2 3.75c0 .414.336.75.75.75h14.5a.75.75 0 1 0 0-1.5H2.75a.75.75 0 0 0-.75.75zm5 6c0 .414.336.75.75.75h9.5a.75.75 0 1 0 0-1.5h-9.5a.75.75 0 0 0-.75.75zM2.75 16.5h14.5a.75.75 0 1 0 0-1.5H2.75a.75.75 0 1 0 0 1.5zM1.632 6.95 5.02 9.358a.4.4 0 0 1-.013.661l-3.39 2.207A.4.4 0 0 1 1 11.892V7.275a.4.4 0 0 1 .632-.326z"/></svg>
diff --git a/core/modules/ckeditor5/icons/italic.svg b/core/modules/ckeditor5/icons/italic.svg
new file mode 100644
index 000000000000..43ca23085657
--- /dev/null
+++ b/core/modules/ckeditor5/icons/italic.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="m9.586 14.633.021.004c-.036.335.095.655.393.962.082.083.173.15.274.201h1.474a.6.6 0 1 1 0 1.2H5.304a.6.6 0 0 1 0-1.2h1.15c.474-.07.809-.182 1.005-.334.157-.122.291-.32.404-.597l2.416-9.55a1.053 1.053 0 0 0-.281-.823 1.12 1.12 0 0 0-.442-.296H8.15a.6.6 0 0 1 0-1.2h6.443a.6.6 0 1 1 0 1.2h-1.195c-.376.056-.65.155-.823.296-.215.175-.423.439-.623.79l-2.366 9.347z"/></svg>
diff --git a/core/modules/ckeditor5/icons/link.svg b/core/modules/ckeditor5/icons/link.svg
new file mode 100644
index 000000000000..d88bdec3ef21
--- /dev/null
+++ b/core/modules/ckeditor5/icons/link.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="m11.077 15 .991-1.416a.75.75 0 1 1 1.229.86l-1.148 1.64a.748.748 0 0 1-.217.206 5.251 5.251 0 0 1-8.503-5.955.741.741 0 0 1 .12-.274l1.147-1.639a.75.75 0 1 1 1.228.86L4.933 10.7l.006.003a3.75 3.75 0 0 0 6.132 4.294l.006.004zm5.494-5.335a.748.748 0 0 1-.12.274l-1.147 1.639a.75.75 0 1 1-1.228-.86l.86-1.23a3.75 3.75 0 0 0-6.144-4.301l-.86 1.229a.75.75 0 0 1-1.229-.86l1.148-1.64a.748.748 0 0 1 .217-.206 5.251 5.251 0 0 1 8.503 5.955zm-4.563-2.532a.75.75 0 0 1 .184 1.045l-3.155 4.505a.75.75 0 1 1-1.229-.86l3.155-4.506a.75.75 0 0 1 1.045-.184z"/></svg>
diff --git a/core/modules/ckeditor5/icons/medialibrary.svg b/core/modules/ckeditor5/icons/medialibrary.svg
new file mode 100644
index 000000000000..e3e32bd9a23d
--- /dev/null
+++ b/core/modules/ckeditor5/icons/medialibrary.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M19.1873 4.86414L10.2509 6.86414V7.02335H10.2499V15.5091C9.70972 15.1961 9.01793 15.1048 8.34069 15.3136C7.12086 15.6896 6.41013 16.8967 6.75322 18.0096C7.09631 19.1226 8.3633 19.72 9.58313 19.344C10.6666 19.01 11.3484 18.0203 11.2469 17.0234H11.2499V9.80173L18.1803 8.25067V14.3868C17.6401 14.0739 16.9483 13.9825 16.2711 14.1913C15.0513 14.5674 14.3406 15.7744 14.6836 16.8875C15.0267 18.0004 16.2937 18.5978 17.5136 18.2218C18.597 17.8877 19.2788 16.8982 19.1773 15.9011H19.1803V8.02687L19.1873 8.0253V4.86414Z" /><path fill-rule="evenodd" clip-rule="evenodd" d="M13.5039 0.743652H0.386932V12.1603H13.5039V0.743652ZM12.3379 1.75842H1.55289V11.1454H1.65715L4.00622 8.86353L6.06254 10.861L9.24985 5.91309L11.3812 9.22179L11.7761 8.6676L12.3379 9.45621V1.75842ZM6.22048 4.50869C6.22048 5.58193 5.35045 6.45196 4.27722 6.45196C3.20398 6.45196 2.33395 5.58193 2.33395 4.50869C2.33395 3.43546 3.20398 2.56543 4.27722 2.56543C5.35045 2.56543 6.22048 3.43546 6.22048 4.50869Z" /></svg>
diff --git a/core/modules/ckeditor5/icons/numberedlist.svg b/core/modules/ckeditor5/icons/numberedlist.svg
new file mode 100644
index 000000000000..7828079102a6
--- /dev/null
+++ b/core/modules/ckeditor5/icons/numberedlist.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M7 5.75c0 .414.336.75.75.75h9.5a.75.75 0 1 0 0-1.5h-9.5a.75.75 0 0 0-.75.75zM3.5 3v5H2V3.7H1v-1h2.5V3zM.343 17.857l2.59-3.257H2.92a.6.6 0 1 0-1.04 0H.302a2 2 0 1 1 3.995 0h-.001c-.048.405-.16.734-.333.988-.175.254-.59.692-1.244 1.312H4.3v1h-4l.043-.043zM7 14.75a.75.75 0 0 1 .75-.75h9.5a.75.75 0 1 1 0 1.5h-9.5a.75.75 0 0 1-.75-.75z"></path></svg>
diff --git a/core/modules/ckeditor5/icons/outdent.svg b/core/modules/ckeditor5/icons/outdent.svg
new file mode 100644
index 000000000000..a8ddcdae54be
--- /dev/null
+++ b/core/modules/ckeditor5/icons/outdent.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M2 3.75c0 .414.336.75.75.75h14.5a.75.75 0 1 0 0-1.5H2.75a.75.75 0 0 0-.75.75zm5 6c0 .414.336.75.75.75h9.5a.75.75 0 1 0 0-1.5h-9.5a.75.75 0 0 0-.75.75zM2.75 16.5h14.5a.75.75 0 1 0 0-1.5H2.75a.75.75 0 1 0 0 1.5zm1.618-9.55L.98 9.358a.4.4 0 0 0 .013.661l3.39 2.207A.4.4 0 0 0 5 11.892V7.275a.4.4 0 0 0-.632-.326z"/></svg>
diff --git a/core/modules/ckeditor5/icons/redo.svg b/core/modules/ckeditor5/icons/redo.svg
new file mode 100644
index 000000000000..d175568124fb
--- /dev/null
+++ b/core/modules/ckeditor5/icons/redo.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="m14.958 9.367-2.189 1.837a.75.75 0 0 0 .965 1.149l3.788-3.18a.747.747 0 0 0 .21-.284.75.75 0 0 0-.17-.945L13.77 4.762a.75.75 0 1 0-.964 1.15l2.331 1.955H6.22A.75.75 0 0 0 6 7.9a4 4 0 1 0 1.477 7.718l-.344-1.489A2.5 2.5 0 1 1 6.039 9.4l-.008-.032h8.927z"/></svg>
diff --git a/core/modules/ckeditor5/icons/remove-format.svg b/core/modules/ckeditor5/icons/remove-format.svg
new file mode 100644
index 000000000000..0df1d6462db4
--- /dev/null
+++ b/core/modules/ckeditor5/icons/remove-format.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M8.69 14.915c.053.052.173.083.36.093a.366.366 0 0 1 .345.485l-.003.01a.738.738 0 0 1-.697.497h-2.67a.374.374 0 0 1-.353-.496l.013-.038a.681.681 0 0 1 .644-.458c.197-.012.325-.043.386-.093a.28.28 0 0 0 .072-.11L9.592 4.5H6.269c-.359-.017-.609.013-.75.09-.142.078-.289.265-.442.563-.192.29-.516.464-.864.464H4.17a.43.43 0 0 1-.407-.569L4.46 3h13.08l-.62 2.043a.81.81 0 0 1-.775.574h-.114a.486.486 0 0 1-.486-.486c.001-.284-.054-.464-.167-.54-.112-.076-.367-.106-.766-.091h-3.28l-2.68 10.257c-.006.074.007.127.038.158zM3 17h8a.5.5 0 1 1 0 1H3a.5.5 0 1 1 0-1zm11.299 1.17a.75.75 0 1 1-1.06-1.06l1.414-1.415-1.415-1.414a.75.75 0 0 1 1.06-1.06l1.415 1.414 1.414-1.415a.75.75 0 1 1 1.06 1.06l-1.413 1.415 1.414 1.415a.75.75 0 0 1-1.06 1.06l-1.415-1.414-1.414 1.414z"/></svg>
\ No newline at end of file
diff --git a/core/modules/ckeditor5/icons/separator.svg b/core/modules/ckeditor5/icons/separator.svg
new file mode 100644
index 000000000000..f8a665393914
--- /dev/null
+++ b/core/modules/ckeditor5/icons/separator.svg
@@ -0,0 +1 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><rect width="6.65" height="6.65" rx="1" fill="black"/><rect y="13" width="6.65" height="6.65" rx="1" fill="black"/><rect x="9" width="6.65" height="6.65" rx="1" fill="black"/><path d="M7.59998 16.3134L13.5799 12.8609L13.5799 19.7659L7.59998 16.3134Z" fill="black"/><path fill-rule="evenodd" clip-rule="evenodd" d="M12.7307 16.7783H17.13C18.2346 16.7783 19.13 15.8829 19.13 14.7783V4.84961C19.13 3.74504 18.2346 2.84961 17.13 2.84961H16.9706V3.84961H17.13C17.6823 3.84961 18.13 4.29732 18.13 4.84961V14.7783C18.13 15.3306 17.6823 15.7783 17.13 15.7783H12.7307V16.7783Z" fill="black"/></svg>
diff --git a/core/modules/ckeditor5/icons/source-editing.svg b/core/modules/ckeditor5/icons/source-editing.svg
new file mode 100644
index 000000000000..0bf9e953df58
--- /dev/null
+++ b/core/modules/ckeditor5/icons/source-editing.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="m12.5 0 5 4.5v15.003h-16V0h11zM3 1.5v3.25l-1.497 1-.003 8 1.5 1v3.254L7.685 18l-.001 1.504H17.5V8.002L16 9.428l-.004-4.22-4.222-3.692L3 1.5z"/><path d="M4.06 6.64a.75.75 0 0 1 .958 1.15l-.085.07L2.29 9.75l2.646 1.89c.302.216.4.62.232.951l-.058.095a.75.75 0 0 1-.951.232l-.095-.058-3.5-2.5V9.14l3.496-2.5zm4.194 6.22a.75.75 0 0 1-.958-1.149l.085-.07 2.643-1.89-2.646-1.89a.75.75 0 0 1-.232-.952l.058-.095a.75.75 0 0 1 .95-.232l.096.058 3.5 2.5v1.22l-3.496 2.5zm7.644-.836 2.122 2.122-5.825 5.809-2.125-.005.003-2.116zm2.539-1.847 1.414 1.414a.5.5 0 0 1 0 .707l-1.06 1.06-2.122-2.12 1.061-1.061a.5.5 0 0 1 .707 0z"/></svg>
\ No newline at end of file
diff --git a/core/modules/ckeditor5/icons/special-characters.svg b/core/modules/ckeditor5/icons/special-characters.svg
new file mode 100644
index 000000000000..8e0251be0782
--- /dev/null
+++ b/core/modules/ckeditor5/icons/special-characters.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M10 2.5a7.47 7.47 0 0 1 4.231 1.31 7.268 7.268 0 0 1 2.703 3.454 7.128 7.128 0 0 1 .199 4.353c-.39 1.436-1.475 2.72-2.633 3.677h2.013c0-.226.092-.443.254-.603a.876.876 0 0 1 1.229 0c.163.16.254.377.254.603v.853c0 .209-.078.41-.22.567a.873.873 0 0 1-.547.28l-.101.006h-4.695a.517.517 0 0 1-.516-.518v-1.265c0-.21.128-.398.317-.489a5.601 5.601 0 0 0 2.492-2.371 5.459 5.459 0 0 0 .552-3.693 5.53 5.53 0 0 0-1.955-3.2A5.71 5.71 0 0 0 10 4.206 5.708 5.708 0 0 0 6.419 5.46 5.527 5.527 0 0 0 4.46 8.663a5.457 5.457 0 0 0 .554 3.695 5.6 5.6 0 0 0 2.497 2.37.55.55 0 0 1 .317.49v1.264c0 .286-.23.518-.516.518H2.618a.877.877 0 0 1-.614-.25.845.845 0 0 1-.254-.603v-.853c0-.226.091-.443.254-.603a.876.876 0 0 1 1.228 0c.163.16.255.377.255.603h1.925c-1.158-.958-2.155-2.241-2.545-3.678a7.128 7.128 0 0 1 .199-4.352 7.268 7.268 0 0 1 2.703-3.455A7.475 7.475 0 0 1 10 2.5z"/></svg>
\ No newline at end of file
diff --git a/core/modules/ckeditor5/icons/strikethrough.svg b/core/modules/ckeditor5/icons/strikethrough.svg
new file mode 100644
index 000000000000..756a6870ea13
--- /dev/null
+++ b/core/modules/ckeditor5/icons/strikethrough.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M7 16.4c-.8-.4-1.5-.9-2.2-1.5a.6.6 0 0 1-.2-.5l.3-.6h1c1 1.2 2.1 1.7 3.7 1.7 1 0 1.8-.3 2.3-.6.6-.4.6-1.2.6-1.3.2-1.2-.9-2.1-.9-2.1h2.1c.3.7.4 1.2.4 1.7v.8l-.6 1.2c-.6.8-1.1 1-1.6 1.2a6 6 0 0 1-2.4.6c-1 0-1.8-.3-2.5-.6zM6.8 9 6 8.3c-.4-.5-.5-.8-.5-1.6 0-.7.1-1.3.5-1.8.4-.6 1-1 1.6-1.3a6.3 6.3 0 0 1 4.7 0 4 4 0 0 1 1.7 1l.3.7c0 .1.2.4-.2.7-.4.2-.9.1-1 0a3 3 0 0 0-1.2-1c-.4-.2-1-.3-2-.4-.7 0-1.4.2-2 .6-.8.6-1 .8-1 1.5 0 .8.5 1 1.2 1.5.6.4 1.1.7 1.9 1H6.8z"/><path d="M3 10.5V9h14v1.5z"/></svg>
diff --git a/core/modules/ckeditor5/icons/subscript.svg b/core/modules/ckeditor5/icons/subscript.svg
new file mode 100644
index 000000000000..da53b284a562
--- /dev/null
+++ b/core/modules/ckeditor5/icons/subscript.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="m7.03 10.349 3.818-3.819a.8.8 0 1 1 1.132 1.132L8.16 11.48l3.819 3.818a.8.8 0 1 1-1.132 1.132L7.03 12.61l-3.818 3.82a.8.8 0 1 1-1.132-1.132L5.9 11.48 2.08 7.662A.8.8 0 1 1 3.212 6.53l3.818 3.82zm8.147 7.829h2.549c.254 0 .447.05.58.152a.49.49 0 0 1 .201.413.54.54 0 0 1-.159.393c-.105.108-.266.162-.48.162h-3.594c-.245 0-.435-.066-.572-.197a.621.621 0 0 1-.205-.463c0-.114.044-.265.132-.453a1.62 1.62 0 0 1 .288-.444c.433-.436.824-.81 1.172-1.122.348-.312.597-.517.747-.615.267-.183.49-.368.667-.553.177-.185.312-.375.405-.57.093-.194.139-.384.139-.57a1.008 1.008 0 0 0-.554-.917 1.197 1.197 0 0 0-.56-.133c-.426 0-.761.182-1.005.546a2.332 2.332 0 0 0-.164.39 1.609 1.609 0 0 1-.258.488c-.096.114-.237.17-.423.17a.558.558 0 0 1-.405-.156.568.568 0 0 1-.161-.427c0-.218.05-.446.151-.683.101-.238.252-.453.452-.646s.454-.349.762-.467a2.998 2.998 0 0 1 1.081-.178c.498 0 .923.076 1.274.228a1.916 1.916 0 0 1 1.004 1.032 1.984 1.984 0 0 1-.156 1.794c-.2.32-.405.572-.613.754-.208.182-.558.468-1.048.857-.49.39-.826.691-1.008.906a2.703 2.703 0 0 0-.24.309z"/></svg>
diff --git a/core/modules/ckeditor5/icons/superscript.svg b/core/modules/ckeditor5/icons/superscript.svg
new file mode 100644
index 000000000000..92c9be8064b8
--- /dev/null
+++ b/core/modules/ckeditor5/icons/superscript.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M15.677 8.678h2.549c.254 0 .447.05.58.152a.49.49 0 0 1 .201.413.54.54 0 0 1-.159.393c-.105.108-.266.162-.48.162h-3.594c-.245 0-.435-.066-.572-.197a.621.621 0 0 1-.205-.463c0-.114.044-.265.132-.453a1.62 1.62 0 0 1 .288-.444c.433-.436.824-.81 1.172-1.122.348-.312.597-.517.747-.615.267-.183.49-.368.667-.553.177-.185.312-.375.405-.57.093-.194.139-.384.139-.57a1.008 1.008 0 0 0-.554-.917 1.197 1.197 0 0 0-.56-.133c-.426 0-.761.182-1.005.546a2.332 2.332 0 0 0-.164.39 1.609 1.609 0 0 1-.258.488c-.096.114-.237.17-.423.17a.558.558 0 0 1-.405-.156.568.568 0 0 1-.161-.427c0-.218.05-.446.151-.683.101-.238.252-.453.452-.646s.454-.349.762-.467a2.998 2.998 0 0 1 1.081-.178c.498 0 .923.076 1.274.228a1.916 1.916 0 0 1 1.004 1.032 1.984 1.984 0 0 1-.156 1.794c-.2.32-.405.572-.613.754-.208.182-.558.468-1.048.857-.49.39-.826.691-1.008.906a2.703 2.703 0 0 0-.24.309zM7.03 10.349l3.818-3.819a.8.8 0 1 1 1.132 1.132L8.16 11.48l3.819 3.818a.8.8 0 1 1-1.132 1.132L7.03 12.61l-3.818 3.82a.8.8 0 1 1-1.132-1.132L5.9 11.48 2.08 7.662A.8.8 0 1 1 3.212 6.53l3.818 3.82z"></path></svg>
diff --git a/core/modules/ckeditor5/icons/table.svg b/core/modules/ckeditor5/icons/table.svg
new file mode 100644
index 000000000000..374ef8863851
--- /dev/null
+++ b/core/modules/ckeditor5/icons/table.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M3 6v3h4V6H3zm0 4v3h4v-3H3zm0 4v3h4v-3H3zm5 3h4v-3H8v3zm5 0h4v-3h-4v3zm4-4v-3h-4v3h4zm0-4V6h-4v3h4zm1.5 8a1.5 1.5 0 0 1-1.5 1.5H3A1.5 1.5 0 0 1 1.5 17V4c.222-.863 1.068-1.5 2-1.5h13c.932 0 1.778.637 2 1.5v13zM12 13v-3H8v3h4zm0-4V6H8v3h4z"/></svg>
\ No newline at end of file
diff --git a/core/modules/ckeditor5/icons/underline.svg b/core/modules/ckeditor5/icons/underline.svg
new file mode 100644
index 000000000000..11bab0dde0d9
--- /dev/null
+++ b/core/modules/ckeditor5/icons/underline.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M3 18v-1.5h14V18zM5.2 10V3.6c0-.4.4-.6.8-.6.3 0 .7.2.7.6v6.2c0 2 1.3 2.8 3.2 2.8 1.9 0 3.4-.9 3.4-2.9V3.6c0-.3.4-.5.8-.5.3 0 .7.2.7.5V10c0 2.7-2.2 4-4.9 4-2.6 0-4.7-1.2-4.7-4z"></path></svg>
diff --git a/core/modules/ckeditor5/icons/undo.svg b/core/modules/ckeditor5/icons/undo.svg
new file mode 100644
index 000000000000..0e01bcac2875
--- /dev/null
+++ b/core/modules/ckeditor5/icons/undo.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="m5.042 9.367 2.189 1.837a.75.75 0 0 1-.965 1.149l-3.788-3.18a.747.747 0 0 1-.21-.284.75.75 0 0 1 .17-.945L6.23 4.762a.75.75 0 1 1 .964 1.15L4.863 7.866h8.917A.75.75 0 0 1 14 7.9a4 4 0 1 1-1.477 7.718l.344-1.489a2.5 2.5 0 1 0 1.094-4.73l.008-.032H5.042z"/></svg>
diff --git a/core/modules/ckeditor5/js/build/drupalEmphasis.js b/core/modules/ckeditor5/js/build/drupalEmphasis.js
new file mode 100644
index 000000000000..7aa31a0b7fc9
--- /dev/null
+++ b/core/modules/ckeditor5/js/build/drupalEmphasis.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.CKEditor5=t():(e.CKEditor5=e.CKEditor5||{},e.CKEditor5.drupalEmphasis=t())}(self,(function(){return function(){var e={"ckeditor5/src/core.js":function(e,t,r){e.exports=r("dll-reference CKEditor5.dll")("./src/core.js")},"dll-reference CKEditor5.dll":function(e){"use strict";e.exports=CKEditor5.dll}},t={};function r(o){var i=t[o];if(void 0!==i)return i.exports;var n=t[o]={exports:{}};return e[o](n,n.exports,r),n.exports}r.d=function(e,t){for(var o in t)r.o(t,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};var o={};return function(){"use strict";r.d(o,{default:function(){return s}});var e=r("ckeditor5/src/core.js");class t extends e.Plugin{static get pluginName(){return"DrupalEmphasisEditing"}init(){this.editor.conversion.for("downcast").attributeToElement({model:"italic",view:"em",converterPriority:"high"})}}var i=t;class n extends e.Plugin{static get requires(){return[i]}static get pluginName(){return"DrupalEmphasis"}}var s={DrupalEmphasis:n}}(),o=o.default}()}));
\ No newline at end of file
diff --git a/core/modules/ckeditor5/js/build/drupalHtmlEngine.js b/core/modules/ckeditor5/js/build/drupalHtmlEngine.js
new file mode 100644
index 000000000000..448883cc9683
--- /dev/null
+++ b/core/modules/ckeditor5/js/build/drupalHtmlEngine.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.CKEditor5=t():(e.CKEditor5=e.CKEditor5||{},e.CKEditor5.drupalHtmlEngine=t())}(self,(function(){return function(){var e={"ckeditor5/src/core.js":function(e,t,n){e.exports=n("dll-reference CKEditor5.dll")("./src/core.js")},"dll-reference CKEditor5.dll":function(e){"use strict";e.exports=CKEditor5.dll}},t={};function n(r){var p=t[r];if(void 0!==p)return p.exports;var i=t[r]={exports:{}};return e[r](i,i.exports,n),i.exports}n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};var r={};return function(){"use strict";n.d(r,{default:function(){return o}});var e=n("ckeditor5/src/core.js");class t{constructor(){this.chunks=[],this.selfClosingTags=["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]}build(){return this.chunks.join("")}appendNode(e){e.nodeType===Node.TEXT_NODE?this._appendText(e):e.nodeType===Node.ELEMENT_NODE?this._appendElement(e):e.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&this._appendChildren(e)}_appendElement(e){const t=e.nodeName.toLowerCase();this._append("<"),this._append(t),this._appendAttributes(e),this._append(">"),this.selfClosingTags.includes(t)||(this._appendChildren(e),this._append("</"),this._append(t),this._append(">"))}_appendChildren(e){Object.keys(e.childNodes).forEach((t=>{this.appendNode(e.childNodes[t])}))}_appendAttributes(e){Object.keys(e.attributes).forEach((t=>{this._append(" "),this._append(e.attributes[t].name),this._append('="'),this._append(this.constructor._escapeAttribute(e.attributes[t].value)),this._append('"')}))}_appendText(e){const t=document.implementation.createHTMLDocument("").createElement("p");t.textContent=e.textContent,this._append(t.innerHTML)}_append(e){this.chunks.push(e)}static _escapeAttribute(e){return e.replace(/&/g,"&amp;").replace(/'/g,"&apos;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\r\n/g,"&#13;").replace(/[\r\n]/g,"&#13;")}}class p{getHtml(e){const n=new t;return n.appendNode(e),n.build()}}class i extends e.Plugin{init(){this.editor.data.processor.htmlWriter=new p}static get pluginName(){return"DrupalHtmlEngine"}}var o={DrupalHtmlEngine:i}}(),r=r.default}()}));
\ No newline at end of file
diff --git a/core/modules/ckeditor5/js/build/drupalImage.js b/core/modules/ckeditor5/js/build/drupalImage.js
new file mode 100644
index 000000000000..44d330d5c9a3
--- /dev/null
+++ b/core/modules/ckeditor5/js/build/drupalImage.js
@@ -0,0 +1 @@
+!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.CKEditor5=e():(t.CKEditor5=t.CKEditor5||{},t.CKEditor5.drupalImage=e())}(self,(function(){return function(){var t={"ckeditor5/src/core.js":function(t,e,i){t.exports=i("dll-reference CKEditor5.dll")("./src/core.js")},"ckeditor5/src/upload.js":function(t,e,i){t.exports=i("dll-reference CKEditor5.dll")("./src/upload.js")},"ckeditor5/src/utils.js":function(t,e,i){t.exports=i("dll-reference CKEditor5.dll")("./src/utils.js")},"dll-reference CKEditor5.dll":function(t){"use strict";t.exports=CKEditor5.dll}},e={};function i(r){var n=e[r];if(void 0!==n)return n.exports;var a=e[r]={exports:{}};return t[r](a,a.exports,i),a.exports}i.d=function(t,e){for(var r in e)i.o(e,r)&&!i.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)};var r={};return function(){"use strict";i.d(r,{default:function(){return p}});var t=i("ckeditor5/src/core.js");function e(t){return t.createEmptyElement("img")}function n(){function t(t,e,i){if(!i.consumable.consume(e.item,t.name))return;const r=i.mapper.toViewElement(e.item),n=i.writer,a=n.createContainerElement("a",{href:e.attributeNewValue});n.insert(n.createPositionBefore(r),a),n.move(n.createRangeOn(r),n.createPositionAt(a,0)),i.consumable.consume(e.item,"attribute:htmlLinkAttributes:imageBlock")&&function(t,e,i){if(e.attributes)for(const[r,n]of Object.entries(e.attributes))t.setAttribute(r,n,i);e.styles&&t.setStyle(e.styles,i),e.classes&&t.addClass(e.classes,i)}(i.writer,e.item.getAttribute("htmlLinkAttributes"),a)}return e=>{e.on("attribute:linkHref:imageBlock",t,{priority:"high"})}}class a extends t.Plugin{static get pluginName(){return"DrupalImageEditing"}init(){const{editor:t}=this,{conversion:i}=t,{schema:r}=t.model;r.isRegistered("imageInline")&&r.extend("imageInline",{allowAttributes:["dataEntityUuid","dataEntityType","width","height"]}),r.isRegistered("imageBlock")&&r.extend("imageBlock",{allowAttributes:["dataEntityUuid","dataEntityType","width","height"]}),i.for("upcast").add(function(t){function e(e,i,r){const{viewItem:n}=i,{writer:a,consumable:o,safeInsert:s,updateConversionResult:u,schema:l}=r,d=[];let c;if(o.test(n,{name:!0,attributes:"src"})){if(c=l.checkChild(i.modelCursor,"imageInline")?a.createElement("imageInline",{src:n.getAttribute("src")}):a.createElement("imageBlock",{src:n.getAttribute("src")}),t.plugins.has("ImageStyleEditing")&&o.test(n,{name:!0,attributes:"data-align"})){const t={left:"alignBlockLeft",center:"alignCenter",right:"alignBlockRight"},e={left:"alignLeft",right:"alignRight"},i=n.getAttribute("data-align"),r=c.is("element","imageBlock")?t[i]:e[i];a.setAttribute("imageStyle",r,c),d.push("data-align")}if(c.is("element","imageBlock")&&o.test(n,{name:!0,attributes:"data-caption"})){const e=a.createElement("caption"),i=t.data.processor.toView(n.getAttribute("data-caption")),o=a.createDocumentFragment();r.consumable.constructor.createFrom(i,r.consumable),r.convertChildren(i,o);for(const t of Array.from(o.getChildren()))a.append(t,e);a.append(e,c),d.push("data-caption")}o.test(n,{name:!0,attributes:"data-entity-uuid"})&&(a.setAttribute("dataEntityUuid",n.getAttribute("data-entity-uuid"),c),d.push("data-entity-uuid")),o.test(n,{name:!0,attributes:"data-entity-type"})&&(a.setAttribute("dataEntityType",n.getAttribute("data-entity-type"),c),d.push("data-entity-type")),s(c,i.modelCursor)&&(o.consume(n,{name:!0,attributes:d}),u(c,i))}}return t=>{t.on("element:img",e,{priority:"high"})}}(t)).attributeToAttribute({view:{name:"img",key:"width"},model:{key:"width",value:t=>`${t.getAttribute("width")}px`}}).attributeToAttribute({view:{name:"img",key:"height"},model:{key:"height",value:t=>`${t.getAttribute("height")}px`}}),i.for("downcast").add(function(){function t(t,e,i){const{item:r}=e,{consumable:n,writer:a}=i;if(!n.consume(r,t.name))return;const o=i.mapper.toViewElement(r),s=Array.from(o.getChildren()).find((t=>"img"===t.name));a.setAttribute("data-entity-uuid",e.attributeNewValue,s||o)}return e=>{e.on("attribute:dataEntityUuid",t)}}()).add(function(){function t(t,e,i){const{item:r}=e,{consumable:n,writer:a}=i;if(!n.consume(r,t.name))return;const o=i.mapper.toViewElement(r),s=Array.from(o.getChildren()).find((t=>"img"===t.name));a.setAttribute("data-entity-type",e.attributeNewValue,s||o)}return e=>{e.on("attribute:dataEntityType",t)}}()),i.for("dataDowncast").add(function(t){return e=>{e.on("insert:caption",((e,i,r)=>{const{consumable:n,writer:a,mapper:o}=r;if(!n.consume(i.item,"insert"))return;const s=t.model.createRangeIn(i.item),u=a.createDocumentFragment();o.bindElements(i.item,u);for(const{item:e}of Array.from(s)){const i={item:e,range:t.model.createRangeOn(e)},n=`insert:${e.name||"$text"}`;t.data.downcastDispatcher.fire(n,i,r);for(const n of e.getAttributeKeys())Object.assign(i,{attributeKey:n,attributeOldValue:null,attributeNewValue:i.item.getAttribute(n)}),t.data.downcastDispatcher.fire(`attribute:${n}`,i,r)}for(const t of a.createRangeIn(u).getItems())o.unbindViewElement(t);o.unbindViewElement(u);const l=t.data.processor.toData(u);if(l){const t=o.toViewElement(i.item.parent);a.setAttribute("data-caption",l,t)}}),{priority:"high"})}}(t)).elementToElement({model:"imageBlock",view:(t,{writer:i})=>e(i),converterPriority:"high"}).elementToElement({model:"imageInline",view:(t,{writer:i})=>e(i),converterPriority:"high"}).add(function(){function t(t,e,i){const{item:r}=e,{consumable:n,writer:a}=i,o={alignLeft:"left",alignRight:"right",alignCenter:"center",alignBlockRight:"right",alignBlockLeft:"left"};if(!o[e.attributeNewValue]||!n.consume(r,t.name))return;const s=i.mapper.toViewElement(r),u=Array.from(s.getChildren()).find((t=>"img"===t.name));a.setAttribute("data-align",o[e.attributeNewValue],u||s)}return e=>{e.on("attribute:imageStyle",t,{priority:"high"})}}()).add(function(){function t(t,e,i){const{item:r}=e,{consumable:n,writer:a}=i;if(!n.consume(r,t.name))return;const o=i.mapper.toViewElement(r),s=Array.from(o.getChildren()).find((t=>"img"===t.name));a.setAttribute("width",e.attributeNewValue.replace("px",""),s||o)}return e=>{e.on("attribute:width:imageInline",t,{priority:"high"}),e.on("attribute:width:imageBlock",t,{priority:"high"})}}()).add(function(){function t(t,e,i){const{item:r}=e,{consumable:n,writer:a}=i;if(!n.consume(r,t.name))return;const o=i.mapper.toViewElement(r),s=Array.from(o.getChildren()).find((t=>"img"===t.name));a.setAttribute("height",e.attributeNewValue.replace("px",""),s||o)}return e=>{e.on("attribute:height:imageInline",t,{priority:"high"}),e.on("attribute:height:imageBlock",t,{priority:"high"})}}()).add(n())}}class o extends t.Plugin{static get requires(){return[a]}static get pluginName(){return"DrupalImage"}}var s=o;class u extends t.Plugin{init(){const{editor:t}=this;t.plugins.get("ImageUploadEditing").on("uploadComplete",((e,{data:i,imageElement:r})=>{t.model.change((t=>{t.setAttribute("dataEntityUuid",i.dataEntityUuid,r),t.setAttribute("dataEntityType",i.dataEntityType,r)}))}))}static get pluginName(){return"DrupalImageUploadEditing"}}var l=i("ckeditor5/src/upload.js"),d=i("ckeditor5/src/utils.js");class c{constructor(t,e){this.loader=t,this.options=e}upload(){return this.loader.file.then((t=>new Promise(((e,i)=>{this._initRequest(),this._initListeners(e,i,t),this._sendRequest(t)}))))}abort(){this.xhr&&this.xhr.abort()}_initRequest(){this.xhr=new XMLHttpRequest,this.xhr.open("POST",this.options.uploadUrl,!0),this.xhr.responseType="json"}_initListeners(t,e,i){const r=this.xhr,n=this.loader,a=`Couldn't upload file: ${i.name}.`;r.addEventListener("error",(()=>e(a))),r.addEventListener("abort",(()=>e())),r.addEventListener("load",(()=>{const i=r.response;if(!i||i.error)return e(i&&i.error&&i.error.message?i.error.message:a);t({urls:{default:i.url},dataEntityUuid:i.uuid?i.uuid:"",dataEntityType:i.entity_type?i.entity_type:""})})),r.upload&&r.upload.addEventListener("progress",(t=>{t.lengthComputable&&(n.uploadTotal=t.total,n.uploaded=t.loaded)}))}_sendRequest(t){const e=this.options.headers||{},i=this.options.withCredentials||!1;Object.keys(e).forEach((t=>{this.xhr.setRequestHeader(t,e[t])})),this.xhr.withCredentials=i;const r=new FormData;r.append("upload",t),this.xhr.send(r)}}class m extends t.Plugin{static get requires(){return[l.FileRepository]}static get pluginName(){return"DrupalFileRepository"}init(){const t=this.editor.config.get("drupalImageUpload");t&&(t.uploadUrl?this.editor.plugins.get(l.FileRepository).createUploadAdapter=e=>new c(e,t):(0,d.logWarning)("simple-upload-adapter-missing-uploadurl"))}}class g extends t.Plugin{static get requires(){return[m,u]}static get pluginName(){return"DrupalImageUpload"}}var p={DrupalImage:s,DrupalImageUpload:g}}(),r=r.default}()}));
\ No newline at end of file
diff --git a/core/modules/ckeditor5/js/build/drupalMedia.js b/core/modules/ckeditor5/js/build/drupalMedia.js
new file mode 100644
index 000000000000..ee2cc68094af
--- /dev/null
+++ b/core/modules/ckeditor5/js/build/drupalMedia.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.CKEditor5=t():(e.CKEditor5=e.CKEditor5||{},e.CKEditor5.drupalMedia=t())}(self,(function(){return function(){var e={"ckeditor5/src/core.js":function(e,t,i){e.exports=i("dll-reference CKEditor5.dll")("./src/core.js")},"ckeditor5/src/ui.js":function(e,t,i){e.exports=i("dll-reference CKEditor5.dll")("./src/ui.js")},"ckeditor5/src/utils.js":function(e,t,i){e.exports=i("dll-reference CKEditor5.dll")("./src/utils.js")},"ckeditor5/src/widget.js":function(e,t,i){e.exports=i("dll-reference CKEditor5.dll")("./src/widget.js")},"dll-reference CKEditor5.dll":function(e){"use strict";e.exports=CKEditor5.dll}},t={};function i(r){var n=t[r];if(void 0!==n)return n.exports;var a=t[r]={exports:{}};return e[r](a,a.exports,i),a.exports}i.d=function(e,t){for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};var r={};return function(){"use strict";i.d(r,{default:function(){return y}});var e=i("ckeditor5/src/core.js"),t=i("ckeditor5/src/widget.js");class n extends e.Command{execute(e){const t=this.editor.plugins.get("DrupalMediaEditing"),i=Object.entries(t.attrs).reduce(((e,[t,i])=>(e[i]=t,e)),{}),r=Object.keys(e).reduce(((t,r)=>(i[r]&&(t[i[r]]=e[r]),t)),{});this.editor.model.change((e=>{this.editor.model.insertContent(function(e,t){return e.createElement("drupalMedia",t)}(e,r))}))}refresh(){const e=this.editor.model,t=e.document.selection,i=e.schema.findAllowedParent(t.getFirstPosition(),"drupalMedia");this.isEnabled=null!==i}}class a extends e.Plugin{static get requires(){return[t.Widget]}init(){this.attrs={drupalMediaAlt:"alt",drupalMediaAlign:"data-align",drupalMediaCaption:"data-caption",drupalMediaEntityType:"data-entity-type",drupalMediaEntityUuid:"data-entity-uuid",drupalMediaViewMode:"data-view-mode"};const e=this.editor.config.get("drupalMedia");if(!e)return;const{previewURL:t,themeError:i}=e;this.previewURL=t,this.labelError=this.editor.t("Preview failed"),this.themeError=i||`\n      <p>${this.editor.t("An error occurred while trying to preview the media. Please save your work and reload this page.")}<p>\n    `,this._defineSchema(),this._defineConverters(),this.editor.commands.add("insertDrupalMedia",new n(this.editor))}async _fetchPreview(e,t){const i=await fetch(`${e}?${new URLSearchParams(t)}`,{headers:{"X-Drupal-MediaPreview-CSRF-Token":this.editor.config.get("drupalMedia").previewCsrfToken}});if(i.ok){return{label:i.headers.get("drupal-media-label"),preview:await i.text()}}return{label:this.labelError,preview:this.themeError}}_defineSchema(){this.editor.model.schema.register("drupalMedia",{allowWhere:"$block",isObject:!0,isContent:!0,allowAttributes:Object.keys(this.attrs)})}_defineConverters(){const e=this.editor.conversion;e.for("upcast").elementToElement({view:{name:"drupal-media"},model:"drupalMedia"}),e.for("dataDowncast").elementToElement({model:"drupalMedia",view:{name:"drupal-media"}}),e.for("editingDowncast").elementToElement({model:"drupalMedia",view:(e,{writer:i})=>{const r=i.createContainerElement("div",{class:"drupal-media"}),n=i.createRawElement("div",{"data-drupal-media-preview":"loading"},(t=>{this.previewURL?this._fetchPreview(this.previewURL,{text:this._renderElement(e),uuid:e.getAttribute("drupalMediaEntityUuid")}).then((({label:e,preview:i})=>{t.innerHTML=i,t.setAttribute("aria-label",e),t.setAttribute("data-drupal-media-preview","ready")})):(t.innerHTML=this.themeError,t.setAttribute("aria-label","drupal-media"),t.setAttribute("data-drupal-media-preview","unavailable"))}));return i.insert(i.createPositionAt(r,0),n),i.setCustomProperty("drupalMedia",!0,r),(0,t.toWidget)(r,i,{label:"media widget"})}}),Object.keys(this.attrs).forEach((t=>{e.attributeToAttribute({model:{key:t,name:"drupalMedia"},view:{name:"drupal-media",key:this.attrs[t]}})}))}_renderElement(e){const t=e.getAttributes();let i="<drupal-media";return Array.from(t).forEach((e=>{this.attrs[e[0]]&&"drupalMediaCaption"!==e[0]&&(i+=` ${this.attrs[e[0]]}="${e[1]}"`)})),i+="></drupal-media>",i}static get pluginName(){return"DrupalMediaEditing"}}var s=i("ckeditor5/src/ui.js");class o extends e.Plugin{init(){const e=this.editor,t=this.editor.config.get("drupalMedia");if(!t)return;const{libraryURL:i,openDialog:r,dialogSettings:n={}}=t;i&&"function"==typeof r&&e.ui.componentFactory.add("drupalMedia",(t=>{const a=e.commands.get("insertDrupalMedia"),o=new s.ButtonView(t);return o.set({label:e.t("Insert Drupal Media"),icon:'<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M19.1873 4.86414L10.2509 6.86414V7.02335H10.2499V15.5091C9.70972 15.1961 9.01793 15.1048 8.34069 15.3136C7.12086 15.6896 6.41013 16.8967 6.75322 18.0096C7.09631 19.1226 8.3633 19.72 9.58313 19.344C10.6666 19.01 11.3484 18.0203 11.2469 17.0234H11.2499V9.80173L18.1803 8.25067V14.3868C17.6401 14.0739 16.9483 13.9825 16.2711 14.1913C15.0513 14.5674 14.3406 15.7744 14.6836 16.8875C15.0267 18.0004 16.2937 18.5978 17.5136 18.2218C18.597 17.8877 19.2788 16.8982 19.1773 15.9011H19.1803V8.02687L19.1873 8.0253V4.86414Z" fill="black"/><path fill-rule="evenodd" clip-rule="evenodd" d="M13.5039 0.743652H0.386932V12.1603H13.5039V0.743652ZM12.3379 1.75842H1.55289V11.1454H1.65715L4.00622 8.86353L6.06254 10.861L9.24985 5.91309L11.3812 9.22179L11.7761 8.6676L12.3379 9.45621V1.75842ZM6.22048 4.50869C6.22048 5.58193 5.35045 6.45196 4.27722 6.45196C3.20398 6.45196 2.33395 5.58193 2.33395 4.50869C2.33395 3.43546 3.20398 2.56543 4.27722 2.56543C5.35045 2.56543 6.22048 3.43546 6.22048 4.50869Z" fill="black"/></svg>\n',tooltip:!0}),o.bind("isOn","isEnabled").to(a,"value","isEnabled"),this.listenTo(o,"execute",(()=>{r(i,(({attributes:t})=>{e.execute("insertDrupalMedia",t)}),n)})),o}))}}function l(e){return!!e&&e.is("element","drupalMedia")}function d(e){const i=e.getSelectedElement();return i&&function(e){return(0,t.isWidget)(e)&&!!e.getCustomProperty("drupalMedia")}(i)?i:null}class u extends e.Plugin{static get requires(){return[t.WidgetToolbarRepository]}static get pluginName(){return"DrupalMediaToolbar"}afterInit(){const e=this.editor,{t:i}=e;e.plugins.get(t.WidgetToolbarRepository).register("drupalMedia",{ariaLabel:i("Drupal Media toolbar"),items:e.config.get("drupalMedia.toolbar")||[],getRelatedElement:e=>d(e)})}}class c extends e.Command{refresh(){const e=this.editor.model.document.selection.getSelectedElement();this.isEnabled=!1,l(e)&&this._isMediaImage(e).then((e=>{this.isEnabled=e})),l(e)&&e.hasAttribute("drupalMediaAlt")?this.value=e.getAttribute("drupalMediaAlt"):this.value=!1}execute(e){const{model:t}=this.editor,i=t.document.selection.getSelectedElement();e.newValue=e.newValue.trim(),t.change((t=>{e.newValue.length>0?t.setAttribute("drupalMediaAlt",e.newValue,i):t.removeAttribute("drupalMediaAlt",i)}))}async _isMediaImage(e){const t=this.editor.config.get("drupalMedia");if(!t)return null;const{isMediaUrl:i}=t,r=new URLSearchParams({uuid:e.getAttribute("drupalMediaEntityUuid")}),n=await fetch(`${i}&${r}`);return n.ok?JSON.parse(await n.text()):null}}class m extends e.Plugin{static get pluginName(){return"MediaImageTextAlternativeEditing"}init(){this.editor.commands.add("mediaImageTextAlternative",new c(this.editor))}}function h(e){const t=e.editing.view,i=s.BalloonPanelView.defaultPositions;return{target:t.domConverter.viewToDom(t.document.selection.getSelectedElement()),positions:[i.northArrowSouth,i.northArrowSouthWest,i.northArrowSouthEast,i.southArrowNorth,i.southArrowNorthWest,i.southArrowNorthEast]}}var p=i("ckeditor5/src/utils.js");class f extends s.View{constructor(t){super(t);const i=this.locale.t;this.focusTracker=new p.FocusTracker,this.keystrokes=new p.KeystrokeHandler,this.labeledInput=this._createLabeledInputView(),this.saveButtonView=this._createButton(i("Save"),e.icons.check,"ck-button-save"),this.saveButtonView.type="submit",this.cancelButtonView=this._createButton(i("Cancel"),e.icons.cancel,"ck-button-cancel","cancel"),this._focusables=new s.ViewCollection,this._focusCycler=new s.FocusCycler({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:"shift + tab",focusNext:"tab"}}),this.setTemplate({tag:"form",attributes:{class:["ck","ck-text-alternative-form","ck-responsive-form"],tabindex:"-1"},children:[this.labeledInput,this.saveButtonView,this.cancelButtonView]}),(0,s.injectCssTransitionDisabler)(this)}render(){super.render(),this.keystrokes.listenTo(this.element),(0,s.submitHandler)({view:this}),[this.labeledInput,this.saveButtonView,this.cancelButtonView].forEach((e=>{this._focusables.add(e),this.focusTracker.add(e.element)}))}_createButton(e,t,i,r){const n=new s.ButtonView(this.locale);return n.set({label:e,icon:t,tooltip:!0}),n.extendTemplate({attributes:{class:i}}),r&&n.delegate("execute").to(this,r),n}_createLabeledInputView(){const e=this.locale.t,t=new s.LabeledFieldView(this.locale,s.createLabeledInputText);return t.label=e("Override text alternative"),t}}class g extends e.Plugin{static get requires(){return[s.ContextualBalloon]}static get pluginName(){return"MediaImageTextAlternativeUi"}init(){this._createButton(),this._createForm()}destroy(){super.destroy(),this._form.destroy()}_createButton(){const t=this.editor,i=t.t;t.ui.componentFactory.add("mediaImageTextAlternative",(r=>{const n=t.commands.get("mediaImageTextAlternative"),a=new s.ButtonView(r);return a.set({label:i("Override media image text alternative"),icon:e.icons.lowVision,tooltip:!0}),a.bind("isVisible").to(n,"isEnabled"),this.listenTo(a,"execute",(()=>{this._showForm()})),a}))}_createForm(){const e=this.editor,t=e.editing.view.document;this._balloon=this.editor.plugins.get("ContextualBalloon"),this._form=new f(e.locale),this._form.render(),this.listenTo(this._form,"submit",(()=>{e.execute("mediaImageTextAlternative",{newValue:this._form.labeledInput.fieldView.element.value}),this._hideForm(!0)})),this.listenTo(this._form,"cancel",(()=>{this._hideForm(!0)})),this._form.keystrokes.set("Esc",((e,t)=>{this._hideForm(!0),t()})),this.listenTo(e.ui,"update",(()=>{d(t.selection)?this._isVisible&&function(e){const t=e.plugins.get("ContextualBalloon");if(d(e.editing.view.document.selection)){const i=h(e);t.updatePosition(i)}}(e):this._hideForm(!0)})),(0,s.clickOutsideHandler)({emitter:this._form,activator:()=>this._isVisible,contextElements:[this._balloon.view.element],callback:()=>this._hideForm()})}_showForm(){if(this._isVisible)return;const e=this.editor,t=e.commands.get("mediaImageTextAlternative"),i=this._form.labeledInput;this._form.disableCssTransitions(),this._isInBalloon||this._balloon.add({view:this._form,position:h(e)}),i.fieldView.element.value=t.value||"",i.fieldView.value=i.fieldView.element.value,this._form.labeledInput.fieldView.select(),this._form.enableCssTransitions()}_hideForm(e){this._isInBalloon&&(this._form.focusTracker.isFocused&&this._form.saveButtonView.focus(),this._balloon.remove(this._form),e&&this.editor.editing.view.focus())}get _isVisible(){return this._balloon.visibleView===this._form}get _isInBalloon(){return this._balloon.hasView(this._form)}}class b extends e.Plugin{static get requires(){return[m,g]}static get pluginName(){return"MediaImageTextAlternative"}}function w(e,t,i){if(t.attributes)for(const[r,n]of Object.entries(t.attributes))e.setAttribute(r,n,i);t.styles&&e.setStyle(t.styles,i),t.classes&&e.addClass(t.classes,i)}function v(e){return t=>{t.on("element:drupal-media",((t,i,r)=>{const n=i.viewItem.parent;n.is("element","a")&&function(t,n){const a=e._consumeAllowedAttributes(t,r);a&&r.writer.setAttribute(n,a,i.modelRange)}(n,"htmlLinkAttributes")}),{priority:"low"})}}class M extends e.Plugin{init(){const{editor:e}=this;if(!e.plugins.has("GeneralHtmlSupport"))return;const{schema:t}=e.model,{conversion:i}=e,r=e.plugins.get("DataFilter");t.extend("drupalMedia",{allowAttributes:["htmlLinkAttributes"]}),i.for("upcast").add(v(r)),i.for("editingDowncast").add((e=>e.on("attribute:linkHref:drupalMedia",((e,t,i)=>{if(!i.consumable.consume(t.item,"attribute:htmlLinkAttributes:drupalMedia"))return;const r=i.mapper.toViewElement(t.item),n=function(e,t,i){const r=e.createRangeOn(t);for(const{item:e}of r.getWalker())if(e.is("element",i))return e}(i.writer,r,"a");w(i.writer,t.item.getAttribute("htmlLinkAttributes"),n)}),{priority:"low"}))),i.for("dataDowncast").add((e=>e.on("attribute:linkHref:drupalMedia",((e,t,i)=>{if(!i.consumable.consume(t.item,"attribute:htmlLinkAttributes:drupalMedia"))return;const r=i.mapper.toViewElement(t.item).parent;w(i.writer,t.item.getAttribute("htmlLinkAttributes"),r)}),{priority:"low"})))}static get pluginName(){return"DrupalMediaGeneralHtmlSupport"}}class k extends e.Plugin{static get requires(){return[a,M,o,u,b]}}function _(){return e=>{e.on("element:a",((e,t,i)=>{const r=t.viewItem,n=(a=r,Array.from(a.getChildren()).find((e=>"drupal-media"===e.name)));var a;if(!n)return;if(!i.consumable.consume(r,{attributes:["href"]}))return;const s=r.getAttribute("href");if(!s)return;const o=i.convertItem(n,t.modelCursor);t.modelRange=o.modelRange,t.modelCursor=o.modelCursor;const l=t.modelCursor.nodeBefore;l&&l.is("element","drupalMedia")&&i.writer.setAttribute("linkHref",s,l)}),{priority:"high"})}}class A extends e.Plugin{static get requires(){return["LinkEditing","DrupalMediaEditing"]}static get pluginName(){return"DrupalLinkMediaEditing"}init(){const{editor:e}=this;e.model.schema.extend("drupalMedia",{allowAttributes:["linkHref"]}),e.conversion.for("upcast").add(_()),e.conversion.for("editingDowncast").add((e=>{e.on("attribute:linkHref:drupalMedia",((e,t,i)=>{const{writer:r}=i;if(!i.consumable.consume(t.item,e.name))return;const n=i.mapper.toViewElement(t.item),a=Array.from(n.getChildren()).find((e=>"a"===e.name));if(a)t.attributeNewValue?r.setAttribute("href",t.attributeNewValue,a):(r.move(r.createRangeIn(a),r.createPositionAt(n,0)),r.remove(a));else{const e=Array.from(n.getChildren()).find((e=>e.getAttribute("data-drupal-media-preview"))),i=r.createContainerElement("a",{href:t.attributeNewValue});r.insert(r.createPositionAt(n,0),i),r.move(r.createRangeOn(e),r.createPositionAt(i,0))}}),{priority:"high"})})),e.conversion.for("dataDowncast").add((e=>{e.on("attribute:linkHref:drupalMedia",((e,t,i)=>{const{writer:r}=i;if(!i.consumable.consume(t.item,e.name))return;const n=i.mapper.toViewElement(t.item),a=r.createContainerElement("a",{href:t.attributeNewValue});r.insert(r.createPositionBefore(n),a),r.move(r.createRangeOn(n),r.createPositionAt(a,0))}),{priority:"high"})}))}}class x extends e.Plugin{static get requires(){return["LinkEditing","LinkUI","DrupalMediaEditing"]}static get pluginName(){return"DrupalLinkMediaUi"}init(){const{editor:e}=this,t=e.editing.view.document;this.listenTo(t,"click",((t,i)=>{this._isSelectedLinkedMedia(e.model.document.selection)&&(i.preventDefault(),t.stop())}),{priority:"high"}),this._createToolbarLinkMediaButton()}_createToolbarLinkMediaButton(){const{editor:e}=this,{t:t}=e;e.ui.componentFactory.add("drupalLinkMedia",(i=>{const r=new s.ButtonView(i),n=e.plugins.get("LinkUI"),a=e.commands.get("link");return r.set({isEnabled:!0,label:t("Link media"),icon:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="m11.077 15 .991-1.416a.75.75 0 1 1 1.229.86l-1.148 1.64a.748.748 0 0 1-.217.206 5.251 5.251 0 0 1-8.503-5.955.741.741 0 0 1 .12-.274l1.147-1.639a.75.75 0 1 1 1.228.86L4.933 10.7l.006.003a3.75 3.75 0 0 0 6.132 4.294l.006.004zm5.494-5.335a.748.748 0 0 1-.12.274l-1.147 1.639a.75.75 0 1 1-1.228-.86l.86-1.23a3.75 3.75 0 0 0-6.144-4.301l-.86 1.229a.75.75 0 0 1-1.229-.86l1.148-1.64a.748.748 0 0 1 .217-.206 5.251 5.251 0 0 1 8.503 5.955zm-4.563-2.532a.75.75 0 0 1 .184 1.045l-3.155 4.505a.75.75 0 1 1-1.229-.86l3.155-4.506a.75.75 0 0 1 1.045-.184z"/></svg>\n',keystroke:"Ctrl+K",tooltip:!0,isToggleable:!0}),r.bind("isEnabled").to(a,"isEnabled"),r.bind("isOn").to(a,"value",(e=>!!e)),this.listenTo(r,"execute",(()=>{this._isSelectedLinkedMedia(e.model.document.selection)?n._addActionsView():n._showUI(!0)})),r}))}_isSelectedLinkedMedia(e){const t=e.getSelectedElement();return!!t&&t.is("element","drupalMedia")&&t.hasAttribute("linkHref")}}class E extends e.Plugin{static get requires(){return[A,x]}static get pluginName(){return"DrupalLinkMedia"}}var y={DrupalMedia:k,MediaImageTextAlternative:b,MediaImageTextAlternativeEditing:m,MediaImageTextAlternativeUi:g,DrupalLinkMedia:E}}(),r=r.default}()}));
\ No newline at end of file
diff --git a/core/modules/ckeditor5/js/ckeditor5.admin.es6.js b/core/modules/ckeditor5/js/ckeditor5.admin.es6.js
new file mode 100644
index 000000000000..f40f4b0e96de
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5.admin.es6.js
@@ -0,0 +1,1025 @@
+/**
+ * @file
+ * Provides admin UI for the CKEditor 5.
+ */
+
+((Drupal, drupalSettings, $, JSON, once, Sortable) => {
+  const toolbarHelp = [
+    {
+      message: Drupal.t(
+        "The toolbar buttons that don't fit the user's browser window width will be grouped in a dropdown. If multiple toolbar rows are preferred, those can be configured by adding an explicit wrapping breakpoint wherever you want to start a new row.",
+        null,
+        {
+          context:
+            'CKEditor 5 toolbar help text, default, no explicit wrapping breakpoint',
+        },
+      ),
+      button: 'wrapping',
+      condition: false,
+    },
+    {
+      message: Drupal.t(
+        'You have configured a multi-row toolbar by using an explicit wrapping breakpoint. This may not work well in narrow browser windows. To use automatic grouping, remove any of these divider buttons.',
+        null,
+        {
+          context:
+            'CKEditor 5 toolbar help text, with explicit wrapping breakpoint',
+        },
+      ),
+      button: 'wrapping',
+      condition: true,
+    },
+  ];
+
+  /**
+   * Allows attaching listeners to a value.
+   *
+   * @type {Observable}
+   */
+  const Observable = class {
+    /**
+     * Creates new Observable with a value.
+     *
+     * @param {*} value
+     *   The value to be observed.
+     */
+    constructor(value) {
+      this._listeners = [];
+      this._value = value;
+    }
+
+    /**
+     * Notifies subscribers about new value.
+     */
+    notify() {
+      this._listeners.forEach((listener) => listener(this._value));
+    }
+
+    /**
+     * Subscribes to be notified for changes.
+     *
+     * @param {Function} listener
+     *   The function to be called when a new value is set.
+     */
+    subscribe(listener) {
+      this._listeners.push(listener);
+    }
+
+    /**
+     * The value of the observable.
+     *
+     * @return {*}
+     *   The current value.
+     */
+    get value() {
+      return this._value;
+    }
+
+    /**
+     * Sets the value of the observable and notifies subscribers.
+     *
+     * @param {*} val
+     *   The new value of the observable.
+     */
+    set value(val) {
+      if (val !== this._value) {
+        this._value = val;
+        this.notify();
+      }
+    }
+  };
+
+  /**
+   * Gets selected buttons.
+   *
+   * @param {Array} selected
+   *   The selected buttons retrieved from state.
+   * @param {Array} dividers
+   *   The available dividers.
+   * @param {Array} available
+   *   The available buttons.
+   * @return {Array}
+   *   An array containing selected buttons.
+   */
+  const getSelectedButtons = (selected, dividers, available) => {
+    return selected.map((id) => ({
+      ...[...dividers, ...available].find((button) => button.id === id),
+    }));
+  };
+
+  /**
+   * Updates selected buttons to the textarea.
+   *
+   * @param {Array} selection
+   *   The current selection.
+   * @param {Element} textarea
+   *   The textarea element.
+   */
+  const updateSelectedButtons = (selection, textarea) => {
+    const newValue = JSON.stringify(selection);
+
+    const priorValue = textarea.innerHTML;
+    textarea.value = newValue;
+    textarea.innerHTML = newValue;
+
+    // The textarea is programmatically updated, so no native JavaScript
+    // event is triggered. Event listeners need to be aware of this config
+    // update, so a custom event is dispatched immediately after the
+    // config update.
+    textarea.dispatchEvent(
+      new CustomEvent('change', {
+        detail: {
+          priorValue,
+        },
+      }),
+    );
+  };
+
+  /**
+   * Function to add button to selected buttons.
+   *
+   * @param {Observable} selection
+   *   The currently selected buttons.
+   * @param {Element} element
+   *   The element which is being added.
+   * @param {function} announceChange
+   *   Function to call to announce the change.
+   */
+  const addToSelectedButtons = (selection, element, announceChange) => {
+    const list = [...selection.value];
+    list.push(element.dataset.id);
+    selection.value = list;
+
+    if (announceChange) {
+      setTimeout(() => {
+        announceChange(element.dataset.label);
+      });
+    }
+  };
+
+  /**
+   * Function to remove button from selected buttons.
+   *
+   * @param {Observable} selection
+   *   The currently selected buttons.
+   * @param {Element} element
+   *   The element which is being removed.
+   * @param {function} announceChange
+   *   Function to call to announce the change.
+   */
+  const removeFromSelectedButtons = (selection, element, announceChange) => {
+    const list = [...selection.value];
+    const index = Array.from(element.parentElement.children).findIndex(
+      (child) => {
+        return child === element;
+      },
+    );
+    list.splice(index, 1);
+    selection.value = list;
+
+    if (announceChange) {
+      setTimeout(() => {
+        announceChange(element.dataset.label);
+      });
+    }
+  };
+
+  /**
+   * Moves element within active buttons.
+   *
+   * @param {Observable} selection
+   *   The currently selected buttons.
+   * @param {Element} element
+   *   The element being moved.
+   * @param {Number} dir
+   *   The direction which the element is being moved.
+   */
+  const moveWithinSelectedButtons = (selection, element, dir) => {
+    const list = [...selection.value];
+    const index = Array.from(element.parentElement.children).findIndex(
+      (child) => {
+        return child === element;
+      },
+    );
+    // If moving up, check it is not the first, else check it is not the last.
+    const condition = dir < 0 ? index > 0 : index < list.length - 1;
+    if (condition) {
+      list.splice(index + dir, 0, list.splice(index, 1)[0]);
+      selection.value = list;
+    }
+  };
+
+  /**
+   * Copies element to active buttons.
+   *
+   * @param {Observable} selection
+   *   The currently selected buttons.
+   * @param {Element} element
+   *   The element to be copied.
+   * @param {Function} announceChange
+   *   A function to call to announce the change.
+   */
+  const copyToActiveButtons = (selection, element, announceChange) => {
+    const list = [...selection.value];
+    list.push(element.dataset.id);
+    selection.value = list;
+
+    setTimeout(() => {
+      if (announceChange) {
+        announceChange(element.dataset.label);
+      }
+    });
+  };
+
+  /**
+   * Renders the CKEditor 5 button admin UI.
+   *
+   * @param {Element} root
+   *   The element where the admin UI should be rendered.
+   * @param {Observable} selectedButtons
+   *   An Observable object containing selected buttons.
+   * @param {Array} availableButtons
+   *   An array containing available buttons.
+   * @param {Array} dividerButtons
+   *   An array containing available divider buttons.
+   */
+  const render = (root, selectedButtons, availableButtons, dividerButtons) => {
+    const toolbarHelpText = toolbarHelp
+      .filter(
+        (helpItem) =>
+          selectedButtons.value.includes(helpItem.button) ===
+          helpItem.condition,
+      )
+      .map((helpItem) => helpItem.message);
+    root.innerHTML = Drupal.theme.ckeditor5Admin({
+      availableButtons: Drupal.theme.ckeditor5AvailableButtons({
+        buttons: availableButtons.filter(
+          (button) => !selectedButtons.value.includes(button.id),
+        ),
+      }),
+      dividerButtons: Drupal.theme.ckeditor5DividerButtons({
+        buttons: dividerButtons,
+      }),
+      activeToolbar: Drupal.theme.ckeditor5SelectedButtons({
+        buttons: getSelectedButtons(
+          selectedButtons.value,
+          dividerButtons,
+          availableButtons,
+        ),
+      }),
+      helpMessage: toolbarHelpText,
+    });
+
+    // Create sortable groups for available buttons, current toolbar items,
+    // and dividers.
+    new Sortable(
+      root.querySelector(
+        '[data-button-list="ckeditor5-toolbar-active-buttons"]',
+      ),
+      {
+        group: { name: 'toolbar', put: ['divider', 'available'] },
+        sort: true,
+        store: {
+          set: (sortable) => {
+            selectedButtons.value = sortable.toArray();
+          },
+        },
+      },
+    );
+    const toolbarAvailableButtons = new Sortable(
+      root.querySelector(
+        '[data-button-list="ckeditor5-toolbar-available-buttons"]',
+      ),
+      {
+        group: { name: 'available', put: ['toolbar'] },
+        sort: false,
+        onAdd: (event) => {
+          // If the moved item is a divider, it should not be added to
+          // the available buttons list.
+          if (
+            dividerButtons.find(
+              (dividerButton) => dividerButton.id === event.item.dataset.id,
+            )
+          ) {
+            const { newIndex } = event;
+            setTimeout(() => {
+              // Remove the divider button from the available buttons
+              // list. Draggable reassesses the lists during each drag
+              // event, so the DOM removal should not be disruptive.
+              document
+                .querySelectorAll('.ckeditor5-toolbar-available__buttons li')
+                [newIndex].remove();
+            });
+          }
+        },
+      },
+    );
+    new Sortable(
+      root.querySelector(
+        '[data-button-list="ckeditor5-toolbar-divider-buttons"]',
+      ),
+      {
+        group: { name: 'divider', put: false, pull: 'clone', sort: 'false' },
+      },
+    );
+
+    root
+      .querySelectorAll('[data-drupal-selector="ckeditor5-toolbar-button"]')
+      .forEach((element) => {
+        const expandButton = (event) => {
+          event.currentTarget
+            .querySelectorAll('.ckeditor5-toolbar-button')
+            .forEach((buttonElement) => {
+              buttonElement.setAttribute('data-expanded', true);
+            });
+        };
+        const retractButton = (event) => {
+          event.currentTarget
+            .querySelectorAll('.ckeditor5-toolbar-button')
+            .forEach((buttonElement) => {
+              buttonElement.setAttribute('data-expanded', false);
+            });
+        };
+        element.addEventListener('mouseenter', expandButton);
+        element.addEventListener('focus', expandButton);
+        element.addEventListener('mouseleave', retractButton);
+        element.addEventListener('blur', retractButton);
+
+        element.addEventListener('keyup', (event) => {
+          // Keys supported by the admin UI. Depending on the element that is
+          // triggering the event, the event could trigger changes in the state.
+          // Changes to the state trigger re-rendering of the admin UI, which
+          // means that for consistent navigation, each action modifying state
+          // needs to set focus back on the button that is being moved. The state
+          // change also triggers an AJAX request which re-renders parts of the
+          // form, and moves the focus to the triggering form element, meaning
+          // that focus needs to be set back on the button again.
+          const supportedKeys = [
+            'ArrowLeft',
+            'ArrowRight',
+            'ArrowUp',
+            'ArrowDown',
+          ];
+          const dir = document.documentElement.dir;
+          if (supportedKeys.includes(event.key)) {
+            if (event.currentTarget.dataset.divider.toLowerCase() === 'true') {
+              switch (event.key) {
+                case 'ArrowDown': {
+                  const announceChange = (name) => {
+                    Drupal.announce(
+                      Drupal.t(
+                        'Button @name has been copied to the active toolbar.',
+                        { '@name': name },
+                      ),
+                    );
+                  };
+                  copyToActiveButtons(
+                    selectedButtons,
+                    event.currentTarget,
+                    announceChange,
+                  );
+                  // Focus the last button since new button is always added to the
+                  // end of the list.
+                  root
+                    .querySelector(
+                      '[data-button-list="ckeditor5-toolbar-active-buttons"] li:last-child',
+                    )
+                    .focus();
+                  break;
+                }
+              }
+            } else if (
+              selectedButtons.value.includes(event.currentTarget.dataset.id)
+            ) {
+              const index = Array.from(
+                element.parentElement.children,
+              ).findIndex((child) => {
+                return child === element;
+              });
+              switch (event.key) {
+                case 'ArrowLeft': {
+                  const leftOffset = dir === 'ltr' ? -1 : 1;
+                  moveWithinSelectedButtons(
+                    selectedButtons,
+                    event.currentTarget,
+                    leftOffset,
+                  );
+                  // Move focus to left or right from the current index depending
+                  // on current language direction. Use index instead of the
+                  // data-id because dividers don't have a unique ID.
+                  root
+                    .querySelectorAll(
+                      '[data-button-list="ckeditor5-toolbar-active-buttons"] li',
+                    )
+                    [index + leftOffset].focus();
+                  break;
+                }
+                case 'ArrowRight': {
+                  const rightOffset = dir === 'ltr' ? 1 : -1;
+                  moveWithinSelectedButtons(
+                    selectedButtons,
+                    event.currentTarget,
+                    rightOffset,
+                  );
+                  // Move focus to right or left from the current index depending
+                  // on current language direction. Use index instead of the
+                  // data-id because dividers don't have a unique ID.
+                  root
+                    .querySelectorAll(
+                      '[data-button-list="ckeditor5-toolbar-active-buttons"] li',
+                    )
+                    [index + rightOffset].focus();
+                  break;
+                }
+                case 'ArrowUp': {
+                  const announceChange = (name) => {
+                    Drupal.announce(
+                      Drupal.t(
+                        'Button @name has been removed from the active toolbar.',
+                        { '@name': name },
+                      ),
+                    );
+                  };
+                  removeFromSelectedButtons(
+                    selectedButtons,
+                    event.currentTarget,
+                    announceChange,
+                  );
+                  // Focus only if the button wasn't a divider because dividers
+                  // are simply removed from the active buttons instead of moving
+                  // to another list.
+                  if (
+                    !dividerButtons.find(
+                      (dividerButton) =>
+                        event.currentTarget.dataset.id === dividerButton.id,
+                    )
+                  ) {
+                    // Focus button based on the data-id attribute from the
+                    // available buttons list.
+                    root
+                      .querySelector(
+                        `[data-button-list="ckeditor5-toolbar-available-buttons"] [data-id="${event.currentTarget.dataset.id}"]`,
+                      )
+                      .focus();
+                  }
+                  break;
+                }
+              }
+            } else if (
+              toolbarAvailableButtons
+                .toArray()
+                .includes(event.currentTarget.dataset.id)
+            ) {
+              switch (event.key) {
+                case 'ArrowDown': {
+                  const announceChange = (name) => {
+                    Drupal.announce(
+                      Drupal.t(
+                        'Button @name has been moved to the active toolbar.',
+                        { '@name': name },
+                      ),
+                    );
+                  };
+                  addToSelectedButtons(
+                    selectedButtons,
+                    event.currentTarget,
+                    announceChange,
+                  );
+                  // Focus the last button since new button is always added to the
+                  // end of the list.
+                  root
+                    .querySelector(
+                      '[data-button-list="ckeditor5-toolbar-active-buttons"] li:last-child',
+                    )
+                    .focus();
+                  break;
+                }
+              }
+            }
+          }
+        });
+      });
+  };
+
+  /**
+   * Attach CKEditor 5 admin UI.
+   *
+   * @type {Drupal~behavior}
+   *
+   * @prop {Drupal~behaviorAttach} attach
+   *   Attaches admin app to edit the CKEditor 5 toolbar.
+   * @prop {Drupal~behaviorDetach} detach
+   *   Detaches admin app from the CKEditor 5 configuration form on 'unload'.
+   */
+  Drupal.behaviors.ckeditor5Admin = {
+    attach(context) {
+      once('ckeditor5-admin-toolbar', '#ckeditor5-toolbar-app').forEach(
+        (container) => {
+          const selectedTextarea = context.querySelector(
+            '#ckeditor5-toolbar-buttons-selected',
+          );
+          const available = Object.entries(
+            JSON.parse(
+              context.querySelector('#ckeditor5-toolbar-buttons-available')
+                .innerHTML,
+            ),
+          ).map(([name, attrs]) => ({ name, id: name, ...attrs }));
+          const dividers = [
+            {
+              id: 'divider',
+              name: '|',
+              label: Drupal.t('Divider'),
+            },
+            {
+              id: 'wrapping',
+              name: '-',
+              label: Drupal.t('Wrapping'),
+            },
+          ];
+
+          // Selected is used for managing the state. Sortable is handling updates
+          // to the state when the system is operated by mouse. There are
+          // functions making direct modifications to the state when system is
+          // operated by keyboard.
+          const selected = new Observable(
+            JSON.parse(selectedTextarea.innerHTML).map((name) => {
+              return [...dividers, ...available].find((button) => {
+                return button.name === name;
+              }).id;
+            }),
+          );
+
+          const mapSelection = (selection) => {
+            return selection.map((id) => {
+              return [...dividers, ...available].find((button) => {
+                return button.id === id;
+              }).name;
+            });
+          };
+          // Whenever the state is changed, update the textarea with the changes.
+          // This will also trigger re-render of the admin UI to reinitialize the
+          // Sortable state.
+          selected.subscribe((selection) => {
+            updateSelectedButtons(mapSelection(selection), selectedTextarea);
+            render(container, selected, available, dividers);
+          });
+
+          [
+            context.querySelector('#ckeditor5-toolbar-buttons-available'),
+            context.querySelector('[class*="editor-settings-toolbar-items"]'),
+          ]
+            .filter((el) => el)
+            .forEach((el) => {
+              el.classList.add('visually-hidden');
+            });
+
+          render(container, selected, available, dividers);
+        },
+      );
+      // Safari's focus outlines take into account absolute positioned elements.
+      // When a toolbar option is blurred, the portion of the focus outline
+      // surrounding the absolutely positioned tooltip does not go away. To
+      // prevent keyboard navigation users from seeing outline artifacts for
+      // every option they've tabbed through, we provide a keydown listener
+      // that can catch blur-causing events before the blur happens. If the
+      // tooltip is hidden before the blur event, the outline will disappear
+      // correctly.
+      once(
+        'safari-focus-fix',
+        document.querySelectorAll('.ckeditor5-toolbar-item'),
+      ).forEach((item) => {
+        item.addEventListener('keydown', (e) => {
+          const keyCodeDirections = {
+            9: 'tab',
+            37: 'left',
+            38: 'up',
+            39: 'right',
+            40: 'down',
+          };
+          if (
+            ['tab', 'left', 'up', 'right', 'down'].includes(
+              keyCodeDirections[e.keyCode],
+            )
+          ) {
+            let hideTip = false;
+            const isActive = e.target.closest(
+              '[data-button-list="ckeditor5-toolbar-active__buttons"]',
+            );
+            if (isActive) {
+              if (
+                ['tab', 'left', 'up', 'right'].includes(
+                  keyCodeDirections[e.keyCode],
+                )
+              ) {
+                hideTip = true;
+              }
+            } else if (['tab', 'down'].includes(keyCodeDirections[e.keyCode])) {
+              hideTip = true;
+            }
+            if (hideTip) {
+              e.target
+                .querySelector('[data-expanded]')
+                .setAttribute('data-expanded', 'false');
+            }
+          }
+        });
+      });
+
+      /**
+       * Updates the UI state info in the form's 'data-drupal-ui-state' attribute.
+       *
+       * @param {object} states
+       *   An object with one or more items with the structure { ui-property: stored-value }
+       */
+      const updateUiStateStorage = (states) => {
+        const form = document.querySelector(
+          '#filter-format-edit-form, #filter-format-add-form',
+        );
+
+        // Get the current stored UI state as an object.
+        const currentStates = form.hasAttribute('data-drupal-ui-state')
+          ? JSON.parse(form.getAttribute('data-drupal-ui-state'))
+          : {};
+
+        // Store the updated UI state object as an object literal in the parent
+        // form's 'data-drupal-ui-state' attribute.
+        form.setAttribute(
+          'data-drupal-ui-state',
+          JSON.stringify({ ...currentStates, ...states }),
+        );
+      };
+
+      /**
+       * Gets a stored UI state property.
+       *
+       * @param {string} property
+       *   The UI state property to retrieve the value of.
+       *
+       * @return {string|null}
+       *   When present, the stored value of the property.
+       */
+      const getUiStateStorage = (property) => {
+        const form = document.querySelector(
+          '#filter-format-edit-form, #filter-format-add-form',
+        );
+
+        if (form === null) {
+          return;
+        }
+
+        // Parse the object literal stored in the form's 'data-drupal-ui-state'
+        // attribute and return the value of the object property that matches
+        // the 'property' argument.
+        return form.hasAttribute('data-drupal-ui-state')
+          ? JSON.parse(form.getAttribute('data-drupal-ui-state'))[property]
+          : null;
+      };
+
+      // Add an attribute to the parent form for storing UI states, so this
+      // information can be retrieved after AJAX rebuilds.
+      once(
+        'ui-state-storage',
+        document.querySelector(
+          '#filter-format-edit-form, #filter-format-add-form',
+        ),
+      ).forEach((form) => {
+        form.setAttribute('data-drupal-ui-state', JSON.stringify({}));
+      });
+
+      /**
+       * Maintains the active vertical tab after AJAX rebuild.
+       *
+       * @param {Element} verticalTabs
+       *   The vertical tabs element.
+       */
+      const maintainActiveVerticalTab = (verticalTabs) => {
+        const id = verticalTabs.id;
+
+        // If the UI state storage has an active tab, click that tab.
+        const activeTab = getUiStateStorage(`${id}-active-tab`);
+        if (activeTab) {
+          setTimeout(() => {
+            document.querySelector(activeTab).click();
+          });
+        }
+
+        // Add click listener that adds any tab click into UI storage.
+        verticalTabs.querySelectorAll('.vertical-tabs__menu').forEach((tab) => {
+          tab.addEventListener('click', (e) => {
+            const state = {};
+            const href = e.target
+              .closest('[href]')
+              .getAttribute('href')
+              .split('--')[0];
+            state[`${id}-active-tab`] = `#${id} [href^='${href}']`;
+            updateUiStateStorage(state);
+          });
+        });
+      };
+
+      once(
+        'plugin-settings',
+        document.querySelector('#plugin-settings-wrapper'),
+      ).forEach(maintainActiveVerticalTab);
+      once(
+        'filter-settings',
+        document.querySelector('#filter-settings-wrapper'),
+      ).forEach(maintainActiveVerticalTab);
+
+      // Add listeners to maintain focus after AJAX rebuilds.
+      const selectedButtons = document.querySelector(
+        '#ckeditor5-toolbar-buttons-selected',
+      );
+
+      once('textarea-listener', selectedButtons).forEach((textarea) => {
+        textarea.addEventListener('change', (e) => {
+          const buttonName = document.activeElement.getAttribute('data-id');
+          if (!buttonName) {
+            // If there is no 'data-id' attribute, then the config
+            // is happening via mouse.
+            return;
+          }
+          let focusSelector = '';
+
+          // Divider elements are treated differently as there can be multiple
+          // elements with the same button name.
+          if (['divider', 'wrapping'].includes(buttonName)) {
+            const oldConfig = JSON.parse(e.detail.priorValue);
+            const newConfig = JSON.parse(e.target.innerHTML);
+
+            // If the divider is being removed from active buttons, it does not
+            // 'move' anywhere. Move focus to the prior active button
+            if (oldConfig.length > newConfig.length) {
+              for (let item = 0; item < newConfig.length; item++) {
+                if (newConfig[item] !== oldConfig[item]) {
+                  focusSelector = `[data-button-list="ckeditor5-toolbar-active-buttons"] li:nth-child(${Math.min(
+                    item - 1,
+                    0,
+                  )})`;
+                  break;
+                }
+              }
+            } else if (oldConfig.length < newConfig.length) {
+              // If the divider is being added, it will be the last active item.
+              focusSelector =
+                '[data-button-list="ckeditor5-toolbar-active-buttons"] li:last-child';
+            } else {
+              // When moving a dividers position within the active buttons.
+              document
+                .querySelectorAll(
+                  `[data-button-list="ckeditor5-toolbar-active-buttons"] [data-id='${buttonName}']`,
+                )
+                .forEach((divider, index) => {
+                  if (divider === document.activeElement) {
+                    focusSelector = `${buttonName}|${index}`;
+                  }
+                });
+            }
+          } else {
+            focusSelector = `[data-id='${buttonName}']`;
+          }
+
+          // Store the focus selector in an attribute on the form itself, which
+          // will not be overwritten after the AJAX rebuild. This makes it
+          // the value available to the textarea focus listener that is
+          // triggered after the AJAX rebuild.
+          updateUiStateStorage({ focusSelector });
+        });
+
+        textarea.addEventListener('focus', () => {
+          // The selector that should receive focus is stored in the parent
+          // form element. Move focus to that selector.
+          const focusSelector = getUiStateStorage('focusSelector');
+
+          if (focusSelector) {
+            // If focusSelector includes '|', it is a separator that is being
+            // moved within the active button list. Different logic us used to
+            // determine focus since there can be multiple separators of the
+            // same type within the active buttons list.
+            if (focusSelector.includes('|')) {
+              const [buttonName, count] = focusSelector.split('|');
+              document
+                .querySelectorAll(
+                  `[data-button-list="ckeditor5-toolbar-active-buttons"] [data-id='${buttonName}']`,
+                )
+                .forEach((item, index) => {
+                  if (index === parseInt(count, 10)) {
+                    item.focus();
+                  }
+                });
+            } else {
+              const toFocus = document.querySelector(focusSelector);
+              if (toFocus) {
+                toFocus.focus();
+              }
+            }
+          }
+        });
+      });
+    },
+  };
+
+  /**
+   * Theme function for CKEditor 5 selected buttons.
+   *
+   * @param {Object} options
+   *   An object containing options.
+   * @param {Array} options.buttons
+   *   An array of selected buttons.
+   * @return {string}
+   *   The selected buttons markup.
+   *
+   * @internal
+   */
+  Drupal.theme.ckeditor5SelectedButtons = ({ buttons }) => {
+    return `
+      <ul class="ckeditor5-toolbar-tray ckeditor5-toolbar-active__buttons" data-button-list="ckeditor5-toolbar-active-buttons" role="listbox" aria-orientation="horizontal" aria-labelledby="ckeditor5-toolbar-active-buttons-label">
+        ${buttons
+          .map((button) =>
+            Drupal.theme.ckeditor5Button({ button, listType: 'active' }),
+          )
+          .join('')}
+      </ul>
+    `;
+  };
+
+  /**
+   * Theme function for CKEditor 5 divider buttons.
+   *
+   * @param {Object} options
+   *   An object containing options.
+   * @param {Array} options.buttons
+   *   An array of divider buttons.
+   * @return {string}
+   *   The CKEditor 5 divider buttons markup.
+   *
+   * @internal
+   */
+  Drupal.theme.ckeditor5DividerButtons = ({ buttons }) => {
+    return `
+      <ul class="ckeditor5-toolbar-tray ckeditor5-toolbar-divider__buttons" data-button-list="ckeditor5-toolbar-divider-buttons" role="listbox" aria-orientation="horizontal" aria-labelledby="ckeditor5-toolbar-divider-buttons-label">
+        ${buttons
+          .map((button) =>
+            Drupal.theme.ckeditor5Button({ button, listType: 'divider' }),
+          )
+          .join('')}
+      </ul>
+    `;
+  };
+
+  /**
+   * Theme function for CKEditor 5 available buttons.
+   *
+   * @param {Object} options
+   *   An object containing options.
+   * @param {Array} options.buttons
+   *   An array of available buttons.
+   * @return {string}
+   *   The CKEditor 5 available buttons markup.
+   *
+   * @internal
+   */
+  Drupal.theme.ckeditor5AvailableButtons = ({ buttons }) => {
+    return `
+      <ul class="ckeditor5-toolbar-tray ckeditor5-toolbar-available__buttons" data-button-list="ckeditor5-toolbar-available-buttons" role="listbox" aria-orientation="horizontal" aria-labelledby="ckeditor5-toolbar-available-buttons-label">
+        ${buttons
+          .map((button) =>
+            Drupal.theme.ckeditor5Button({ button, listType: 'available' }),
+          )
+          .join('')}
+      </ul>
+    `;
+  };
+
+  /**
+   * Theme function for CKEditor 5 buttons.
+   *
+   * @param {Object} options
+   *  An object containing options.
+   * @param {Object} options.button
+   *   An object containing button options.
+   * @param {String} options.button.label
+   *   Button label.
+   * @param {String} options.button.id
+   *   Button id.
+   * @param {String} options.listType
+   *   The type of the list.
+   * @return {string}
+   *   The CKEditor 5 buttons markup.
+   *
+   * @internal
+   */
+  Drupal.theme.ckeditor5Button = ({ button: { label, id }, listType }) => {
+    const visuallyHiddenLabel = Drupal.t(`@listType button @label`, {
+      '@listType': listType !== 'divider' ? listType : 'available',
+      '@label': label,
+    });
+    return `
+      <li class="ckeditor5-toolbar-item ckeditor5-toolbar-item-${id}" role="option" tabindex="0" data-drupal-selector="ckeditor5-toolbar-button" data-id="${id}" data-label="${label}" data-divider="${
+      listType === 'divider'
+    }">
+        <span class="ckeditor5-toolbar-button ckeditor5-toolbar-button-${id}">
+          <span class="visually-hidden">${visuallyHiddenLabel})}</span>
+        </span>
+        <span class="ckeditor5-toolbar-tooltip" aria-hidden="true">${label}</span>
+      </li>
+    `;
+  };
+
+  /**
+   * Theme function for CKEditor 5 admin UI.
+   *
+   * @param {Object} options
+   *   An object containing options.
+   * @param {String} options.availableButtons
+   *   Markup for available buttons.
+   * @param {String} options.dividerButtons
+   *   Markup for divider buttons.
+   * @param {String} options.activeToolbar
+   *   Markup for active toolbar.
+   * @param {Array} options.helpMessage
+   *   An array of help messages.
+   * @return {string}
+   *   The CKEditor 5 admin UI markup.
+   *
+   * @internal
+   */
+  Drupal.theme.ckeditor5Admin = ({
+    availableButtons,
+    dividerButtons,
+    activeToolbar,
+    helpMessage,
+  }) => {
+    return `
+    <div aria-live="polite" data-drupal-selector="ckeditor5-admin-help-message">
+      <p>${helpMessage.join('</p><p>')}</p>
+    </div>
+    <div class="ckeditor5-toolbar-disabled">
+      <div class="ckeditor5-toolbar-available">
+        <label id="ckeditor5-toolbar-available-buttons-label">${Drupal.t(
+          'Available buttons',
+        )}</label>
+        ${availableButtons}
+      </div>
+      <div class="ckeditor5-toolbar-divider">
+        <label id="ckeditor5-toolbar-divider-buttons-label">${Drupal.t(
+          'Button divider',
+        )}</label>
+        ${dividerButtons}
+      </div>
+    </div>
+    <div class="ckeditor5-toolbar-active">
+      <label id="ckeditor5-toolbar-active-buttons-label">${Drupal.t(
+        'Active toolbar',
+      )}</label>
+      ${activeToolbar}
+    </div>
+    `;
+  };
+
+  // Make a copy of the default filterStatus attach behaviors so it can be
+  // called within this module's override of it.
+  const originalFilterStatusAttach = Drupal.behaviors.filterStatus.attach;
+
+  // Overrides the default filterStatus to provided functionality needs
+  // specific to CKEditor 5.
+  Drupal.behaviors.filterStatus.attach = (context, settings) => {
+    const filterStatusCheckboxes = document.querySelectorAll(
+      '#filters-status-wrapper input.form-checkbox',
+    );
+
+    // CKEditor 5 has uses cases that require updating the filter settings via
+    // AJAX. When this happens, the checkboxes that enable filters must be
+    // reprocessed by the filterStatus behavior. For this to occur:
+    // 1. 'filter-status' must be removed from the element's once registry so
+    //    the process can run again and take into account any filter settings
+    //    elements that have been added or removed from the DOM.
+    //    @see core/assets/vendor/once/once.js
+    once.remove('filter-status', filterStatusCheckboxes);
+
+    // 2. Any listeners to the 'click.filterUpdate' event should be removed so
+    //    they do not conflict with event listeners that are added as part of
+    //    the AJAX refresh.
+    $(filterStatusCheckboxes).off('click.filterUpdate');
+
+    // Call the original behavior.
+    originalFilterStatusAttach(context, settings);
+  };
+
+  // Activates otherwise-inactive tabs that have form elements with validation
+  // errors.
+  // @todo Remove when https://www.drupal.org/project/drupal/issues/2911932 lands.
+  Drupal.behaviors.tabErrorsVisible = {
+    attach(context) {
+      context.querySelectorAll('details .form-item .error').forEach((item) => {
+        const details = item.closest('details');
+        if (details.style.display === 'none') {
+          const tabSelect = document.querySelector(`[href='#${details.id}']`);
+          if (tabSelect) {
+            tabSelect.click();
+          }
+        }
+      });
+    },
+  };
+})(Drupal, drupalSettings, jQuery, JSON, once, Sortable);
diff --git a/core/modules/ckeditor5/js/ckeditor5.admin.js b/core/modules/ckeditor5/js/ckeditor5.admin.js
new file mode 100644
index 000000000000..1d031035f35e
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5.admin.js
@@ -0,0 +1,584 @@
+/**
+* DO NOT EDIT THIS FILE.
+* See the following change record for more information,
+* https://www.drupal.org/node/2815083
+* @preserve
+**/
+
+function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
+
+function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
+
+function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
+
+function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
+
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
+
+function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
+
+function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
+
+(function (Drupal, drupalSettings, $, JSON, once, Sortable) {
+  var toolbarHelp = [{
+    message: Drupal.t("The toolbar buttons that don't fit the user's browser window width will be grouped in a dropdown. If multiple toolbar rows are preferred, those can be configured by adding an explicit wrapping breakpoint wherever you want to start a new row.", null, {
+      context: 'CKEditor 5 toolbar help text, default, no explicit wrapping breakpoint'
+    }),
+    button: 'wrapping',
+    condition: false
+  }, {
+    message: Drupal.t('You have configured a multi-row toolbar by using an explicit wrapping breakpoint. This may not work well in narrow browser windows. To use automatic grouping, remove any of these divider buttons.', null, {
+      context: 'CKEditor 5 toolbar help text, with explicit wrapping breakpoint'
+    }),
+    button: 'wrapping',
+    condition: true
+  }];
+
+  var Observable = function () {
+    function Observable(value) {
+      _classCallCheck(this, Observable);
+
+      this._listeners = [];
+      this._value = value;
+    }
+
+    _createClass(Observable, [{
+      key: "notify",
+      value: function notify() {
+        var _this = this;
+
+        this._listeners.forEach(function (listener) {
+          return listener(_this._value);
+        });
+      }
+    }, {
+      key: "subscribe",
+      value: function subscribe(listener) {
+        this._listeners.push(listener);
+      }
+    }, {
+      key: "value",
+      get: function get() {
+        return this._value;
+      },
+      set: function set(val) {
+        if (val !== this._value) {
+          this._value = val;
+          this.notify();
+        }
+      }
+    }]);
+
+    return Observable;
+  }();
+
+  var getSelectedButtons = function getSelectedButtons(selected, dividers, available) {
+    return selected.map(function (id) {
+      return _objectSpread({}, [].concat(_toConsumableArray(dividers), _toConsumableArray(available)).find(function (button) {
+        return button.id === id;
+      }));
+    });
+  };
+
+  var updateSelectedButtons = function updateSelectedButtons(selection, textarea) {
+    var newValue = JSON.stringify(selection);
+    var priorValue = textarea.innerHTML;
+    textarea.value = newValue;
+    textarea.innerHTML = newValue;
+    textarea.dispatchEvent(new CustomEvent('change', {
+      detail: {
+        priorValue: priorValue
+      }
+    }));
+  };
+
+  var addToSelectedButtons = function addToSelectedButtons(selection, element, announceChange) {
+    var list = _toConsumableArray(selection.value);
+
+    list.push(element.dataset.id);
+    selection.value = list;
+
+    if (announceChange) {
+      setTimeout(function () {
+        announceChange(element.dataset.label);
+      });
+    }
+  };
+
+  var removeFromSelectedButtons = function removeFromSelectedButtons(selection, element, announceChange) {
+    var list = _toConsumableArray(selection.value);
+
+    var index = Array.from(element.parentElement.children).findIndex(function (child) {
+      return child === element;
+    });
+    list.splice(index, 1);
+    selection.value = list;
+
+    if (announceChange) {
+      setTimeout(function () {
+        announceChange(element.dataset.label);
+      });
+    }
+  };
+
+  var moveWithinSelectedButtons = function moveWithinSelectedButtons(selection, element, dir) {
+    var list = _toConsumableArray(selection.value);
+
+    var index = Array.from(element.parentElement.children).findIndex(function (child) {
+      return child === element;
+    });
+    var condition = dir < 0 ? index > 0 : index < list.length - 1;
+
+    if (condition) {
+      list.splice(index + dir, 0, list.splice(index, 1)[0]);
+      selection.value = list;
+    }
+  };
+
+  var copyToActiveButtons = function copyToActiveButtons(selection, element, announceChange) {
+    var list = _toConsumableArray(selection.value);
+
+    list.push(element.dataset.id);
+    selection.value = list;
+    setTimeout(function () {
+      if (announceChange) {
+        announceChange(element.dataset.label);
+      }
+    });
+  };
+
+  var render = function render(root, selectedButtons, availableButtons, dividerButtons) {
+    var toolbarHelpText = toolbarHelp.filter(function (helpItem) {
+      return selectedButtons.value.includes(helpItem.button) === helpItem.condition;
+    }).map(function (helpItem) {
+      return helpItem.message;
+    });
+    root.innerHTML = Drupal.theme.ckeditor5Admin({
+      availableButtons: Drupal.theme.ckeditor5AvailableButtons({
+        buttons: availableButtons.filter(function (button) {
+          return !selectedButtons.value.includes(button.id);
+        })
+      }),
+      dividerButtons: Drupal.theme.ckeditor5DividerButtons({
+        buttons: dividerButtons
+      }),
+      activeToolbar: Drupal.theme.ckeditor5SelectedButtons({
+        buttons: getSelectedButtons(selectedButtons.value, dividerButtons, availableButtons)
+      }),
+      helpMessage: toolbarHelpText
+    });
+    new Sortable(root.querySelector('[data-button-list="ckeditor5-toolbar-active-buttons"]'), {
+      group: {
+        name: 'toolbar',
+        put: ['divider', 'available']
+      },
+      sort: true,
+      store: {
+        set: function set(sortable) {
+          selectedButtons.value = sortable.toArray();
+        }
+      }
+    });
+    var toolbarAvailableButtons = new Sortable(root.querySelector('[data-button-list="ckeditor5-toolbar-available-buttons"]'), {
+      group: {
+        name: 'available',
+        put: ['toolbar']
+      },
+      sort: false,
+      onAdd: function onAdd(event) {
+        if (dividerButtons.find(function (dividerButton) {
+          return dividerButton.id === event.item.dataset.id;
+        })) {
+          var newIndex = event.newIndex;
+          setTimeout(function () {
+            document.querySelectorAll('.ckeditor5-toolbar-available__buttons li')[newIndex].remove();
+          });
+        }
+      }
+    });
+    new Sortable(root.querySelector('[data-button-list="ckeditor5-toolbar-divider-buttons"]'), {
+      group: {
+        name: 'divider',
+        put: false,
+        pull: 'clone',
+        sort: 'false'
+      }
+    });
+    root.querySelectorAll('[data-drupal-selector="ckeditor5-toolbar-button"]').forEach(function (element) {
+      var expandButton = function expandButton(event) {
+        event.currentTarget.querySelectorAll('.ckeditor5-toolbar-button').forEach(function (buttonElement) {
+          buttonElement.setAttribute('data-expanded', true);
+        });
+      };
+
+      var retractButton = function retractButton(event) {
+        event.currentTarget.querySelectorAll('.ckeditor5-toolbar-button').forEach(function (buttonElement) {
+          buttonElement.setAttribute('data-expanded', false);
+        });
+      };
+
+      element.addEventListener('mouseenter', expandButton);
+      element.addEventListener('focus', expandButton);
+      element.addEventListener('mouseleave', retractButton);
+      element.addEventListener('blur', retractButton);
+      element.addEventListener('keyup', function (event) {
+        var supportedKeys = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'];
+        var dir = document.documentElement.dir;
+
+        if (supportedKeys.includes(event.key)) {
+          if (event.currentTarget.dataset.divider.toLowerCase() === 'true') {
+            switch (event.key) {
+              case 'ArrowDown':
+                {
+                  var announceChange = function announceChange(name) {
+                    Drupal.announce(Drupal.t('Button @name has been copied to the active toolbar.', {
+                      '@name': name
+                    }));
+                  };
+
+                  copyToActiveButtons(selectedButtons, event.currentTarget, announceChange);
+                  root.querySelector('[data-button-list="ckeditor5-toolbar-active-buttons"] li:last-child').focus();
+                  break;
+                }
+            }
+          } else if (selectedButtons.value.includes(event.currentTarget.dataset.id)) {
+            var index = Array.from(element.parentElement.children).findIndex(function (child) {
+              return child === element;
+            });
+
+            switch (event.key) {
+              case 'ArrowLeft':
+                {
+                  var leftOffset = dir === 'ltr' ? -1 : 1;
+                  moveWithinSelectedButtons(selectedButtons, event.currentTarget, leftOffset);
+                  root.querySelectorAll('[data-button-list="ckeditor5-toolbar-active-buttons"] li')[index + leftOffset].focus();
+                  break;
+                }
+
+              case 'ArrowRight':
+                {
+                  var rightOffset = dir === 'ltr' ? 1 : -1;
+                  moveWithinSelectedButtons(selectedButtons, event.currentTarget, rightOffset);
+                  root.querySelectorAll('[data-button-list="ckeditor5-toolbar-active-buttons"] li')[index + rightOffset].focus();
+                  break;
+                }
+
+              case 'ArrowUp':
+                {
+                  var _announceChange = function _announceChange(name) {
+                    Drupal.announce(Drupal.t('Button @name has been removed from the active toolbar.', {
+                      '@name': name
+                    }));
+                  };
+
+                  removeFromSelectedButtons(selectedButtons, event.currentTarget, _announceChange);
+
+                  if (!dividerButtons.find(function (dividerButton) {
+                    return event.currentTarget.dataset.id === dividerButton.id;
+                  })) {
+                    root.querySelector("[data-button-list=\"ckeditor5-toolbar-available-buttons\"] [data-id=\"".concat(event.currentTarget.dataset.id, "\"]")).focus();
+                  }
+
+                  break;
+                }
+            }
+          } else if (toolbarAvailableButtons.toArray().includes(event.currentTarget.dataset.id)) {
+            switch (event.key) {
+              case 'ArrowDown':
+                {
+                  var _announceChange2 = function _announceChange2(name) {
+                    Drupal.announce(Drupal.t('Button @name has been moved to the active toolbar.', {
+                      '@name': name
+                    }));
+                  };
+
+                  addToSelectedButtons(selectedButtons, event.currentTarget, _announceChange2);
+                  root.querySelector('[data-button-list="ckeditor5-toolbar-active-buttons"] li:last-child').focus();
+                  break;
+                }
+            }
+          }
+        }
+      });
+    });
+  };
+
+  Drupal.behaviors.ckeditor5Admin = {
+    attach: function attach(context) {
+      once('ckeditor5-admin-toolbar', '#ckeditor5-toolbar-app').forEach(function (container) {
+        var selectedTextarea = context.querySelector('#ckeditor5-toolbar-buttons-selected');
+        var available = Object.entries(JSON.parse(context.querySelector('#ckeditor5-toolbar-buttons-available').innerHTML)).map(function (_ref) {
+          var _ref2 = _slicedToArray(_ref, 2),
+              name = _ref2[0],
+              attrs = _ref2[1];
+
+          return _objectSpread({
+            name: name,
+            id: name
+          }, attrs);
+        });
+        var dividers = [{
+          id: 'divider',
+          name: '|',
+          label: Drupal.t('Divider')
+        }, {
+          id: 'wrapping',
+          name: '-',
+          label: Drupal.t('Wrapping')
+        }];
+        var selected = new Observable(JSON.parse(selectedTextarea.innerHTML).map(function (name) {
+          return [].concat(dividers, _toConsumableArray(available)).find(function (button) {
+            return button.name === name;
+          }).id;
+        }));
+
+        var mapSelection = function mapSelection(selection) {
+          return selection.map(function (id) {
+            return [].concat(dividers, _toConsumableArray(available)).find(function (button) {
+              return button.id === id;
+            }).name;
+          });
+        };
+
+        selected.subscribe(function (selection) {
+          updateSelectedButtons(mapSelection(selection), selectedTextarea);
+          render(container, selected, available, dividers);
+        });
+        [context.querySelector('#ckeditor5-toolbar-buttons-available'), context.querySelector('[class*="editor-settings-toolbar-items"]')].filter(function (el) {
+          return el;
+        }).forEach(function (el) {
+          el.classList.add('visually-hidden');
+        });
+        render(container, selected, available, dividers);
+      });
+      once('safari-focus-fix', document.querySelectorAll('.ckeditor5-toolbar-item')).forEach(function (item) {
+        item.addEventListener('keydown', function (e) {
+          var keyCodeDirections = {
+            9: 'tab',
+            37: 'left',
+            38: 'up',
+            39: 'right',
+            40: 'down'
+          };
+
+          if (['tab', 'left', 'up', 'right', 'down'].includes(keyCodeDirections[e.keyCode])) {
+            var hideTip = false;
+            var isActive = e.target.closest('[data-button-list="ckeditor5-toolbar-active__buttons"]');
+
+            if (isActive) {
+              if (['tab', 'left', 'up', 'right'].includes(keyCodeDirections[e.keyCode])) {
+                hideTip = true;
+              }
+            } else if (['tab', 'down'].includes(keyCodeDirections[e.keyCode])) {
+              hideTip = true;
+            }
+
+            if (hideTip) {
+              e.target.querySelector('[data-expanded]').setAttribute('data-expanded', 'false');
+            }
+          }
+        });
+      });
+
+      var updateUiStateStorage = function updateUiStateStorage(states) {
+        var form = document.querySelector('#filter-format-edit-form, #filter-format-add-form');
+        var currentStates = form.hasAttribute('data-drupal-ui-state') ? JSON.parse(form.getAttribute('data-drupal-ui-state')) : {};
+        form.setAttribute('data-drupal-ui-state', JSON.stringify(_objectSpread(_objectSpread({}, currentStates), states)));
+      };
+
+      var getUiStateStorage = function getUiStateStorage(property) {
+        var form = document.querySelector('#filter-format-edit-form, #filter-format-add-form');
+
+        if (form === null) {
+          return;
+        }
+
+        return form.hasAttribute('data-drupal-ui-state') ? JSON.parse(form.getAttribute('data-drupal-ui-state'))[property] : null;
+      };
+
+      once('ui-state-storage', document.querySelector('#filter-format-edit-form, #filter-format-add-form')).forEach(function (form) {
+        form.setAttribute('data-drupal-ui-state', JSON.stringify({}));
+      });
+
+      var maintainActiveVerticalTab = function maintainActiveVerticalTab(verticalTabs) {
+        var id = verticalTabs.id;
+        var activeTab = getUiStateStorage("".concat(id, "-active-tab"));
+
+        if (activeTab) {
+          setTimeout(function () {
+            document.querySelector(activeTab).click();
+          });
+        }
+
+        verticalTabs.querySelectorAll('.vertical-tabs__menu').forEach(function (tab) {
+          tab.addEventListener('click', function (e) {
+            var state = {};
+            var href = e.target.closest('[href]').getAttribute('href').split('--')[0];
+            state["".concat(id, "-active-tab")] = "#".concat(id, " [href^='").concat(href, "']");
+            updateUiStateStorage(state);
+          });
+        });
+      };
+
+      once('plugin-settings', document.querySelector('#plugin-settings-wrapper')).forEach(maintainActiveVerticalTab);
+      once('filter-settings', document.querySelector('#filter-settings-wrapper')).forEach(maintainActiveVerticalTab);
+      var selectedButtons = document.querySelector('#ckeditor5-toolbar-buttons-selected');
+      once('textarea-listener', selectedButtons).forEach(function (textarea) {
+        textarea.addEventListener('change', function (e) {
+          var buttonName = document.activeElement.getAttribute('data-id');
+
+          if (!buttonName) {
+            return;
+          }
+
+          var focusSelector = '';
+
+          if (['divider', 'wrapping'].includes(buttonName)) {
+            var oldConfig = JSON.parse(e.detail.priorValue);
+            var newConfig = JSON.parse(e.target.innerHTML);
+
+            if (oldConfig.length > newConfig.length) {
+              for (var item = 0; item < newConfig.length; item++) {
+                if (newConfig[item] !== oldConfig[item]) {
+                  focusSelector = "[data-button-list=\"ckeditor5-toolbar-active-buttons\"] li:nth-child(".concat(Math.min(item - 1, 0), ")");
+                  break;
+                }
+              }
+            } else if (oldConfig.length < newConfig.length) {
+              focusSelector = '[data-button-list="ckeditor5-toolbar-active-buttons"] li:last-child';
+            } else {
+              document.querySelectorAll("[data-button-list=\"ckeditor5-toolbar-active-buttons\"] [data-id='".concat(buttonName, "']")).forEach(function (divider, index) {
+                if (divider === document.activeElement) {
+                  focusSelector = "".concat(buttonName, "|").concat(index);
+                }
+              });
+            }
+          } else {
+            focusSelector = "[data-id='".concat(buttonName, "']");
+          }
+
+          updateUiStateStorage({
+            focusSelector: focusSelector
+          });
+        });
+        textarea.addEventListener('focus', function () {
+          var focusSelector = getUiStateStorage('focusSelector');
+
+          if (focusSelector) {
+            if (focusSelector.includes('|')) {
+              var _focusSelector$split = focusSelector.split('|'),
+                  _focusSelector$split2 = _slicedToArray(_focusSelector$split, 2),
+                  buttonName = _focusSelector$split2[0],
+                  count = _focusSelector$split2[1];
+
+              document.querySelectorAll("[data-button-list=\"ckeditor5-toolbar-active-buttons\"] [data-id='".concat(buttonName, "']")).forEach(function (item, index) {
+                if (index === parseInt(count, 10)) {
+                  item.focus();
+                }
+              });
+            } else {
+              var toFocus = document.querySelector(focusSelector);
+
+              if (toFocus) {
+                toFocus.focus();
+              }
+            }
+          }
+        });
+      });
+    }
+  };
+
+  Drupal.theme.ckeditor5SelectedButtons = function (_ref3) {
+    var buttons = _ref3.buttons;
+    return "\n      <ul class=\"ckeditor5-toolbar-tray ckeditor5-toolbar-active__buttons\" data-button-list=\"ckeditor5-toolbar-active-buttons\" role=\"listbox\" aria-orientation=\"horizontal\" aria-labelledby=\"ckeditor5-toolbar-active-buttons-label\">\n        ".concat(buttons.map(function (button) {
+      return Drupal.theme.ckeditor5Button({
+        button: button,
+        listType: 'active'
+      });
+    }).join(''), "\n      </ul>\n    ");
+  };
+
+  Drupal.theme.ckeditor5DividerButtons = function (_ref4) {
+    var buttons = _ref4.buttons;
+    return "\n      <ul class=\"ckeditor5-toolbar-tray ckeditor5-toolbar-divider__buttons\" data-button-list=\"ckeditor5-toolbar-divider-buttons\" role=\"listbox\" aria-orientation=\"horizontal\" aria-labelledby=\"ckeditor5-toolbar-divider-buttons-label\">\n        ".concat(buttons.map(function (button) {
+      return Drupal.theme.ckeditor5Button({
+        button: button,
+        listType: 'divider'
+      });
+    }).join(''), "\n      </ul>\n    ");
+  };
+
+  Drupal.theme.ckeditor5AvailableButtons = function (_ref5) {
+    var buttons = _ref5.buttons;
+    return "\n      <ul class=\"ckeditor5-toolbar-tray ckeditor5-toolbar-available__buttons\" data-button-list=\"ckeditor5-toolbar-available-buttons\" role=\"listbox\" aria-orientation=\"horizontal\" aria-labelledby=\"ckeditor5-toolbar-available-buttons-label\">\n        ".concat(buttons.map(function (button) {
+      return Drupal.theme.ckeditor5Button({
+        button: button,
+        listType: 'available'
+      });
+    }).join(''), "\n      </ul>\n    ");
+  };
+
+  Drupal.theme.ckeditor5Button = function (_ref6) {
+    var _ref6$button = _ref6.button,
+        label = _ref6$button.label,
+        id = _ref6$button.id,
+        listType = _ref6.listType;
+    var visuallyHiddenLabel = Drupal.t("@listType button @label", {
+      '@listType': listType !== 'divider' ? listType : 'available',
+      '@label': label
+    });
+    return "\n      <li class=\"ckeditor5-toolbar-item ckeditor5-toolbar-item-".concat(id, "\" role=\"option\" tabindex=\"0\" data-drupal-selector=\"ckeditor5-toolbar-button\" data-id=\"").concat(id, "\" data-label=\"").concat(label, "\" data-divider=\"").concat(listType === 'divider', "\">\n        <span class=\"ckeditor5-toolbar-button ckeditor5-toolbar-button-").concat(id, "\">\n          <span class=\"visually-hidden\">").concat(visuallyHiddenLabel, ")}</span>\n        </span>\n        <span class=\"ckeditor5-toolbar-tooltip\" aria-hidden=\"true\">").concat(label, "</span>\n      </li>\n    ");
+  };
+
+  Drupal.theme.ckeditor5Admin = function (_ref7) {
+    var availableButtons = _ref7.availableButtons,
+        dividerButtons = _ref7.dividerButtons,
+        activeToolbar = _ref7.activeToolbar,
+        helpMessage = _ref7.helpMessage;
+    return "\n    <div aria-live=\"polite\" data-drupal-selector=\"ckeditor5-admin-help-message\">\n      <p>".concat(helpMessage.join('</p><p>'), "</p>\n    </div>\n    <div class=\"ckeditor5-toolbar-disabled\">\n      <div class=\"ckeditor5-toolbar-available\">\n        <label id=\"ckeditor5-toolbar-available-buttons-label\">").concat(Drupal.t('Available buttons'), "</label>\n        ").concat(availableButtons, "\n      </div>\n      <div class=\"ckeditor5-toolbar-divider\">\n        <label id=\"ckeditor5-toolbar-divider-buttons-label\">").concat(Drupal.t('Button divider'), "</label>\n        ").concat(dividerButtons, "\n      </div>\n    </div>\n    <div class=\"ckeditor5-toolbar-active\">\n      <label id=\"ckeditor5-toolbar-active-buttons-label\">").concat(Drupal.t('Active toolbar'), "</label>\n      ").concat(activeToolbar, "\n    </div>\n    ");
+  };
+
+  var originalFilterStatusAttach = Drupal.behaviors.filterStatus.attach;
+
+  Drupal.behaviors.filterStatus.attach = function (context, settings) {
+    var filterStatusCheckboxes = document.querySelectorAll('#filters-status-wrapper input.form-checkbox');
+    once.remove('filter-status', filterStatusCheckboxes);
+    $(filterStatusCheckboxes).off('click.filterUpdate');
+    originalFilterStatusAttach(context, settings);
+  };
+
+  Drupal.behaviors.tabErrorsVisible = {
+    attach: function attach(context) {
+      context.querySelectorAll('details .form-item .error').forEach(function (item) {
+        var details = item.closest('details');
+
+        if (details.style.display === 'none') {
+          var tabSelect = document.querySelector("[href='#".concat(details.id, "']"));
+
+          if (tabSelect) {
+            tabSelect.click();
+          }
+        }
+      });
+    }
+  };
+})(Drupal, drupalSettings, jQuery, JSON, once, Sortable);
\ No newline at end of file
diff --git a/core/modules/ckeditor5/js/ckeditor5.es6.js b/core/modules/ckeditor5/js/ckeditor5.es6.js
new file mode 100644
index 000000000000..5f97a7b07965
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5.es6.js
@@ -0,0 +1,560 @@
+/**
+ * @file
+ * CKEditor 5 implementation of {@link Drupal.editors} API.
+ */
+/* global CKEditor5 */
+((Drupal, debounce, CKEditor5, $) => {
+  /**
+   * The CKEDITOR instances.
+   *
+   * @type {Map}
+   */
+  Drupal.CKEditor5Instances = new Map();
+
+  /**
+   * The callback functions.
+   *
+   * @type {Map}
+   */
+  const callbacks = new Map();
+
+  /**
+   * List of element ids with the required attribute.
+   *
+   * @type {Set}
+   */
+  const required = new Set();
+
+  function findFunc(scope, name) {
+    if (!scope) {
+      return null;
+    }
+    const parts = name.includes('.') ? name.split('.') : name;
+
+    if (parts.length > 1) {
+      return findFunc(scope[parts.shift()], parts);
+    }
+    return typeof scope[parts[0]] === 'function' ? scope[parts[0]] : null;
+  }
+
+  function buildFunc(config) {
+    const { func } = config;
+    // Assuming a global object.
+    const fn = findFunc(window, func.name);
+    if (typeof fn === 'function') {
+      const result = func.invoke ? fn(...func.args) : fn;
+      return result;
+    }
+    return null;
+  }
+
+  /**
+   * Converts a string representing regexp to a RegExp object.
+   *
+   * @param {Object} config
+   *   An object containing configuration.
+   * @param {string} config.pattern
+   *   The regexp pattern that is used to create the RegExp object.
+   *
+   * @return {RegExp}
+   *   Regexp object built from the string regexp.
+   */
+  function buildRegexp(config) {
+    const { pattern } = config.regexp;
+
+    const main = pattern.match(/\/(.+)\/.*/)[1];
+    const options = pattern.match(/\/.+\/(.*)/)[1];
+
+    return new RegExp(main, options);
+  }
+
+  /**
+   * Casts configuration items to correct types.
+   *
+   * @param {Object} config
+   *   The config object.
+   * @return {Object}
+   *   The config object with items transformed to correct type.
+   */
+  function processConfig(config) {
+    /**
+     * Processes an array in config recursively.
+     *
+     * @param {Array} config
+     *   An array that should be processed recursively.
+     * @return {Array}
+     *   An array that has been processed recursively.
+     */
+    function processArray(config) {
+      return config.map((item) => {
+        if (typeof item === 'object') {
+          return processConfig(item);
+        }
+
+        return item;
+      });
+    }
+
+    return Object.entries(config).reduce((processed, [key, value]) => {
+      if (typeof value === 'object') {
+        if (value.hasOwnProperty('func')) {
+          processed[key] = buildFunc(value);
+        } else if (value.hasOwnProperty('regexp')) {
+          processed[key] = buildRegexp(value);
+        } else if (Array.isArray(value)) {
+          processed[key] = processArray(value);
+        } else {
+          processed[key] = processConfig(value);
+        }
+      } else {
+        processed[key] = value;
+      }
+
+      return processed;
+    }, {});
+  }
+
+  /**
+   * Set an id to a data-attribute for registering this element instance.
+   *
+   * @param {Element} element
+   *   An element that should receive unique ID.
+   *
+   * @return {string}
+   *   The id to use for this element.
+   */
+  const setElementId = (element) => {
+    const id = Math.random().toString().slice(2, 9);
+    element.setAttribute('data-ckeditor5-id', id);
+
+    return id;
+  };
+
+  /**
+   * Return a unique selector for the element.
+   *
+   * @param {HTMLElement} element
+   *   An element which unique ID should be retrieved.
+   *
+   * @return {string}
+   *   The id to use for this element.
+   */
+  const getElementId = (element) => element.getAttribute('data-ckeditor5-id');
+
+  /**
+   * Select CKEditor5 plugin classes to include.
+   *
+   * Found in the CKEditor5 global js object as {package.Class}.
+   *
+   * @param {Array} plugins
+   *  List of package and Class name of plugins
+   *
+   * @return {Array}
+   *   List of JavaScript Classes to add in the extraPlugins property of config.
+   */
+  function selectPlugins(plugins) {
+    return plugins.map((pluginDefinition) => {
+      const [build, name] = pluginDefinition.split('.');
+      if (CKEditor5[build] && CKEditor5[build][name]) {
+        return CKEditor5[build][name];
+      }
+
+      // eslint-disable-next-line no-console
+      console.warn(`Failed to load ${build} - ${name}`);
+      return null;
+    });
+  }
+
+  /**
+   * Adds CSS to ensure proper styling of CKEditor 5 inside off-canvas dialogs.
+   *
+   * @param {HTMLElement} element
+   *   The element the editor is attached to.
+   */
+  const offCanvasCss = (element) => {
+    element.parentNode.setAttribute('data-drupal-ck-style-fence', true);
+
+    // Only proceed if the styles haven't been added yet.
+    if (!document.querySelector('#ckeditor5-off-canvas-reset')) {
+      const prefix = `#drupal-off-canvas [data-drupal-ck-style-fence]`;
+      let existingCss = '';
+
+      // Find every existing style that doesn't come from off-canvas resets and
+      // copy them to new styles with a prefix targeting CKEditor inside an
+      // off-canvas dialog.
+      [...document.styleSheets].forEach((sheet) => {
+        if (
+          !sheet.href ||
+          (sheet.href && sheet.href.indexOf('off-canvas') === -1)
+        ) {
+          // This is wrapped in a try/catch as Chromium browsers will fail if
+          // the stylesheet was provided via a CORS request.
+          // @see https://bugs.chromium.org/p/chromium/issues/detail?id=775525
+          try {
+            const rules = sheet.cssRules;
+            [...rules].forEach((rule) => {
+              let { cssText } = rule;
+              const selector = rule.cssText.split('{')[0];
+
+              // Prefix all selectors added after a comma.
+              cssText = cssText.replace(
+                selector,
+                selector.replace(/,/g, `, ${prefix}`),
+              );
+
+              // When adding to existingCss, prefix the first selector as well.
+              existingCss += `${prefix} ${cssText}`;
+            });
+          } catch (e) {
+            // eslint-disable-next-line no-console
+            console.warn(
+              `Stylesheet ${sheet.href} not included in CKEditor reset due to the browser's CORS policy.`,
+            );
+          }
+        }
+      });
+
+      // Additional styles that need to be explicity added in addition to the
+      // prefixed versions of existing css in `existingCss`.
+      const addedCss = [
+        `${prefix} .ck.ck-content {display:block;min-height:5rem;}`,
+        `${prefix} .ck.ck-content * {display:initial;background:initial;color:initial;padding:initial;}`,
+        `${prefix} .ck.ck-content li {display:list-item}`,
+        `${prefix} .ck.ck-content ol li {list-style-type: decimal}`,
+        `${prefix} .ck[contenteditable], ${prefix} .ck[contenteditable] * {-webkit-user-modify: read-write;-moz-user-modify: read-write;}`,
+      ];
+
+      // Styles to ensure block elements are displayed as such inside
+      // off-canvas dialogs. These are all element types that are styled with
+      // ` all: initial;` in the off-canvas reset that should default to being
+      // displayed as blocks within CKEditor.
+      // @see core/misc/dialog/off-canvas.reset.pcss.css
+      const blockSelectors = [
+        'h1',
+        'h2',
+        'h3',
+        'h4',
+        'h5',
+        'h6',
+        'p',
+        'ol',
+        'ul',
+        'address',
+        'article',
+        'aside',
+        'blockquote',
+        'body',
+        'dd',
+        'div',
+        'dl',
+        'dt',
+        'fieldset',
+        'figcaption',
+        'figure',
+        'footer',
+        'form',
+        'header',
+        'hgroup',
+        'hr',
+        'html',
+        'legend',
+        'main',
+        'menu',
+        'pre',
+        'section',
+        'xmp',
+      ]
+        .map((blockElement) => `${prefix} .ck.ck-content ${blockElement}`)
+        .join(', \n');
+      const blockCss = `${blockSelectors} { display: block; }`;
+
+      const prefixedCss = [...addedCss, existingCss, blockCss].join('\n');
+
+      // Create a new style tag with the prefixed styles added above.
+      const offCanvasCss = document.createElement('style');
+      offCanvasCss.innerHTML = prefixedCss;
+      offCanvasCss.setAttribute('id', 'ckeditor5-off-canvas-reset');
+      document.body.appendChild(offCanvasCss);
+    }
+  };
+
+  /**
+   * @namespace
+   */
+  Drupal.editors.ckeditor5 = {
+    /**
+     * Editor attach callback.
+     *
+     * @param {HTMLElement} element
+     *   The element to attach the editor to.
+     * @param {string} format
+     *   The text format for the editor.
+     */
+    attach(element, format) {
+      const { editorClassic } = CKEditor5;
+      const {
+        toolbar,
+        plugins,
+        config: pluginConfig,
+        language,
+      } = format.editorSettings;
+      const extraPlugins = selectPlugins(plugins);
+
+      const config = {
+        extraPlugins,
+        toolbar,
+        language,
+        ...processConfig(pluginConfig),
+      };
+      // Set the id immediately so that it is available when onChange is called.
+      const id = setElementId(element);
+      const { ClassicEditor } = editorClassic;
+
+      ClassicEditor.create(element, config)
+        .then((editor) => {
+          // Save a reference to the initialized instance.
+          Drupal.CKEditor5Instances.set(id, editor);
+
+          // CKEditor4 had a feature to remove the required attribute
+          // see: https://www.drupal.org/project/drupal/issues/1954968
+          if (element.hasAttribute('required')) {
+            required.add(id);
+            element.removeAttribute('required');
+          }
+
+          editor.model.document.on('change:data', () => {
+            const callback = callbacks.get(id);
+            if (callback) {
+              if (editor.plugins.has('SourceEditing')) {
+                // If the change:data is being called while in source editing
+                // mode, it means that the form is being submitted. To avoid
+                // race conditions, in this case the callback gets called
+                // without decorating the callback with debounce.
+                // @see https://www.drupal.org/i/3229174
+                // @see Drupal.editorDetach
+                if (editor.plugins.get('SourceEditing').isSourceEditingMode) {
+                  callback();
+                  return;
+                }
+              }
+
+              // Marks the field as changed.
+              // @see Drupal.editorAttach
+              debounce(callback, 400)();
+            }
+          });
+
+          const isOffCanvas = element.closest('#drupal-off-canvas');
+
+          if (isOffCanvas) {
+            offCanvasCss(element);
+          }
+        })
+        .catch((error) => {
+          // eslint-disable-next-line no-console
+          console.error(error);
+        });
+    },
+
+    /**
+     * Editor detach callback.
+     *
+     * @param {HTMLElement} element
+     *   The element to detach the editor from.
+     * @param {string} format
+     *   The text format used for the editor.
+     * @param {string} trigger
+     *   The event trigger for the detach.
+     */
+    detach(element, format, trigger) {
+      const id = getElementId(element);
+      const editor = Drupal.CKEditor5Instances.get(id);
+      if (!editor) {
+        return;
+      }
+      if (trigger === 'serialize') {
+        editor.updateSourceElement();
+      } else {
+        element.removeAttribute('contentEditable');
+
+        // Prepare variables that will be used when discarding Quickedit changes.
+        let textElement = null;
+        let originalValue = null;
+        const usingQuickEdit = (((Drupal || {}).quickedit || {}).editors || {})
+          .editor;
+        if (usingQuickEdit) {
+          // The revert() function in QuickEdit's text editor does not work with
+          // CKEditor 5, as it is triggered before CKEditor 5 is fully
+          // destroyed. This function is overridden so the functionality it
+          // provides can happen after the CKEditor destroy() promise is
+          // fulfilled.
+          // This pulls the necessary values from the QuickEdit Backbone Model
+          // before it is destroyed, so they can be used by
+          // `editor.destroy().then()` to perform the expected revert.
+          Drupal.quickedit.editors.editor.prototype.revert =
+            function revertQuickeditChanges() {
+              textElement = this.$textElement[0];
+              originalValue = this.model.get('originalValue');
+            };
+        }
+
+        editor
+          .destroy()
+          .then(() => {
+            // If textElement and originalValue are not null, a QuickEdit
+            // revert has been requested. Perform the revert here as it
+            // can't happen until the CKEditor instance is destroyed.
+            if (textElement && originalValue) {
+              textElement.innerHTML = originalValue;
+            }
+
+            // Clean up stored references.
+            Drupal.CKEditor5Instances.delete(id);
+            callbacks.delete(id);
+            if (required.has(id)) {
+              element.setAttribute('required', 'required');
+              required.delete(id);
+            }
+          })
+          .catch((error) => {
+            // eslint-disable-next-line no-console
+            console.error(error);
+          });
+      }
+    },
+
+    /**
+     * Registers a callback which CKEditor5 will call on change:data event.
+     *
+     * @param {HTMLElement} element
+     *   The element where the change occurred.
+     * @param {function} callback
+     *   Callback called with the value of the editor.
+     */
+    onChange(element, callback) {
+      callbacks.set(getElementId(element), callback);
+    },
+
+    /**
+     * Attaches an inline editor to a DOM element.
+     *
+     * @param {HTMLElement} element
+     *   The element to attach the editor to.
+     * @param {object} format
+     *   The text format used in the editor.
+     * @param {string} [mainToolbarId]
+     *   The id attribute for the main editor toolbar, if any.
+     *
+     * @see Drupal.quickedit.editors.editor
+     */
+    attachInlineEditor(element, format, mainToolbarId) {
+      const { editorDecoupled } = CKEditor5;
+      const {
+        toolbar,
+        plugins,
+        config: pluginConfig,
+        language,
+      } = format.editorSettings;
+      const extraPlugins = selectPlugins(plugins);
+      const config = {
+        extraPlugins,
+        toolbar,
+        language,
+        ...processConfig(pluginConfig),
+      };
+      const id = setElementId(element);
+      const { DecoupledEditor } = editorDecoupled;
+
+      DecoupledEditor.create(element, config)
+        .then((editor) => {
+          Drupal.CKEditor5Instances.set(id, editor);
+          const toolbar = document.getElementById(mainToolbarId);
+          toolbar.appendChild(editor.ui.view.toolbar.element);
+          editor.model.document.on('change:data', () => {
+            const callback = callbacks.get(id);
+            if (callback) {
+              // Quick Edit requires the current data to update EditorModel.
+              // @see Drupal.quickedit.editors.editor
+              debounce(callback, 400)(editor.getData());
+            }
+          });
+        })
+        .catch((error) => {
+          // eslint-disable-next-line no-console
+          console.error(error);
+        });
+    },
+  };
+
+  Drupal.ckeditor5 = {
+    /**
+     * Variable storing the current dialog's save callback.
+     *
+     * @type {?function}
+     */
+    saveCallback: null,
+
+    openDialog(url, saveCallback, dialogSettings) {
+      // Add a consistent dialog class.
+      const classes = dialogSettings.dialogClass
+        ? dialogSettings.dialogClass.split(' ')
+        : [];
+      classes.push('ui-dialog--narrow');
+      dialogSettings.dialogClass = classes.join(' ');
+      dialogSettings.autoResize =
+        window.matchMedia('(min-width: 600px)').matches;
+      dialogSettings.width = 'auto';
+
+      const $content = $(
+        `<div class="ckeditor5-dialog-loading"><span style="top: -40px;" class="ckeditor5-dialog-loading-link">${Drupal.t(
+          'Loading...',
+        )}</span></div>`,
+      );
+      $content.appendTo($('body'));
+
+      const ckeditorAjaxDialog = Drupal.ajax({
+        dialog: dialogSettings,
+        dialogType: 'modal',
+        selector: '.ckeditor5-dialog-loading-link',
+        url,
+        progress: { type: 'throbber' },
+        submit: {
+          editor_object: {},
+        },
+      });
+      ckeditorAjaxDialog.execute();
+
+      // After a short delay, show "Loading…" message.
+      window.setTimeout(() => {
+        $content.find('span').animate({ top: '0px' });
+      }, 1000);
+
+      // Store the save callback to be executed when this dialog is closed.
+      Drupal.ckeditor5.saveCallback = saveCallback;
+    },
+  };
+
+  // Respond to new dialogs that are opened by CKEditor, closing the AJAX loader.
+  $(window).on('dialog:beforecreate', () => {
+    $('.ckeditor5-dialog-loading').animate(
+      { top: '-40px' },
+      function removeDialogLoading() {
+        $(this).remove();
+      },
+    );
+  });
+
+  // Respond to dialogs that are saved, sending data back to CKEditor.
+  $(window).on('editor:dialogsave', (e, values) => {
+    if (Drupal.ckeditor5.saveCallback) {
+      Drupal.ckeditor5.saveCallback(values);
+    }
+  });
+
+  // Respond to dialogs that are closed, removing the current save handler.
+  $(window).on('dialog:afterclose', () => {
+    if (Drupal.ckeditor5.saveCallback) {
+      Drupal.ckeditor5.saveCallback = null;
+    }
+  });
+})(Drupal, Drupal.debounce, CKEditor5, jQuery);
diff --git a/core/modules/ckeditor5/js/ckeditor5.filter.admin.es6.js b/core/modules/ckeditor5/js/ckeditor5.filter.admin.es6.js
new file mode 100644
index 000000000000..0e837f7f8326
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5.filter.admin.es6.js
@@ -0,0 +1,156 @@
+/**
+ * @file
+ * Provides Text Editor UI improvements specific to CKEditor 5.
+ */
+
+((Drupal, once) => {
+  Drupal.behaviors.allowedTagsListener = {
+    attach: function attach(context) {
+      once(
+        'allowed-tags-listener',
+        context.querySelector(
+          '[data-drupal-selector="edit-filters-filter-html-settings-allowed-html"]',
+        ),
+      ).forEach((textarea) => {
+        const editorSelect = document.querySelector(
+          '[data-drupal-selector="edit-editor-editor"]',
+        );
+        const filterCheckbox = document.querySelector(
+          '[data-drupal-selector="edit-filters-filter-html-status"]',
+        );
+        const formSubmit = document.querySelector(
+          '[data-drupal-selector="edit-actions-submit"]',
+        );
+        const wrapper = textarea.closest('div');
+
+        const resetChanges = () => {
+          const updateButtonContainer = document.querySelector(
+            '[data-ckeditor5-allowed-tags-info]',
+          );
+          if (updateButtonContainer) {
+            updateButtonContainer.remove();
+          }
+
+          const allowedTagsDisabledHelp = document.querySelector(
+            '[data-ckeditor5-allowed-tags-disabled-help]',
+          );
+          if (allowedTagsDisabledHelp) {
+            allowedTagsDisabledHelp.remove();
+          }
+
+          formSubmit.removeAttribute('disabled');
+          wrapper.classList.remove('ckeditor5-filter-attention');
+        };
+
+        resetChanges();
+
+        const addAllowedTagsUpdateButton = () => {
+          resetChanges();
+
+          if (
+            editorSelect.value === 'ckeditor5' &&
+            filterCheckbox &&
+            filterCheckbox.checked
+          ) {
+            if (!textarea.hasAttribute('readonly')) {
+              wrapper.classList.add('ckeditor5-filter-attention');
+
+              const container = document.createElement('div');
+              container.setAttribute('data-ckeditor5-allowed-tags-info', true);
+              const description = document.createElement('p');
+
+              description.innerText = Drupal.t(
+                'Switching to CKEditor 5 requires, at minimum, the tags "<p> <br>". After switching to CKEditor 5, this field will be read only, and will be updated based on which CKEditor 5 plugins are enabled. When switching to CKEditor 5 from an existing text format with content, we recommend documenting what tags are in use and then enabling the CKEditor 5 tags that support them.',
+              );
+
+              const updateButton = document.createElement('button');
+              updateButton.setAttribute(
+                'name',
+                'update-ckeditor5-allowed-tags',
+              );
+              updateButton.innerText = Drupal.t(
+                'Apply changes to allowed tags.',
+              );
+              updateButton.addEventListener('click', () => {
+                editorSelect.dispatchEvent(new CustomEvent('change'));
+                setTimeout(() => {
+                  resetChanges();
+                });
+              });
+
+              container.appendChild(description);
+              container.appendChild(updateButton);
+
+              wrapper.appendChild(container);
+
+              // In this very specific use case, submitting the filter form must
+              // be prevented.
+              // - CKEditor 5 is the selected editor, but it's not yet accepted
+              //   by the form because it's not passing the validation restraint
+              //   requiring CKEditor 5 compatible "Allowed Tags". This validator,
+              //   by necessity fires before CKEditor 5 is registered with the
+              //   form.
+              // - The registering of an editor with the form typically occurs
+              //   when a change
+              formSubmit.setAttribute('disabled', true);
+              const formSubmitHelp = document.createElement('p');
+              formSubmitHelp.setAttribute(
+                'data-ckeditor5-allowed-tags-disabled-help',
+                true,
+              );
+              formSubmitHelp.textContent = Drupal.t(
+                'This form is not submittable when the editor is set to CKEditor 5 unless the "Limit allowed HTML tags and correct faulty HTML" filter\'s "Allowed HTML tags" field includes the tags required by CKEDitor 5',
+              );
+              formSubmit.parentNode.append(formSubmitHelp);
+            }
+          }
+        };
+        editorSelect.addEventListener('change', addAllowedTagsUpdateButton);
+        filterCheckbox.addEventListener('change', addAllowedTagsUpdateButton);
+      });
+    },
+  };
+
+  // Copy the function that is about to be overridden so it can be invoked
+  // inside the override.
+  const originalAjaxEventResponse = Drupal.Ajax.prototype.eventResponse;
+
+  /**
+   * Overrides Ajax.eventResponse with CKEditor 5 specific customizations.
+   *
+   * This is the handler for events that will ultimately trigger an AJAX
+   * response. It is overridden here to provide additional logic to prevent
+   * specific CKEditor 5-related events from triggering that AJAX response
+   * unless certain criteria are met.
+   */
+  Drupal.Ajax.prototype.eventResponse = function ckeditor5AjaxEventResponse(
+    ...args
+  ) {
+    // There are AJAX callbacks that should only be triggered if the editor
+    // <select> is set to 'ckeditor5'. They should be active when the text
+    // format is using CKEditor 5 and when a user is attempting to switch to
+    // CKEditor 5 but is prevented from doing so by validation. Triggering these
+    // AJAX callback when trying to switch to CKEditor 5 but blocked by
+    // validation benefits the user as they get real time feedback as they
+    // configure the text format to be CKEditor 5 compatible. This spares them
+    // from having to submit the form multiple times in order to determine if
+    // their settings are compatible.
+    // This validation stage is also why the AJAX callbacks can't be
+    // conditionally added server side, as validation errors interrupt the form
+    // rebuild before the AJAX callbacks could be added via form_alter.
+    if (this.ckeditor5_only) {
+      // The ckeditor5_only property is added to form elements that should only
+      // trigger AJAX callbacks when the editor <select> value is 'ckeditor5'.
+      // These callbacks provide real-time validation that should be present for
+      // both text formats using CKEditor 5 and text formats in the process of
+      // switching to CKEditor 5, but prevented from doing so by validation.
+      if (
+        this.$form[0].querySelector('#edit-editor-editor').value !== 'ckeditor5'
+      ) {
+        return;
+      }
+    }
+
+    originalAjaxEventResponse.apply(this, args);
+  };
+})(Drupal, once);
diff --git a/core/modules/ckeditor5/js/ckeditor5.filter.admin.js b/core/modules/ckeditor5/js/ckeditor5.filter.admin.js
new file mode 100644
index 000000000000..2e8a0a0d970d
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5.filter.admin.js
@@ -0,0 +1,87 @@
+/**
+* DO NOT EDIT THIS FILE.
+* See the following change record for more information,
+* https://www.drupal.org/node/2815083
+* @preserve
+**/
+
+(function (Drupal, once) {
+  Drupal.behaviors.allowedTagsListener = {
+    attach: function attach(context) {
+      once('allowed-tags-listener', context.querySelector('[data-drupal-selector="edit-filters-filter-html-settings-allowed-html"]')).forEach(function (textarea) {
+        var editorSelect = document.querySelector('[data-drupal-selector="edit-editor-editor"]');
+        var filterCheckbox = document.querySelector('[data-drupal-selector="edit-filters-filter-html-status"]');
+        var formSubmit = document.querySelector('[data-drupal-selector="edit-actions-submit"]');
+        var wrapper = textarea.closest('div');
+
+        var resetChanges = function resetChanges() {
+          var updateButtonContainer = document.querySelector('[data-ckeditor5-allowed-tags-info]');
+
+          if (updateButtonContainer) {
+            updateButtonContainer.remove();
+          }
+
+          var allowedTagsDisabledHelp = document.querySelector('[data-ckeditor5-allowed-tags-disabled-help]');
+
+          if (allowedTagsDisabledHelp) {
+            allowedTagsDisabledHelp.remove();
+          }
+
+          formSubmit.removeAttribute('disabled');
+          wrapper.classList.remove('ckeditor5-filter-attention');
+        };
+
+        resetChanges();
+
+        var addAllowedTagsUpdateButton = function addAllowedTagsUpdateButton() {
+          resetChanges();
+
+          if (editorSelect.value === 'ckeditor5' && filterCheckbox && filterCheckbox.checked) {
+            if (!textarea.hasAttribute('readonly')) {
+              wrapper.classList.add('ckeditor5-filter-attention');
+              var container = document.createElement('div');
+              container.setAttribute('data-ckeditor5-allowed-tags-info', true);
+              var description = document.createElement('p');
+              description.innerText = Drupal.t('Switching to CKEditor 5 requires, at minimum, the tags "<p> <br>". After switching to CKEditor 5, this field will be read only, and will be updated based on which CKEditor 5 plugins are enabled. When switching to CKEditor 5 from an existing text format with content, we recommend documenting what tags are in use and then enabling the CKEditor 5 tags that support them.');
+              var updateButton = document.createElement('button');
+              updateButton.setAttribute('name', 'update-ckeditor5-allowed-tags');
+              updateButton.innerText = Drupal.t('Apply changes to allowed tags.');
+              updateButton.addEventListener('click', function () {
+                editorSelect.dispatchEvent(new CustomEvent('change'));
+                setTimeout(function () {
+                  resetChanges();
+                });
+              });
+              container.appendChild(description);
+              container.appendChild(updateButton);
+              wrapper.appendChild(container);
+              formSubmit.setAttribute('disabled', true);
+              var formSubmitHelp = document.createElement('p');
+              formSubmitHelp.setAttribute('data-ckeditor5-allowed-tags-disabled-help', true);
+              formSubmitHelp.textContent = Drupal.t('This form is not submittable when the editor is set to CKEditor 5 unless the "Limit allowed HTML tags and correct faulty HTML" filter\'s "Allowed HTML tags" field includes the tags required by CKEDitor 5');
+              formSubmit.parentNode.append(formSubmitHelp);
+            }
+          }
+        };
+
+        editorSelect.addEventListener('change', addAllowedTagsUpdateButton);
+        filterCheckbox.addEventListener('change', addAllowedTagsUpdateButton);
+      });
+    }
+  };
+  var originalAjaxEventResponse = Drupal.Ajax.prototype.eventResponse;
+
+  Drupal.Ajax.prototype.eventResponse = function ckeditor5AjaxEventResponse() {
+    if (this.ckeditor5_only) {
+      if (this.$form[0].querySelector('#edit-editor-editor').value !== 'ckeditor5') {
+        return;
+      }
+    }
+
+    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+      args[_key] = arguments[_key];
+    }
+
+    originalAjaxEventResponse.apply(this, args);
+  };
+})(Drupal, once);
\ No newline at end of file
diff --git a/core/modules/ckeditor5/js/ckeditor5.js b/core/modules/ckeditor5/js/ckeditor5.js
new file mode 100644
index 000000000000..e216c1228f43
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5.js
@@ -0,0 +1,348 @@
+/**
+* DO NOT EDIT THIS FILE.
+* See the following change record for more information,
+* https://www.drupal.org/node/2815083
+* @preserve
+**/
+
+function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
+
+function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
+
+function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
+
+function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
+
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
+
+function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+(function (Drupal, debounce, CKEditor5, $) {
+  Drupal.CKEditor5Instances = new Map();
+  var callbacks = new Map();
+  var required = new Set();
+
+  function findFunc(scope, name) {
+    if (!scope) {
+      return null;
+    }
+
+    var parts = name.includes('.') ? name.split('.') : name;
+
+    if (parts.length > 1) {
+      return findFunc(scope[parts.shift()], parts);
+    }
+
+    return typeof scope[parts[0]] === 'function' ? scope[parts[0]] : null;
+  }
+
+  function buildFunc(config) {
+    var func = config.func;
+    var fn = findFunc(window, func.name);
+
+    if (typeof fn === 'function') {
+      var result = func.invoke ? fn.apply(void 0, _toConsumableArray(func.args)) : fn;
+      return result;
+    }
+
+    return null;
+  }
+
+  function buildRegexp(config) {
+    var pattern = config.regexp.pattern;
+    var main = pattern.match(/\/(.+)\/.*/)[1];
+    var options = pattern.match(/\/.+\/(.*)/)[1];
+    return new RegExp(main, options);
+  }
+
+  function processConfig(config) {
+    function processArray(config) {
+      return config.map(function (item) {
+        if (_typeof(item) === 'object') {
+          return processConfig(item);
+        }
+
+        return item;
+      });
+    }
+
+    return Object.entries(config).reduce(function (processed, _ref) {
+      var _ref2 = _slicedToArray(_ref, 2),
+          key = _ref2[0],
+          value = _ref2[1];
+
+      if (_typeof(value) === 'object') {
+        if (value.hasOwnProperty('func')) {
+          processed[key] = buildFunc(value);
+        } else if (value.hasOwnProperty('regexp')) {
+          processed[key] = buildRegexp(value);
+        } else if (Array.isArray(value)) {
+          processed[key] = processArray(value);
+        } else {
+          processed[key] = processConfig(value);
+        }
+      } else {
+        processed[key] = value;
+      }
+
+      return processed;
+    }, {});
+  }
+
+  var setElementId = function setElementId(element) {
+    var id = Math.random().toString().slice(2, 9);
+    element.setAttribute('data-ckeditor5-id', id);
+    return id;
+  };
+
+  var getElementId = function getElementId(element) {
+    return element.getAttribute('data-ckeditor5-id');
+  };
+
+  function selectPlugins(plugins) {
+    return plugins.map(function (pluginDefinition) {
+      var _pluginDefinition$spl = pluginDefinition.split('.'),
+          _pluginDefinition$spl2 = _slicedToArray(_pluginDefinition$spl, 2),
+          build = _pluginDefinition$spl2[0],
+          name = _pluginDefinition$spl2[1];
+
+      if (CKEditor5[build] && CKEditor5[build][name]) {
+        return CKEditor5[build][name];
+      }
+
+      console.warn("Failed to load ".concat(build, " - ").concat(name));
+      return null;
+    });
+  }
+
+  var offCanvasCss = function offCanvasCss(element) {
+    element.parentNode.setAttribute('data-drupal-ck-style-fence', true);
+
+    if (!document.querySelector('#ckeditor5-off-canvas-reset')) {
+      var prefix = "#drupal-off-canvas [data-drupal-ck-style-fence]";
+      var existingCss = '';
+
+      _toConsumableArray(document.styleSheets).forEach(function (sheet) {
+        if (!sheet.href || sheet.href && sheet.href.indexOf('off-canvas') === -1) {
+          try {
+            var rules = sheet.cssRules;
+
+            _toConsumableArray(rules).forEach(function (rule) {
+              var cssText = rule.cssText;
+              var selector = rule.cssText.split('{')[0];
+              cssText = cssText.replace(selector, selector.replace(/,/g, ", ".concat(prefix)));
+              existingCss += "".concat(prefix, " ").concat(cssText);
+            });
+          } catch (e) {
+            console.warn("Stylesheet ".concat(sheet.href, " not included in CKEditor reset due to the browser's CORS policy."));
+          }
+        }
+      });
+
+      var addedCss = ["".concat(prefix, " .ck.ck-content {display:block;min-height:5rem;}"), "".concat(prefix, " .ck.ck-content * {display:initial;background:initial;color:initial;padding:initial;}"), "".concat(prefix, " .ck.ck-content li {display:list-item}"), "".concat(prefix, " .ck.ck-content ol li {list-style-type: decimal}"), "".concat(prefix, " .ck[contenteditable], ").concat(prefix, " .ck[contenteditable] * {-webkit-user-modify: read-write;-moz-user-modify: read-write;}")];
+      var blockSelectors = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'ol', 'ul', 'address', 'article', 'aside', 'blockquote', 'body', 'dd', 'div', 'dl', 'dt', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'header', 'hgroup', 'hr', 'html', 'legend', 'main', 'menu', 'pre', 'section', 'xmp'].map(function (blockElement) {
+        return "".concat(prefix, " .ck.ck-content ").concat(blockElement);
+      }).join(', \n');
+      var blockCss = "".concat(blockSelectors, " { display: block; }");
+      var prefixedCss = [].concat(addedCss, [existingCss, blockCss]).join('\n');
+
+      var _offCanvasCss = document.createElement('style');
+
+      _offCanvasCss.innerHTML = prefixedCss;
+
+      _offCanvasCss.setAttribute('id', 'ckeditor5-off-canvas-reset');
+
+      document.body.appendChild(_offCanvasCss);
+    }
+  };
+
+  Drupal.editors.ckeditor5 = {
+    attach: function attach(element, format) {
+      var editorClassic = CKEditor5.editorClassic;
+      var _format$editorSetting = format.editorSettings,
+          toolbar = _format$editorSetting.toolbar,
+          plugins = _format$editorSetting.plugins,
+          pluginConfig = _format$editorSetting.config,
+          language = _format$editorSetting.language;
+      var extraPlugins = selectPlugins(plugins);
+
+      var config = _objectSpread({
+        extraPlugins: extraPlugins,
+        toolbar: toolbar,
+        language: language
+      }, processConfig(pluginConfig));
+
+      var id = setElementId(element);
+      var ClassicEditor = editorClassic.ClassicEditor;
+      ClassicEditor.create(element, config).then(function (editor) {
+        Drupal.CKEditor5Instances.set(id, editor);
+
+        if (element.hasAttribute('required')) {
+          required.add(id);
+          element.removeAttribute('required');
+        }
+
+        editor.model.document.on('change:data', function () {
+          var callback = callbacks.get(id);
+
+          if (callback) {
+            if (editor.plugins.has('SourceEditing')) {
+              if (editor.plugins.get('SourceEditing').isSourceEditingMode) {
+                callback();
+                return;
+              }
+            }
+
+            debounce(callback, 400)();
+          }
+        });
+        var isOffCanvas = element.closest('#drupal-off-canvas');
+
+        if (isOffCanvas) {
+          offCanvasCss(element);
+        }
+      }).catch(function (error) {
+        console.error(error);
+      });
+    },
+    detach: function detach(element, format, trigger) {
+      var id = getElementId(element);
+      var editor = Drupal.CKEditor5Instances.get(id);
+
+      if (!editor) {
+        return;
+      }
+
+      if (trigger === 'serialize') {
+        editor.updateSourceElement();
+      } else {
+        element.removeAttribute('contentEditable');
+        var textElement = null;
+        var originalValue = null;
+        var usingQuickEdit = (((Drupal || {}).quickedit || {}).editors || {}).editor;
+
+        if (usingQuickEdit) {
+          Drupal.quickedit.editors.editor.prototype.revert = function revertQuickeditChanges() {
+            textElement = this.$textElement[0];
+            originalValue = this.model.get('originalValue');
+          };
+        }
+
+        editor.destroy().then(function () {
+          if (textElement && originalValue) {
+            textElement.innerHTML = originalValue;
+          }
+
+          Drupal.CKEditor5Instances.delete(id);
+          callbacks.delete(id);
+
+          if (required.has(id)) {
+            element.setAttribute('required', 'required');
+            required.delete(id);
+          }
+        }).catch(function (error) {
+          console.error(error);
+        });
+      }
+    },
+    onChange: function onChange(element, callback) {
+      callbacks.set(getElementId(element), callback);
+    },
+    attachInlineEditor: function attachInlineEditor(element, format, mainToolbarId) {
+      var editorDecoupled = CKEditor5.editorDecoupled;
+      var _format$editorSetting2 = format.editorSettings,
+          toolbar = _format$editorSetting2.toolbar,
+          plugins = _format$editorSetting2.plugins,
+          pluginConfig = _format$editorSetting2.config,
+          language = _format$editorSetting2.language;
+      var extraPlugins = selectPlugins(plugins);
+
+      var config = _objectSpread({
+        extraPlugins: extraPlugins,
+        toolbar: toolbar,
+        language: language
+      }, processConfig(pluginConfig));
+
+      var id = setElementId(element);
+      var DecoupledEditor = editorDecoupled.DecoupledEditor;
+      DecoupledEditor.create(element, config).then(function (editor) {
+        Drupal.CKEditor5Instances.set(id, editor);
+        var toolbar = document.getElementById(mainToolbarId);
+        toolbar.appendChild(editor.ui.view.toolbar.element);
+        editor.model.document.on('change:data', function () {
+          var callback = callbacks.get(id);
+
+          if (callback) {
+            debounce(callback, 400)(editor.getData());
+          }
+        });
+      }).catch(function (error) {
+        console.error(error);
+      });
+    }
+  };
+  Drupal.ckeditor5 = {
+    saveCallback: null,
+    openDialog: function openDialog(url, saveCallback, dialogSettings) {
+      var classes = dialogSettings.dialogClass ? dialogSettings.dialogClass.split(' ') : [];
+      classes.push('ui-dialog--narrow');
+      dialogSettings.dialogClass = classes.join(' ');
+      dialogSettings.autoResize = window.matchMedia('(min-width: 600px)').matches;
+      dialogSettings.width = 'auto';
+      var $content = $("<div class=\"ckeditor5-dialog-loading\"><span style=\"top: -40px;\" class=\"ckeditor5-dialog-loading-link\">".concat(Drupal.t('Loading...'), "</span></div>"));
+      $content.appendTo($('body'));
+      var ckeditorAjaxDialog = Drupal.ajax({
+        dialog: dialogSettings,
+        dialogType: 'modal',
+        selector: '.ckeditor5-dialog-loading-link',
+        url: url,
+        progress: {
+          type: 'throbber'
+        },
+        submit: {
+          editor_object: {}
+        }
+      });
+      ckeditorAjaxDialog.execute();
+      window.setTimeout(function () {
+        $content.find('span').animate({
+          top: '0px'
+        });
+      }, 1000);
+      Drupal.ckeditor5.saveCallback = saveCallback;
+    }
+  };
+  $(window).on('dialog:beforecreate', function () {
+    $('.ckeditor5-dialog-loading').animate({
+      top: '-40px'
+    }, function removeDialogLoading() {
+      $(this).remove();
+    });
+  });
+  $(window).on('editor:dialogsave', function (e, values) {
+    if (Drupal.ckeditor5.saveCallback) {
+      Drupal.ckeditor5.saveCallback(values);
+    }
+  });
+  $(window).on('dialog:afterclose', function () {
+    if (Drupal.ckeditor5.saveCallback) {
+      Drupal.ckeditor5.saveCallback = null;
+    }
+  });
+})(Drupal, Drupal.debounce, CKEditor5, jQuery);
\ No newline at end of file
diff --git a/core/modules/ckeditor5/js/ckeditor5_plugins/drupalEmphasis/src/drupalemphasis.js b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalEmphasis/src/drupalemphasis.js
new file mode 100644
index 000000000000..8fc5bab54230
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalEmphasis/src/drupalemphasis.js
@@ -0,0 +1,26 @@
+/* eslint-disable import/no-extraneous-dependencies */
+// cspell:ignore drupalemphasisediting
+
+import { Plugin } from 'ckeditor5/src/core';
+import DrupalEmphasisEditing from './drupalemphasisediting';
+
+/**
+ * @internal
+ */
+class DrupalEmphasis extends Plugin {
+  /**
+   * @inheritdoc
+   */
+  static get requires() {
+    return [DrupalEmphasisEditing];
+  }
+
+  /**
+   * @inheritdoc
+   */
+  static get pluginName() {
+    return 'DrupalEmphasis';
+  }
+}
+
+export default DrupalEmphasis;
diff --git a/core/modules/ckeditor5/js/ckeditor5_plugins/drupalEmphasis/src/drupalemphasisediting.js b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalEmphasis/src/drupalemphasisediting.js
new file mode 100644
index 000000000000..aba92b33e8fc
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalEmphasis/src/drupalemphasisediting.js
@@ -0,0 +1,30 @@
+/* eslint-disable import/no-extraneous-dependencies */
+import { Plugin } from 'ckeditor5/src/core';
+
+/**
+ * @internal
+ */
+/**
+ * Converts italic text into em.
+ */
+class DrupalEmphasisEditing extends Plugin {
+  /**
+   * @inheritdoc
+   */
+  static get pluginName() {
+    return 'DrupalEmphasisEditing';
+  }
+
+  /**
+   * @inheritdoc
+   */
+  init() {
+    this.editor.conversion.for('downcast').attributeToElement({
+      model: 'italic',
+      view: 'em',
+      converterPriority: 'high',
+    });
+  }
+}
+
+export default DrupalEmphasisEditing;
diff --git a/core/modules/ckeditor5/js/ckeditor5_plugins/drupalEmphasis/src/index.js b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalEmphasis/src/index.js
new file mode 100644
index 000000000000..b557f9d2ee59
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalEmphasis/src/index.js
@@ -0,0 +1,10 @@
+// cspell:ignore drupalemphasis
+
+import DrupalEmphasis from './drupalemphasis';
+
+/**
+ * @internal
+ */
+export default {
+  DrupalEmphasis,
+};
diff --git a/core/modules/ckeditor5/js/ckeditor5_plugins/drupalHtmlEngine/src/drupalhtmlbuilder.js b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalHtmlEngine/src/drupalhtmlbuilder.js
new file mode 100644
index 000000000000..1bdf25e1bdc7
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalHtmlEngine/src/drupalhtmlbuilder.js
@@ -0,0 +1,176 @@
+// cSpell:words apos
+
+/**
+ * HTML builder that converts document fragments into strings.
+ *
+ * @internal
+ */
+export default class DrupalHtmlBuilder {
+  /**
+   * Constructs a new object.
+   */
+  constructor() {
+    this.chunks = [];
+    // @see https://html.spec.whatwg.org/multipage/syntax.html#elements-2
+    this.selfClosingTags = [
+      'area',
+      'base',
+      'br',
+      'col',
+      'embed',
+      'hr',
+      'img',
+      'input',
+      'link',
+      'meta',
+      'param',
+      'source',
+      'track',
+      'wbr',
+    ];
+  }
+
+  /**
+   * Returns the current HTML string built from document fragments.
+   *
+   * @return {string}
+   *   The HTML string built from document fragments.
+   */
+  build() {
+    return this.chunks.join('');
+  }
+
+  /**
+   * Converts document fragment into HTML string and appends to the value.
+   *
+   * @param {DocumentFragment} node
+   *   A document fragment to be appended to the value.
+   */
+  appendNode(node) {
+    if (node.nodeType === Node.TEXT_NODE) {
+      this._appendText(node);
+    } else if (node.nodeType === Node.ELEMENT_NODE) {
+      this._appendElement(node);
+    } else if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {
+      this._appendChildren(node);
+    }
+  }
+
+  /**
+   * Appends element node to the value.
+   *
+   * @param {DocumentFragment} node
+   *   A document fragment to be appended to the value.
+   *
+   * @private
+   */
+  _appendElement(node) {
+    const nodeName = node.nodeName.toLowerCase();
+
+    this._append('<');
+    this._append(nodeName);
+    this._appendAttributes(node);
+    this._append('>');
+    if (!this.selfClosingTags.includes(nodeName)) {
+      this._appendChildren(node);
+      this._append('</');
+      this._append(nodeName);
+      this._append('>');
+    }
+  }
+
+  /**
+   * Appends child nodes to the value.
+   *
+   * @param {DocumentFragment} node
+   *  A document fragment to be appended to the value.
+   *
+   * @private
+   */
+  _appendChildren(node) {
+    Object.keys(node.childNodes).forEach((child) => {
+      this.appendNode(node.childNodes[child]);
+    });
+  }
+
+  /**
+   * Appends attributes to the value.
+   *
+   * @param {DocumentFragment} node
+   *  A document fragment to be appended to the value.
+   *
+   * @private
+   */
+  _appendAttributes(node) {
+    Object.keys(node.attributes).forEach((attr) => {
+      this._append(' ');
+      this._append(node.attributes[attr].name);
+      this._append('="');
+      this._append(
+        this.constructor._escapeAttribute(node.attributes[attr].value),
+      );
+      this._append('"');
+    });
+  }
+
+  /**
+   * Appends text to the value.
+   *
+   * @param {DocumentFragment} node
+   *  A document fragment to be appended to the value.
+   *
+   * @private
+   */
+  _appendText(node) {
+    // Text node doesn't have innerHTML property and textContent doesn't encode
+    // entities. That's why the text is repacked into another node and extracted
+    // using innerHTML.
+    const doc = document.implementation.createHTMLDocument('');
+    const container = doc.createElement('p');
+    container.textContent = node.textContent;
+
+    this._append(container.innerHTML);
+  }
+
+  /**
+   * Appends string to the value.
+   *
+   * @param {string} str
+   *  A string to be appended to the value.
+   *
+   * @private
+   */
+  _append(str) {
+    this.chunks.push(str);
+  }
+
+  /**
+   * Escapes attribute value for compatibility with Drupal's XSS filtering.
+   *
+   * Drupal's XSS filtering cannot handle entities inside element attribute
+   * values. The XSS filtering was written based on W3C XML recommendations
+   * which constituted that the ampersand character (&) and the angle
+   * brackets (< and >) must not appear in their literal form in attribute
+   * values. This differs from the HTML living standard which permits angle
+   * brackets.
+   *
+   * @param {string} text
+   *  A string to be escaped.
+   *
+   * @see https://www.w3.org/TR/2008/REC-xml-20081126/#NT-AttValue
+   * @see https://html.spec.whatwg.org/multipage/parsing.html#attribute-value-(single-quoted)-state
+   * @see https://www.drupal.org/project/drupal/issues/3227831
+   *
+   * @private
+   */
+  static _escapeAttribute(text) {
+    return text
+      .replace(/&/g, '&amp;')
+      .replace(/'/g, '&apos;')
+      .replace(/"/g, '&quot;')
+      .replace(/</g, '&lt;')
+      .replace(/>/g, '&gt;')
+      .replace(/\r\n/g, '&#13;')
+      .replace(/[\r\n]/g, '&#13;');
+  }
+}
diff --git a/core/modules/ckeditor5/js/ckeditor5_plugins/drupalHtmlEngine/src/drupalhtmlengine.js b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalHtmlEngine/src/drupalhtmlengine.js
new file mode 100644
index 000000000000..6b101b32604b
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalHtmlEngine/src/drupalhtmlengine.js
@@ -0,0 +1,35 @@
+/* eslint-disable import/no-extraneous-dependencies */
+// cSpell:words drupalhtmlwriter
+import { Plugin } from 'ckeditor5/src/core';
+import DrupalHtmlWriter from './drupalhtmlwriter';
+
+/**
+ * A plugin that overrides the CKEditor HTML writer.
+ *
+ * Override the CKEditor 5 HTML writer to escape ampersand characters (&) and
+ * the angle brackets (< and >). This is required because
+ * \Drupal\Component\Utility\Xss::filter fails to parse element attributes with
+ * unescaped entities in value.
+ *
+ * @see https://www.drupal.org/project/drupal/issues/3227831
+ * @see DrupalHtmlBuilder._escapeAttribute
+ *
+ * @internal
+ */
+class DrupalHtmlEngine extends Plugin {
+  /**
+   * @inheritdoc
+   */
+  init() {
+    this.editor.data.processor.htmlWriter = new DrupalHtmlWriter();
+  }
+
+  /**
+   * @inheritdoc
+   */
+  static get pluginName() {
+    return 'DrupalHtmlEngine';
+  }
+}
+
+export default DrupalHtmlEngine;
diff --git a/core/modules/ckeditor5/js/ckeditor5_plugins/drupalHtmlEngine/src/drupalhtmlwriter.js b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalHtmlEngine/src/drupalhtmlwriter.js
new file mode 100644
index 000000000000..56fe94ff18e0
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalHtmlEngine/src/drupalhtmlwriter.js
@@ -0,0 +1,31 @@
+// cSpell:words drupalhtmlbuilder dataprocessor basichtmlwriter htmlwriter
+import DrupalHtmlBuilder from './drupalhtmlbuilder';
+
+/**
+ * Custom HTML writer. It creates HTML by traversing DOM nodes.
+ *
+ * It differs to BasicHtmlWriter in the way it encodes entities in element
+ * attributes.
+ *
+ * @see module:engine/dataprocessor/basichtmlwriter~BasicHtmlWriter
+ * @implements {module:engine/dataprocessor/htmlwriter~HtmlWriter}
+ *
+ * @see https://www.drupal.org/project/drupal/issues/3227831
+ *
+ * @internal
+ */
+export default class DrupalHtmlWriter {
+  /**
+   * Returns an HTML string created from the document fragment.
+   *
+   * @param {DocumentFragment} fragment
+   * @return {String}
+   */
+  // eslint-disable-next-line class-methods-use-this
+  getHtml(fragment) {
+    const builder = new DrupalHtmlBuilder();
+    builder.appendNode(fragment);
+
+    return builder.build();
+  }
+}
diff --git a/core/modules/ckeditor5/js/ckeditor5_plugins/drupalHtmlEngine/src/index.js b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalHtmlEngine/src/index.js
new file mode 100644
index 000000000000..f58f6764fd0a
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalHtmlEngine/src/index.js
@@ -0,0 +1,9 @@
+// cspell:ignore drupalengine drupalhtmlengine
+import DrupalHtmlEngine from './drupalhtmlengine';
+
+/**
+ * @internal
+ */
+export default {
+  DrupalHtmlEngine,
+};
diff --git a/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/README.md b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/README.md
new file mode 100644
index 000000000000..d127535e5c5d
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/README.md
@@ -0,0 +1,16 @@
+# ckeditor5-drupal-image
+
+Drupal image plugin for CKEditor5
+
+Provides required attributes `data-entity-uuid` and `data-entity-type`.
+
+## Usage
+
+This project is for creating minified js for [Drupal CKEditor5](http://drupal.org/project/ckeditor5)
+
+## Build
+
+Run `npm run build:dll` to create the minified js.
+
+Check the file path in `webpack.config.js` to ensure it points to the dll
+manifest in your copy of `ckeditor5`.
diff --git a/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/drupalimage.js b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/drupalimage.js
new file mode 100644
index 000000000000..88de3fc0f485
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/drupalimage.js
@@ -0,0 +1,26 @@
+/* eslint-disable import/no-extraneous-dependencies */
+/* cspell:words drupalimageediting */
+
+import { Plugin } from 'ckeditor5/src/core';
+import DrupalImageEditing from './drupalimageediting';
+
+/**
+ * @internal
+ */
+class DrupalImage extends Plugin {
+  /**
+   * @inheritdoc
+   */
+  static get requires() {
+    return [DrupalImageEditing];
+  }
+
+  /**
+   * @inheritdoc
+   */
+  static get pluginName() {
+    return 'DrupalImage';
+  }
+}
+
+export default DrupalImage;
diff --git a/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/drupalimageediting.js b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/drupalimageediting.js
new file mode 100644
index 000000000000..5fc34039dce7
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/drupalimageediting.js
@@ -0,0 +1,521 @@
+/* eslint-disable import/no-extraneous-dependencies */
+// cSpell:words conversionutils downcasted linkimageediting
+import { Plugin } from 'ckeditor5/src/core';
+import { setViewAttributes } from '@ckeditor/ckeditor5-html-support/src/conversionutils';
+
+function createImageViewElement(writer) {
+  return writer.createEmptyElement('img');
+}
+
+function modelEntityUuidToDataAttribute() {
+  function converter(evt, data, conversionApi) {
+    const { item } = data;
+    const { consumable, writer } = conversionApi;
+
+    if (!consumable.consume(item, evt.name)) {
+      return;
+    }
+
+    const viewElement = conversionApi.mapper.toViewElement(item);
+    const imageInFigure = Array.from(viewElement.getChildren()).find(
+      (child) => child.name === 'img',
+    );
+
+    writer.setAttribute(
+      'data-entity-uuid',
+      data.attributeNewValue,
+      imageInFigure || viewElement,
+    );
+  }
+
+  return (dispatcher) => {
+    dispatcher.on('attribute:dataEntityUuid', converter);
+  };
+}
+
+// Downcast `caption` model to `data-caption` attribute with its content
+// downcasted to plain HTML. This is needed because CKEditor 5 uses <caption>
+// element internally in various places, which differs from Drupal which uses
+// an attribute. For now to support that we have to manually repeat work done in
+// the DowncastDispatcher's private methods.
+function viewCaptionToCaptionAttribute(editor) {
+  return (dispatcher) => {
+    dispatcher.on(
+      'insert:caption',
+      (evt, data, conversionApi) => {
+        const { consumable, writer, mapper } = conversionApi;
+        if (!consumable.consume(data.item, 'insert')) {
+          return;
+        }
+
+        const range = editor.model.createRangeIn(data.item);
+        const viewDocumentFragment = writer.createDocumentFragment();
+
+        // Bind caption model element to the detached view document fragment so
+        // all content of the caption will be downcasted into that document
+        // fragment.
+        mapper.bindElements(data.item, viewDocumentFragment);
+
+        // eslint-disable-next-line no-restricted-syntax
+        for (const { item } of Array.from(range)) {
+          const itemData = {
+            item,
+            range: editor.model.createRangeOn(item),
+          };
+
+          // The following lines are extracted from
+          // DowncastDispatcher._convertInsertWithAttributes().
+          const eventName = `insert:${item.name || '$text'}`;
+
+          editor.data.downcastDispatcher.fire(
+            eventName,
+            itemData,
+            conversionApi,
+          );
+
+          // eslint-disable-next-line no-restricted-syntax
+          for (const key of item.getAttributeKeys()) {
+            Object.assign(itemData, {
+              attributeKey: key,
+              attributeOldValue: null,
+              attributeNewValue: itemData.item.getAttribute(key),
+            });
+
+            editor.data.downcastDispatcher.fire(
+              `attribute:${key}`,
+              itemData,
+              conversionApi,
+            );
+          }
+        }
+
+        // Unbind all the view elements that were downcasted to the document
+        // fragment.
+        // eslint-disable-next-line no-restricted-syntax
+        for (const child of writer
+          .createRangeIn(viewDocumentFragment)
+          .getItems()) {
+          mapper.unbindViewElement(child);
+        }
+
+        mapper.unbindViewElement(viewDocumentFragment);
+
+        // Stringify view document fragment to HTML string.
+        const captionText = editor.data.processor.toData(viewDocumentFragment);
+
+        if (captionText) {
+          const imageViewElement = mapper.toViewElement(data.item.parent);
+
+          writer.setAttribute('data-caption', captionText, imageViewElement);
+        }
+      },
+      // Override default caption converter.
+      { priority: 'high' },
+    );
+  };
+}
+
+function modelEntityTypeToDataAttribute() {
+  function converter(evt, data, conversionApi) {
+    const { item } = data;
+    const { consumable, writer } = conversionApi;
+
+    if (!consumable.consume(item, evt.name)) {
+      return;
+    }
+
+    const viewElement = conversionApi.mapper.toViewElement(item);
+    const imageInFigure = Array.from(viewElement.getChildren()).find(
+      (child) => child.name === 'img',
+    );
+
+    writer.setAttribute(
+      'data-entity-type',
+      data.attributeNewValue,
+      imageInFigure || viewElement,
+    );
+  }
+
+  return (dispatcher) => {
+    dispatcher.on('attribute:dataEntityType', converter);
+  };
+}
+
+function modelImageStyleToDataAttribute() {
+  function converter(evt, data, conversionApi) {
+    const { item } = data;
+    const { consumable, writer } = conversionApi;
+
+    const mapping = {
+      alignLeft: 'left',
+      alignRight: 'right',
+      alignCenter: 'center',
+      alignBlockRight: 'right',
+      alignBlockLeft: 'left',
+    };
+
+    // Consume only for the values that can be converted into data-align.
+    if (
+      !mapping[data.attributeNewValue] ||
+      !consumable.consume(item, evt.name)
+    ) {
+      return;
+    }
+
+    const viewElement = conversionApi.mapper.toViewElement(item);
+    const imageInFigure = Array.from(viewElement.getChildren()).find(
+      (child) => child.name === 'img',
+    );
+
+    writer.setAttribute(
+      'data-align',
+      mapping[data.attributeNewValue],
+      imageInFigure || viewElement,
+    );
+  }
+
+  return (dispatcher) => {
+    dispatcher.on('attribute:imageStyle', converter, { priority: 'high' });
+  };
+}
+
+function modelImageWidthToAttribute() {
+  function converter(evt, data, conversionApi) {
+    const { item } = data;
+    const { consumable, writer } = conversionApi;
+
+    if (!consumable.consume(item, evt.name)) {
+      return;
+    }
+
+    const viewElement = conversionApi.mapper.toViewElement(item);
+    const imageInFigure = Array.from(viewElement.getChildren()).find(
+      (child) => child.name === 'img',
+    );
+
+    writer.setAttribute(
+      'width',
+      data.attributeNewValue.replace('px', ''),
+      imageInFigure || viewElement,
+    );
+  }
+
+  return (dispatcher) => {
+    dispatcher.on('attribute:width:imageInline', converter, {
+      priority: 'high',
+    });
+    dispatcher.on('attribute:width:imageBlock', converter, {
+      priority: 'high',
+    });
+  };
+}
+
+function modelImageHeightToAttribute() {
+  function converter(evt, data, conversionApi) {
+    const { item } = data;
+    const { consumable, writer } = conversionApi;
+
+    if (!consumable.consume(item, evt.name)) {
+      return;
+    }
+
+    const viewElement = conversionApi.mapper.toViewElement(item);
+    const imageInFigure = Array.from(viewElement.getChildren()).find(
+      (child) => child.name === 'img',
+    );
+
+    writer.setAttribute(
+      'height',
+      data.attributeNewValue.replace('px', ''),
+      imageInFigure || viewElement,
+    );
+  }
+
+  return (dispatcher) => {
+    dispatcher.on('attribute:height:imageInline', converter, {
+      priority: 'high',
+    });
+    dispatcher.on('attribute:height:imageBlock', converter, {
+      priority: 'high',
+    });
+  };
+}
+
+function viewImageToModelImage(editor) {
+  function converter(evt, data, conversionApi) {
+    const { viewItem } = data;
+    const { writer, consumable, safeInsert, updateConversionResult, schema } =
+      conversionApi;
+    const attributesToConsume = [];
+
+    let image;
+
+    // Not only check if a given `img` view element has been consumed, but also
+    // verify it has `src` attribute present.
+    if (!consumable.test(viewItem, { name: true, attributes: 'src' })) {
+      return;
+    }
+
+    // Create image that's allowed in the given context.
+    if (schema.checkChild(data.modelCursor, 'imageInline')) {
+      image = writer.createElement('imageInline', {
+        src: viewItem.getAttribute('src'),
+      });
+    } else {
+      image = writer.createElement('imageBlock', {
+        src: viewItem.getAttribute('src'),
+      });
+    }
+
+    if (
+      editor.plugins.has('ImageStyleEditing') &&
+      consumable.test(viewItem, { name: true, attributes: 'data-align' })
+    ) {
+      // https://ckeditor.com/docs/ckeditor5/latest/api/module_image_imagestyle_utils.html#constant-defaultStyles
+      const dataToPresentationMapBlock = {
+        left: 'alignBlockLeft',
+        center: 'alignCenter',
+        right: 'alignBlockRight',
+      };
+      const dataToPresentationMapInline = {
+        left: 'alignLeft',
+        right: 'alignRight',
+      };
+
+      const dataAlign = viewItem.getAttribute('data-align');
+      const alignment = image.is('element', 'imageBlock')
+        ? dataToPresentationMapBlock[dataAlign]
+        : dataToPresentationMapInline[dataAlign];
+
+      writer.setAttribute('imageStyle', alignment, image);
+
+      // Make sure the attribute can be consumed after successful `safeInsert`
+      // operation.
+      attributesToConsume.push('data-align');
+    }
+
+    // Check if the view element has still unconsumed `data-caption` attribute.
+    // Also, we can add caption only to block image.
+    if (
+      image.is('element', 'imageBlock') &&
+      consumable.test(viewItem, { name: true, attributes: 'data-caption' })
+    ) {
+      // Create `caption` model element. Thanks to that element the rest of the
+      // `ckeditor5-plugin` converters can recognize this image as a block image
+      // with a caption.
+      const caption = writer.createElement('caption');
+
+      // Parse HTML from data-caption attribute and upcast it to model fragment.
+      const viewFragment = editor.data.processor.toView(
+        viewItem.getAttribute('data-caption'),
+      );
+      const modelFragment = writer.createDocumentFragment();
+
+      // Consumable must know about those newly parsed view elements.
+      conversionApi.consumable.constructor.createFrom(
+        viewFragment,
+        conversionApi.consumable,
+      );
+      conversionApi.convertChildren(viewFragment, modelFragment);
+
+      // Insert caption model nodes into the caption.
+      // eslint-disable-next-line no-restricted-syntax
+      for (const child of Array.from(modelFragment.getChildren())) {
+        writer.append(child, caption);
+      }
+
+      // Insert the caption element into image, as a last child.
+      writer.append(caption, image);
+
+      // Make sure the attribute can be consumed after successful `safeInsert`
+      // operation.
+      attributesToConsume.push('data-caption');
+    }
+
+    if (
+      consumable.test(viewItem, { name: true, attributes: 'data-entity-uuid' })
+    ) {
+      writer.setAttribute(
+        'dataEntityUuid',
+        viewItem.getAttribute('data-entity-uuid'),
+        image,
+      );
+      attributesToConsume.push('data-entity-uuid');
+    }
+
+    if (
+      consumable.test(viewItem, { name: true, attributes: 'data-entity-type' })
+    ) {
+      writer.setAttribute(
+        'dataEntityType',
+        viewItem.getAttribute('data-entity-type'),
+        image,
+      );
+      attributesToConsume.push('data-entity-type');
+    }
+
+    // Try to place the image in the allowed position.
+    if (!safeInsert(image, data.modelCursor)) {
+      return;
+    }
+
+    // Mark given element as consumed. Now other converters will not process it
+    // anymore.
+    consumable.consume(viewItem, {
+      name: true,
+      attributes: attributesToConsume,
+    });
+
+    // Make sure `modelRange` and `modelCursor` is up to date after inserting
+    // new nodes into the model.
+    updateConversionResult(image, data);
+  }
+
+  return (dispatcher) => {
+    dispatcher.on('element:img', converter, { priority: 'high' });
+  };
+}
+
+// Modified alternative implementation of linkimageediting.js' downcastImageLink.
+function downcastBlockImageLink() {
+  function converter(evt, data, conversionApi) {
+    if (!conversionApi.consumable.consume(data.item, evt.name)) {
+      return;
+    }
+
+    // The image will be already converted - so it will be present in the view.
+    const image = conversionApi.mapper.toViewElement(data.item);
+    const writer = conversionApi.writer;
+
+    // 1. Create an empty link element.
+    const linkElement = writer.createContainerElement('a', {
+      href: data.attributeNewValue,
+    });
+    // 2. Insert link before the associated image.
+    writer.insert(writer.createPositionBefore(image), linkElement);
+    // 3. Move the image into the link.
+    writer.move(
+      writer.createRangeOn(image),
+      writer.createPositionAt(linkElement, 0),
+    );
+
+    // Modified alternative implementation of GHS' addBlockImageLinkAttributeConversion().
+    // This is happening here as well to avoid a race condition with the link
+    // element not yet existing.
+    if (
+      conversionApi.consumable.consume(
+        data.item,
+        'attribute:htmlLinkAttributes:imageBlock',
+      )
+    ) {
+      setViewAttributes(
+        conversionApi.writer,
+        data.item.getAttribute('htmlLinkAttributes'),
+        linkElement,
+      );
+    }
+  }
+
+  return (dispatcher) => {
+    dispatcher.on('attribute:linkHref:imageBlock', converter, {
+      priority: 'high',
+    });
+  };
+}
+
+/**
+ * @internal
+ */
+export default class DrupalImageEditing extends Plugin {
+  /**
+   * @inheritdoc
+   */
+  static get pluginName() {
+    return 'DrupalImageEditing';
+  }
+
+  /**
+   * @inheritdoc
+   */
+  init() {
+    const { editor } = this;
+    const { conversion } = editor;
+    const { schema } = editor.model;
+
+    if (schema.isRegistered('imageInline')) {
+      schema.extend('imageInline', {
+        allowAttributes: [
+          'dataEntityUuid',
+          'dataEntityType',
+          'width',
+          'height',
+        ],
+      });
+    }
+
+    if (schema.isRegistered('imageBlock')) {
+      schema.extend('imageBlock', {
+        allowAttributes: [
+          'dataEntityUuid',
+          'dataEntityType',
+          'width',
+          'height',
+        ],
+      });
+    }
+
+    // Conversion.
+    conversion
+      .for('upcast')
+      .add(viewImageToModelImage(editor))
+      .attributeToAttribute({
+        view: {
+          name: 'img',
+          key: 'width',
+        },
+        model: {
+          key: 'width',
+          value: (viewElement) => {
+            return `${viewElement.getAttribute('width')}px`;
+          },
+        },
+      })
+      .attributeToAttribute({
+        view: {
+          name: 'img',
+          key: 'height',
+        },
+        model: {
+          key: 'height',
+          value: (viewElement) => {
+            return `${viewElement.getAttribute('height')}px`;
+          },
+        },
+      });
+
+    conversion
+      .for('downcast')
+      .add(modelEntityUuidToDataAttribute())
+      .add(modelEntityTypeToDataAttribute());
+
+    conversion
+      .for('dataDowncast')
+      .add(viewCaptionToCaptionAttribute(editor))
+      .elementToElement({
+        model: 'imageBlock',
+        view: (modelElement, { writer }) =>
+          createImageViewElement(writer, 'imageBlock'),
+        converterPriority: 'high',
+      })
+      .elementToElement({
+        model: 'imageInline',
+        view: (modelElement, { writer }) =>
+          createImageViewElement(writer, 'imageInline'),
+        converterPriority: 'high',
+      })
+      .add(modelImageStyleToDataAttribute())
+      .add(modelImageWidthToAttribute())
+      .add(modelImageHeightToAttribute())
+      .add(downcastBlockImageLink());
+  }
+}
diff --git a/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imageupload/drupalfilerepository.js b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imageupload/drupalfilerepository.js
new file mode 100644
index 000000000000..3f0d1ca5ccaa
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imageupload/drupalfilerepository.js
@@ -0,0 +1,47 @@
+/* eslint-disable import/no-extraneous-dependencies */
+/* cspell:words uploadurl drupalimageuploadadapter  */
+
+import { Plugin } from 'ckeditor5/src/core';
+import { FileRepository } from 'ckeditor5/src/upload';
+import { logWarning } from 'ckeditor5/src/utils';
+import DrupalImageUploadAdapter from './drupalimageuploadadapter';
+
+/**
+ * @internal
+ */
+export default class DrupalFileRepository extends Plugin {
+  /**
+   * @inheritdoc
+   */
+  static get requires() {
+    return [FileRepository];
+  }
+
+  /**
+   * @inheritdoc
+   */
+  static get pluginName() {
+    return 'DrupalFileRepository';
+  }
+
+  /**
+   * @inheritdoc
+   */
+  init() {
+    const options = this.editor.config.get('drupalImageUpload');
+
+    if (!options) {
+      return;
+    }
+
+    if (!options.uploadUrl) {
+      logWarning('simple-upload-adapter-missing-uploadurl');
+
+      return;
+    }
+
+    this.editor.plugins.get(FileRepository).createUploadAdapter = (loader) => {
+      return new DrupalImageUploadAdapter(loader, options);
+    };
+  }
+}
diff --git a/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imageupload/drupalimageupload.js b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imageupload/drupalimageupload.js
new file mode 100644
index 000000000000..9123242e61d5
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imageupload/drupalimageupload.js
@@ -0,0 +1,29 @@
+/* eslint-disable import/no-extraneous-dependencies */
+/* cspell:words drupalimageuploadediting drupalfilerepository */
+
+import { Plugin } from 'ckeditor5/src/core';
+import DrupalImageUploadEditing from './drupalimageuploadediting';
+import DrupalFileRepository from './drupalfilerepository';
+
+/**
+ * Integrates the CKEditor image upload with the Drupal.
+ *
+ * @internal
+ */
+class DrupalImageUpload extends Plugin {
+  /**
+   * @inheritdoc
+   */
+  static get requires() {
+    return [DrupalFileRepository, DrupalImageUploadEditing];
+  }
+
+  /**
+   * @inheritdoc
+   */
+  static get pluginName() {
+    return 'DrupalImageUpload';
+  }
+}
+
+export default DrupalImageUpload;
diff --git a/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imageupload/drupalimageuploadadapter.js b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imageupload/drupalimageuploadadapter.js
new file mode 100644
index 000000000000..5986432a523f
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imageupload/drupalimageuploadadapter.js
@@ -0,0 +1,148 @@
+/* eslint-disable import/no-extraneous-dependencies */
+/* cspell:words simpleuploadadapter filerepository */
+
+/**
+ * Upload adapter. Copied from @ckeditor5/ckeditor5-upload/src/adapters/simpleuploadadapter
+ *
+ * @internal
+ * @implements {module:upload/filerepository~UploadAdapter}
+ */
+export default class DrupalImageUploadAdapter {
+  /**
+   * Creates a new adapter instance.
+   *
+   * @param {module:upload/filerepository~FileLoader} loader
+   *   The file loader.
+   * @param {module:upload/adapters/simpleuploadadapter~SimpleUploadConfig} options
+   *   The upload options.
+   */
+  constructor(loader, options) {
+    /**
+     * FileLoader instance to use during the upload.
+     *
+     * @member {module:upload/filerepository~FileLoader} #loader
+     */
+    this.loader = loader;
+
+    /**
+     * The configuration of the adapter.
+     *
+     * @member {module:upload/adapters/simpleuploadadapter~SimpleUploadConfig} #options
+     */
+    this.options = options;
+  }
+
+  /**
+   * Starts the upload process.
+   *
+   * @see module:upload/filerepository~UploadAdapter#upload
+   * @return {Promise}
+   *   Promise that the upload will be processed.
+   */
+  upload() {
+    return this.loader.file.then(
+      (file) =>
+        new Promise((resolve, reject) => {
+          this._initRequest();
+          this._initListeners(resolve, reject, file);
+          this._sendRequest(file);
+        }),
+    );
+  }
+
+  /**
+   * Aborts the upload process.
+   *
+   * @see module:upload/filerepository~UploadAdapter#abort
+   */
+  abort() {
+    if (this.xhr) {
+      this.xhr.abort();
+    }
+  }
+
+  /**
+   * Initializes the `XMLHttpRequest` object using the URL specified as
+   *
+   * {@link module:upload/adapters/simpleuploadadapter~SimpleUploadConfig#uploadUrl `simpleUpload.uploadUrl`} in the editor's
+   * configuration.
+   */
+  _initRequest() {
+    this.xhr = new XMLHttpRequest();
+
+    this.xhr.open('POST', this.options.uploadUrl, true);
+    this.xhr.responseType = 'json';
+  }
+
+  /**
+   * Initializes XMLHttpRequest listeners
+   *
+   * @private
+   * @param {Function} resolve Callback function to be called when the request is successful.
+   * @param {Function} reject Callback function to be called when the request cannot be completed.
+   * @param {File} file Native File object.
+   */
+  _initListeners(resolve, reject, file) {
+    const xhr = this.xhr;
+    const loader = this.loader;
+    const genericErrorText = `Couldn't upload file: ${file.name}.`;
+
+    xhr.addEventListener('error', () => reject(genericErrorText));
+    xhr.addEventListener('abort', () => reject());
+    xhr.addEventListener('load', () => {
+      const response = xhr.response;
+
+      if (!response || response.error) {
+        return reject(
+          response && response.error && response.error.message
+            ? response.error.message
+            : genericErrorText,
+        );
+      }
+
+      resolve({
+        urls: { default: response.url },
+        dataEntityUuid: response.uuid ? response.uuid : '',
+        dataEntityType: response.entity_type ? response.entity_type : '',
+      });
+    });
+
+    // Upload progress when it is supported.
+    if (xhr.upload) {
+      xhr.upload.addEventListener('progress', (evt) => {
+        if (evt.lengthComputable) {
+          loader.uploadTotal = evt.total;
+          loader.uploaded = evt.loaded;
+        }
+      });
+    }
+  }
+
+  /**
+   * Prepares the data and sends the request.
+   *
+   * @param {File} file
+   *   File instance to be uploaded.
+   */
+  _sendRequest(file) {
+    // Set headers if specified.
+    const headers = this.options.headers || {};
+
+    // Use the withCredentials flag if specified.
+    const withCredentials = this.options.withCredentials || false;
+
+    Object.keys(headers).forEach((headerName) => {
+      this.xhr.setRequestHeader(headerName, headers[headerName]);
+    });
+
+    this.xhr.withCredentials = withCredentials;
+
+    // Prepare the form data.
+    const data = new FormData();
+
+    data.append('upload', file);
+
+    // Send the request.
+    this.xhr.send(data);
+  }
+}
diff --git a/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imageupload/drupalimageuploadediting.js b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imageupload/drupalimageuploadediting.js
new file mode 100644
index 000000000000..61c43c55819b
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/imageupload/drupalimageuploadediting.js
@@ -0,0 +1,36 @@
+/* eslint-disable import/no-extraneous-dependencies */
+import { Plugin } from 'ckeditor5/src/core';
+
+/**
+ * @internal
+ */
+export default class DrupalImageUploadEditing extends Plugin {
+  /**
+   * @inheritdoc
+   */
+  init() {
+    const { editor } = this;
+    const imageUploadEditing = editor.plugins.get('ImageUploadEditing');
+    imageUploadEditing.on('uploadComplete', (evt, { data, imageElement }) => {
+      editor.model.change((writer) => {
+        writer.setAttribute(
+          'dataEntityUuid',
+          data.dataEntityUuid,
+          imageElement,
+        );
+        writer.setAttribute(
+          'dataEntityType',
+          data.dataEntityType,
+          imageElement,
+        );
+      });
+    });
+  }
+
+  /**
+   * @inheritdoc
+   */
+  static get pluginName() {
+    return 'DrupalImageUploadEditing';
+  }
+}
diff --git a/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/index.js b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/index.js
new file mode 100644
index 000000000000..c7ca6898351d
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalImage/src/index.js
@@ -0,0 +1,12 @@
+// cspell:ignore imageupload imageresize drupalimage drupalimageupload drupalimageresize
+
+import DrupalImage from './drupalimage';
+import DrupalImageUpload from './imageupload/drupalimageupload';
+
+/**
+ * @internal
+ */
+export default {
+  DrupalImage,
+  DrupalImageUpload,
+};
diff --git a/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/README.md b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/README.md
new file mode 100644
index 000000000000..60336a6afec5
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/README.md
@@ -0,0 +1,39 @@
+# ckeditor5-drupal-media
+
+Drupal media plugin for CKEditor5
+
+Provides required attributes `data-entity-uuid` and `data-entity-type`.
+
+## Usage
+
+This project is for creating minified js for [Drupal CKEditor5](http://drupal.org/project/ckeditor5)
+
+When using this plugin, you must provide the following config in `drupalMedia`:
+
+1. `libraryURL`: The URL at route media_library.ui to open a browse dialog
+2. `previewURL`: The URL at route media.filter.preview to render a media preview
+3. `openDialog`: The function to open a Drupal dialog
+4. `themeError`: The markup to display if the preview fails
+
+Example config:
+
+```
+ClassicEditor
+  .create(editorElement, {
+    drupalMedia: {
+      libraryURL: '/media-library?...',
+      previewURL: '/media/{filter_format}/preview',
+      openDialog: Drupal.ckeditor5.openDialog,
+      themeError: Drupal.theme('mediaEmbedPreviewError'),
+    },
+ });
+  .then( ... )
+  .catch( ... );
+```
+
+## Build
+
+Run `npm run dll:build` to create the minified js.
+
+Check the file path in `webpack.config.js` to ensure it points to the dll
+manifest in your copy of `ckeditor5`.
diff --git a/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupallinkmedia/drupallinkmedia.js b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupallinkmedia/drupallinkmedia.js
new file mode 100644
index 000000000000..4e0bffd505a8
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupallinkmedia/drupallinkmedia.js
@@ -0,0 +1,25 @@
+/* eslint-disable import/no-extraneous-dependencies */
+/* cspell:words drupallinkmediaediting drupallinkmediaui */
+
+import { Plugin } from 'ckeditor5/src/core';
+import DrupalLinkMediaEditing from './drupallinkmediaediting';
+import DrupalLinkMediaUI from './drupallinkmediaui';
+
+/**
+ * @internal
+ */
+export default class DrupalLinkMedia extends Plugin {
+  /**
+   * @inheritdoc
+   */
+  static get requires() {
+    return [DrupalLinkMediaEditing, DrupalLinkMediaUI];
+  }
+
+  /**
+   * @inheritdoc
+   */
+  static get pluginName() {
+    return 'DrupalLinkMedia';
+  }
+}
diff --git a/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupallinkmedia/drupallinkmediaediting.js b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupallinkmedia/drupallinkmediaediting.js
new file mode 100644
index 000000000000..1770fdd61780
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupallinkmedia/drupallinkmediaediting.js
@@ -0,0 +1,230 @@
+/* eslint-disable import/no-extraneous-dependencies */
+/* cspell:words drupallinkmediaediting linkediting */
+import { Plugin } from 'ckeditor5/src/core';
+
+/**
+ * Returns the first drupal-media element in a given view element.
+ *
+ * @param {module:engine/view/element~Element} viewElement
+ *   The view element.
+ *
+ * @return {module:engine/view/element~Element|undefined}
+ *   The first <drupal-media> element or undefined if the element doesn't have
+ *   <drupal-media> as a child element.
+ */
+function getFirstMedia(viewElement) {
+  return Array.from(viewElement.getChildren()).find(
+    (child) => child.name === 'drupal-media',
+  );
+}
+
+/**
+ * Returns a converter that consumes the `href` attribute if a link contains a <drupal-media>.
+ *
+ * @return {Function}
+ *   A function that adds an event listener to upcastDispatcher.
+ */
+function upcastMediaLink() {
+  return (dispatcher) => {
+    dispatcher.on(
+      'element:a',
+      (evt, data, conversionApi) => {
+        const viewLink = data.viewItem;
+        const mediaInLink = getFirstMedia(viewLink);
+
+        if (!mediaInLink) {
+          return;
+        }
+
+        // There's an <drupal-media> inside an <a> element - we consume it so it
+        // won't be picked up by the Link plugin.
+        const consumableAttributes = { attributes: ['href'] };
+
+        // Consume the `href` attribute so the default one will not convert it to
+        // $text attribute.
+        if (!conversionApi.consumable.consume(viewLink, consumableAttributes)) {
+          // Might be consumed by something else - i.e. other converter with
+          // priority=highest - a standard check.
+          return;
+        }
+
+        const linkHref = viewLink.getAttribute('href');
+
+        // Missing the `href` attribute.
+        if (!linkHref) {
+          return;
+        }
+
+        const conversionResult = conversionApi.convertItem(
+          mediaInLink,
+          data.modelCursor,
+        );
+
+        // Set media range as conversion result.
+        data.modelRange = conversionResult.modelRange;
+
+        // Continue conversion where <drupal-media> conversion ends.
+        data.modelCursor = conversionResult.modelCursor;
+
+        const modelElement = data.modelCursor.nodeBefore;
+
+        if (modelElement && modelElement.is('element', 'drupalMedia')) {
+          // Set the `linkHref` attribute from <a> element on model drupalMedia
+          // element.
+          conversionApi.writer.setAttribute('linkHref', linkHref, modelElement);
+        }
+      },
+      { priority: 'high' },
+    );
+  };
+}
+
+/**
+ * Return a converter that adds the <a> element to view data.
+ *
+ * @return {Function}
+ *   A function that adds an event listener to downcastDispatcher.
+ */
+function dataDowncastMediaLink() {
+  return (dispatcher) => {
+    dispatcher.on(
+      'attribute:linkHref:drupalMedia',
+      (evt, data, conversionApi) => {
+        const { writer } = conversionApi;
+        if (!conversionApi.consumable.consume(data.item, evt.name)) {
+          return;
+        }
+
+        // The drupalMedia will be already converted - so it will be present in
+        // the view.
+        const mediaElement = conversionApi.mapper.toViewElement(data.item);
+
+        // If so, update the attribute if it's defined or remove the entire link
+        // if the attribute is empty. But if it does not exist. Let's wrap already
+        // converted drupalMedia by newly created link element.
+        // 1. Create an empty <a> element.
+        const linkElement = writer.createContainerElement('a', {
+          href: data.attributeNewValue,
+        });
+
+        // 2. Insert <a> before the <drupal-media> element.
+        writer.insert(writer.createPositionBefore(mediaElement), linkElement);
+
+        // 3. Move the drupal-media element inside the <a>.
+        writer.move(
+          writer.createRangeOn(mediaElement),
+          writer.createPositionAt(linkElement, 0),
+        );
+      },
+      { priority: 'high' },
+    );
+  };
+}
+
+/**
+ * Return a converter that adds the <a> element to editing view.
+ *
+ * @return {Function}
+ *   A function that adds an event listener to downcastDispatcher.
+ *
+ * @see https://github.com/ckeditor/ckeditor5/blob/v31.0.0/packages/ckeditor5-link/src/linkimageediting.js#L180
+ */
+function editingDowncastMediaLink() {
+  return (dispatcher) => {
+    dispatcher.on(
+      'attribute:linkHref:drupalMedia',
+      (evt, data, conversionApi) => {
+        const { writer } = conversionApi;
+        if (!conversionApi.consumable.consume(data.item, evt.name)) {
+          return;
+        }
+
+        // The drupalMedia will be already converted - so it will be present in
+        // the view.
+        const mediaContainer = conversionApi.mapper.toViewElement(data.item);
+        const linkInMedia = Array.from(mediaContainer.getChildren()).find(
+          (child) => child.name === 'a',
+        );
+
+        // If link already exists, instead of creating new link from scratch,
+        // update the existing link. This makes the UI rendering much smoother.
+        if (linkInMedia) {
+          // If attribute has a new value, update it. If new value doesn't exist,
+          // the link will be removed.
+          if (data.attributeNewValue) {
+            writer.setAttribute('href', data.attributeNewValue, linkInMedia);
+          } else {
+            // This is triggering elementToElement conversion for drupalMedia
+            // element which makes caused re-render of the media preview, making
+            // the media preview flicker once when media is unlinked.
+            // @todo ensure that this doesn't cause flickering after
+            //   https://www.drupal.org/i/3246380 has been addressed.
+            writer.move(
+              writer.createRangeIn(linkInMedia),
+              writer.createPositionAt(mediaContainer, 0),
+            );
+            writer.remove(linkInMedia);
+          }
+        } else {
+          const mediaPreview = Array.from(mediaContainer.getChildren()).find(
+            (child) => child.getAttribute('data-drupal-media-preview'),
+          );
+          // 1. Create an empty <a> element.
+          const linkElement = writer.createContainerElement('a', {
+            href: data.attributeNewValue,
+          });
+
+          // 2. Insert <a> inside the media container.
+          writer.insert(
+            writer.createPositionAt(mediaContainer, 0),
+            linkElement,
+          );
+
+          // 3. Move the media preview inside the <a>.
+          writer.move(
+            writer.createRangeOn(mediaPreview),
+            writer.createPositionAt(linkElement, 0),
+          );
+        }
+      },
+      { priority: 'high' },
+    );
+  };
+}
+
+/**
+ * Model to view and view to model conversions for linked media elements.
+ *
+ * @internal
+ *
+ * @see https://github.com/ckeditor/ckeditor5/blob/v31.0.0/packages/ckeditor5-link/src/linkimage.js
+ */
+export default class DrupalLinkMediaEditing extends Plugin {
+  /**
+   * @inheritdoc
+   */
+  static get requires() {
+    return ['LinkEditing', 'DrupalMediaEditing'];
+  }
+
+  /**
+   * @inheritdoc
+   */
+  static get pluginName() {
+    return 'DrupalLinkMediaEditing';
+  }
+
+  /**
+   * @inheritdoc
+   */
+  init() {
+    const { editor } = this;
+    editor.model.schema.extend('drupalMedia', {
+      allowAttributes: ['linkHref'],
+    });
+
+    editor.conversion.for('upcast').add(upcastMediaLink());
+    editor.conversion.for('editingDowncast').add(editingDowncastMediaLink());
+    editor.conversion.for('dataDowncast').add(dataDowncastMediaLink());
+  }
+}
diff --git a/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupallinkmedia/drupallinkmediaui.js b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupallinkmedia/drupallinkmediaui.js
new file mode 100644
index 000000000000..68a01a85b2c1
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupallinkmedia/drupallinkmediaui.js
@@ -0,0 +1,112 @@
+/* eslint-disable import/no-extraneous-dependencies */
+// cSpell:words linkui
+import { Plugin } from 'ckeditor5/src/core';
+import { LINK_KEYSTROKE } from '@ckeditor/ckeditor5-link/src/utils';
+import { ButtonView } from 'ckeditor5/src/ui';
+import linkIcon from '../../../../../icons/link.svg';
+
+/**
+ * The link media UI plugin.
+ *
+ * @internal
+ */
+export default class DrupalLinkMediaUI extends Plugin {
+  /**
+   * @inheritdoc
+   */
+  static get requires() {
+    return ['LinkEditing', 'LinkUI', 'DrupalMediaEditing'];
+  }
+
+  /**
+   * @inheritdoc
+   */
+  static get pluginName() {
+    return 'DrupalLinkMediaUi';
+  }
+
+  /**
+   * @inheritdoc
+   */
+  init() {
+    const { editor } = this;
+    const viewDocument = editor.editing.view.document;
+
+    this.listenTo(
+      viewDocument,
+      'click',
+      (evt, data) => {
+        if (this._isSelectedLinkedMedia(editor.model.document.selection)) {
+          // Prevent browser navigation when clicking a linked media.
+          data.preventDefault();
+
+          // Block the `LinkUI` plugin when a media was clicked. In such a case,
+          // we'd like to display the media toolbar.
+          evt.stop();
+        }
+      },
+      { priority: 'high' },
+    );
+    this._createToolbarLinkMediaButton();
+  }
+
+  /**
+   * Creates a `DrupalLinkMediaUI` button view.
+   *
+   * Clicking this button shows a {@link module:link/linkui~LinkUI#_balloon}
+   * attached to the selection. When an media is already linked, the view shows
+   * {@link module:link/linkui~LinkUI#actionsView} or
+   * {@link module:link/linkui~LinkUI#formView} if it is not.
+   */
+  _createToolbarLinkMediaButton() {
+    const { editor } = this;
+    const { t } = editor;
+
+    editor.ui.componentFactory.add('drupalLinkMedia', (locale) => {
+      const button = new ButtonView(locale);
+      const plugin = editor.plugins.get('LinkUI');
+      const linkCommand = editor.commands.get('link');
+
+      button.set({
+        isEnabled: true,
+        label: t('Link media'),
+        icon: linkIcon,
+        keystroke: LINK_KEYSTROKE,
+        tooltip: true,
+        isToggleable: true,
+      });
+
+      // Bind button to the command.
+      button.bind('isEnabled').to(linkCommand, 'isEnabled');
+      button.bind('isOn').to(linkCommand, 'value', (value) => !!value);
+
+      // Show the actionsView or formView (both from LinkUI) on button click
+      // depending on whether the media is already linked.
+      this.listenTo(button, 'execute', () => {
+        if (this._isSelectedLinkedMedia(editor.model.document.selection)) {
+          plugin._addActionsView();
+        } else {
+          plugin._showUI(true);
+        }
+      });
+
+      return button;
+    });
+  }
+
+  /**
+   * Returns true if a linked media is the only selected element in the model.
+   *
+   * @param {module:engine/model/selection~Selection} selection
+   * @return {Boolean}
+   */
+  // eslint-disable-next-line class-methods-use-this
+  _isSelectedLinkedMedia(selection) {
+    const selectedModelElement = selection.getSelectedElement();
+    return (
+      !!selectedModelElement &&
+      selectedModelElement.is('element', 'drupalMedia') &&
+      selectedModelElement.hasAttribute('linkHref')
+    );
+  }
+}
diff --git a/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmedia.js b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmedia.js
new file mode 100644
index 000000000000..c295fc15b3e2
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmedia.js
@@ -0,0 +1,25 @@
+/* eslint-disable import/no-extraneous-dependencies */
+/* cspell:words drupalmediaediting drupalmediageneralhtmlsupport drupalmediaui drupalmediatoolbar mediaimagetextalternative */
+
+import { Plugin } from 'ckeditor5/src/core';
+import DrupalMediaEditing from './drupalmediaediting';
+import DrupalMediaUI from './drupalmediaui';
+import DrupalMediaToolbar from './drupalmediatoolbar';
+
+import MediaImageTextAlternative from './mediaimagetextalternative';
+import DrupalMediaGeneralHtmlSupport from './drupalmediageneralhtmlsupport';
+
+/**
+ * @internal
+ */
+export default class DrupalMedia extends Plugin {
+  static get requires() {
+    return [
+      DrupalMediaEditing,
+      DrupalMediaGeneralHtmlSupport,
+      DrupalMediaUI,
+      DrupalMediaToolbar,
+      MediaImageTextAlternative,
+    ];
+  }
+}
diff --git a/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediaediting.js b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediaediting.js
new file mode 100644
index 000000000000..70c05e0093f8
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediaediting.js
@@ -0,0 +1,174 @@
+/* eslint-disable import/no-extraneous-dependencies */
+/* cspell:words insertdrupalmedia */
+
+import { Plugin } from 'ckeditor5/src/core';
+import { toWidget, Widget } from 'ckeditor5/src/widget';
+
+import InsertDrupalMediaCommand from './insertdrupalmedia';
+
+/**
+ * @internal
+ */
+export default class DrupalMediaEditing extends Plugin {
+  static get requires() {
+    return [Widget];
+  }
+
+  init() {
+    this.attrs = {
+      drupalMediaAlt: 'alt',
+      drupalMediaAlign: 'data-align',
+      drupalMediaCaption: 'data-caption',
+      drupalMediaEntityType: 'data-entity-type',
+      drupalMediaEntityUuid: 'data-entity-uuid',
+      drupalMediaViewMode: 'data-view-mode',
+    };
+    const options = this.editor.config.get('drupalMedia');
+    if (!options) {
+      return;
+    }
+    const { previewURL, themeError } = options;
+    this.previewURL = previewURL;
+    this.labelError = this.editor.t('Preview failed');
+    this.themeError =
+      themeError ||
+      `
+      <p>${this.editor.t(
+        'An error occurred while trying to preview the media. Please save your work and reload this page.',
+      )}<p>
+    `;
+
+    this._defineSchema();
+    this._defineConverters();
+
+    this.editor.commands.add(
+      'insertDrupalMedia',
+      new InsertDrupalMediaCommand(this.editor),
+    );
+  }
+
+  async _fetchPreview(url, query) {
+    const response = await fetch(`${url}?${new URLSearchParams(query)}`, {
+      headers: {
+        'X-Drupal-MediaPreview-CSRF-Token':
+          this.editor.config.get('drupalMedia').previewCsrfToken,
+      },
+    });
+    if (response.ok) {
+      const label = response.headers.get('drupal-media-label');
+      const preview = await response.text();
+      return { label, preview };
+    }
+
+    return { label: this.labelError, preview: this.themeError };
+  }
+
+  _defineSchema() {
+    const schema = this.editor.model.schema;
+    schema.register('drupalMedia', {
+      allowWhere: '$block',
+      isObject: true,
+      isContent: true,
+      allowAttributes: Object.keys(this.attrs),
+    });
+  }
+
+  _defineConverters() {
+    const conversion = this.editor.conversion;
+    conversion.for('upcast').elementToElement({
+      view: {
+        name: 'drupal-media',
+      },
+      model: 'drupalMedia',
+    });
+
+    conversion.for('dataDowncast').elementToElement({
+      model: 'drupalMedia',
+      view: {
+        name: 'drupal-media',
+      },
+    });
+
+    conversion.for('editingDowncast').elementToElement({
+      model: 'drupalMedia',
+      view: (modelElement, { writer: viewWriter }) => {
+        const container = viewWriter.createContainerElement('div', {
+          class: 'drupal-media',
+        });
+        const media = viewWriter.createRawElement(
+          'div',
+          { 'data-drupal-media-preview': 'loading' },
+          (domElement) => {
+            if (this.previewURL) {
+              this._fetchPreview(this.previewURL, {
+                text: this._renderElement(modelElement),
+                uuid: modelElement.getAttribute('drupalMediaEntityUuid'),
+              }).then(({ label, preview }) => {
+                domElement.innerHTML = preview;
+                domElement.setAttribute('aria-label', label);
+                domElement.setAttribute('data-drupal-media-preview', 'ready');
+              });
+            } else {
+              domElement.innerHTML = this.themeError;
+              domElement.setAttribute('aria-label', 'drupal-media');
+              domElement.setAttribute(
+                'data-drupal-media-preview',
+                'unavailable',
+              );
+            }
+          },
+        );
+        viewWriter.insert(viewWriter.createPositionAt(container, 0), media);
+        viewWriter.setCustomProperty('drupalMedia', true, container);
+        return toWidget(container, viewWriter, { label: 'media widget' });
+      },
+    });
+
+    // Set attributeToAttribute conversion for all supported attributes.
+    Object.keys(this.attrs).forEach((modelKey) => {
+      conversion.attributeToAttribute({
+        model: {
+          key: modelKey,
+          name: 'drupalMedia',
+        },
+        view: {
+          name: 'drupal-media',
+          key: this.attrs[modelKey],
+        },
+      });
+    });
+  }
+
+  /**
+   * MediaFilterController::preview requires the saved element.
+   *
+   * Not previewing data-caption since it does not get updated by new changes.
+   *
+   * @param {module:engine/model/element~Element} modelElement
+   *   The drupalMedia model element to be converted.
+   * @return {string}
+   *   The model element converted into HTML.
+   *
+   * @todo: is there a better way to get the rendered dataDowncast string
+   *   https://www.drupal.org/project/ckeditor5/issues/3231337?
+   */
+  _renderElement(modelElement) {
+    const attrs = modelElement.getAttributes();
+    let element = '<drupal-media';
+    Array.from(attrs).forEach((attr) => {
+      if (this.attrs[attr[0]] && attr[0] !== 'drupalMediaCaption') {
+        element += ` ${this.attrs[attr[0]]}="${attr[1]}"`;
+      }
+    });
+    element += '></drupal-media>';
+
+    return element;
+  }
+
+  /**
+   * @inheritdoc
+   */
+  static get pluginName() {
+    return 'DrupalMediaEditing';
+  }
+}
diff --git a/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediageneralhtmlsupport.js b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediageneralhtmlsupport.js
new file mode 100644
index 000000000000..a84f378ac8a4
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediageneralhtmlsupport.js
@@ -0,0 +1,182 @@
+/* eslint-disable import/no-extraneous-dependencies */
+// cSpell:words conversionutils datafilter
+import { Plugin } from 'ckeditor5/src/core';
+import { setViewAttributes } from '@ckeditor/ckeditor5-html-support/src/conversionutils';
+
+/**
+ * View-to-model conversion helper preserving allowed attributes on the Drupal Media model.
+ *
+ * @param {module:html-support/datafilter~DataFilter} dataFilter
+ *   The General HTML support data filter.
+ *
+ * @return {function}
+ *   function that adds an event listener to upcastDispatcher.
+ */
+function viewToModelDrupalMediaAttributeConverter(dataFilter) {
+  return (dispatcher) => {
+    dispatcher.on(
+      'element:drupal-media',
+      (evt, data, conversionApi) => {
+        function preserveElementAttributes(viewElement, attributeName) {
+          const viewAttributes = dataFilter._consumeAllowedAttributes(
+            viewElement,
+            conversionApi,
+          );
+
+          if (viewAttributes) {
+            conversionApi.writer.setAttribute(
+              attributeName,
+              viewAttributes,
+              data.modelRange,
+            );
+          }
+        }
+        function preserveLinkAttributes(linkElement) {
+          preserveElementAttributes(linkElement, 'htmlLinkAttributes');
+        }
+
+        const viewMediaElement = data.viewItem;
+        const viewContainerElement = viewMediaElement.parent;
+
+        if (viewContainerElement.is('element', 'a')) {
+          preserveLinkAttributes(viewContainerElement);
+        }
+      },
+      { priority: 'low' },
+    );
+  };
+}
+
+/**
+ * Gets descendant element from a container.
+ *
+ * @param {module:engine/model/writer~Writer} writer
+ *   The writer.
+ * @param {module:engine/view/element~Element} containerElement
+ *   The container element.
+ * @param {string} elementName
+ *   The element name.
+ * @return {module:engine/view/element~Element|undefined}
+ *   The descendant element matching element name or undefined if not found.
+ */
+function getDescendantElement(writer, containerElement, elementName) {
+  const range = writer.createRangeOn(containerElement);
+
+  // eslint-disable-next-line no-restricted-syntax
+  for (const { item } of range.getWalker()) {
+    if (item.is('element', elementName)) {
+      return item;
+    }
+  }
+}
+
+/**
+ * Model to editing view attribute converter.
+ *
+ * @return {function}
+ *   A function that adds an event listener to downcastDispatcher.
+ */
+function modelToEditingViewAttributeConverter() {
+  return (dispatcher) =>
+    dispatcher.on(
+      'attribute:linkHref:drupalMedia',
+      (evt, data, conversionApi) => {
+        if (
+          !conversionApi.consumable.consume(
+            data.item,
+            'attribute:htmlLinkAttributes:drupalMedia',
+          )
+        ) {
+          return;
+        }
+
+        const containerElement = conversionApi.mapper.toViewElement(data.item);
+        const viewElement = getDescendantElement(
+          conversionApi.writer,
+          containerElement,
+          'a',
+        );
+
+        setViewAttributes(
+          conversionApi.writer,
+          data.item.getAttribute('htmlLinkAttributes'),
+          viewElement,
+        );
+      },
+      { priority: 'low' },
+    );
+}
+
+/**
+ * Model to data view attribute converter.
+ *
+ * @return {function}
+ *   function that adds an event listener to downcastDispatcher.
+ */
+function modelToDataViewAttributeConverter() {
+  return (dispatcher) =>
+    dispatcher.on(
+      'attribute:linkHref:drupalMedia',
+      (evt, data, conversionApi) => {
+        if (
+          !conversionApi.consumable.consume(
+            data.item,
+            'attribute:htmlLinkAttributes:drupalMedia',
+          )
+        ) {
+          return;
+        }
+
+        const mediaElement = conversionApi.mapper.toViewElement(data.item);
+        const linkElement = mediaElement.parent;
+        setViewAttributes(
+          conversionApi.writer,
+          data.item.getAttribute('htmlLinkAttributes'),
+          linkElement,
+        );
+      },
+      { priority: 'low' },
+    );
+}
+
+/**
+ * Integrates Drupal Media with General HTML Support.
+ *
+ * @internal
+ */
+export default class DrupalMediaGeneralHtmlSupport extends Plugin {
+  /**
+   * @inheritdoc
+   */
+  init() {
+    const { editor } = this;
+
+    // This plugin is only needed if General HTML Support plugin is loaded.
+    if (!editor.plugins.has('GeneralHtmlSupport')) {
+      return;
+    }
+
+    const { schema } = editor.model;
+    const { conversion } = editor;
+    const dataFilter = editor.plugins.get('DataFilter');
+
+    schema.extend('drupalMedia', {
+      allowAttributes: ['htmlLinkAttributes'],
+    });
+
+    conversion
+      .for('upcast')
+      .add(viewToModelDrupalMediaAttributeConverter(dataFilter));
+    conversion
+      .for('editingDowncast')
+      .add(modelToEditingViewAttributeConverter());
+    conversion.for('dataDowncast').add(modelToDataViewAttributeConverter());
+  }
+
+  /**
+   * @inheritdoc
+   */
+  static get pluginName() {
+    return 'DrupalMediaGeneralHtmlSupport';
+  }
+}
diff --git a/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediatoolbar.js b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediatoolbar.js
new file mode 100644
index 000000000000..694ff4eca78c
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediatoolbar.js
@@ -0,0 +1,31 @@
+/* eslint-disable import/no-extraneous-dependencies */
+import { Plugin } from 'ckeditor5/src/core';
+import { WidgetToolbarRepository } from 'ckeditor5/src/widget';
+
+import { getSelectedDrupalMediaWidget } from './utils';
+
+/**
+ * @internal
+ */
+export default class DrupalMediaToolbar extends Plugin {
+  static get requires() {
+    return [WidgetToolbarRepository];
+  }
+
+  static get pluginName() {
+    return 'DrupalMediaToolbar';
+  }
+
+  afterInit() {
+    const editor = this.editor;
+    const { t } = editor;
+    const widgetToolbarRepository = editor.plugins.get(WidgetToolbarRepository);
+
+    widgetToolbarRepository.register('drupalMedia', {
+      ariaLabel: t('Drupal Media toolbar'),
+      items: editor.config.get('drupalMedia.toolbar') || [],
+      // Get the selected image or an image containing the figcaption with the selection inside.
+      getRelatedElement: (selection) => getSelectedDrupalMediaWidget(selection),
+    });
+  }
+}
diff --git a/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediaui.js b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediaui.js
new file mode 100644
index 000000000000..5e10d0ec719a
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/drupalmediaui.js
@@ -0,0 +1,49 @@
+/* eslint-disable import/no-extraneous-dependencies */
+// cspell:ignore medialibrary
+
+import { Plugin } from 'ckeditor5/src/core';
+import { ButtonView } from 'ckeditor5/src/ui';
+// cspell:ignore medialibrary
+import mediaIcon from '../theme/icons/medialibrary.svg';
+
+/**
+ * @internal
+ */
+export default class DrupalMediaUI extends Plugin {
+  init() {
+    const editor = this.editor;
+    const options = this.editor.config.get('drupalMedia');
+    if (!options) {
+      return;
+    }
+
+    const { libraryURL, openDialog, dialogSettings = {} } = options;
+    if (!libraryURL || typeof openDialog !== 'function') {
+      return;
+    }
+
+    editor.ui.componentFactory.add('drupalMedia', (locale) => {
+      const command = editor.commands.get('insertDrupalMedia');
+      const buttonView = new ButtonView(locale);
+
+      buttonView.set({
+        label: editor.t('Insert Drupal Media'),
+        icon: mediaIcon,
+        tooltip: true,
+      });
+
+      buttonView.bind('isOn', 'isEnabled').to(command, 'value', 'isEnabled');
+      this.listenTo(buttonView, 'execute', () => {
+        openDialog(
+          libraryURL,
+          ({ attributes }) => {
+            editor.execute('insertDrupalMedia', attributes);
+          },
+          dialogSettings,
+        );
+      });
+
+      return buttonView;
+    });
+  }
+}
diff --git a/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/index.js b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/index.js
new file mode 100644
index 000000000000..dfdc8cc22dd2
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/index.js
@@ -0,0 +1,23 @@
+/* eslint-disable import/no-extraneous-dependencies */
+// cspell:ignore mediaimagetextalternative
+
+import DrupalMedia from './drupalmedia';
+
+// cspell:ignore drupallinkmedia
+import DrupalLinkMedia from './drupallinkmedia/drupallinkmedia';
+
+// cspell:ignore mediaimagetextalternative
+import MediaImageTextAlternative from './mediaimagetextalternative';
+import MediaImageTextAlternativeEditing from './mediaimagetextalternative/mediaimagetextalternativeediting';
+import MediaImageTextAlternativeUi from './mediaimagetextalternative/mediaimagetextalternativeui';
+
+/**
+ * @internal
+ */
+export default {
+  DrupalMedia,
+  MediaImageTextAlternative,
+  MediaImageTextAlternativeEditing,
+  MediaImageTextAlternativeUi,
+  DrupalLinkMedia,
+};
diff --git a/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/insertdrupalmedia.js b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/insertdrupalmedia.js
new file mode 100644
index 000000000000..205d42caa4c3
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/insertdrupalmedia.js
@@ -0,0 +1,74 @@
+/* eslint-disable import/no-extraneous-dependencies */
+import { Command } from 'ckeditor5/src/core';
+
+function createDrupalMedia(writer, attributes) {
+  const drupalMedia = writer.createElement('drupalMedia', attributes);
+  return drupalMedia;
+}
+
+/**
+ * @internal
+ */
+/**
+ * The insert media command.
+ *
+ * The command is registered by the `DrupalMediaEditing` plugin as
+ * `insertDrupalMedia`.
+ *
+ * In order to insert media at the current selection position, execute the
+ * command and pass the attributes desired in the drupal-media element:
+ *
+ *    editor.execute('insertDrupalMedia', {
+ *      'alt': 'Alt text',
+ *      'data-align': 'left',
+ *      'data-caption': 'Caption text',
+ *      'data-entity-type': 'media',
+ *      'data-entity-uuid': 'media-entity-uuid',
+ *      'data-view-mode': 'default',
+ *    });
+ */
+export default class InsertDrupalMediaCommand extends Command {
+  execute(attributes) {
+    const mediaEditing = this.editor.plugins.get('DrupalMediaEditing');
+
+    // Create object that contains supported data-attributes in view data by
+    // flipping `DrupalMediaEditing.attrs` object (i.e. keys from object become
+    // values and values from object become keys).
+    const dataAttributeMapping = Object.entries(mediaEditing.attrs).reduce(
+      (result, [key, value]) => {
+        result[value] = key;
+        return result;
+      },
+      {},
+    );
+
+    // \Drupal\media\Form\EditorMediaDialog returns data in keyed by
+    // data-attributes used in view data. This converts data-attribute keys to
+    // keys used in model.
+    const modelAttributes = Object.keys(attributes).reduce(
+      (result, attribute) => {
+        if (dataAttributeMapping[attribute]) {
+          result[dataAttributeMapping[attribute]] = attributes[attribute];
+        }
+        return result;
+      },
+      {},
+    );
+
+    this.editor.model.change((writer) => {
+      this.editor.model.insertContent(
+        createDrupalMedia(writer, modelAttributes),
+      );
+    });
+  }
+
+  refresh() {
+    const model = this.editor.model;
+    const selection = model.document.selection;
+    const allowedIn = model.schema.findAllowedParent(
+      selection.getFirstPosition(),
+      'drupalMedia',
+    );
+    this.isEnabled = allowedIn !== null;
+  }
+}
diff --git a/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/mediaimagetextalternative.js b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/mediaimagetextalternative.js
new file mode 100644
index 000000000000..53d9dd4d4f45
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/mediaimagetextalternative.js
@@ -0,0 +1,26 @@
+/* eslint-disable import/no-extraneous-dependencies */
+import { Plugin } from 'ckeditor5/src/core';
+import MediaImageTextAlternativeEditing from './mediaimagetextalternative/mediaimagetextalternativeediting';
+import MediaImageTextAlternativeUi from './mediaimagetextalternative/mediaimagetextalternativeui';
+
+/**
+ * @internal
+ */
+/**
+ * The media image text alternative plugin.
+ */
+export default class MediaImageTextAlternative extends Plugin {
+  /**
+   * @inheritDoc
+   */
+  static get requires() {
+    return [MediaImageTextAlternativeEditing, MediaImageTextAlternativeUi];
+  }
+
+  /**
+   * @inheritDoc
+   */
+  static get pluginName() {
+    return 'MediaImageTextAlternative';
+  }
+}
diff --git a/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/mediaimagetextalternative/mediaimagetextalternativecommand.js b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/mediaimagetextalternative/mediaimagetextalternativecommand.js
new file mode 100644
index 000000000000..138d733b7974
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/mediaimagetextalternative/mediaimagetextalternativecommand.js
@@ -0,0 +1,77 @@
+/* eslint-disable import/no-extraneous-dependencies */
+import { Command } from 'ckeditor5/src/core';
+import { isDrupalMedia } from '../utils';
+
+/**
+ * The media image text alternative command.
+ *
+ * This is used to change the `alt` attribute of `<drupalMedia>` elements.
+ *
+ * @see https://github.com/ckeditor/ckeditor5/blob/master/packages/ckeditor5-image/src/imagetextalternative/imagetextalternativecommand.js
+ */
+export default class MediaImageTextAlternativeCommand extends Command {
+  /**
+   * The command value: `false` if there is no `alt` attribute, otherwise the value of the `alt` attribute.
+
+  /**
+   * @inheritDoc
+   */
+  refresh() {
+    const element = this.editor.model.document.selection.getSelectedElement();
+
+    this.isEnabled = false;
+    if (isDrupalMedia(element)) {
+      this._isMediaImage(element).then((hasImageField) => {
+        this.isEnabled = hasImageField;
+      });
+    }
+
+    if (isDrupalMedia(element) && element.hasAttribute('drupalMediaAlt')) {
+      this.value = element.getAttribute('drupalMediaAlt');
+    } else {
+      this.value = false;
+    }
+  }
+
+  /**
+   * Executes the command.
+   *
+   * @param {Object} options
+   *   An options object.
+   * @param {String} options.newValue The new value of the `alt` attribute to set.
+   */
+  execute(options) {
+    const { model } = this.editor;
+    const imageElement = model.document.selection.getSelectedElement();
+
+    options.newValue = options.newValue.trim();
+    model.change((writer) => {
+      if (options.newValue.length > 0) {
+        writer.setAttribute('drupalMediaAlt', options.newValue, imageElement);
+      } else {
+        writer.removeAttribute('drupalMediaAlt', imageElement);
+      }
+    });
+  }
+
+  async _isMediaImage(modelElement) {
+    const options = this.editor.config.get('drupalMedia');
+    if (!options) {
+      return null;
+    }
+
+    const { isMediaUrl } = options;
+    const query = new URLSearchParams({
+      uuid: modelElement.getAttribute('drupalMediaEntityUuid'),
+    });
+    // The `isMediaUrl` received from the server is guaranteed to already have
+    // a query string (for the CSRF token).
+    // @see \Drupal\ckeditor5\Plugin\CKEditor5Plugin\Media::getDynamicPluginConfig()
+    const response = await fetch(`${isMediaUrl}&${query}`);
+    if (response.ok) {
+      return JSON.parse(await response.text());
+    }
+
+    return null;
+  }
+}
diff --git a/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/mediaimagetextalternative/mediaimagetextalternativeediting.js b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/mediaimagetextalternative/mediaimagetextalternativeediting.js
new file mode 100644
index 000000000000..d1a532b0e98f
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/mediaimagetextalternative/mediaimagetextalternativeediting.js
@@ -0,0 +1,27 @@
+/* eslint-disable import/no-extraneous-dependencies */
+/* cspell:words mediaimagetextalternativecommand textalternativeformview */
+
+import { Plugin } from 'ckeditor5/src/core';
+import MediaImageTextAlternativeCommand from './mediaimagetextalternativecommand';
+
+/**
+ * The image text alternative editing plugin.
+ */
+export default class MediaImageTextAlternativeEditing extends Plugin {
+  /**
+   * @inheritDoc
+   */
+  static get pluginName() {
+    return 'MediaImageTextAlternativeEditing';
+  }
+
+  /**
+   * @inheritDoc
+   */
+  init() {
+    this.editor.commands.add(
+      'mediaImageTextAlternative',
+      new MediaImageTextAlternativeCommand(this.editor),
+    );
+  }
+}
diff --git a/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/mediaimagetextalternative/mediaimagetextalternativeui.js b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/mediaimagetextalternative/mediaimagetextalternativeui.js
new file mode 100644
index 000000000000..28ca24ef5ab7
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/mediaimagetextalternative/mediaimagetextalternativeui.js
@@ -0,0 +1,218 @@
+/* eslint-disable import/no-extraneous-dependencies */
+/* cspell:words textalternativeformview */
+
+import { Plugin, icons } from 'ckeditor5/src/core';
+import {
+  ButtonView,
+  ContextualBalloon,
+  clickOutsideHandler,
+} from 'ckeditor5/src/ui';
+
+import { getSelectedDrupalMediaWidget } from '../utils';
+import {
+  getBalloonPositionData,
+  repositionContextualBalloon,
+} from '../ui/utils';
+
+import TextAlternativeFormView from './ui/textalternativeformview';
+
+/**
+ * The media image text alternative UI plugin.
+ *
+ * @see https://github.com/ckeditor/ckeditor5/blob/master/packages/ckeditor5-image/src/imagetextalternative/imagetextalternativeui.js
+ */
+export default class MediaImageTextAlternativeUi extends Plugin {
+  /**
+   * @inheritDoc
+   */
+  static get requires() {
+    return [ContextualBalloon];
+  }
+
+  /**
+   * @inheritDoc
+   */
+  static get pluginName() {
+    return 'MediaImageTextAlternativeUi';
+  }
+
+  /**
+   * @inheritDoc
+   */
+  init() {
+    this._createButton();
+    this._createForm();
+  }
+
+  /**
+   * @inheritDoc
+   */
+  destroy() {
+    super.destroy();
+    this._form.destroy();
+  }
+
+  /**
+   * Creates a button showing the balloon panel for changing the image text
+   * alternative and registers it in the editor ComponentFactory.
+   */
+  _createButton() {
+    const editor = this.editor;
+    const t = editor.t;
+
+    editor.ui.componentFactory.add('mediaImageTextAlternative', (locale) => {
+      const command = editor.commands.get('mediaImageTextAlternative');
+      const view = new ButtonView(locale);
+
+      view.set({
+        label: t('Override media image text alternative'),
+        icon: icons.lowVision,
+        tooltip: true,
+      });
+
+      view.bind('isVisible').to(command, 'isEnabled');
+
+      this.listenTo(view, 'execute', () => {
+        this._showForm();
+      });
+
+      return view;
+    });
+  }
+
+  /**
+   * Creates the {@link module:image/imagetextalternative/ui/textalternativeformview~TextAlternativeFormView}
+   * form.
+   *
+   * @private
+   */
+  _createForm() {
+    const editor = this.editor;
+    const view = editor.editing.view;
+    const viewDocument = view.document;
+
+    /**
+     * The contextual balloon plugin instance.
+     */
+    this._balloon = this.editor.plugins.get('ContextualBalloon');
+
+    /**
+     * A form containing a textarea and buttons, used to change the `alt` text value.
+     */
+    this._form = new TextAlternativeFormView(editor.locale);
+
+    // Render the form so its #element is available for clickOutsideHandler.
+    this._form.render();
+
+    this.listenTo(this._form, 'submit', () => {
+      editor.execute('mediaImageTextAlternative', {
+        newValue: this._form.labeledInput.fieldView.element.value,
+      });
+
+      this._hideForm(true);
+    });
+
+    this.listenTo(this._form, 'cancel', () => {
+      this._hideForm(true);
+    });
+
+    // Close the form on Esc key press.
+    this._form.keystrokes.set('Esc', (data, cancel) => {
+      this._hideForm(true);
+      cancel();
+    });
+
+    // Reposition the balloon or hide the form if an image widget is no longer selected.
+    this.listenTo(editor.ui, 'update', () => {
+      if (!getSelectedDrupalMediaWidget(viewDocument.selection)) {
+        this._hideForm(true);
+      } else if (this._isVisible) {
+        repositionContextualBalloon(editor);
+      }
+    });
+
+    // Close on click outside of balloon panel element.
+    clickOutsideHandler({
+      emitter: this._form,
+      activator: () => this._isVisible,
+      contextElements: [this._balloon.view.element],
+      callback: () => this._hideForm(),
+    });
+  }
+
+  /**
+   * Shows the form in a balloon.
+   */
+  _showForm() {
+    if (this._isVisible) {
+      return;
+    }
+
+    const editor = this.editor;
+    const command = editor.commands.get('mediaImageTextAlternative');
+    const labeledInput = this._form.labeledInput;
+
+    this._form.disableCssTransitions();
+
+    if (!this._isInBalloon) {
+      this._balloon.add({
+        view: this._form,
+        position: getBalloonPositionData(editor),
+      });
+    }
+
+    // Make sure that each time the panel shows up, the field remains in sync with the value of
+    // the command. If the user typed in the input, then canceled the balloon (`labeledInput#value`
+    // stays unaltered) and re-opened it without changing the value of the command, they would see the
+    // old value instead of the actual value of the command.
+    // https://github.com/ckeditor/ckeditor5-image/issues/114
+    labeledInput.fieldView.element.value = command.value || '';
+    labeledInput.fieldView.value = labeledInput.fieldView.element.value;
+
+    this._form.labeledInput.fieldView.select();
+
+    this._form.enableCssTransitions();
+  }
+
+  /**
+   * Removes the {@link #_form} from the {@link #_balloon}.
+   *
+   * @param {Boolean} [focusEditable=false] Controls whether the editing view is focused afterwards.
+   * @private
+   */
+  _hideForm(focusEditable) {
+    if (!this._isInBalloon) {
+      return;
+    }
+
+    // Blur the input element before removing it from DOM to prevent issues in some browsers.
+    // See https://github.com/ckeditor/ckeditor5/issues/1501.
+    if (this._form.focusTracker.isFocused) {
+      this._form.saveButtonView.focus();
+    }
+
+    this._balloon.remove(this._form);
+
+    if (focusEditable) {
+      this.editor.editing.view.focus();
+    }
+  }
+
+  /**
+   * Returns `true` when the form is the visible view in the balloon.
+   *
+   * @type {Boolean}
+   */
+  get _isVisible() {
+    return this._balloon.visibleView === this._form;
+  }
+
+  /**
+   * Returns `true` when the form is in the balloon.
+   *
+   * @type {Boolean}
+   */
+  get _isInBalloon() {
+    return this._balloon.hasView(this._form);
+  }
+}
diff --git a/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/mediaimagetextalternative/ui/textalternativeformview.js b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/mediaimagetextalternative/ui/textalternativeformview.js
new file mode 100644
index 000000000000..49d865f81727
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/mediaimagetextalternative/ui/textalternativeformview.js
@@ -0,0 +1,173 @@
+/* eslint-disable import/no-extraneous-dependencies */
+
+// cspell:ignore focusables
+
+import {
+  ButtonView,
+  FocusCycler,
+  LabeledFieldView,
+  View,
+  ViewCollection,
+  createLabeledInputText,
+  injectCssTransitionDisabler,
+  submitHandler,
+} from 'ckeditor5/src/ui';
+import { FocusTracker, KeystrokeHandler } from 'ckeditor5/src/utils';
+import { icons } from 'ckeditor5/src/core';
+
+// cspell:ignore focusables
+
+export default class TextAlternativeFormView extends View {
+  /**
+   * @inheritdoc
+   */
+  constructor(locale) {
+    super(locale);
+
+    const t = this.locale.t;
+
+    /**
+     * Tracks information about the DOM focus in the form.
+     */
+    this.focusTracker = new FocusTracker();
+
+    /**
+     * An instance of the KeystrokeHandler.
+     */
+    this.keystrokes = new KeystrokeHandler();
+
+    /**
+     * An input with a label.
+     */
+    this.labeledInput = this._createLabeledInputView();
+
+    /**
+     * A button used to submit the form.
+     */
+    this.saveButtonView = this._createButton(
+      t('Save'),
+      icons.check,
+      'ck-button-save',
+    );
+    this.saveButtonView.type = 'submit';
+
+    /**
+     * A button used to cancel the form.
+     */
+    this.cancelButtonView = this._createButton(
+      t('Cancel'),
+      icons.cancel,
+      'ck-button-cancel',
+      'cancel',
+    );
+
+    /**
+     * A collection of views which can be focused in the form.
+     */
+    this._focusables = new ViewCollection();
+
+    /**
+     * Helps cycling over focusables in the form.
+     */
+    this._focusCycler = new FocusCycler({
+      focusables: this._focusables,
+      focusTracker: this.focusTracker,
+      keystrokeHandler: this.keystrokes,
+      actions: {
+        // Navigate form fields backwards using the Shift + Tab keystroke.
+        focusPrevious: 'shift + tab',
+
+        // Navigate form fields forwards using the Tab key.
+        focusNext: 'tab',
+      },
+    });
+
+    this.setTemplate({
+      tag: 'form',
+
+      attributes: {
+        class: ['ck', 'ck-text-alternative-form', 'ck-responsive-form'],
+        tabindex: '-1',
+      },
+
+      children: [this.labeledInput, this.saveButtonView, this.cancelButtonView],
+    });
+
+    injectCssTransitionDisabler(this);
+  }
+
+  /**
+   * @inheritdoc
+   */
+  render() {
+    super.render();
+
+    this.keystrokes.listenTo(this.element);
+
+    submitHandler({ view: this });
+
+    [this.labeledInput, this.saveButtonView, this.cancelButtonView].forEach(
+      (v) => {
+        // Register the view as focusable.
+        this._focusables.add(v);
+
+        // Register the view in the focus tracker.
+        this.focusTracker.add(v.element);
+      },
+    );
+  }
+
+  /**
+   * Creates the button view.
+   *
+   * @param {String} label
+   *   The button label
+   * @param {String} icon
+   *   The button's icon.
+   * @param {String} className
+   *   The additional button CSS class name.
+   * @param {String} [eventName]
+   *   The event name that the ButtonView#execute event will be delegated to.
+   * @return {module:ui/view~View}
+   *   The button view instance.
+   */
+  _createButton(label, icon, className, eventName) {
+    const button = new ButtonView(this.locale);
+
+    button.set({
+      label,
+      icon,
+      tooltip: true,
+    });
+
+    button.extendTemplate({
+      attributes: {
+        class: className,
+      },
+    });
+
+    if (eventName) {
+      button.delegate('execute').to(this, eventName);
+    }
+
+    return button;
+  }
+
+  /**
+   * Creates an input with a label.
+   *
+   * @return {module:ui/view~View}
+   *   Labeled field view instance.
+   */
+  _createLabeledInputView() {
+    const t = this.locale.t;
+    const labeledInput = new LabeledFieldView(
+      this.locale,
+      createLabeledInputText,
+    );
+
+    labeledInput.label = t('Override text alternative');
+
+    return labeledInput;
+  }
+}
diff --git a/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/ui/utils.js b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/ui/utils.js
new file mode 100644
index 000000000000..8201692ea783
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/ui/utils.js
@@ -0,0 +1,53 @@
+/* eslint-disable import/no-extraneous-dependencies */
+
+import { BalloonPanelView } from 'ckeditor5/src/ui';
+import { getSelectedDrupalMediaWidget } from '../utils';
+
+/**
+ * Returns the positioning options that control the geometry of the contextual
+ * balloon with respect to the selected element in the editor content.
+ *
+ * @param {module:core/editor/editor~Editor} editor
+ *   The editor instance.
+ * @return {Object}
+ *   The options.
+ *
+ * @internal
+ */
+export function getBalloonPositionData(editor) {
+  const editingView = editor.editing.view;
+  const defaultPositions = BalloonPanelView.defaultPositions;
+
+  return {
+    target: editingView.domConverter.viewToDom(
+      editingView.document.selection.getSelectedElement(),
+    ),
+    positions: [
+      defaultPositions.northArrowSouth,
+      defaultPositions.northArrowSouthWest,
+      defaultPositions.northArrowSouthEast,
+      defaultPositions.southArrowNorth,
+      defaultPositions.southArrowNorthWest,
+      defaultPositions.southArrowNorthEast,
+    ],
+  };
+}
+
+/**
+ * A helper utility that positions the contextual balloon instance with respect
+ * to the image in the editor content, if one is selected.
+ *
+ * @param {module:core/editor/editor~Editor} editor
+ *   The editor instance.
+ *
+ * @internal
+ */
+export function repositionContextualBalloon(editor) {
+  const balloon = editor.plugins.get('ContextualBalloon');
+
+  if (getSelectedDrupalMediaWidget(editor.editing.view.document.selection)) {
+    const position = getBalloonPositionData(editor);
+
+    balloon.updatePosition(position);
+  }
+}
diff --git a/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/utils.js b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/utils.js
new file mode 100644
index 000000000000..3289b8931536
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/src/utils.js
@@ -0,0 +1,51 @@
+/* eslint-disable import/no-extraneous-dependencies */
+import { isWidget } from 'ckeditor5/src/widget';
+
+/**
+ * Checks if the provided model element is `drupalMedia`.
+ *
+ * @param {module:engine/model/element~Element} modelElement
+ *   The model element to be checked.
+ * @return {boolean}
+ *   A boolean indicating whether element is drupalMedia element.
+ *
+ * @internal
+ */
+export function isDrupalMedia(modelElement) {
+  return !!modelElement && modelElement.is('element', 'drupalMedia');
+}
+
+/**
+ * Checks if view element is <drupal-media> element.
+ *
+ * @param {module:engine/view/element~Element} viewElement
+ *   The view element.
+ * @return {boolean}
+ *   A boolean indicating whether element is <drupal-media> element.
+ *
+ * @internal
+ */
+export function isDrupalMediaWidget(viewElement) {
+  return (
+    isWidget(viewElement) && !!viewElement.getCustomProperty('drupalMedia')
+  );
+}
+
+/**
+ * Gets selected Drupal Media widget if only Drupal Media is currently selected.
+ *
+ * @param {module:engine/model/selection~Selection} selection
+ *   The current selection.
+ * @return {module:engine/view/element~Element|null}
+ *   The currently selected Drupal Media widget or null.
+ *
+ * @internal
+ */
+export function getSelectedDrupalMediaWidget(selection) {
+  const viewElement = selection.getSelectedElement();
+  if (viewElement && isDrupalMediaWidget(viewElement)) {
+    return viewElement;
+  }
+
+  return null;
+}
diff --git a/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/theme/icons/medialibrary.svg b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/theme/icons/medialibrary.svg
new file mode 100644
index 000000000000..f96cff494c72
--- /dev/null
+++ b/core/modules/ckeditor5/js/ckeditor5_plugins/drupalMedia/theme/icons/medialibrary.svg
@@ -0,0 +1 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M19.1873 4.86414L10.2509 6.86414V7.02335H10.2499V15.5091C9.70972 15.1961 9.01793 15.1048 8.34069 15.3136C7.12086 15.6896 6.41013 16.8967 6.75322 18.0096C7.09631 19.1226 8.3633 19.72 9.58313 19.344C10.6666 19.01 11.3484 18.0203 11.2469 17.0234H11.2499V9.80173L18.1803 8.25067V14.3868C17.6401 14.0739 16.9483 13.9825 16.2711 14.1913C15.0513 14.5674 14.3406 15.7744 14.6836 16.8875C15.0267 18.0004 16.2937 18.5978 17.5136 18.2218C18.597 17.8877 19.2788 16.8982 19.1773 15.9011H19.1803V8.02687L19.1873 8.0253V4.86414Z" fill="black"/><path fill-rule="evenodd" clip-rule="evenodd" d="M13.5039 0.743652H0.386932V12.1603H13.5039V0.743652ZM12.3379 1.75842H1.55289V11.1454H1.65715L4.00622 8.86353L6.06254 10.861L9.24985 5.91309L11.3812 9.22179L11.7761 8.6676L12.3379 9.45621V1.75842ZM6.22048 4.50869C6.22048 5.58193 5.35045 6.45196 4.27722 6.45196C3.20398 6.45196 2.33395 5.58193 2.33395 4.50869C2.33395 3.43546 3.20398 2.56543 4.27722 2.56543C5.35045 2.56543 6.22048 3.43546 6.22048 4.50869Z" fill="black"/></svg>
diff --git a/core/modules/ckeditor5/js/ie11.filter.warnings.es6.js b/core/modules/ckeditor5/js/ie11.filter.warnings.es6.js
new file mode 100644
index 000000000000..aeee85ed5c11
--- /dev/null
+++ b/core/modules/ckeditor5/js/ie11.filter.warnings.es6.js
@@ -0,0 +1,131 @@
+/**
+ * @file
+ * Provides IE11 compatibility warnings when choosing a text editor.
+ */
+
+((Drupal, once, Modernizr) => {
+  /**
+   * Presents a warning when selecting CKEditor 5 as a text format's text editor.
+   *
+   * @type {Drupal~behavior}
+   */
+  Drupal.behaviors.ckEditor5warn = {
+    attach: function attach() {
+      const isIE11 = Modernizr.mq(
+        '(-ms-high-contrast: active), (-ms-high-contrast: none)',
+      );
+      const editorSelect = once(
+        'editor-select',
+        document.querySelector(
+          '#filter-format-edit-form #edit-editor-editor, #filter-format-add-form #edit-editor-editor',
+        ),
+      );
+
+      if (typeof editorSelect[0] !== 'undefined') {
+        const select = editorSelect[0];
+
+        // Add a container for messages above the text format select element.
+        const selectMessageContainer = document.createElement('div');
+        select.parentNode.insertBefore(selectMessageContainer, select);
+        const selectMessages = new Drupal.Message(selectMessageContainer);
+        const editorSettings = document.querySelector(
+          '#editor-settings-wrapper',
+        );
+
+        /**
+         * Adds an IE11 compatibility warning to the message container.
+         */
+        const ck5Warning = () => {
+          selectMessages.add(
+            Drupal.t(
+              'CKEditor 5 is not compatible with Internet Explorer 11. Text fields using CKEditor 5 will still be editable but without the benefits of CKEditor.',
+            ),
+            {
+              type: 'warning',
+            },
+          );
+          if (isIE11) {
+            // https://www.drupal.org/docs/system-requirements/browser-requirements
+            selectMessages.add(
+              Drupal.t(
+                'Text editor toolbar settings are not available. They will be available in any <a href="@supported-browsers">supported browser</a> other than Internet Explorer',
+                {
+                  '@supported-browsers':
+                    'https://www.drupal.org/docs/system-requirements/browser-requirements',
+                },
+              ),
+              {
+                type: 'error',
+              },
+            );
+            editorSettings.hidden = true;
+          }
+        };
+
+        /**
+         * Adds a warning if the selected editor is ckeditor5, otherwise clears
+         * the message container.
+         */
+        const updateWarningStatus = () => {
+          if (
+            select.value === 'ckeditor5' &&
+            !select.classList.contains('error')
+          ) {
+            ck5Warning();
+          } else {
+            editorSettings.hidden = false;
+            selectMessages.clear();
+          }
+        };
+
+        const selectChangeHandler = () => {
+          // Declare the observer first so the observer callback can access it.
+          let editorSelectObserver = null;
+
+          /**
+           * MutationObserver callback for the editor select.
+           *
+           * This listens for the removal 'disabled' attribute on the <select>,
+           * which means the AJAX callback has completed and the form is in a
+           * state suitable for seeing if the IE11 warning is needed.
+           *
+           * @param {Array} mutations
+           *   The element's mutations.
+           */
+          function whenSelectAttributeChanges(mutations) {
+            for (let i = 0; i < mutations.length; i++) {
+              // When the select input is no longer disabled, the AJAX request
+              // is complete and the UI is in a state where it can be determined
+              // if the IE11 warning is needed.
+              if (
+                mutations[i].type === 'attributes' &&
+                mutations[i].attributeName === 'disabled' &&
+                !select.disabled
+              ) {
+                updateWarningStatus();
+                editorSelectObserver.disconnect();
+              }
+            }
+          }
+
+          // An observer is used because during the select change event, it is
+          // not yet known if validation prevented the switch to CKEditor 5.
+          // The IE11 warning should only appear if the switch wasn't prevented
+          // by validation.
+          editorSelectObserver = new MutationObserver(
+            whenSelectAttributeChanges,
+          );
+          editorSelectObserver.observe(select, {
+            attributes: true,
+            attributeOldValue: true,
+          });
+        };
+
+        updateWarningStatus();
+
+        // Listen to text format selection changes.
+        select.addEventListener('change', selectChangeHandler);
+      }
+    },
+  };
+})(Drupal, once, Modernizr);
diff --git a/core/modules/ckeditor5/js/ie11.filter.warnings.js b/core/modules/ckeditor5/js/ie11.filter.warnings.js
new file mode 100644
index 000000000000..2afbf8b6a774
--- /dev/null
+++ b/core/modules/ckeditor5/js/ie11.filter.warnings.js
@@ -0,0 +1,69 @@
+/**
+* DO NOT EDIT THIS FILE.
+* See the following change record for more information,
+* https://www.drupal.org/node/2815083
+* @preserve
+**/
+
+(function (Drupal, once, Modernizr) {
+  Drupal.behaviors.ckEditor5warn = {
+    attach: function attach() {
+      var isIE11 = Modernizr.mq('(-ms-high-contrast: active), (-ms-high-contrast: none)');
+      var editorSelect = once('editor-select', document.querySelector('#filter-format-edit-form #edit-editor-editor, #filter-format-add-form #edit-editor-editor'));
+
+      if (typeof editorSelect[0] !== 'undefined') {
+        var select = editorSelect[0];
+        var selectMessageContainer = document.createElement('div');
+        select.parentNode.insertBefore(selectMessageContainer, select);
+        var selectMessages = new Drupal.Message(selectMessageContainer);
+        var editorSettings = document.querySelector('#editor-settings-wrapper');
+
+        var ck5Warning = function ck5Warning() {
+          selectMessages.add(Drupal.t('CKEditor 5 is not compatible with Internet Explorer 11. Text fields using CKEditor 5 will still be editable but without the benefits of CKEditor.'), {
+            type: 'warning'
+          });
+
+          if (isIE11) {
+            selectMessages.add(Drupal.t('Text editor toolbar settings are not available. They will be available in any <a href="@supported-browsers">supported browser</a> other than Internet Explorer', {
+              '@supported-browsers': 'https://www.drupal.org/docs/system-requirements/browser-requirements'
+            }), {
+              type: 'error'
+            });
+            editorSettings.hidden = true;
+          }
+        };
+
+        var updateWarningStatus = function updateWarningStatus() {
+          if (select.value === 'ckeditor5' && !select.classList.contains('error')) {
+            ck5Warning();
+          } else {
+            editorSettings.hidden = false;
+            selectMessages.clear();
+          }
+        };
+
+        var selectChangeHandler = function selectChangeHandler() {
+          var editorSelectObserver = null;
+
+          function whenSelectAttributeChanges(mutations) {
+            for (var i = 0; i < mutations.length; i++) {
+              if (mutations[i].type === 'attributes' && mutations[i].attributeName === 'disabled' && !select.disabled) {
+                updateWarningStatus();
+                editorSelectObserver.disconnect();
+              }
+            }
+          }
+
+          editorSelectObserver = new MutationObserver(whenSelectAttributeChanges);
+          editorSelectObserver.observe(select, {
+            attributes: true,
+            attributeOldValue: true
+          });
+        };
+
+        updateWarningStatus();
+        select.addEventListener('change', selectChangeHandler);
+      }
+    }
+  };
+})(Drupal, once, Modernizr);
\ No newline at end of file
diff --git a/core/modules/ckeditor5/js/ie11.user.warnings.es6.js b/core/modules/ckeditor5/js/ie11.user.warnings.es6.js
new file mode 100644
index 000000000000..3fe12292cc6a
--- /dev/null
+++ b/core/modules/ckeditor5/js/ie11.user.warnings.es6.js
@@ -0,0 +1,137 @@
+/**
+ * @file
+ * Provide warnings when attempting to load CKEditor 5 on IE11.
+ */
+
+((Drupal, Modernizr) => {
+  const isIE11 = Modernizr.mq(
+    '(-ms-high-contrast: active), (-ms-high-contrast: none)',
+  );
+
+  // If the browser is IE11, create an alternate version of
+  // Drupal.editors.ckeditor5 that provides warnings. In IE11, the incompatible
+  // Javascript of CKEditor 5 prevents Drupal.editors.ckeditor5 from being
+  // created. Features such as Quick Edit that require the presence of a
+  // Drupal.editors.ckeditor5, even for fields that do not use CKEditor 5.
+  if (isIE11) {
+    // This will reference a MutationObserver used by several functions in
+    // Drupal.editors.ckeditor5. It is declared here and not the editor object
+    // in order to work with IE11 object scope.
+    let quickEditLabelObserver = null;
+
+    /**
+     * @namespace
+     */
+    Drupal.editors.ckeditor5 = {
+      /**
+       * Provides a warning when trying to attach CKEditor 5 to a field in IE11.
+       *
+       * @param {HTMLElement} element
+       *   The element the editor would have been attached to.
+       */
+      attach: function attach(element) {
+        // Add a Drupal.Message container above the textarea and use it to
+        // provide a warning message to IE11 users.
+        const editorMessageContainer = document.createElement('div');
+        element.parentNode.insertBefore(editorMessageContainer, element);
+        const editorMessages = new Drupal.Message(editorMessageContainer);
+        editorMessages.add(
+          Drupal.t(
+            'Internet Explorer 11 user: a rich text editor is available for this field when used with any other supported browser.',
+          ),
+          {
+            type: 'warning',
+          },
+        );
+      },
+
+      /**
+       * Editor detach callback.
+       */
+      detach: function detach() {
+        const quickEditToolbar = document.querySelector(
+          '#quickedit-entity-toolbar .quickedit-toolbar',
+        );
+        if (quickEditToolbar) {
+          // Remove classes that style the Quick Edit toolbar as a warning.
+          quickEditToolbar.classList.remove('ck5-ie11');
+          quickEditToolbar.classList.add('icon-pencil');
+
+          // Disconnect the observer from the Quick Edit label that converts the
+          // label to a warning. A warning isn't needed for fields not using
+          // CKEditor 5.
+          quickEditLabelObserver.disconnect();
+        }
+      },
+
+      /**
+       * Registers a callback which CKEditor 5 will call on change:data event.
+       */
+      onChange: function onChange() {
+        // Intentionally empty.
+      },
+
+      /**
+       * Provides a warning when Quick Edit tries to attach CKEditor 5 in IE11.
+       *
+       * @param {HTMLElement} element
+       *   The element the editor would have been attached to.
+       *
+       * @see Drupal.quickedit.editors.editor
+       */
+      attachInlineEditor: function attachInlineEditor(element) {
+        const quickEditToolbar = document.querySelector(
+          '#quickedit-entity-toolbar .quickedit-toolbar',
+        );
+
+        const notEditableAlert = Drupal.t('Field Not Editable');
+        const notEditableMessage = Drupal.t(
+          'CKEditor 5 is not compatible with IE11.',
+        );
+
+        /**
+         * Changes the Quick Edit label to a warning.
+         *
+         * @param {Element} toolbarLabel
+         *   The Quick Edit toolbar label element.
+         */
+        function quickEditLabelWarnIE11(toolbarLabel) {
+          // Disconnect the observer to prevent infinite recursion.
+          quickEditLabelObserver.disconnect();
+
+          // Change the quickEdit toolbar label to a warning that informs
+          // IE11 users that they can't edit the field due to CKEditor not
+          // working with IE11.
+          toolbarLabel.innerHTML = `<div><b>${notEditableAlert}</b><div>${notEditableMessage}</div></div>`;
+          quickEditLabelObserver.observe(toolbarLabel, { childList: true });
+        }
+
+        if (quickEditToolbar) {
+          quickEditToolbar.classList.add('ck5-ie11');
+          quickEditToolbar.classList.remove('icon-pencil');
+          element.classList.add('ck5-ie11');
+
+          // Prepare variables that will be used for changing the QuickEdit
+          // toolbar label to a warning.
+          const toolbarLabel = quickEditToolbar.querySelector(
+            '.quickedit-toolbar-label',
+          );
+
+          // Updating the Quick Edit label to display as a warning is triggered
+          // via an observer. An observer us used as there are multiple
+          // Quick Edit Backbone View events that alter the contents of this
+          // label. An observer is used to guarantee the warning persists
+          // without having to override multiple Backbone event handlers.
+          quickEditLabelObserver = new MutationObserver((mutations) => {
+            for (let i = 0; i < mutations.length; i++) {
+              if (mutations[i].type === 'childList') {
+                quickEditLabelWarnIE11(toolbarLabel);
+              }
+            }
+          });
+          quickEditLabelObserver.observe(toolbarLabel, { childList: true });
+        }
+      },
+    };
+  }
+})(Drupal, Modernizr);
diff --git a/core/modules/ckeditor5/js/ie11.user.warnings.js b/core/modules/ckeditor5/js/ie11.user.warnings.js
new file mode 100644
index 000000000000..d1849fbca004
--- /dev/null
+++ b/core/modules/ckeditor5/js/ie11.user.warnings.js
@@ -0,0 +1,64 @@
+/**
+* DO NOT EDIT THIS FILE.
+* See the following change record for more information,
+* https://www.drupal.org/node/2815083
+* @preserve
+**/
+
+(function (Drupal, Modernizr) {
+  var isIE11 = Modernizr.mq('(-ms-high-contrast: active), (-ms-high-contrast: none)');
+
+  if (isIE11) {
+    var quickEditLabelObserver = null;
+    Drupal.editors.ckeditor5 = {
+      attach: function attach(element) {
+        var editorMessageContainer = document.createElement('div');
+        element.parentNode.insertBefore(editorMessageContainer, element);
+        var editorMessages = new Drupal.Message(editorMessageContainer);
+        editorMessages.add(Drupal.t('Internet Explorer 11 user: a rich text editor is available for this field when used with any other supported browser.'), {
+          type: 'warning'
+        });
+      },
+      detach: function detach() {
+        var quickEditToolbar = document.querySelector('#quickedit-entity-toolbar .quickedit-toolbar');
+
+        if (quickEditToolbar) {
+          quickEditToolbar.classList.remove('ck5-ie11');
+          quickEditToolbar.classList.add('icon-pencil');
+          quickEditLabelObserver.disconnect();
+        }
+      },
+      onChange: function onChange() {},
+      attachInlineEditor: function attachInlineEditor(element) {
+        var quickEditToolbar = document.querySelector('#quickedit-entity-toolbar .quickedit-toolbar');
+        var notEditableAlert = Drupal.t('Field Not Editable');
+        var notEditableMessage = Drupal.t('CKEditor 5 is not compatible with IE11.');
+
+        function quickEditLabelWarnIE11(toolbarLabel) {
+          quickEditLabelObserver.disconnect();
+          toolbarLabel.innerHTML = "<div><b>".concat(notEditableAlert, "</b><div>").concat(notEditableMessage, "</div></div>");
+          quickEditLabelObserver.observe(toolbarLabel, {
+            childList: true
+          });
+        }
+
+        if (quickEditToolbar) {
+          quickEditToolbar.classList.add('ck5-ie11');
+          quickEditToolbar.classList.remove('icon-pencil');
+          element.classList.add('ck5-ie11');
+          var toolbarLabel = quickEditToolbar.querySelector('.quickedit-toolbar-label');
+          quickEditLabelObserver = new MutationObserver(function (mutations) {
+            for (var i = 0; i < mutations.length; i++) {
+              if (mutations[i].type === 'childList') {
+                quickEditLabelWarnIE11(toolbarLabel);
+              }
+            }
+          });
+          quickEditLabelObserver.observe(toolbarLabel, {
+            childList: true
+          });
+        }
+      }
+    };
+  }
+})(Drupal, Modernizr);
\ No newline at end of file
diff --git a/core/modules/ckeditor5/js/media_embed_ckeditor5.theme.es6.js b/core/modules/ckeditor5/js/media_embed_ckeditor5.theme.es6.js
new file mode 100644
index 000000000000..ee9dbbef7b55
--- /dev/null
+++ b/core/modules/ckeditor5/js/media_embed_ckeditor5.theme.es6.js
@@ -0,0 +1,19 @@
+/**
+ * @file
+ * Theme elements for the Media Embed CKEditor5 plugin.
+ */
+
+((Drupal) => {
+  /**
+   * Themes the error displayed when the media embed preview fails.
+   *
+   * @return {string}
+   *   A string representing a DOM fragment.
+   *
+   * @see media-embed-error.html.twig
+   */
+  Drupal.theme.mediaEmbedPreviewError = () =>
+    `<div>${Drupal.t(
+      'An error occurred while trying to preview the media. Please save your work and reload this page.',
+    )}</div>`;
+})(Drupal);
diff --git a/core/modules/ckeditor5/js/media_embed_ckeditor5.theme.js b/core/modules/ckeditor5/js/media_embed_ckeditor5.theme.js
new file mode 100644
index 000000000000..90d0db9545b9
--- /dev/null
+++ b/core/modules/ckeditor5/js/media_embed_ckeditor5.theme.js
@@ -0,0 +1,12 @@
+/**
+* DO NOT EDIT THIS FILE.
+* See the following change record for more information,
+* https://www.drupal.org/node/2815083
+* @preserve
+**/
+
+(function (Drupal) {
+  Drupal.theme.mediaEmbedPreviewError = function () {
+    return "<div>".concat(Drupal.t('An error occurred while trying to preview the media. Please save your work and reload this page.'), "</div>");
+  };
+})(Drupal);
\ No newline at end of file
diff --git a/core/modules/ckeditor5/src/Annotation/CKEditor4To5Upgrade.php b/core/modules/ckeditor5/src/Annotation/CKEditor4To5Upgrade.php
new file mode 100644
index 000000000000..d33472b74a1b
--- /dev/null
+++ b/core/modules/ckeditor5/src/Annotation/CKEditor4To5Upgrade.php
@@ -0,0 +1,50 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Annotation;
+
+use Drupal\Component\Annotation\Plugin;
+
+/**
+ * Defines a CKEditor4To5Upgrade annotation object.
+ *
+ * Plugin Namespace: Plugin\CKEditor4To5Upgrade.
+ *
+ * @see \Drupal\ckeditor5\Plugin\CKEditor5PluginInterface
+ * @see \Drupal\ckeditor5\Plugin\CKEditor5PluginManagerInterface
+ * @see plugin_api
+ *
+ * @Annotation
+ */
+class CKEditor4To5Upgrade extends Plugin {
+
+  /**
+   * The plugin ID.
+   *
+   * @var string
+   */
+  public $id;
+
+  /**
+   * The CKEditor 4 buttons for which an upgrade path is provided.
+   *
+   * @var string[]
+   */
+  public $cke4_buttons;
+
+  /**
+   * The CKEditor 4 plugins for whose settings an upgrade path is provided.
+   *
+   * @var string[]
+   */
+  public $cke4_plugin_settings;
+
+  /**
+   * The CKEditor 5 plugins with configurable subset with upgrade path provided.
+   *
+   * @var string[]
+   */
+  public $cke5_plugin_elements_subset_configuration;
+
+}
diff --git a/core/modules/ckeditor5/src/Annotation/CKEditor5AspectsOfCKEditor5Plugin.php b/core/modules/ckeditor5/src/Annotation/CKEditor5AspectsOfCKEditor5Plugin.php
new file mode 100644
index 000000000000..533786a376fa
--- /dev/null
+++ b/core/modules/ckeditor5/src/Annotation/CKEditor5AspectsOfCKEditor5Plugin.php
@@ -0,0 +1,43 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Annotation;
+
+use Drupal\Component\Annotation\Plugin;
+
+/**
+ * Defines the "CKEditor 5 aspects of a CKEditor5Plugin" annotation object.
+ *
+ * Plugin Namespace: Plugin\CKEditor5Plugin.
+ *
+ * @see \Drupal\ckeditor5\Plugin\CKEditorPluginInterface
+ * @see \Drupal\ckeditor5\Plugin\CKEditorPluginBase
+ * @see \Drupal\ckeditor5\Plugin\CKEditorPluginManager
+ * @see plugin_api
+ *
+ * @Annotation
+ * @see \Drupal\ckeditor5\Annotation\CKEditor5Plugin
+ * @see \Drupal\ckeditor5\Annotation\DrupalPartsOfCKEditor5Plugin
+ */
+class CKEditor5AspectsOfCKEditor5Plugin extends Plugin {
+
+  /**
+   * The CKEditor5 plugin classes provided.
+   *
+   * Found in the CKEditor5 global js object as {package.Class}.
+   *
+   * @var string[]
+   */
+  public $plugins;
+
+  /**
+   * A keyed array of additional values for the CKEditor5 constructor config.
+   *
+   * This property is optional and it does not need to be declared.
+   *
+   * @var array[]
+   */
+  public $config = [];
+
+}
diff --git a/core/modules/ckeditor5/src/Annotation/CKEditor5Plugin.php b/core/modules/ckeditor5/src/Annotation/CKEditor5Plugin.php
new file mode 100644
index 000000000000..5c6b876f0592
--- /dev/null
+++ b/core/modules/ckeditor5/src/Annotation/CKEditor5Plugin.php
@@ -0,0 +1,88 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Annotation;
+
+use Drupal\ckeditor5\Plugin\CKEditor5PluginDefinition;
+use Drupal\Component\Annotation\Plugin;
+
+/**
+ * Defines a CKEditor5Plugin annotation object.
+ *
+ * Plugin Namespace: Plugin\CKEditor5Plugin.
+ *
+ * @see \Drupal\ckeditor5\Plugin\CKEditor5PluginInterface
+ * @see \Drupal\ckeditor5\Plugin\CKEditor5PluginManagerInterface
+ * @see plugin_api
+ *
+ * @Annotation
+ * @see \Drupal\ckeditor5\Annotation\CKEditor5AspectsOfCKEditor5Plugin
+ * @see \Drupal\ckeditor5\Annotation\DrupalAspectsOfCKEditor5Plugin
+ */
+class CKEditor5Plugin extends Plugin {
+
+  /**
+   * The plugin ID.
+   *
+   * @var string
+   */
+  public $id;
+
+  /**
+   * The CKEditor 5 aspects of the plugin definition.
+   *
+   * @var \Drupal\ckeditor5\Annotation\CKEditor5AspectsOfCKEditor5Plugin
+   */
+  public $ckeditor5;
+
+  /**
+   * The Drupal aspects of the plugin definition.
+   *
+   * @var \Drupal\ckeditor5\Annotation\DrupalAspectsOfCKEditor5Plugin
+   */
+  public $drupal;
+
+  /**
+   * {@inheritdoc}
+   *
+   * Overridden for compatibility with the AnnotationBridgeDecorator, which
+   * ensures YAML-defined CKEditor 5 plugin definitions are also processed by
+   * annotations. Unfortunately it does not (yet) support nested annotations.
+   * Force YAML-defined plugin definitions to be parsed by the
+   * annotations, to ensure consistent handling of defaults.
+   *
+   * @see \Drupal\Component\Annotation\Plugin\Discovery\AnnotationBridgeDecorator::getDefinitions()
+   */
+  public function __construct($values) {
+    if (isset($values['ckeditor5']) && is_array($values['ckeditor5'])) {
+      $values['ckeditor5'] = new CKEditor5AspectsOfCKEditor5Plugin($values['ckeditor5']);
+    }
+    if (isset($values['drupal']) && is_array($values['drupal'])) {
+      $values['drupal'] = new DrupalAspectsOfCKEditor5Plugin($values['drupal']);
+    }
+    parent::__construct($values);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getClass() {
+    return $this->definition['drupal']['class'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setClass($class) {
+    $this->definition['drupal']['class'] = $class;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function get(): CKEditor5PluginDefinition {
+    return new CKEditor5PluginDefinition($this->definition);
+  }
+
+}
diff --git a/core/modules/ckeditor5/src/Annotation/DrupalAspectsOfCKEditor5Plugin.php b/core/modules/ckeditor5/src/Annotation/DrupalAspectsOfCKEditor5Plugin.php
new file mode 100644
index 000000000000..9f50ec41911c
--- /dev/null
+++ b/core/modules/ckeditor5/src/Annotation/DrupalAspectsOfCKEditor5Plugin.php
@@ -0,0 +1,100 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Annotation;
+
+use Drupal\ckeditor5\Plugin\CKEditor5PluginDefault;
+use Drupal\Component\Annotation\Plugin;
+
+/**
+ * Defines the "Drupal aspects of a CKEditor5Plugin" annotation object.
+ *
+ * Plugin Namespace: Plugin\CKEditor5Plugin.
+ *
+ * @see \Drupal\ckeditor5\Plugin\CKEditorPluginInterface
+ * @see \Drupal\ckeditor5\Plugin\CKEditorPluginBase
+ * @see \Drupal\ckeditor5\Plugin\CKEditorPluginManager
+ * @see plugin_api
+ *
+ * @Annotation
+ * @see \Drupal\ckeditor5\Annotation\CKEditor5Plugin
+ * @see \Drupal\ckeditor5\Annotation\CKEditor5AspectsOfCKEditor5Plugin
+ */
+class DrupalAspectsOfCKEditor5Plugin extends Plugin {
+
+  /**
+   * The human-readable name of the CKEditor plugin.
+   *
+   * @var \Drupal\Core\Annotation\Translation
+   * @ingroup plugin_translatable
+   */
+  public $label;
+
+  /**
+   * The CKEditor 5 plugin class.
+   *
+   * If not specified, the CKEditor5PluginDefault class is used.
+   *
+   * This property is optional and it does not need to be declared.
+   *
+   * @var string
+   */
+  public $class = CKEditor5PluginDefault::class;
+
+  /**
+   * The library this plugin requires.
+   *
+   * This property is optional and it does not need to be declared.
+   *
+   * @var string|false
+   */
+  public $library = FALSE;
+
+  /**
+   * The admin library this plugin provides.
+   *
+   * This property is optional and it does not need to be declared.
+   *
+   * @var string|false
+   */
+  public $admin_library = FALSE;
+
+  /**
+   * List of elements and attributes provided.
+   *
+   * An array of strings, or false if no elements are provided.
+   *
+   * Syntax for each array value:
+   * - <element> only allows that HTML element with no attributes
+   * - <element attrA attrB> only allows that HTML element with attributes attrA
+   *   and attrB, and any value for those attributes.
+   * - <element attrA="foo bar baz" attrB="qux-*"> only allows that HTML element
+   *   with attributes attrA (if attrA contains one of the three listed values)
+   *   and attrB (if its value has the provided prefix).
+   * - <element data-*> only allows that HTML element with any attribute that
+   *   has the given prefix.
+   *
+   * @var string[]|false
+   */
+  public $elements;
+
+  /**
+   * List of toolbar items the plugin provides.
+   *
+   * This property is optional and it does not need to be declared.
+   *
+   * @var array[]
+   */
+  public $toolbar_items = [];
+
+  /**
+   * List of conditions to enable this plugin.
+   *
+   * This property is optional and it does not need to be declared.
+   *
+   * @var array|false
+   */
+  public $conditions = FALSE;
+
+}
diff --git a/core/modules/ckeditor5/src/Controller/CKEditor5ImageController.php b/core/modules/ckeditor5/src/Controller/CKEditor5ImageController.php
new file mode 100644
index 000000000000..9d4a6c674e9c
--- /dev/null
+++ b/core/modules/ckeditor5/src/Controller/CKEditor5ImageController.php
@@ -0,0 +1,297 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Controller;
+
+use Drupal\Component\Utility\Bytes;
+use Drupal\Component\Utility\Crypt;
+use Drupal\Component\Utility\Environment;
+use Drupal\Core\Access\AccessResult;
+use Drupal\Core\Controller\ControllerBase;
+use Drupal\Core\Entity\Plugin\DataType\EntityAdapter;
+use Drupal\Core\File\Event\FileUploadSanitizeNameEvent;
+use Drupal\Core\File\Exception\FileException;
+use Drupal\Core\File\FileSystemInterface;
+use Drupal\Core\Lock\LockBackendInterface;
+use Drupal\Core\Session\AccountInterface;
+use Drupal\editor\Entity\Editor;
+use Drupal\Core\Validation\DrupalTranslator;
+use Drupal\file\Entity\File;
+use Drupal\file\FileInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\HttpFoundation\JsonResponse;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpKernel\Exception\HttpException;
+use Symfony\Component\Mime\MimeTypeGuesserInterface;
+use Symfony\Component\Validator\ConstraintViolation;
+use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
+use Symfony\Component\HttpKernel\Exception\UnprocessableEntityHttpException;
+
+/**
+ * Returns response for CKEditor5 Simple image upload adapter.
+ *
+ * @internal
+ *   Controller classes are internal.
+ */
+class CKEditor5ImageController extends ControllerBase {
+
+  /**
+   * The file system service.
+   *
+   * @var \Drupal\Core\File\FileSystem
+   */
+  protected $fileSystem;
+
+  /**
+   * The currently authenticated user.
+   *
+   * @var \Drupal\Core\Session\AccountInterface
+   */
+  protected $currentUser;
+
+  /**
+   * The MIME type guesser.
+   *
+   * @var \Symfony\Component\Mime\MimeTypeGuesserInterface
+   */
+  protected $mimeTypeGuesser;
+
+  /**
+   * The lock service.
+   *
+   * @var \Drupal\Core\Lock\LockBackendInterface
+   */
+  protected $lock;
+
+  /**
+   * The event dispatcher.
+   *
+   * @var \Symfony\Contracts\EventDispatcher\EventDispatcherInterface
+   */
+  protected $eventDispatcher;
+
+  /**
+   * Constructs a new CKEditor5ImageController.
+   *
+   * @param \Drupal\Core\File\FileSystemInterface $file_system
+   *   The file system service.
+   * @param \Drupal\Core\Session\AccountInterface $current_user
+   *   The currently authenticated user.
+   * @param \Symfony\Component\Mime\MimeTypeGuesserInterface $mime_type_guesser
+   *   The MIME type guesser.
+   * @param \Drupal\Core\Lock\LockBackendInterface $lock
+   *   The lock service.
+   * @param \Symfony\Contracts\EventDispatcher\EventDispatcherInterface $event_dispatcher
+   *   The event dispatcher.
+   */
+  public function __construct(FileSystemInterface $file_system, AccountInterface $current_user, MimeTypeGuesserInterface $mime_type_guesser, LockBackendInterface $lock, EventDispatcherInterface $event_dispatcher) {
+    $this->fileSystem = $file_system;
+    $this->currentUser = $current_user;
+    $this->mimeTypeGuesser = $mime_type_guesser;
+    $this->lock = $lock;
+    $this->eventDispatcher = $event_dispatcher;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static(
+      $container->get('file_system'),
+      $container->get('current_user'),
+      $container->get('file.mime_type.guesser'),
+      $container->get('lock'),
+      $container->get('event_dispatcher'),
+    );
+  }
+
+  /**
+   * Uploads and saves an image from a CKEditor5 POST.
+   *
+   * @param \Symfony\Component\HttpFoundation\Request $request
+   *   The current request object.
+   *
+   * @return \Symfony\Component\HttpFoundation\JsonResponse
+   *   A JSON object including the file url.
+   *
+   * @throws \Symfony\Component\HttpKernel\Exception\HttpException
+   *   Thrown when file system errors occur.
+   * @throws \Symfony\Component\HttpKernel\Exception\UnprocessableEntityHttpException
+   *   Thrown when validation errors occur.
+   * @throws \Drupal\Core\Entity\EntityStorageException
+   *   Thrown when file entity could not be saved.
+   */
+  public function upload(Request $request) {
+    // Getting the UploadedFile directly from the request.
+    $upload = $request->files->get('upload');
+    $filename = $upload->getClientOriginalName();
+
+    $editor = $request->attributes->get('editor');
+    $image_upload = $editor->getImageUploadSettings();
+    $destination = $image_upload['scheme'] . '://' . $image_upload['directory'];
+
+    // Check the destination file path is writable.
+    if (!$this->fileSystem->prepareDirectory($destination, FileSystemInterface::CREATE_DIRECTORY)) {
+      throw new HttpException(500, 'Destination file path is not writable');
+    }
+
+    $max_filesize = min(Bytes::toNumber($image_upload['max_size']), Environment::getUploadMaxSize());
+    if (!empty($image_upload['max_dimensions']['width']) || !empty($image_upload['max_dimensions']['height'])) {
+      $max_dimensions = $image_upload['max_dimensions']['width'] . 'x' . $image_upload['max_dimensions']['height'];
+    }
+    else {
+      $max_dimensions = 0;
+    }
+
+    $validators = [
+      'file_validate_extensions' => ['gif png jpg jpeg'],
+      'file_validate_size' => [$max_filesize],
+      'file_validate_image_resolution' => [$max_dimensions],
+    ];
+
+    $prepared_filename = $this->prepareFilename($filename, $validators);
+
+    // Create the file.
+    $file_uri = "{$destination}/{$prepared_filename}";
+
+    // Using the UploadedFile method instead of streamUploadData.
+    $temp_file_path = $upload->getRealPath();
+
+    $file_uri = $this->fileSystem->getDestinationFilename($file_uri, FileSystemInterface::EXISTS_RENAME);
+
+    // Lock based on the prepared file URI.
+    $lock_id = $this->generateLockIdFromFileUri($file_uri);
+
+    if (!$this->lock->acquire($lock_id)) {
+      throw new HttpException(503, sprintf('File "%s" is already locked for writing.'), NULL, ['Retry-After' => 1]);
+    }
+
+    // Begin building file entity.
+    $file = File::create([]);
+    $file->setOwnerId($this->currentUser->id());
+    $file->setFilename($prepared_filename);
+    if ($this->mimeTypeGuesser instanceof MimeTypeGuesserInterface) {
+      $file->setMimeType($this->mimeTypeGuesser->guessMimeType($prepared_filename));
+    }
+    else {
+      $file->setMimeType($this->mimeTypeGuesser->guess($prepared_filename));
+      @trigger_error('\Symfony\Component\HttpFoundation\File\MimeType\MimeTypeGuesserInterface is deprecated in drupal:9.1.0 and is removed from drupal:10.0.0. Implement \Symfony\Component\Mime\MimeTypeGuesserInterface instead. See https://www.drupal.org/node/3133341', E_USER_DEPRECATED);
+    }
+
+    $file->setFileUri($file_uri);
+    $file->setSize(@filesize($temp_file_path));
+
+    $violations = $this->validate($file, $validators);
+    if ($violations->count() > 0) {
+      throw new UnprocessableEntityHttpException($violations->__toString());
+    }
+
+    try {
+      $this->fileSystem->move($temp_file_path, $file_uri, FileSystemInterface::EXISTS_ERROR);
+    }
+    catch (FileException $e) {
+      throw new HttpException(500, 'Temporary file could not be moved to file location');
+    }
+
+    $file->save();
+
+    $this->lock->release($lock_id);
+
+    return new JsonResponse([
+      'url' => $file->createFileUrl(),
+      'uuid' => $file->uuid(),
+      'entity_type' => $file->getEntityTypeId(),
+    ], 201);
+  }
+
+  /**
+   * Access check based on whether image upload is enabled or not.
+   *
+   * @param \Drupal\editor\Entity\Editor $editor
+   *   The text editor for which an image upload is occurring.
+   *
+   * @return \Drupal\Core\Access\AccessResultInterface
+   *   The access result.
+   */
+  public function imageUploadEnabledAccess(Editor $editor) {
+    if ($editor->getEditor() !== 'ckeditor5') {
+      return AccessResult::forbidden();
+    }
+    if ($editor->getImageUploadSettings()['status'] !== TRUE) {
+      return AccessResult::forbidden();
+    }
+
+    return AccessResult::allowed();
+  }
+
+  /**
+   * Validates the file.
+   *
+   * @param \Drupal\file\FileInterface $file
+   *   The file entity to validate.
+   * @param array $validators
+   *   An array of upload validators to pass to file_validate().
+   *
+   * @return \Drupal\Core\Entity\EntityConstraintViolationListInterface
+   *   The list of constraint violations, if any.
+   */
+  protected function validate(FileInterface $file, array $validators) {
+    $violations = $file->validate();
+
+    // Remove violations of inaccessible fields as they cannot stem from our
+    // changes.
+    $violations->filterByFieldAccess();
+
+    // Validate the file based on the field definition configuration.
+    $errors = file_validate($file, $validators);
+    if (!empty($errors)) {
+      $translator = new DrupalTranslator();
+      foreach ($errors as $error) {
+        $violation = new ConstraintViolation($translator->trans($error),
+          (string) $error,
+          [],
+          EntityAdapter::createFromEntity($file),
+          '',
+          NULL
+        );
+        $violations->add($violation);
+      }
+    }
+
+    return $violations;
+  }
+
+  /**
+   * Prepares the filename to strip out any malicious extensions.
+   *
+   * @param string $filename
+   *   The file name.
+   * @param array $validators
+   *   The array of upload validators.
+   *
+   * @return string
+   *   The prepared/munged filename.
+   */
+  protected function prepareFilename($filename, array &$validators) {
+    $extensions = $validators['file_validate_extensions'][0] ?? '';
+    $event = new FileUploadSanitizeNameEvent($filename, $extensions);
+    $this->eventDispatcher->dispatch($event);
+
+    return $event->getFilename();
+  }
+
+  /**
+   * Generates a lock ID based on the file URI.
+   *
+   * @param string $file_uri
+   *   The file URI.
+   *
+   * @return string
+   *   The generated lock ID.
+   */
+  protected static function generateLockIdFromFileUri($file_uri) {
+    return 'file:ckeditor5:' . Crypt::hashBase64($file_uri);
+  }
+
+}
diff --git a/core/modules/ckeditor5/src/Controller/CKEditor5MediaController.php b/core/modules/ckeditor5/src/Controller/CKEditor5MediaController.php
new file mode 100644
index 000000000000..a508b199f5a7
--- /dev/null
+++ b/core/modules/ckeditor5/src/Controller/CKEditor5MediaController.php
@@ -0,0 +1,178 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Controller;
+
+use Drupal\Core\Access\AccessResult;
+use Drupal\Core\Access\AccessResultInterface;
+use Drupal\Core\Controller\ControllerBase;
+use Drupal\Core\Entity\EntityRepositoryInterface;
+use Drupal\Core\Session\AccountInterface;
+use Drupal\editor\Entity\Editor;
+use Drupal\image\Plugin\Field\FieldType\ImageItem;
+use Drupal\media\MediaInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\HttpFoundation\JsonResponse;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\RequestStack;
+use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
+use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
+
+/**
+ * Provides an API for checking if a media entity has image field.
+ *
+ * @internal
+ *   Controller classes are internal.
+ */
+class CKEditor5MediaController extends ControllerBase {
+
+  /**
+   * The currently authenticated user.
+   *
+   * @var \Drupal\Core\Session\AccountInterface
+   */
+  protected $currentUser;
+
+  /**
+   * The entity repository.
+   *
+   * @var \Drupal\Core\Entity\EntityRepositoryInterface
+   */
+  protected $entityRepository;
+
+  /**
+   * The request stack.
+   *
+   * @var \Symfony\Component\HttpFoundation\RequestStack
+   */
+  protected $requestStack;
+
+  /**
+   * Constructs a new CKEditor5MediaController.
+   *
+   * @param \Drupal\Core\Session\AccountInterface $current_user
+   *   The currently authenticated user.
+   * @param \Drupal\Core\Entity\EntityRepositoryInterface $entity_repository
+   *   The entity repository.
+   * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
+   *   The request stack.
+   */
+  public function __construct(AccountInterface $current_user, EntityRepositoryInterface $entity_repository, RequestStack $request_stack) {
+    $this->currentUser = $current_user;
+    $this->entityRepository = $entity_repository;
+    $this->requestStack = $request_stack;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static(
+      $container->get('current_user'),
+      $container->get('entity.repository'),
+      $container->get('request_stack')
+    );
+  }
+
+  /**
+   * Checks if media has a image field.
+   *
+   * @param \Symfony\Component\HttpFoundation\Request $request
+   *   The current request object.
+   *
+   * @return \Symfony\Component\HttpFoundation\JsonResponse
+   *   A JSON object including the response.
+   *
+   * @throws \Symfony\Component\HttpKernel\Exception\BadRequestHttpException
+   *   Thrown when no media UUID is provided.
+   * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
+   *   Thrown when no media with the provided UUID exists.
+   */
+  public function isMediaImage(Request $request) {
+    $uuid = $request->query->get('uuid');
+    if ($uuid == '') {
+      throw new BadRequestHttpException();
+    }
+    // Access is enforced on route level.
+    // @see \Drupal\ckeditor5\Controller\CKEditor5MediaController::access().
+    if (!$media = $this->entityRepository->loadEntityByUuid('media', $uuid)) {
+      throw new NotFoundHttpException();
+    }
+
+    // Note that we intentionally do not use:
+    // - \Drupal\Core\Cache\CacheableResponse because caching it on the server
+    //   side is wasteful, hence there is no need for cacheability metadata.
+    // - \Drupal\Core\Render\HtmlResponse because there is no need for
+    //   attachments nor cacheability metadata.
+    return (new JsonResponse($this->hasImageField($media), 200))
+      // Do not allow any intermediary to cache the response, only the end user.
+      ->setPrivate()
+      // Allow the end user to cache it for up to 5 minutes.
+      ->setMaxAge(300);
+  }
+
+  /**
+   * Additional access check for ::isMediaImage().
+   *
+   * This grants access if media embed filter is enabled on the filter format
+   * and user has access to view the media entity.
+   *
+   * Note that access to the filter format is not checked here because the route
+   * is configured to check entity access to the filter format.
+   *
+   * @param \Drupal\editor\Entity\Editor $editor
+   *   The text editor.
+   *
+   * @return \Drupal\Core\Access\AccessResultInterface
+   *   The access result.
+   *
+   * @throws \Symfony\Component\HttpKernel\Exception\BadRequestHttpException
+   *   Thrown when no media UUID is provided.
+   * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
+   *   Thrown when no media with the provided UUID exists.
+   */
+  public function access(Editor $editor): AccessResultInterface {
+    if ($editor->getEditor() !== 'ckeditor5') {
+      return AccessResult::forbidden();
+    }
+    // @todo add current request as an argument after
+    // https://www.drupal.org/project/drupal/issues/2786941 has been resolved.
+    $request = $this->requestStack->getCurrentRequest();
+    $uuid = $request->query->get('uuid');
+    if (!$uuid) {
+      throw new BadRequestHttpException();
+    }
+    $media = $this->entityRepository->loadEntityByUuid('media', $uuid);
+    if (!$media) {
+      throw new NotFoundHttpException();
+    }
+    $filters = $editor->getFilterFormat()->filters();
+
+    return AccessResult::allowedIf($filters->has('media_embed') && $filters->get('media_embed')->status)
+      ->andIf($media->access('view', $this->currentUser, TRUE))
+      ->addCacheableDependency($editor->getFilterFormat());
+  }
+
+  /**
+   * Check if the media type of the entity has a image field.
+   *
+   * @param \Drupal\media\MediaInterface $media
+   *   The media item being embedded.
+   *
+   * @return bool
+   *   Flag indicating whether the media type has image field or not.
+   *
+   * @see \Drupal\media\Form\EditorMediaDialog::getMediaImageSourceFieldName()
+   */
+  protected function hasImageField(MediaInterface $media) {
+    $field_definition = $media->getSource()
+      ->getSourceFieldDefinition($media->bundle->entity);
+    $item_class = $field_definition->getItemDefinition()->getClass();
+    if (is_a($item_class, ImageItem::class, TRUE)) {
+      return TRUE;
+    }
+    return FALSE;
+  }
+
+}
diff --git a/core/modules/ckeditor5/src/HTMLRestrictionsUtilities.php b/core/modules/ckeditor5/src/HTMLRestrictionsUtilities.php
new file mode 100644
index 000000000000..dee7d24c5005
--- /dev/null
+++ b/core/modules/ckeditor5/src/HTMLRestrictionsUtilities.php
@@ -0,0 +1,253 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5;
+
+use Drupal\Component\Assertion\Inspector;
+use Drupal\Component\Utility\DiffArray;
+use Drupal\Component\Utility\Html;
+use Masterminds\HTML5\Elements;
+
+/**
+ * Utilities for interacting with HTML restrictions.
+ *
+ * @internal
+ */
+final class HTMLRestrictionsUtilities {
+
+  /**
+   * Wildcard types, and the methods that return tags the wildcard represents.
+   *
+   * @var string[]
+   */
+  private const WILDCARD_ELEMENT_METHODS = [
+    '$block' => 'getBlockElementList',
+  ];
+
+  /**
+   * Formats HTML elements for display.
+   *
+   * @param array $elements
+   *   List of elements to format.
+   *
+   * @return string
+   *   A formatted list; a string representation of the given HTML elements.
+   */
+  public static function toReadableElements(array $elements): array {
+    $readable = [];
+    foreach ($elements as $tag => $attributes) {
+      $attribute_string = '';
+      if (is_array($attributes)) {
+        foreach ($attributes as $attribute_name => $attribute_values) {
+          if (is_array($attribute_values)) {
+            $attribute_values_string = implode(' ', array_keys($attribute_values));
+            $attribute_string .= "$attribute_name=\"$attribute_values_string\" ";
+          }
+          else {
+            $attribute_string .= "$attribute_name ";
+          }
+        }
+      }
+      $joined = '<' . $tag . (!empty($attribute_string) ? ' ' . trim($attribute_string) : '') . '>';
+      array_push($readable, $joined);
+    }
+    assert(Inspector::assertAllStrings($readable));
+    return $readable;
+  }
+
+  /**
+   * Parses a HTML restrictions string with >=1 tags in an array of single tags.
+   *
+   * @param string $elements_string
+   *   A HTML restrictions string.
+   *
+   * @return string[]
+   *   A list of strings, with a HTML tag and potentially attributes in each.
+   */
+  public static function allowedElementsStringToPluginElementsArray(string $elements_string): array {
+    $html_restrictions = static::allowedElementsStringToHtmlFilterArray($elements_string);
+    return static::toReadableElements($html_restrictions);
+  }
+
+  /**
+   * Parses an HTML string into an array structured as expected by filter_html.
+   *
+   * @param string $elements_string
+   *   A string of HTML tags, potentially with attributes.
+   *
+   * @return array
+   *   An elements array in the structure expected by filter_html.
+   *
+   * @see \Drupal\ckeditor5\Plugin\CKEditor5PluginManager::WILDCARD_ELEMENT_METHODS
+   *   Each key in this array represents a valid wildcard tag.
+   */
+  public static function allowedElementsStringToHtmlFilterArray(string $elements_string): array {
+    preg_match('/<(\$[A-Z,a-z]*)/', $elements_string, $wildcard_matches);
+
+    $wildcard = NULL;
+    if (!empty($wildcard_matches)) {
+      $wildcard = $wildcard_matches[1];
+      assert(substr($wildcard, 0, 1) === '$', 'Wildcard tags must begin with "$"');
+      $elements_string = str_replace($wildcard, 'WILDCARD', $elements_string);
+    }
+
+    $elements = [];
+    $body_child_nodes = Html::load(str_replace('>', ' />', $elements_string))->getElementsByTagName('body')->item(0)->childNodes;
+
+    foreach ($body_child_nodes as $node) {
+      if ($node->nodeType !== XML_ELEMENT_NODE) {
+        // Skip the empty text nodes inside tags.
+        continue;
+      }
+
+      $tag = $wildcard ?? $node->tagName;
+      if ($node->hasAttributes()) {
+        foreach ($node->attributes as $attribute_name => $attribute) {
+          $value = empty($attribute->value) ? TRUE : explode(' ', $attribute->value);
+          self::providedElementsAttributes($elements, $tag, $attribute_name, $value);
+        }
+      }
+      else {
+        if (!isset($elements[$tag])) {
+          $elements[$tag] = FALSE;
+        }
+      }
+    }
+    return $elements;
+  }
+
+  /**
+   * Cleans unwanted artifacts from "allowed HTML" arrays.
+   *
+   * @param array $elements
+   *   An array of allowed elements, structured as expected by filter_html.
+   *
+   * @return array
+   *   The array without unwanted artifacts.
+   */
+  public static function cleanAllowedHtmlArray(array $elements): array {
+    // When recursively merging elements arrays, unkeyed boolean values can
+    // appear in attribute config arrays. This removes them.
+    foreach ($elements as $tag => $tag_config) {
+      if (is_array($tag_config)) {
+        $elements[$tag] = array_filter($tag_config);
+      }
+    }
+    return $elements;
+  }
+
+  /**
+   * Adds allowed attributes to the elements array.
+   *
+   * @param array $elements
+   *   The elements array.
+   * @param string $tag
+   *   The tag having its attributes configured.
+   * @param string $attribute
+   *   The attribute being configured.
+   * @param array|bool $value
+   *   The attribute config value.
+   */
+  public static function providedElementsAttributes(array &$elements, string $tag, string $attribute, $value): void {
+    $attribute_already_allows_all = isset($elements[$tag][$attribute]) && $elements[$tag][$attribute] === TRUE;
+
+    if ($value === TRUE) {
+      $elements[$tag][$attribute] = TRUE;
+    }
+    elseif (!$attribute_already_allows_all) {
+      foreach ($value as $attribute_value) {
+        $elements[$tag][$attribute][$attribute_value] = TRUE;
+      }
+    }
+  }
+
+  /**
+   * Compares two HTML restrictions.
+   *
+   * @param array $elements_array_1
+   *   The array to compare from.
+   * @param array $elements_array_2
+   *   The array to compare to.
+   *
+   * @return array
+   *   Returns an array with all the values in $elements_array_1 that are not
+   *   present in $elements_array_1, including values that are FALSE
+   */
+  public static function diffAllowedElements(array $elements_array_1, array $elements_array_2): array {
+    return array_filter(
+      DiffArray::diffAssocRecursive($elements_array_1, $elements_array_2),
+      // DiffArray::diffAssocRecursive() does not know the semantics of the
+      // HTML restrictions array: unaware that `TAG => FALSE` is a subset of
+      // `TAG => foo` and that in turn is a subset of `TAG => TRUE`.
+      // @see \Drupal\filter\Entity\FilterFormat::getHtmlRestrictions()
+      function ($value, string $tag) use ($elements_array_2) {
+        return $value !== FALSE || !array_key_exists($tag, $elements_array_2);
+      },
+      ARRAY_FILTER_USE_BOTH
+    );
+  }
+
+  /**
+   * Parses a HTML restrictions string into htmlSupport plugin config structure.
+   *
+   * @param string $elements_string
+   *   A HTML restrictions string.
+   *
+   * @return string[]
+   *   An array of allowed elements, structured in the manner expected by the
+   *   CKEditor 5 htmlSupport plugin constructor.
+   *
+   * @see https://ckeditor5.github.io/docs/nightly/ckeditor5/latest/features/general-html-support.html#configuration
+   */
+  public static function allowedElementsStringToHtmlSupportConfig(string $elements_string): array {
+    $html_restrictions = static::allowedElementsStringToHtmlFilterArray($elements_string);
+    $allowed = [];
+    foreach ($html_restrictions as $tag => $attributes) {
+      $to_allow['name'] = $tag;
+      assert($attributes === FALSE || is_array($attributes));
+      if (is_array($attributes)) {
+        foreach ($attributes as $name => $value) {
+          assert($value === TRUE || Inspector::assertAllStrings($value));
+          $to_allow['attributes'][$name] = $value;
+        }
+      }
+      $allowed[] = $to_allow;
+    }
+
+    return $allowed;
+  }
+
+  /**
+   * Gets a list of block level elements.
+   *
+   * @return array
+   *   An array of block level element tags.
+   */
+  private static function getBlockElementList(): array {
+    return array_filter(array_keys(Elements::$html5), function (string $element) {
+      return Elements::isA($element, Elements::BLOCK_TAG);
+    });
+  }
+
+  /**
+   * Returns the tags that match the provided wildcard.
+   *
+   * A wildcard tag in element config is a way of representing multiple tags
+   * with a single item, such as `<$block>` to represent all block tags. Each
+   * wildcard should have a corresponding callback method listed in
+   * WILDCARD_ELEMENT_METHODS that returns the set of tags represented by the
+   * wildcard.
+   *
+   * @param string $wildcard
+   *   The wildcard that represents multiple tags.
+   *
+   * @return array
+   *   An array of HTML tags.
+   */
+  public static function getWildcardTags(string $wildcard):array {
+    $wildcard_element_method = self::WILDCARD_ELEMENT_METHODS[$wildcard];
+    return call_user_func([self::class, $wildcard_element_method]);
+  }
+
+}
diff --git a/core/modules/ckeditor5/src/Plugin/CKEditor4To5Upgrade/Core.php b/core/modules/ckeditor5/src/Plugin/CKEditor4To5Upgrade/Core.php
new file mode 100644
index 000000000000..6a8fe53c7362
--- /dev/null
+++ b/core/modules/ckeditor5/src/Plugin/CKEditor4To5Upgrade/Core.php
@@ -0,0 +1,216 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Drupal\ckeditor5\Plugin\CKEditor4To5Upgrade;
+
+use Drupal\ckeditor5\Plugin\CKEditor4To5UpgradePluginInterface;
+use Drupal\Core\Plugin\PluginBase;
+use Drupal\filter\FilterFormatInterface;
+
+/**
+ * Provides the CKEditor 4 to 5 upgrade for Drupal core's CKEditor plugins.
+ *
+ * @CKEditor4To5Upgrade(
+ *   id = "core",
+ *   cke4_buttons = {
+ *     "DrupalImage",
+ *     "DrupalLink",
+ *     "DrupalUnlink",
+ *     "Bold",
+ *     "Italic",
+ *     "Underline",
+ *     "Superscript",
+ *     "Subscript",
+ *     "BulletedList",
+ *     "NumberedList",
+ *     "Outdent",
+ *     "Indent",
+ *     "Undo",
+ *     "Redo",
+ *     "Blockquote",
+ *     "JustifyLeft",
+ *     "JustifyCenter",
+ *     "JustifyRight",
+ *     "JustifyBlock",
+ *     "HorizontalRule",
+ *     "Format",
+ *     "Table",
+ *     "Source",
+ *     "Strike",
+ *     "Cut",
+ *     "Copy",
+ *     "Paste",
+ *     "PasteText",
+ *     "PasteFromWord",
+ *     "ShowBlocks",
+ *     "Maximize",
+ *     "-",
+ *     "RemoveFormat",
+ *     "Styles",
+ *     "SpecialChar",
+ *     "Language",
+ *     "DrupalMediaLibrary",
+ *   },
+ *   cke4_plugin_settings = {
+ *     "stylescombo",
+ *     "language",
+ *   },
+ *   cke5_plugin_elements_subset_configuration = {
+ *    "ckeditor5_heading",
+ *   }
+ * )
+ *
+ * @internal
+ *   Plugin classes are internal.
+ */
+class Core extends PluginBase implements CKEditor4To5UpgradePluginInterface {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function mapCKEditor4ToolbarButtonToCKEditor5ToolbarItem(string $cke4_button): ?string {
+    switch ($cke4_button) {
+      // @see \Drupal\ckeditor\Plugin\CKEditorPlugin\DrupalImage
+      case 'DrupalImage':
+        return 'uploadImage';
+
+      // @see \Drupal\ckeditor\Plugin\CKEditorPlugin\DrupalLink
+      case 'DrupalLink':
+        return 'link';
+
+      case 'DrupalUnlink':
+        return NULL;
+
+      // @see \Drupal\ckeditor\Plugin\CKEditorPlugin\Internal
+      case 'Bold':
+      case 'Italic':
+      case 'Underline':
+      case 'Superscript':
+      case 'Subscript':
+      case 'BulletedList':
+      case 'NumberedList':
+      case 'Outdent':
+      case 'Indent':
+      case 'Undo':
+      case 'Redo':
+        return lcfirst($cke4_button);
+
+      case 'Blockquote':
+        return 'blockQuote';
+
+      case 'JustifyLeft':
+        return "alignment:left";
+
+      case 'JustifyCenter':
+        return "alignment:center";
+
+      case 'JustifyRight':
+        return "alignment:right";
+
+      case 'JustifyBlock':
+        return "alignment:justify";
+
+      case 'HorizontalRule':
+        return 'horizontalLine';
+
+      case 'Format':
+        return 'heading';
+
+      case 'Table':
+        return 'insertTable';
+
+      case 'Source':
+        return 'sourceEditing';
+
+      case 'Strike':
+        return 'strikethrough';
+
+      case 'Cut':
+      case 'Copy':
+      case 'Paste':
+      case 'PasteText':
+      case 'PasteFromWord':
+      case 'ShowBlocks':
+      case 'Maximize':
+      case '-':
+        // @see https://www.drupal.org/project/ckeditor5/issues/3211049#comment-14167764
+        return NULL;
+
+      // @see \Drupal\ckeditor5\Plugin\CKEditor5Plugin\RemoveFormat
+      case 'RemoveFormat':
+        return 'removeFormat';
+
+      // @see \Drupal\ckeditor\Plugin\CKEditorPlugin\StylesCombo
+      case 'Styles':
+        // @todo Change in https://www.drupal.org/project/ckeditor5/issues/3222797
+        return NULL;
+
+      // @see \Drupal\ckeditor5\Plugin\CKEditor5Plugin\specialCharacters
+      case 'SpecialChar':
+        return 'specialCharacters';
+
+      // @see \Drupal\ckeditor\Plugin\CKEditorPlugin\Language
+      case 'Language':
+        return 'textPartLanguage';
+
+      // @see \Drupal\media_library\Plugin\CKEditorPlugin\DrupalMediaLibrary
+      case 'DrupalMediaLibrary':
+        return 'drupalMedia';
+
+      default:
+        throw new \OutOfBoundsException();
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function mapCKEditor4SettingsToCKEditor5Configuration(string $cke4_plugin_id, array $cke4_plugin_settings): ?array {
+    switch ($cke4_plugin_id) {
+      // @see \Drupal\ckeditor\Plugin\CKEditorPlugin\StylesCombo
+      case 'stylescombo':
+        // @todo Change in https://www.drupal.org/project/ckeditor5/issues/3222797
+        return NULL;
+
+      // @see \Drupal\ckeditor\Plugin\CKEditorPlugin\Language
+      case 'language':
+        // Identical configuration.
+        return ['ckeditor5_language' => $cke4_plugin_settings];
+
+      default:
+        throw new \OutOfBoundsException();
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function computeCKEditor5PluginSubsetConfiguration(string $cke5_plugin_id, FilterFormatInterface $text_format): ?array {
+    switch ($cke5_plugin_id) {
+      case 'ckeditor5_heading':
+        $restrictions = $text_format->getHtmlRestrictions();
+        if ($restrictions === FALSE) {
+          // The default is to allow all headings, which makes sense when there
+          // are no restrictions.
+          // @see \Drupal\ckeditor5\Plugin\CKEditor5Plugin\Heading::DEFAULT_CONFIGURATION
+          return NULL;
+        }
+        // Otherwise, only enable headings that allowed by the restrictions.
+        $configuration = [];
+        foreach (range(2, 6) as $index) {
+          // Merely checking the existence of the array key is sufficient; this
+          // plugin does not set or need any additional attributes.
+          // @see \Drupal\filter\Plugin\FilterInterface::getHTMLRestrictions()
+          if (array_key_exists("h$index", $restrictions['allowed'])) {
+            $configuration['enabled_headings'][] = "heading$index";
+          }
+        }
+        return $configuration;
+
+      default:
+        throw new \OutOfBoundsException();
+    }
+  }
+
+}
diff --git a/core/modules/ckeditor5/src/Plugin/CKEditor4To5UpgradePluginInterface.php b/core/modules/ckeditor5/src/Plugin/CKEditor4To5UpgradePluginInterface.php
new file mode 100644
index 000000000000..3ba927920ac1
--- /dev/null
+++ b/core/modules/ckeditor5/src/Plugin/CKEditor4To5UpgradePluginInterface.php
@@ -0,0 +1,93 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Plugin;
+
+use Drupal\Component\Plugin\PluginInspectionInterface;
+use Drupal\filter\FilterFormatInterface;
+
+/**
+ * Defines an interface for CKEditor 4 to 5 upgrade plugins.
+ *
+ * @see \Drupal\ckeditor5\Plugin\CKEditor4To5UpgradePluginManager
+ * @see \Drupal\ckeditor5\Annotation\CKEditor4To5Upgrade
+ * @see plugin_api
+ */
+interface CKEditor4To5UpgradePluginInterface extends PluginInspectionInterface {
+
+  /**
+   * Maps a CKEditor 4 button to the CKEditor 5 equivalent, if it exists.
+   *
+   * Generated by inspecting all \Drupal\ckeditor\CKEditorPluginButtonsInterface
+   * implementations.
+   *
+   * @param string $cke4_button
+   *   A valid CKEditor 4 button name.
+   *
+   * @return string|null
+   *   The equivalent CKEditor 5 toolbar item, or NULL if no equivalent exists.
+   *   In either case, the button name must be added to the annotation.
+   *
+   * @throws \OutOfBoundsException
+   *   Thrown when this plugin does not know whether an equivalent exists.
+   *
+   * @see \Drupal\ckeditor\CKEditorPluginButtonsInterface
+   * @see \Drupal\ckeditor5\Annotation\CKEditor4To5Upgrade
+   */
+  public function mapCKEditor4ToolbarButtonToCKEditor5ToolbarItem(string $cke4_button): ?string;
+
+  /**
+   * Maps CKEditor 4 settings to the CKEditor 5 equivalent, if needed.
+   *
+   * Not every CKEditor 5 plugin has settings; some CKEditor 5 plugins may have
+   * settings that the CKEditor 4 equivalent did not and vice versa. Therefore
+   * the complete CKEditor 4 settings are provided, and any CKEditor 5 setting
+   * can be set.
+   *
+   * @param string $cke4_plugin_id
+   *   The CKEditor 4 plugin whose settings need to be mapped.
+   * @param array $cke4_plugin_settings
+   *   The settings for this CKEditor 4 plugin.
+   *
+   * @return array|null
+   *   NULL if not needed, otherwise an array with a single key-value pair:
+   *   - key: the plugin ID of the equivalent CKEditor 5 plugin
+   *   - value: the equivalent settings
+   *   In either case, the button name must be added to the annotation.
+   *
+   * @throws \OutOfBoundsException
+   *   Thrown when this plugin does not know whether an equivalent exists.
+   *
+   * @see \Drupal\ckeditor\CKEditorPluginConfigurableInterface
+   * @see \Drupal\ckeditor5\Annotation\CKEditor4To5Upgrade
+   */
+  public function mapCKEditor4SettingsToCKEditor5Configuration(string $cke4_plugin_id, array $cke4_plugin_settings): ?array;
+
+  /**
+   * Computes elements subset configuration for CKEditor 5 plugin.
+   *
+   * Every CKEditor 5 plugin that implements the elements subset interface must
+   * implement this as well, to ensure a smooth upgrade path.
+   *
+   * @param string $cke5_plugin_id
+   *   The CKEditor 5 plugin whose subset configuration needs to be computed.
+   * @param \Drupal\filter\FilterFormatInterface $text_format
+   *   The text format based on whose restrictions this should be computed.
+   *
+   * @return array|null
+   *   NULL if not needed, otherwise a configuration array (which can itself be
+   *   a subset of the default configuration of this CKEditor 5 plugin: perhaps
+   *   only some of the configuration values determine the subset).
+   *
+   * @throws \OutOfBoundsException
+   *   Thrown when no upgrade path exists.
+   * @throws \LogicException
+   *   Thrown when a plugin claims to provide an upgrade path but does not.
+   *
+   * @see \Drupal\ckeditor5\Plugin\CKEditor5PluginElementsSubsetInterface
+   * @see \Drupal\ckeditor5\Annotation\CKEditor4To5Upgrade
+   */
+  public function computeCKEditor5PluginSubsetConfiguration(string $cke5_plugin_id, FilterFormatInterface $text_format): ?array;
+
+}
diff --git a/core/modules/ckeditor5/src/Plugin/CKEditor4To5UpgradePluginManager.php b/core/modules/ckeditor5/src/Plugin/CKEditor4To5UpgradePluginManager.php
new file mode 100644
index 000000000000..fdb0bce005de
--- /dev/null
+++ b/core/modules/ckeditor5/src/Plugin/CKEditor4To5UpgradePluginManager.php
@@ -0,0 +1,226 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Plugin;
+
+use Drupal\ckeditor5\Annotation\CKEditor4To5Upgrade;
+use Drupal\Component\Assertion\Inspector;
+use Drupal\Core\Cache\CacheBackendInterface;
+use Drupal\Core\Extension\ModuleHandlerInterface;
+use Drupal\Core\Plugin\DefaultPluginManager;
+use Drupal\filter\FilterFormatInterface;
+
+/**
+ * Provides a CKEditor 4 to 5 upgrade plugin manager.
+ *
+ * @see \Drupal\ckeditor5\Plugin\CKEditor4To5UpgradePluginInterface
+ * @see \Drupal\ckeditor5\Annotation\CKEditor4To5Upgrade
+ * @see plugin_api
+ *
+ * @internal
+ */
+class CKEditor4To5UpgradePluginManager extends DefaultPluginManager {
+
+  /**
+   * A map of CKEditor 4 buttons to an upgrade plugin ID.
+   *
+   * @var array
+   */
+  protected $cke4ButtonsMap;
+
+  /**
+   * A map of CKEditor 4 plugins with settings to an upgrade plugin ID.
+   *
+   * @var array
+   */
+  protected $cke4PluginSettingsMap;
+
+  /**
+   * A map of CKEditor 5 plugins with configurable subset to upgrade plugin ID.
+   *
+   * @var array
+   */
+  protected $cke5SubsetConfigurationMap;
+
+  /**
+   * Constructs a CKEditor4To5UpgradePluginManager object.
+   *
+   * @param \Traversable $namespaces
+   *   An object that implements \Traversable which contains the root paths
+   *   keyed by the corresponding namespace to look for plugin implementations.
+   * @param \Drupal\Core\Cache\CacheBackendInterface $cache_backend
+   *   Cache backend instance to use.
+   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
+   *   The module handler to invoke the alter hook with.
+   */
+  public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler) {
+    parent::__construct('Plugin/CKEditor4To5Upgrade', $namespaces, $module_handler, CKEditor4To5UpgradePluginInterface::class, CKEditor4To5Upgrade::class);
+
+    $this->alterInfo('ckeditor4to5upgrade_plugin_info');
+    $this->setCacheBackend($cache_backend, 'ckeditor4to5upgrade_plugins');
+  }
+
+  /**
+   * Validates plugin definitions: avoids conflicts. Builds maps for later use.
+   */
+  protected function validateAndBuildMaps(): void {
+    if ($this->cke4ButtonsMap !== NULL) {
+      return;
+    }
+
+    foreach ($this->getDefinitions() as $upgrade_plugin_id => $definition) {
+      // Only one CKEditor4To5Upgrade plugin can define the upgrade path for a
+      // CKEditor 4 button.
+      if (isset($definition['cke4_buttons'])) {
+        assert(Inspector::assertAllStrings($definition['cke4_buttons']));
+        foreach ($definition['cke4_buttons'] as $cke4_button_id) {
+          if (isset($this->cke4ButtonsMap[$cke4_button_id])) {
+            throw new \OutOfBoundsException(sprintf('The "%s" CKEditor 4 button is already being upgraded by the "%s" CKEditor4To5Upgrade plugin, the "%s" plugin is as well. This conflict needs to be resolved.', $cke4_button_id, $this->cke4ButtonsMap[$cke4_button_id], $upgrade_plugin_id));
+          }
+          $this->cke4ButtonsMap[$cke4_button_id] = $upgrade_plugin_id;
+        }
+      }
+
+      // Only one CKEditor4To5Upgrade plugin can define the upgrade path for a
+      // CKEditor 4 plugin's settings.
+      if (isset($definition['cke4_plugin_settings'])) {
+        assert(Inspector::assertAllStrings($definition['cke4_plugin_settings']));
+        foreach ($definition['cke4_plugin_settings'] as $cke4_plugin_id) {
+          if (isset($this->cke4PluginSettingsMap[$cke4_plugin_id])) {
+            throw new \OutOfBoundsException(sprintf('The "%s" CKEditor 4 plugin\'s settings are already being upgraded by the "%s" CKEditor4To5Upgrade plugin, the "%s" plugin is as well. This conflict needs to be resolved.', $cke4_plugin_id, $this->cke4PluginSettingsMap[$cke4_plugin_id], $upgrade_plugin_id));
+          }
+          $this->cke4PluginSettingsMap[$cke4_plugin_id] = $upgrade_plugin_id;
+        }
+      }
+
+      // Only one CKEditor4To5Upgrade plugin can define the upgrade path for a
+      // CKEditor 5 plugin's elements subset configuration.
+      if (isset($definition['cke5_plugin_elements_subset_configuration'])) {
+        assert(Inspector::assertAllStrings($definition['cke5_plugin_elements_subset_configuration']));
+        foreach ($definition['cke5_plugin_elements_subset_configuration'] as $cke5_plugin_id) {
+          if (isset($this->cke5SubsetConfigurationMap[$cke5_plugin_id])) {
+            throw new \OutOfBoundsException(sprintf('The "%s" CKEditor 5 plugin\'s elements subset configuration is already being computed by the "%s" CKEditor4To5Upgrade plugin, the "%s" plugin is as well. This conflict needs to be resolved.', $cke5_plugin_id, $this->cke5SubsetConfigurationMap[$cke5_plugin_id], $upgrade_plugin_id));
+          }
+          $this->cke5SubsetConfigurationMap[$cke5_plugin_id] = $upgrade_plugin_id;
+        }
+      }
+    }
+  }
+
+  /**
+   * Maps a CKEditor 4 button to the CKEditor 5 equivalent, if it exists.
+   *
+   * Generated by inspecting all \Drupal\ckeditor\CKEditorPluginButtonsInterface
+   * implementations.
+   *
+   * @param string $cke4_button
+   *   A valid CKEditor 4 button name.
+   *
+   * @return string|null
+   *   The equivalent CKEditor 5 toolbar item, or NULL if no equivalent exists.
+   *
+   * @throws \OutOfBoundsException
+   *   Thrown when no upgrade path exists.
+   * @throws \LogicException
+   *   Thrown when a plugin claims to provide an upgrade path but does not.
+   *
+   * @see \Drupal\ckeditor\CKEditorPluginButtonsInterface
+   */
+  public function mapCKEditor4ToolbarButtonToCKEditor5ToolbarItem(string $cke4_button): ?string {
+    $this->validateAndBuildMaps();
+
+    if (!isset($this->cke4ButtonsMap[$cke4_button])) {
+      throw new \OutOfBoundsException(sprintf('No upgrade path found for the "%s" button.', $cke4_button));
+    }
+
+    $plugin_id = $this->cke4ButtonsMap[$cke4_button];
+    try {
+      return $this->createInstance($plugin_id)->mapCKEditor4ToolbarButtonToCKEditor5ToolbarItem($cke4_button);
+    }
+    catch (\OutOfBoundsException $e) {
+      throw new \LogicException(sprintf('The "%s" CKEditor4To5Upgrade plugin claims to provide an upgrade path for the "%s" CKEditor 4 button but does not.', $plugin_id, $cke4_button));
+    }
+  }
+
+  /**
+   * Maps CKEditor 4 settings to the CKEditor 5 equivalent, if needed.
+   *
+   * Not every CKEditor 5 plugin has settings; some CKEditor 5 plugins may have
+   * settings that the CKEditor 4 equivalent did not and vice versa. Therefore
+   * the complete CKEditor 4 settings are provided, and any CKEditor 5 setting
+   * can be set.
+   *
+   * @param string $cke4_plugin_id
+   *   The CKEditor 4 plugin whose settings need to be mapped.
+   * @param array $cke4_plugin_settings
+   *   The settings for this CKEditor 4 plugin.
+   *
+   * @return array|null
+   *   NULL if not needed, otherwise an array with a single key-value pair:
+   *   - key: the plugin ID of the equivalent CKEditor 5 plugin
+   *   - value: the equivalent settings
+   *
+   * @throws \OutOfBoundsException
+   *   Thrown when no upgrade path exists.
+   * @throws \LogicException
+   *   Thrown when a plugin claims to provide an upgrade path but does not.
+   *
+   * @see \Drupal\ckeditor\CKEditorPluginConfigurableInterface
+   */
+  public function mapCKEditor4SettingsToCKEditor5Configuration(string $cke4_plugin_id, array $cke4_plugin_settings): ?array {
+    $this->validateAndBuildMaps();
+
+    if (!isset($this->cke4PluginSettingsMap[$cke4_plugin_id])) {
+      throw new \OutOfBoundsException(sprintf('No upgrade path found for the "%s" plugin settings.', $cke4_plugin_id));
+    }
+
+    $plugin_id = $this->cke4PluginSettingsMap[$cke4_plugin_id];
+    try {
+      return $this->createInstance($plugin_id)->mapCKEditor4SettingsToCKEditor5Configuration($cke4_plugin_id, $cke4_plugin_settings);
+    }
+    catch (\OutOfBoundsException $e) {
+      throw new \LogicException(sprintf('The "%s" CKEditor4To5Upgrade plugin claims to provide an upgrade path for the "%s" CKEditor 4 plugin settings but does not.', $plugin_id, $cke4_plugin_id));
+    }
+  }
+
+  /**
+   * Computes elements subset configuration for CKEditor 5 plugin.
+   *
+   * Every CKEditor 5 plugin that implements the elements subset interface must
+   * implement this as well, to ensure a smooth upgrade path.
+   *
+   * @param string $cke5_plugin_id
+   *   The CKEditor 5 plugin whose subset configuration needs to be computed.
+   * @param \Drupal\filter\FilterFormatInterface $text_format
+   *   The text format based on whose restrictions this should be computed.
+   *
+   * @return array|null
+   *   NULL if not needed, otherwise a configuration array (which can itself be
+   *   a subset of the default configuration of this CKEditor 5 plugin: perhaps
+   *   only some of the configuration values determine the subset).
+   *
+   * @throws \OutOfBoundsException
+   *   Thrown when no upgrade path exists.
+   * @throws \LogicException
+   *   Thrown when a plugin claims to provide an upgrade path but does not.
+   *
+   * @see \Drupal\ckeditor5\Plugin\CKEditor5PluginElementsSubsetInterface
+   */
+  public function computeCKEditor5PluginSubsetConfiguration(string $cke5_plugin_id, FilterFormatInterface $text_format): ?array {
+    $this->validateAndBuildMaps();
+
+    if (!isset($this->cke5SubsetConfigurationMap[$cke5_plugin_id])) {
+      throw new \OutOfBoundsException(sprintf('No upgrade path found for the "%s" elements subset configuration.', $cke5_plugin_id));
+    }
+
+    $plugin_id = $this->cke5SubsetConfigurationMap[$cke5_plugin_id];
+    try {
+      return $this->createInstance($plugin_id)->computeCKEditor5PluginSubsetConfiguration($cke5_plugin_id, $text_format);
+    }
+    catch (\OutOfBoundsException $e) {
+      throw new \LogicException(sprintf('The "%s" CKEditor4To5Upgrade plugin claims to provide an upgrade path for the "%s" CKEditor 4 plugin settings but does not.', $plugin_id, $cke5_plugin_id));
+    }
+  }
+
+}
diff --git a/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/DynamicPluginConfigWithCsrfTokenUrlTrait.php b/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/DynamicPluginConfigWithCsrfTokenUrlTrait.php
new file mode 100644
index 000000000000..953cec0ac105
--- /dev/null
+++ b/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/DynamicPluginConfigWithCsrfTokenUrlTrait.php
@@ -0,0 +1,52 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Drupal\ckeditor5\Plugin\CKEditor5Plugin;
+
+use Drupal\Core\Url;
+
+/**
+ * Provides a trait for CKEditor 5 with dynamically generated CSRF token URLs.
+ *
+ * The Text Editor module's APIs predate the concept of bubbleable metadata. To
+ * prevent URLs with CSRF tokens from breaking cacheability, placeholders are
+ * used for those CSRF tokens since https://drupal.org/i/2512132. Placeholders
+ * are designed to be attached to the data in which they exist, so they can be
+ * replaced at the last possible moment, without interfering with cacheability.
+ * Unfortunately, because it is not possible to associate bubbleable metadata
+ * with a Text Editor's JS settings, we have to manually process these. This is
+ * acceptable only because a text editor's JS settings are not cacheable anyway
+ * (just like forms are not cacheable).
+ *
+ * @see \Drupal\Core\Access\CsrfAccessCheck
+ * @see \Drupal\Core\Access\RouteProcessorCsrf::processOutbound()
+ * @see \Drupal\Core\Render\BubbleableMetadata
+ * @see \Drupal\editor\Plugin\EditorPluginInterface::getJSSettings()
+ * @see \Drupal\ckeditor5\Plugin\CKEditor5Plugin\ImageUpload::getDynamicPluginConfig()
+ * @see \Drupal\ckeditor5\Plugin\CKEditor5Plugin\Media::getDynamicPluginConfig()
+ * @see https://www.drupal.org/project/drupal/issues/2512132
+ *
+ * @internal
+ */
+trait DynamicPluginConfigWithCsrfTokenUrlTrait {
+
+  /**
+   * Gets the given URL with all placeholders replaced.
+   *
+   * @param \Drupal\Core\Url $url
+   *   A URL which generates CSRF token placeholders.
+   *
+   * @return string
+   *   The URL string, with all placeholders replaced.
+   */
+  private static function getUrlWithReplacedCsrfTokenPlaceholder(Url $url): string {
+    $generated_url = $url->toString(TRUE);
+    $url_with_csrf_token_placeholder = [
+      '#plain_text' => $generated_url->getGeneratedUrl(),
+    ];
+    $generated_url->applyTo($url_with_csrf_token_placeholder);
+    return (string) \Drupal::service('renderer')->renderPlain($url_with_csrf_token_placeholder);
+  }
+
+}
diff --git a/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/Heading.php b/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/Heading.php
new file mode 100644
index 000000000000..0dcd50a46385
--- /dev/null
+++ b/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/Heading.php
@@ -0,0 +1,226 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Drupal\ckeditor5\Plugin\CKEditor5Plugin;
+
+use Drupal\ckeditor5\Plugin\CKEditor5PluginConfigurableTrait;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginDefault;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginConfigurableInterface;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginElementsSubsetInterface;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginManagerInterface;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\editor\EditorInterface;
+
+/**
+ * CKEditor 5 Heading plugin.
+ *
+ * @internal
+ *   Plugin classes are internal.
+ */
+class Heading extends CKEditor5PluginDefault implements CKEditor5PluginConfigurableInterface, CKEditor5PluginElementsSubsetInterface {
+
+  use CKEditor5PluginConfigurableTrait;
+
+  /**
+   * The headings that cannot be disabled.
+   *
+   * @var string[]
+   */
+  const ALWAYS_ENABLED_HEADINGS = [
+    'paragraph',
+  ];
+
+  /**
+   * The default configuration for this plugin.
+   *
+   * @var string[][]
+   */
+  const DEFAULT_CONFIGURATION = [
+    'enabled_headings' => [
+      'heading2',
+      'heading3',
+      'heading4',
+      'heading5',
+      'heading6',
+    ],
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  public function defaultConfiguration() {
+    return static::DEFAULT_CONFIGURATION;
+  }
+
+  /**
+   * Computes all valid choices for the "enabled_headings" setting.
+   *
+   * @see ckeditor5.schema.yml
+   *
+   * @return string[]
+   *   All valid choices.
+   */
+  public static function validChoices(): array {
+    $cke5_plugin_manager = \Drupal::service('plugin.manager.ckeditor5.plugin');
+    assert($cke5_plugin_manager instanceof CKEditor5PluginManagerInterface);
+    $plugin_definition = $cke5_plugin_manager->getDefinition('ckeditor5_heading');
+    assert($plugin_definition->getClass() === static::class);
+    return array_diff(
+      array_column($plugin_definition->getCKEditor5Config()['heading']['options'], 'model'),
+      static::ALWAYS_ENABLED_HEADINGS
+    );
+  }
+
+  /**
+   * Gets all enabled headings.
+   *
+   * @return string[]
+   *   The values in the plugins.ckeditor5_heading.enabled_headings configuration
+   *   plus the headings that are always enabled.
+   */
+  private function getEnabledHeadings(): array {
+    return array_merge(
+      self::ALWAYS_ENABLED_HEADINGS,
+      $this->configuration['enabled_headings']
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   *
+   * Form for choosing which heading tags are available.
+   */
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
+    $form['enabled_headings'] = [
+      '#type' => 'fieldset',
+      '#title' => $this->t('Enabled Headings'),
+      '#description' => $this->t('These are the headings that will appear in the headings dropdown. If a heading is not chosen here, it does not necessarily mean the corresponding tag is disallowed in the text format.'),
+    ];
+
+    foreach ($this->getPluginDefinition()->getCKEditor5Config()['heading']['options'] as $heading_option) {
+      $model = $heading_option['model'];
+
+      if (in_array($model, self::ALWAYS_ENABLED_HEADINGS, TRUE)) {
+        continue;
+      }
+
+      // It's safe to use $model as a key: listing the same model twice with
+      // different properties triggers a schema error in CKEditor 5.
+      // @see https://ckeditor.com/docs/ckeditor5/latest/framework/guides/support/error-codes.html#error-schema-cannot-register-item-twice
+      // @see https://ckeditor.com/docs/ckeditor5/latest/features/headings.html#configuring-custom-heading-elements
+      $form['enabled_headings'][$model] = self::generateCheckboxForHeadingOption($heading_option);
+      $form['enabled_headings'][$model]['#default_value'] = in_array($model, $this->configuration['enabled_headings'], TRUE) ? $model : NULL;
+    }
+
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {
+    // Match the config schema structure at ckeditor5.plugin.ckeditor5_heading.
+    $form_value = $form_state->getValue('enabled_headings');
+    $config_value = array_values(array_filter($form_value));
+    $form_state->setValue('enabled_headings', $config_value);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
+    $this->configuration['enabled_headings'] = $form_state->getValue('enabled_headings');
+  }
+
+  /**
+   * Generates checkbox for a CKEditor 5 heading plugin config option.
+   *
+   * @param array $heading_option
+   *   A heading option configuration as the CKEditor 5 Heading plugin expects
+   *   in its configuration.
+   *
+   * @return array
+   *   The checkbox render array.
+   *
+   * @see https://ckeditor.com/docs/ckeditor5/latest/api/module_heading_heading-HeadingConfig.html#member-options
+   */
+  private static function generateCheckboxForHeadingOption(array $heading_option): array {
+    // This requires the `title` and `model` properties. The `class` property is
+    // optional. The `view` property is not used.
+    assert(array_key_exists('title', $heading_option));
+    assert(array_key_exists('model', $heading_option));
+
+    $checkbox = [
+      '#type' => 'checkbox',
+      '#title' => $heading_option['title'],
+      '#return_value' => $heading_option['model'],
+    ];
+    if (isset($heading_option['class'])) {
+      $checkbox['#label_attributes']['class'][] = $heading_option['class'];
+      $checkbox['#label_attributes']['class'][] = 'ck';
+    }
+
+    return $checkbox;
+  }
+
+  /**
+   * {@inheritdoc}
+   *
+   * Filters the header options to those chosen in editor config.
+   */
+  public function getDynamicPluginConfig(array $static_plugin_config, EditorInterface $editor): array {
+    $enabled_headings = $this->getEnabledHeadings($editor);
+    $all_heading_options = $static_plugin_config['heading']['options'];
+
+    $configured_heading_options = array_filter($all_heading_options, function ($option) use ($enabled_headings) {
+      return in_array($option['model'], $enabled_headings, TRUE);
+    });
+
+    return [
+      'heading' => [
+        'options' => array_values($configured_heading_options),
+      ],
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getElementsSubset(): array {
+    return $this->enabledHeadingsToTags($this->configuration['enabled_headings']);
+  }
+
+  /**
+   * Returns an array of enabled tags based on the enabled headings.
+   *
+   * @param string[] $enabled_headings
+   *   Array of the enabled headings.
+   *
+   * @return string[]
+   *   List of tags provided by the enabled headings.
+   */
+  private function enabledHeadingsToTags(array $enabled_headings): array {
+    $plugin_definition = $this->getPluginDefinition();
+    $elements = $plugin_definition->getElements();
+    $heading_keyed_by_model = [];
+    foreach ($plugin_definition->getCKEditor5Config()['heading']['options'] as $configured_heading) {
+      if (isset($configured_heading['model'])) {
+        $heading_keyed_by_model[$configured_heading['model']] = $configured_heading;
+      }
+    }
+
+    $tags_to_return = [];
+    foreach ($enabled_headings as $model) {
+      if (isset($heading_keyed_by_model[$model]) && isset($heading_keyed_by_model[$model]['view'])) {
+        $element_as_tag = "<{$heading_keyed_by_model[$model]['view']}>";
+        if (in_array($element_as_tag, $elements, TRUE)) {
+          $tags_to_return[] = "<{$heading_keyed_by_model[$model]['view']}>";
+        }
+      }
+    }
+
+    return $tags_to_return;
+  }
+
+}
diff --git a/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/ImageUpload.php b/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/ImageUpload.php
new file mode 100644
index 000000000000..aa1d68267bf9
--- /dev/null
+++ b/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/ImageUpload.php
@@ -0,0 +1,106 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Plugin\CKEditor5Plugin;
+
+use Drupal\ckeditor5\Plugin\CKEditor5PluginConfigurableTrait;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginDefault;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginConfigurableInterface;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Url;
+use Drupal\editor\EditorInterface;
+
+// cspell:ignore imageupload
+
+/**
+ * CKEditor 5 Image plugin.
+ *
+ * @CKEditor5Plugin(
+ *   id = "ckeditor5_imageUpload",
+ *   ckeditor5 = @CKEditor5AspectsOfCKEditor5Plugin(
+ *     plugins = {"image.ImageUpload", "drupalImage.DrupalImageUpload"},
+ *     config = {
+ *       "image" = {
+ *         "upload" = {
+ *           "types" = { "jpeg", "png", "gif" }
+ *         }
+ *       }
+ *     },
+ *   ),
+ *   drupal = @DrupalAspectsOfCKEditor5Plugin(
+ *     label = @Translation("Image Upload"),
+ *     elements = false,
+ *     admin_library = "ckeditor5/admin.imageupload",
+ *     toolbar_items = {
+ *       "uploadImage" = { "label" = "Image upload" }
+ *     },
+ *     conditions = {
+ *       "toolbarItem" = "uploadImage",
+ *       "imageUploadStatus" = true,
+ *     }
+ *   )
+ * )
+ *
+ * @internal
+ *   Plugin classes are internal.
+ */
+class ImageUpload extends CKEditor5PluginDefault implements CKEditor5PluginConfigurableInterface {
+
+  use CKEditor5PluginConfigurableTrait;
+  use DynamicPluginConfigWithCsrfTokenUrlTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDynamicPluginConfig(array $static_plugin_config, EditorInterface $editor): array {
+    return $static_plugin_config + [
+      'drupalImageUpload' => [
+        'uploadUrl' => self::getUrlWithReplacedCsrfTokenPlaceholder(
+          Url::fromRoute('ckeditor5.upload_image')
+            ->setRouteParameter('editor', $editor->getFilterFormat()->id())
+        ),
+        'withCredentials' => TRUE,
+        'headers' => ['Accept' => 'application/json', 'text/javascript'],
+      ],
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   *
+   * @see \Drupal\editor\Form\EditorImageDialog
+   * @see editor_image_upload_settings_form()
+   */
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
+    $form_state->loadInclude('editor', 'admin.inc');
+    return editor_image_upload_settings_form($form_state->get('editor'));
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {
+    $form_state->setValue('status', (bool) $form_state->getValue('status'));
+    $form_state->setValue(['max_dimensions', 'width'], (int) $form_state->getValue(['max_dimensions', 'width']));
+    $form_state->setValue(['max_dimensions', 'height'], (int) $form_state->getValue(['max_dimensions', 'height']));
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
+    // Store this configuration in its out-of-band location.
+    $form_state->get('editor')->setImageUploadSettings($form_state->getValues());
+  }
+
+  /**
+   * {@inheritdoc}
+   *
+   * This returns an empty array as image upload config is stored out of band.
+   */
+  public function defaultConfiguration() {
+    return [];
+  }
+
+}
diff --git a/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/Language.php b/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/Language.php
new file mode 100644
index 000000000000..ccbeb9884f91
--- /dev/null
+++ b/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/Language.php
@@ -0,0 +1,102 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Plugin\CKEditor5Plugin;
+
+use Drupal\ckeditor5\Plugin\CKEditor5PluginConfigurableTrait;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginDefault;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginConfigurableInterface;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Language\LanguageManager;
+use Drupal\Core\Language\LanguageInterface;
+use Drupal\editor\EditorInterface;
+
+/**
+ * CKEditor 5 Language plugin.
+ *
+ * @internal
+ *   Plugin classes are internal.
+ */
+class Language extends CKEditor5PluginDefault implements CKEditor5PluginConfigurableInterface {
+
+  use CKEditor5PluginConfigurableTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDynamicPluginConfig(array $static_plugin_config, EditorInterface $editor): array {
+    $predefined_languages = $this->configuration['language_list'] === 'all' ?
+      LanguageManager::getStandardLanguageList() :
+      LanguageManager::getUnitedNationsLanguageList();
+
+    // Generate the language_list setting as expected by the CKEditor Language
+    // plugin, but key the values by the full language name so that we can sort
+    // them later on.
+    $language_list = [];
+    foreach ($predefined_languages as $langcode => $language) {
+      $english_name = $language[0];
+      $direction = empty($language[2]) ? NULL : $language[2];
+      $language_list[$english_name] = [
+        'title' => $english_name,
+        'languageCode' => $langcode,
+      ];
+      if ($direction === LanguageInterface::DIRECTION_RTL) {
+        $language_list[$english_name]['textDirection'] = 'rtl';
+      }
+    }
+
+    // Sort on full language name.
+    ksort($language_list);
+    $dynamic_plugin_config = $static_plugin_config;
+    $dynamic_plugin_config['language']['textPartLanguage'] = array_values($language_list);
+    return $dynamic_plugin_config;
+  }
+
+  /**
+   * {@inheritdoc}
+   *
+   * @see \Drupal\editor\Form\EditorImageDialog
+   * @see editor_image_upload_settings_form()
+   */
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
+    $predefined_languages = LanguageManager::getStandardLanguageList();
+    $form['language_list'] = [
+      '#title' => $this->t('Language list'),
+      '#title_display' => 'invisible',
+      '#type' => 'select',
+      '#options' => [
+        'un' => $this->t("United Nations' official languages"),
+        'all' => $this->t('All @count languages', ['@count' => count($predefined_languages)]),
+      ],
+      '#default_value' => $this->configuration['language_list'],
+      '#description' => $this->t('The list of languages to show in the language dropdown. The basic list will only show the <a href=":url">six official languages of the UN</a>. The extended list will show all @count languages that are available in Drupal.', [
+        ':url' => 'https://www.un.org/en/sections/about-un/official-languages',
+        '@count' => count($predefined_languages),
+      ]),
+    ];
+
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
+    $this->configuration['language_list'] = $form_state->getValue('language_list');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function defaultConfiguration() {
+    return ['language_list' => 'un'];
+  }
+
+}
diff --git a/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/Media.php b/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/Media.php
new file mode 100644
index 000000000000..40d65f067916
--- /dev/null
+++ b/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/Media.php
@@ -0,0 +1,40 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Plugin\CKEditor5Plugin;
+
+use Drupal\ckeditor5\Plugin\CKEditor5PluginDefault;
+use Drupal\Core\Url;
+use Drupal\editor\EditorInterface;
+
+/**
+ * CKEditor 5 Media plugin.
+ *
+ * Provides drupal-media element and options provided by the CKEditor 5 build.
+ *
+ * @internal
+ *   Plugin classes are internal.
+ */
+class Media extends CKEditor5PluginDefault {
+
+  use DynamicPluginConfigWithCsrfTokenUrlTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDynamicPluginConfig(array $static_plugin_config, EditorInterface $editor): array {
+    $dynamic_plugin_config = $static_plugin_config;
+    $dynamic_plugin_config['drupalMedia']['previewURL'] = Url::fromRoute('media.filter.preview')
+      ->setRouteParameter('filter_format', $editor->getFilterFormat()->id())
+      ->toString(TRUE)
+      ->getGeneratedUrl();
+    $dynamic_plugin_config['drupalMedia']['isMediaUrl'] = self::getUrlWithReplacedCsrfTokenPlaceholder(
+      Url::fromRoute('ckeditor5.media_image')
+        ->setRouteParameter('editor', $editor->id())
+    );
+    $dynamic_plugin_config['drupalMedia']['previewCsrfToken'] = \Drupal::csrfToken()->get('X-Drupal-MediaPreview-CSRF-Token');
+    return $dynamic_plugin_config;
+  }
+
+}
diff --git a/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/MediaLibrary.php b/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/MediaLibrary.php
new file mode 100644
index 000000000000..47cf82319978
--- /dev/null
+++ b/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/MediaLibrary.php
@@ -0,0 +1,102 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Plugin\CKEditor5Plugin;
+
+use Drupal\ckeditor5\Plugin\CKEditor5PluginDefault;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginDefinition;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Drupal\Core\Url;
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\editor\EditorInterface;
+use Drupal\media_library\MediaLibraryState;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * CKEditor 5 Media Library plugin.
+ *
+ * Provides media library support and options for the CKEditor 5 build.
+ *
+ * @internal
+ *   Plugin classes are internal.
+ */
+class MediaLibrary extends CKEditor5PluginDefault implements ContainerFactoryPluginInterface {
+
+  /**
+   * The media type entity storage.
+   *
+   * @var \Drupal\Core\Config\Entity\ConfigEntityStorageInterface
+   */
+  protected $mediaTypeStorage;
+
+  /**
+   * MediaLibrary constructor.
+   *
+   * @param array $configuration
+   *   A configuration array containing information about the plugin instance.
+   * @param string $plugin_id
+   *   The plugin_id for the plugin instance.
+   * @param \Drupal\ckeditor5\Plugin\CKEditor5PluginDefinition $plugin_definition
+   *   The plugin implementation definition.
+   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
+   *   The entity type manager.
+   */
+  public function __construct(array $configuration, string $plugin_id, CKEditor5PluginDefinition $plugin_definition, EntityTypeManagerInterface $entity_type_manager) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+    $this->mediaTypeStorage = $entity_type_manager->getStorage('media_type');
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $container->get('entity_type.manager'),
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDynamicPluginConfig(array $static_plugin_config, EditorInterface $editor): array {
+    $media_type_ids = $this->mediaTypeStorage->getQuery()->execute();
+
+    if ($editor->hasAssociatedFilterFormat()) {
+      $media_embed_filter = $editor->getFilterFormat()->filters()->get('media_embed');
+      // Optionally limit the allowed media types based on the MediaEmbed
+      // setting. If the setting is empty, do not limit the options.
+      if (!empty($media_embed_filter->settings['allowed_media_types'])) {
+        $media_type_ids = array_intersect_key($media_type_ids, $media_embed_filter->settings['allowed_media_types']);
+      }
+    }
+    if (in_array('image', $media_type_ids, TRUE)) {
+      // Move image to first position.
+      // This workaround can be removed once this issue is fixed:
+      // @see https://www.drupal.org/project/drupal/issues/3073799
+      array_unshift($media_type_ids, 'image');
+      $media_type_ids = array_unique($media_type_ids);
+    }
+
+    $state = MediaLibraryState::create(
+      'media_library.opener.editor',
+      $media_type_ids,
+      reset($media_type_ids),
+      1,
+      ['filter_format_id' => $editor->getFilterFormat()->id()],
+    );
+
+    $library_url = Url::fromRoute('media_library.ui')
+      ->setOption('query', $state->all())
+      ->toString(TRUE)
+      ->getGeneratedUrl();
+
+    $dynamic_plugin_config = $static_plugin_config;
+    $dynamic_plugin_config['drupalMedia']['libraryURL'] = $library_url;
+    return $dynamic_plugin_config;
+  }
+
+}
diff --git a/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/SourceEditing.php b/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/SourceEditing.php
new file mode 100644
index 000000000000..11717006e904
--- /dev/null
+++ b/core/modules/ckeditor5/src/Plugin/CKEditor5Plugin/SourceEditing.php
@@ -0,0 +1,87 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Drupal\ckeditor5\Plugin\CKEditor5Plugin;
+
+use Drupal\ckeditor5\HTMLRestrictionsUtilities;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginConfigurableTrait;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginDefault;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginConfigurableInterface;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginElementsSubsetInterface;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\editor\EditorInterface;
+
+/**
+ * CKEditor 5 Source Editing plugin configuration.
+ *
+ * @internal
+ *   Plugin classes are internal.
+ */
+class SourceEditing extends CKEditor5PluginDefault implements CKEditor5PluginConfigurableInterface, CKEditor5PluginElementsSubsetInterface {
+
+  use CKEditor5PluginConfigurableTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
+    $form['allowed_tags'] = [
+      '#type' => 'textarea',
+      '#title' => $this->t('Manually editable HTML tags'),
+      '#default_value' => implode(' ', $this->configuration['allowed_tags']),
+      '#description' => $this->t('A list of HTML tags that can be used while editing source. It is only necessary to add tags that are not already supported by other enabled plugins. For example, if "Bold" is enabled, it is not necessary to add the <code>&lt;strong&gt;</code> tag, but it may be necessary to add <code>&lt;dl&gt;&lt;dt&gt;&lt;dd&gt;</code> in a format that does not have a definition list plugin, but requires definition list markup.'),
+    ];
+
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {
+    // Match the config schema structure at ckeditor5.plugin.ckeditor5_heading.
+    $form_value = $form_state->getValue('allowed_tags');
+    if (!is_array($form_value)) {
+      $config_value = HTMLRestrictionsUtilities::allowedElementsStringToPluginElementsArray($form_value);
+      $form_state->setValue('allowed_tags', $config_value);
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
+    $this->configuration['allowed_tags'] = $form_state->getValue('allowed_tags');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function defaultConfiguration() {
+    return [
+      'allowed_tags' => [],
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getElementsSubset(): array {
+    return $this->configuration['allowed_tags'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDynamicPluginConfig(array $static_plugin_config, EditorInterface $editor): array {
+    $allowed = HTMLRestrictionsUtilities::allowedElementsStringToHtmlSupportConfig(implode('', $this->configuration['allowed_tags']));
+
+    return [
+      'htmlSupport' => [
+        'allow' => $allowed,
+      ],
+    ];
+  }
+
+}
diff --git a/core/modules/ckeditor5/src/Plugin/CKEditor5PluginConfigurableInterface.php b/core/modules/ckeditor5/src/Plugin/CKEditor5PluginConfigurableInterface.php
new file mode 100644
index 000000000000..a78fe949a236
--- /dev/null
+++ b/core/modules/ckeditor5/src/Plugin/CKEditor5PluginConfigurableInterface.php
@@ -0,0 +1,26 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Plugin;
+
+use Drupal\Component\Plugin\ConfigurableInterface;
+use Drupal\Core\Plugin\PluginFormInterface;
+
+/**
+ * Defines an interface for configurable CKEditor 5 plugins.
+ *
+ * This allows a CKEditor 5 plugin to define a settings form. These settings can
+ * then be automatically passed on to the corresponding CKEditor 5 instance via
+ * CKEditor5PluginInterface::getDynamicPluginConfig().
+ *
+ * @see \Drupal\ckeditor5\Plugin\CKEditor5PluginConfigurableTrait
+ * @see \Drupal\ckeditor5\CKEditor5PluginInterface
+ * @see \Drupal\ckeditor5\Plugin\CKEditor5PluginBase
+ * @see \Drupal\ckeditor5\Plugin\CKEditor5PluginManagerInterface
+ * @see \Drupal\ckeditor5\Annotation\CKEditor5Plugin
+ * @see plugin_api
+ */
+interface CKEditor5PluginConfigurableInterface extends CKEditor5PluginInterface, ConfigurableInterface, PluginFormInterface {
+
+}
diff --git a/core/modules/ckeditor5/src/Plugin/CKEditor5PluginConfigurableTrait.php b/core/modules/ckeditor5/src/Plugin/CKEditor5PluginConfigurableTrait.php
new file mode 100644
index 000000000000..1a790970eb09
--- /dev/null
+++ b/core/modules/ckeditor5/src/Plugin/CKEditor5PluginConfigurableTrait.php
@@ -0,0 +1,26 @@
+<?php
+
+namespace Drupal\ckeditor5\Plugin;
+
+/**
+ * Provides a trait for configurable CKEditor 5 plugins.
+ *
+ * @see \Drupal\ckeditor5\Plugin\CKEditor5PluginConfigurableInterface
+ */
+trait CKEditor5PluginConfigurableTrait {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getConfiguration() {
+    return $this->configuration;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setConfiguration(array $configuration) {
+    $this->configuration = $configuration + $this->defaultConfiguration();
+  }
+
+}
diff --git a/core/modules/ckeditor5/src/Plugin/CKEditor5PluginDefault.php b/core/modules/ckeditor5/src/Plugin/CKEditor5PluginDefault.php
new file mode 100644
index 000000000000..e4b0da8e6fe7
--- /dev/null
+++ b/core/modules/ckeditor5/src/Plugin/CKEditor5PluginDefault.php
@@ -0,0 +1,40 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Plugin;
+
+use Drupal\Core\Plugin\PluginBase;
+use Drupal\editor\EditorInterface;
+
+/**
+ * Defines the default CKEditor 5 plugin implementation.
+ *
+ * When a CKEditor 5 plugin is not configurable nor has dynamic plugin
+ * configuration, no custom code needs to be written: this default
+ * implementation will be used under the hood.
+ *
+ * @see @see \Drupal\ckeditor5\Annotation\DrupalAspectsOfCKEditor5Plugin::$class
+ */
+class CKEditor5PluginDefault extends PluginBase implements CKEditor5PluginInterface {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+
+    // Ensure the configuration is set as expected for configurable plugins.
+    if ($this instanceof CKEditor5PluginConfigurableInterface) {
+      $this->setConfiguration($configuration);
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDynamicPluginConfig(array $static_plugin_config, EditorInterface $editor): array {
+    return $static_plugin_config;
+  }
+
+}
diff --git a/core/modules/ckeditor5/src/Plugin/CKEditor5PluginDefinition.php b/core/modules/ckeditor5/src/Plugin/CKEditor5PluginDefinition.php
new file mode 100644
index 000000000000..252f884fe933
--- /dev/null
+++ b/core/modules/ckeditor5/src/Plugin/CKEditor5PluginDefinition.php
@@ -0,0 +1,426 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Plugin;
+
+use Drupal\ckeditor5\HTMLRestrictionsUtilities;
+use Drupal\Component\Assertion\Inspector;
+use Drupal\Component\Plugin\Definition\PluginDefinition;
+use Drupal\Component\Plugin\Definition\PluginDefinitionInterface;
+use Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException;
+use Drupal\Core\Config\Schema\SchemaCheckTrait;
+use Drupal\Core\StringTranslation\TranslatableMarkup;
+
+/**
+ * Provides an implementation of a CKEditor 5 plugin definition.
+ */
+final class CKEditor5PluginDefinition extends PluginDefinition implements PluginDefinitionInterface {
+
+  use SchemaCheckTrait;
+
+  /**
+   * The CKEditor 5 aspects of the plugin definition.
+   *
+   * @var array
+   */
+  private $ckeditor5;
+
+  /**
+   * The Drupal aspects of the plugin definition.
+   *
+   * @var array
+   */
+  private $drupal;
+
+  /**
+   * CKEditor5PluginDefinition constructor.
+   *
+   * @param array $definition
+   *   An array of values from the annotation/YAML.
+   *
+   * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
+   */
+  public function __construct(array $definition) {
+    $this->id = $id = $definition['id'];
+
+    $expected_prefix = sprintf("%s_", $definition['provider']);
+    if (strpos($id, $expected_prefix) !== 0) {
+      throw new InvalidPluginDefinitionException($id, sprintf('The "%s" CKEditor 5 plugin definition must have a plugin ID that starts with "%s".', $id, $expected_prefix));
+    }
+    $this->provider = $definition['provider'];
+
+    static::validateCKEditor5Aspects($id, $definition);
+    $this->ckeditor5 = $definition['ckeditor5'];
+
+    $this->validateDrupalAspects($id, $definition);
+    $this->drupal = $definition['drupal'];
+  }
+
+  /**
+   * Gets an array representation of this CKEditor 5 plugin definition.
+   *
+   * @return array
+   */
+  public function toArray(): array {
+    return [
+      'id' => $this->id(),
+      'provider' => $this->provider,
+      'ckeditor5' => $this->ckeditor5,
+      'drupal' => $this->drupal,
+    ];
+  }
+
+  /**
+   * Validates the CKEditor 5 aspects of the CKEditor 5 plugin definition.
+   *
+   * @param string $id
+   *   The plugin ID, for use in exception messages.
+   * @param array $definition
+   *   The plugin definition to validate.
+   *
+   * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
+   */
+  private static function validateCKEditor5Aspects(string $id, array $definition): void {
+    if (!isset($definition['ckeditor5'])) {
+      throw new InvalidPluginDefinitionException($id, sprintf('The "%s" CKEditor 5 plugin definition must contain a "ckeditor5" key.', $id));
+    }
+
+    if (!isset($definition['ckeditor5']['plugins'])) {
+      throw new InvalidPluginDefinitionException($id, sprintf('The "%s" CKEditor 5 plugin definition must contain a "ckeditor5.plugins" key.', $id));
+    }
+  }
+
+  /**
+   * Validates the Drupal aspects of the CKEditor 5 plugin definition.
+   *
+   * @param string $id
+   *   The plugin ID, for use in exception messages.
+   * @param array $definition
+   *   The plugin definition to validate.
+   *
+   * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
+   */
+  private function validateDrupalAspects(string $id, array $definition): void {
+    if (!isset($definition['drupal'])) {
+      throw new InvalidPluginDefinitionException($id, sprintf('The "%s" CKEditor 5 plugin definition must contain a "drupal" key.', $id));
+    }
+
+    // Without a label, the CKEditor 5 UI, validation constraints et cetera
+    // cannot be as informative in guiding the end user.
+    if (!isset($definition['drupal']['label'])) {
+      throw new InvalidPluginDefinitionException($id, sprintf('The "%s" CKEditor 5 plugin definition must contain a "drupal.label" key.', $id));
+    }
+    elseif (!is_string($definition['drupal']['label']) && !$definition['drupal']['label'] instanceof TranslatableMarkup) {
+      throw new InvalidPluginDefinitionException($id, sprintf('The "%s" CKEditor 5 plugin definition has a "drupal.label" value that is not a string nor a TranslatableMarkup instance.', $id));
+    }
+
+    // Without accurate and complete metadata about what HTML elements a
+    // CKEditor 5 plugin supports, Drupal cannot ensure a complete and accurate
+    // upgrade path.
+    if (!isset($definition['drupal']['elements'])) {
+      throw new InvalidPluginDefinitionException($id, sprintf('The "%s" CKEditor 5 plugin definition must contain a "drupal.elements" key.', $id));
+    }
+    elseif ($definition['drupal']['elements'] !== FALSE && !(is_array($definition['drupal']['elements']) && !empty($definition['drupal']['elements']) && Inspector::assertAllStrings($definition['drupal']['elements']))) {
+      throw new InvalidPluginDefinitionException($id, sprintf('The "%s" CKEditor 5 plugin definition has a "drupal.elements" value that is neither a list of HTML tags/attributes nor false.', $id));
+    }
+    elseif (is_array($definition['drupal']['elements'])) {
+      foreach ($definition['drupal']['elements'] as $index => $element) {
+        // ckeditor5_sourceEditing is the edge case here: it is the only plugin
+        // that is allowed to return a superset. It's a special case because it
+        // is through configuring this particular plugin that additional HTML
+        // tags can be allowed.
+        // Even though its plugin definition says '<*>' is supported, this is a
+        // little lie to convey that this plugin is capable of supporting any
+        // HTML tag … but which ones are actually supported depends on the
+        // configuration.
+        // This also means that without any configuration, it does not support
+        // any HTML tags.
+        // @see \Drupal\ckeditor5\Plugin\CKEditor5PluginManager::getProvidedElements()
+        if ($definition['id'] === 'ckeditor5_sourceEditing') {
+          continue;
+        }
+        $parsed_elements = HTMLRestrictionsUtilities::allowedElementsStringToPluginElementsArray($element);
+        if (count($parsed_elements) === 0) {
+          throw new InvalidPluginDefinitionException($id, sprintf('The "%s" CKEditor 5 plugin definition has a value at "drupal.elements.%d" that is not an HTML tag with optional attributes: "%s". Expected structure: "<tag allowedAttribute="allowedValue1 allowedValue2">".', $id, $index, $element));
+        }
+        elseif (count($parsed_elements) > 1) {
+          throw new InvalidPluginDefinitionException($id, sprintf('The "%s" CKEditor 5 plugin definition has a value at "drupal.elements.%d": multiple tags listed, should be one: "%s".', $id, $index, $element));
+        }
+      }
+    }
+
+    if (isset($definition['drupal']['class']) && !class_exists($definition['drupal']['class'])) {
+      throw new InvalidPluginDefinitionException($id, sprintf('The CKEditor 5 "%s" provides a plugin class: "%s", but it does not exist.', $id, $definition['drupal']['class']));
+    }
+    elseif (isset($definition['drupal']['class']) && !in_array(CKEditor5PluginInterface::class, class_implements($definition['drupal']['class']))) {
+      throw new InvalidPluginDefinitionException($id, sprintf('CKEditor 5 plugins must implement \Drupal\ckeditor5\Plugin\CKEditor5PluginInterface. "%s" does not.', $id));
+    }
+    elseif (in_array(CKEditor5PluginConfigurableInterface::class, class_implements($definition['drupal']['class'], TRUE))) {
+      $default_configuration = (new \ReflectionClass($definition['drupal']['class']))
+        ->newInstanceWithoutConstructor()
+        ->defaultConfiguration();
+      $typed_config = \Drupal::service('config.typed');
+      if (!empty($default_configuration)) {
+        $configuration_name = sprintf("ckeditor5.plugin.%s", $definition['id']);
+        if (!$typed_config->hasConfigSchema($configuration_name)) {
+          throw new InvalidPluginDefinitionException($id, sprintf('The "%s" CKEditor 5 plugin definition is configurable, has non-empty default configuration but has no config schema. Config schema is required for validation.', $id));
+        }
+        // TRICKY: SchemaCheckTrait::checkConfigSchema() dynamically adds a
+        // 'langcode' key-value pair that is irrelevant here. Also,
+        // ::checkValue() may (counter to its docs) trigger an exception.
+        $this->configName = 'STRIP';
+        $this->schema = $typed_config->createFromNameAndData($configuration_name, $default_configuration);
+        $schema_errors = [];
+        foreach ($default_configuration as $key => $value) {
+          try {
+            $schema_error = $this->checkValue($key, $value);
+          }
+          catch (\InvalidArgumentException $e) {
+            $schema_error = [$key => $e->getMessage()];
+          }
+          $schema_errors = array_merge($schema_errors, $schema_error);
+        }
+        $formatted_schema_errors = [];
+        foreach ($schema_errors as $key => $value) {
+          $formatted_schema_errors[] = sprintf("[%s] %s", str_replace('STRIP:', '', $key), trim($value, '.'));
+        }
+        if (!empty($schema_errors)) {
+          throw new InvalidPluginDefinitionException($id, sprintf('The "%s" CKEditor 5 plugin definition is configurable, but its default configuration does not match its config schema. The following errors were found: %s.', $id, implode(', ', $formatted_schema_errors)));
+        }
+      }
+    }
+
+    if ($definition['drupal']['admin_library'] !== FALSE) {
+      [$extension, $library] = explode('/', $definition['drupal']['admin_library'], 2);
+      if (\Drupal::service('library.discovery')->getLibraryByName($extension, $library) === FALSE) {
+        throw new InvalidPluginDefinitionException($id, sprintf('The "%s" CKEditor 5 plugin definition has a "drupal.admin_library" key whose asset library "%s" does not exist.', $id, $definition['drupal']['admin_library']));
+      }
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   *
+   * @see \Drupal\ckeditor5\Annotation\DrupalAspectsOfCKEditor5Plugin::$class
+   */
+  public function getClass() {
+    return $this->drupal['class'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setClass($class) {
+    $this->drupal['class'] = $class;
+    return $this;
+  }
+
+  /**
+   * Whether this plugin is configurable by the user.
+   *
+   * @return bool
+   *   TRUE if it is configurable, FALSE otherwise.
+   *
+   * @see \Drupal\ckeditor5\Plugin\CKEditor5PluginConfigurableInterface
+   */
+  public function isConfigurable(): bool {
+    return is_subclass_of($this->getClass(), CKEditor5PluginConfigurableInterface::class);
+  }
+
+  /**
+   * Gets the human-readable name of the CKEditor plugin.
+   *
+   * @return \Drupal\Core\StringTranslation\TranslatableMarkup
+   *
+   * @see \Drupal\ckeditor5\Annotation\DrupalAspectsOfCKEditor5Plugin::$label
+   */
+  public function label(): TranslatableMarkup {
+    $label = $this->drupal['label'];
+    if (!$label instanceof TranslatableMarkup) {
+      $label = new TranslatableMarkup($label);
+    }
+    return $label;
+  }
+
+  /**
+   * Gets the list of conditions to enable this plugin.
+   *
+   * @return array
+   *   An array of conditions.
+   *
+   * @see \Drupal\ckeditor5\Annotation\DrupalAspectsOfCKEditor5Plugin::$conditions
+   *
+   * @throws \LogicException
+   *   When called on a plugin definition that has no conditions.
+   */
+  public function getConditions(): array {
+    if (!$this->hasConditions()) {
+      throw new \LogicException('::getConditions() should only be called if ::hasConditions() returns TRUE.');
+    }
+    return $this->drupal['conditions'];
+  }
+
+  /**
+   * Whether this plugin has conditions.
+   *
+   * @return bool
+   *
+   * @see \Drupal\ckeditor5\Annotation\DrupalAspectsOfCKEditor5Plugin::$conditions
+   */
+  public function hasConditions(): bool {
+    return $this->drupal['conditions'] !== FALSE;
+  }
+
+  /**
+   * Gets the list of toolbar items this plugin provides.
+   *
+   * @return array[]
+   *   An array of toolbar items.
+   *
+   * @see \Drupal\ckeditor5\Annotation\DrupalAspectsOfCKEditor5Plugin::$toolbar_items
+   */
+  public function getToolbarItems(): array {
+    return $this->drupal['toolbar_items'];
+  }
+
+  /**
+   * Whether this plugin has toolbar items.
+   *
+   * @return bool
+   *
+   * @see \Drupal\ckeditor5\Annotation\DrupalAspectsOfCKEditor5Plugin::$toolbar_items
+   */
+  public function hasToolbarItems(): bool {
+    return $this->getToolbarItems() !== [];
+  }
+
+  /**
+   * Gets the asset library this plugin needs to be loaded.
+   *
+   * @return string
+   *   An asset library ID.
+   *
+   * @see \Drupal\ckeditor5\Annotation\DrupalAspectsOfCKEditor5Plugin::$library
+   *
+   * @throws \LogicException
+   *   When called on a plugin definition that has no library.
+   */
+  public function getLibrary(): string {
+    if (!$this->hasLibrary()) {
+      throw new \LogicException('::getLibrary() should only be called if ::hasLibrary() returns TRUE.');
+    }
+    return $this->drupal['library'];
+  }
+
+  /**
+   * Whether this plugin has an asset library to load.
+   *
+   * @return bool
+   *
+   * @see \Drupal\ckeditor5\Annotation\DrupalAspectsOfCKEditor5Plugin::$library
+   */
+  public function hasLibrary(): bool {
+    return $this->drupal['library'] !== FALSE;
+  }
+
+  /**
+   * Gets the asset library this plugin needs to be loaded on the admin UI.
+   *
+   * @return string
+   *   An asset library ID.
+   *
+   * @see \Drupal\ckeditor5\Annotation\DrupalAspectsOfCKEditor5Plugin::$admin_library
+   *
+   * @throws \LogicException
+   *   When called on a plugin definition that has no admin library.
+   */
+  public function getAdminLibrary(): string {
+    if (!$this->hasAdminLibrary()) {
+      throw new \LogicException('::getAdminLibrary() should only be called if ::hasAdminLibrary() returns TRUE.');
+    }
+    return $this->drupal['admin_library'];
+  }
+
+  /**
+   * Whether this plugin has an asset library to load on the admin UI.
+   *
+   * @return bool
+   *
+   * @see \Drupal\ckeditor5\Annotation\DrupalAspectsOfCKEditor5Plugin::$admin_library
+   */
+  public function hasAdminLibrary(): bool {
+    return $this->drupal['admin_library'] !== FALSE;
+  }
+
+  /**
+   * Gets the list of elements and attributes this plugin allows to create/edit.
+   *
+   * @return string[]|false
+   *   FALSE if this plugin does not create/edit any elements or attributes.
+   *   Otherwise a list.
+   *
+   * @see \Drupal\ckeditor5\Annotation\DrupalAspectsOfCKEditor5Plugin::$elements
+   */
+  public function getElements() {
+    return $this->drupal['elements'];
+  }
+
+  /**
+   * Whether this plugin allows creating/editing elements and attributes.
+   *
+   * @return bool
+   *
+   * @see \Drupal\ckeditor5\Annotation\DrupalAspectsOfCKEditor5Plugin::$elements
+   */
+  public function hasElements(): bool {
+    return $this->getElements() !== FALSE;
+  }
+
+  /**
+   * Gets the list of CKEditor 5 plugin classes this plugin needs to load.
+   *
+   * @return string[]
+   *   CKEditor 5 plugin classes.
+   *
+   * @see \Drupal\ckeditor5\Annotation\CKEditor5AspectsOfCKEditor5Plugin::$plugins
+   */
+  public function getCKEditor5Plugins(): array {
+    return $this->ckeditor5['plugins'];
+  }
+
+  /**
+   * Whether this plugin loads CKEditor 5 plugin classes.
+   *
+   * @return bool
+   *
+   * @see \Drupal\ckeditor5\Annotation\CKEditor5AspectsOfCKEditor5Plugin::$plugins
+   */
+  public function hasCKEditor5Plugins(): bool {
+    return $this->getCKEditor5Plugins() !== [];
+  }
+
+  /**
+   * Gets keyed array of additional values for the CKEditor5 constructor config.
+   *
+   * @return array
+   *   The CKEditor 5 constructor config.
+   *
+   * @see \Drupal\ckeditor5\Annotation\CKEditor5AspectsOfCKEditor5Plugin::$config
+   */
+  public function getCKEditor5Config(): array {
+    return $this->ckeditor5['config'];
+  }
+
+  /**
+   * Whether this plugin has additional values for the CKEditor5 constructor.
+   *
+   * @return bool
+   *
+   * @see \Drupal\ckeditor5\Annotation\CKEditor5AspectsOfCKEditor5Plugin::$config
+   */
+  public function hasCKEditor5Config(): bool {
+    return $this->getCKEditor5Config() !== [];
+  }
+
+}
diff --git a/core/modules/ckeditor5/src/Plugin/CKEditor5PluginElementsSubsetInterface.php b/core/modules/ckeditor5/src/Plugin/CKEditor5PluginElementsSubsetInterface.php
new file mode 100644
index 000000000000..8ecfd466f8d5
--- /dev/null
+++ b/core/modules/ckeditor5/src/Plugin/CKEditor5PluginElementsSubsetInterface.php
@@ -0,0 +1,25 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Plugin;
+
+/**
+ * Defines an interface for plugins that can support an elements subset.
+ *
+ * Plugins can support multiple elements in the `elements` property of their
+ * definition. A text format may want to use a given plugin without supporting
+ * every supported element. Plugins that implement this interface return a
+ * subset based on the configuration in the Text Editor's settings.
+ */
+interface CKEditor5PluginElementsSubsetInterface extends CKEditor5PluginConfigurableInterface {
+
+  /**
+   * Returns a configured subset of the elements supported by this plugin.
+   *
+   * @return string[]
+   *   An array of supported elements.
+   */
+  public function getElementsSubset(): array;
+
+}
diff --git a/core/modules/ckeditor5/src/Plugin/CKEditor5PluginInterface.php b/core/modules/ckeditor5/src/Plugin/CKEditor5PluginInterface.php
new file mode 100644
index 000000000000..64b2b1dddca9
--- /dev/null
+++ b/core/modules/ckeditor5/src/Plugin/CKEditor5PluginInterface.php
@@ -0,0 +1,39 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Plugin;
+
+use Drupal\Component\Plugin\PluginInspectionInterface;
+use Drupal\editor\EditorInterface;
+
+/**
+ * Defines an interface for CKEditor5 plugins.
+ *
+ * @see \Drupal\ckeditor5\Plugin\CKEditor5PluginBase
+ * @see \Drupal\ckeditor5\Plugin\CKEditor5PluginConfigurableInterface
+ * @see \Drupal\ckeditor5\Plugin\CKEditor5PluginManagerInterface
+ * @see \Drupal\ckeditor5\Annotation\CKEditor5Plugin
+ * @see plugin_api
+ */
+interface CKEditor5PluginInterface extends PluginInspectionInterface {
+
+  /**
+   * Allows a plugin to modify its static configuration.
+   *
+   * @param array $static_plugin_config
+   *   The ckeditor5.config entry from the YAML or annotation, if any. If none
+   *   is specified in the YAML or annotation, then the empty array.
+   * @param \Drupal\editor\EditorInterface $editor
+   *   A configured text editor object.
+   *
+   * @return array
+   *   Returns the received $static_plugin_config plus dynamic additions or
+   *   alterations.
+   *
+   * @see \Drupal\ckeditor5\Annotation\CKEditor5AspectsOfCKEditor5Plugin::$config
+   * @see \Drupal\ckeditor5\Plugin\CKEditor5PluginDefinition::getCKEditor5Config()
+   */
+  public function getDynamicPluginConfig(array $static_plugin_config, EditorInterface $editor): array;
+
+}
diff --git a/core/modules/ckeditor5/src/Plugin/CKEditor5PluginManager.php b/core/modules/ckeditor5/src/Plugin/CKEditor5PluginManager.php
new file mode 100644
index 000000000000..71ca1e66d050
--- /dev/null
+++ b/core/modules/ckeditor5/src/Plugin/CKEditor5PluginManager.php
@@ -0,0 +1,420 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Plugin;
+
+use Drupal\ckeditor5\Annotation\CKEditor5Plugin;
+use Drupal\ckeditor5\HTMLRestrictionsUtilities;
+use Drupal\Component\Annotation\Plugin\Discovery\AnnotationBridgeDecorator;
+use Drupal\Component\Assertion\Inspector;
+use Drupal\Component\Utility\NestedArray;
+use Drupal\Core\Cache\CacheBackendInterface;
+use Drupal\Core\Extension\ModuleHandlerInterface;
+use Drupal\Core\Plugin\DefaultPluginManager;
+use Drupal\Core\Plugin\Discovery\AnnotatedClassDiscovery;
+use Drupal\Core\Plugin\Discovery\YamlDiscoveryDecorator;
+use Drupal\editor\EditorInterface;
+use Drupal\filter\FilterPluginCollection;
+
+/**
+ * Provides a CKEditor5 plugin manager.
+ *
+ * @see \Drupal\ckeditor5\Plugin\CKEditor5PluginInterface
+ * @see \Drupal\ckeditor5\Plugin\CKEditor5PluginBase
+ * @see \Drupal\ckeditor5\Annotation\CKEditor5Plugin
+ * @see plugin_api
+ *
+ * @internal
+ *   CKEditor 5 is currently experimental and should only be leveraged by
+ *   experimental modules and development releases of contributed modules.
+ *   See https://www.drupal.org/core/experimental for more information.
+ */
+class CKEditor5PluginManager extends DefaultPluginManager implements CKEditor5PluginManagerInterface {
+
+  /**
+   * Constructs a CKEditor5PluginManager object.
+   *
+   * @param \Traversable $namespaces
+   *   An object that implements \Traversable which contains the root paths
+   *   keyed by the corresponding namespace to look for plugin implementations.
+   * @param \Drupal\Core\Cache\CacheBackendInterface $cache_backend
+   *   Cache backend instance to use.
+   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
+   *   The module handler to invoke the alter hook with.
+   */
+  public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler) {
+    parent::__construct('Plugin/CKEditor5Plugin', $namespaces, $module_handler, CKEditor5PluginInterface::class, CKEditor5Plugin::class);
+
+    $this->alterInfo('ckeditor5_plugin_info');
+    $this->setCacheBackend($cache_backend, 'ckeditor5_plugins');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function getDiscovery() {
+    if (!$this->discovery) {
+      $discovery = new AnnotatedClassDiscovery($this->subdir, $this->namespaces, $this->pluginDefinitionAnnotationName, $this->additionalAnnotationNamespaces);
+      $discovery = new YamlDiscoveryDecorator($discovery, 'ckeditor5', $this->moduleHandler->getModuleDirectories());
+      // Note: adding translatable properties here is impossible because it only
+      // supports top-level properties.
+      // @see \Drupal\ckeditor5\Plugin\CKEditor5PluginDefinition::label()
+      $discovery = new AnnotationBridgeDecorator($discovery, $this->pluginDefinitionAnnotationName);
+      $this->discovery = $discovery;
+    }
+    return $this->discovery;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getPlugin(string $plugin_id, ?EditorInterface $editor): CKEditor5PluginInterface {
+    $configuration = $editor
+      ? self::getPluginConfiguration($editor, $plugin_id)
+      : [];
+    return $this->createInstance($plugin_id, $configuration);
+  }
+
+  /**
+   * Gets the plugin configuration (if any) from a text editor config entity.
+   *
+   * @param \Drupal\editor\EditorInterface $editor
+   *   A text editor config entity that is using CKEditor 5.
+   * @param string $plugin_id
+   *   A CKEditor 5 plugin ID.
+   *
+   * @return array
+   *   The CKEditor 5 plugin configuration, if any.
+   *
+   * @throws \InvalidArgumentException
+   *   Thrown when the method is called with any other text editor than CKEditor 5.
+   */
+  protected static function getPluginConfiguration(EditorInterface $editor, string $plugin_id): array {
+    if ($editor->getEditor() !== 'ckeditor5') {
+      throw new \InvalidArgumentException('This method should only be called on text editor config entities using CKEditor 5.');
+    }
+    return $editor->getSettings()['plugins'][$plugin_id] ?? [];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getToolbarItems(): array {
+    return $this->mergeDefinitionValues('getToolbarItems', $this->getDefinitions());
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getAdminLibraries(): array {
+    $list = $this->mergeDefinitionValues('getAdminLibrary', $this->getDefinitions());
+    // Include main admin library.
+    array_unshift($list, 'ckeditor5/admin');
+    return $list;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getEnabledLibraries(EditorInterface $editor): array {
+    $list = $this->mergeDefinitionValues('getLibrary', $this->getEnabledDefinitions($editor));
+    $list = array_unique($list);
+    // Include main library.
+    array_unshift($list, 'ckeditor5/drupal.ckeditor5');
+    sort($list);
+    return $list;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getEnabledDefinitions(EditorInterface $editor): array {
+    $definitions = $this->getDefinitions();
+    ksort($definitions);
+
+    $definitions_with_plugins_condition = [];
+
+    foreach ($definitions as $plugin_id => $definition) {
+      // Remove definition when plugin has conditions and they are not met.
+      if ($definition->hasConditions()) {
+        $plugin = $this->getPlugin($plugin_id, $editor);
+        if ($this->isPluginDisabled($plugin, $editor)) {
+          unset($definitions[$plugin_id]);
+        }
+        else {
+          // The `plugins` condition can only be evaluated at the end of
+          // gathering enabled definitions. ::isPluginDisabled() did not yet
+          // evaluate that condition.
+          if (array_key_exists('plugins', $definition->getConditions())) {
+            $definitions_with_plugins_condition[$plugin_id] = $definition;
+          }
+        }
+      }
+      // Otherwise, only remove the definition if the plugin has buttons and
+      // none of its buttons are active.
+      elseif ($definition->hasToolbarItems()) {
+        if (empty(array_intersect($editor->getSettings()['toolbar']['items'], array_keys($definition->getToolbarItems())))) {
+          unset($definitions[$plugin_id]);
+        }
+      }
+    }
+
+    // Only enable the General HTML Support plugin on text formats with no HTML
+    // restrictions.
+    // @see https://ckeditor.com/docs/ckeditor5/latest/api/html-support.html
+    // @see https://github.com/ckeditor/ckeditor5/issues/9856
+    if ($editor->getFilterFormat()->getHtmlRestrictions() !== FALSE) {
+      unset($definitions['ckeditor5_htmlSupport']);
+    }
+
+    // Evaluate `plugins` condition.
+    foreach ($definitions_with_plugins_condition as $plugin_id => $definition) {
+      if (!empty(array_diff($definition->getConditions()['plugins'], array_keys($definitions)))) {
+        unset($definitions[$plugin_id]);
+      }
+    }
+
+    return $definitions;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function findPluginSupportingElement(string $tag): ?string {
+    // This will contain the element config for a plugin found to support $tag,
+    // so it can be compared to additional plugins that support $tag so the
+    // plugin with the most permissive config can be the id returned.
+    $selected_provided_elements = [];
+    $plugin_id = NULL;
+
+    foreach ($this->getDefinitions() as $id => $definition) {
+      $provided_elements = $this->getProvidedElements([$id]);
+
+      // Multiple plugins may support the $tag being searched for.
+      if (array_key_exists($tag, $provided_elements)) {
+        // Skip plugins with conditions as those plugins can't be guaranteed to
+        // provide a given tag without additional criteria being met. In the
+        // future we could possibly add support for automatically enabling
+        // filters or other similar requirements a plugin might need in order to
+        // be enabled and provide the tag it supports. For now, we assume such
+        // configuration cannot be modified programmatically.
+        if ($definition->hasConditions()) {
+          continue;
+        }
+
+        // True if a plugin has already been selected. If another plugin
+        // supports $tag, it will be compared against this one. Whichever
+        // provides broader support for $tag will be the plugin id returned by
+        // this method.
+        $selected_plugin = isset($selected_provided_elements[$tag]);
+        $selected_config = $selected_provided_elements[$tag] ?? FALSE;
+
+        // True if a plugin supporting $tag has been selected but does not allow
+        // any attributes while the plugin currently being checked does support
+        // attributes.
+        $adds_attribute_config = is_array($provided_elements[$tag]) && $selected_plugin && !is_array($selected_config);
+        $broader_attribute_config = FALSE;
+
+        // If the selected plugin and the plugin being checked both have arrays
+        // for $tag configuration, they both have attribute configuration. Check
+        // which attribute configuration is more permissive.
+        if ($selected_plugin && is_array($selected_config) && is_array($provided_elements[$tag])) {
+          $selected_plugin_full_attributes = array_filter($selected_config, function ($attribute_config) {
+            return !is_array($attribute_config);
+          });
+          $being_checked_plugin_full_attributes = array_filter($provided_elements[$tag], function ($attribute_config) {
+            return !is_array($attribute_config);
+          });
+          if (count($being_checked_plugin_full_attributes) > count($selected_plugin_full_attributes)) {
+            $broader_attribute_config = TRUE;
+          }
+        }
+
+        if (empty($selected_provided_elements) || $broader_attribute_config || $adds_attribute_config) {
+          $selected_provided_elements = $provided_elements;
+          $plugin_id = $id;
+        }
+      }
+    }
+
+    return $plugin_id;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCKEditor5PluginConfig(EditorInterface $editor): array {
+    $definitions = $this->getEnabledDefinitions($editor);
+
+    // Allow plugin to modify config, such as loading dynamic values.
+    $config = [];
+    foreach ($definitions as $plugin_id => $definition) {
+      $plugin = $this->getPlugin($plugin_id, $editor);
+      $config[$plugin_id] = $plugin->getDynamicPluginConfig($definition->getCKEditor5Config(), $editor);
+    }
+
+    return [
+      'plugins' => $this->mergeDefinitionValues('getCKEditor5Plugins', $definitions),
+      'config' => NestedArray::mergeDeepArray($config),
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getProvidedElements(array $plugin_ids = [], EditorInterface $editor = NULL, bool $retain_wildcard = FALSE): array {
+    $plugins = $this->getDefinitions();
+    if (!empty($plugin_ids)) {
+      $plugins = array_intersect_key($plugins, array_flip($plugin_ids));
+    }
+    $elements = [];
+    $processed_elements = [];
+
+    foreach ($plugins as $id => $definition) {
+      // Some CKEditor 5 plugins only provide functionality, not additional
+      // elements.
+      if (!$definition->hasElements()) {
+        continue;
+      }
+
+      $defined_elements = $definition->getElements();
+      if (is_a($definition->getClass(), CKEditor5PluginElementsSubsetInterface::class, TRUE)) {
+        // ckeditor5_sourceEditing is the edge case here: it is the only plugin
+        // that is allowed to return a superset. It's a special case because it
+        // is through configuring this particular plugin that additional HTML
+        // tags can be allowed.
+        // Even though its plugin definition says '<*>' is supported, this is a
+        // little lie to convey that this plugin is capable of supporting any
+        // HTML tag … but which ones are actually supported depends on the
+        // configuration.
+        // This also means that without any configuration, it does not support
+        // any HTML tags.
+        if ($id === 'ckeditor5_sourceEditing') {
+          $defined_elements = !isset($editor) ? [] : $this->getPlugin($id, $editor)->getElementsSubset();
+        }
+        // The default case: all other plugins that implement this interface are
+        // explicitly checked for compliance: only subsets are allowed. This is
+        // essential for \Drupal\ckeditor5\SmartDefaultSettings to be able to
+        // work: otherwise it would not be able to know which plugins to enable.
+        elseif (isset($editor)) {
+          $subset = $this->getPlugin($id, $editor)->getElementsSubset();
+          $subset_violations = array_diff($subset, $defined_elements);
+          if (!empty($subset_violations)) {
+            throw new \LogicException(sprintf('The "%s" CKEditor 5 plugin implements ::getElementsSubset() and did not return a subset, the following tags are absent from the plugin definition: "%s".', $id, implode(' ', $subset_violations)));
+          }
+          $defined_elements = $subset;
+        }
+      }
+      assert(Inspector::assertAllStrings($defined_elements));
+      foreach ($defined_elements as $element) {
+        if (in_array($element, $processed_elements)) {
+          continue;
+        }
+        $processed_elements[] = $element;
+        $additional_elements = HTMLRestrictionsUtilities::allowedElementsStringToHtmlFilterArray($element);
+        $elements = array_merge_recursive($elements, $additional_elements);
+      }
+    }
+
+    foreach ($elements as $tag_name => $tag_config) {
+      if (substr($tag_name, 0, 1) === '$') {
+        $wildcard_tags = HTMLRestrictionsUtilities::getWildcardTags($tag_name);
+        foreach ($wildcard_tags as $wildcard_tag) {
+          if (isset($elements[$wildcard_tag])) {
+            foreach ($tag_config as $attribute_name => $attribute_value) {
+              if (is_array($attribute_value)) {
+                $attribute_value = array_keys($attribute_value);
+              }
+              $element_already_allows_all_values = isset($elements[$wildcard_tag][$attribute_name]) && $elements[$wildcard_tag][$attribute_name] === TRUE;
+              if (!$element_already_allows_all_values) {
+                HTMLRestrictionsUtilities::providedElementsAttributes($elements, $wildcard_tag, $attribute_name, $attribute_value);
+              }
+            }
+          }
+        }
+        if (!$retain_wildcard) {
+          unset($elements[$tag_name]);
+        }
+      }
+    }
+
+    return HTMLRestrictionsUtilities::cleanAllowedHtmlArray($elements);
+  }
+
+  /**
+   * Returns array of merged values for the given plugin definitions.
+   *
+   * @param string $get_method
+   *   Which CKEditor5PluginDefinition getter to call to get values to merge.
+   * @param \Drupal\ckeditor5\Plugin\CKEditor5PluginDefinition[] $definitions
+   *   The plugin definitions whose values to merge.
+   *
+   * @return array
+   *   List of merged values for the given plugin definition method.
+   */
+  protected function mergeDefinitionValues(string $get_method, array $definitions): array {
+    assert(method_exists(CKEditor5PluginDefinition::class, $get_method));
+    $has_method = 'has' . substr($get_method, 3);
+    assert(method_exists(CKEditor5PluginDefinition::class, $has_method));
+    $per_plugin = array_filter(array_map(function (CKEditor5PluginDefinition $definition) use ($get_method, $has_method) {
+      if ($definition->$has_method()) {
+        return $definition->$get_method();
+      }
+    }, $definitions));
+    return array_reduce($per_plugin, function (array $result, $current): array {
+      return is_array($current) && is_array(reset($current))
+        // Merge nested arrays using their keys.
+        ? $result + $current
+        // Merge everything else by appending.
+        : array_merge($result, (array) $current);
+    }, []);
+  }
+
+  /**
+   * Checks whether a plugin must be disabled due to unmet conditions.
+   *
+   * @param \Drupal\ckeditor5\Plugin\CKEditor5PluginInterface $plugin
+   *   A CKEditor 5 plugin instance.
+   * @param \Drupal\editor\EditorInterface $editor
+   *   A configured text editor object.
+   *
+   * @return bool
+   *   Whether the plugin is disabled due to unmet conditions.
+   */
+  protected function isPluginDisabled(CKEditor5PluginInterface $plugin, EditorInterface $editor): bool {
+    assert($plugin->getPluginDefinition()->hasConditions());
+    foreach ($plugin->getPluginDefinition()->getConditions() as $condition_type => $required_value) {
+      switch ($condition_type) {
+        case 'toolbarItem':
+          if (!in_array($required_value, $editor->getSettings()['toolbar']['items'])) {
+            return TRUE;
+          }
+          break;
+
+        case 'imageUploadStatus':
+          $image_upload_status = $editor->getImageUploadSettings()['status'] ?? FALSE;
+          if (!$image_upload_status) {
+            return TRUE;
+          }
+          break;
+
+        case 'filter':
+          $filters = $editor->getFilterFormat()->filters();
+          assert($filters instanceof FilterPluginCollection);
+          if (!$filters->has($required_value) || !$filters->get($required_value)->status) {
+            return TRUE;
+          }
+          break;
+
+        case 'plugins':
+          // Tricky: this cannot yet be evaluated here. It will evaluated later.
+          // @see \Drupal\ckeditor5\Plugin\CKEditor5PluginManager::getEnabledDefinitions()
+          return FALSE;
+      }
+    }
+
+    return FALSE;
+  }
+
+}
diff --git a/core/modules/ckeditor5/src/Plugin/CKEditor5PluginManagerInterface.php b/core/modules/ckeditor5/src/Plugin/CKEditor5PluginManagerInterface.php
new file mode 100644
index 000000000000..800afb2169e3
--- /dev/null
+++ b/core/modules/ckeditor5/src/Plugin/CKEditor5PluginManagerInterface.php
@@ -0,0 +1,122 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Plugin;
+
+use Drupal\Component\Plugin\Discovery\DiscoveryInterface;
+use Drupal\editor\EditorInterface;
+
+/**
+ * Provides the interface for a plugin manager of CKEditor 5 plugins.
+ *
+ * @see \Drupal\ckeditor5\Plugin\CKEditor5PluginInterface
+ * @see \Drupal\ckeditor5\Annotation\CKEditor5Plugin
+ * @see plugin_api
+ */
+interface CKEditor5PluginManagerInterface extends DiscoveryInterface {
+
+  /**
+   * Returns a CKEditor 5 plugin with configuration from the editor.
+   *
+   * @param string $plugin_id
+   *   The plugin ID.
+   * @param \Drupal\editor\EditorInterface|null $editor
+   *   The editor to load configuration from.
+   *
+   * @return \Drupal\ckeditor5\Plugin\CKEditor5PluginInterface
+   *   The CKEditor 5 plugin instance.
+   */
+  public function getPlugin(string $plugin_id, ?EditorInterface $editor): CKEditor5PluginInterface;
+
+  /**
+   * Gets a list of all toolbar items.
+   *
+   * @return string[]
+   *   List of all toolbar items provided by plugins.
+   */
+  public function getToolbarItems(): array;
+
+  /**
+   * Gets a list of all admin library names.
+   *
+   * @return string[]
+   *   List of all admin libraries provided by plugins.
+   */
+  public function getAdminLibraries(): array;
+
+  /**
+   * Gets a list of libraries required for the editor.
+   *
+   * This list is filtered by enabled plugins because it is needed at runtime.
+   *
+   * @param \Drupal\editor\EditorInterface $editor
+   *   A configured text editor object.
+   *
+   * @return string[]
+   *   The list of enabled libraries.
+   */
+  public function getEnabledLibraries(EditorInterface $editor): array;
+
+  /**
+   * Filter list of definitions by enabled plugins only.
+   *
+   * @param \Drupal\editor\EditorInterface $editor
+   *   A configured text editor object.
+   *
+   * @return array
+   *   Enabled plugin definitions.
+   */
+  public function getEnabledDefinitions(EditorInterface $editor): array;
+
+  /**
+   * Searches for CKEditor 5 plugin that supports a given tag.
+   *
+   * @param string $tag
+   *   The HTML tag to be searched for within plugin definitions.
+   *
+   * @return string|null
+   *   The ID of the plugin that supports the given tag.
+   */
+  public function findPluginSupportingElement(string $tag): ?string;
+
+  /**
+   * Gets the configuration for the CKEditor 5 plugins enabled in this editor.
+   *
+   * @param \Drupal\editor\EditorInterface $editor
+   *   A configured text editor object.
+   *
+   * @return array[]
+   *   An array with two key-value pairs:
+   *   1. 'plugins' lists all plugins to load
+   *   2. 'config' lists the configuration for all these plugins.
+   *
+   * @see https://ckeditor.com/docs/ckeditor5/latest/api/module_editor-classic_classiceditor-ClassicEditor.html
+   *
+   * @see \Drupal\ckeditor5\Plugin\Editor\CKEditor5::getJSSettings()
+   */
+  public function getCKEditor5PluginConfig(EditorInterface $editor): array;
+
+  /**
+   * Create a list of elements with attributes declared for the CKEditor5 build.
+   *
+   * @param string[] $plugin_ids
+   *   An array of plugin IDs.
+   * @param \Drupal\editor\EditorInterface $editor
+   *   A configured text editor object.
+   * @param bool $retain_wildcard
+   *   If TRUE, the returned array will include config for wildcard elements
+   *   such as `<$block>`.
+   *
+   * @return array
+   *   A nested array with a structure as described in
+   *   \Drupal\filter\Plugin\FilterInterface::getHTMLRestrictions().
+   *
+   * @throws \LogicException
+   *   Thrown when an invalid CKEditor5PluginElementsSubsetInterface implementation is encountered.
+   *
+   * @see \Drupal\filter\Plugin\FilterInterface::getHTMLRestrictions()
+   */
+  public function getProvidedElements(array $plugin_ids = [], EditorInterface $editor = NULL, bool $retain_wildcard = FALSE): array;
+
+}
diff --git a/core/modules/ckeditor5/src/Plugin/Editor/CKEditor5.php b/core/modules/ckeditor5/src/Plugin/Editor/CKEditor5.php
new file mode 100644
index 000000000000..b93b78ef0069
--- /dev/null
+++ b/core/modules/ckeditor5/src/Plugin/Editor/CKEditor5.php
@@ -0,0 +1,895 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Plugin\Editor;
+
+use Drupal\ckeditor5\HTMLRestrictionsUtilities;
+use Drupal\ckeditor5\Plugin\CKEditor5Plugin\Heading;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginDefinition;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginManagerInterface;
+use Drupal\Component\Serialization\Json;
+use Drupal\Component\Utility\NestedArray;
+use Drupal\Core\Cache\CacheBackendInterface;
+use Drupal\Core\Config\Schema\SchemaCheckTrait;
+use Drupal\Core\Extension\ModuleHandlerInterface;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Form\SubformState;
+use Drupal\Core\Form\SubformStateInterface;
+use Drupal\Core\Language\LanguageManagerInterface;
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\ckeditor5\SmartDefaultSettings;
+use Drupal\Core\Validation\Plugin\Validation\Constraint\PrimitiveTypeConstraint;
+use Drupal\editor\EditorInterface;
+use Drupal\editor\Entity\Editor;
+use Drupal\editor\Plugin\EditorBase;
+use Drupal\filter\FilterFormatInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\Validator\ConstraintViolation;
+use Symfony\Component\Validator\ConstraintViolationListInterface;
+
+/**
+ * Defines a CKEditor 5-based text editor for Drupal.
+ *
+ * @Editor(
+ *   id = "ckeditor5",
+ *   label = @Translation("CKEditor 5"),
+ *   supports_content_filtering = TRUE,
+ *   supports_inline_editing = TRUE,
+ *   is_xss_safe = FALSE,
+ *   supported_element_types = {
+ *     "textarea"
+ *   }
+ * )
+ *
+ * @internal
+ *   Plugin classes are internal.
+ */
+class CKEditor5 extends EditorBase implements ContainerFactoryPluginInterface {
+
+  use SchemaCheckTrait;
+
+  /**
+   * The CKEditor plugin manager.
+   *
+   * @var \Drupal\ckeditor5\Plugin\CKEditor5PluginManagerInterface
+   */
+  protected $ckeditor5PluginManager;
+
+  /**
+   * The language manager.
+   *
+   * @var \Drupal\Core\Language\LanguageManagerInterface
+   */
+  protected $languageManager;
+
+  /**
+   * The module handler.
+   *
+   * @var \Drupal\Core\Extension\ModuleHandlerInterface
+   */
+  protected $moduleHandler;
+
+  /**
+   * Smart default settings utility.
+   *
+   * @var \Drupal\ckeditor5\SmartDefaultSettings
+   */
+  protected $smartDefaultSettings;
+
+  /**
+   * The set of configured CKEditor 5 plugins.
+   *
+   * @var \Drupal\ckeditor5\Plugin\CKEditor5PluginInterface[]
+   */
+  private $plugins = [];
+
+  /**
+   * The submitted editor.
+   *
+   * @var \Drupal\editor\EditorInterface
+   */
+  private $submittedEditor;
+
+  /**
+   * The cache.
+   *
+   * @var \Drupal\Core\Cache\CacheBackendInterface
+   */
+  protected $cache;
+
+  /**
+   * Constructs a CKEditor5 editor plugin.
+   *
+   * @param array $configuration
+   *   A configuration array containing information about the plugin instance.
+   * @param string $plugin_id
+   *   The plugin_id for the plugin instance.
+   * @param mixed $plugin_definition
+   *   The plugin implementation definition.
+   * @param \Drupal\ckeditor5\Plugin\CKEditor5PluginManagerInterface $ckeditor5_plugin_manager
+   *   The CKEditor5 plugin manager.
+   * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
+   *   The language manager
+   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
+   *   The module handler.
+   * @param \Drupal\ckeditor5\SmartDefaultSettings $smart_default_settings
+   *   The smart default settings utility.
+   * @param \Drupal\Core\Cache\CacheBackendInterface $cache
+   *   The cache.
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, CKEditor5PluginManagerInterface $ckeditor5_plugin_manager, LanguageManagerInterface $language_manager, ModuleHandlerInterface $module_handler, SmartDefaultSettings $smart_default_settings, CacheBackendInterface $cache) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+    $this->ckeditor5PluginManager = $ckeditor5_plugin_manager;
+    $this->languageManager = $language_manager;
+    $this->moduleHandler = $module_handler;
+    $this->smartDefaultSettings = $smart_default_settings;
+    $this->cache = $cache;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $container->get('plugin.manager.ckeditor5.plugin'),
+      $container->get('language_manager'),
+      $container->get('module_handler'),
+      $container->get('ckeditor5.smart_default_settings'),
+      $container->get('cache.default')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDefaultSettings() {
+    return [
+      'toolbar' => [
+        'items' => ['heading', 'bold', 'italic'],
+      ],
+      'plugins' => [
+        'ckeditor5_heading' => Heading::DEFAULT_CONFIGURATION,
+      ],
+    ];
+  }
+
+  /**
+   * Validates a Text Editor + Text Format pair.
+   *
+   * Drupal is designed to only verify schema conformity (and validation) of
+   * individual config entities. The Text Editor module layers a tightly coupled
+   * Editor entity on top of the Filter module's FilterFormat config entity.
+   * This inextricable coupling is clearly visible in EditorInterface:
+   * \Drupal\editor\EditorInterface::getFilterFormat(). They are always paired.
+   * Because not every text editor is guaranteed to be compatible with every
+   * text format, the pair must be validated.
+   *
+   * @param \Drupal\editor\EditorInterface $text_editor
+   *   The paired text editor to validate.
+   * @param \Drupal\filter\FilterFormatInterface $text_format
+   *   The paired text format to validate.
+   * @param bool $all_compatibility_problems
+   *   Get all compatibility problems (default) or only fundamental ones.
+   *
+   * @return \Symfony\Component\Validator\ConstraintViolationListInterface
+   *   The validation constraint violations.
+   *
+   * @throws \InvalidArgumentException
+   *   Thrown when the text editor is not configured to use CKEditor 5.
+   *
+   * @see \Drupal\editor\EditorInterface::getFilterFormat()
+   * @see ckeditor5.pair.schema.yml
+   */
+  public static function validatePair(EditorInterface $text_editor, FilterFormatInterface $text_format, bool $all_compatibility_problems = TRUE): ConstraintViolationListInterface {
+    if ($text_editor->getEditor() !== 'ckeditor5') {
+      throw new \InvalidArgumentException('This text editor is not configured to use CKEditor 5.');
+    }
+
+    $typed_config_manager = \Drupal::getContainer()->get('config.typed');
+    $typed_config = $typed_config_manager->createFromNameAndData(
+      'ckeditor5_valid_pair__format_and_editor',
+      [
+        // A mix of:
+        // - editor.editor.*.settings — note that "settings" is top-level in
+        //   editor.editor.*, and so it is here, so all validation constraints
+        //   will continue to work fine.
+        'settings' => $text_editor->toArray()['settings'],
+        // - filter.format.*.filters — note that "filters" is top-level in
+        //   filter.format.*, and so it is here, so all validation constraints
+        //   will continue to work fine.
+        'filters' => $text_format->toArray()['filters'],
+        // - editor.editor.*.image_upload — note that "image_upload" is
+        //   top-level in editor.editor.*, and so it is here, so all validation
+        //   constraints will continue to work fine.
+        'image_upload' => $text_editor->toArray()['image_upload'],
+      ]
+    );
+    $violations = $typed_config->validate();
+
+    // Only consider validation constraint violations covering the pair, so not
+    // irrelevant details such as a PrimitiveTypeConstraint in filter settings,
+    // which do not affect CKEditor 5 anyway.
+    foreach ($violations as $i => $violation) {
+      assert($violation instanceof ConstraintViolation);
+      if (explode('.', $violation->getPropertyPath())[0] === 'filters' && is_a($violation->getConstraint(), PrimitiveTypeConstraint::class)) {
+        $violations->remove($i);
+      }
+    }
+
+    if (!$all_compatibility_problems) {
+      foreach ($violations as $i => $violation) {
+        // Remove all violations that are not fundamental — these are at the
+        // root (property path '').
+        if ($violation->getPropertyPath() !== '') {
+          $violations->remove($i);
+        }
+      }
+    }
+
+    return $violations;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
+    $editor = $form_state->get('editor');
+    assert($editor instanceof Editor);
+    $language = $this->languageManager->getCurrentLanguage();
+
+    // When enabling CKEditor 5, generate sensible settings from the
+    // pre-existing text editor/format rather than the hardcoded defaults
+    // whenever possible.
+    // @todo Remove after https://www.drupal.org/project/drupal/issues/3226673.
+    $format = $form_state->getFormObject()->getEntity();
+    assert($format instanceof FilterFormatInterface);
+    if ($editor->isNew() && !$form_state->get('ckeditor5_is_active') && $form_state->get('ckeditor5_is_selected')) {
+      assert($editor->getSettings() === $this->getDefaultSettings());
+      if (!$format->isNew()) {
+        [$editor, $messages] = $this->smartDefaultSettings->computeSmartDefaultSettings($editor, $format);
+        foreach ($messages as $message) {
+          $this->messenger()->addMessage($message);
+        }
+      }
+      $eventual_editor_and_format = $this->getEventualEditorWithPrimedFilterFormat($form_state, $editor);
+      // Provide the validated eventual pair in form state to
+      // ::getGeneratedAllowedHtmlValue(), to update filter_html's
+      // "allowed_html".
+      $form_state->set('ckeditor5_validated_pair', $eventual_editor_and_format);
+      // Ensure that CKEditor 5 plugins that need to interact with the Editor
+      // config entity are able to access the computed Editor, which was cloned
+      // from $form_state->get('editor').
+      // @see \Drupal\ckeditor5\Plugin\CKEditor5Plugin\ImageUpload::buildConfigurationForm
+      $form_state->set('editor', $editor);
+    }
+
+    // AJAX validation errors should appear visually close to the text editor
+    // since this is a very long form: otherwise they would not be noticed.
+    $form['real_time_validation_errors_location'] = [
+      '#type' => 'container',
+      '#id' => 'ckeditor5-realtime-validation-messages-container',
+    ];
+
+    $form['toolbar'] = [
+      '#type' => 'container',
+      '#title' => $this->t('CKEditor 5 toolbar configuration'),
+      '#theme' => 'ckeditor5_settings_toolbar',
+      '#attached' => [
+        'library' => $this->ckeditor5PluginManager->getAdminLibraries(),
+        'drupalSettings' => [
+          'ckeditor5' => [
+            'language' => [
+              'dir' => $language->getDirection(),
+              'langcode' => $language->getId(),
+            ],
+          ],
+        ],
+      ],
+    ];
+
+    $form['available_items_description'] = [
+      '#type' => 'container',
+      '#markup' => $this->t('Press the down arrow key to add to the toolbar.'),
+      '#id' => 'available-button-description',
+      '#attributes' => [
+        'class' => ['visually-hidden'],
+      ],
+    ];
+
+    $form['active_items_description'] = [
+      '#type' => 'container',
+      '#markup' => $this->t('Move this button in the toolbar by pressing the left or right arrow keys. Press the up arrow key to remove from the toolbar.'),
+      '#id' => 'active-button-description',
+      '#attributes' => [
+        'class' => ['visually-hidden'],
+      ],
+    ];
+
+    // The items are encoded in markup to provide a no-JS fallback.
+    // Although CKEditor 5 is useless without JS it would still be possible
+    // to see all the available toolbar items provided by plugins in the format
+    // that needs to be entered in the textarea. The UI app parses this list.
+    $form['toolbar']['available'] = [
+      '#type' => 'container',
+      '#title' => 'Available items',
+      '#id' => 'ckeditor5-toolbar-buttons-available',
+      'available_items' => [
+        '#markup' => Json::encode($this->ckeditor5PluginManager->getToolbarItems()),
+      ],
+    ];
+
+    $editor_settings = $editor->getSettings();
+    // This form field requires a JSON-style array of valid toolbar items.
+    // e.g. ["bold","italic","|","uploadImage"].
+    // CKEditor 5 config for toolbar items takes an array of strings which
+    // correspond to the keys under toolbar_items in a plugin yml or annotation.
+    // @see https://ckeditor.com/docs/ckeditor5/latest/features/toolbar/toolbar.html
+    $form['toolbar']['items'] = [
+      '#type' => 'textarea',
+      '#title' => $this->t('Toolbar items'),
+      '#rows' => 1,
+      '#default_value' => Json::encode($editor_settings['toolbar']['items']),
+      '#id' => 'ckeditor5-toolbar-buttons-selected',
+      '#attributes' => [
+        'tabindex' => '-1',
+        'aria-hidden' => 'true',
+      ],
+    ];
+
+    $form['plugin_settings'] = [
+      '#type' => 'vertical_tabs',
+      '#title' => $this->t('CKEditor5 plugin settings'),
+      '#id' => 'ckeditor5-plugin-settings',
+    ];
+
+    $this->injectPluginSettingsForm($form, $form_state, $editor);
+
+    // Allow reliable detection of switching to CKEditor 5 from another text
+    // editor (or none at all).
+    $form['is_already_using_ckeditor5'] = [
+      '#type' => 'hidden',
+      '#default_value' => TRUE,
+    ];
+
+    return $form;
+  }
+
+  /**
+   * Determines whether the plugin settings form should be visible.
+   *
+   * @param \Drupal\ckeditor5\Plugin\CKEditor5PluginDefinition $definition
+   *   The configurable CKEditor 5 plugin to assess the visibility for.
+   * @param \Drupal\editor\EditorInterface $editor
+   *   A configured text editor object.
+   *
+   * @return bool
+   *   Whether this configurable plugin's settings form should be visible.
+   */
+  private function shouldHaveVisiblePluginSettingsForm(CKEditor5PluginDefinition $definition, EditorInterface $editor): bool {
+    assert($definition->isConfigurable());
+    $enabled_plugins = $this->ckeditor5PluginManager->getEnabledDefinitions($editor);
+
+    $plugin_id = $definition->id();
+
+    // Enabled plugins should be configurable.
+    if (isset($enabled_plugins[$plugin_id])) {
+      return TRUE;
+    }
+
+    // There are two circumstances where a plugin not listed in $enabled_plugins
+    // due to isEnabled() returning false, that should still have its config
+    // form provided:
+    // 1 - A conditionally enabled plugin that does not depend on a toolbar item
+    // to be active.
+    // 2 - A conditionally enabled plugin that does depend on a toolbar item,
+    // and that toolbar item is active.
+    if ($definition->hasConditions()) {
+      $conditions = $definition->getConditions();
+      if (!array_key_exists('toolbarItem', $conditions)) {
+        return TRUE;
+      }
+      elseif (in_array($conditions['toolbarItem'], $editor->getSettings()['toolbar']['items'], TRUE)) {
+        return TRUE;
+      }
+    }
+
+    return FALSE;
+  }
+
+  /**
+   * Injects the CKEditor plugins settings forms as a vertical tabs subform.
+   *
+   * @param array &$form
+   *   A reference to an associative array containing the structure of the form.
+   * @param \Drupal\Core\Form\FormStateInterface $form_state
+   *   The current state of the form.
+   * @param \Drupal\editor\EditorInterface $editor
+   *   A configured text editor object.
+   */
+  private function injectPluginSettingsForm(array &$form, FormStateInterface $form_state, EditorInterface $editor): void {
+    $definitions = $this->ckeditor5PluginManager->getDefinitions();
+    $eventual_editor_and_format = $this->getEventualEditorWithPrimedFilterFormat($form_state, $editor);
+
+    foreach ($definitions as $plugin_id => $definition) {
+      if ($definition->isConfigurable() && $this->shouldHaveVisiblePluginSettingsForm($definition, $eventual_editor_and_format)) {
+        $plugin = $this->ckeditor5PluginManager->getPlugin($plugin_id, $editor);
+        $plugin_settings_form = [];
+        $form['plugins'][$plugin_id] = [
+          '#type' => 'details',
+          '#title' => $definition->label(),
+          '#open' => TRUE,
+          '#group' => 'editor][settings][plugin_settings',
+          '#attributes' => [
+            'data-ckeditor5-plugin-id' => $plugin_id,
+          ],
+        ];
+        $form['plugins'][$plugin_id] += $plugin->buildConfigurationForm($plugin_settings_form, $form_state);
+      }
+    }
+  }
+
+  /**
+   * Form #after_build callback: provides text editor state changes.
+   *
+   * Updates the internal $this->entity object with submitted values when the
+   * form is being rebuilt (e.g. submitted via AJAX), so that subsequent
+   * processing (e.g. AJAX callbacks) can rely on it.
+   *
+   * @see \Drupal\Core\Entity\EntityForm::afterBuild()
+   */
+  public static function assessActiveTextEditorAfterBuild(array $element, FormStateInterface $form_state): array {
+    // The case of the form being built initially, and the text editor plugin in
+    // use is already CKEditor 5.
+    if (!$form_state->isProcessingInput()) {
+      $editor = $form_state->get('editor');
+      $already_using_ckeditor5 = $editor && $editor->getEditor() === 'ckeditor5';
+    }
+    else {
+      // Whenever there is user input, this cannot be the initial build of the
+      // form and hence we need to inspect user input.
+      $already_using_ckeditor5 = FALSE;
+      NestedArray::getValue($form_state->getUserInput(), ['editor', 'settings', 'is_already_using_ckeditor5'], $already_using_ckeditor5);
+    }
+
+    $form_state->set('ckeditor5_is_active', $already_using_ckeditor5);
+    $form_state->set('ckeditor5_is_selected', $form_state->getValue(['editor', 'editor']) === 'ckeditor5');
+    return $element;
+  }
+
+  /**
+   * Validate callback to inform the user of CKEditor 5 compatibility problems.
+   */
+  public static function validateSwitchingToCKEditor5(array $form, FormStateInterface $form_state): void {
+    if (!$form_state->get('ckeditor5_is_active') && $form_state->get('ckeditor5_is_selected')) {
+      $minimal_ckeditor5_editor = Editor::create([
+        'format' => NULL,
+        'editor' => 'ckeditor5',
+      ]);
+      $submitted_filter_format = CKEditor5::getSubmittedFilterFormat($form_state);
+      $fundamental_incompatibilities = CKEditor5::validatePair($minimal_ckeditor5_editor, $submitted_filter_format, FALSE);
+      foreach ($fundamental_incompatibilities as $violation) {
+        // @codingStandardsIgnoreLine
+        $form_state->setErrorByName('editor][editor', t($violation->getMessageTemplate(), $violation->getParameters()));
+      }
+    }
+  }
+
+  /**
+   * Value callback to set the CKEditor 5-generated "allowed_html" value.
+   *
+   * Used to set the value of filter_html's "allowed_html" form item if the form
+   * has been validated and hence `ckeditor5_validated_pair` is available
+   * in form state. This allows setting a guaranteed to be valid value.
+   *
+   * `ckeditor5_validated_pair` can be set from two places:
+   * - When switching to CKEditor 5, this is populated by
+   *   CKEditor5::buildConfigurationForm().
+   * - When making filter or editor settings changes, it is populated by
+   *  CKEditor5::validateConfigurationForm().
+   *
+   * @param array $element
+   *   An associative array containing the properties of the element.
+   * @param mixed $input
+   *   The incoming input to populate the form element. If this is FALSE,
+   *   the element's default value should be returned.
+   * @param \Drupal\Core\Form\FormStateInterface $form_state
+   *   The current state of the form.
+   *
+   * @return string
+   *   The value to assign to the element.
+   */
+  public static function getGeneratedAllowedHtmlValue(array &$element, $input, FormStateInterface $form_state): string {
+    if ($form_state->isValidationComplete()) {
+      $validated_format = $form_state->get('ckeditor5_validated_pair')->getFilterFormat();
+      $configuration = $validated_format->filters()->get('filter_html')->getConfiguration();
+      return $configuration['settings']['allowed_html'];
+    }
+    else {
+      if ($input !== FALSE) {
+        return $input;
+      }
+      return $element['#default_value'];
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {
+    $json = $form_state->getValue(['toolbar', 'items']);
+    $toolbar_items = Json::decode($json);
+
+    // This basic validation must live in the form logic because it can only
+    // occur in a form context.
+    if (!$toolbar_items) {
+      $form_state->setErrorByName('toolbar][items', $this->t('Invalid toolbar value.'));
+      return;
+    }
+
+    // Construct a Text Editor config entity with the submitted values for
+    // validation. Do this on a clone: do not manipulate form state.
+    $submitted_editor = clone $form_state->get('editor');
+    $settings = $submitted_editor->getSettings();
+    // Update settings first to match the submitted toolbar items. This is
+    // necessary for ::shouldHaveVisiblePluginSettingsForm() to work.
+    $settings['toolbar']['items'] = $toolbar_items;
+    $submitted_editor->setSettings($settings);
+    $eventual_editor_and_format_for_plugin_settings_visibility = $this->getEventualEditorWithPrimedFilterFormat($form_state, $submitted_editor);
+    $settings['plugins'] = [];
+    foreach ($this->ckeditor5PluginManager->getDefinitions() as $plugin_id => $definition) {
+      if (!$definition->isConfigurable()) {
+        continue;
+      }
+      // Create a fresh instance of this CKEditor 5 plugin, not tied to a text
+      // editor configuration entity.
+      $plugin = $this->ckeditor5PluginManager->getPlugin($plugin_id, NULL);
+      // If this plugin is configurable but it has empty default configuration,
+      // that means the configuration must be stored out of band.
+      // @see \Drupal\ckeditor5\Plugin\CKEditor5Plugin\ImageUpload
+      // @see editor_image_upload_settings_form()
+      $default_configuration = $plugin->defaultConfiguration();
+      $configuration_stored_out_of_band = empty($default_configuration);
+
+      if ($form_state->hasValue(['plugins', $plugin_id])) {
+        $subform = $form['plugins'][$plugin_id];
+        $subform_state = SubformState::createForSubform($subform, $form, $form_state);
+        $plugin->validateConfigurationForm($subform, $subform_state);
+        $plugin->submitConfigurationForm($subform, $subform_state);
+
+        // If the configuration is stored out of band, ::submitConfigurationForm
+        // will already have stored it. If it is not stored out of band,
+        // populate $settings, to populate $submitted_editor.
+        if (!$configuration_stored_out_of_band) {
+          $settings['plugins'][$plugin_id] = $plugin->getConfiguration();
+        }
+      }
+      // @see \Drupal\ckeditor5\Plugin\Editor\CKEditor5::injectPluginSettingsForm()
+      elseif ($this->shouldHaveVisiblePluginSettingsForm($definition, $eventual_editor_and_format_for_plugin_settings_visibility)) {
+        if (!$configuration_stored_out_of_band) {
+          $settings['plugins'][$plugin_id] = $default_configuration;
+        }
+      }
+    }
+    // All plugin settings have been collected, including defaults that depend
+    // on visibility. Store the collected settings, throw away the interim state
+    // that allowed determining which defaults to add.
+    unset($eventual_editor_and_format_for_plugin_settings_visibility);
+    $submitted_editor->setSettings($settings);
+
+    // Validate the text editor + text format pair.
+    // Note that the eventual pair is computed and validated, not the received
+    // pair: if the filter_html filter is in use, the CKEditor 5 configuration
+    // dictates the filter_html's filter plugin's "allowed_html" setting.
+    // @see ckeditor5_form_filter_format_form_alter()
+    // @see ::getGeneratedAllowedHtmlValue()
+    $eventual_editor_and_format = $this->getEventualEditorWithPrimedFilterFormat($form_state, $submitted_editor);
+    $violations = CKEditor5::validatePair($eventual_editor_and_format, $eventual_editor_and_format->getFilterFormat());
+    foreach ($violations as $violation) {
+      $form_item_name = static::mapPairViolationPropertyPathsToFormNames($violation->getPropertyPath(), $form);
+      // When adding a toolbar item, it is possible that not all conditions for
+      // using it have been met yet. FormBuilder refuses to rebuild forms when a
+      // validation error is present. But to meet the condition for the toolbar
+      // item, configuration must be set in a vertical tab that must still
+      // appear. Work-around: reduce the validation error to a warning message.
+      // @see \Drupal\ckeditor5\Plugin\Validation\Constraint\ToolbarItemConditionsMetConstraintValidator
+      if ($form_state->isRedirectDisabled() && $form_item_name === 'editor][settings][toolbar][items') {
+        $this->messenger()->addWarning($violation->getMessage());
+        continue;
+      }
+      $form_state->getCompleteFormState()->setErrorByName($form_item_name, $violation->getMessage());
+    }
+
+    // Pass it on to ::submitConfigurationForm().
+    $form_state->get('editor')->setSettings($settings);
+
+    // Provide the validated eventual pair in form state to
+    // ::getGeneratedAllowedHtmlValue(), to update filter_html's
+    // "allowed_html".
+    $form_state->set('ckeditor5_validated_pair', $eventual_editor_and_format);
+
+    assert(TRUE === $this->checkConfigSchema(\Drupal::getContainer()->get('config.typed'), 'editor.editor.id_does_not_matter', $submitted_editor->toArray()), 'Schema errors: ' . print_r($this->checkConfigSchema(\Drupal::getContainer()->get('config.typed'), 'editor.editor.id_does_not_matter', $submitted_editor->toArray()), TRUE));
+  }
+
+  /**
+   * Gets the submitted text format config entity from form state.
+   *
+   * Needed for validation.
+   *
+   * @param \Drupal\Core\Form\FormStateInterface $filter_format_form_state
+   *   The text format configuration form's form state.
+   *
+   * @return \Drupal\filter\FilterFormatInterface
+   *   A FilterFormat config entity representing the current filter form state.
+   */
+  protected static function getSubmittedFilterFormat(FormStateInterface $filter_format_form_state): FilterFormatInterface {
+    $submitted_filter_format = clone $filter_format_form_state->getFormObject()->getEntity();
+    assert($submitted_filter_format instanceof FilterFormatInterface);
+
+    // Get only the values of the filter_format form state that are relevant for
+    // checking compatibility. This logic is copied from FilterFormatFormBase.
+    // @see \Drupal\ckeditor5\Plugin\Validation\Constraint\FundamentalCompatibilityConstraintValidator
+    // @see \Drupal\filter\FilterFormatFormBase::submitForm()
+    $filter_format_form_values = array_intersect_key(
+      $filter_format_form_state->getValues(),
+      array_flip(['filters', 'filter_settings']
+    ));
+    foreach ($filter_format_form_values as $key => $value) {
+      if ($key !== 'filters') {
+        $submitted_filter_format->set($key, $value);
+      }
+      else {
+        foreach ($value as $instance_id => $config) {
+          $submitted_filter_format->setFilterConfig($instance_id, $config);
+        }
+      }
+    }
+
+    return $submitted_filter_format;
+  }
+
+  /**
+   * Gets the eventual text format config entity: from form state + editor.
+   *
+   * Needed for validation.
+   *
+   * @param \Drupal\Core\Form\SubformStateInterface $editor_form_state
+   *   The text editor configuration form's form state.
+   * @param \Drupal\editor\EditorInterface $submitted_editor
+   *   The current text editor config entity.
+   *
+   * @return \Drupal\editor\EditorInterface
+   *   A clone of the received Editor config entity , with a primed associated
+   *   FilterFormat that corresponds to the current form state, to avoid the
+   *   stored FilterFormat config entity being loaded.
+   */
+  protected function getEventualEditorWithPrimedFilterFormat(SubformStateInterface $editor_form_state, EditorInterface $submitted_editor): EditorInterface {
+    $submitted_filter_format = static::getSubmittedFilterFormat($editor_form_state->getCompleteFormState());
+
+    $pair = static::createEphemeralPairedEditor($submitted_editor, $submitted_filter_format);
+
+    if ($pair->getFilterFormat()->filters('filter_html')->status) {
+      // Compute elements provided by the current CKEditor 5 settings.
+      $enabled_plugins = array_keys($this->ckeditor5PluginManager->getEnabledDefinitions($pair));
+      $elements = $this->ckeditor5PluginManager->getProvidedElements($enabled_plugins, $pair);
+
+      // Compute eventual filter_html setting. Eventual as in: this is the list
+      // of eventually allowed HTML tags.
+      // @see \Drupal\filter\FilterFormatFormBase::submitForm()
+      // @see ckeditor5_form_filter_format_form_alter()
+      $allowed_html = implode(' ', HTMLRestrictionsUtilities::toReadableElements($elements));
+      $filter_html_config = $pair->getFilterFormat()->filters('filter_html')->getConfiguration();
+      $filter_html_config['settings']['allowed_html'] = $allowed_html;
+      $pair->getFilterFormat()->setFilterConfig('filter_html', $filter_html_config);
+    }
+
+    return $pair;
+  }
+
+  /**
+   * Creates an ephemeral pair of text editor + text format config entity.
+   *
+   * Clones the given text editor config entity object and then overwrites its
+   * $filterFormat property, to prevent loading the text format config entity
+   * from entity storage in calls to Editor::hasAssociatedFilterFormat() and
+   * Editor::getFilterFormat().
+   * This is necessary to be able to evaluate unsaved text editor and format
+   * config entities:
+   * - for assessing which CKEditor 5 plugins are enabled and whose settings
+   *   forms to show
+   * - for validating them.
+   *
+   * @param \Drupal\editor\EditorInterface $editor
+   *   The submitted text editor config entity, constructed from form values.
+   * @param \Drupal\filter\FilterFormatInterface $filter_format
+   *   The submitted text format config entity, constructed from form values.
+   *
+   * @return \Drupal\editor\EditorInterface
+   *   A clone of the given text editor config entity, with its $filterFormat
+   *   property set to a clone of the given text format config entity.
+   *
+   * @throws \ReflectionException
+   *
+   * @see \Drupal\ckeditor5\Plugin\CKEditor5PluginManager::isPluginDisabled()
+   * @todo Remove this in https://www.drupal.org/project/drupal/issues/3231347
+   */
+  protected static function createEphemeralPairedEditor(EditorInterface $editor, FilterFormatInterface $filter_format): EditorInterface {
+    $paired_editor = clone $editor;
+    $reflector = new \ReflectionObject($paired_editor);
+    $property = $reflector->getProperty('filterFormat');
+    $property->setAccessible(TRUE);
+    $property->setValue($paired_editor, clone $filter_format);
+    return $paired_editor;
+  }
+
+  /**
+   * Maps Text Editor config object property paths to form names.
+   *
+   * @param string $property_path
+   *   A config object property path.
+   * @param array $subform
+   *   The subform being checked.
+   *
+   * @return string
+   *   The corresponding form name in the subform.
+   */
+  protected static function mapViolationPropertyPathsToFormNames(string $property_path, array $subform): string {
+    $parts = explode('.', $property_path);
+    // The "settings" form element does exist, but one level above the Text
+    // Editor-specific form. This is operating on a subform.
+    $shifted = array_shift($parts);
+    assert($shifted === 'settings');
+
+    // It is not required (nor sensible) for the form structure to match the
+    // config schema structure 1:1. Automatically identify the relevant form
+    // name. Try to be specific. Worst case, an entire plugin settings vertical
+    // tab is targeted. (Hence the minimum of 2 parts: the property path gets at
+    // minimum mapped to 'toolbar.items' or 'plugins.<plugin ID>'.)
+    while (count($parts) > 2 && !NestedArray::keyExists($subform, $parts)) {
+      array_pop($parts);
+    }
+    assert(NestedArray::keyExists($subform, $parts));
+    return implode('][', array_merge(['settings'], $parts));
+  }
+
+  /**
+   * Maps Text Editor + Text Format pair property paths to form names.
+   *
+   * @param string $property_path
+   *   A config object property path.
+   * @param array $form
+   *   The form being checked.
+   *
+   * @return string
+   *   The corresponding form name in the complete form.
+   */
+  protected static function mapPairViolationPropertyPathsToFormNames(string $property_path, array $form): string {
+    // Fundamental compatibility errors are at the root. Map these to the text
+    // editor plugin dropdown.
+    if ($property_path === '') {
+      return 'editor][editor';
+    }
+
+    // Filters are top-level.
+    if (preg_match('/^filters\..*/', $property_path)) {
+      return implode('][', array_merge(explode('.', $property_path), ['settings']));
+    }
+
+    // Everything else is in the subform.
+    return 'editor][' . static::mapViolationPropertyPathsToFormNames($property_path, $form);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
+    // @see ::validateConfigurationForm()
+    $editor = $form_state->get('editor');
+
+    // Prepare the editor settings for editor_form_filter_admin_format_submit().
+    // This strips away unwanted form values too, because those never can exist
+    // in the already validated Editor config entity.
+    $form_state->setValues($editor->getSettings());
+
+    parent::submitConfigurationForm($form, $form_state);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getJSSettings(Editor $editor) {
+    $toolbar_items = $editor->getSettings()['toolbar']['items'];
+    $plugin_config = $this->ckeditor5PluginManager->getCKEditor5PluginConfig($editor);
+
+    $settings = [
+      'toolbar' => [
+        'items' => $toolbar_items,
+        'shouldNotGroupWhenFull' => in_array('-', $toolbar_items, TRUE),
+      ],
+    ] + $plugin_config;
+
+    if ($this->moduleHandler->moduleExists('locale')) {
+      $ui_langcode = 'en';
+      $ckeditor_langcodes = $this->getLangcodes();
+      $language_interface = $this->languageManager->getCurrentLanguage();
+      if (isset($ckeditor_langcodes[$language_interface->getId()])) {
+        $ui_langcode = $ckeditor_langcodes[$language_interface->getId()];
+      }
+      $settings['language']['ui'] = $ui_langcode;
+    }
+
+    return $settings;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getLibraries(Editor $editor) {
+    $plugin_libraries = $this->ckeditor5PluginManager->getEnabledLibraries($editor);
+
+    if ($this->moduleHandler->moduleExists('locale')) {
+      $ui_langcode = 'en';
+      $ckeditor_langcodes = $this->getLangcodes();
+      $language_interface = $this->languageManager->getCurrentLanguage();
+      if (isset($ckeditor_langcodes[$language_interface->getId()])) {
+        $ui_langcode = $ckeditor_langcodes[$language_interface->getId()];
+      }
+      $plugin_libraries[] = 'core/ckeditor5.translations.' . $ui_langcode;
+    }
+
+    return $plugin_libraries;
+  }
+
+  /**
+   * Returns a list of language codes supported by CKEditor 5.
+   *
+   * @return array
+   *   An associative array keyed by language codes.
+   */
+  protected function getLangcodes(): array {
+    // Cache the file system based language list calculation because this would
+    // be expensive to calculate all the time. The cache is cleared on core
+    // upgrades which is the only situation the CKEditor file listing should
+    // change.
+    $langcode_cache = $this->cache->get('ckeditor5.langcodes');
+    if (!empty($langcode_cache)) {
+      $langcodes = $langcode_cache->data;
+    }
+    if (empty($langcodes)) {
+      $langcodes = [];
+      // Collect languages included with CKEditor 5 based on file listing.
+      $files = scandir('core/assets/vendor/ckeditor5/translations');
+      foreach ($files as $file) {
+        if ($file[0] !== '.' && preg_match('/\.js$/', $file)) {
+          $langcode = basename($file, '.js');
+          $langcodes[$langcode] = $langcode;
+        }
+      }
+      $this->cache->set('ckeditor5.langcodes', $langcodes);
+    }
+
+    // Get language mapping if available to map to Drupal language codes.
+    // This is configurable in the user interface and not expensive to get, so
+    // we don't include it in the cached language list.
+    $language_mappings = $this->moduleHandler->moduleExists('language') ? language_get_browser_drupal_langcode_mappings() : [];
+    foreach ($langcodes as $langcode) {
+      // If this language code is available in a Drupal mapping, use that to
+      // compute a possibility for matching from the Drupal langcode to the
+      // CKEditor langcode.
+      // For instance, CKEditor uses the langcode 'no' for Norwegian, Drupal
+      // uses 'nb'. This would then remove the 'no' => 'no' mapping and replace
+      // it with 'nb' => 'no'. Now Drupal knows which CKEditor translation to
+      // load.
+      if (isset($language_mappings[$langcode]) && !isset($langcodes[$language_mappings[$langcode]])) {
+        $langcodes[$language_mappings[$langcode]] = $langcode;
+        unset($langcodes[$langcode]);
+      }
+    }
+
+    return $langcodes;
+  }
+
+}
diff --git a/core/modules/ckeditor5/src/Plugin/Validation/Constraint/CKEditor5ElementConstraint.php b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/CKEditor5ElementConstraint.php
new file mode 100644
index 000000000000..b9c3dc6062af
--- /dev/null
+++ b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/CKEditor5ElementConstraint.php
@@ -0,0 +1,26 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Plugin\Validation\Constraint;
+
+use Symfony\Component\Validator\Constraint;
+
+/**
+ * CKEditor 5 element.
+ *
+ * @Constraint(
+ *   id = "CKEditor5Element",
+ *   label = @Translation("CKEditor 5 element", context = "Validation"),
+ * )
+ */
+class CKEditor5ElementConstraint extends Constraint {
+
+  /**
+   * The default violation message.
+   *
+   * @var string
+   */
+  public $message = 'The following tag is not valid HTML: %provided_element.';
+
+}
diff --git a/core/modules/ckeditor5/src/Plugin/Validation/Constraint/CKEditor5ElementConstraintValidator.php b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/CKEditor5ElementConstraintValidator.php
new file mode 100644
index 000000000000..fe62d144218f
--- /dev/null
+++ b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/CKEditor5ElementConstraintValidator.php
@@ -0,0 +1,37 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Plugin\Validation\Constraint;
+
+use Drupal\Component\Utility\Html;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+
+/**
+ * CKEditor 5 element validator.
+ *
+ * @internal
+ */
+class CKEditor5ElementConstraintValidator extends ConstraintValidator {
+
+  /**
+   * {@inheritdoc}
+   *
+   * @throws \Symfony\Component\Validator\Exception\UnexpectedTypeException
+   *   Thrown when the given constraint is not supported by this validator.
+   */
+  public function validate($element, $constraint) {
+    if (!$constraint instanceof CKEditor5ElementConstraint) {
+      throw new UnexpectedTypeException($constraint, __NAMESPACE__ . '\CKEditor5Element');
+    }
+    $body_child_nodes = Html::load(str_replace('>', ' />', trim($element)))->getElementsByTagName('body')->item(0)->childNodes;
+
+    if ($body_child_nodes->count() !== 1 || $body_child_nodes->item(0)->nodeType !== XML_ELEMENT_NODE) {
+      $this->context->buildViolation($constraint->message)
+        ->setParameter('%provided_element', $element)
+        ->addViolation();
+    }
+  }
+
+}
diff --git a/core/modules/ckeditor5/src/Plugin/Validation/Constraint/EnabledConfigurablePluginsConstraint.php b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/EnabledConfigurablePluginsConstraint.php
new file mode 100644
index 000000000000..7c8e843134c4
--- /dev/null
+++ b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/EnabledConfigurablePluginsConstraint.php
@@ -0,0 +1,28 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Plugin\Validation\Constraint;
+
+use Symfony\Component\Validator\Constraint;
+
+/**
+ * The CKEditor 5 plugin settings.
+ *
+ * @Constraint(
+ *   id = "CKEditor5EnabledConfigurablePlugins",
+ *   label = @Translation("CKEditor 5 enabled configurable plugins", context = "Validation"),
+ * )
+ *
+ * @internal
+ */
+class EnabledConfigurablePluginsConstraint extends Constraint {
+
+  /**
+   * The default violation message.
+   *
+   * @var string
+   */
+  public $message = 'Configuration for the enabled plugin "%plugin_label" (%plugin_id) is missing.';
+
+}
diff --git a/core/modules/ckeditor5/src/Plugin/Validation/Constraint/EnabledConfigurablePluginsConstraintValidator.php b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/EnabledConfigurablePluginsConstraintValidator.php
new file mode 100644
index 000000000000..9d610b9fc1f8
--- /dev/null
+++ b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/EnabledConfigurablePluginsConstraintValidator.php
@@ -0,0 +1,78 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Plugin\Validation\Constraint;
+
+use Drupal\ckeditor5\Plugin\CKEditor5PluginDefinition;
+use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+
+/**
+ * Enabled configurable plugin settings validator.
+ *
+ * @internal
+ */
+class EnabledConfigurablePluginsConstraintValidator extends ConstraintValidator implements ContainerInjectionInterface {
+
+  use PluginManagerDependentValidatorTrait;
+  use TextEditorObjectDependentValidatorTrait;
+
+  /**
+   * {@inheritdoc}
+   *
+   * @throws \Symfony\Component\Validator\Exception\UnexpectedTypeException
+   *   Thrown when the given constraint is not supported by this validator.
+   */
+  public function validate($settings, Constraint $constraint) {
+    if (!$constraint instanceof EnabledConfigurablePluginsConstraint) {
+      throw new UnexpectedTypeException($constraint, __NAMESPACE__ . '\EnabledConfigurablePluginsConstraint');
+    }
+
+    $configurable_enabled_definitions = $this->getConfigurableEnabledDefinitions();
+    try {
+      $plugin_settings = $this->context->getRoot()->get('settings.plugins')->getValue();
+    }
+    catch (\InvalidArgumentException $e) {
+      $plugin_settings = [];
+    }
+
+    foreach ($configurable_enabled_definitions as $id => $definition) {
+      if ($definition->hasConditions() && isset($definition->getConditions()['imageUploadStatus']) && $definition->getConditions()['imageUploadStatus'] === TRUE) {
+        // This is the exception to the rule: this is a privileged plugin due to
+        // the Text Editor config entity's built-in image upload settings.
+        // @see \Drupal\editor\Entity\Editor::getImageUploadSettings()
+        // @see editor_image_upload_settings_form()
+        // @see \Drupal\ckeditor5\Plugin\CKEditor5Plugin\ImageUpload::buildConfigurationForm()
+        continue;
+      }
+
+      if (!isset($plugin_settings[$id]) || empty($plugin_settings[$id])) {
+        $this->context->buildViolation($constraint->message)
+          ->setParameter('%plugin_label', $definition->label())
+          ->setParameter('%plugin_id', $id)
+          ->atPath("plugins.$id")
+          ->addViolation();
+      }
+    }
+  }
+
+  /**
+   * Gets all configurable CKEditor 5 plugin definitions that are enabled.
+   *
+   * @return \Drupal\ckeditor5\Plugin\CKEditor5PluginDefinition[]
+   *   An array of enabled configurable CKEditor 5 plugin definitions.
+   */
+  private function getConfigurableEnabledDefinitions(): array {
+    $text_editor = $this->createTextEditorObjectFromContext();
+    $enabled_definitions = $this->pluginManager->getEnabledDefinitions($text_editor);
+    $configurable_enabled_definitions = array_filter($enabled_definitions, function (CKEditor5PluginDefinition $definition): bool {
+      return $definition->isConfigurable();
+    });
+
+    return $configurable_enabled_definitions;
+  }
+
+}
diff --git a/core/modules/ckeditor5/src/Plugin/Validation/Constraint/FundamentalCompatibilityConstraint.php b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/FundamentalCompatibilityConstraint.php
new file mode 100644
index 000000000000..6932fe8ae4f4
--- /dev/null
+++ b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/FundamentalCompatibilityConstraint.php
@@ -0,0 +1,56 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Plugin\Validation\Constraint;
+
+use Symfony\Component\Validator\Constraint;
+
+/**
+ * The fundamental compatibility constraint.
+ *
+ * @Constraint(
+ *   id = "CKEditor5FundamentalCompatibility",
+ *   label = @Translation("CKEditor 5 fundamental text format compatibility", context = "Validation"),
+ * )
+ *
+ * @internal
+ */
+class FundamentalCompatibilityConstraint extends Constraint {
+
+  /**
+   * The violation message when no markup filters are enabled.
+   *
+   * @var string
+   */
+  public $noMarkupFiltersMessage = 'CKEditor 5 only works with HTML-based text formats. The "%filter_label" (%filter_plugin_id) filter implies this text format is not HTML anymore.';
+
+  /**
+   * The violation message when fundamental HTML elements are forbidden.
+   *
+   * @var string
+   */
+  public $forbiddenElementsMessage = 'CKEditor 5 needs at least the &lt;p&gt; and &lt;br&gt; tags to be allowed to be able to function. They are forbidden by the "%filter_label" (%filter_plugin_id) filter.';
+
+  /**
+   * The violation message when fundamental HTML elements are not allowed.
+   *
+   * @var string
+   */
+  public $nonAllowedElementsMessage = 'CKEditor 5 needs at least the &lt;p&gt; and &lt;br&gt; tags to be allowed to be able to function. They are not allowed by the "%filter_label" (%filter_plugin_id) filter.';
+
+  /**
+   * The violation message when HTML elements cannot be generated by CKE5.
+   *
+   * @var string
+   */
+  public $notSupportedElementsMessage = 'The current CKEditor 5 build requires the following elements and attributes: <br><code>@list</code><br>The following elements are not supported: <br><code>@diff</code>';
+
+  /**
+   * The violation message when CKE5 can generate disallowed HTML elements.
+   *
+   * @var string
+   */
+  public $missingElementsMessage = 'The current CKEditor 5 build requires the following elements and attributes: <br><code>@list</code><br>The following elements are missing: <br><code>@diff</code>';
+
+}
diff --git a/core/modules/ckeditor5/src/Plugin/Validation/Constraint/FundamentalCompatibilityConstraintValidator.php b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/FundamentalCompatibilityConstraintValidator.php
new file mode 100644
index 000000000000..43de2c35c9a5
--- /dev/null
+++ b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/FundamentalCompatibilityConstraintValidator.php
@@ -0,0 +1,293 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Plugin\Validation\Constraint;
+
+use Drupal\ckeditor5\HTMLRestrictionsUtilities;
+use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
+use Drupal\editor\EditorInterface;
+use Drupal\filter\FilterFormatInterface;
+use Drupal\filter\Plugin\FilterInterface;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+
+/**
+ * Validates fundamental compatibility of CKEditor 5 with the given text format.
+ *
+ * Fundamental requirements:
+ * 1. No TYPE_MARKUP_LANGUAGE filters allowed.
+ * 2. Fundamental CKEditor 5 plugins' HTML tags are allowed.
+ * 3. The HTML restrictions of all TYPE_HTML_RESTRICTOR filters allow the
+ *    configured CKEditor 5 plugins to work.
+ *
+ * @see \Drupal\filter\Plugin\FilterInterface::TYPE_HTML_RESTRICTOR
+ *
+ * @internal
+ */
+class FundamentalCompatibilityConstraintValidator extends ConstraintValidator implements ContainerInjectionInterface {
+
+  use PluginManagerDependentValidatorTrait;
+  use TextEditorObjectDependentValidatorTrait;
+
+  /**
+   * The fundamental CKEditor 5 plugins without which it cannot function.
+   *
+   * @var string[]
+   */
+  const FUNDAMENTAL_CKEDITOR5_PLUGINS = [
+    'ckeditor5_essentials',
+    'ckeditor5_paragraph',
+  ];
+
+  /**
+   * {@inheritdoc}
+   *
+   * @throws \Symfony\Component\Validator\Exception\UnexpectedTypeException
+   *   Thrown when the given constraint is not supported by this validator.
+   */
+  public function validate($toolbar_item, Constraint $constraint) {
+    if (!$constraint instanceof FundamentalCompatibilityConstraint) {
+      throw new UnexpectedTypeException($constraint, __NAMESPACE__ . '\FundamentalCompatibility');
+    }
+
+    $text_editor = $this->createTextEditorObjectFromContext();
+
+    // First: the two fundamental checks against the text format. If any of
+    // them adds a constraint violation, return early, because it is a
+    // fundamental compatibility problem.
+    $this->checkNoMarkupFilters($text_editor->getFilterFormat(), $constraint);
+    if ($this->context->getViolations()->count() > 0) {
+      return;
+    }
+    $this->checkHtmlRestrictionsAreCompatible($text_editor->getFilterFormat(), $constraint);
+    if ($this->context->getViolations()->count() > 0) {
+      return;
+    }
+
+    // Finally: ensure the CKEditor 5 configuration's ability to generate HTML
+    // markup precisely matches that of the text format.
+    $this->checkHtmlRestrictionsMatch($text_editor, $constraint);
+  }
+
+  /**
+   * Checks no TYPE_MARKUP_LANGUAGE filters are present.
+   *
+   * @param \Drupal\filter\FilterFormatInterface $text_format
+   *   The text format to validate.
+   * @param \Drupal\ckeditor5\Plugin\Validation\Constraint\FundamentalCompatibilityConstraint $constraint
+   *   The constraint to validate.
+   */
+  private function checkNoMarkupFilters(FilterFormatInterface $text_format, FundamentalCompatibilityConstraint $constraint): void {
+    $markup_filters = static::getFiltersInFormatOfType(
+      $text_format,
+      FilterInterface::TYPE_MARKUP_LANGUAGE
+    );
+    if (!empty($markup_filters)) {
+      foreach ($markup_filters as $markup_filter) {
+        $this->context->buildViolation($constraint->noMarkupFiltersMessage)
+          ->setParameter('%filter_label', $markup_filter->getLabel())
+          ->setParameter('%filter_plugin_id', $markup_filter->getPluginId())
+          ->addViolation();
+      }
+    }
+  }
+
+  /**
+   * Checks that fundamental CKEditor 5 plugins' HTML tags are allowed.
+   *
+   * @param \Drupal\filter\FilterFormatInterface $text_format
+   *   The text format to validate.
+   * @param \Drupal\ckeditor5\Plugin\Validation\Constraint\FundamentalCompatibilityConstraint $constraint
+   *   The constraint to validate.
+   */
+  private function checkHtmlRestrictionsAreCompatible(FilterFormatInterface $text_format, FundamentalCompatibilityConstraint $constraint): void {
+    $minimum_tags = array_keys($this->pluginManager->getProvidedElements(self::FUNDAMENTAL_CKEDITOR5_PLUGINS));
+
+    $html_restrictions = $text_format->getHtmlRestrictions();
+
+    $forbidden_minimum_tags = isset($html_restrictions['forbidden_tags'])
+      ? array_diff($minimum_tags, $html_restrictions['forbidden_tags'])
+      : [];
+    if (!empty($forbidden_minimum_tags)) {
+      $offending_filter = static::findHtmlRestrictorFilterForbiddingTags($text_format, $minimum_tags);
+      $this->context->buildViolation($constraint->forbiddenElementsMessage)
+        ->setParameter('%filter_label', $offending_filter->getLabel())
+        ->setParameter('%filter_plugin_id', $offending_filter->getPluginId())
+        ->addViolation();
+    }
+
+    $not_allowed_minimum_tags = isset($html_restrictions['allowed'])
+      ? array_diff($minimum_tags, array_keys($html_restrictions['allowed']))
+      : [];
+    if (!empty($not_allowed_minimum_tags)) {
+      $offending_filter = static::findHtmlRestrictorFilterNotAllowingTags($text_format, $minimum_tags);
+      $this->context->buildViolation($constraint->nonAllowedElementsMessage)
+        ->setParameter('%filter_label', $offending_filter->getLabel())
+        ->setParameter('%filter_plugin_id', $offending_filter->getPluginId())
+        ->addViolation();
+    }
+  }
+
+  /**
+   * Checks the HTML restrictions match the enabled CKEditor 5 plugins' output.
+   *
+   * @param \Drupal\editor\EditorInterface $text_editor
+   *   The text editor to validate.
+   * @param \Drupal\ckeditor5\Plugin\Validation\Constraint\FundamentalCompatibilityConstraint $constraint
+   *   The constraint to validate.
+   */
+  private function checkHtmlRestrictionsMatch(EditorInterface $text_editor, FundamentalCompatibilityConstraint $constraint): void {
+    $html_restrictor_filters = static::getFiltersInFormatOfType(
+      $text_editor->getFilterFormat(),
+      FilterInterface::TYPE_HTML_RESTRICTOR
+    );
+
+    $enabled_plugins = array_keys($this->pluginManager->getEnabledDefinitions($text_editor));
+    $provided = $this->pluginManager->getProvidedElements($enabled_plugins, $text_editor);
+
+    foreach ($html_restrictor_filters as $filter_plugin_id => $filter) {
+      $restrictions = $filter->getHTMLRestrictions();
+      if (!isset($restrictions['allowed'])) {
+        // @todo Handle HTML restrictor filters that only set forbidden_tags
+        //   https://www.drupal.org/project/ckeditor5/issues/3231336.
+        continue;
+      }
+
+      $allowed = $restrictions['allowed'];
+      // @todo Validate attributes allowed or forbidden on all elements
+      //   https://www.drupal.org/project/ckeditor5/issues/3231334.
+      if (isset($allowed['*'])) {
+        unset($allowed['*']);
+      }
+
+      $diff_allowed = HTMLRestrictionsUtilities::diffAllowedElements($allowed, $provided);
+      $diff_elements = HTMLRestrictionsUtilities::diffAllowedElements($provided, $allowed);
+
+      if (!empty($diff_allowed)) {
+        $this->context->buildViolation($constraint->notSupportedElementsMessage)
+          ->setParameter('@list', implode(' ', HTMLRestrictionsUtilities::toReadableElements($provided)))
+          ->setParameter('@diff', implode(' ', HTMLRestrictionsUtilities::toReadableElements($diff_allowed)))
+          ->atPath("filters.$filter_plugin_id")
+          ->addViolation();
+      }
+      elseif (!empty($diff_elements)) {
+        $this->context->buildViolation($constraint->missingElementsMessage)
+          ->setParameter('@list', implode(' ', HTMLRestrictionsUtilities::toReadableElements($provided)))
+          ->setParameter('@diff', implode(' ', HTMLRestrictionsUtilities::toReadableElements($diff_elements)))
+          ->atPath("filters.$filter_plugin_id")
+          ->addViolation();
+      }
+    }
+  }
+
+  /**
+   * Gets the filters of the given type in this text format.
+   *
+   * @param \Drupal\filter\FilterFormatInterface $text_format
+   *   A text format whose filters to get.
+   * @param int $filter_type
+   *   One of FilterInterface::TYPE_*.
+   * @param callable|null $extra_requirements
+   *   An optional callable that can check a filter of this type for additional
+   *   conditions to be met. Must return TRUE when it meets the conditions,
+   *   FALSE otherwise.
+   *
+   * @return \Drupal\filter\Plugin\FilterInterface[]
+   *   The matched filter plugins.
+   */
+  private static function getFiltersInFormatOfType(FilterFormatInterface $text_format, int $filter_type, callable $extra_requirements = NULL): array {
+    assert(in_array($filter_type, [
+      FilterInterface::TYPE_MARKUP_LANGUAGE,
+      FilterInterface::TYPE_HTML_RESTRICTOR,
+      FilterInterface::TYPE_TRANSFORM_IRREVERSIBLE,
+      FilterInterface::TYPE_TRANSFORM_IRREVERSIBLE,
+    ]));
+    return array_filter($text_format->filters()->getAll(), function (FilterInterface $filter) use ($filter_type, $extra_requirements) {
+      if (!$filter->status) {
+        return FALSE;
+      }
+      if ($filter->getType() === $filter_type && ($extra_requirements === NULL || $extra_requirements($filter))) {
+        return TRUE;
+      }
+      return FALSE;
+    });
+  }
+
+  /**
+   * Analyzes a text format to find the filter not allowing required tags.
+   *
+   * @param \Drupal\filter\FilterFormatInterface $text_format
+   *   A text format whose filters to check for compatibility.
+   * @param string[] $required_tags
+   *   A list of HTML tags that are required.
+   *
+   * @return \Drupal\filter\Plugin\FilterInterface
+   *   The filter plugin instance not allowing the required tags.
+   *
+   * @throws \InvalidArgumentException
+   */
+  private static function findHtmlRestrictorFilterForbiddingTags(FilterFormatInterface $text_format, array $required_tags): FilterInterface {
+    // Get HTML restrictor filters that actually restrict HTML.
+    $filters = static::getFiltersInFormatOfType(
+      $text_format,
+      FilterInterface::TYPE_HTML_RESTRICTOR,
+      function (FilterInterface $filter) {
+        return $filter->getHTMLRestrictions() !== FALSE;
+      }
+    );
+
+    foreach ($filters as $filter) {
+      $restrictions = $filter->getHTMLRestrictions();
+
+      // @todo Fix
+      //   \Drupal\filter_test\Plugin\Filter\FilterTestRestrictTagsAndAttributes::getHTMLRestrictions(),
+      //   whose computed value for forbidden_tags does not comply with the API
+      //   https://www.drupal.org/project/drupal/issues/3231331.
+      if (array_keys($restrictions['forbidden_tags']) != range(0, count($restrictions['forbidden_tags']))) {
+        $restrictions['forbidden_tags'] = array_keys($restrictions['forbidden_tags']);
+      }
+      if (isset($restrictions['forbidden_tags']) && !empty(array_intersect($required_tags, $restrictions['forbidden_tags']))) {
+        return $filter;
+      }
+    }
+
+    throw new \InvalidArgumentException('This text format does not have a "tags forbidden" restriction that includes the required tags.');
+  }
+
+  /**
+   * Analyzes a text format to find the filter not allowing required tags.
+   *
+   * @param \Drupal\filter\FilterFormatInterface $text_format
+   *   A text format whose filters to check for compatibility.
+   * @param string[] $required_tags
+   *   A list of HTML tags that are required.
+   *
+   * @return \Drupal\filter\Plugin\FilterInterface
+   *   The filter plugin instance not allowing the required tags.
+   *
+   * @throws \InvalidArgumentException
+   */
+  private static function findHtmlRestrictorFilterNotAllowingTags(FilterFormatInterface $text_format, array $required_tags): FilterInterface {
+    // Get HTML restrictor filters that actually restrict HTML.
+    $filters = static::getFiltersInFormatOfType(
+      $text_format,
+      FilterInterface::TYPE_HTML_RESTRICTOR,
+      function (FilterInterface $filter) {
+        return $filter->getHTMLRestrictions() !== FALSE;
+      }
+    );
+
+    foreach ($filters as $filter) {
+      $restrictions = $filter->getHTMLRestrictions();
+
+      if (isset($restrictions['allowed']) && !empty(array_diff($required_tags, array_keys($restrictions['allowed'])))) {
+        return $filter;
+      }
+    }
+
+    throw new \InvalidArgumentException('This text format does not have a "tags allowed" restriction that excludes the required tags.');
+  }
+
+}
diff --git a/core/modules/ckeditor5/src/Plugin/Validation/Constraint/PluginManagerDependentValidatorTrait.php b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/PluginManagerDependentValidatorTrait.php
new file mode 100644
index 000000000000..ae52ece32d48
--- /dev/null
+++ b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/PluginManagerDependentValidatorTrait.php
@@ -0,0 +1,43 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Plugin\Validation\Constraint;
+
+use Drupal\ckeditor5\Plugin\CKEditor5PluginManagerInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Common functionality for many CKEditor 5 validation constraints.
+ *
+ * @internal
+ */
+trait PluginManagerDependentValidatorTrait {
+
+  /**
+   * The CKEditor 5 plugin manager.
+   *
+   * @var \Drupal\ckeditor5\Plugin\CKEditor5PluginManagerInterface
+   */
+  protected $pluginManager;
+
+  /**
+   * Constructs a CKEditor5ConstraintValidatorTrait object.
+   *
+   * @param \Drupal\ckeditor5\Plugin\CKEditor5PluginManagerInterface $plugin_manager
+   *   The CKEditor 5 plugin manager.
+   */
+  public function __construct(CKEditor5PluginManagerInterface $plugin_manager) {
+    $this->pluginManager = $plugin_manager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static(
+      $container->get('plugin.manager.ckeditor5.plugin')
+    );
+  }
+
+}
diff --git a/core/modules/ckeditor5/src/Plugin/Validation/Constraint/SourceEditingRedundantTagsConstraint.php b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/SourceEditingRedundantTagsConstraint.php
new file mode 100644
index 000000000000..76fe468a616d
--- /dev/null
+++ b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/SourceEditingRedundantTagsConstraint.php
@@ -0,0 +1,35 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Plugin\Validation\Constraint;
+
+use Symfony\Component\Validator\Constraint;
+
+/**
+ * For disallowing Source Editing tags that are already supported by a plugin.
+ *
+ * @Constraint(
+ *   id = "SourceEditingRedundantTags",
+ *   label = @Translation("Source editing should only use otherwise unavailable tags", context = "Validation"),
+ * )
+ *
+ * @internal
+ */
+class SourceEditingRedundantTagsConstraint extends Constraint {
+
+  /**
+   * When a Source Editing tag is added that an enabled plugin supports.
+   *
+   * @var string
+   */
+  public $enabledPluginsMessage = 'The following tag(s) are already supported by enabled plugins and should not be added to the Source Editing "Manually editable HTML tags" field: %overlapping_tags.';
+
+  /**
+   * When a Source Editing tag is added that a disabled plugin supports.
+   *
+   * @var string
+   */
+  public $availablePluginsMessage = 'The following tag(s) are already supported by available plugins and should not be added to the Source Editing "Manually editable HTML tags" field. Instead, enable the following plugins to support these tags: %overlapping_tags.';
+
+}
diff --git a/core/modules/ckeditor5/src/Plugin/Validation/Constraint/SourceEditingRedundantTagsConstraintValidator.php b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/SourceEditingRedundantTagsConstraintValidator.php
new file mode 100644
index 000000000000..618cd3c5951f
--- /dev/null
+++ b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/SourceEditingRedundantTagsConstraintValidator.php
@@ -0,0 +1,103 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Plugin\Validation\Constraint;
+
+use Drupal\ckeditor5\HTMLRestrictionsUtilities;
+use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+
+/**
+ * Ensures tags already available via plugin are not be added to Source Editing.
+ *
+ * @internal
+ */
+class SourceEditingRedundantTagsConstraintValidator extends ConstraintValidator implements ContainerInjectionInterface {
+
+  use PluginManagerDependentValidatorTrait;
+  use TextEditorObjectDependentValidatorTrait;
+
+  /**
+   * {@inheritdoc}
+   *
+   * @throws \Symfony\Component\Validator\Exception\UnexpectedTypeException
+   *   Thrown when the given constraint is not supported by this validator.
+   */
+  public function validate($value, Constraint $constraint) {
+    if (!$constraint instanceof SourceEditingRedundantTagsConstraint) {
+      throw new UnexpectedTypeException($constraint, __NAMESPACE__ . '\SourceEditingRedundantTagsConstraint');
+    }
+    if (empty($value)) {
+      return;
+    }
+
+    $text_editor = $this->createTextEditorObjectFromContext();
+    $enabled_plugins = $this->pluginManager->getEnabledDefinitions($text_editor);
+    $disabled_plugins = array_diff_key($this->pluginManager->getDefinitions(), $enabled_plugins);
+    unset($enabled_plugins['ckeditor5_sourceEditing']);
+
+    // An array of tags enabled by every plugin other than Source Editing.
+    $enabled_plugin_tags = $this->pluginManager->getProvidedElements(array_keys($enabled_plugins));
+    $disabled_plugin_tags = $this->pluginManager->getProvidedElements(array_keys($disabled_plugins));
+
+    // An array of just the tags enabled by Source Editing.
+    $source_enabled_tags = HTMLRestrictionsUtilities::allowedElementsStringToHtmlFilterArray($value);
+    $enabled_plugin_overlap = array_intersect_key($enabled_plugin_tags, $source_enabled_tags);
+    $disabled_plugin_overlap = array_intersect_key($disabled_plugin_tags, $source_enabled_tags);
+
+    foreach ([$enabled_plugin_overlap, $disabled_plugin_overlap] as &$overlap) {
+      $checking_enabled = $overlap === $enabled_plugin_overlap;
+      if (!empty($overlap)) {
+        foreach ($overlap as $overlapping_tag => $overlapping_config) {
+          if (is_array($source_enabled_tags[$overlapping_tag])) {
+            unset($overlap[$overlapping_tag]);
+          }
+        }
+      }
+      if (!empty($overlap)) {
+        $plugins_to_check_against = $checking_enabled ? $enabled_plugins : $disabled_plugins;
+        $tags_plugin_report = $this->pluginsSupplyingTagsMessage($overlap, $plugins_to_check_against);
+        $message = $checking_enabled ? $constraint->enabledPluginsMessage : $constraint->availablePluginsMessage;
+        $this->context->buildViolation($message)
+          ->setParameter('%overlapping_tags', $tags_plugin_report)
+          ->addViolation();
+      }
+    }
+  }
+
+  /**
+   * Creates a message listing plugins and the overlapping tags they provide.
+   *
+   * @param array $tags
+   *   An array of overlapping tags.
+   * @param \Drupal\ckeditor5\Plugin\CKEditor5PluginDefinition[] $plugin_definitions
+   *   An array of plugin definitions where overlap was found.
+   *
+   * @return string
+   *   A list of plugins that provide the overlapping tags.
+   */
+  private function pluginsSupplyingTagsMessage(array $tags, array $plugin_definitions): string {
+    $message_array = [];
+    $message_string = '';
+    foreach ($plugin_definitions as $plugin_id => $definition) {
+      if ($definition->hasElements()) {
+        $elements_array = HTMLRestrictionsUtilities::allowedElementsStringToHtmlFilterArray(implode('', $definition->getElements()));
+        foreach ($elements_array as $tag_name => $tag_config) {
+          if (isset($tags[$tag_name])) {
+            $message_array[(string) $definition->label()][] = "<$tag_name>";
+          }
+        }
+      }
+    }
+    foreach ($message_array as $plugin_label => $tag_list) {
+      $tags_string = implode(', ', $tag_list);
+      $message_string .= "$plugin_label ($tags_string), ";
+    }
+
+    return trim($message_string, ' ,');
+  }
+
+}
diff --git a/core/modules/ckeditor5/src/Plugin/Validation/Constraint/TextEditorObjectDependentValidatorTrait.php b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/TextEditorObjectDependentValidatorTrait.php
new file mode 100644
index 000000000000..63bf2f0dad60
--- /dev/null
+++ b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/TextEditorObjectDependentValidatorTrait.php
@@ -0,0 +1,55 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Plugin\Validation\Constraint;
+
+use Drupal\editor\EditorInterface;
+use Drupal\editor\Entity\Editor;
+use Drupal\filter\Entity\FilterFormat;
+use Drupal\filter\FilterFormatInterface;
+
+/**
+ * Some CKEditor 5 constraint validators need a Text Editor object.
+ */
+trait TextEditorObjectDependentValidatorTrait {
+
+  /**
+   * Creates a text editor object from the execution context.
+   *
+   * Works both for an individual text editor config entity and a pair.
+   *
+   * @return \Drupal\editor\EditorInterface
+   *   A text editor object, with the text format pre-populated.
+   */
+  private function createTextEditorObjectFromContext(): EditorInterface {
+    if ($this->context->getRoot()->getDataDefinition()->getDataType() === 'ckeditor5_valid_pair__format_and_editor') {
+      $text_format = FilterFormat::create([
+        'filters' => $this->context->getRoot()->get('filters')->toArray(),
+      ]);
+    }
+    else {
+      assert($this->context->getRoot()->getDataDefinition()->getDataType() === 'editor.editor.*');
+      $text_format = FilterFormat::load($this->context->getRoot()->get('format')->getValue());
+    }
+    assert($text_format instanceof FilterFormatInterface);
+
+    $text_editor = Editor::create([
+      'editor' => 'ckeditor5',
+      'settings' => $this->context->getRoot()->get('settings')->toArray(),
+      'image_upload' => $this->context->getRoot()->get('image_upload')->toArray(),
+      // Specify `filterFormat` to ensure that the generated Editor config
+      // entity object already has the $filterFormat property set, to prevent
+      // calls to Editor::hasAssociatedFilterFormat() and
+      // Editor::getFilterFormat() from loading the FilterFormat from storage.
+      // As far as this validation constraint validator is concerned, the
+      // concrete FilterFormat entity ID does not matter, all that matters is
+      // its filter configuration. Those exist in $text_format.
+      'filterFormat' => $text_format,
+    ]);
+    assert($text_editor instanceof EditorInterface);
+
+    return $text_editor;
+  }
+
+}
diff --git a/core/modules/ckeditor5/src/Plugin/Validation/Constraint/ToolbarItemConditionsMetConstraint.php b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/ToolbarItemConditionsMetConstraint.php
new file mode 100644
index 000000000000..37dad3ce6f95
--- /dev/null
+++ b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/ToolbarItemConditionsMetConstraint.php
@@ -0,0 +1,49 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Plugin\Validation\Constraint;
+
+use Symfony\Component\Validator\Constraint;
+
+/**
+ * A (placed) CKEditor 5 toolbar item's conditions must be met.
+ *
+ * @Constraint(
+ *   id = "CKEditor5ToolbarItemConditionsMet",
+ *   label = @Translation("CKEditor 5 toolbar item conditions must be met", context = "Validation"),
+ * )
+ *
+ * @internal
+ */
+class ToolbarItemConditionsMetConstraint extends Constraint {
+
+  /**
+   * The violation message when the required image upload status is not set.
+   *
+   * @var string
+   */
+  public $imageUploadStatusRequiredMessage = 'The %toolbar_item toolbar item requires image uploads to be enabled.';
+
+  /**
+   * The violation message when a required filter is missing.
+   *
+   * @var string
+   */
+  public $filterRequiredMessage = 'The %toolbar_item toolbar item requires the %filter filter to be enabled.';
+
+  /**
+   * The violation message when 1 required plugin is missing.
+   *
+   * @var string
+   */
+  public $singleMissingRequiredPluginMessage = 'The %toolbar_item toolbar item requires the %plugin plugin to be enabled.';
+
+  /**
+   * The violation message when >1 required plugin is missing.
+   *
+   * @var string
+   */
+  public $multipleMissingRequiredPluginMessage = 'The %toolbar_item toolbar item requires the %plugins plugins to be enabled.';
+
+}
diff --git a/core/modules/ckeditor5/src/Plugin/Validation/Constraint/ToolbarItemConditionsMetConstraintValidator.php b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/ToolbarItemConditionsMetConstraintValidator.php
new file mode 100644
index 000000000000..1987c862b4f6
--- /dev/null
+++ b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/ToolbarItemConditionsMetConstraintValidator.php
@@ -0,0 +1,137 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Plugin\Validation\Constraint;
+
+use Drupal\ckeditor5\Plugin\CKEditor5PluginDefinition;
+use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
+use Drupal\Core\StringTranslation\TranslatableMarkup;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+
+/**
+ * Toolbar item conditions met constraint validator.
+ *
+ * @internal
+ */
+class ToolbarItemConditionsMetConstraintValidator extends ConstraintValidator implements ContainerInjectionInterface {
+
+  use PluginManagerDependentValidatorTrait;
+  use TextEditorObjectDependentValidatorTrait;
+
+  /**
+   * {@inheritdoc}
+   *
+   * @throws \Symfony\Component\Validator\Exception\UnexpectedTypeException
+   *   Thrown when the given constraint is not supported by this validator.
+   */
+  public function validate($toolbar_item, Constraint $constraint) {
+    if (!$constraint instanceof ToolbarItemConditionsMetConstraint) {
+      throw new UnexpectedTypeException($constraint, __NAMESPACE__ . '\ToolbarItemConditionsMetConstraint');
+    }
+
+    try {
+      $definition = $this->findDefinitionForToolbarItem($toolbar_item);
+    }
+    catch (\OutOfBoundsException $e) {
+      // No plugin definition found for this toolbar item. It's the
+      // responsibility of another validation constraint to raise this problem.
+      // @see \Drupal\ckeditor5\Plugin\Validation\Constraint\ToolbarItemConstraint
+      return;
+    }
+
+    // If there are no conditions, there is nothing to validate.
+    if (!$definition->hasConditions()) {
+      return;
+    }
+
+    $toolbar_item_label = $definition->getToolbarItems()[$toolbar_item]['label'];
+    $text_editor = $this->createTextEditorObjectFromContext();
+
+    $conditions = $definition->getConditions();
+    foreach ($conditions as $condition_type => $required_value) {
+      switch ($condition_type) {
+        case 'toolbarItem':
+          // Nothing to validate.
+          break;
+
+        case 'imageUploadStatus':
+          $image_upload_settings = $text_editor->getImageUploadSettings();
+          if (!isset($image_upload_settings['status']) || (bool) $image_upload_settings['status'] !== TRUE) {
+            $this->context->buildViolation($constraint->imageUploadStatusRequiredMessage)
+              ->setParameter('%toolbar_item', $toolbar_item_label)
+              ->setInvalidValue($toolbar_item)
+              ->addViolation();
+          }
+          break;
+
+        case 'filter':
+          $filters = $text_editor->getFilterFormat()->filters();
+          if (!$filters->has($required_value) || !$filters->get($required_value)->status) {
+            $filter_label = $filters->has($required_value)
+              ? $filters->get($required_value)->getLabel()
+              : $required_value;
+            $this->context->buildViolation($constraint->filterRequiredMessage)
+              ->setParameter('%toolbar_item', $toolbar_item_label)
+              ->setParameter('%filter', $filter_label)
+              ->setInvalidValue($toolbar_item)
+              ->addViolation();
+          }
+          break;
+
+        case 'plugins':
+          $enabled_definitions = $this->pluginManager->getEnabledDefinitions($text_editor);
+          if (!array_key_exists($definition->id(), $enabled_definitions)) {
+            $required_plugin_ids = $definition->getConditions()['plugins'];
+            $missing_plugin_ids = array_diff($required_plugin_ids, array_keys($enabled_definitions));
+            $all_plugins = $this->pluginManager->getDefinitions();
+            $missing_plugin_labels = array_map(function (string $plugin_id) use ($all_plugins): TranslatableMarkup {
+              return !array_key_exists($plugin_id, $all_plugins)
+                ? $plugin_id
+                : $all_plugins[$plugin_id]->label();
+            }, $missing_plugin_ids);
+            if (count($missing_plugin_ids) === 1) {
+              $message = $constraint->singleMissingRequiredPluginMessage;
+              $parameter = '%plugin';
+            }
+            else {
+              $message = $constraint->multipleMissingRequiredPluginMessage;
+              $parameter = '%plugins';
+            }
+            $this->context->buildViolation($message)
+              ->setParameter('%toolbar_item', $toolbar_item_label)
+              ->setParameter($parameter, implode(', ', $missing_plugin_labels))
+              ->setInvalidValue($toolbar_item)
+              ->addViolation();
+          }
+          break;
+      }
+    }
+  }
+
+  /**
+   * Searches for CKEditor 5 plugin that provides a given toolbar item.
+   *
+   * @param string $toolbar_item
+   *   The toolbar item to be searched for within plugin definitions.
+   *
+   * @return \Drupal\ckeditor5\Plugin\CKEditor5PluginDefinition
+   *   The corresponding plugin definition.
+   *
+   * @throws \OutOfBoundsException
+   */
+  protected function findDefinitionForToolbarItem(string $toolbar_item): CKEditor5PluginDefinition {
+    $definitions = $this->pluginManager->getDefinitions();
+    foreach ($definitions as $definition) {
+      if (array_key_exists($toolbar_item, $definition->getToolbarItems())) {
+        return $definition;
+      }
+    }
+
+    // @see \Drupal\ckeditor5\Plugin\Validation\Constraint\ToolbarItemConstraint
+    throw new \OutOfBoundsException("Toolbar item '$toolbar_item' not found.");
+  }
+
+}
diff --git a/core/modules/ckeditor5/src/Plugin/Validation/Constraint/ToolbarItemConstraint.php b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/ToolbarItemConstraint.php
new file mode 100644
index 000000000000..9c31b259fa09
--- /dev/null
+++ b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/ToolbarItemConstraint.php
@@ -0,0 +1,28 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Plugin\Validation\Constraint;
+
+use Symfony\Component\Validator\Constraint;
+
+/**
+ * A CKEditor 5 toolbar item.
+ *
+ * @Constraint(
+ *   id = "CKEditor5ToolbarItem",
+ *   label = @Translation("CKEditor 5 toolbar item", context = "Validation"),
+ * )
+ *
+ * @see https://ckeditor.com/docs/ckeditor5/latest/features/toolbar/toolbar.html
+ */
+class ToolbarItemConstraint extends Constraint {
+
+  /**
+   * The default violation message.
+   *
+   * @var string
+   */
+  public $message = 'The provided toolbar item %toolbar_item is not valid.';
+
+}
diff --git a/core/modules/ckeditor5/src/Plugin/Validation/Constraint/ToolbarItemConstraintValidator.php b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/ToolbarItemConstraintValidator.php
new file mode 100644
index 000000000000..d669a85d1d57
--- /dev/null
+++ b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/ToolbarItemConstraintValidator.php
@@ -0,0 +1,70 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Plugin\Validation\Constraint;
+
+use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+
+/**
+ * Toolbar item constraint validator.
+ *
+ * @internal
+ */
+class ToolbarItemConstraintValidator extends ConstraintValidator implements ContainerInjectionInterface {
+
+  use PluginManagerDependentValidatorTrait;
+
+  /**
+   * {@inheritdoc}
+   *
+   * @throws \Symfony\Component\Validator\Exception\UnexpectedTypeException
+   *   Thrown when the given constraint is not supported by this validator.
+   */
+  public function validate($toolbar_item, Constraint $constraint) {
+    if (!$constraint instanceof ToolbarItemConstraint) {
+      throw new UnexpectedTypeException($constraint, __NAMESPACE__ . '\ToolbarItem');
+    }
+
+    if ($toolbar_item === NULL) {
+      return;
+    }
+
+    if (!static::isValidToolbarItem($toolbar_item)) {
+      $this->context->buildViolation($constraint->message)
+        ->setParameter('%toolbar_item', $toolbar_item)
+        ->setInvalidValue($toolbar_item)
+        ->addViolation();
+    }
+  }
+
+  /**
+   * Validates the given toolbar item.
+   *
+   * @param string $toolbar_item
+   *   A toolbar item as expected by CKEditor 5.
+   *
+   * @return bool
+   *   Whether the given toolbar item is valid or not.
+   */
+  protected function isValidToolbarItem(string $toolbar_item): bool {
+    // Special case: the toolbar group separator.
+    // @see https://ckeditor.com/docs/ckeditor5/latest/features/toolbar/toolbar.html#separating-toolbar-items
+    if ($toolbar_item === '|') {
+      return TRUE;
+    }
+
+    // Special case: the breakpoint separator.
+    // @see https://ckeditor.com/docs/ckeditor5/latest/features/toolbar/toolbar.html#explicit-wrapping-breakpoint
+    if ($toolbar_item === '-') {
+      return TRUE;
+    }
+
+    $available_toolbar_items = array_keys($this->pluginManager->getToolbarItems());
+    return in_array($toolbar_item, $available_toolbar_items, TRUE);
+  }
+
+}
diff --git a/core/modules/ckeditor5/src/Plugin/Validation/Constraint/ToolbarItemDependencyConstraint.php b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/ToolbarItemDependencyConstraint.php
new file mode 100644
index 000000000000..50d099bf4249
--- /dev/null
+++ b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/ToolbarItemDependencyConstraint.php
@@ -0,0 +1,42 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Plugin\Validation\Constraint;
+
+use Symfony\Component\Validator\Constraint;
+
+/**
+ * A CKEditor 5 toolbar item.
+ *
+ * @Constraint(
+ *   id = "CKEditor5ToolbarItemDependencyConstraint",
+ *   label = @Translation("CKEditor 5 toolbar item dependency", context = "Validation"),
+ * )
+ *
+ * @internal
+ */
+class ToolbarItemDependencyConstraint extends Constraint {
+
+  /**
+   * The default violation message.
+   *
+   * @var string
+   */
+  public $message = 'Depends on %toolbar_item, which is not enabled.';
+
+  /**
+   * The toolbar item that this validation constraint requires to be enabled.
+   *
+   * @var null|string
+   */
+  public $toolbarItem = NULL;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getRequiredOptions() {
+    return ['toolbarItem'];
+  }
+
+}
diff --git a/core/modules/ckeditor5/src/Plugin/Validation/Constraint/ToolbarItemDependencyConstraintValidator.php b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/ToolbarItemDependencyConstraintValidator.php
new file mode 100644
index 000000000000..b3fffe5ff53a
--- /dev/null
+++ b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/ToolbarItemDependencyConstraintValidator.php
@@ -0,0 +1,40 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5\Plugin\Validation\Constraint;
+
+use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+
+/**
+ * Toolbar item dependency constraint validator.
+ *
+ * @internal
+ */
+class ToolbarItemDependencyConstraintValidator extends ConstraintValidator implements ContainerInjectionInterface {
+
+  use PluginManagerDependentValidatorTrait;
+
+  /**
+   * {@inheritdoc}
+   *
+   * @throws \Symfony\Component\Validator\Exception\UnexpectedTypeException
+   *   Thrown when the given constraint is not supported by this validator.
+   */
+  public function validate($toolbar_item, Constraint $constraint) {
+    if (!$constraint instanceof ToolbarItemDependencyConstraint) {
+      throw new UnexpectedTypeException($constraint, __NAMESPACE__ . '\ToolbarItemDependency');
+    }
+
+    $toolbar_items = $this->context->getRoot()->get('settings.toolbar.items')->toArray();
+    if (!in_array($constraint->toolbarItem, $toolbar_items, TRUE)) {
+      $this->context->buildViolation($constraint->message)
+        ->setParameter('%toolbar_item', $constraint->toolbarItem)
+        ->addViolation();
+    }
+  }
+
+}
diff --git a/core/modules/ckeditor5/src/SmartDefaultSettings.php b/core/modules/ckeditor5/src/SmartDefaultSettings.php
new file mode 100644
index 000000000000..0fb8adabf11b
--- /dev/null
+++ b/core/modules/ckeditor5/src/SmartDefaultSettings.php
@@ -0,0 +1,663 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5;
+
+use Drupal\ckeditor\CKEditorPluginButtonsInterface;
+use Drupal\ckeditor\CKEditorPluginContextualInterface;
+use Drupal\ckeditor\CKEditorPluginManager;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginDefinition;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginElementsSubsetInterface;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginManagerInterface;
+use Drupal\Component\Plugin\PluginManagerInterface;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+use Drupal\editor\EditorInterface;
+use Drupal\editor\Entity\Editor;
+use Drupal\filter\FilterFormatInterface;
+
+/**
+ * Generates CKEditor 5 settings for existing text editors/formats.
+ *
+ * @internal
+ *   This class may change at any time. It is not for use outside this module.
+ */
+final class SmartDefaultSettings {
+
+  use StringTranslationTrait;
+
+  /**
+   * The CKEditor 5 plugin manager.
+   *
+   * @var \Drupal\ckeditor5\Plugin\CKEditor5PluginManagerInterface
+   */
+  protected $pluginManager;
+
+  /**
+   * The CKEditor 4 to 5 upgrade plugin manager.
+   *
+   * @var \Drupal\Component\Plugin\PluginManagerInterface
+   */
+  protected $upgradePluginManager;
+
+  /**
+   * The "CKEditor 4 plugin" plugin manager.
+   *
+   * @var \Drupal\ckeditor\CKEditorPluginManager
+   */
+  protected $cke4PluginManager;
+
+  /**
+   * Constructs a SmartDefaultSettings object.
+   *
+   * @param \Drupal\ckeditor5\Plugin\CKEditor5PluginManagerInterface $plugin_manager
+   *   The CKEditor 5 plugin manager.
+   * @param \Drupal\Component\Plugin\PluginManagerInterface $upgrade_plugin_manager
+   *   The CKEditor 4 to 5 upgrade plugin manager.
+   * @param \Drupal\ckeditor\CKEditorPluginManager $cke4_plugin_manager
+   *   The CKEditor 4 plugin manager.
+   */
+  public function __construct(CKEditor5PluginManagerInterface $plugin_manager, PluginManagerInterface $upgrade_plugin_manager, CKEditorPluginManager $cke4_plugin_manager = NULL) {
+    $this->pluginManager = $plugin_manager;
+    $this->upgradePluginManager = $upgrade_plugin_manager;
+    $this->cke4PluginManager = $cke4_plugin_manager;
+  }
+
+  /**
+   * Computes the closest possible equivalent settings for switching to CKEditor 5.
+   *
+   * @param \Drupal\editor\EditorInterface|null $text_editor
+   *   The editor being reconfigured for CKEditor 5 to match the CKEditor 4
+   *   settings as closely as possible (if it was using CKEditor 4).
+   * @param \Drupal\filter\FilterFormatInterface $text_format
+   *   The text format for which to compute smart default settings.
+   *
+   * @return array
+   *   An array with two values:
+   *   1. The cloned config entity with settings modified for CKEditor 5 … or a
+   *      completely new config entity if this text format did not yet have one.
+   *   2. Messages explaining what conclusions were reached.
+   *
+   * @throws \InvalidArgumentException
+   *   Thrown when computing smart default settings for a new text format, or
+   *   when the given text editor and format do not form a pair.
+   */
+  public function computeSmartDefaultSettings(?EditorInterface $text_editor, FilterFormatInterface $text_format): array {
+    if ($text_format->isNew()) {
+      throw new \InvalidArgumentException('Smart default settings can only be computed when there is a pre-existing text format.');
+    }
+    if ($text_editor && $text_editor->id() !== $text_format->id()) {
+      throw new \InvalidArgumentException('The given text editor and text format must form a pair.');
+    }
+
+    $messages = [];
+
+    // Ensure that unsaved changes to the text format object are also respected.
+    if ($text_editor) {
+      // Overwrite the Editor config entity object's $filterFormat property, to
+      // prevent calls to Editor::hasAssociatedFilterFormat() and
+      // Editor::getFilterFormat() from loading the FilterFormat from storage.
+      // @todo Remove in https://www.drupal.org/project/ckeditor5/issues/3218985.
+      $reflector = new \ReflectionObject($text_editor);
+      $property = $reflector->getProperty('filterFormat');
+      $property->setAccessible(TRUE);
+      $property->setValue($text_editor, $text_format);
+    }
+
+    // When there is a pre-existing text editor, pass that. Otherwise, generate
+    // an empty shell of a text editor config entity — this will then
+    // automatically get the default CKEditor 5 settings.
+    // @todo Update after https://www.drupal.org/project/drupal/issues/3226673.
+    /** @var \Drupal\editor\Entity\Editor $editor */
+    $editor = $text_editor !== NULL
+      ? clone $text_editor
+      : Editor::create([
+        'format' => $text_format->id(),
+        // @see \Drupal\editor\Entity\Editor::__construct()
+        // @see \Drupal\ckeditor5\Plugin\Editor\CKEditor5::getDefaultSettings()
+        'editor' => 'ckeditor5',
+      ]);
+    $editor->setEditor('ckeditor5');
+
+    // Compute the appropriate settings based on the CKEditor 4 configuration
+    // if it exists.
+    $old_editor = $editor->id() ? Editor::load($editor->id()) : NULL;
+    if ($old_editor && $old_editor->getEditor() === 'ckeditor') {
+      $enabled_cke4_plugins = $this->getEnabledCkeditor4Plugins($old_editor);
+      [$upgraded_settings, $messages] = $this->createSettingsFromCKEditor4($old_editor->getSettings(), $enabled_cke4_plugins);
+      $editor->setSettings($upgraded_settings);
+      $editor->setImageUploadSettings($old_editor->getImageUploadSettings());
+    }
+
+    // First, add toolbar items based on HTML tags.
+    // NOTE: Helper updates $editor->settings by reference and returns info for the message.
+    $result = $this->addToolbarItemsToMatchHtmlTagsInFormat($text_format, $editor);
+    if ($result !== NULL) {
+      [$enabling_message_content, $unsupported] = $result;
+      if ($enabling_message_content) {
+        $messages[] = $this->t('The following plugins were enabled to support tags that are allowed by this text format: %enabling_message_content.',
+          ['%enabling_message_content' => $enabling_message_content],
+        );
+      }
+      unset($unsupported['*']);
+      // Warn user about unsupported tags.
+      if (!empty($unsupported)) {
+        $unsupported_string = implode(' ', HTMLRestrictionsUtilities::toReadableElements($unsupported));
+        $this->addTagsToSourceEditing($editor, $unsupported_string);
+        $messages[] = $this->t("The following tags were permitted by this format's filter configuration, but no plugin was available that supports them. To ensure the tags remain supported by this text format, the following were added to the Source Editing plugin's <em>Manually editable HTML tags</em>: @unsupported_string.", [
+          '@unsupported_string' => $unsupported_string,
+        ]);
+      }
+    }
+
+    // Next, add more toolbar items to try to also support attributes on already
+    // supported tags that have still unsupported attributes.
+    $result = $this->addToolbarItemsToMatchHtmlAttributesInFormat($text_format, $editor);
+    if ($result !== NULL) {
+      [$enabled_for_attributes_message_content, $missing_attributes] = $result;
+      if ($enabled_for_attributes_message_content) {
+        $messages[] = $this->t('The following plugins were enabled to support specific attributes that are allowed by this text format: %enabled_for_attributes_message_content.',
+          ['%enabled_for_attributes_message_content' => $enabled_for_attributes_message_content],
+        );
+      }
+      // Warn user about supported tags but missing attributes.
+      if ($missing_attributes) {
+        $this->addTagsToSourceEditing($editor, $missing_attributes);
+        $messages[] = $this->t("This format's HTML filters includes plugins that support the following tags, but not some of their attributes. To ensure these attributes remain supported by this text format, the following were added to the Source Editing plugin's <em>Manually editable HTML tags</em>: @missing_attributes.", [
+          '@missing_attributes' => $missing_attributes,
+        ]);
+      }
+    }
+
+    // Finally: for all enabled plugins, find the ones that are configurable,
+    // and add their default settings. For enabled plugins with element subsets,
+    // compute the appropriate settings to achieve the subset that matches the
+    // original text format restrictions.
+    $this->addDefaultSettingsForEnabledConfigurablePlugins($editor);
+    $this->computeSubsetSettingForEnabledPluginsWithSubsets($editor, $text_format);
+
+    return [$editor, $messages];
+  }
+
+  private function addTagsToSourceEditing(EditorInterface $editor, string $tags): array {
+    $messages = [];
+    $settings = $editor->getSettings();
+    if (!isset($settings['toolbar']['items']) || !in_array('sourceEditing', $settings['toolbar']['items'])) {
+      $messages[] = $this->t('The <em>Source Editing</em> plugin was enabled to support tags and/or attributes that are not explicitly supported by any available CKEditor 5 plugins.');
+      $settings['toolbar']['items'][] = 'sourceEditing';
+    }
+    $source_editing_allowed_tags = $settings['plugins']['ckeditor5_sourceEditing']['allowed_tags'] ?? [];
+    $settings['plugins']['ckeditor5_sourceEditing']['allowed_tags'] = array_merge($source_editing_allowed_tags, HTMLRestrictionsUtilities::allowedElementsStringToPluginElementsArray($tags));
+    $editor->setSettings($settings);
+    return $messages;
+  }
+
+  /**
+   * Creates equivalent CKEditor 5 settings from CKEditor 4 settings.
+   *
+   * @param array $ckeditor4_settings
+   *   The value for "settings" in a Text Editor config entity configured to use
+   *   CKEditor 4.
+   * @param string[] $enabled_ckeditor4_plugins
+   *   The list of enabled CKEditor 4 plugins: their settings will be mapped to
+   *   the CKEditor 5 equivalents, if they have any.
+   *
+   * @return array
+   *   An array with two values:
+   *   1. An equivalent value for CKEditor 5.
+   *   2. Messages explaining upgrade path issues.
+   *
+   * @throws \LogicException
+   *   Thrown when an upgrade plugin is attempting to generate plugin settings
+   *   for a CKEditor 4 plugin upgrade path that have already been generated.
+   */
+  private function createSettingsFromCKEditor4(array $ckeditor4_settings, array $enabled_ckeditor4_plugins): array {
+    $settings = [
+      'toolbar' => [
+        'items' => [],
+      ],
+      'plugins' => [],
+    ];
+    $messages = [];
+
+    // First: toolbar items.
+    // @see \Drupal\ckeditor\CKEditorPluginButtonsInterface
+    foreach ($ckeditor4_settings['toolbar']['rows'] as $row) {
+      foreach ($row as $group) {
+        $some_added = FALSE;
+        foreach ($group['items'] as $cke4_button) {
+          try {
+            $equivalent = $this->upgradePluginManager->mapCKEditor4ToolbarButtonToCKEditor5ToolbarItem($cke4_button);
+          }
+          catch (\OutOfBoundsException $e) {
+            $messages[] = $this->t('The CKEditor 4 button %button does not have a known upgrade path. If it allowed editing markup, then you can do so now through the Source Editing functionality.', [
+              '%button' => $cke4_button,
+            ]);
+            continue;
+          }
+          if ($equivalent) {
+            $settings['toolbar']['items'][] = $equivalent;
+            $some_added = TRUE;
+          }
+        }
+        // Add a CKEditor 5 toolbar group separator for every group.
+        if ($some_added) {
+          $settings['toolbar']['items'][] = '|';
+        }
+      }
+    }
+    // Remove the trailing CKEditor 5 toolbar group separator.
+    array_pop($settings['toolbar']['items']);
+    // Strip the CKEditor 4 buttons without a CKEditor 5 equivalent.
+    $settings['toolbar']['items'] = array_filter($settings['toolbar']['items']);
+
+    // Second: plugin settings.
+    // @see \Drupal\ckeditor\CKEditorPluginConfigurableInterface
+    $enabled_ckeditor4_plugins_with_settings = array_intersect_key($ckeditor4_settings['plugins'], array_flip($enabled_ckeditor4_plugins));
+    foreach ($enabled_ckeditor4_plugins_with_settings as $cke4_plugin_id => $cke4_plugin_settings) {
+      try {
+        $cke5_plugin_settings = $this->upgradePluginManager->mapCKEditor4SettingsToCKEditor5Configuration($cke4_plugin_id, $cke4_plugin_settings);
+        if ($cke5_plugin_settings === NULL) {
+          continue;
+        }
+        assert(count($cke5_plugin_settings) === 1);
+        $cke5_plugin_id = array_keys($cke5_plugin_settings)[0];
+        if (isset($settings['plugins'][$cke5_plugin_id])) {
+          throw new \LogicException(sprintf('The %s plugin settings have already been upgraded. Only a single @CKEditor4To5Upgrade is allowed to migrate the settings for a particular CKEditor 4 plugin.', $cke5_plugin_id));
+        }
+        $settings['plugins'] += $cke5_plugin_settings;
+      }
+      catch (\OutOfBoundsException $e) {
+        $messages[] = $this->t('The %cke4_plugin_id plugin settings do not have a known upgrade path.', [
+          '%cke4_plugin_id' => $cke4_plugin_id,
+        ]);
+        continue;
+      }
+    }
+
+    return [$settings, $messages];
+  }
+
+  /**
+   * Gets all enabled CKEditor 4 plugins.
+   *
+   * @param \Drupal\editor\EditorInterface $editor
+   *   A text editor config entity configured to use CKEditor 4.
+   *
+   * @return string[]
+   *   The enabled CKEditor 4 plugin IDs.
+   */
+  protected function getEnabledCkeditor4Plugins(EditorInterface $editor): array {
+    assert($editor->getEditor() === 'ckeditor');
+
+    // This is largely copied from the CKEditor 4 plugin manager, because it
+    // unfortunately does not provide the API this needs.
+    // @see \Drupal\ckeditor\CKEditorPluginManager::getEnabledPluginFiles()
+    $plugins = array_keys($this->cke4PluginManager->getDefinitions());
+    $toolbar_buttons = $this->cke4PluginManager->getEnabledButtons($editor);
+    $enabled_plugins = [];
+    $additional_plugins = [];
+    foreach ($plugins as $plugin_id) {
+      $plugin = $this->cke4PluginManager->createInstance($plugin_id);
+
+      $enabled = FALSE;
+      // Enable this plugin if it provides a button that has been enabled.
+      if ($plugin instanceof CKEditorPluginButtonsInterface) {
+        $plugin_buttons = array_keys($plugin->getButtons());
+        $enabled = (count(array_intersect($toolbar_buttons, $plugin_buttons)) > 0);
+      }
+      // Otherwise enable this plugin if it declares itself as enabled.
+      if (!$enabled && $plugin instanceof CKEditorPluginContextualInterface) {
+        $enabled = $plugin->isEnabled($editor);
+      }
+
+      if ($enabled) {
+        $enabled_plugins[] = $plugin_id;
+        // Check if this plugin has dependencies that also need to be enabled.
+        $additional_plugins = array_merge($additional_plugins, array_diff($plugin->getDependencies($editor), $additional_plugins));
+      }
+    }
+
+    // Add the list of dependent plugins.
+    foreach ($additional_plugins as $plugin_id) {
+      $enabled_plugins[$plugin_id] = $plugin_id;
+    }
+
+    return $enabled_plugins;
+  }
+
+  /**
+   * Adds CKEditor 5 toolbar items to match the format's HTML tags.
+   *
+   * @param \Drupal\filter\FilterFormatInterface $format
+   *   The text format for which to compute smart default settings.
+   * @param \Drupal\editor\EditorInterface $editor
+   *   The text editor config entity to update.
+   *
+   * @return array|null
+   *   NULL when nothing happened, otherwise an array with two values:
+   *   1. a description (for use in a message) of which CKEditor 5 plugins were
+   *      enabled to match the HTML tags allowed by the text format.
+   *   2. the unsupported tags
+   */
+  private function addToolbarItemsToMatchHtmlTagsInFormat(FilterFormatInterface $format, EditorInterface $editor): ?array {
+    $html_restrictions_needed_elements = $format->getHtmlRestrictions();
+    if ($html_restrictions_needed_elements === FALSE) {
+      return NULL;
+    }
+
+    // Add all buttons until we match or exceed the current text format
+    // restrictions.
+    $enabled_plugins = array_keys($this->pluginManager->getEnabledDefinitions($editor));
+    $provided_elements = $this->pluginManager->getProvidedElements($enabled_plugins);
+
+    // Automatically add the plugins that add support for the tags we want this
+    // CKEditor 5 instance to support.
+    $missing_tags = array_diff(array_keys($html_restrictions_needed_elements['allowed']), array_keys($provided_elements));
+    $to_add = [];
+    $unsupported = [];
+    foreach ($missing_tags as $tag) {
+      $id = $this->pluginManager->findPluginSupportingElement($tag);
+      if ($id) {
+        $to_add[$tag] = $id;
+      }
+      // Add any tag that isn't the "star protector" tag to the array of
+      // unsupported tags.
+      // @see the $star_protector variable in
+      // \Drupal\filter\Plugin\Filter\FilterHtml::getHTMLRestrictions
+      // @todo this can be an 'else' with no conditions after
+      // https://www.drupal.org/project/drupal/issues/3226368
+      elseif ($tag !== '__zqh6vxfbk3cg__') {
+        $unsupported[$tag] = $html_restrictions_needed_elements['allowed'][$tag];
+      }
+    }
+
+    $enabling_message_content = '';
+    $enabling_message_prep = [];
+    foreach ($to_add as $tag_name => $plugin_name) {
+      $enabling_message_prep[$plugin_name][] = $tag_name;
+    }
+
+    $editor_settings_to_update = $editor->getSettings();
+    $new_group_created = FALSE;
+    foreach ($enabling_message_prep as $plugin_id => $tag_names) {
+      $label = $this->pluginManager->getDefinition($plugin_id)->label();
+      $tags = array_reduce($tag_names, function ($carry, $item) {
+        return $carry . "<$item>";
+      });
+      $enabling_message_content .= "$label (for tags: $tags) ";
+      $definition = $this->pluginManager->getDefinition($plugin_id);
+      if ($definition->hasToolbarItems()) {
+        if (!$new_group_created) {
+          $editor_settings_to_update['toolbar']['items'][] = '|';
+          $new_group_created = TRUE;
+        }
+        $editor_settings_to_update['toolbar']['items'] = array_merge($editor_settings_to_update['toolbar']['items'], array_keys($definition->getToolbarItems()));
+      }
+    }
+
+    if (!empty($enabling_message_content)) {
+      $editor->setSettings($editor_settings_to_update);
+      $enabling_message_content = substr($enabling_message_content, 0, -1);
+      return [$enabling_message_content, $unsupported];
+    }
+    else {
+      return [NULL, $unsupported];
+    }
+  }
+
+  /**
+   * Adds CKEditor 5 toolbar items to match the format's HTML attributes.
+   *
+   * @param \Drupal\filter\FilterFormatInterface $format
+   *   The text format for which to compute smart default settings.
+   * @param \Drupal\editor\EditorInterface $editor
+   *   The text editor config entity to update.
+   *
+   * @return array|null
+   *   NULL when nothing happened, otherwise an array with two values:
+   *   1. a description (for use in a message) of which CKEditor 5 plugins were
+   *      enabled to match the HTML attributes allowed by the text format.
+   *   2. the unsupported attributes
+   */
+  private function addToolbarItemsToMatchHtmlAttributesInFormat(FilterFormatInterface $format, EditorInterface $editor): ?array {
+    $html_restrictions_needed_elements = $format->getHtmlRestrictions();
+    if ($html_restrictions_needed_elements === FALSE) {
+      return NULL;
+    }
+
+    $enabled_plugins = array_keys($this->pluginManager->getEnabledDefinitions($editor));
+    $provided_elements = $this->pluginManager->getProvidedElements($enabled_plugins);
+    $missing = HTMLRestrictionsUtilities::diffAllowedElements($editor->getFilterFormat()->getHtmlRestrictions()['allowed'], $provided_elements);
+    $supported_tags_with_unsupported_attributes = array_intersect_key($missing, $provided_elements);
+    $supported_tags_with_unsupported_attributes = array_filter($supported_tags_with_unsupported_attributes, function ($tag_config) {
+      return is_array($tag_config);
+    });
+
+    if (!empty($supported_tags_with_unsupported_attributes)) {
+      // This will be populated with plugins that aren't currently enabled, but
+      // provide element configuration that include attributes. I.e. they are
+      // the only plugins that can potentially address unsupported attributes
+      // in supported tags.
+      $disabled_plugins_with_attribute_config = [];
+      $all_plugins_definitions = $this->pluginManager->getDefinitions();
+      foreach ($all_plugins_definitions as $plugin_id => $definition) {
+        // Only proceed if the plugin has configured elements and the plugin
+        // does not have conditions. In the future we could add support for
+        // automatically enabling filters, but for now we assume that the filter
+        // configuration cannot be modified.
+        if (!in_array($plugin_id, $enabled_plugins) && !$definition->hasConditions()) {
+          $plugins_provided_elements = $this->pluginManager->getProvidedElements([$plugin_id], NULL, TRUE);
+          if (!empty($plugins_provided_elements)) {
+            // Filter elements that do not have attribute configuration.
+            $elements_with_attribute_config = array_filter($plugins_provided_elements, function ($elements) {
+              return $elements !== FALSE;
+            });
+            if (!empty($elements_with_attribute_config)) {
+              foreach ($elements_with_attribute_config as $tag_name => $attribute_config) {
+                // If the 'tag' is a wildcard, add the attribute config to
+                // all qualifying tags.
+                if (substr($tag_name, 0, 1) === '$') {
+                  // An array of all the tags that match the wildcard value.
+                  $wildcard_tags = HTMLRestrictionsUtilities::getWildcardTags($tag_name);
+
+                  // Matching wildcard tags that are also tags that have
+                  // attribute config that is not yet supported.
+                  $wildcard_tags_in_config_missing_attributes = array_intersect_key(array_flip($wildcard_tags), $supported_tags_with_unsupported_attributes);
+                  foreach (array_keys($wildcard_tags_in_config_missing_attributes) as $wildcard_provided_tag) {
+                    $elements_with_attribute_config[$wildcard_provided_tag] = $attribute_config;
+                  }
+
+                  // Remove the wildcard 'tag', as the tags it represents are
+                  // now accounted for.
+                  unset($elements_with_attribute_config[$tag_name]);
+                }
+              }
+              $disabled_plugins_with_attribute_config[$plugin_id] = $elements_with_attribute_config;
+            }
+          }
+        }
+      }
+
+      // This will contain plugins to be enabled if they provide support for the
+      // not-yet-supported attributes.
+      $plugins_to_enable_to_support_attribute_config = [];
+      foreach ($supported_tags_with_unsupported_attributes as $tag_name => $attributes_config) {
+        foreach ($attributes_config as $attribute_name => $attribute_config) {
+          // This means the existing config must allow all values of the
+          // attribute.
+          if ($attribute_config === TRUE) {
+            // See if there is a disabled plugin that will provide full use of
+            // the attribute for a given tag.
+            foreach ($disabled_plugins_with_attribute_config as $disabled_plugin_id => $disabled_plugin_elements_config) {
+              if (isset($disabled_plugin_elements_config[$tag_name][$attribute_name]) && $disabled_plugin_elements_config[$tag_name][$attribute_name] === TRUE) {
+                // Add this to the 'plugins to enable' array. Setting this value
+                // to TRUE instead of an array indicates to the message system
+                // that the attribute is allowed for the tag with any value.
+                $plugins_to_enable_to_support_attribute_config[$disabled_plugin_id][$attribute_name][$tag_name] = TRUE;
+
+                // This attribute can be removed from the list of unsupported
+                // attributes for the tag.
+                unset($supported_tags_with_unsupported_attributes[$tag_name][$attribute_name]);
+              }
+            }
+          }
+          else {
+            // This condition is reached if the existing configuration has the
+            // attribute value restricted to specific values.
+            // @todo currently, this will enable plugins that allow ALL values
+            //   for an attribute. This means the attribute+value is now allowed
+            //   but additional attribute values are permitted as well. This may
+            //   need to be more selective
+            //   https://www.drupal.org/project/ckeditor5/issues/3231328.
+            foreach ($attribute_config as $allowed_attribute_value => $noop) {
+              foreach ($disabled_plugins_with_attribute_config as $disabled_plugin_id => $disabled_plugin_config) {
+                if (isset($disabled_plugin_config[$tag_name][$attribute_name])) {
+                  if ($disabled_plugin_config[$tag_name][$attribute_name] === TRUE) {
+                    unset($supported_tags_with_unsupported_attributes[$tag_name][$attribute_name]);
+                    $plugins_to_enable_to_support_attribute_config[$disabled_plugin_id][$attribute_name][$tag_name] = TRUE;
+                  }
+                  elseif (is_array($disabled_plugin_config[$tag_name][$attribute_name])) {
+                    foreach ($disabled_plugin_config[$tag_name][$attribute_name] as $disabled_plugin_attribute_name => $disabled_plugin_allowed_value) {
+                      if ($disabled_plugin_attribute_name === $allowed_attribute_value) {
+                        unset($supported_tags_with_unsupported_attributes[$tag_name][$attribute_name][$allowed_attribute_value]);
+                        if (empty($supported_tags_with_unsupported_attributes[$tag_name][$attribute_name])) {
+                          unset($supported_tags_with_unsupported_attributes[$tag_name][$attribute_name]);
+                        }
+                        $plugins_to_enable_to_support_attribute_config[$disabled_plugin_id][$attribute_name][$tag_name][] = $allowed_attribute_value;
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+
+      $supported_tags_with_unsupported_attributes = array_filter($supported_tags_with_unsupported_attributes);
+      $missing_attributes = implode(' ', HTMLRestrictionsUtilities::toReadableElements($supported_tags_with_unsupported_attributes));
+
+      // If additional plugins need to be enable to support attribute config,
+      // loop through the list to enable the plugins and build a UI message that
+      // will convey this plugin-enabling to the user.
+      if (!empty($plugins_to_enable_to_support_attribute_config)) {
+        $enabled_for_attributes_message_content = '';
+        $editor_settings_to_update = $editor->getSettings();
+        foreach ($plugins_to_enable_to_support_attribute_config as $plugin_id => $reason_why_enabled) {
+          $plugin_definition = $this->pluginManager->getDefinition($plugin_id);
+          $label = $plugin_definition->label();
+          if ($plugin_definition->hasToolbarItems()) {
+            $editor_settings_to_update['toolbar']['items'] = array_merge($editor_settings_to_update['toolbar']['items'], array_keys($plugin_definition->getToolbarItems()));
+            foreach ($reason_why_enabled as $attribute_name => $attribute_config) {
+              $enabled_for_attributes_message_content .= "$label (";
+              foreach ($attribute_config as $tag_name => $attribute_value_config) {
+                $enabled_for_attributes_message_content .= " for tag: <$tag_name> to support: $attribute_name";
+                if (is_array($attribute_value_config)) {
+                  $enabled_for_attributes_message_content .= " with value(s): ";
+                  foreach ($attribute_value_config as $allowed_value) {
+                    $enabled_for_attributes_message_content .= " $allowed_value,";
+                  }
+                  $enabled_for_attributes_message_content = substr($enabled_for_attributes_message_content, 0, -1) . '), ';
+                }
+              }
+            }
+          }
+        }
+        $editor->setSettings($editor_settings_to_update);
+        // Some plugins enabled, maybe some missing attributes.
+        return [
+          substr($enabled_for_attributes_message_content, 0, -2),
+          $missing_attributes,
+        ];
+      }
+      else {
+        // No plugins enabled, maybe some missing attributes.
+        return [
+          NULL,
+          $missing_attributes,
+        ];
+      }
+    }
+    else {
+      return NULL;
+    }
+  }
+
+  /**
+   * Adds default settings for all enabled CKEditor 5 plugins.
+   *
+   * @param \Drupal\editor\EditorInterface $editor
+   *   The text editor config entity to update.
+   */
+  private function addDefaultSettingsForEnabledConfigurablePlugins(EditorInterface $editor): void {
+    $settings = $editor->getSettings();
+    $update_settings = FALSE;
+    $enabled_definitions = $this->pluginManager->getEnabledDefinitions($editor);
+    $configurable_definitions = array_filter($enabled_definitions, function (CKEditor5PluginDefinition $definition): bool {
+      return $definition->isConfigurable();
+    });
+
+    foreach ($configurable_definitions as $plugin_name => $definition) {
+      // Skip image upload as its configuration is stored in a discrete
+      // property of the $editor object, not its settings. Also skip any plugin
+      // that already has configuration data as default values are not needed.
+      if ($plugin_name === 'ckeditor5_imageUpload' || isset($settings['plugins'][$plugin_name])) {
+        continue;
+      }
+      $update_settings = TRUE;
+      $settings['plugins'][$plugin_name] = $this->pluginManager->getPlugin($plugin_name, NULL)->defaultConfiguration();
+    }
+
+    if ($update_settings) {
+      $editor->setSettings($settings);
+    }
+  }
+
+  /**
+   * Computes configuration for all enabled CKEditor 5 plugins with subsets.
+   *
+   * @param \Drupal\editor\EditorInterface $editor
+   *   The text editor config entity to update.
+   * @param \Drupal\filter\FilterFormatInterface $text_format
+   *   The text format for which to compute smart default settings.
+   */
+  private function computeSubsetSettingForEnabledPluginsWithSubsets(EditorInterface $editor, FilterFormatInterface $text_format): void {
+    $settings = $editor->getSettings();
+    $update_settings = FALSE;
+    $enabled_definitions = $this->pluginManager->getEnabledDefinitions($editor);
+    $configurable_subset_definitions = array_filter($enabled_definitions, function (CKEditor5PluginDefinition $definition): bool {
+      return is_a($definition->getClass(), CKEditor5PluginElementsSubsetInterface::class, TRUE);
+    });
+
+    foreach ($configurable_subset_definitions as $plugin_name => $definition) {
+      // Skip Source Editing as that has already been configured.
+      if ($plugin_name === 'ckeditor5_sourceEditing') {
+        continue;
+      }
+
+      try {
+        $subset_configuration = $this->upgradePluginManager->computeCKEditor5PluginSubsetConfiguration($plugin_name, $text_format);
+      }
+      catch (\OutOfBoundsException $e) {
+        $messages[] = $this->t('The CKEditor 5 plugin %button has a configurable subset of elements, but does not have a known upgrade path to configure that subset to match your text format. Hence it is now using its default configuration.', [
+          '%plugin' => $plugin_name,
+        ]);
+        continue;
+      }
+      if ($subset_configuration) {
+        $update_settings = TRUE;
+        assert(isset($settings['plugins'][$plugin_name]));
+        $default_configuration = $settings['plugins'][$plugin_name];
+        // The subset configuration's key-value pairs must override those of the
+        // default configuration.
+        $settings['plugins'][$plugin_name] = $subset_configuration + $default_configuration;
+      }
+    }
+
+    if ($update_settings) {
+      $editor->setSettings($settings);
+    }
+  }
+
+}
diff --git a/core/modules/ckeditor5/templates/ckeditor5-settings-toolbar.html.twig b/core/modules/ckeditor5/templates/ckeditor5-settings-toolbar.html.twig
new file mode 100644
index 000000000000..6ab2cf974e4d
--- /dev/null
+++ b/core/modules/ckeditor5/templates/ckeditor5-settings-toolbar.html.twig
@@ -0,0 +1,26 @@
+{#
+/**
+ * @file
+ * Default theme implementation to display CKEditor 5 toolbar settings.
+ *
+ * @internal
+ *   This template is internal because it's used for rendering the CKEditor 5
+ *   toolbar settings UI in the Drupal admin UI. The toolbar settings UI is
+ *   internal, and utilizing or overriding it outside of core usages is not
+ *   supported because the UI can change at any point.
+ */
+#}
+{% apply spaceless %}
+  <fieldset aria-labelledby="ckeditor5-toolbar-configuration" aria-describedby="ckeditor5-toolbar-description">
+    <legend id="ckeditor5-toolbar-configuration">{{ 'Toolbar configuration'|t }}</legend>
+    <div class="fieldset-wrapper">
+      <div id="ckeditor5-toolbar-description" class="fieldset-description">
+        {%- trans -%}
+          Move a button into the <em>Active toolbar</em> to enable it, or into the list of <em>Available buttons</em> to disable it. Buttons may be moved with the mouse or keyboard arrow keys.
+        {%- endtrans -%}
+      </div>
+      <div id="ckeditor5-toolbar-app"></div>
+      {{ form }}
+    </div>
+  </fieldset>
+{% endapply %}
diff --git a/core/modules/ckeditor5/tests/modules/ckeditor4to5upgrade_plugin_test/ckeditor4to5upgrade_plugin_test.info.yml b/core/modules/ckeditor5/tests/modules/ckeditor4to5upgrade_plugin_test/ckeditor4to5upgrade_plugin_test.info.yml
new file mode 100644
index 000000000000..d86e9bb5b904
--- /dev/null
+++ b/core/modules/ckeditor5/tests/modules/ckeditor4to5upgrade_plugin_test/ckeditor4to5upgrade_plugin_test.info.yml
@@ -0,0 +1,7 @@
+name: CKEditor 4 to 5 Upgrade plugin Test
+type: module
+description: "Provides test plugins for testing CKEditor 4 to 5 upgrade infrastructure."
+package: Testing
+core_version_requirement: ^9
+dependencies:
+  - ckeditor5:ckeditor5
diff --git a/core/modules/ckeditor5/tests/modules/ckeditor4to5upgrade_plugin_test/ckeditor4to5upgrade_plugin_test.module b/core/modules/ckeditor5/tests/modules/ckeditor4to5upgrade_plugin_test/ckeditor4to5upgrade_plugin_test.module
new file mode 100644
index 000000000000..cb99f7acc400
--- /dev/null
+++ b/core/modules/ckeditor5/tests/modules/ckeditor4to5upgrade_plugin_test/ckeditor4to5upgrade_plugin_test.module
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * @file
+ * Implements hooks for the CKEditor 4 to 5 Upgrade plugin Test module.
+ */
+
+declare(strict_types = 1);
+
+/**
+ * Implements hook_ckeditor4to5upgrade_plugin_info_alter().
+ */
+function ckeditor4to5upgrade_plugin_test_ckeditor4to5upgrade_plugin_info_alter(array &$plugin_definitions): void {
+  switch (\Drupal::state()->get('ckeditor4to5upgrade_plugin_test')) {
+    case 'duplicate_button':
+      $plugin_definitions['foo'] = array_intersect_key($plugin_definitions['core'], ['cke4_buttons' => TRUE]);
+      break;
+
+    case 'duplicate_plugin_settings':
+      $plugin_definitions['foo'] = array_intersect_key($plugin_definitions['core'], ['cke4_plugin_settings' => TRUE]);
+      break;
+
+    case 'duplicate_subset':
+      $plugin_definitions['foo'] = array_intersect_key($plugin_definitions['core'], ['cke5_plugin_elements_subset_configuration' => TRUE]);
+      break;
+
+    case 'lying_button':
+      $plugin_definitions['foo'] = [
+        'cke4_buttons' => ['foo'],
+        'class' => $plugin_definitions['core']['class'],
+      ];
+      break;
+
+    case 'lying_plugin_settings':
+      $plugin_definitions['foo'] = [
+        'cke4_plugin_settings' => ['foo'],
+        'class' => $plugin_definitions['core']['class'],
+      ];
+      break;
+
+    case 'lying_subset':
+      $plugin_definitions['foo'] = [
+        'cke5_plugin_elements_subset_configuration' => ['foo'],
+        'class' => $plugin_definitions['core']['class'],
+      ];
+      break;
+
+    default:
+      throw new \LogicException();
+  }
+}
diff --git a/core/modules/ckeditor5/tests/modules/ckeditor5_definition_supporting_element/ckeditor5_definition_supporting_element.ckeditor5.yml b/core/modules/ckeditor5/tests/modules/ckeditor5_definition_supporting_element/ckeditor5_definition_supporting_element.ckeditor5.yml
new file mode 100644
index 000000000000..0381bb616536
--- /dev/null
+++ b/core/modules/ckeditor5/tests/modules/ckeditor5_definition_supporting_element/ckeditor5_definition_supporting_element.ckeditor5.yml
@@ -0,0 +1,111 @@
+ckeditor5_definition_supporting_element_just_nav:
+  ckeditor5:
+    plugins: []
+  drupal:
+    label: TEST — <nav>
+    elements:
+      - <nav>
+
+ckeditor5_definition_supporting_element_just_article:
+  ckeditor5:
+    plugins: []
+  drupal:
+    label: TEST — <article>
+    elements:
+      - <article>
+
+ckeditor5_definition_supporting_element_article_class:
+  ckeditor5:
+    plugins: []
+  drupal:
+    label: TEST — <article class>
+    elements:
+      - <article class>
+
+ckeditor5_definition_supporting_element_article_class_with_values:
+  ckeditor5:
+    plugins: []
+  drupal:
+    label: TEST — <article class="…">
+    elements:
+      - <article class="this-value that-value">
+
+ckeditor5_definition_supporting_element_just_footer:
+  ckeditor5:
+    plugins: []
+  drupal:
+    label: TEST — <footer>
+    elements:
+      - <footer>
+
+ckeditor5_definition_supporting_element_footer_class:
+  ckeditor5:
+    plugins: []
+  drupal:
+    label: TEST — <footer class>
+    elements:
+      - <footer class>
+
+ckeditor5_definition_supporting_element_just_aside:
+  ckeditor5:
+    plugins: []
+  drupal:
+    label: TEST — <aside>
+    elements:
+      - <aside>
+
+ckeditor5_definition_supporting_element_aside_class_with_values:
+  ckeditor5:
+    plugins: []
+  drupal:
+    label: TEST — <article class="…">
+    elements:
+      - <aside class="this-value that-value">
+
+ckeditor5_definition_supporting_element_main_class:
+  ckeditor5:
+    plugins: []
+  drupal:
+    label: TEST — <main class>
+    elements:
+      - <main class>
+
+ckeditor5_definition_supporting_element_main_class_with_values:
+  ckeditor5:
+    plugins: []
+  drupal:
+    label: TEST — <main class="…">
+    elements:
+      - <main class="this-value that-value">
+
+ckeditor5_definition_supporting_element_figure_one_attrib:
+  ckeditor5:
+    plugins: []
+  drupal:
+    label: TEST — <figure data-one>
+    elements:
+      - <figure data-one>
+
+ckeditor5_definition_supporting_element_figure_two_attrib:
+  ckeditor5:
+    plugins: []
+  drupal:
+    label: TEST — <figure data-one data-two>
+    elements:
+      - <figure data-one data-two>
+
+ckeditor5_definition_supporting_element_dialog_two_attrib:
+  ckeditor5:
+    plugins: []
+  drupal:
+    label: TEST — <dialog data-one data-two>
+    elements:
+      - <dialog data-one data-two>
+
+ckeditor5_definition_supporting_element_dialog_one_attrib:
+  ckeditor5:
+    plugins: []
+  drupal:
+    label: TEST — <dialog data-one>
+    elements:
+      - <dialog data-one>
diff --git a/core/modules/ckeditor5/tests/modules/ckeditor5_definition_supporting_element/ckeditor5_definition_supporting_element.info.yml b/core/modules/ckeditor5/tests/modules/ckeditor5_definition_supporting_element/ckeditor5_definition_supporting_element.info.yml
new file mode 100644
index 000000000000..ed19a8b2df55
--- /dev/null
+++ b/core/modules/ckeditor5/tests/modules/ckeditor5_definition_supporting_element/ckeditor5_definition_supporting_element.info.yml
@@ -0,0 +1,7 @@
+name: CKEditor 5 Definition Supporting Tags Test
+type: module
+description: "Provides test plugins for CKEditor 5 to test finding plugin definitions that support specific tags."
+package: Testing
+core_version_requirement: ^9
+dependencies:
+  - ckeditor5:ckeditor5
diff --git a/core/modules/ckeditor5/tests/modules/ckeditor5_plugin_conditions_test/ckeditor5_plugin_conditions_test.ckeditor5.yml b/core/modules/ckeditor5/tests/modules/ckeditor5_plugin_conditions_test/ckeditor5_plugin_conditions_test.ckeditor5.yml
new file mode 100644
index 000000000000..6319b3c588e0
--- /dev/null
+++ b/core/modules/ckeditor5/tests/modules/ckeditor5_plugin_conditions_test/ckeditor5_plugin_conditions_test.ckeditor5.yml
@@ -0,0 +1,14 @@
+ckeditor5_plugin_conditions_test_plugins_condition:
+  ckeditor5:
+    plugins: {}
+  drupal:
+    label: TEST — Plugins Condition
+    toolbar_items:
+      fooBarConditions:
+        label: Foo Bar (Test Plugins Condition)
+    conditions:
+      plugins:
+        - ckeditor5_heading
+        - ckeditor5_table
+    elements:
+      - <foo>
diff --git a/core/modules/ckeditor5/tests/modules/ckeditor5_plugin_conditions_test/ckeditor5_plugin_conditions_test.info.yml b/core/modules/ckeditor5/tests/modules/ckeditor5_plugin_conditions_test/ckeditor5_plugin_conditions_test.info.yml
new file mode 100644
index 000000000000..3b83a0089ea1
--- /dev/null
+++ b/core/modules/ckeditor5/tests/modules/ckeditor5_plugin_conditions_test/ckeditor5_plugin_conditions_test.info.yml
@@ -0,0 +1,7 @@
+name: CKEditor 5 Plugin Conditions Test
+type: module
+description: "Provides test plugins for CKEditor 5 to test plugin conditions."
+package: Testing
+core_version_requirement: ^9
+dependencies:
+  - ckeditor5:ckeditor5
diff --git a/core/modules/ckeditor5/tests/modules/ckeditor5_plugin_elements_subset/ckeditor5_plugin_elements_subset.ckeditor5.yml b/core/modules/ckeditor5/tests/modules/ckeditor5_plugin_elements_subset/ckeditor5_plugin_elements_subset.ckeditor5.yml
new file mode 100644
index 000000000000..c5218e7e2f5e
--- /dev/null
+++ b/core/modules/ckeditor5/tests/modules/ckeditor5_plugin_elements_subset/ckeditor5_plugin_elements_subset.ckeditor5.yml
@@ -0,0 +1,9 @@
+ckeditor5_plugin_elements_subset_sneakySuperset:
+  ckeditor5:
+    plugins: []
+  drupal:
+    label: Sneaky Superset
+    class: Drupal\ckeditor5_plugin_elements_subset\Plugin\CKEditor5Plugin\SneakySuperset
+    elements:
+      - <foo>
+      - <bar>
diff --git a/core/modules/ckeditor5/tests/modules/ckeditor5_plugin_elements_subset/ckeditor5_plugin_elements_subset.info.yml b/core/modules/ckeditor5/tests/modules/ckeditor5_plugin_elements_subset/ckeditor5_plugin_elements_subset.info.yml
new file mode 100644
index 000000000000..a47112763e43
--- /dev/null
+++ b/core/modules/ckeditor5/tests/modules/ckeditor5_plugin_elements_subset/ckeditor5_plugin_elements_subset.info.yml
@@ -0,0 +1,7 @@
+name: CKEditor 5 Plugin Elements Subset Test
+type: module
+description: "Provides test plugin to test CKEditor5PluginElementsSubsetInterface"
+package: Testing
+core_version_requirement: ^9
+dependencies:
+  - ckeditor5:ckeditor5
diff --git a/core/modules/ckeditor5/tests/modules/ckeditor5_plugin_elements_subset/config/schema/ckeditor5_plugin_elements_subset.schema.yml b/core/modules/ckeditor5/tests/modules/ckeditor5_plugin_elements_subset/config/schema/ckeditor5_plugin_elements_subset.schema.yml
new file mode 100644
index 000000000000..3a861e26a5be
--- /dev/null
+++ b/core/modules/ckeditor5/tests/modules/ckeditor5_plugin_elements_subset/config/schema/ckeditor5_plugin_elements_subset.schema.yml
@@ -0,0 +1,10 @@
+ckeditor5.plugin.ckeditor5_plugin_elements_subset_sneakySuperset:
+  type: mapping
+  label: Sneaky Superset
+  mapping:
+    configured_subset:
+      type: sequence
+      label: 'Allowed Tags'
+      sequence:
+        type: ckeditor5.element
+        label: 'Allowed Tag'
diff --git a/core/modules/ckeditor5/tests/modules/ckeditor5_plugin_elements_subset/src/Plugin/CKEditor5Plugin/SneakySuperset.php b/core/modules/ckeditor5/tests/modules/ckeditor5_plugin_elements_subset/src/Plugin/CKEditor5Plugin/SneakySuperset.php
new file mode 100644
index 000000000000..398758e298af
--- /dev/null
+++ b/core/modules/ckeditor5/tests/modules/ckeditor5_plugin_elements_subset/src/Plugin/CKEditor5Plugin/SneakySuperset.php
@@ -0,0 +1,51 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Drupal\ckeditor5_plugin_elements_subset\Plugin\CKEditor5Plugin;
+
+use Drupal\ckeditor5\Plugin\CKEditor5PluginConfigurableTrait;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginDefault;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginElementsSubsetInterface;
+use Drupal\Core\Form\FormStateInterface;
+
+class SneakySuperset extends CKEditor5PluginDefault implements CKEditor5PluginElementsSubsetInterface {
+
+  use CKEditor5PluginConfigurableTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
+    return [];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function defaultConfiguration() {
+    return [
+      'configured_subset' => [],
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getElementsSubset(): array {
+    return $this->configuration['configured_subset'];
+  }
+
+}
diff --git a/core/modules/ckeditor5/tests/modules/ckeditor5_plugin_elements_test/ckeditor5_plugin_elements_test.ckeditor5.yml b/core/modules/ckeditor5/tests/modules/ckeditor5_plugin_elements_test/ckeditor5_plugin_elements_test.ckeditor5.yml
new file mode 100644
index 000000000000..37a8c85c107c
--- /dev/null
+++ b/core/modules/ckeditor5/tests/modules/ckeditor5_plugin_elements_test/ckeditor5_plugin_elements_test.ckeditor5.yml
@@ -0,0 +1,33 @@
+# cspell:ignore everyblock justblockquote
+ckeditor5_plugin_elements_test_blockquoteCombo:
+  ckeditor5:
+    plugins: []
+  drupal:
+    label: TEST — block quote combo
+    elements:
+      - <blockquote data-justblockquote>
+      - <$block data-everyblock>
+
+ckeditor5_plugin_elements_test_headingsWithOtherAttributes:
+  ckeditor5:
+    plugins: []
+  drupal:
+    label: TEST — headings with other attributes
+    elements:
+      - <h1 data-just-h1>
+      - <h2 class="additional-allowed-class">
+      - <h3 data-just-h3 data-just-h3-limited="i-am-the-only-allowed-value">
+      - <h5 data-just-h5-limited="first-allowed-value second-allowed-value">
+
+ckeditor5_plugin_elements_test_headingsUseClassAnyValue:
+  ckeditor5:
+    plugins: []
+  drupal:
+    label: TEST — headings with any class
+    elements:
+      - <h1 class>
+      - <h2 class>
+      - <h3 class>
+      - <h4 class>
+      - <h5 class>
+      - <h6 class>
diff --git a/core/modules/ckeditor5/tests/modules/ckeditor5_plugin_elements_test/ckeditor5_plugin_elements_test.info.yml b/core/modules/ckeditor5/tests/modules/ckeditor5_plugin_elements_test/ckeditor5_plugin_elements_test.info.yml
new file mode 100644
index 000000000000..aba0fa1edca4
--- /dev/null
+++ b/core/modules/ckeditor5/tests/modules/ckeditor5_plugin_elements_test/ckeditor5_plugin_elements_test.info.yml
@@ -0,0 +1,7 @@
+name: CKEditor 5 Plugin Elements Test
+type: module
+description: "Provides test plugins for CKEditor 5 to test allowed elements parsing."
+package: Testing
+core_version_requirement: ^9
+dependencies:
+  - ckeditor5:ckeditor5
diff --git a/core/modules/ckeditor5/tests/modules/ckeditor5_test/ckeditor5_test.ckeditor5.yml b/core/modules/ckeditor5/tests/modules/ckeditor5_test/ckeditor5_test.ckeditor5.yml
new file mode 100644
index 000000000000..52217fc67447
--- /dev/null
+++ b/core/modules/ckeditor5/tests/modules/ckeditor5_test/ckeditor5_test.ckeditor5.yml
@@ -0,0 +1,16 @@
+# cspell:ignore layercake
+ckeditor5_test_layercake:
+  ckeditor5:
+    plugins: []
+  drupal:
+    label: TEST — Layercake
+    library: ckeditor5_test/layercake
+    toolbar_items:
+      simpleBox:
+        label: Simple Box
+      twoCol:
+        label: Two Col layout
+    elements:
+      - <h1 class>
+      - <div class>
+      - <section class>
diff --git a/core/modules/ckeditor5/tests/modules/ckeditor5_test/ckeditor5_test.info.yml b/core/modules/ckeditor5/tests/modules/ckeditor5_test/ckeditor5_test.info.yml
new file mode 100644
index 000000000000..2e14f048d6d7
--- /dev/null
+++ b/core/modules/ckeditor5/tests/modules/ckeditor5_test/ckeditor5_test.info.yml
@@ -0,0 +1,8 @@
+name: CKEditor 5 Test
+type: module
+description: "Provides test layout and component plugins for CKEditor 5."
+package: Testing
+core_version_requirement: ^9
+dependencies:
+  - drupal:editor
+  - ckeditor5:ckeditor5
diff --git a/core/modules/ckeditor5/tests/modules/ckeditor5_test/ckeditor5_test.libraries.yml b/core/modules/ckeditor5/tests/modules/ckeditor5_test/ckeditor5_test.libraries.yml
new file mode 100644
index 000000000000..af9e5496788c
--- /dev/null
+++ b/core/modules/ckeditor5/tests/modules/ckeditor5_test/ckeditor5_test.libraries.yml
@@ -0,0 +1,10 @@
+# cspell:ignore layercake
+layercake:
+  version: VERSION
+  # In real-world (non-test) scenarios, this would load the CKEditor 5 plugin's built JS.
+  js: {}
+  css:
+    theme:
+      css/layout.css: {}
+  dependencies:
+    - core/ckeditor5
diff --git a/core/modules/ckeditor5/tests/modules/ckeditor5_test/ckeditor5_test.routing.yml b/core/modules/ckeditor5/tests/modules/ckeditor5_test/ckeditor5_test.routing.yml
new file mode 100644
index 000000000000..50d7848984c2
--- /dev/null
+++ b/core/modules/ckeditor5/tests/modules/ckeditor5_test/ckeditor5_test.routing.yml
@@ -0,0 +1,6 @@
+ckeditor5_test.off_canvas:
+  path: '/ckeditor5_test/off_canvas'
+  defaults:
+    _controller: '\Drupal\ckeditor5_test\Controller\CKEditor5OffCanvasTestController::testOffCanvas'
+  requirements:
+    _access: 'TRUE'
diff --git a/core/modules/ckeditor5/tests/modules/ckeditor5_test/css/layout.css b/core/modules/ckeditor5/tests/modules/ckeditor5_test/css/layout.css
new file mode 100644
index 000000000000..91a76da70b0c
--- /dev/null
+++ b/core/modules/ckeditor5/tests/modules/ckeditor5_test/css/layout.css
@@ -0,0 +1,14 @@
+.layout--two-col {
+  display: grid;
+  grid-template-columns: 1fr 1fr;
+}
+
+.simple-box {
+  padding: 0.5rem;
+  background: #ccc;
+}
+
+.simple-box-title,
+.simple-box-description {
+  background: #fff;
+}
diff --git a/core/modules/ckeditor5/tests/modules/ckeditor5_test/src/Controller/CKEditor5OffCanvasTestController.php b/core/modules/ckeditor5/tests/modules/ckeditor5_test/src/Controller/CKEditor5OffCanvasTestController.php
new file mode 100644
index 000000000000..49951f3b3618
--- /dev/null
+++ b/core/modules/ckeditor5/tests/modules/ckeditor5_test/src/Controller/CKEditor5OffCanvasTestController.php
@@ -0,0 +1,35 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\ckeditor5_test\Controller;
+
+use Drupal\Core\Url;
+
+/**
+ * Provides controller for testing CKEditor in off-canvas dialogs.
+ */
+class CKEditor5OffCanvasTestController {
+
+  /**
+   * Returns a link that can open a node add form in an off-canvas dialog.
+   *
+   * @return array
+   *   A render array.
+   */
+  public function testOffCanvas() {
+    $build['link'] = [
+      '#type' => 'link',
+      '#title' => 'Add Node',
+      '#url' => Url::fromRoute('node.add', ['node_type' => 'page']),
+      '#attributes' => [
+        'class' => ['use-ajax'],
+        'data-dialog-type' => 'dialog',
+        'data-dialog-renderer' => 'off_canvas',
+      ],
+    ];
+    $build['#attached']['library'][] = 'core/drupal.dialog.off_canvas';
+    return $build;
+  }
+
+}
diff --git a/core/modules/ckeditor5/tests/src/Functional/ImageUploadAccessTest.php b/core/modules/ckeditor5/tests/src/Functional/ImageUploadAccessTest.php
new file mode 100644
index 000000000000..b6c99ebc1324
--- /dev/null
+++ b/core/modules/ckeditor5/tests/src/Functional/ImageUploadAccessTest.php
@@ -0,0 +1,52 @@
+<?php
+
+namespace Drupal\Tests\ckeditor5\Functional;
+
+/**
+ * Test image upload access.
+ *
+ * @group ckeditor5
+ * @internal
+ */
+class ImageUploadAccessTest extends ImageUploadTest {
+
+  /**
+   * Test access to the CKEditor 5 image upload controller.
+   */
+  public function testCkeditor5ImageUploadRoute() {
+    $this->createBasicFormat();
+    $url = $this->getUploadUrl();
+    $test_image = file_get_contents(current($this->getTestFiles('image'))->uri);
+
+    // With no text editor, expect a 404.
+    $response = $this->uploadRequest($url, $test_image, 'test.jpg');
+    $this->assertSame(404, $response->getStatusCode());
+
+    $editor = $this->createEditorWithUpload([
+      'status' => FALSE,
+      'scheme' => 'public',
+      'directory' => 'inline-images',
+      'max_size' => '',
+      'max_dimensions' => [
+        'width' => 0,
+        'height' => 0,
+      ],
+    ]);
+
+    // Ensure that images cannot be uploaded when image upload is disabled.
+    $response = $this->uploadRequest($url, $test_image, 'test.jpg');
+    $this->assertSame(403, $response->getStatusCode());
+
+    $editor->setImageUploadSettings(['status' => TRUE] + $editor->getImageUploadSettings())
+      ->save();
+    $response = $this->uploadRequest($url, $test_image, 'test.jpg');
+    $this->assertSame(201, $response->getStatusCode());
+
+    // Ensure that users without permissions to the text format cannot upload
+    // images.
+    $this->drupalLogout();
+    $response = $this->uploadRequest($url, $test_image, 'test.jpg');
+    $this->assertSame(403, $response->getStatusCode());
+  }
+
+}
diff --git a/core/modules/ckeditor5/tests/src/Functional/ImageUploadTest.php b/core/modules/ckeditor5/tests/src/Functional/ImageUploadTest.php
new file mode 100644
index 000000000000..bfd749851408
--- /dev/null
+++ b/core/modules/ckeditor5/tests/src/Functional/ImageUploadTest.php
@@ -0,0 +1,256 @@
+<?php
+
+namespace Drupal\Tests\ckeditor5\Functional;
+
+use Drupal\Core\Url;
+use Drupal\editor\Entity\Editor;
+use Drupal\filter\Entity\FilterFormat;
+use Drupal\Tests\BrowserTestBase;
+use Drupal\Tests\ckeditor5\Traits\SynchronizeCsrfTokenSeedTrait;
+use Drupal\Tests\jsonapi\Functional\JsonApiRequestTestTrait;
+use Drupal\Tests\TestFileCreationTrait;
+use Drupal\user\RoleInterface;
+use GuzzleHttp\RequestOptions;
+
+/**
+ * Test image upload.
+ *
+ * @group ckeditor5
+ * @internal
+ */
+class ImageUploadTest extends BrowserTestBase {
+
+  use JsonApiRequestTestTrait;
+  use TestFileCreationTrait;
+  use SynchronizeCsrfTokenSeedTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = [
+    'editor',
+    'filter',
+    'ckeditor5',
+  ];
+
+  /**
+   * A user without any particular permissions to be used in testing.
+   *
+   * @var \Drupal\user\Entity\User
+   */
+  protected $user;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'stark';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp(): void {
+    parent::setUp();
+
+    $this->user = $this->drupalCreateUser();
+    $this->drupalLogin($this->user);
+  }
+
+  /**
+   * Tests using the file upload route with a disallowed extension.
+   */
+  public function testUploadFileExtension() {
+    $this->createBasicFormat();
+    $this->createEditorWithUpload([
+      'status' => TRUE,
+      'scheme' => 'public',
+      'directory' => 'inline-images',
+      'max_size' => '',
+      'max_dimensions' => [
+        'width' => 0,
+        'height' => 0,
+      ],
+    ]);
+
+    $url = $this->getUploadUrl();
+    $image_file = file_get_contents(current($this->getTestFiles('image'))->uri);
+    $non_image_file = file_get_contents(current($this->getTestFiles('php'))->uri);
+    $response = $this->uploadRequest($url, $non_image_file, 'test.php');
+    $this->assertSame(422, $response->getStatusCode());
+
+    $response = $this->uploadRequest($url, $image_file, 'test.jpg');
+    $this->assertSame(201, $response->getStatusCode());
+  }
+
+  /**
+   * Tests using the file upload route with a file size larger than allowed.
+   */
+  public function testFileUploadLargerFileSize() {
+    $this->createBasicFormat();
+    $this->createEditorWithUpload([
+      'status' => TRUE,
+      'scheme' => 'public',
+      'directory' => 'inline-images',
+      'max_size' => 30000,
+      'max_dimensions' => [
+        'width' => 0,
+        'height' => 0,
+      ],
+    ]);
+
+    $url = $this->getUploadUrl();
+    $images = $this->getTestFiles('image');
+    $large_image = $this->getTestImageByStat($images, 'size', function ($size) {
+      return $size > 30000;
+    });
+    $small_image = $this->getTestImageByStat($images, 'size', function ($size) {
+      return $size < 30000;
+    });
+
+    $response = $this->uploadRequest($url, file_get_contents($large_image->uri), 'large.jpg');
+    $this->assertSame(422, $response->getStatusCode());
+
+    $response = $this->uploadRequest($url, file_get_contents($small_image->uri), 'small.jpg');
+    $this->assertSame(201, $response->getStatusCode());
+  }
+
+  /**
+   * Test that lock is removed after a failed validation.
+   *
+   * @see https://www.drupal.org/project/drupal/issues/3184974
+   */
+  public function testLockAfterFailedValidation() {
+    $this->createBasicFormat();
+    $this->createEditorWithUpload([
+      'status' => TRUE,
+      'scheme' => 'public',
+      'directory' => 'inline-images',
+      'max_size' => 30000,
+      'max_dimensions' => [
+        'width' => 0,
+        'height' => 0,
+      ],
+    ]);
+
+    $url = $this->getUploadUrl();
+    $images = $this->getTestFiles('image');
+    $large_image = $this->getTestImageByStat($images, 'size', function ($size) {
+      return $size > 30000;
+    });
+    $small_image = $this->getTestImageByStat($images, 'size', function ($size) {
+      return $size < 30000;
+    });
+    $response = $this->uploadRequest($url, file_get_contents($large_image->uri), 'same.jpg');
+    $this->assertSame(422, $response->getStatusCode());
+
+    $response = $this->uploadRequest($url, file_get_contents($small_image->uri), 'same.jpg');
+    $this->assertSame(201, $response->getStatusCode());
+  }
+
+  /**
+   * Make upload request to a controller.
+   *
+   * @param \Drupal\Core\Url $url
+   *   The URL for the request.
+   * @param string $file_contents
+   *   File contents.
+   * @param string $file_name
+   *   Name of the file.
+   *
+   * @return \Psr\Http\Message\ResponseInterface
+   *   The response.
+   */
+  protected function uploadRequest(Url $url, string $file_contents, string $file_name) {
+    $request_options[RequestOptions::HEADERS] = [
+      'Accept' => 'application/json',
+    ];
+    $request_options[RequestOptions::MULTIPART] = [
+      [
+        'name' => 'upload',
+        'filename' => $file_name,
+        'contents' => $file_contents,
+      ],
+    ];
+
+    return $this->request('POST', $url, $request_options);
+  }
+
+  /**
+   * Provides the image upload url.
+   *
+   * @return \Drupal\Core\Url
+   *   The upload image url for the basic_html format.
+   */
+  protected function getUploadUrl() {
+    $token = $this->container->get('csrf_token')->get('ckeditor5/upload-image/basic_html');
+    return Url::fromRoute('ckeditor5.upload_image', ['editor' => 'basic_html'], ['query' => ['token' => $token]]);
+  }
+
+  /**
+   * Create a basic_html text format for the editor to reference.
+   *
+   * @throws \Drupal\Core\Entity\EntityStorageException
+   */
+  protected function createBasicFormat() {
+    $basic_html_format = FilterFormat::create([
+      'format' => 'basic_html',
+      'name' => 'Basic HTML',
+      'weight' => 1,
+      'filters' => [
+        'filter_html_escape' => ['status' => 1],
+      ],
+      'roles' => [RoleInterface::AUTHENTICATED_ID],
+    ]);
+    $basic_html_format->save();
+  }
+
+  /**
+   * Create an editor entity with image_upload config.
+   *
+   * @param array $upload_config
+   *   The editor image_upload config.
+   *
+   * @return \Drupal\Core\Entity\EntityBase|\Drupal\Core\Entity\EntityInterface
+   *   The text editor entity.
+   *
+   * @throws \Drupal\Core\Entity\EntityStorageException
+   */
+  protected function createEditorWithUpload(array $upload_config) {
+    $editor = Editor::create([
+      'editor' => 'ckeditor5',
+      'format' => 'basic_html',
+      'settings' => [
+        'toolbar' => [
+          'items' => [
+            'uploadImage',
+          ],
+        ],
+        'plugins' => [],
+      ],
+      'image_upload' => $upload_config,
+    ]);
+    $editor->save();
+
+    return $editor;
+  }
+
+  /**
+   * Return the first image matching $condition.
+   *
+   * @param array $images
+   *   Images created with getTestFiles().
+   * @param string $stat
+   *   A key in the array returned from stat().
+   * @param callable $condition
+   *   A function to compare a value of the image file.
+   *
+   * @return object|bool
+   *   Objects with 'uri', 'filename', and 'name' properties.
+   */
+  protected function getTestImageByStat(array $images, string $stat, callable $condition) {
+    return current(array_filter($images, function ($image) use ($condition, $stat) {
+      $stats = stat($image->uri);
+      return $condition($stats[$stat]);
+    }));
+  }
+
+}
diff --git a/core/modules/ckeditor5/tests/src/Functional/MediaImageTest.php b/core/modules/ckeditor5/tests/src/Functional/MediaImageTest.php
new file mode 100644
index 000000000000..d66937cfa0a5
--- /dev/null
+++ b/core/modules/ckeditor5/tests/src/Functional/MediaImageTest.php
@@ -0,0 +1,188 @@
+<?php
+
+namespace Drupal\Tests\ckeditor5\Functional;
+
+use Drupal\ckeditor5\Plugin\Editor\CKEditor5;
+use Drupal\editor\Entity\Editor;
+use Drupal\file\Entity\File;
+use Drupal\filter\Entity\FilterFormat;
+use Drupal\media\Entity\Media;
+use Drupal\Tests\BrowserTestBase;
+use Drupal\Tests\ckeditor5\Traits\SynchronizeCsrfTokenSeedTrait;
+use Drupal\Tests\media\Traits\MediaTypeCreationTrait;
+use Drupal\Tests\TestFileCreationTrait;
+use Drupal\user\RoleInterface;
+use Symfony\Component\Validator\ConstraintViolation;
+
+/**
+ * Tests that image media types are determined correctly.
+ *
+ * @group ckeditor5
+ * @internal
+ */
+class MediaImageTest extends BrowserTestBase {
+
+  use TestFileCreationTrait;
+  use MediaTypeCreationTrait;
+  use SynchronizeCsrfTokenSeedTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'stark';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = [
+    'system',
+    'user',
+    'filter',
+    'editor',
+    'ckeditor5',
+    'media',
+  ];
+
+  /**
+   * The sample image media entity to use for testing.
+   *
+   * @var \Drupal\media\MediaInterface
+   */
+  protected $mediaImage;
+
+  /**
+   * The sample file media entity to use for testing.
+   *
+   * @var \Drupal\media\MediaInterface
+   */
+  protected $mediaFile;
+
+  /**
+   * The editor instance to use for testing.
+   *
+   * @var \Drupal\editor\Entity\Editor
+   */
+  protected $editor;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp(): void {
+    parent::setUp();
+
+    $filtered_html_format = FilterFormat::create([
+      'format' => 'filtered_html',
+      'name' => 'Filtered HTML',
+      'weight' => 0,
+      'filters' => [
+        'filter_html' => [
+          'id' => 'filter_html',
+          'status' => TRUE,
+          'weight' => -10,
+          'settings' => [
+            'allowed_html' => "<p> <br> <drupal-media data-entity-type data-entity-uuid alt>",
+            'filter_html_help' => TRUE,
+            'filter_html_nofollow' => TRUE,
+          ],
+        ],
+        'media_embed' => ['status' => TRUE],
+      ],
+      'roles' => [RoleInterface::AUTHENTICATED_ID],
+    ]);
+    $filtered_html_format->save();
+    $this->editor = Editor::create([
+      'format' => 'filtered_html',
+      'editor' => 'ckeditor5',
+      'settings' => [
+        'toolbar' => [
+          'items' => [],
+        ],
+      ],
+    ]);
+    $this->editor->save();
+    $this->assertSame([], array_map(
+      function (ConstraintViolation $v) {
+        return (string) $v->getMessage();
+      },
+      iterator_to_array(CKEditor5::validatePair($this->editor, $filtered_html_format))
+    ));
+
+    // Create a sample media entity to be embedded.
+    $this->createMediaType('image', ['id' => 'image']);
+    File::create([
+      'uri' => $this->getTestFiles('image')[0]->uri,
+    ])->save();
+    $this->mediaImage = Media::create([
+      'bundle' => 'image',
+      'name' => 'Screaming hairy armadillo',
+      'field_media_image' => [
+        [
+          'target_id' => 1,
+          'alt' => 'default alt',
+          'title' => 'default title',
+        ],
+      ],
+    ]);
+    $this->mediaImage->save();
+
+    $this->createMediaType('file', ['id' => 'file']);
+    File::create([
+      'uri' => $this->getTestFiles('text')[0]->uri,
+    ])->save();
+    $this->mediaFile = Media::create([
+      'bundle' => 'file',
+      'name' => 'Information about screaming hairy armadillo',
+      'field_media_file' => [
+        [
+          'target_id' => 2,
+        ],
+      ],
+    ]);
+    $this->mediaFile->save();
+
+    $this->adminUser = $this->drupalCreateUser([
+      'use text format filtered_html',
+    ]);
+    $this->drupalLogin($this->adminUser);
+  }
+
+  /**
+   * Tests that media entity with image field is recognized.
+   */
+  public function testIsMediaImage() {
+    $path = '/ckeditor5/filtered_html/is-media-image';
+    $token = $this->container->get('csrf_token')->get(ltrim($path, '/'));
+    $uuid = $this->mediaImage->uuid();
+
+    $this->drupalGet($path, ['query' => ['token' => $token]]);
+    $this->assertSession()->statusCodeEquals(400);
+
+    $this->drupalGet($path, ['query' => ['uuid' => $uuid, 'token' => $token]]);
+    $this->assertSession()->statusCodeEquals(200);
+    $this->assertSame(json_encode(TRUE), $this->getSession()->getPage()->getContent());
+
+    $this->drupalGet($path, ['query' => ['uuid' => $this->mediaFile->uuid(), 'token' => $token]]);
+    $this->assertSession()->statusCodeEquals(200);
+    $this->assertSame(json_encode(FALSE), $this->getSession()->getPage()->getContent());
+
+    // Ensure that unpublished media returns 403.
+    $this->mediaImage->setUnpublished()->save();
+    $this->drupalGet($path, ['query' => ['uuid' => $uuid, 'token' => $token]]);
+    $this->assertSession()->statusCodeEquals(403);
+
+    // Ensure that users that don't have access to the filter format receive
+    // either 404 or 403.
+    $this->drupalLogout();
+    $token = $this->container->get('csrf_token')->get(ltrim($path, '/'));
+    $this->drupalGet($path, ['token' => $token]);
+    $this->assertSession()->statusCodeEquals(400);
+
+    $this->drupalGet($path, ['query' => ['uuid' => $uuid, 'token' => $token]]);
+    $this->assertSession()->statusCodeEquals(403);
+
+    $this->mediaImage->setPublished()->save();
+    $this->drupalGet($path, ['query' => ['uuid' => $uuid, 'token' => $token]]);
+    $this->assertSession()->statusCodeEquals(403);
+  }
+
+}
diff --git a/core/modules/ckeditor5/tests/src/FunctionalJavascript/AdminUiTest.php b/core/modules/ckeditor5/tests/src/FunctionalJavascript/AdminUiTest.php
new file mode 100644
index 000000000000..d2c01635e6b9
--- /dev/null
+++ b/core/modules/ckeditor5/tests/src/FunctionalJavascript/AdminUiTest.php
@@ -0,0 +1,173 @@
+<?php
+
+namespace Drupal\Tests\ckeditor5\FunctionalJavascript;
+
+/**
+ * Tests for CKEditor 5 in the admin UI.
+ *
+ * @group ckeditor5
+ * @internal
+ */
+class AdminUiTest extends CKEditor5TestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = [
+    'media_library',
+    'ckeditor',
+  ];
+
+  /**
+   * Confirm settings only trigger AJAX when select value is CKEditor 5.
+   */
+  public function testSettingsOnlyFireAjaxWithCkeditor5() {
+    $page = $this->getSession()->getPage();
+    $assert_session = $this->assertSession();
+    $this->addNewTextFormat($page, $assert_session);
+    $this->addNewTextFormat($page, $assert_session, 'ckeditor');
+
+    $this->drupalGet('admin/config/content/formats/manage/ckeditor5');
+    $number_ajax_instances_before = $this->getSession()->evaluateScript('Drupal.ajax.instances.length');
+
+    // Enable media embed to trigger an AJAX rebuild.
+    $this->assertTrue($page->hasUncheckedField('filters[media_embed][status]'));
+    $page->checkField('filters[media_embed][status]');
+    $this->assertNotEmpty($assert_session->waitForElement('css', '.ajax-progress-throbber'));
+    $assert_session->assertWaitOnAjaxRequest();
+    $assert_session->responseContains('Media types selectable in the Media Library');
+    $assert_session->assertWaitOnAjaxRequest();
+    $number_ajax_instances_after = $this->getSession()->evaluateScript('Drupal.ajax.instances.length');
+
+    // After the rebuild, there should be more AJAX instances.
+    $this->assertGreaterThan($number_ajax_instances_before, $number_ajax_instances_after);
+
+    // Perform the same steps as above with CKEditor, and confirm AJAX callbacks
+    // are not triggered on settings changes.
+    $this->drupalGet('admin/config/content/formats/manage/ckeditor');
+    $number_ajax_instances_before = $this->getSession()->evaluateScript('Drupal.ajax.instances.length');
+
+    // Enable media embed to confirm a format not using CKEditor 5 will not
+    // trigger an AJAX rebuild.
+    $this->assertTrue($page->hasUncheckedField('filters[media_embed][status]'));
+    $page->checkField('filters[media_embed][status]');
+    $this->assertEmpty($assert_session->waitForElement('css', '.ajax-progress-throbber'));
+    $assert_session->assertWaitOnAjaxRequest();
+    $assert_session->responseContains('Media types selectable in the Media Library');
+    $assert_session->assertWaitOnAjaxRequest();
+
+    $number_ajax_instances_after = $this->getSession()->evaluateScript('Drupal.ajax.instances.length');
+    $this->assertSame($number_ajax_instances_before, $number_ajax_instances_after);
+
+    // Confirm that AJAX updates happen when attempting to switch to CKEditor 5,
+    // even if prevented from doing so by validation.
+    $this->drupalGet('admin/config/content/formats/add');
+    $page->fillField('name', 'trigger validator');
+    $assert_session->waitForText('Machine name');
+    $page->checkField('roles[authenticated]');
+
+    // Enable a filter that is incompatible with CKEditor 5, so validation is
+    // triggered when attempting to switch.
+    $number_ajax_instances_before = $this->getSession()->evaluateScript('Drupal.ajax.instances.length');
+    $this->assertTrue($page->hasUncheckedField('filters[filter_autop][status]'));
+    $page->checkField('filters[filter_autop][status]');
+    $this->assertEmpty($assert_session->waitForElement('css', '.ajax-progress-throbber'));
+    $assert_session->assertWaitOnAjaxRequest();
+    $number_ajax_instances_after = $this->getSession()->evaluateScript('Drupal.ajax.instances.length');
+    $this->assertSame($number_ajax_instances_before, $number_ajax_instances_after);
+
+    $page->selectFieldOption('editor[editor]', 'ckeditor5');
+    $assert_session->assertWaitOnAjaxRequest();
+
+    // The presence of this validation error message confirms the AJAX callback
+    // was invoked.
+    $assert_session->pageTextContains('CKEditor 5 only works with HTML-based text formats');
+
+    // Disable the incompatible filter. This should trigger another AJAX rebuild
+    // which will include the removal of the validation error as the issue has
+    // been corrected.
+    $this->assertTrue($page->hasCheckedField('filters[filter_autop][status]'));
+    $page->uncheckField('filters[filter_autop][status]');
+    $this->assertNotEmpty($assert_session->waitForElement('css', '.ajax-progress-throbber'));
+    $assert_session->assertWaitOnAjaxRequest();
+    $assert_session->pageTextNotContains('CKEditor 5 only works with HTML-based text formats');
+  }
+
+  /**
+   * CKEditor5's filter UI modifications should not break it for other editors.
+   */
+  public function testUnavailableFiltersHiddenWhenSwitching() {
+    $page = $this->getSession()->getPage();
+    $assert_session = $this->assertSession();
+    $this->createNewTextFormat($page, $assert_session, 'ckeditor');
+    $assert_session->assertWaitOnAjaxRequest();
+    $assert_session->pageTextNotContains('Filter settings');
+
+    // Switching to CKEditor 5 should keep the filter settings hidden.
+    $page->selectFieldOption('editor[editor]', 'ckeditor5');
+    $assert_session->assertWaitOnAjaxRequest();
+    $assert_session->pageTextNotContains('Filter settings');
+  }
+
+  /**
+   * Test that filter settings are only visible when the filter is enabled.
+   */
+  public function testFilterCheckboxesToggleSettings() {
+    $page = $this->getSession()->getPage();
+    $assert_session = $this->assertSession();
+
+    $this->createNewTextFormat($page, $assert_session);
+
+    $assert_session->assertWaitOnAjaxRequest();
+
+    $media_tab = $page->find('css', '[href^="#edit-filters-media-embed-settings"]');
+    $this->assertFalse($media_tab->isVisible(), 'Media filter settings should not be present because media filter is not enabled');
+
+    $this->assertTrue($page->hasUncheckedField('filters[media_embed][status]'));
+    $page->checkField('filters[media_embed][status]');
+    $assert_session->assertWaitOnAjaxRequest();
+
+    $media_tab = $assert_session->waitForElementVisible('css', '[href^="#edit-filters-media-embed-settings"]');
+    $this->assertTrue($media_tab->isVisible(), 'Media settings should appear when media filter enabled');
+
+    $page->uncheckField('filters[media_embed][status]');
+    $assert_session->assertWaitOnAjaxRequest();
+
+    $media_tab = $page->find('css', '[href^="#edit-filters-media-embed-settings"]');
+    $this->assertFalse($media_tab->isVisible(), 'Media settings should be removed when media filter disabled');
+  }
+
+  /**
+   * Ensure CKEditor 5 admin UI's real-time validation errors do not accumulate.
+   */
+  public function testMessagesDoNotAccumulate(): void {
+    $page = $this->getSession()->getPage();
+    $assert_session = $this->assertSession();
+
+    $this->addNewTextFormat($page, $assert_session);
+    $this->drupalGet('admin/config/content/formats/manage/ckeditor5');
+
+    $find_validation_error_messages = function () use ($page): array {
+      return $page->findAll('css', '[role=alert]:contains("CKEditor 5 only works with HTML-based text formats.")');
+    };
+
+    // No validation errors when we start.
+    $this->assertCount(0, $find_validation_error_messages());
+
+    // Enable a filter which is not compatible with CKEditor 5, to trigger a
+    // validation error.
+    $page->checkField('Convert URLs into links');
+    $assert_session->assertWaitOnAjaxRequest();
+    $this->assertCount(1, $find_validation_error_messages());
+
+    // Disable it: validation messages should be gone.
+    $page->uncheckField('Convert URLs into links');
+    $assert_session->assertWaitOnAjaxRequest();
+
+    // Re-enable it: validation messages should be back.
+    $page->checkField('Convert URLs into links');
+    $assert_session->assertWaitOnAjaxRequest();
+    $this->assertCount(1, $find_validation_error_messages());
+  }
+
+}
diff --git a/core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5AllowedTagsTest.php b/core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5AllowedTagsTest.php
new file mode 100644
index 000000000000..5c06e07a853d
--- /dev/null
+++ b/core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5AllowedTagsTest.php
@@ -0,0 +1,521 @@
+<?php
+
+namespace Drupal\Tests\ckeditor5\FunctionalJavascript;
+
+use Drupal\editor\Entity\Editor;
+use Drupal\filter\Entity\FilterFormat;
+use Symfony\Component\Yaml\Yaml;
+
+// cspell:ignore esque imageUpload nofilter noeditor sourceediting Editing's
+
+/**
+ * Tests for CKEditor5.
+ *
+ * @group ckeditor5
+ * @internal
+ */
+class CKEditor5AllowedTagsTest extends CKEditor5TestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = [
+    'node',
+    'ckeditor',
+    'ckeditor5',
+    'media',
+    'media_library',
+  ];
+
+  /**
+   * The default CKEditor 5 allowed elements.
+   *
+   * @var string
+   */
+  protected $allowedElements = '<br> <p> <h2> <h3> <h4> <h5> <h6> <strong> <em>';
+
+  /**
+   * The element that must be allowed when media embed is enabled.
+   *
+   * @var string
+   */
+  protected $mediaElement = '<drupal-media data-entity-type data-entity-uuid alt>';
+
+  /**
+   * The default allowed elements when updating a non-CKEditor 5 editor.
+   *
+   * @var string
+   */
+  protected $defaultElementsWhenUpdatingNotCkeditor5 = '<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id> <img src alt data-entity-type data-entity-uuid>';
+
+  /**
+   * Test enabling CKEditor 5 in a way that triggers validation.
+   */
+  public function testEnablingToVersion5Validation() {
+    $page = $this->getSession()->getPage();
+    $assert_session = $this->assertSession();
+
+    $this->createNewTextFormat($page, $assert_session, 'ckeditor');
+    $page->selectFieldOption('editor[editor]', 'ckeditor');
+    $assert_session->assertWaitOnAjaxRequest();
+    $page->checkField('filters[filter_html][status]');
+    $assert_session->assertWaitOnAjaxRequest();
+    $page->selectFieldOption('editor[editor]', 'ckeditor5');
+    $assert_session->assertWaitOnAjaxRequest();
+    $assert_session->pageTextContains('CKEditor 5 needs at least the <p> and <br> tags to be allowed to be able to function. They are not allowed by the "Limit allowed HTML tags and correct faulty HTML" (filter_html) filter.');
+
+    // Add the tags that must be included in the html filter for CKEditor 5
+    // defaults.
+    $allowed_html_field = $assert_session->fieldExists('filters[filter_html][settings][allowed_html]');
+    $allowed_html_field->setValue('<p> <br>');
+
+    // Confirm there are no longer any warnings.
+    $assert_session->waitForElementRemoved('css', '[data-drupal-messages] [role="alert"]');
+
+    $page->pressButton('update-ckeditor5-allowed-tags');
+    $assert_session->assertWaitOnAjaxRequest();
+    $this->saveNewTextFormat($page, $assert_session);
+  }
+
+  /**
+   * Tests that when image uploads are enabled in CKEditor 4, they remain in 5.
+   */
+  public function testImageUploadsRemainEnabled(): void {
+    FilterFormat::create([
+      'format' => 'cke4_image_uploads',
+      'name' => 'CKEditor 4, image uploads',
+    ])->save();
+    Editor::create([
+      'format' => 'cke4_image_uploads',
+      'editor' => 'ckeditor',
+      'settings' => [
+        'toolbar' => [
+          'rows' => [
+            0 => [
+              [
+                'name' => 'Media',
+                'items' => [
+                  'DrupalImage',
+                ],
+              ],
+            ],
+          ],
+        ],
+        'plugins' => [],
+      ],
+      'image_upload' => [
+        'status' => TRUE,
+        'scheme' => 'public',
+        'directory' => 'inline-images',
+        'max_size' => '',
+        'max_dimensions' => [
+          'width' => 0,
+          'height' => 0,
+        ],
+      ],
+    ])->save();
+
+    $page = $this->getSession()->getPage();
+    $assert_session = $this->assertSession();
+
+    // Assert that image uploads are enabled initially.
+    $this->drupalGet('admin/config/content/formats/manage/cke4_image_uploads');
+    $this->assertTrue($page->hasCheckedField('Enable image uploads'));
+
+    // Switch the text format to CKEditor 5.
+    $page->selectFieldOption('editor[editor]', 'ckeditor5');
+    $assert_session->assertWaitOnAjaxRequest();
+
+    // Assert that image uploads are still enabled.
+    $this->assertTrue($page->hasCheckedField('Enable image uploads'));
+  }
+
+  /**
+   * Confirm that switching to CKEditor 5 from another editor updates tags.
+   */
+  public function testSwitchToVersion5() {
+    $page = $this->getSession()->getPage();
+    $assert_session = $this->assertSession();
+
+    $this->createNewTextFormat($page, $assert_session, 'ckeditor');
+    $assert_session->assertWaitOnAjaxRequest();
+
+    // Enable the HTML filter.
+    $this->assertTrue($page->hasUncheckedField('filters[filter_html][status]'));
+    $page->checkField('filters[filter_html][status]');
+    $assert_session->assertWaitOnAjaxRequest();
+
+    // Confirm the allowed HTML tags are the defaults for non-Ckeditor5 editors.
+    $this->assertHtmlEsqueFieldValueEquals('filters[filter_html][settings][allowed_html]', $this->defaultElementsWhenUpdatingNotCkeditor5);
+
+    $this->saveNewTextFormat($page, $assert_session);
+    $assert_session->pageTextContains('Added text format ckeditor');
+
+    // Return to the config form to confirm that switching text editors on
+    // existing formats will properly switch allowed tags.
+    $this->drupalGet('admin/config/content/formats/manage/ckeditor');
+    $assert_session->assertWaitOnAjaxRequest();
+    $this->assertHtmlEsqueFieldValueEquals('filters[filter_html][settings][allowed_html]', $this->defaultElementsWhenUpdatingNotCkeditor5);
+
+    $page->selectFieldOption('editor[editor]', 'ckeditor5');
+    $assert_session->assertWaitOnAjaxRequest();
+
+    $this->assertTrue($page->find('css', '[name="editor[editor]"]')->hasClass('error'));
+    $this->assertNotEmpty($assert_session->waitForElement('css', '[data-ckeditor5-allowed-tags-info]'));
+    $this->assertHtmlEsqueFieldValueEquals('filters[filter_html][settings][allowed_html]', $this->defaultElementsWhenUpdatingNotCkeditor5);
+
+    $allowed_html_field = $assert_session->fieldExists('filters[filter_html][settings][allowed_html]');
+    $allowed_html_field->setValue('<p> <br>');
+
+    $page->pressButton('update-ckeditor5-allowed-tags');
+    $assert_session->assertWaitOnAjaxRequest();
+    $this->assertFalse($page->find('css', '[name="editor[editor]"]')->hasClass('error'));
+    $page->pressButton('Save configuration');
+
+    $assert_session->pageTextContains('The Image upload toolbar item requires image uploads to be enabled.');
+    $page->clickLink('Image Upload');
+    $assert_session->waitForText('Enable image uploads');
+    $this->assertTrue($page->hasUncheckedField('editor[settings][plugins][ckeditor5_imageUpload][status]'));
+    $page->checkField('editor[settings][plugins][ckeditor5_imageUpload][status]');
+    $assert_session->assertWaitOnAjaxRequest();
+    $page->pressButton('Save configuration');
+
+    $assert_session->pageTextContains('The text format ckeditor has been updated');
+  }
+
+  /**
+   * Tests the language config form.
+   */
+  public function testLanguageConfigForm() {
+    $page = $this->getSession()->getPage();
+    $assert_session = $this->assertSession();
+
+    $this->createNewTextFormat($page, $assert_session);
+    $assert_session->assertWaitOnAjaxRequest();
+
+    // The language plugin config form should not be present.
+    $assert_session->elementNotExists('css', '[data-drupal-selector="edit-editor-settings-plugins-ckeditor5-language"]');
+
+    $this->assertNotEmpty($assert_session->waitForElement('css', '.ckeditor5-toolbar-item-textPartLanguage'));
+    $this->triggerKeyUp('.ckeditor5-toolbar-item-textPartLanguage', 'ArrowDown');
+    $assert_session->assertWaitOnAjaxRequest();
+
+    // The language plugin config form should now be present.
+    $assert_session->elementExists('css', '[data-drupal-selector="edit-editor-settings-plugins-ckeditor5-language"]');
+  }
+
+  /**
+   * Tests that the img tag is added after enabling image uploads.
+   */
+  public function testImgAddedViaUploadPlugin() {
+    $page = $this->getSession()->getPage();
+    $assert_session = $this->assertSession();
+
+    $this->createNewTextFormat($page, $assert_session);
+    $assert_session->assertWaitOnAjaxRequest();
+
+    $allowed_html_field = $assert_session->fieldExists('filters[filter_html][settings][allowed_html]');
+    $this->assertTrue($allowed_html_field->hasAttribute('readonly'));
+
+    // Allowed tags are currently the default, with no <img>.
+    $this->assertEquals($this->allowedElements, $allowed_html_field->getValue());
+
+    // The image upload settings form should not be present.
+    $assert_session->elementNotExists('css', '[data-drupal-selector="edit-editor-settings-plugins-ckeditor5-imageupload"]');
+
+    $this->assertNotEmpty($assert_session->waitForElement('css', '.ckeditor5-toolbar-item-uploadImage'));
+    $this->triggerKeyUp('.ckeditor5-toolbar-item-uploadImage', 'ArrowDown');
+    $assert_session->assertWaitOnAjaxRequest();
+
+    // The image upload settings form should now be present.
+    $assert_session->elementExists('css', '[data-drupal-selector="edit-editor-settings-plugins-ckeditor5-imageupload"]');
+
+    $this->assertNotEmpty($assert_session->waitForElement('css', '.ckeditor5-toolbar-active .ckeditor5-toolbar-item-uploadImage'));
+
+    // The image upload plugin is enabled, but <img> not yet allowed.
+    $this->assertEquals($this->allowedElements, $allowed_html_field->getValue());
+
+    $page->clickLink('Image Upload');
+    $assert_session->waitForText('Enable image uploads');
+    $this->assertTrue($page->hasUncheckedField('editor[settings][plugins][ckeditor5_imageUpload][status]'));
+    $page->checkField('editor[settings][plugins][ckeditor5_imageUpload][status]');
+    $assert_session->assertWaitOnAjaxRequest();
+
+    // Enabling image uploads adds <img> with several attributes to allowed
+    // tags.
+    $this->assertEquals($this->allowedElements . ' <img src alt data-entity-uuid data-entity-type height width>', $allowed_html_field->getValue());
+
+    // Also enabling the caption filter will add the data-caption attribute to
+    // <img>.
+    $this->assertTrue($page->hasUncheckedField('filters[filter_caption][status]'));
+    $page->checkField('filters[filter_caption][status]');
+    $assert_session->assertWaitOnAjaxRequest();
+    $this->assertEquals($this->allowedElements . ' <img src alt data-entity-uuid data-entity-type height width data-caption>', $allowed_html_field->getValue());
+
+    // Also enabling the alignment filter will add the data-align attribute to
+    // <img>.
+    $this->assertTrue($page->hasUncheckedField('filters[filter_align][status]'));
+    $page->checkField('filters[filter_align][status]');
+    $assert_session->assertWaitOnAjaxRequest();
+    $this->assertEquals($this->allowedElements . ' <img src alt data-entity-uuid data-entity-type height width data-caption data-align>', $allowed_html_field->getValue());
+
+    // Disable image upload.
+    $page->clickLink('Image Upload');
+    $assert_session->waitForText('Enable image uploads');
+    $this->assertTrue($page->hasCheckedField('editor[settings][plugins][ckeditor5_imageUpload][status]'));
+    $page->uncheckField('editor[settings][plugins][ckeditor5_imageUpload][status]');
+    $assert_session->assertWaitOnAjaxRequest();
+
+    // Confirm <img> is no longer an allowed tag, once image upload disabled.
+    $this->assertEquals($this->allowedElements, $allowed_html_field->getValue());
+  }
+
+  /**
+   * Test filter_html allowed tags.
+   */
+  public function testAllowedTags() {
+    $page = $this->getSession()->getPage();
+    $assert_session = $this->assertSession();
+
+    $this->createNewTextFormat($page, $assert_session);
+    $assert_session->assertWaitOnAjaxRequest();
+
+    // Confirm the "allowed tags" field is  read only, and the value
+    // matches the tags required by CKEditor.
+    // Allowed HTML field is readonly and its wrapper has a form-disabled class.
+    $this->assertNotEmpty($assert_session->waitForElement('css', '.js-form-item-filters-filter-html-settings-allowed-html.form-disabled'));
+    $allowed_html_field = $assert_session->fieldExists('filters[filter_html][settings][allowed_html]');
+    $this->assertTrue($allowed_html_field->hasAttribute('readonly'));
+    $this->assertSame($this->allowedElements, $allowed_html_field->getValue());
+    $this->saveNewTextFormat($page, $assert_session);
+
+    $assert_session->pageTextContains('Added text format ckeditor5');
+    $assert_session->pageTextContains('Text formats and editors');
+
+    // Confirm the filter config was updated with the correct allowed tags.
+    $this->assertSame($this->allowedElements, FilterFormat::load('ckeditor5')->filters('filter_html')->getConfiguration()['settings']['allowed_html']);
+
+    $page->find('css', '[data-drupal-selector="edit-formats-ckeditor5"]')->clickLink('Configure');
+    $assert_session->assertWaitOnAjaxRequest();
+
+    // Add the block quote plugin to the CKEditor 5 toolbar.
+    $this->assertNotEmpty($assert_session->waitForElement('css', '.ckeditor5-toolbar-item-blockQuote'));
+    $this->triggerKeyUp('.ckeditor5-toolbar-item-blockQuote', 'ArrowDown');
+    $assert_session->assertWaitOnAjaxRequest();
+
+    $allowed_with_blockquote = $this->allowedElements . ' <blockquote>';
+    $assert_session->fieldExists('filters[filter_html][settings][allowed_html]');
+    $this->assertHtmlEsqueFieldValueEquals('filters[filter_html][settings][allowed_html]', $allowed_with_blockquote);
+
+    $page->pressButton('Save configuration');
+    $assert_session->pageTextContains('The text format ckeditor5 has been updated.');
+
+    // Flush caches so the updated config can be checked.
+    drupal_flush_all_caches();
+
+    // Confirm that the tags required by the newly-added plugins were correctly
+    // saved.
+    $this->assertSame($allowed_with_blockquote, FilterFormat::load('ckeditor5')->filters('filter_html')->getConfiguration()['settings']['allowed_html']);
+
+    $page->find('css', '[data-drupal-selector="edit-formats-ckeditor5"]')->clickLink('Configure');
+
+    // And for good measure, confirm the correct tags are in the form field when
+    // returning to the form.
+    $this->assertHtmlEsqueFieldValueEquals('filters[filter_html][settings][allowed_html]', $allowed_with_blockquote);
+
+    // Add the source editing plugin to the CKEditor 5 toolbar.
+    $this->assertNotEmpty($assert_session->waitForElement('css', '.ckeditor5-toolbar-item-sourceEditing'));
+    $this->triggerKeyUp('.ckeditor5-toolbar-item-sourceEditing', 'ArrowDown');
+    $assert_session->assertWaitOnAjaxRequest();
+
+    // Updating Source Editing's editable tags should automatically update
+    // filter_html to include those additional tags.
+    $assert_session->waitForText('Source editing');
+    $page->find('css', '[href^="#edit-editor-settings-plugins-ckeditor5-sourceediting"]')->click();
+    $assert_session->assertWaitOnAjaxRequest();
+    $assert_session->waitForText('Manually editable HTML tags');
+    $source_edit_tags_field = $assert_session->fieldExists('editor[settings][plugins][ckeditor5_sourceEditing][allowed_tags]');
+    $source_edit_tags_field->setValue('<aside>');
+    $assert_session->assertWaitOnAjaxRequest();
+
+    $this->assertHtmlEsqueFieldValueEquals('filters[filter_html][settings][allowed_html]', '<br> <p> <h2> <h3> <h4> <h5> <h6> <aside> <strong> <em> <blockquote>');
+    $allowed_html_field = $assert_session->fieldExists('filters[filter_html][settings][allowed_html]');
+    $this->assertTrue($allowed_html_field->hasAttribute('readonly'));
+
+    // Adding tags to Source Editing's editable tags that are already supported
+    // by enabled CKEditor 5 plugins must trigger a validation error, and that
+    // error must be associated with the correct form item.
+    $source_edit_tags_field->setValue('<aside><strong>');
+    $assert_session->waitForText('The following tag(s) are already supported by enabled plugins and should not be added to the Source Editing "Manually editable HTML tags" field: Bold (<strong>)');
+    $this->assertTrue($page->find('css', '[href^="#edit-editor-settings-plugins-ckeditor5-sourceediting"]')->getParent()->hasClass('is-selected'));
+    $this->assertSame('true', $page->findField('editor[settings][plugins][ckeditor5_sourceEditing][allowed_tags]')->getAttribute('aria-invalid'));
+    $this->assertTrue($allowed_html_field->hasAttribute('readonly'));
+
+    // The same validation error appears when saving the form regardless of the
+    // immediate AJAX validation error above.
+    $page->pressButton('Save configuration');
+    $assert_session->pageTextContains('The following tag(s) are already supported by enabled plugins and should not be added to the Source Editing "Manually editable HTML tags" field: Bold (<strong>)');
+    $this->assertTrue($page->find('css', '[href^="#edit-editor-settings-plugins-ckeditor5-sourceediting"]')->getParent()->hasClass('is-selected'));
+    $this->assertSame('true', $page->findField('editor[settings][plugins][ckeditor5_sourceEditing][allowed_tags]')->getAttribute('aria-invalid'));
+    $assert_session->pageTextNotContains('The text format ckeditor5 has been updated');
+
+    // Wait for the "Source editing" vertical tab to appear, remove the already
+    // supported tags and re-save. Now the text format should save successfully.
+    $assert_session->waitForText('Source editing');
+    $page->find('css', '[href^="#edit-editor-settings-plugins-ckeditor5-sourceediting"]')->click();
+    $assert_session->pageTextContains('Manually editable HTML tags');
+    $source_edit_tags_field = $assert_session->fieldExists('editor[settings][plugins][ckeditor5_sourceEditing][allowed_tags]');
+    $source_edit_tags_field->setValue('<aside>');
+    $assert_session->assertWaitOnAjaxRequest();
+    $page->pressButton('Save configuration');
+    $assert_session->pageTextContains('The text format ckeditor5 has been updated');
+    $assert_session->pageTextNotContains('The following tag(s) are already supported by enabled plugins and should not be added to the Source Editing "Manually editable HTML tags" field: Bold (<strong>)');
+
+    // Ensure that CKEditor can be initialized with Source Editing.
+    // @see https://www.drupal.org/i/3231427
+    $this->drupalGet('node/add');
+    $this->assertNotEmpty($assert_session->waitForElement('css', '.ck-editor'));
+  }
+
+  /**
+   * Test that <drupal-media> is added to allowed tags when media embed enabled.
+   */
+  public function testMediaElementAllowedTags() {
+    $page = $this->getSession()->getPage();
+    $assert_session = $this->assertSession();
+
+    $this->createNewTextFormat($page, $assert_session);
+
+    // Allowed HTML field is readonly and its wrapper has a form-disabled class.
+    $this->assertNotEmpty($assert_session->waitForElement('css', '.js-form-item-filters-filter-html-settings-allowed-html.form-disabled'));
+    $allowed_html_field = $assert_session->fieldExists('filters[filter_html][settings][allowed_html]');
+    $this->assertTrue($allowed_html_field->hasAttribute('readonly'));
+
+    // Allowed tags are currently the default, with no <drupal-media>.
+    $this->assertEquals($this->allowedElements, $allowed_html_field->getValue());
+
+    // Enable media embed.
+    $this->assertTrue($page->hasUncheckedField('filters[media_embed][status]'));
+    $page->checkField('filters[media_embed][status]');
+    $assert_session->assertWaitOnAjaxRequest();
+    $assert_session->responseContains('Media types selectable in the Media Library');
+
+    $allowed_with_media = $this->allowedElements . ' ' . $this->mediaElement;
+    $assert_session->responseContains('Media types selectable in the Media Library');
+    $this->assertHtmlEsqueFieldValueEquals('filters[filter_html][settings][allowed_html]', $allowed_with_media);
+    $this->saveNewTextFormat($page, $assert_session);
+    $assert_session->pageTextContains('Added text format ckeditor5.');
+
+    // Confirm <drupal-media> was added to allowed tags on save, as a result of
+    // enabling the media embed filter.
+    $this->assertSame($allowed_with_media, FilterFormat::load('ckeditor5')->filters('filter_html')->getConfiguration()['settings']['allowed_html']);
+
+    $page->find('css', '[data-drupal-selector="edit-formats-ckeditor5"]')->clickLink('Configure');
+
+    // Confirm that <drupal-media> is now included in the "Allowed tags" form
+    // field.
+    $this->assertHtmlEsqueFieldValueEquals('filters[filter_html][settings][allowed_html]', $allowed_with_media);
+
+    // Disable media embed.
+    $this->assertTrue($page->hasCheckedField('filters[media_embed][status]'));
+    $page->uncheckField('filters[media_embed][status]');
+    $assert_session->assertWaitOnAjaxRequest();
+
+    // Confirm allowed tags no longer has <drupal-media>.
+    $this->assertHtmlEsqueFieldValueEquals('filters[filter_html][settings][allowed_html]', $this->allowedElements);
+  }
+
+  /**
+   * Tests the presence of the IE warning when CKEditor 5 is selected.
+   */
+  public function testInternetExplorerWarning() {
+    $page = $this->getSession()->getPage();
+    $assert_session = $this->assertSession();
+    $warning_text = 'CKEditor 5 is not compatible with Internet Explorer 11. Fields using CKEditor 5 will still be editable but without the benefits of CKEditor.';
+    $this->createNewTextFormat($page, $assert_session);
+    $assert_session->waitForText($warning_text);
+    $page->selectFieldOption('editor[editor]', 'None');
+    $this->getSession()->getDriver()->executeScript("document.querySelector('#drupal-live-announce').innerHTML = ''");
+    $assert_session->assertNoElementAfterWait('css', '.messages--warning');
+    $assert_session->pageTextNotContains($warning_text);
+  }
+
+  /**
+   * Tests full HTML text format.
+   */
+  public function testFullHtml() {
+    FilterFormat::create(
+      Yaml::parseFile('core/profiles/standard/config/install/filter.format.full_html.yml')
+    )->save();
+    FilterFormat::create(
+      Yaml::parseFile('core/profiles/standard/config/install/filter.format.basic_html.yml')
+    )->save();
+
+    $page = $this->getSession()->getPage();
+    $assert_session = $this->assertSession();
+
+    // Add a node with text rendered via the Plain Text format.
+    $this->drupalGet('node/add');
+    $page->fillField('title[0][value]', 'My test content');
+    $page->fillField('body[0][value]', '<p><a style="color:#ff0000;" foo="bar" hreflang="en" href="https://example.com"><abbr title="National Aeronautics and Space Administration">NASA</abbr> is an acronym.</a></p>');
+    $page->pressButton('Save');
+
+    // Configure Full HTML text format to use CKEditor 5.
+    $this->drupalGet('admin/config/content/formats/manage/full_html');
+    $page->checkField('roles[authenticated]');
+    $page->selectFieldOption('editor[editor]', 'ckeditor5');
+    $assert_session->assertWaitOnAjaxRequest();
+    $page->pressButton('Save configuration');
+    $this->assertTrue($assert_session->waitForText('The text format Full HTML has been updated.'));
+
+    // Change the node's text format to Full HTML.
+    $this->drupalGet('node/1/edit');
+    $page->selectFieldOption('body[0][format]', 'full_html');
+    $this->assertNotEmpty($assert_session->waitForText('Change text format?'));
+    $page->pressButton('Continue');
+
+    // Ensure the editor is loaded and ensure that arbitrary markup is retained.
+    $this->assertNotEmpty($assert_session->waitForElement('css', '.ck-editor'));
+    $page->pressButton('Save');
+
+    // But note that the `style` attribute was stripped by
+    // \Drupal\editor\EditorXssFilter\Standard.
+    $assert_session->responseContains('<p><a href="https://example.com" hreflang="en" foo="bar"><abbr title="National Aeronautics and Space Administration">NASA</abbr> is an acronym.</a></p>');
+
+    // Ensure attributes are retained after enabling link plugin.
+    $this->drupalGet('admin/config/content/formats/manage/full_html');
+    $this->assertNotEmpty($assert_session->waitForElement('css', '.ckeditor5-toolbar-item-link'));
+    $this->triggerKeyUp('.ckeditor5-toolbar-item-link', 'ArrowDown');
+    $assert_session->assertWaitOnAjaxRequest();
+    $page->pressButton('Save configuration');
+
+    $this->drupalGet('node/1/edit');
+    $page->pressButton('Save');
+
+    $assert_session->responseContains('<p><a href="https://example.com" hreflang="en" foo="bar"><abbr title="National Aeronautics and Space Administration">NASA</abbr> is an acronym.</a></p>');
+
+    // Configure Basic HTML text format to use CKE5 and enable the link plugin.
+    $this->drupalGet('admin/config/content/formats/manage/basic_html');
+    $page->checkField('roles[authenticated]');
+    $page->selectFieldOption('editor[editor]', 'ckeditor5');
+    $assert_session->assertWaitOnAjaxRequest();
+    $this->assertNotEmpty($assert_session->waitForElement('css', '.ckeditor5-toolbar-item-link'));
+    $this->triggerKeyUp('.ckeditor5-toolbar-item-link', 'ArrowDown');
+    $assert_session->assertWaitOnAjaxRequest();
+    $page->pressButton('Save configuration');
+    $this->assertTrue($assert_session->waitForText('The text format Basic HTML has been updated.'));
+
+    // Change the node's text format to Basic HTML.
+    $this->drupalGet('node/1/edit');
+    $page->selectFieldOption('body[0][format]', 'basic_html');
+    $this->assertNotEmpty($assert_session->waitForText('Change text format?'));
+    $page->pressButton('Continue');
+    $assert_session->assertWaitOnAjaxRequest();
+    $page->pressButton('Save');
+
+    // The `style` and foo` attributes should have been removed, as should the
+    // `<abbr>` tag.
+    $assert_session->responseContains('<p><a href="https://example.com" hreflang="en">NASA is an acronym.</a></p>');
+  }
+
+}
diff --git a/core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5CKEditor4Compatibility.php b/core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5CKEditor4Compatibility.php
new file mode 100644
index 000000000000..b6e4b42f6743
--- /dev/null
+++ b/core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5CKEditor4Compatibility.php
@@ -0,0 +1,123 @@
+<?php
+
+namespace Drupal\Tests\ckeditor5\FunctionalJavascript;
+
+use Drupal\ckeditor5\Plugin\Editor\CKEditor5;
+use Drupal\Core\Entity\Entity\EntityFormDisplay;
+use Drupal\editor\Entity\Editor;
+use Drupal\field\Entity\FieldConfig;
+use Drupal\field\Entity\FieldStorageConfig;
+use Drupal\filter\Entity\FilterFormat;
+use Symfony\Component\Validator\ConstraintViolation;
+
+/**
+ * Ensures that CKEditor 5 can be used on the same page with CKEditor 4.
+ *
+ * @group ckeditor5
+ * @internal
+ */
+class CKEditor5CKEditor4Compatibility extends CKEditor5TestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = [
+    'ckeditor',
+    'ckeditor5_test',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp(): void {
+    parent::setUp();
+
+    $current_user_roles = $this->loggedInUser->getRoles(TRUE);
+
+    // Create text format, text editor and text fields for CKEditor 5 and 4.
+    foreach ([5 => 'ckeditor5', 4 => 'ckeditor'] as $version => $text_editor_plugin_id) {
+      $format_id = sprintf('test_format_for_ckeditor%d', $version);
+      $field_name = sprintf('field_text_ckeditor%d', $version);
+
+      FilterFormat::create([
+        'format' => $format_id,
+        'name' => sprintf('CKEditor %d editor', $version),
+        'roles' => $current_user_roles,
+        'filters' => [
+          'filter_html' => [
+            'status' => TRUE,
+            'settings' => [
+              'allowed_html' => '<p> <br> <h2> <h3> <h4> <h5> <h6> <strong> <em>',
+            ],
+          ],
+        ],
+      ])->save();
+      Editor::create([
+        'editor' => $text_editor_plugin_id,
+        'format' => $format_id,
+        'settings' => $version === 4 ? [] : [
+          'toolbar' => [
+            'items' => ['heading', 'bold', 'italic'],
+          ],
+          'plugins' => [
+            'ckeditor5_heading' => [
+              'enabled_headings' => [
+                'heading2',
+                'heading3',
+                'heading4',
+                'heading5',
+                'heading6',
+              ],
+            ],
+          ],
+        ],
+        'image_upload' => [
+          'status' => FALSE,
+        ],
+      ])->save();
+      if ($version === 5) {
+        $this->assertSame([], array_map(
+          function (ConstraintViolation $v) {
+            return (string) $v->getMessage();
+          },
+          iterator_to_array(CKEditor5::validatePair(
+            Editor::load($format_id),
+            FilterFormat::load($format_id)
+          ))
+        ));
+      }
+      $field_storage = FieldStorageConfig::create([
+        'field_name' => $field_name,
+        'entity_type' => 'node',
+        'type' => 'text_long',
+      ]);
+      $field_storage->save();
+      FieldConfig::create([
+        'field_storage' => $field_storage,
+        'entity_type' => 'node',
+        'bundle' => 'page',
+      ])->save();
+
+      // Add the new field to the default form display.
+      EntityFormDisplay::load('node.page.default')
+        ->setComponent($field_name, ['type' => 'text_textarea'])
+        ->save();
+    }
+  }
+
+  /**
+   * Ensures that CKEditor 5 and CKEditor 4 can be used on the same page.
+   */
+  public function testCkeCompatibility() {
+    $page = $this->getSession()->getPage();
+    $assert_session = $this->assertSession();
+
+    $this->drupalGet('node/add/page');
+    $page->selectFieldOption('field_text_ckeditor4[0][format]', 'test_format_for_ckeditor4');
+    $page->selectFieldOption('field_text_ckeditor5[0][format]', 'test_format_for_ckeditor5');
+
+    $this->assertNotEmpty($assert_session->waitForElement('css', '.cke_wysiwyg_frame'));
+    $this->assertNotEmpty($assert_session->waitForElement('css', '.ck-editor'));
+  }
+
+}
diff --git a/core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5OffCanvasTest.php b/core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5OffCanvasTest.php
new file mode 100644
index 000000000000..b8e2f102ec45
--- /dev/null
+++ b/core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5OffCanvasTest.php
@@ -0,0 +1,52 @@
+<?php
+
+namespace Drupal\Tests\ckeditor5\FunctionalJavascript;
+
+/**
+ * Tests for CKEditor5 to ensure correct styling in off-canvas.
+ *
+ * @group ckeditor5
+ * @internal
+ */
+class CKEditor5OffCanvasTest extends CKEditor5TestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = [
+    'node',
+    'ckeditor5',
+    'ckeditor5_test',
+  ];
+
+  /**
+   * Tests if CKEditor is properly styled inside an off-canvas dialog.
+   */
+  public function testOffCanvasStyles() {
+    $assert_session = $this->assertSession();
+    $page = $this->getSession()->getPage();
+
+    $this->addNewTextFormat($page, $assert_session);
+
+    $this->drupalGet('/ckeditor5_test/off_canvas');
+
+    // The "Add Node" link triggers an off-canvas dialog with an add node form
+    // that includes CKEditor.
+    $page->clickLink('Add Node');
+    $assert_session->waitForElementVisible('css', '#drupal-off-canvas');
+    $assert_session->assertWaitOnAjaxRequest();
+
+    $styles = $assert_session->elementExists('css', 'style#ckeditor5-off-canvas-reset');
+    $this->stringContains('#drupal-off-canvas [data-drupal-ck-style-fence]', $styles->getText());
+
+    $assert_session->elementExists('css', '.ck');
+
+    $ckeditor_toolbar_bg_color = $this->getSession()->evaluateScript('window.getComputedStyle(document.querySelector(\'.ck.ck-toolbar\')).backgroundColor');
+    $this->assertEquals('rgb(250, 250, 250)', $ckeditor_toolbar_bg_color, 'Toolbar background-color should be unaffected by off-canvas');
+    // Editable area should be visible.
+    $assert_session->elementExists('css', '.ck .ck-content');
+    $ckeditor_editable_bg_color = $this->getSession()->evaluateScript('window.getComputedStyle(document.querySelector(\'.ck.ck-content\')).backgroundColor');
+    $this->assertEquals('rgb(255, 255, 255)', $ckeditor_editable_bg_color, 'Content background-color should be unaffected by off-canvas');
+  }
+
+}
diff --git a/core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5Test.php b/core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5Test.php
new file mode 100644
index 000000000000..deb37c9455fb
--- /dev/null
+++ b/core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5Test.php
@@ -0,0 +1,472 @@
+<?php
+
+namespace Drupal\Tests\ckeditor5\FunctionalJavascript;
+
+use Drupal\ckeditor5\Plugin\Editor\CKEditor5;
+use Drupal\Core\Language\LanguageManager;
+use Drupal\editor\Entity\Editor;
+use Drupal\file\Entity\File;
+use Drupal\filter\Entity\FilterFormat;
+use Drupal\node\Entity\Node;
+use Drupal\Tests\TestFileCreationTrait;
+use Drupal\user\RoleInterface;
+use Symfony\Component\Validator\ConstraintViolation;
+
+// cspell:ignore esque upcasted
+
+/**
+ * Tests for CKEditor5.
+ *
+ * @group ckeditor5
+ * @internal
+ */
+class CKEditor5Test extends CKEditor5TestBase {
+
+  use TestFileCreationTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = [
+    'media_library',
+  ];
+
+  /**
+   * Tests configuring CKEditor5 for existing content.
+   */
+  public function testExistingContent() {
+    $page = $this->getSession()->getPage();
+    $assert_session = $this->assertSession();
+
+    // Add a node with text rendered via the Plain Text format.
+    $this->drupalGet('node/add');
+    $page->fillField('title[0][value]', 'My test content');
+    $page->fillField('body[0][value]', '<p>This is test content</p>');
+    $page->pressButton('Save');
+    $assert_session->responseNotContains('<p>This is test content</p>');
+    $assert_session->responseContains('&lt;p&gt;This is test content&lt;/p&gt;');
+
+    $this->addNewTextFormat($page, $assert_session);
+
+    // Change the node to use the new text format.
+    $this->drupalGet('node/1/edit');
+
+    // Confirm that the JavaScript that generates IE11 warnings loads.
+    $assert_session->elementExists('css', 'script[src*="ckeditor5/js/ie11.user.warnings.js"]');
+
+    $page->selectFieldOption('body[0][format]', 'ckeditor5');
+    $this->assertNotEmpty($assert_session->waitForText('Change text format?'));
+    $page->pressButton('Continue');
+    // Ensure the editor is loaded.
+    $this->assertNotEmpty($assert_session->waitForElement('css', '.ck-editor'));
+    $page->pressButton('Save');
+
+    // Assert that the HTML is rendered correctly.
+    $assert_session->responseContains('<p>This is test content</p>');
+    $assert_session->responseNotContains('&lt;p&gt;This is test content&lt;/p&gt;');
+  }
+
+  /**
+   * Ensures that attribute values are encoded.
+   */
+  public function testAttributeEncoding() {
+    $page = $this->getSession()->getPage();
+    $assert_session = $this->assertSession();
+
+    FilterFormat::create([
+      'format' => 'ckeditor5',
+      'name' => 'CKEditor 5 with image upload',
+      'roles' => [RoleInterface::AUTHENTICATED_ID],
+    ])->save();
+    Editor::create([
+      'format' => 'ckeditor5',
+      'editor' => 'ckeditor5',
+      'settings' => [
+        'toolbar' => [
+          'items' => ['uploadImage'],
+        ],
+        'plugins' => [],
+      ],
+      'image_upload' => [
+        'status' => TRUE,
+        'scheme' => 'public',
+        'directory' => 'inline-images',
+        'max_size' => '',
+      ],
+    ])->save();
+    $this->assertSame([], array_map(
+      function (ConstraintViolation $v) {
+        return (string) $v->getMessage();
+      },
+      iterator_to_array(CKEditor5::validatePair(
+        Editor::load('ckeditor5'),
+        FilterFormat::load('ckeditor5')
+      ))
+    ));
+
+    $this->drupalGet('node/add');
+    $page->fillField('title[0][value]', 'My test content');
+    $this->assertNotEmpty($image_upload_field = $page->find('css', '.ck-file-dialog-button input[type="file"]'));
+    $image = $this->getTestFiles('image')[0];
+    $image_upload_field->attachFile($this->container->get('file_system')->realpath($image->uri));
+    $assert_session->assertWaitOnAjaxRequest();
+
+    $this->click('.ck-widget.image');
+    $balloon_panel = $page->find('css', '.ck-balloon-panel');
+    $balloon_buttons = $balloon_panel->findAll('css', '[aria-label="Image toolbar"] button');
+    $this->assertSame('Change image text alternative', $balloon_buttons[0]->find('css', '.ck-button__label')->getHtml());
+    $balloon_buttons[0]->click();
+    $assert_session->waitForElementVisible('css', '.ck-balloon-panel .ck-text-alternative-form');
+    $alt_override_input = $page->find('css', '.ck-balloon-panel .ck-text-alternative-form input[type=text]');
+    $this->assertSame('', $alt_override_input->getValue());
+    $alt_override_input->setValue('</em> Kittens & llamas are cute');
+    $balloon_panel->pressButton('Save');
+    $page->pressButton('Save');
+
+    $uploaded_image = File::load(1);
+    $image_uuid = $uploaded_image->uuid();
+    $image_url = $this->container->get('file_url_generator')->generateString($uploaded_image->getFileUri());
+    $this->drupalGet('node/1');
+    $assert_session->elementExists('xpath', sprintf('//img[@alt="</em> Kittens & llamas are cute" and @data-entity-uuid="%s" and @data-entity-type="file"]', $image_uuid));
+
+    // Drupal CKEditor 5 integrations overrides the CKEditor 5 HTML writer to
+    // escape ampersand characters (&) and the angle brackets (< and >). This is
+    // required because \Drupal\Component\Utility\Xss::filter fails to parse
+    // element attributes with unescaped entities in value.
+    // @see https://www.drupal.org/project/drupal/issues/3227831
+    $this->assertEquals(sprintf('<img data-entity-uuid="%s" data-entity-type="file" src="%s" alt="&lt;/em&gt; Kittens &amp; llamas are cute">', $image_uuid, $image_url), Node::load(1)->get('body')->value);
+  }
+
+  /**
+   * Test headings configuration.
+   */
+  public function testHeadingsPlugin() {
+    $page = $this->getSession()->getPage();
+    $assert_session = $this->assertSession();
+
+    $this->addNewTextFormat($page, $assert_session);
+    $this->drupalGet('admin/config/content/formats/manage/ckeditor5');
+    $this->assertHtmlEsqueFieldValueEquals('filters[filter_html][settings][allowed_html]', '<br> <p> <h2> <h3> <h4> <h5> <h6> <strong> <em>');
+
+    $this->drupalGet('node/add');
+    $this->assertNotEmpty($assert_session->waitForElement('css', '.ck-heading-dropdown button'));
+
+    $page->find('css', '.ck-heading-dropdown button')->click();
+
+    // Get all the headings available in dropdown.
+    $headings_dropdown = $page->findAll('css', '.ck-heading-dropdown li .ck-button__label');
+
+    // Create array of available headings.
+    $available_headings = [];
+    foreach ($headings_dropdown as $item) {
+      $available_headings[] = $item->getText();
+    }
+
+    $this->assertSame([
+      'Paragraph',
+      'Heading 2',
+      'Heading 3',
+      'Heading 4',
+      'Heading 5',
+      'Heading 6',
+    ], $available_headings);
+
+    $this->drupalGet('admin/config/content/formats/manage/ckeditor5');
+    $this->assertTrue($page->hasUncheckedField('editor[settings][plugins][ckeditor5_heading][enabled_headings][heading1]'));
+    $page->checkField('editor[settings][plugins][ckeditor5_heading][enabled_headings][heading1]');
+    $assert_session->assertWaitOnAjaxRequest();
+    $this->assertTrue($page->hasCheckedField('editor[settings][plugins][ckeditor5_heading][enabled_headings][heading1]'));
+    $this->assertTrue($page->hasCheckedField('editor[settings][plugins][ckeditor5_heading][enabled_headings][heading2]'));
+    $page->uncheckField('editor[settings][plugins][ckeditor5_heading][enabled_headings][heading2]');
+    $assert_session->assertWaitOnAjaxRequest();
+    $this->assertTrue($page->hasUncheckedField('editor[settings][plugins][ckeditor5_heading][enabled_headings][heading2]'));
+    $this->assertTrue($page->hasCheckedField('editor[settings][plugins][ckeditor5_heading][enabled_headings][heading4]'));
+    $page->uncheckField('editor[settings][plugins][ckeditor5_heading][enabled_headings][heading4]');
+    $assert_session->assertWaitOnAjaxRequest();
+    $this->assertTrue($page->hasUncheckedField('editor[settings][plugins][ckeditor5_heading][enabled_headings][heading4]'));
+    $this->assertHtmlEsqueFieldValueEquals('filters[filter_html][settings][allowed_html]', '<br> <p> <h1> <h3> <h5> <h6> <strong> <em>');
+    $this->assertTrue($page->hasUncheckedField('editor[settings][plugins][ckeditor5_heading][enabled_headings][heading4]'));
+
+    $page->pressButton('Save configuration');
+
+    $this->drupalGet('node/add');
+    $this->assertNotEmpty($assert_session->waitForElement('css', '.ck-heading-dropdown button'));
+
+    $page->find('css', '.ck-heading-dropdown button')->click();
+
+    // Get all the headings available in dropdown.
+    $headings_dropdown = $page->findAll('css', '.ck-heading-dropdown li .ck-button__label');
+
+    // Create array of available headings.
+    $available_headings = [];
+    foreach ($headings_dropdown as $item) {
+      $available_headings[] = $item->getText();
+    }
+
+    $this->assertSame([
+      'Paragraph',
+      'Heading 1',
+      'Heading 3',
+      'Heading 5',
+      'Heading 6',
+    ], $available_headings);
+  }
+
+  /**
+   * Test for plugin Language of parts.
+   */
+  public function testLanguageOfPartsPlugin() {
+    $page = $this->getSession()->getPage();
+    $assert_session = $this->assertSession();
+
+    $this->createNewTextFormat($page, $assert_session);
+    // Press arrow down key to add the button to the active toolbar.
+    $this->assertNotEmpty($assert_session->waitForElement('css', '.ckeditor5-toolbar-item-textPartLanguage'));
+    $this->triggerKeyUp('.ckeditor5-toolbar-item-textPartLanguage', 'ArrowDown');
+    $assert_session->assertWaitOnAjaxRequest();
+
+    // Test for "United Nations' official languages" option.
+    $languages = LanguageManager::getUnitedNationsLanguageList();
+    $this->languageOfPartsPluginTestHelper($page, $assert_session, $languages, "un");
+
+    // Test for "All 95 languages" option.
+    $this->drupalGet('admin/config/content/formats/manage/ckeditor5');
+    $languages = LanguageManager::getStandardLanguageList();
+    $this->languageOfPartsPluginTestHelper($page, $assert_session, $languages, "all");
+  }
+
+  /**
+   * Validate the available languages on the basis of selected language option.
+   */
+  public function languageOfPartsPluginTestHelper($page, $assert_session, $predefined_languages, $option) {
+    $this->assertNotEmpty($assert_session->waitForElement('css', 'a[href^="#edit-editor-settings-plugins-ckeditor5-language"]'));
+
+    // Set correct value.
+    $vertical_tab_link = $page->find('xpath', "//ul[contains(@class, 'vertical-tabs__menu')]/li/a[starts-with(@href, '#edit-editor-settings-plugins-ckeditor5-language')]");
+    $vertical_tab_link->click();
+    $page->selectFieldOption('editor[settings][plugins][ckeditor5_language][language_list]', $option);
+    $assert_session->assertWaitOnAjaxRequest();
+    $page->pressButton('Save configuration');
+
+    // Validate plugin on node add page.
+    $this->drupalGet('node/add');
+    $this->assertNotEmpty($assert_session->waitForText('Choose language'));
+
+    // Click on the dropdown button.
+    $page->find('css', '.ck-text-fragment-language-dropdown button')->click();
+
+    // Get all the languages available in dropdown.
+    $current_languages = $page->findAll('css', '.ck-text-fragment-language-dropdown li .ck-button__label');
+
+    // Remove "Remove language" element from current languages.
+    array_shift($current_languages);
+
+    // Create array of full language name.
+    $languages = [];
+    foreach ($current_languages as $item) {
+      $languages[] = $item->getText();
+    }
+    // Return the values from a single column.
+    $predefined_languages = array_column($predefined_languages, 0);
+
+    // Sort on full language name.
+    asort($predefined_languages);
+
+    $this->assertSame(array_values($predefined_languages), $languages);
+  }
+
+  /**
+   * Confirms active tab status is intact after AJAX refresh.
+   */
+  public function testActiveTabsMaintained() {
+    $page = $this->getSession()->getPage();
+    $assert_session = $this->assertSession();
+
+    $this->createNewTextFormat($page, $assert_session);
+    $assert_session->assertWaitOnAjaxRequest();
+
+    // Ensure the HTML filter tab is visible.
+    $this->assertNotEmpty($assert_session->waitForElementVisible('css', 'a[href^="#edit-filters-filter-html-settings"]'));
+
+    // Enable media embed to make a second filter config tab visible.
+    $this->assertTrue($page->hasUncheckedField('filters[media_embed][status]'));
+    $page->checkField('filters[media_embed][status]');
+    $assert_session->assertWaitOnAjaxRequest();
+    $assert_session->responseContains('Media types selectable in the Media Library');
+    $assert_session->assertWaitOnAjaxRequest();
+
+    // Enable upload image to add one plugin config form.
+    $this->assertNotEmpty($assert_session->waitForElement('css', '.ckeditor5-toolbar-item-uploadImage'));
+    $this->triggerKeyUp('.ckeditor5-toolbar-item-uploadImage', 'ArrowDown');
+    // cSpell:disable-next-line
+    $this->assertNotEmpty($assert_session->waitForElement('css', 'a[href^="#edit-editor-settings-plugins-ckeditor5-imageupload"]'));
+    $this->assertNotEmpty($assert_session->waitForElement('css', '.ckeditor5-toolbar-active .ckeditor5-toolbar-item-uploadImage'));
+    $assert_session->assertWaitOnAjaxRequest();
+
+    $page->clickLink('Image Upload');
+    $assert_session->waitForText('Enable image uploads');
+    $this->assertTrue($page->hasUncheckedField('editor[settings][plugins][ckeditor5_imageUpload][status]'));
+    $page->checkField('editor[settings][plugins][ckeditor5_imageUpload][status]');
+    $assert_session->assertWaitOnAjaxRequest();
+
+    // Enable language to add a second plugin config form.
+    $this->assertNotEmpty($assert_session->waitForElement('css', '.ckeditor5-toolbar-item-textPartLanguage'));
+    $this->triggerKeyUp('.ckeditor5-toolbar-item-textPartLanguage', 'ArrowDown');
+    $this->assertNotEmpty($assert_session->waitForElement('css', 'a[href^="#edit-editor-settings-plugins-ckeditor5-language"]'));
+    $this->assertNotEmpty($assert_session->waitForElement('css', '.ckeditor5-toolbar-active .ckeditor5-toolbar-item-textPartLanguage'));
+    $assert_session->assertWaitOnAjaxRequest();
+
+    $page->pressButton('Save configuration');
+    $assert_session->pageTextContains('Added text format ckeditor5');
+
+    // Leave and return to the config form, both sets of tabs should then have
+    // the first tab active by default.
+    $this->drupalGet('admin/config/content/formats/');
+    $this->drupalGet('admin/config/content/formats/manage/ckeditor5');
+
+    $assert_session->waitForElement('css', '.vertical-tabs__menu-item.is-selected');
+
+    $plugin_settings_vertical_tabs = $page->findAll('css', '#plugin-settings-wrapper .vertical-tabs__menu-item');
+    $filter_settings = $page->find('xpath', '//*[contains(@class, "js-form-type-vertical-tabs")]/label[contains(text(), "Filter settings")]/..');
+    $filter_settings_vertical_tabs = $filter_settings->findAll('css', '.vertical-tabs__menu-item');
+
+    $this->assertTrue($plugin_settings_vertical_tabs[0]->hasClass('is-selected'), "Expected plugin tab 1 selected on initial build");
+    $this->assertFalse($plugin_settings_vertical_tabs[1]->hasClass('is-selected'), "Expected plugin tab 2 not selected on initial build");
+
+    $this->assertFalse($filter_settings_vertical_tabs[0]->hasClass('is-selected'), "Expected filter tab 1 not selected on initial build");
+    $this->assertTrue($filter_settings_vertical_tabs[2]->hasClass('is-selected'), "Expected (visible) filter tab 2 selected on initial build");
+
+    $plugin_settings_vertical_tabs[1]->click();
+    $filter_settings_vertical_tabs[0]->click();
+    $assert_session->assertWaitOnAjaxRequest();
+
+    $this->assertFalse($plugin_settings_vertical_tabs[0]->hasClass('is-selected'), "Expected plugin tab 1 deselected after click");
+    $this->assertTrue($plugin_settings_vertical_tabs[1]->hasClass('is-selected'), "Expected plugin tab 2 selected after click");
+
+    $this->assertTrue($filter_settings_vertical_tabs[0]->hasClass('is-selected'), "Expected filter tab 1 selected after click");
+    $this->assertFalse($filter_settings_vertical_tabs[2]->hasClass('is-selected'), "Expected (visible) filter tab 2 deselected after click");
+
+    // Add a plugin just to trigger AJAX refresh.
+    $this->assertNotEmpty($assert_session->waitForElement('css', '.ckeditor5-toolbar-item-blockQuote'));
+    $this->triggerKeyUp('.ckeditor5-toolbar-item-blockQuote', 'ArrowDown');
+    $assert_session->assertWaitOnAjaxRequest();
+
+    $this->assertFalse($plugin_settings_vertical_tabs[0]->hasClass('is-selected'), "Expected plugin tab 1 deselected after AJAX refresh");
+    $this->assertTrue($plugin_settings_vertical_tabs[1]->hasClass('is-selected'), "Expected plugin tab 2 selected after AJAX refresh");
+
+    $this->assertTrue($filter_settings_vertical_tabs[0]->hasClass('is-selected'), "Expected filter tab 1 selected after AJAX refresh");
+    $this->assertFalse($filter_settings_vertical_tabs[1]->hasClass('is-selected'), "Expected filter tab 2 deselected after AJAX refresh");
+  }
+
+  /**
+   * Ensures that CKEditor 5 integrates with file reference filter.
+   */
+  public function testEditorFileReferenceIntegration() {
+    $page = $this->getSession()->getPage();
+    $assert_session = $this->assertSession();
+
+    $this->createNewTextFormat($page, $assert_session);
+    $this->assertNotEmpty($assert_session->waitForElement('css', '.ckeditor5-toolbar-item-uploadImage'));
+    $this->triggerKeyUp('.ckeditor5-toolbar-item-uploadImage', 'ArrowDown');
+    $assert_session->assertWaitOnAjaxRequest();
+    $page->clickLink('Image Upload');
+    $page->checkField('editor[settings][plugins][ckeditor5_imageUpload][status]');
+    $assert_session->assertWaitOnAjaxRequest();
+    $page->checkField('filters[editor_file_reference][status]');
+    $assert_session->assertWaitOnAjaxRequest();
+    $this->saveNewTextFormat($page, $assert_session);
+
+    $this->drupalGet('node/add');
+    $page->fillField('title[0][value]', 'My test content');
+    $this->assertNotEmpty($image_upload_field = $page->find('css', '.ck-file-dialog-button input[type="file"]'));
+    $image = $this->getTestFiles('image')[0];
+    $image_upload_field->attachFile($this->container->get('file_system')->realpath($image->uri));
+    $assert_session->assertWaitOnAjaxRequest();
+    $page->pressButton('Save');
+
+    $uploaded_image = File::load(1);
+    $image_url = $this->container->get('file_url_generator')->generateString($uploaded_image->getFileUri());
+    $image_uuid = $uploaded_image->uuid();
+    $assert_session->elementExists('xpath', sprintf('//img[@src="%s" and @loading="lazy" and @width and @height and @data-entity-uuid="%s" and @data-entity-type="file"]', $image_url, $image_uuid));
+
+    // Ensure that width, height, and length attributes are not stored in the
+    // database.
+    $this->assertEquals(sprintf('<img data-entity-uuid="%s" data-entity-type="file" src="%s">', $image_uuid, $image_url), Node::load(1)->get('body')->value);
+
+    // Ensure that data-entity-uuid and data-entity-type attributes are upcasted
+    // correctly to CKEditor model.
+    $this->drupalGet('node/1/edit');
+    $this->assertNotEmpty($assert_session->waitForElement('css', '.ck-editor'));
+    $page->pressButton('Save');
+
+    $assert_session->elementExists('xpath', sprintf('//img[@src="%s" and @loading="lazy" and @width and @height and @data-entity-uuid="%s" and @data-entity-type="file"]', $image_url, $image_uuid));
+  }
+
+  /**
+   * Ensures that CKEditor italic model is converted to em.
+   */
+  public function testEmphasis() {
+    $page = $this->getSession()->getPage();
+    $assert_session = $this->assertSession();
+
+    // Add a node with text rendered via the Plain Text format.
+    $this->drupalGet('node/add');
+    $page->fillField('title[0][value]', 'My test content');
+    $page->fillField('body[0][value]', '<p>This is a <em>test!</em></p>');
+    $page->pressButton('Save');
+
+    $this->createNewTextFormat($page, $assert_session);
+    $this->saveNewTextFormat($page, $assert_session);
+
+    $this->drupalGet('node/1/edit');
+    $page->selectFieldOption('body[0][format]', 'ckeditor5');
+    $this->assertNotEmpty($assert_session->waitForText('Change text format?'));
+    $page->pressButton('Continue');
+
+    $this->assertNotEmpty($assert_session->waitForElement('css', '.ck-editor'));
+    $page->pressButton('Save');
+
+    $assert_session->responseContains('<p>This is a <em>test!</em></p>');
+  }
+
+  /**
+   * Ensures that images can have caption set.
+   */
+  public function testImageCaption() {
+    $page = $this->getSession()->getPage();
+    $assert_session = $this->assertSession();
+
+    // Add a node with text rendered via the Plain Text format.
+    $this->drupalGet('node/add');
+    $page->fillField('title[0][value]', 'My test content');
+    // Add image with data-caption. The foo attribute is added to be removed
+    // later by CKEditor to make sure CKEditor was able to downcast data.
+    $page->fillField('body[0][value]', '<img src="/sites/default/files/alpaca.jpg" data-caption="Alpacas &lt;em&gt;are&lt;/em&gt; cute" foo="bar">');
+    $page->pressButton('Save');
+
+    $this->createNewTextFormat($page, $assert_session);
+    $this->assertNotEmpty($assert_session->waitForElement('css', '.ckeditor5-toolbar-item-uploadImage'));
+    $this->triggerKeyUp('.ckeditor5-toolbar-item-uploadImage', 'ArrowDown');
+    $assert_session->assertWaitOnAjaxRequest();
+    $page->clickLink('Image Upload');
+    $assert_session->waitForText('Enable image uploads');
+    $page->checkField('editor[settings][plugins][ckeditor5_imageUpload][status]');
+    $assert_session->assertWaitOnAjaxRequest();
+    $page->checkField('filters[filter_caption][status]');
+    $assert_session->assertWaitOnAjaxRequest();
+    $this->saveNewTextFormat($page, $assert_session);
+
+    $this->drupalGet('node/1/edit');
+    $page->selectFieldOption('body[0][format]', 'ckeditor5');
+    $this->assertNotEmpty($assert_session->waitForText('Change text format?'));
+    $page->pressButton('Continue');
+
+    $this->assertNotEmpty($assert_session->waitForElement('css', '.ck-editor'));
+    $page->pressButton('Save');
+
+    $this->assertEquals('<img src="/sites/default/files/alpaca.jpg" data-caption="Alpacas &lt;em&gt;are&lt;/em&gt; cute">', Node::load(1)->get('body')->value);
+    $assert_session->elementExists('xpath', '//figure/img[@src="/sites/default/files/alpaca.jpg" and not(@data-caption)]');
+    $assert_session->responseContains('<figcaption>Alpacas <em>are</em> cute</figcaption>');
+  }
+
+}
diff --git a/core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5TestBase.php b/core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5TestBase.php
new file mode 100644
index 000000000000..052ba5e0d1d1
--- /dev/null
+++ b/core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5TestBase.php
@@ -0,0 +1,140 @@
+<?php
+
+namespace Drupal\Tests\ckeditor5\FunctionalJavascript;
+
+use Behat\Mink\Element\TraversableElement;
+use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
+
+// cspell:ignore esque
+
+/**
+ * Base class for testing CKEditor 5.
+ *
+ * @ingroup testing
+ * @internal
+ */
+abstract class CKEditor5TestBase extends WebDriverTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = [
+    'node',
+    'ckeditor5',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'stark';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp(): void {
+    parent::setUp();
+
+    $this->drupalCreateContentType(['type' => 'page']);
+
+    $this->drupalLogin($this->drupalCreateUser([
+      'administer filters',
+      'create page content',
+      'edit own page content',
+    ]));
+  }
+
+  /**
+   * Add and save a new text format using CKEditor 5.
+   */
+  public function addNewTextFormat($page, $assert_session, $name = 'ckeditor5') {
+    $this->createNewTextFormat($page, $assert_session, $name);
+    $this->saveNewTextFormat($page, $assert_session);
+  }
+
+  /**
+   * Create a new text format using CKEditor 5.
+   */
+  public function createNewTextFormat($page, $assert_session, $name = 'ckeditor5') {
+    $this->drupalGet('admin/config/content/formats/add');
+    $page->fillField('name', $name);
+    $assert_session->waitForText('Machine name');
+    $this->assertNotEmpty($assert_session->waitForText($name));
+    $page->checkField('roles[authenticated]');
+
+    if ($name === 'ckeditor5') {
+      // Enable the HTML filter, at least one HTML restricting filter is needed
+      // before CKEditor 5 can be enabled.
+      $this->assertTrue($page->hasUncheckedField('filters[filter_html][status]'));
+      $page->checkField('filters[filter_html][status]');
+      $assert_session->assertWaitOnAjaxRequest();
+
+      // Add the tags that must be included in the html filter for CKEditor 5.
+      $allowed_html_field = $assert_session->fieldExists('filters[filter_html][settings][allowed_html]');
+      $allowed_html_field->setValue('<p> <br>');
+    }
+    $page->selectFieldOption('editor[editor]', $name);
+  }
+
+  /**
+   * Save the new text format.
+   */
+  public function saveNewTextFormat($page, $assert_session) {
+    $assert_session->assertWaitOnAjaxRequest();
+    $page->pressButton('Save configuration');
+    $this->assertTrue($assert_session->waitForText('Added text format'), "Confirm new text format saved");
+  }
+
+  /**
+   * Trigger a keyup event on the selected element.
+   *
+   * @param string $selector
+   *   The css selector for the element.
+   * @param string $key
+   *   The keyCode.
+   */
+  protected function triggerKeyUp(string $selector, string $key) {
+
+    $script = <<<JS
+(function (selector, key) {
+  const btn = document.querySelector(selector);
+    btn.dispatchEvent(new KeyboardEvent('keydown', { key }));
+    btn.dispatchEvent(new KeyboardEvent('keyup', { key }));
+})('{$selector}', '{$key}')
+
+JS;
+
+    $options = [
+      'script' => $script,
+      'args' => [],
+    ];
+
+    $this->getSession()->getDriver()->getWebDriverSession()->execute($options);
+  }
+
+  /**
+   * Decorates ::fieldValueEquals() to force DrupalCI to provide useful errors.
+   *
+   * @param string $field
+   *   Field id|name|label|value.
+   * @param string $value
+   *   Field value.
+   * @param \Behat\Mink\Element\TraversableElement $container
+   *   Document to check against.
+   *
+   * @throws \Behat\Mink\Exception\ExpectationException
+   *
+   * @see \Behat\Mink\WebAssert::fieldValueEquals()
+   */
+  protected function assertHtmlEsqueFieldValueEquals($field, $value, TraversableElement $container = NULL) {
+    $assert_session = $this->assertSession();
+
+    $node = $assert_session->fieldExists($field, $container);
+    $actual = $node->getValue();
+    $regex = '/^' . preg_quote($value, '/') . '$/ui';
+
+    $message = sprintf('The field "%s" value is "%s", but "%s" expected.', $field, htmlspecialchars($actual), htmlspecialchars($value));
+
+    $assert_session->assert((bool) preg_match($regex, $actual), $message);
+  }
+
+}
diff --git a/core/modules/ckeditor5/tests/src/FunctionalJavascript/ImageTest.php b/core/modules/ckeditor5/tests/src/FunctionalJavascript/ImageTest.php
new file mode 100644
index 000000000000..97a3209250ff
--- /dev/null
+++ b/core/modules/ckeditor5/tests/src/FunctionalJavascript/ImageTest.php
@@ -0,0 +1,313 @@
+<?php
+
+namespace Drupal\Tests\ckeditor5\FunctionalJavascript;
+
+use Drupal\editor\Entity\Editor;
+use Drupal\file\Entity\File;
+use Drupal\filter\Entity\FilterFormat;
+use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
+use Drupal\Tests\TestFileCreationTrait;
+use Drupal\Tests\ckeditor5\Traits\CKEditor5TestTrait;
+use Drupal\ckeditor5\Plugin\Editor\CKEditor5;
+use Symfony\Component\Validator\ConstraintViolation;
+
+/**
+ * @coversDefaultClass \Drupal\ckeditor5\Plugin\CKEditor5Plugin\ImageUpload
+ * @group ckeditor5
+ * @internal
+ */
+class ImageTest extends WebDriverTestBase {
+
+  use CKEditor5TestTrait;
+  use TestFileCreationTrait;
+
+  /**
+   * The user to use during testing.
+   *
+   * @var \Drupal\user\UserInterface
+   */
+  protected $adminUser;
+
+  /**
+   * The sample image File entity to embed.
+   *
+   * @var \Drupal\file\FileInterface
+   */
+  protected $file;
+
+  /**
+   * A host entity with a body field to embed images in.
+   *
+   * @var \Drupal\node\NodeInterface
+   */
+  protected $host;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = [
+    'ckeditor5',
+    'node',
+    'text',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'classy';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp(): void {
+    parent::setUp();
+
+    FilterFormat::create([
+      'format' => 'test_format',
+      'name' => 'Test format',
+      'filters' => [
+        'filter_html' => [
+          'status' => TRUE,
+          'settings' => [
+            'allowed_html' => '<p> <br> <a href> <img src alt data-entity-uuid data-entity-type height width data-caption data-align>',
+          ],
+        ],
+        'filter_align' => ['status' => TRUE],
+        'filter_caption' => ['status' => TRUE],
+      ],
+    ])->save();
+    Editor::create([
+      'editor' => 'ckeditor5',
+      'format' => 'test_format',
+      'settings' => [
+        'toolbar' => [
+          'items' => [
+            'uploadImage',
+            'sourceEditing',
+            'link',
+          ],
+        ],
+        'plugins' => [
+          'ckeditor5_sourceEditing' => [
+            'allowed_tags' => [],
+          ],
+        ],
+      ],
+      'image_upload' => [
+        'status' => TRUE,
+        'scheme' => 'public',
+        'directory' => 'inline-images',
+        'max_size' => '1M',
+        'max_dimensions' => ['width' => 100, 'height' => 100],
+      ],
+    ])->save();
+    $this->assertSame([], array_map(
+      function (ConstraintViolation $v) {
+        return (string) $v->getMessage();
+      },
+      iterator_to_array(CKEditor5::validatePair(
+        Editor::load('test_format'),
+        FilterFormat::load('test_format')
+      ))
+    ));
+    $this->adminUser = $this->drupalCreateUser([
+      'use text format test_format',
+      'bypass node access',
+    ]);
+
+    // Create a sample host entity to embed images in.
+    $this->file = File::create([
+      'uri' => $this->getTestFiles('image')[0]->uri,
+    ]);
+    $this->file->save();
+    $this->drupalCreateContentType(['type' => 'blog']);
+    $this->host = $this->createNode([
+      'type' => 'blog',
+      'title' => 'Animals with strange names',
+      'body' => [
+        'value' => '<p>The pirate is irate.</p>',
+        'format' => 'test_format',
+      ],
+    ]);
+    $this->host->save();
+
+    $this->drupalLogin($this->adminUser);
+  }
+
+  /**
+   * Tests linkability of the image CKEditor widget.
+   *
+   * Due to the complex overrides that `drupalImage.DrupalImage` is making, this
+   * is explicitly testing the "editingDowncast" and "dataDowncast" results.
+   * These are CKEditor 5 concepts.
+   *
+   * @see https://ckeditor.com/docs/ckeditor5/latest/framework/guides/architecture/editing-engine.html#conversion
+   *
+   * @dataProvider providerLinkability
+   */
+  public function testLinkability(string $image_type, bool $unrestricted) {
+    assert($image_type === 'inline' || $image_type === 'block');
+
+    // Disable filter_html.
+    if ($unrestricted) {
+      FilterFormat::load('test_format')
+        ->setFilterConfig('filter_html', ['status' => FALSE])
+        ->save();
+    }
+
+    // Make the test content have either a block image or an inline image.
+    $img_tag = '<img alt="drupalimage test image" data-entity-type="file" data-entity-uuid="' . $this->file->uuid() . '" src="' . $this->file->createFileUrl() . '" />';
+    $this->host->body->value .= $image_type === 'block'
+      ? $img_tag
+      : "<p>$img_tag</p>";
+    $this->host->save();
+    // Adjust the expectations accordingly.
+    $expected_widget_class = $image_type === 'block' ? 'image' : 'image-inline';
+
+    $page = $this->getSession()->getPage();
+
+    $this->drupalGet($this->host->toUrl('edit-form'));
+    $this->waitForEditor();
+    $assert_session = $this->assertSession();
+
+    // Initial state: the image CKEditor Widget is not selected.
+    $drupalimage = $assert_session->waitForElementVisible('css', ".ck-content .ck-widget.$expected_widget_class");
+    $this->assertNotEmpty($drupalimage);
+    $this->assertFalse($drupalimage->hasClass('.ck-widget_selected'));
+
+    // Assert the "editingDowncast" HTML before making changes.
+    $assert_session->elementExists('css', '.ck-content .ck-widget.' . $expected_widget_class . ' > img[src*="image-test.png"][alt="drupalimage test image"]');
+
+    // Assert the "dataDowncast" HTML before making changes.
+    $xpath = new \DOMXPath($this->getEditorDataAsDom());
+    $this->assertNotEmpty($xpath->query('//img[@alt="drupalimage test image"]'));
+    $this->assertEmpty($xpath->query('//a'));
+
+    // Assert the link button is present and not pressed.
+    $link_button = $this->getEditorButton('Link');
+    $this->assertSame('false', $link_button->getAttribute('aria-pressed'));
+
+    // Tests linking images.
+    $drupalimage->click();
+    $this->assertTrue($drupalimage->hasClass('ck-widget_selected'));
+    $this->assertEditorButtonEnabled('Link');
+    // Assert structure of image toolbar balloon.
+    $this->assertVisibleBalloon('.ck-toolbar[aria-label="Image toolbar"]');
+    $link_image_button = $this->getBalloonButton('Link image');
+    // Click the "Link image" button.
+    $this->assertSame('false', $link_image_button->getAttribute('aria-pressed'));
+    $link_image_button->press();
+    // Assert structure of link form balloon.
+    $balloon = $this->assertVisibleBalloon('.ck-link-form');
+    $url_input = $balloon->find('css', '.ck-labeled-field-view__input-wrapper .ck-input-text');
+    // Fill in link form balloon's <input> and hit "Save".
+    $url_input->setValue('http://www.drupal.org/association');
+    $balloon->pressButton('Save');
+
+    // Assert the "editingDowncast" HTML after making changes. First assert the
+    // link exists, then assert the expected DOM structure in detail.
+    $assert_session->elementExists('css', '.ck-content a[href*="//www.drupal.org/association"]');
+    // For inline images, the link is wrapping the widget; for block images the
+    // link lives inside the widget. (This is how it is implemented upstream, it
+    // could be implemented differently, we just want to ensure we do not break
+    // it. Drupal only cares about having its own "dataDowncast", the
+    // "editingDowncast" is considered an implementation detail.)
+    $assert_session->elementExists('css', $image_type === 'inline'
+      ? '.ck-content a[href*="//www.drupal.org/association"] .ck-widget.' . $expected_widget_class . ' > img[src*="image-test.png"][alt="drupalimage test image"]'
+      : '.ck-content .ck-widget.' . $expected_widget_class . ' a[href*="//www.drupal.org/association"] > img[src*="image-test.png"][alt="drupalimage test image"]'
+    );
+
+    // Assert the "dataDowncast" HTML after making changes.
+    $xpath = new \DOMXPath($this->getEditorDataAsDom());
+    $this->assertCount(1, $xpath->query('//a[@href="http://www.drupal.org/association"]/img[@alt="drupalimage test image"]'));
+    $this->assertEmpty($xpath->query('//a[@href="http://www.drupal.org/association" and @class="trusted"]'));
+
+    // Add `class="trusted"` to the link.
+    $xpath = new \DOMXPath($this->getEditorDataAsDom());
+    $this->assertEmpty($xpath->query('//a[@href="http://www.drupal.org/association" and @class="trusted"]'));
+    $this->pressEditorButton('Source');
+    $source_text_area = $assert_session->waitForElement('css', '.ck-source-editing-area textarea');
+    $this->assertNotEmpty($source_text_area);
+    $new_value = str_replace('<a ', '<a class="trusted" ', $source_text_area->getValue());
+    $source_text_area->setValue('<p>temp</p>');
+    $source_text_area->setValue($new_value);
+    $this->pressEditorButton('Source');
+
+    // When unrestricted, additional attributes on links should be retained.
+    $xpath = new \DOMXPath($this->getEditorDataAsDom());
+    $this->assertCount($unrestricted ? 1 : 0, $xpath->query('//a[@href="http://www.drupal.org/association" and @class="trusted"]'));
+
+    // Save the entity whose text field is being edited.
+    $page->pressButton('Save');
+
+    // Assert the HTML the end user sees.
+    $assert_session->elementExists('css', $unrestricted
+      ? 'a[href="http://www.drupal.org/association"].trusted img[src*="image-test.png"]'
+      : 'a[href="http://www.drupal.org/association"] img[src*="image-test.png"]');
+
+    // Go back to edit the now *linked* <drupal-media>. Everything from this
+    // point onwards is effectively testing "upcasting" and proving there is no
+    // data loss.
+    $this->drupalGet($this->host->toUrl('edit-form'));
+    $this->waitForEditor();
+
+    // Assert the "dataDowncast" HTML before making changes.
+    $xpath = new \DOMXPath($this->getEditorDataAsDom());
+    $this->assertNotEmpty($xpath->query('//img[@alt="drupalimage test image"]'));
+    $this->assertNotEmpty($xpath->query('//a[@href="http://www.drupal.org/association"]'));
+    $this->assertNotEmpty($xpath->query('//a[@href="http://www.drupal.org/association"]/img[@alt="drupalimage test image"]'));
+    $this->assertCount($unrestricted ? 1 : 0, $xpath->query('//a[@href="http://www.drupal.org/association" and @class="trusted"]'));
+
+    // Tests unlinking images.
+    $drupalimage->click();
+    $this->assertEditorButtonEnabled('Link');
+    $this->assertSame('true', $this->getEditorButton('Link')->getAttribute('aria-pressed'));
+    // Assert structure of image toolbar balloon.
+    $this->assertVisibleBalloon('.ck-toolbar[aria-label="Image toolbar"]');
+    $link_image_button = $this->getBalloonButton('Link image');
+    $this->assertSame('true', $link_image_button->getAttribute('aria-pressed'));
+    $link_image_button->click();
+    // Assert structure of link actions balloon.
+    $this->getBalloonButton('Edit link');
+    $unlink_image_button = $this->getBalloonButton('Unlink');
+    // Click the "Unlink" button.
+    $unlink_image_button->click();
+    $this->assertSame('false', $this->getEditorButton('Link')->getAttribute('aria-pressed'));
+
+    // Assert the "editingDowncast" HTML after making changes. Assert the
+    // widget exists but not the link, or *any* link for that matter. Then
+    // assert the expected DOM structure in detail.
+    $assert_session->elementExists('css', '.ck-content .ck-widget.' . $expected_widget_class);
+    // @todo Remove the different assertion for the "inline, unrestricted" case when https://www.drupal.org/project/ckeditor5/issues/3247634 is fixed.
+    if ($image_type === 'inline' && $unrestricted) {
+      $assert_session->elementNotExists('css', '.ck-content a[href]');
+      $assert_session->elementExists('css', '.ck-content a.trusted');
+    }
+    else {
+      $assert_session->elementNotExists('css', '.ck-content a');
+    }
+    $assert_session->elementExists('css', '.ck-content .ck-widget.' . $expected_widget_class . ' > img[src*="image-test.png"][alt="drupalimage test image"]');
+
+    // Assert the "dataDowncast" HTML after making changes.
+    $xpath = new \DOMXPath($this->getEditorDataAsDom());
+    $this->assertCount(0, $xpath->query('//a[@href="http://www.drupal.org/association"]/img[@alt="drupalimage test image"]'));
+    $this->assertCount(1, $xpath->query('//img[@alt="drupalimage test image"]'));
+    // @todo Remove the different assertion for the "inline, unrestricted" case when https://www.drupal.org/project/ckeditor5/issues/3247634 is fixed.
+    if ($image_type === 'inline' && $unrestricted) {
+      $this->assertCount(1, $xpath->query('//a'));
+    }
+    else {
+      $this->assertCount(0, $xpath->query('//a'));
+    }
+  }
+
+  public function providerLinkability(): array {
+    return [
+      'BLOCK image, restricted' => ['block', FALSE],
+      'BLOCK image, unrestricted' => ['block', TRUE],
+      'INLINE image, restricted' => ['inline', FALSE],
+      'INLINE image, unrestricted' => ['inline', TRUE],
+    ];
+  }
+
+}
diff --git a/core/modules/ckeditor5/tests/src/FunctionalJavascript/LanguageTest.php b/core/modules/ckeditor5/tests/src/FunctionalJavascript/LanguageTest.php
new file mode 100644
index 000000000000..88d3d0fee00b
--- /dev/null
+++ b/core/modules/ckeditor5/tests/src/FunctionalJavascript/LanguageTest.php
@@ -0,0 +1,74 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\Tests\ckeditor5\FunctionalJavascript;
+
+use Drupal\language\Entity\ConfigurableLanguage;
+
+// cspell:ignore คำพูดบล็อก
+
+/**
+ * Tests for CKEditor 5 UI translations.
+ *
+ * @group ckeditor5
+ * @internal
+ */
+class LanguageTest extends CKEditor5TestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = [
+    'language',
+    'locale',
+  ];
+
+  /**
+   * Integration test to ensure that CKEditor 5 UI translations are loaded.
+   *
+   * @param string $langcode
+   *   The language code.
+   * @param string $blockquote_translation
+   *   The expected translation for blockquote toolbar button.
+   *
+   * @dataProvider provider
+   */
+  public function test(string $langcode, string $blockquote_translation): void {
+    $page = $this->getSession()->getPage();
+    $assert_session = $this->assertSession();
+
+    $this->createNewTextFormat($page, $assert_session);
+    $this->assertNotEmpty($assert_session->waitForElement('css', '.ckeditor5-toolbar-item-blockQuote'));
+    $this->triggerKeyUp('.ckeditor5-toolbar-item-blockQuote', 'ArrowDown');
+    $assert_session->assertWaitOnAjaxRequest();
+    $this->saveNewTextFormat($page, $assert_session);
+
+    ConfigurableLanguage::createFromLangcode($langcode)->save();
+    $this->config('system.site')->set('default_langcode', $langcode)->save();
+
+    $this->drupalGet('node/add');
+    $this->assertNotEmpty($assert_session->waitForElement('css', '.ck-editor'));
+    // Ensure that blockquote button is translated.
+    $assert_session->elementExists('xpath', "//span[text()='$blockquote_translation']");
+  }
+
+  /**
+   * Data provider for ensuring CKEditor 5 UI translations are loaded.
+   *
+   * @return \string[][]
+   */
+  public function provider(): array {
+    return [
+      'Language code both in Drupal and CKEditor' => [
+        'langcode' => 'th',
+        'blockquote_translation' => 'คำพูดบล็อก',
+      ],
+      'Language code transformed from browser mappings' => [
+        'langcode' => 'zh-hans',
+        'blockquote_translation' => '块引用',
+      ],
+    ];
+  }
+
+}
diff --git a/core/modules/ckeditor5/tests/src/FunctionalJavascript/MediaLibraryTest.php b/core/modules/ckeditor5/tests/src/FunctionalJavascript/MediaLibraryTest.php
new file mode 100644
index 000000000000..70b97129f436
--- /dev/null
+++ b/core/modules/ckeditor5/tests/src/FunctionalJavascript/MediaLibraryTest.php
@@ -0,0 +1,253 @@
+<?php
+
+namespace Drupal\Tests\ckeditor5\FunctionalJavascript;
+
+use Drupal\ckeditor5\Plugin\Editor\CKEditor5;
+use Drupal\Component\Utility\Html;
+use Drupal\editor\Entity\Editor;
+use Drupal\file\Entity\File;
+use Drupal\filter\Entity\FilterFormat;
+use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
+use Drupal\media\Entity\Media;
+use Drupal\Tests\media\Traits\MediaTypeCreationTrait;
+use Drupal\Tests\TestFileCreationTrait;
+use Drupal\Tests\ckeditor5\Traits\CKEditor5TestTrait;
+use Symfony\Component\Validator\ConstraintViolation;
+
+/**
+ * @coversDefaultClass \Drupal\ckeditor5\Plugin\CKEditor5Plugin\MediaLibrary
+ * @group ckeditor5
+ * @internal
+ */
+class MediaLibraryTest extends WebDriverTestBase {
+
+  use MediaTypeCreationTrait;
+  use TestFileCreationTrait;
+  use CKEditor5TestTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'classy';
+
+  /**
+   * The user to use during testing.
+   *
+   * @var \Drupal\user\UserInterface
+   */
+  protected $user;
+
+  /**
+   * The media item to embed.
+   *
+   * @var \Drupal\media\MediaInterface
+   */
+  protected $media;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = [
+    'ckeditor5',
+    'media_library',
+    'node',
+    'media',
+    'text',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp(): void {
+    parent::setUp();
+
+    FilterFormat::create([
+      'format' => 'test_format',
+      'name' => 'Test format',
+      'filters' => [
+        'media_embed' => ['status' => TRUE],
+      ],
+    ])->save();
+    Editor::create([
+      'editor' => 'ckeditor5',
+      'format' => 'test_format',
+      'settings' => [
+        'toolbar' => [
+          'items' => [
+            'drupalMedia',
+            'sourceEditing',
+            'undo',
+            'redo',
+          ],
+        ],
+        'plugins' => [
+          'ckeditor5_sourceEditing' => [
+            'allowed_tags' => [],
+          ],
+        ],
+      ],
+    ])->save();
+    $this->assertSame([], array_map(
+      function (ConstraintViolation $v) {
+        return (string) $v->getMessage();
+      },
+      iterator_to_array(CKEditor5::validatePair(
+        Editor::load('test_format'),
+        FilterFormat::load('test_format')
+      ))
+    ));
+
+    $this->drupalCreateContentType(['type' => 'blog']);
+
+    // Note that media_install() grants 'view media' to all users by default.
+    $this->user = $this->drupalCreateUser([
+      'use text format test_format',
+      'access media overview',
+      'create blog content',
+    ]);
+
+    // Create a media type that starts with the letter a, to test tab order.
+    $this->createMediaType('image', ['id' => 'arrakis', 'label' => 'Arrakis']);
+
+    // Create a sample media entity to be embedded.
+    $this->createMediaType('image', ['id' => 'image', 'label' => 'Image']);
+    File::create([
+      'uri' => $this->getTestFiles('image')[0]->uri,
+    ])->save();
+    $this->media = Media::create([
+      'bundle' => 'image',
+      'name' => 'Fear is the mind-killer',
+      'field_media_image' => [
+        [
+          'target_id' => 1,
+          'alt' => 'default alt',
+          'title' => 'default title',
+        ],
+      ],
+    ]);
+    $this->media->save();
+
+    $arrakis_media = Media::create([
+      'bundle' => 'arrakis',
+      'name' => 'Le baron Vladimir Harkonnen',
+      'field_media_image' => [
+        [
+          'target_id' => 1,
+          'alt' => 'Il complote pour détruire le duc Leto',
+          'title' => 'Il complote pour détruire le duc Leto',
+        ],
+      ],
+    ]);
+    $arrakis_media->save();
+
+    $this->drupalLogin($this->user);
+  }
+
+  /**
+   * Tests using drupalMedia button to embed media into CKEditor 5.
+   */
+  public function testButton() {
+    $this->drupalGet('/node/add/blog');
+    $this->waitForEditor();
+    $this->pressEditorButton('Insert Drupal Media');
+    $assert_session = $this->assertSession();
+    $page = $this->getSession()->getPage();
+    $this->assertNotEmpty($assert_session->waitForId('drupal-modal'));
+
+    // Ensure that the tab order is correct.
+    $tabs = $page->findAll('css', '.media-library-menu__link');
+    $expected_tab_order = [
+      'Show Image media (selected)',
+      'Show Arrakis media',
+    ];
+    foreach ($tabs as $key => $tab) {
+      $this->assertSame($expected_tab_order[$key], $tab->getText());
+    }
+
+    $assert_session->pageTextContains('0 of 1 item selected');
+    $assert_session->elementExists('css', '.js-media-library-item')->click();
+    $assert_session->pageTextContains('1 of 1 item selected');
+    $assert_session->elementExists('css', '.ui-dialog-buttonpane')->pressButton('Insert selected');
+    $this->assertNotEmpty($assert_session->waitForElementVisible('css', '.ck-content .ck-widget.drupal-media .media', 1000));
+    $this->pressEditorButton('Source');
+    $value = $assert_session->elementExists('css', '.ck-source-editing-area textarea')->getValue();
+    $dom = Html::load($value);
+    $xpath = new \DOMXPath($dom);
+    $drupal_media = $xpath->query('//drupal-media')[0];
+    $expected_attributes = [
+      'data-entity-type' => 'media',
+      'data-entity-uuid' => $this->media->uuid(),
+      'data-align' => 'center',
+    ];
+    foreach ($expected_attributes as $name => $expected) {
+      $this->assertSame($expected, $drupal_media->getAttribute($name));
+    }
+    $this->pressEditorButton('Source');
+    $this->assertNotEmpty($assert_session->waitForElementVisible('css', '.ck-content .ck-widget.drupal-media .media', 1000));
+    $this->assertEditorButtonEnabled('Undo');
+    $this->pressEditorButton('Undo');
+    $this->assertEmpty($assert_session->waitForElementVisible('css', '.ck-content .ck-widget.drupal-media .media', 1000));
+    $this->assertEditorButtonDisabled('Undo');
+    $this->pressEditorButton('Redo');
+    $this->assertEditorButtonEnabled('Undo');
+  }
+
+  /**
+   * Tests the allowed media types setting on the MediaEmbed filter.
+   */
+  public function testAllowedMediaTypes() {
+    $test_cases = [
+      'all_media_types' => [],
+      'only_image' => ['image' => 'image'],
+      'only_arrakis' => ['arrakis' => 'arrakis'],
+      'both_items_checked' => [
+        'image' => 'image',
+        'arrakis' => 'arrakis',
+      ],
+    ];
+
+    foreach ($test_cases as $allowed_media_types) {
+      // Update the filter format to set the allowed media types.
+      FilterFormat::load('test_format')
+        ->setFilterConfig('media_embed', [
+          'status' => TRUE,
+          'settings' => [
+            'default_view_mode' => 'view_mode_1',
+            'allowed_media_types' => $allowed_media_types,
+            'allowed_view_modes' => [
+              'view_mode_1' => 'view_mode_1',
+              'view_mode_2' => 'view_mode_2',
+            ],
+          ],
+        ])->save();
+
+      // Now test opening the media library from the CKEditor plugin, and
+      // verify the expected behavior.
+      $this->drupalGet('/node/add/blog');
+      $this->waitForEditor();
+      $this->pressEditorButton('Insert Drupal Media');
+
+      $assert_session = $this->assertSession();
+      $this->assertNotEmpty($assert_session->waitForId('media-library-wrapper'));
+
+      if (empty($allowed_media_types) || count($allowed_media_types) === 2) {
+        $assert_session->elementExists('css', 'li.media-library-menu-image');
+        $assert_session->elementExists('css', 'li.media-library-menu-arrakis');
+        $assert_session->elementTextContains('css', '.media-library-item__name', 'Fear is the mind-killer');
+      }
+      elseif (count($allowed_media_types) === 1 && !empty($allowed_media_types['image'])) {
+        // No tabs should appear if there's only one media type available.
+        $assert_session->elementNotExists('css', 'li.media-library-menu-image');
+        $assert_session->elementNotExists('css', 'li.media-library-menu-arrakis');
+        $assert_session->elementTextContains('css', '.media-library-item__name', 'Fear is the mind-killer');
+      }
+      elseif (count($allowed_media_types) === 1 && !empty($allowed_media_types['arrakis'])) {
+        // No tabs should appear if there's only one media type available.
+        $assert_session->elementNotExists('css', 'li.media-library-menu-image');
+        $assert_session->elementNotExists('css', 'li.media-library-menu-arrakis');
+        $assert_session->elementTextContains('css', '.media-library-item__name', 'Le baron Vladimir Harkonnen');
+      }
+    }
+  }
+
+}
diff --git a/core/modules/ckeditor5/tests/src/FunctionalJavascript/MediaTest.php b/core/modules/ckeditor5/tests/src/FunctionalJavascript/MediaTest.php
new file mode 100644
index 000000000000..0d3f6fe7542a
--- /dev/null
+++ b/core/modules/ckeditor5/tests/src/FunctionalJavascript/MediaTest.php
@@ -0,0 +1,704 @@
+<?php
+
+namespace Drupal\Tests\ckeditor5\FunctionalJavascript;
+
+use Drupal\editor\Entity\Editor;
+use Drupal\file\Entity\File;
+use Drupal\filter\Entity\FilterFormat;
+use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
+use Drupal\media\Entity\Media;
+use Drupal\Tests\media\Traits\MediaTypeCreationTrait;
+use Drupal\Tests\TestFileCreationTrait;
+use Drupal\Tests\ckeditor5\Traits\CKEditor5TestTrait;
+use Drupal\ckeditor5\Plugin\Editor\CKEditor5;
+use Symfony\Component\Validator\ConstraintViolation;
+
+/**
+ * @coversDefaultClass \Drupal\ckeditor5\Plugin\CKEditor5Plugin\Media
+ * @group ckeditor5
+ * @internal
+ */
+class MediaTest extends WebDriverTestBase {
+
+  use CKEditor5TestTrait;
+  use MediaTypeCreationTrait;
+  use TestFileCreationTrait;
+
+  /**
+   * The user to use during testing.
+   *
+   * @var \Drupal\user\UserInterface
+   */
+  protected $adminUser;
+
+  /**
+   * The sample Media entity to embed.
+   *
+   * @var \Drupal\media\MediaInterface
+   */
+  protected $media;
+
+  /**
+   * A host entity with a body field to embed media in.
+   *
+   * @var \Drupal\node\NodeInterface
+   */
+  protected $host;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = [
+    'ckeditor5',
+    'media',
+    'node',
+    'text',
+    'media_test_embed',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'classy';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp(): void {
+    parent::setUp();
+
+    FilterFormat::create([
+      'format' => 'test_format',
+      'name' => 'Test format',
+      'filters' => [
+        'filter_html' => [
+          'status' => TRUE,
+          'settings' => [
+            'allowed_html' => '<p> <br> <a href> <drupal-media data-entity-type data-entity-uuid alt>',
+          ],
+        ],
+        'filter_align' => ['status' => TRUE],
+        'filter_caption' => ['status' => TRUE],
+        'media_embed' => ['status' => TRUE],
+      ],
+    ])->save();
+    Editor::create([
+      'editor' => 'ckeditor5',
+      'format' => 'test_format',
+      'settings' => [
+        'toolbar' => [
+          'items' => [
+            'sourceEditing',
+            'link',
+          ],
+        ],
+        'plugins' => [
+          'ckeditor5_sourceEditing' => [
+            'allowed_tags' => [],
+          ],
+        ],
+      ],
+      'image_upload' => [
+        'status' => FALSE,
+      ],
+    ])->save();
+    $this->assertSame([], array_map(
+      function (ConstraintViolation $v) {
+        return (string) $v->getMessage();
+      },
+      iterator_to_array(CKEditor5::validatePair(
+        Editor::load('test_format'),
+        FilterFormat::load('test_format')
+      ))
+    ));
+
+    // Note that media_install() grants 'view media' to all users by default.
+    $this->adminUser = $this->drupalCreateUser([
+      'use text format test_format',
+      'bypass node access',
+    ]);
+
+    // Create a sample media entity to be embedded.
+    $this->createMediaType('image', ['id' => 'image']);
+    File::create([
+      'uri' => $this->getTestFiles('image')[0]->uri,
+    ])->save();
+    $this->media = Media::create([
+      'bundle' => 'image',
+      'name' => 'Screaming hairy armadillo',
+      'field_media_image' => [
+        [
+          'target_id' => 1,
+          'alt' => 'default alt',
+          'title' => 'default title',
+        ],
+      ],
+    ]);
+    $this->media->save();
+
+    // Create a sample host entity to embed media in.
+    $this->drupalCreateContentType(['type' => 'blog']);
+    $this->host = $this->createNode([
+      'type' => 'blog',
+      'title' => 'Animals with strange names',
+      'body' => [
+        'value' => '<drupal-media data-caption="baz" data-entity-type="media" data-entity-uuid="' . $this->media->uuid() . '"></drupal-media>',
+        'format' => 'test_format',
+      ],
+    ]);
+    $this->host->save();
+
+    $this->drupalLogin($this->adminUser);
+  }
+
+  /**
+   * Tests that only <drupal-media> tags are processed.
+   *
+   * @see \Drupal\Tests\media\Kernel\MediaEmbedFilterTest::testOnlyDrupalMediaTagProcessed()
+   */
+  public function testOnlyDrupalMediaTagProcessed() {
+    $original_value = $this->host->body->value;
+    $this->host->body->value = str_replace('drupal-media', 'p', $original_value);
+    $this->host->save();
+
+    // Assert that `<p data-* …>` is not upcast into a CKEditor Widget.
+    $this->drupalGet($this->host->toUrl('edit-form'));
+    $this->waitForEditor();
+    $assert_session = $this->assertSession();
+    $this->assertEmpty($assert_session->waitForElementVisible('css', 'img[src*="image-test.png"]', 1000));
+    $assert_session->elementNotExists('css', '.ck-widget.drupal-media');
+
+    $this->host->body->value = $original_value;
+    $this->host->save();
+
+    // Assert that `<drupal-media data-* …>` is upcast into a CKEditor Widget.
+    $this->getSession()->reload();
+    $this->waitForEditor();
+    $this->assertNotEmpty($assert_session->waitForElementVisible('css', 'img[src*="image-test.png"]'));
+    $assert_session->elementExists('css', '.ck-widget.drupal-media');
+  }
+
+  /**
+   * Tests that failed media embed preview requests inform the end user.
+   */
+  public function testErrorMessages() {
+    // Assert that a request to the `media.filter.preview` route that does not
+    // result in a 200 response (due to server error or network error) is
+    // handled in the JavaScript by displaying the expected error message.
+    // @see core/modules/media/js/media_embed_ckeditor.theme.js
+    // @see js/ckeditor5_plugins/drupalMedia/src/drupalmediaediting.js
+    $this->container->get('state')->set('test_media_filter_controller_throw_error', TRUE);
+    $this->drupalGet($this->host->toUrl('edit-form'));
+    $this->waitForEditor();
+    $assert_session = $this->assertSession();
+    $assert_session->waitForElementVisible('css', '.ck-widget.drupal-media');
+    $this->assertEmpty($assert_session->waitForElementVisible('css', 'img[src*="image-test.png"]', 1000));
+    $assert_session->elementNotExists('css', '.ck-widget.drupal-media .media');
+    $this->assertNotEmpty($assert_session->waitForText('An error occurred while trying to preview the media. Please save your work and reload this page.'));
+    // Now assert that the error doesn't appear when the override to force an
+    // error is removed.
+    $this->container->get('state')->set('test_media_filter_controller_throw_error', FALSE);
+    $this->getSession()->reload();
+    $this->waitForEditor();
+    $this->assertNotEmpty($assert_session->waitForElementVisible('css', 'img[src*="image-test.png"]'));
+
+    // There's a second kind of error message that comes from the back end
+    // that happens when the media uuid can't be converted to a media preview.
+    // In this case, the error will appear in a the themeable
+    // media-embed-error.html template.  We have a hook altering the css
+    // classes to test the twig template is working properly and picking up our
+    // extra class.
+    // @see \Drupal\media\Plugin\Filter\MediaEmbed::renderMissingMediaIndicator()
+    // @see core/modules/media/templates/media-embed-error.html.twig
+    // @see media_test_embed_preprocess_media_embed_error()
+    $original_value = $this->host->body->value;
+    $this->host->body->value = str_replace($this->media->uuid(), 'invalid_uuid', $original_value);
+    $this->host->save();
+    $this->drupalGet($this->host->toUrl('edit-form'));
+    $this->waitForEditor();
+    $this->assertNotEmpty($assert_session->waitForElement('css', '.ck-widget.drupal-media .this-error-message-is-themeable'));
+
+    // Test when using the classy theme, an additional class is added in
+    // classy/templates/content/media-embed-error.html.twig.
+    $this->assertTrue($this->container->get('theme_installer')->install(['classy']));
+    $this->config('system.theme')
+      ->set('default', 'classy')
+      ->save();
+    $this->drupalGet($this->host->toUrl('edit-form'));
+    $this->waitForEditor();
+    $this->assertNotEmpty($assert_session->waitForElement('css', '.ck-widget.drupal-media .this-error-message-is-themeable.media-embed-error--missing-source'));
+    // @todo Uncomment this in https://www.drupal.org/project/ckeditor5/issues/3194084.
+    // @codingStandardsIgnoreLine
+    //$assert_session->responseContains('classy/css/components/media-embed-error.css');
+
+    // Test that restoring a valid UUID results in the media embed preview
+    // displaying.
+    $this->host->body->value = $original_value;
+    $this->host->save();
+    $this->drupalGet($this->host->toUrl('edit-form'));
+    $this->waitForEditor();
+    $this->assertNotEmpty($assert_session->waitForElementVisible('css', 'img[src*="image-test.png"]'));
+    $assert_session->elementNotExists('css', '.ck-widget.drupal-media .this-error-message-is-themeable');
+  }
+
+  /**
+   * The CKEditor Widget must load a preview generated using the default theme.
+   */
+  public function testPreviewUsesDefaultThemeAndIsClientCacheable() {
+    // Make the node edit form use the admin theme, like on most Drupal sites.
+    $this->config('node.settings')
+      ->set('use_admin_theme', TRUE)
+      ->save();
+
+    // Allow the test user to view the admin theme.
+    $this->adminUser->addRole($this->drupalCreateRole(['view the administration theme']));
+    $this->adminUser->save();
+
+    // Configure a different default and admin theme, like on most Drupal sites.
+    $this->config('system.theme')
+      ->set('default', 'stable')
+      ->set('admin', 'classy')
+      ->save();
+
+    // Assert that when looking at an embedded entity in the CKEditor Widget,
+    // the preview is generated using the default theme, not the admin theme.
+    // @see media_test_embed_entity_view_alter()
+    $this->drupalGet($this->host->toUrl('edit-form'));
+    $this->waitForEditor();
+    $assert_session = $this->assertSession();
+    $this->assertNotEmpty($assert_session->waitForElementVisible('css', 'img[src*="image-test.png"]'));
+    $element = $assert_session->elementExists('css', '[data-media-embed-test-active-theme]');
+    $this->assertSame('stable', $element->getAttribute('data-media-embed-test-active-theme'));
+    // Assert that the first preview request transferred >500 B over the wire.
+    // Then toggle source mode on and off. This causes the CKEditor widget to be
+    // destroyed and then reconstructed. Assert that during this reconstruction,
+    // a second request is sent. This second request should have transferred 0
+    // bytes: the browser should have cached the response, thus resulting in a
+    // much better user experience.
+    $this->assertGreaterThan(500, $this->getLastPreviewRequestTransferSize());
+    $this->pressEditorButton('Source');
+    $this->assertNotEmpty($assert_session->waitForElement('css', '.ck-source-editing-area'));
+    // CKEditor 5 is very smart: if no changes were made in the Source Editing
+    // Area, it will not rerender the contents. In this test, we
+    // want to verify that Media preview responses are cached on the client side
+    // so it is essential that rerendering occurs. To achieve this, we append a
+    // single space.
+    $source_text_area = $this->getSession()->getPage()->find('css', '[name="body[0][value]"] + .ck-editor textarea');
+    $source_text_area->setValue($source_text_area->getValue() . ' ');
+    $this->pressEditorButton('Source');
+    $this->assertNotEmpty($assert_session->waitForElementVisible('css', 'img[src*="image-test.png"]'));
+    $this->assertSame(0, $this->getLastPreviewRequestTransferSize());
+  }
+
+  /**
+   * Tests caption editing in the CKEditor widget.
+   */
+  public function testEditableCaption() {
+    // @todo Port in https://www.drupal.org/project/ckeditor5/issues/3246385
+    $this->markTestSkipped('Blocked on https://www.drupal.org/project/ckeditor5/issues/3246385.');
+  }
+
+  /**
+   * Tests the EditorMediaDialog's form elements' #access logic.
+   */
+  public function testDialogAccess() {
+    // @todo Port in https://www.drupal.org/project/ckeditor5/issues/3245720
+    $this->markTestSkipped('Blocked on https://www.drupal.org/project/ckeditor5/issues/3245720.');
+  }
+
+  /**
+   * Tests the CKEditor 5 media plugin can override image media's alt attribute.
+   */
+  public function testAlt() {
+    $page = $this->getSession()->getPage();
+    $assert_session = $this->assertSession();
+    $this->drupalGet($this->host->toUrl('edit-form'));
+    $this->waitForEditor();
+    // Wait for the media preview to load.
+    $this->assertNotEmpty($assert_session->waitForElementVisible('css', '.ck-widget.drupal-media img'));
+    // Test that by default no alt attribute is present on the drupal-media
+    // element.
+    $this->assertSourceAttributeSame('alt', NULL);
+    // Test that the preview shows the alt value from the media field's
+    // alt text.
+    $this->assertNotEmpty($assert_session->waitForElementVisible('css', '.ck-widget.drupal-media img[alt*="default alt"]'));
+    // Test that clicking the media widget triggers a CKEditor balloon panel
+    // with a single button to override the alt text.
+    $this->click('.ck-widget.drupal-media');
+    $this->assertVisibleBalloon('[aria-label="Drupal Media toolbar"]');
+    // Click the "Override media image text alternative" button.
+    $this->getBalloonButton('Override media image text alternative')->click();
+    $this->assertVisibleBalloon('.ck-text-alternative-form');
+    // Assert that the value is currently empty.
+    // @todo Consider changing this in https://www.drupal.org/project/ckeditor5/issues/3246365.
+    $alt_override_input = $page->find('css', '.ck-balloon-panel .ck-text-alternative-form input[type=text]');
+    $this->assertSame('', $alt_override_input->getValue());
+
+    // Fill in the alt field and submit.
+    // cSpell:disable-next-line
+    $who_is_zartan = 'Zartan is the leader of the Dreadnoks.';
+    $alt_override_input->setValue($who_is_zartan);
+    $this->getBalloonButton('Save')->click();
+
+    // Assert that the img within the media embed within the CKEditor contains
+    // the overridden alt text set in the dialog.
+    // @todo Uncomment this in https://www.drupal.org/project/ckeditor5/issues/3206522.
+    // @codingStandardsIgnoreLine
+//    $this->assertNotEmpty($assert_session->waitForElementVisible('css', '.ck-widget.drupal-media img[alt*="' . $who_is_zartan . '"]'));
+    // Test `aria-label` attribute appears on the widget wrapper.
+    $assert_session->elementExists('css', '.ck-widget.drupal-media [aria-label="Screaming hairy armadillo"]');
+
+    // Test that the downcast drupal-media element now has the alt attribute
+    // entered in the dialog.
+    $this->assertSourceAttributeSame('alt', $who_is_zartan);
+
+    // The alt field should now display the override instead of the default.
+    $this->getBalloonButton('Override media image text alternative')->click();
+    $this->assertVisibleBalloon('.ck-text-alternative-form');
+    $alt_override_input = $page->find('css', '.ck-balloon-panel .ck-text-alternative-form input[type=text]');
+    $this->assertSame($who_is_zartan, $alt_override_input->getValue());
+
+    // Test the process again with a different alt text to make sure it works
+    // the second time around.
+    $cobra_commander_bio = 'The supreme leader of the terrorist organization Cobra';
+    // Set the alt field to the new alt text.
+    $alt_override_input->setValue($cobra_commander_bio);
+    $this->getBalloonButton('Save')->click();
+    // Assert that the img within the media embed preview
+    // within the CKEditor contains the overridden alt text set in the dialog.
+    // @todo Uncomment this in https://www.drupal.org/project/ckeditor5/issues/3206522.
+    // @codingStandardsIgnoreLine
+//    $this->assertNotEmpty($assert_session->waitForElementVisible('css', 'drupal-media img[alt*="' . $cobra_commander_bio . '"]'));
+
+    // Test that the downcast drupal-media element now has the alt attribute
+    // entered in the dialog.
+    $this->assertSourceAttributeSame('alt', $cobra_commander_bio);
+
+    // The default value of the alt field should now display the override
+    // instead of the value on the media image field.
+    $this->getBalloonButton('Override media image text alternative')->click();
+    $this->assertVisibleBalloon('.ck-text-alternative-form');
+    $alt_override_input = $page->find('css', '.ck-balloon-panel .ck-text-alternative-form input[type=text]');
+    $this->assertSame($cobra_commander_bio, $alt_override_input->getValue());
+
+    // Test that setting alt value to two double quotes will signal to the
+    // MediaEmbed filter to unset the attribute on the media image field.
+    // We intentionally add a space space after the two double quotes to test
+    // the string is trimmed to two quotes.
+    $alt_override_input->setValue('"" ');
+    $this->getBalloonButton('Save')->click();
+    // Verify that the two double quote empty alt indicator ('""') set in
+    // the dialog has successfully resulted in a media image field with the
+    // alt attribute present but without a value.
+    // @todo Uncomment this in https://www.drupal.org/project/ckeditor5/issues/3206522.
+    // @codingStandardsIgnoreLine
+//    $this->assertNotEmpty($assert_session->waitForElementVisible('css', 'drupal-media img[alt=""]'));
+
+    // Test that the downcast drupal-media element's alt attribute now has the
+    // empty string indicator.
+    $this->assertSourceAttributeSame('alt', '""');
+
+    // Test that setting alt to back to an empty string within the dialog will
+    // restore the default alt value saved in to the media image field of the
+    // media item.
+    $this->getBalloonButton('Override media image text alternative')->click();
+    $this->assertVisibleBalloon('.ck-text-alternative-form');
+    $alt_override_input = $page->find('css', '.ck-balloon-panel .ck-text-alternative-form input[type=text]');
+    $alt_override_input->setValue('');
+    $this->getBalloonButton('Save')->click();
+    $this->assertNotEmpty($assert_session->waitForElementVisible('css', '.ck-widget.drupal-media img[alt*="default alt"]'));
+
+    // Test that the downcast drupal-media element no longer has an alt
+    // attribute.
+    $this->assertSourceAttributeSame('alt', NULL);
+  }
+
+  /**
+   * Tests the CKEditor 5 media plugin loads the translated alt attribute.
+   */
+  public function testTranslationAlt() {
+    // @todo Port in https://www.drupal.org/project/ckeditor5/issues/3246365
+    $this->markTestSkipped('Blocked on https://www.drupal.org/project/ckeditor5/issues/3246365.');
+  }
+
+  /**
+   * Tests linkability of the media CKEditor widget.
+   *
+   * Due to the very different HTML markup generated for the editing view and
+   * the data view, this is explicitly testing the "editingDowncast" and
+   * "dataDowncast" results. These are CKEditor 5 concepts.
+   *
+   * @see https://ckeditor.com/docs/ckeditor5/latest/framework/guides/architecture/editing-engine.html#conversion
+   *
+   * @dataProvider providerLinkability
+   */
+  public function testLinkability(bool $unrestricted) {
+    // Disable filter_html.
+    if ($unrestricted) {
+      FilterFormat::load('test_format')
+        ->setFilterConfig('filter_html', ['status' => FALSE])
+        ->save();
+    }
+
+    $page = $this->getSession()->getPage();
+
+    $this->drupalGet($this->host->toUrl('edit-form'));
+    $this->waitForEditor();
+    $assert_session = $this->assertSession();
+
+    // Initial state: the Drupal Media CKEditor Widget is not selected.
+    $drupalmedia = $assert_session->waitForElementVisible('css', '.ck-content .ck-widget.drupal-media');
+    $this->assertNotEmpty($drupalmedia);
+    $this->assertFalse($drupalmedia->hasClass('.ck-widget_selected'));
+
+    // Assert the "editingDowncast" HTML before making changes.
+    $assert_session->elementExists('css', '.ck-content .ck-widget.drupal-media > [data-drupal-media-preview]');
+
+    // Assert the "dataDowncast" HTML before making changes.
+    $xpath = new \DOMXPath($this->getEditorDataAsDom());
+    $this->assertNotEmpty($xpath->query('//drupal-media'));
+    $this->assertEmpty($xpath->query('//a'));
+
+    // Assert the link button is present and not pressed.
+    $link_button = $this->getEditorButton('Link');
+    $this->assertSame('false', $link_button->getAttribute('aria-pressed'));
+
+    // Wait for the preview to load.
+    $preview = $assert_session->waitForElement('css', '.ck-content .ck-widget.drupal-media [data-drupal-media-preview="ready"]');
+    $this->assertNotEmpty($preview);
+
+    // Tests linking Drupal media.
+    $drupalmedia->click();
+    $this->assertTrue($drupalmedia->hasClass('ck-widget_selected'));
+    $this->assertEditorButtonEnabled('Link');
+    // Assert structure of image toolbar balloon.
+    $this->assertVisibleBalloon('.ck-toolbar[aria-label="Drupal Media toolbar"]');
+    $link_media_button = $this->getBalloonButton('Link media');
+    // Click the "Link media" button.
+    $this->assertSame('false', $link_media_button->getAttribute('aria-pressed'));
+    $link_media_button->press();
+    // Assert structure of link form balloon.
+    $balloon = $this->assertVisibleBalloon('.ck-link-form');
+    $url_input = $balloon->find('css', '.ck-labeled-field-view__input-wrapper .ck-input-text');
+    // Fill in link form balloon's <input> and hit "Save".
+    $url_input->setValue('http://linking-embedded-media.com');
+    $balloon->pressButton('Save');
+
+    // Assert the "editingDowncast" HTML after making changes. Assert the link
+    // exists, then assert the link exists. Then assert the expected DOM
+    // structure in detail.
+    $assert_session->elementExists('css', '.ck-content a[href="http://linking-embedded-media.com"]');
+    $assert_session->elementExists('css', '.ck-content .drupal-media.ck-widget > a[href="http://linking-embedded-media.com"] > div[aria-label] > article > div > img[src*="image-test.png"]');
+
+    // Assert the "dataDowncast" HTML after making changes.
+    $xpath = new \DOMXPath($this->getEditorDataAsDom());
+    $this->assertNotEmpty($xpath->query('//drupal-media'));
+    $this->assertNotEmpty($xpath->query('//a[@href="http://linking-embedded-media.com"]'));
+    $this->assertNotEmpty($xpath->query('//a[@href="http://linking-embedded-media.com"]/drupal-media'));
+
+    // Add `class="trusted"` to the link.
+    $this->assertEmpty($xpath->query('//a[@href="http://linking-embedded-media.com" and @class="trusted"]'));
+    $this->pressEditorButton('Source');
+    $source_text_area = $assert_session->waitForElement('css', '.ck-source-editing-area textarea');
+    $this->assertNotEmpty($source_text_area);
+    $new_value = str_replace('<a ', '<a class="trusted" ', $source_text_area->getValue());
+    $source_text_area->setValue('<p>temp</p>');
+    $source_text_area->setValue($new_value);
+    $this->pressEditorButton('Source');
+
+    // When unrestricted, additional attributes on links should be retained.
+    $xpath = new \DOMXPath($this->getEditorDataAsDom());
+    $this->assertCount($unrestricted ? 1 : 0, $xpath->query('//a[@href="http://linking-embedded-media.com" and @class="trusted"]'));
+
+    // Save the entity whose text field is being edited.
+    $page->pressButton('Save');
+
+    // Assert the HTML the end user sees.
+
+    $assert_session->elementExists('css', $unrestricted
+      ? 'a[href="http://linking-embedded-media.com"].trusted img[src*="image-test.png"]'
+      : 'a[href="http://linking-embedded-media.com"] img[src*="image-test.png"]');
+
+    // Go back to edit the now *linked* <drupal-media>. Everything from this
+    // point onwards is effectively testing "upcasting" and proving there is no
+    // data loss.
+    $this->drupalGet($this->host->toUrl('edit-form'));
+    $this->waitForEditor();
+
+    // Assert the "dataDowncast" HTML before making changes.
+    $xpath = new \DOMXPath($this->getEditorDataAsDom());
+    $this->assertNotEmpty($xpath->query('//drupal-media'));
+    $this->assertNotEmpty($xpath->query('//a[@href="http://linking-embedded-media.com"]'));
+    $this->assertNotEmpty($xpath->query('//a[@href="http://linking-embedded-media.com"]/drupal-media'));
+
+    // Tests unlinking media.
+    $drupalmedia->click();
+    $this->assertEditorButtonEnabled('Link');
+    $this->assertSame('true', $this->getEditorButton('Link')->getAttribute('aria-pressed'));
+    // Assert structure of Drupal media toolbar balloon.
+    $this->assertVisibleBalloon('.ck-toolbar[aria-label="Drupal Media toolbar"]');
+    $link_media_button = $this->getBalloonButton('Link media');
+    $this->assertSame('true', $link_media_button->getAttribute('aria-pressed'));
+    $link_media_button->click();
+    // Assert structure of link actions balloon.
+    $this->getBalloonButton('Edit link');
+    $unlink_image_button = $this->getBalloonButton('Unlink');
+    // Click the "Unlink" button.
+    $unlink_image_button->click();
+    $this->assertSame('false', $this->getEditorButton('Link')->getAttribute('aria-pressed'));
+
+    // Assert the "editingDowncast" HTML after making changes. Assert the link
+    // exists, then assert no link exists. Then assert the expected DOM
+    // structure in detail.
+    $assert_session->elementNotExists('css', '.ck-content a');
+    $assert_session->elementExists('css', '.ck-content .drupal-media.ck-widget > div[aria-label] > article > div > img[src*="image-test.png"]');
+
+    // Assert the "dataDowncast" HTML after making changes.
+    $xpath = new \DOMXPath($this->getEditorDataAsDom());
+    $this->assertNotEmpty($xpath->query('//drupal-media'));
+    $this->assertEmpty($xpath->query('//a'));
+  }
+
+  public function providerLinkability(): array {
+    return [
+      'restricted' => [FALSE],
+      'unrestricted' => [TRUE],
+    ];
+  }
+
+  /**
+   * Tests preview route access.
+   *
+   * @param bool $media_embed_enabled
+   *   Whether to test with media_embed filter enabled on the text format.
+   * @param bool $can_use_format
+   *   Whether the logged in user is allowed to use the text format.
+   *
+   * @dataProvider previewAccessProvider
+   */
+  public function testEmbedPreviewAccess($media_embed_enabled, $can_use_format) {
+    // Reconfigure the host entity's text format to suit our needs.
+    /** @var \Drupal\filter\FilterFormatInterface $format */
+    $format = FilterFormat::load($this->host->body->format);
+    $format->set('filters', [
+      'filter_align' => ['status' => TRUE],
+      'filter_caption' => ['status' => TRUE],
+      'media_embed' => ['status' => $media_embed_enabled],
+    ]);
+    $format->save();
+
+    $permissions = [
+      'bypass node access',
+    ];
+    if ($can_use_format) {
+      $permissions[] = $format->getPermissionName();
+    }
+    $this->drupalLogin($this->drupalCreateUser($permissions));
+    $this->drupalGet($this->host->toUrl('edit-form'));
+
+    $assert_session = $this->assertSession();
+    if ($can_use_format) {
+      $this->waitForEditor();
+      if ($media_embed_enabled) {
+        // The preview rendering, which in this test will use Classy's
+        // media.html.twig template, will fail without the CSRF token/header.
+        // @see ::testEmbeddedMediaPreviewWithCsrfToken()
+        $this->assertNotEmpty($assert_session->waitForElementVisible('css', 'article.media'));
+      }
+      else {
+        // If the filter isn't enabled, there won't be an error, but the
+        // preview shouldn't be rendered.
+        $assert_session->assertWaitOnAjaxRequest();
+        $assert_session->elementNotExists('css', 'article.media');
+      }
+    }
+    else {
+      $assert_session->pageTextContains('This field has been disabled because you do not have sufficient permissions to edit it.');
+    }
+  }
+
+  /**
+   * Data provider for ::testEmbedPreviewAccess.
+   */
+  public function previewAccessProvider() {
+    return [
+      'media_embed filter enabled' => [
+        TRUE,
+        TRUE,
+      ],
+      'media_embed filter disabled' => [
+        FALSE,
+        TRUE,
+      ],
+      'media_embed filter enabled, user not allowed to use text format' => [
+        TRUE,
+        FALSE,
+      ],
+    ];
+  }
+
+  /**
+   * Tests alignment integration.
+   *
+   * Tests that alignment is reflected onto the CKEditor Widget wrapper, that
+   * the EditorMediaDialog allows altering the alignment and that the changes
+   * are reflected on the widget and downcast drupal-media tag.
+   */
+  public function testAlignment() {
+    // @todo Port in https://www.drupal.org/project/ckeditor5/issues/3246385
+    $this->markTestSkipped('Blocked on https://www.drupal.org/project/ckeditor5/issues/3246385.');
+  }
+
+  /**
+   * Tests the EditorMediaDialog can set the data-view-mode attribute.
+   */
+  public function testViewMode() {
+    // @todo Port in https://www.drupal.org/project/ckeditor5/issues/3245720
+    $this->markTestSkipped('Blocked on https://www.drupal.org/project/ckeditor5/issues/3245720.');
+  }
+
+  /**
+   * Verifies value of an attribute on the downcast <drupal-media> element.
+   *
+   * Assumes CKEditor is in source mode.
+   *
+   * @param string $attribute
+   *   The attribute to check.
+   * @param mixed $value
+   *   Either a string value or if NULL, asserts that <drupal-media> element
+   *   doesn't have the attribute.
+   */
+  protected function assertSourceAttributeSame($attribute, $value) {
+    $dom = $this->getEditorDataAsDom();
+    $drupal_media = (new \DOMXPath($dom))->query('//drupal-media');
+    $this->assertNotEmpty($drupal_media);
+    if ($value === NULL) {
+      $this->assertFalse($drupal_media[0]->hasAttribute($attribute));
+    }
+    else {
+      $this->assertSame($value, $drupal_media[0]->getAttribute($attribute));
+    }
+  }
+
+  /**
+   * Gets the transfer size of the last preview request.
+   *
+   * @return int
+   *   The size of the bytes transferred.
+   */
+  protected function getLastPreviewRequestTransferSize() {
+    $javascript = <<<JS
+(function(){
+  return window.performance
+    .getEntries()
+    .filter(function (entry) {
+      return entry.initiatorType == 'fetch' && entry.name.indexOf('/media/test_format/preview') !== -1;
+    })
+    .pop()
+    .transferSize;
+})()
+JS;
+    return $this->getSession()->evaluateScript($javascript);
+  }
+
+}
diff --git a/core/modules/ckeditor5/tests/src/FunctionalJavascript/QuickEditIntegrationTest.php b/core/modules/ckeditor5/tests/src/FunctionalJavascript/QuickEditIntegrationTest.php
new file mode 100644
index 000000000000..feeffc2051f6
--- /dev/null
+++ b/core/modules/ckeditor5/tests/src/FunctionalJavascript/QuickEditIntegrationTest.php
@@ -0,0 +1,288 @@
+<?php
+
+namespace Drupal\Tests\ckeditor5\FunctionalJavascript;
+
+use Drupal\ckeditor5\Plugin\Editor\CKEditor5;
+use Drupal\editor\Entity\Editor;
+use Drupal\filter\Entity\FilterFormat;
+use Drupal\Tests\field\Traits\EntityReferenceTestTrait;
+use Drupal\Tests\quickedit\FunctionalJavascript\QuickEditJavascriptTestBase;
+use Symfony\Component\Validator\ConstraintViolation;
+
+/**
+ * Tests that Quick Edit can load CKEditor 5.
+ *
+ * @group ckeditor5
+ * @internal
+ */
+class QuickEditIntegrationTest extends QuickEditJavascriptTestBase {
+
+  use EntityReferenceTestTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = [
+    'node',
+    'editor',
+    'ckeditor5',
+    'hold_test',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'stark';
+
+  /**
+   * A user with permissions to edit Articles and use Quick Edit.
+   *
+   * @var \Drupal\user\UserInterface
+   */
+  protected $contentAuthorUser;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp(): void {
+    parent::setUp();
+    // Create text format, associate CKEditor 5, validate.
+    FilterFormat::create([
+      'format' => 'some_format',
+      'name' => 'Some format',
+      'filters' => [
+        'filter_html' => [
+          'status' => TRUE,
+          'settings' => [
+            'allowed_html' => '<p> <br> <h2> <h3> <h4> <h5> <h6> <strong> <em>',
+          ],
+        ],
+      ],
+    ])->save();
+    Editor::create([
+      'format' => 'some_format',
+      'editor' => 'ckeditor5',
+      'settings' => [
+        'toolbar' => [
+          'items' => ['heading', 'bold', 'italic'],
+        ],
+        'plugins' => [
+          'ckeditor5_heading' => [
+            'enabled_headings' => [
+              'heading2',
+              'heading3',
+              'heading4',
+              'heading5',
+              'heading6',
+            ],
+          ],
+        ],
+      ],
+      'image_upload' => [
+        'status' => FALSE,
+      ],
+    ])->save();
+    $this->assertSame([], array_map(
+      function (ConstraintViolation $v) {
+        return (string) $v->getMessage();
+      },
+      iterator_to_array(CKEditor5::validatePair(
+        Editor::load('some_format'),
+        FilterFormat::load('some_format')
+      ))
+    ));
+
+    // Create the Article node type.
+    $this->drupalCreateContentType(['type' => 'article', 'name' => 'Article']);
+
+    // Log in as a content author who can use Quick Edit and edit Articles.
+    $this->contentAuthorUser = $this->drupalCreateUser([
+      'access contextual links',
+      'access toolbar',
+      'access in-place editing',
+      'access content',
+      'create article content',
+      'edit any article content',
+      'use text format some_format',
+    ]);
+    $this->drupalLogin($this->contentAuthorUser);
+  }
+
+  /**
+   * Tests that changes can be discarded.
+   */
+  public function testDiscard() {
+    $page = $this->getSession()->getPage();
+    $node = $this->drupalCreateNode([
+      'type' => 'article',
+      'title' => t('My Test Node'),
+      'body' => [
+        'value' => '<p>Hello world!</p><p>I do not know what to say…</p><p>I wish I were eloquent.</p>',
+        'format' => 'some_format',
+      ],
+    ]);
+
+    $this->drupalGet('node/' . $node->id());
+
+    // Initial state.
+    $this->awaitQuickEditForEntity('node', 1);
+    $this->assertEntityInstanceStates([
+      'node/1[0]' => 'closed',
+    ]);
+    $this->assertEntityInstanceFieldStates('node', 1, 0, [
+      'node/1/title/en/full' => 'inactive',
+      'node/1/body/en/full' => 'inactive',
+    ]);
+
+    // Start in-place editing of the article node.
+    $this->startQuickEditViaToolbar('node', 1, 0);
+    $this->assertEntityInstanceStates([
+      'node/1[0]' => 'opened',
+    ]);
+    $this->assertQuickEditEntityToolbar((string) $node->label(), NULL);
+    $this->assertEntityInstanceFieldStates('node', 1, 0, [
+      'node/1/title/en/full' => 'candidate',
+      'node/1/body/en/full' => 'candidate',
+    ]);
+
+    $assert_session = $this->assertSession();
+
+    // Click the body field.
+    hold_test_response(TRUE);
+    $this->click('[data-quickedit-field-id="node/1/body/en/full"]');
+    $assert_session->waitForElement('css', '.quickedit-toolbar-field div[id*="body"]');
+    $this->assertQuickEditEntityToolbar((string) $node->label(), 'Body');
+    $this->assertEntityInstanceFieldStates('node', 1, 0, [
+      'node/1/title/en/full' => 'candidate',
+      'node/1/body/en/full' => 'active',
+    ]);
+    hold_test_response(FALSE);
+
+    $this->assertEntityInstanceFieldMarkup([
+      'node/1/body/en/full' => '.ck-editor__editable_inline',
+    ]);
+    $this->assertSession()
+      ->elementExists('css', '#quickedit-entity-toolbar .quickedit-toolgroup.wysiwyg-main .ck-toolbar[role="toolbar"] .ck-toolbar__items > .ck-button[type="button"]');
+
+    // Click the body field.
+    $this->click('[data-quickedit-field-id="node/1/body/en/full"]');
+    $assert_session->waitForElement('css', '.quickedit-toolbar-field div[id*="body"]');
+    $this->typeInPlainTextEditor('[data-quickedit-field-id="node/1/body/en/full"]', ' I am not wanted here');
+    $assert_session->waitForElement('css', '.quickedit-toolbar-field div[id*="body"].quickedit-changed');
+    $this->assertEntityInstanceFieldStates('node', 1, 0, [
+      'node/1/title/en/full' => 'candidate',
+      'node/1/body/en/full' => 'changed',
+    ]);
+
+    $assert_session->pageTextContains('I am not wanted here');
+
+    // Click the 'Cancel' button.
+    $page->find('css', '.action-cancel.quickedit-button')->press();
+    hold_test_response(TRUE);
+
+    // Click the 'Discard Changes' button.
+    $discard_changes_button = $page->findAll('css', '.ui-dialog-buttonset .button')[1];
+    $this->assertEquals('Discard changes', $discard_changes_button->getText());
+    $discard_changes_button->press();
+
+    $assert_session->pageTextNotContains('I am not wanted here');
+    hold_test_response(FALSE);
+  }
+
+  /**
+   * Tests if an article node can be in-place edited with Quick Edit.
+   */
+  public function testArticleNode() {
+    $assert_session = $this->assertSession();
+
+    $node = $this->drupalCreateNode([
+      'type' => 'article',
+      'title' => t('My Test Node'),
+      'body' => [
+        'value' => '<p>Hello world!</p><p>I do not know what to say…</p><p>I wish I were eloquent.</p>',
+        'format' => 'some_format',
+      ],
+    ]);
+
+    $this->drupalGet('node/' . $node->id());
+
+    // Confirm that the JavaScript that generates IE11 warnings loads.
+    $assert_session->elementExists('css', 'script[src*="ckeditor5/js/ie11.user.warnings.js"]');
+
+    // Initial state.
+    $this->awaitQuickEditForEntity('node', 1);
+    $this->assertEntityInstanceStates([
+      'node/1[0]' => 'closed',
+    ]);
+    $this->assertEntityInstanceFieldStates('node', 1, 0, [
+      'node/1/title/en/full' => 'inactive',
+      'node/1/body/en/full' => 'inactive',
+    ]);
+
+    // Start in-place editing of the article node.
+    $this->startQuickEditViaToolbar('node', 1, 0);
+    $this->assertEntityInstanceStates([
+      'node/1[0]' => 'opened',
+    ]);
+    $this->assertQuickEditEntityToolbar((string) $node->label(), NULL);
+    $this->assertEntityInstanceFieldStates('node', 1, 0, [
+      'node/1/title/en/full' => 'candidate',
+      'node/1/body/en/full' => 'candidate',
+    ]);
+
+    // Click the body field.
+    hold_test_response(TRUE);
+    $this->click('[data-quickedit-field-id="node/1/body/en/full"]');
+    $assert_session->waitForElement('css', '.quickedit-toolbar-field div[id*="body"]');
+    $this->assertQuickEditEntityToolbar((string) $node->label(), 'Body');
+    $this->assertEntityInstanceFieldStates('node', 1, 0, [
+      'node/1/title/en/full' => 'candidate',
+      'node/1/body/en/full' => 'active',
+    ]);
+    hold_test_response(FALSE);
+
+    $this->assertEntityInstanceFieldMarkup([
+      'node/1/body/en/full' => '.ck-editor__editable_inline',
+    ]);
+    $this->assertSession()
+      ->elementExists('css', '#quickedit-entity-toolbar .quickedit-toolgroup.wysiwyg-main .ck-toolbar[role="toolbar"] .ck-toolbar__items > .ck-button[type="button"]');
+
+    // Click the body field.
+    $this->click('[data-quickedit-field-id="node/1/body/en/full"]');
+    $assert_session->waitForElement('css', '.quickedit-toolbar-field div[id*="body"]');
+    $this->typeInPlainTextEditor('[data-quickedit-field-id="node/1/body/en/full"]', ' Added text with CKEditor 5');
+    $assert_session->waitForElement('css', '.quickedit-toolbar-field div[id*="body"].quickedit-changed');
+    $this->assertEntityInstanceFieldStates('node', 1, 0, [
+      'node/1/title/en/full' => 'candidate',
+      'node/1/body/en/full' => 'changed',
+    ]);
+
+    // Click 'Save'.
+    hold_test_response(TRUE);
+    $this->saveQuickEdit();
+    $this->assertEntityInstanceStates([
+      'node/1[0]' => 'committing',
+    ]);
+
+    $this->assertEntityInstanceFieldStates('node', 1, 0, [
+      'node/1/title/en/full' => 'candidate',
+      'node/1/body/en/full' => 'saving',
+    ]);
+
+    $this->assertEntityInstanceFieldMarkup([
+      'node/1/body/en/full' => '.quickedit-changed',
+    ]);
+    hold_test_response(FALSE);
+
+    $this->assertJsCondition("Drupal.quickedit.collections.entities.get('node/1[0]').get('state') === 'closed'");
+    $this->assertEntityInstanceStates([
+      'node/1[0]' => 'closed',
+    ]);
+
+    // Get the load again and ensure the values are the expected values.
+    $this->drupalGet('node/' . $node->id());
+    $this->assertSession()->pageTextContains('I wish I were eloquent.');
+    $this->assertSession()->pageTextContains('Added text with CKEditor 5');
+  }
+
+}
diff --git a/core/modules/ckeditor5/tests/src/Kernel/CKEditor4to5UpgradeCompletenessTest.php b/core/modules/ckeditor5/tests/src/Kernel/CKEditor4to5UpgradeCompletenessTest.php
new file mode 100644
index 000000000000..ac1d91e16522
--- /dev/null
+++ b/core/modules/ckeditor5/tests/src/Kernel/CKEditor4to5UpgradeCompletenessTest.php
@@ -0,0 +1,257 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\Tests\ckeditor5\Kernel;
+
+use Drupal\ckeditor\CKEditorPluginConfigurableInterface;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginElementsSubsetInterface;
+use Drupal\Component\Utility\NestedArray;
+use Drupal\filter\Entity\FilterFormat;
+use Drupal\KernelTests\KernelTestBase;
+
+/**
+ * @covers \Drupal\ckeditor5\Plugin\CKEditor4To5Upgrade\Core
+ * @group ckeditor5
+ * @internal
+ */
+class CKEditor4to5UpgradeCompletenessTest extends KernelTestBase {
+
+  /**
+   * The "CKEditor 4 plugin" plugin manager.
+   *
+   * @var \Drupal\ckeditor\CKEditorPluginManager
+   */
+  protected $cke4PluginManager;
+
+  /**
+   * The "CKEditor 5 plugin" plugin manager.
+   *
+   * @var \Drupal\ckeditor5\Plugin\CKEditor5PluginManagerInterface
+   */
+  protected $cke5PluginManager;
+
+  /**
+   * The CKEditor 4 to 5 upgrade plugin manager.
+   *
+   * @var \Drupal\ckeditor5\Plugin\CKEditor4To5UpgradePluginManager
+   */
+  protected $upgradePluginManager;
+
+  /**
+   * Smart default settings utility.
+   *
+   * @var \Drupal\ckeditor5\SmartDefaultSettings
+   */
+  protected $smartDefaultSettings;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = [
+    'ckeditor',
+    'ckeditor5',
+    // Enabled because of ::testCKEditor5ConfigurableSubsetPlugins().
+    'filter',
+    // Enabled because of \Drupal\media\Plugin\CKEditorPlugin\DrupalMedia.
+    'media',
+    // Enabled because of \Drupal\media_library\Plugin\CKEditorPlugin\DrupalMediaLibrary.
+    'media_library',
+    // Enabled for media_library.
+    'views',
+    // These modules must be installed for ckeditor5_config_schema_info_alter()
+    // to work, which in turn is necessary for the plugin definition validation
+    // logic.
+    // @see \Drupal\ckeditor5\Plugin\CKEditor5PluginDefinition::validateDrupalAspects()
+    'filter',
+    'editor',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp(): void {
+    parent::setUp();
+
+    // The tested service is private; expose it under a public test-only alias.
+    $this->container->setAlias('sut', 'plugin.manager.ckeditor4to5upgrade.plugin');
+
+    $this->cke4PluginManager = $this->container->get('plugin.manager.ckeditor.plugin');
+    $this->cke5PluginManager = $this->container->get('plugin.manager.ckeditor5.plugin');
+    $this->upgradePluginManager = $this->container->get('sut');
+    $this->smartDefaultSettings = $this->container->get('ckeditor5.smart_default_settings');
+  }
+
+  /**
+   * Tests that all CKEditor 4 buttons in core have an upgrade path.
+   */
+  public function testButtons(): void {
+    $cke4_buttons = array_keys(NestedArray::mergeDeepArray($this->cke4PluginManager->getButtons()));
+
+    foreach ($cke4_buttons as $button) {
+      $equivalent = $this->upgradePluginManager->mapCKEditor4ToolbarButtonToCKEditor5ToolbarItem($button);
+      $this->assertTrue($equivalent === NULL || is_string($equivalent));
+      // The returned equivalent CKEditor 5 toolbar item must exist.
+      if (is_string($equivalent)) {
+        $this->assertArrayHasKey($equivalent, $this->cke5PluginManager->getToolbarItems());
+      }
+    }
+  }
+
+  /**
+   * Tests that the test-only CKEditor 4 module does not have an upgrade path.
+   */
+  public function testButtonsWithTestOnlyModule(): void {
+    $this->enableModules(['ckeditor_test']);
+    $this->cke4PluginManager = $this->container->get('plugin.manager.ckeditor.plugin');
+
+    $this->expectException(\OutOfBoundsException::class);
+    $this->expectExceptionMessage('No upgrade path found for the "LlamaCSS" button.');
+
+    $this->testButtons();
+  }
+
+  /**
+   * Tests that all configurable CKEditor 4 plugins in core have an upgrade path.
+   */
+  public function testSettings(): void {
+    $cke4_configurable_plugins = [];
+    foreach ($this->cke4PluginManager->getDefinitions() as $plugin_id => $definition) {
+      // Special case: DrupalImage.
+      // @see \Drupal\ckeditor\Plugin\CKEditorPlugin\DrupalImage
+      // @see \Drupal\editor\Entity\Editor::getImageUploadSettings()
+      if ($plugin_id === 'drupalimage') {
+        continue;
+      }
+
+      if (is_subclass_of($definition['class'], CKEditorPluginConfigurableInterface::class)) {
+        $cke4_configurable_plugins[] = $plugin_id;
+      }
+    }
+
+    foreach ($cke4_configurable_plugins as $plugin_id) {
+      $cke5_plugin_settings = $this->upgradePluginManager->mapCKEditor4SettingsToCKEditor5Configuration($plugin_id, []);
+      $this->assertTrue($cke5_plugin_settings === NULL || is_array($cke5_plugin_settings));
+      // The returned equivalent CKEditor 5 plugin must exist.
+      if (is_array($cke5_plugin_settings)) {
+        $cke5_plugin_id = array_keys($cke5_plugin_settings)[0];
+        $this->assertArrayHasKey($cke5_plugin_id, $this->cke5PluginManager->getDefinitions());
+      }
+    }
+  }
+
+  /**
+   * Tests that the test-only CKEditor 4 module does not have an upgrade path.
+   */
+  public function testSettingsWithTestOnlyModule(): void {
+    $this->enableModules(['ckeditor_test']);
+    $this->cke4PluginManager = $this->container->get('plugin.manager.ckeditor.plugin');
+
+    $this->expectException(\OutOfBoundsException::class);
+    $this->expectExceptionMessage('No upgrade path found for the "llama_contextual_and_button" plugin settings.');
+
+    $this->testSettings();
+  }
+
+  /**
+   * Tests that all elements subset plugins in core have an upgrade path.
+   */
+  public function testCKEditor5ConfigurableSubsetPlugins(): void {
+    $cke5_elements_subset_plugins = [];
+    foreach ($this->cke5PluginManager->getDefinitions() as $plugin_id => $definition) {
+      // Special case: SourceEditing.
+      // @see \Drupal\ckeditor5\SmartDefaultSettings::computeSubsetSettingForEnabledPluginsWithSubsets()
+      if ($plugin_id === 'ckeditor5_sourceEditing') {
+        continue;
+      }
+
+      if (is_a($definition->getClass(), CKEditor5PluginElementsSubsetInterface::class, TRUE)) {
+        $cke5_elements_subset_plugins[] = $plugin_id;
+      }
+    }
+
+    foreach ($cke5_elements_subset_plugins as $plugin_id) {
+      $cke5_plugin_configuration = $this->upgradePluginManager->computeCKEditor5PluginSubsetConfiguration($plugin_id, FilterFormat::create());
+      $this->assertTrue($cke5_plugin_configuration === NULL || is_array($cke5_plugin_configuration));
+    }
+  }
+
+  /**
+   * Tests that only one plugin can provide an upgrade path for a button.
+   */
+  public function testOnlyOneUpgradePluginAllowedPerCKEditor4Button(): void {
+    $this->enableModules(['ckeditor4to5upgrade_plugin_test']);
+    \Drupal::state()->set('ckeditor4to5upgrade_plugin_test', 'duplicate_button');
+
+    $this->expectException(\OutOfBoundsException::class);
+    $this->expectExceptionMessage('The "DrupalImage" CKEditor 4 button is already being upgraded by the "core" CKEditor4To5Upgrade plugin, the "foo" plugin is as well. This conflict needs to be resolved.');
+
+    $this->upgradePluginManager->mapCKEditor4ToolbarButtonToCKEditor5ToolbarItem('foo');
+  }
+
+  /**
+   * Tests detecting a lying upgrade plugin cke4_button annotation.
+   */
+  public function testLyingUpgradePluginForCKEditor4Button(): void {
+    $this->enableModules(['ckeditor4to5upgrade_plugin_test']);
+    \Drupal::state()->set('ckeditor4to5upgrade_plugin_test', 'lying_button');
+
+    $this->expectException(\LogicException::class);
+    $this->expectExceptionMessage('The "foo" CKEditor4To5Upgrade plugin claims to provide an upgrade path for the "foo" CKEditor 4 button but does not.');
+
+    $this->upgradePluginManager->mapCKEditor4ToolbarButtonToCKEditor5ToolbarItem('foo');
+  }
+
+  /**
+   * Tests that only one plugin can provide an upgrade path for plugin settings.
+   */
+  public function testOnlyOneUpgradePluginAllowedPerCKEditor4PluginSettings(): void {
+    $this->enableModules(['ckeditor4to5upgrade_plugin_test']);
+    \Drupal::state()->set('ckeditor4to5upgrade_plugin_test', 'duplicate_plugin_settings');
+
+    $this->expectException(\OutOfBoundsException::class);
+    $this->expectExceptionMessage('The "stylescombo" CKEditor 4 plugin\'s settings are already being upgraded by the "core" CKEditor4To5Upgrade plugin, the "foo" plugin is as well. This conflict needs to be resolved.');
+
+    $this->upgradePluginManager->mapCKEditor4ToolbarButtonToCKEditor5ToolbarItem('foo');
+  }
+
+  /**
+   * Tests detecting a lying upgrade plugin cke4_plugin_settings annotation.
+   */
+  public function testLyingUpgradePluginForCKEditor4PluginSettings(): void {
+    $this->enableModules(['ckeditor4to5upgrade_plugin_test']);
+    \Drupal::state()->set('ckeditor4to5upgrade_plugin_test', 'lying_plugin_settings');
+
+    $this->expectException(\LogicException::class);
+    $this->expectExceptionMessage('The "foo" CKEditor4To5Upgrade plugin claims to provide an upgrade path for the "foo" CKEditor 4 plugin settings but does not.');
+
+    $this->upgradePluginManager->mapCKEditor4SettingsToCKEditor5Configuration('foo', []);
+  }
+
+  /**
+   * Tests that only one plugin can provide an upgrade path for a subset plugin.
+   */
+  public function testOnlyOneUpgradePluginAllowedPerCKEditor5ConfigurableSubsetPlugin(): void {
+    $this->enableModules(['ckeditor4to5upgrade_plugin_test']);
+    \Drupal::state()->set('ckeditor4to5upgrade_plugin_test', 'duplicate_subset');
+
+    $this->expectException(\OutOfBoundsException::class);
+    $this->expectExceptionMessage('The "ckeditor5_heading" CKEditor 5 plugin\'s elements subset configuration is already being computed by the "core" CKEditor4To5Upgrade plugin, the "foo" plugin is as well. This conflict needs to be resolved.');
+
+    $this->upgradePluginManager->computeCKEditor5PluginSubsetConfiguration('foo', FilterFormat::create());
+  }
+
+  /**
+   * Tests detecting lying cke5_plugin_elements_subset_configuration annotation.
+   */
+  public function testLyingUpgradePluginForCKEditor5ConfigurableSubsetPlugin(): void {
+    $this->enableModules(['ckeditor4to5upgrade_plugin_test']);
+    \Drupal::state()->set('ckeditor4to5upgrade_plugin_test', 'lying_subset');
+
+    $this->expectException(\LogicException::class);
+    $this->expectExceptionMessage('The "foo" CKEditor4To5Upgrade plugin claims to provide an upgrade path for the "foo" CKEditor 4 plugin settings but does not.');
+
+    $this->upgradePluginManager->computeCKEditor5PluginSubsetConfiguration('foo', FilterFormat::create());
+  }
+
+}
diff --git a/core/modules/ckeditor5/tests/src/Kernel/CKEditor5PluginManagerTest.php b/core/modules/ckeditor5/tests/src/Kernel/CKEditor5PluginManagerTest.php
new file mode 100644
index 000000000000..151cc4336aca
--- /dev/null
+++ b/core/modules/ckeditor5/tests/src/Kernel/CKEditor5PluginManagerTest.php
@@ -0,0 +1,1117 @@
+<?php
+
+namespace Drupal\Tests\ckeditor5\Kernel;
+
+use Composer\Autoload\ClassLoader;
+use Drupal\ckeditor5\HTMLRestrictionsUtilities;
+use Drupal\ckeditor5\Plugin\CKEditor5Plugin\Heading;
+use Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException;
+use Drupal\Core\DependencyInjection\ContainerBuilder;
+use Drupal\editor\Entity\Editor;
+use Drupal\KernelTests\KernelTestBase;
+use Drupal\filter\Entity\FilterFormat;
+use Drupal\Tests\SchemaCheckTestTrait;
+use org\bovigo\vfs\vfsStream;
+use Symfony\Component\DependencyInjection\ParameterBag\FrozenParameterBag;
+use Symfony\Component\Yaml\Yaml;
+
+// cspell:ignore layercake everyblock justblockquote
+
+/**
+ * Tests different ways of enabling CKEditor 5 plugins.
+ *
+ * @group ckeditor5
+ * @internal
+ */
+class CKEditor5PluginManagerTest extends KernelTestBase {
+
+  use SchemaCheckTestTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = [
+    'system',
+    'user',
+    'filter',
+    'editor',
+    'ckeditor5',
+    'media',
+  ];
+
+  /**
+   * The manager for "CKEditor 5 plugin" plugins.
+   *
+   * @var \Drupal\Component\Plugin\PluginManagerInterface
+   */
+  protected $manager;
+
+  /**
+   * The typed config manager.
+   *
+   * @var \Drupal\Core\Config\TypedConfigManagerInterface
+   */
+  protected $typedConfig;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp(): void {
+    parent::setUp();
+
+    FilterFormat::create(
+      Yaml::parseFile('core/profiles/standard/config/install/filter.format.basic_html.yml')
+    )->save();
+    Editor::create([
+      'format' => 'basic_html',
+      'editor' => 'ckeditor5',
+    ])->save();
+    FilterFormat::create(
+      Yaml::parseFile('core/profiles/standard/config/install/filter.format.full_html.yml')
+    )->save();
+    Editor::create([
+      'format' => 'full_html',
+      'editor' => 'ckeditor5',
+    ])->save();
+    $this->manager = $this->container->get('plugin.manager.ckeditor5.plugin');
+    $this->typedConfig = $this->container->get('config.typed');
+  }
+
+  /**
+   * @covers \Drupal\ckeditor5\Plugin\CKEditor5PluginDefinition::__construct()
+   * @dataProvider providerTestInvalidPluginDefinitions
+   */
+  public function testInvalidPluginDefinitions(string $yaml, ?string $expected_message, array $additional_files = []): void {
+    if ($expected_message) {
+      $this->expectException(InvalidPluginDefinitionException::class);
+      $this->expectExceptionMessage($expected_message);
+    }
+
+    $site_directory = ltrim(parse_url($this->siteDirectory)['path'], '/');
+    vfsStream::create([
+      'modules' => [
+        'ckeditor5_invalid_plugin' => [
+          'ckeditor5_invalid_plugin.info.yml' => <<<YAML
+name: CKEditor 5 Invalid Plugin Definition Test
+type: module
+core_version_requirement: ^9
+YAML,
+          'ckeditor5_invalid_plugin.ckeditor5.yml' => $yaml,
+        ] + $additional_files,
+      ],
+    ], $this->vfsRoot->getChild($site_directory));
+
+    if (!empty($additional_files)) {
+      $additional_class_loader = new ClassLoader();
+      $additional_class_loader->addPsr4("Drupal\\ckeditor5_invalid_plugin\\Plugin\\CKEditor5Plugin\\", vfsStream::url("root/$site_directory/modules/ckeditor5_invalid_plugin/src/Plugin/CKEditor5Plugin"));
+      $additional_class_loader->register(TRUE);
+    }
+
+    $config_sync = \Drupal::service('config.storage');
+    $config_data = $this->config('core.extension')->get();
+    $config_data['module']['ckeditor5_invalid_plugin'] = 1;
+    $config_sync->write('core.extension', $config_data);
+
+    // Construct a new container for testing a plugin definition in isolation,
+    // without needing a separate module directory structure for it, and instead
+    // allowing it to be provided entirely by a PHPUnit data provider. Inherit
+    // all definitions from the successfully installed Drupal site for this
+    // kernel test, but do not use $this->container. This is a hybrid of kernel
+    // and unit test, to get the best of both worlds: test a unit, but ensure
+    // the service definitions are in sync.
+    $root = vfsStream::url("root/$site_directory");
+    $container = new ContainerBuilder(new FrozenParameterBag([
+      'app.root' => $root,
+      'container.modules' => [
+        'ckeditor5_invalid_plugin' => [
+          'type' => 'module',
+          'pathname' => 'modules/ckeditor5_invalid_plugin/ckeditor5_invalid_plugin.info.yml',
+          'filename' => NULL,
+        ] + $this->container->getParameter('container.modules'),
+      ],
+    ] + $this->container->getParameterBag()->all()));
+    $container->setDefinitions($this->container->getDefinitions());
+
+    // The exception to the above elegance: re-resolve the '%app_root%' param.
+    // @see \Symfony\Component\DependencyInjection\Compiler\ResolveParameterPlaceHoldersPass
+    // @see \Drupal\Core\DrupalKernel::guessApplicationRoot()
+    $container->getDefinition('module_handler')->setArgument(0, '%app.root%');
+
+    // To discover per-test case config schema YAML files, work around the
+    // static file cache in \Drupal\Core\Extension\ExtensionDiscovery. There is
+    // no work-around that allows using both the files on disk and some in vfs.
+    // To make matters worse, decorating a service within the test only is not
+    // an option either, because \Drupal\ckeditor5\Plugin\CKEditor5PluginDefinition
+    // is a pure value object, so it uses the global container. Therefore the
+    // only work-around possible is to manipulate the config schema definition
+    // cache.
+    // @todo Remove this in https://www.drupal.org/project/drupal/issues/2961541.
+    if (isset($additional_files['config']['schema']['ckeditor5_invalid_plugin.schema.yml'])) {
+      $cache = \Drupal::service('cache.discovery')->get('typed_config_definitions');
+      $typed_config_definitions = $cache->data;
+      $typed_config_definitions += Yaml::parse($additional_files['config']['schema']['ckeditor5_invalid_plugin.schema.yml']);
+      \Drupal::service('config.typed')->clearCachedDefinitions();
+      \Drupal::service('cache.discovery')->set('typed_config_definitions', $typed_config_definitions, $cache->expire, $cache->tags);
+    }
+
+    $container->get('plugin.manager.ckeditor5.plugin')->getDefinitions();
+  }
+
+  /**
+   * Data provider.
+   *
+   * @return \Generator
+   *   Test scenarios.
+   */
+  public function providerTestInvalidPluginDefinitions(): \Generator {
+    yield 'invalid plugin ID with everything else okay' => [
+      <<<YAML
+foo_bar:
+  ckeditor5:
+    plugins: []
+  drupal:
+    label: TEST
+    elements: false
+YAML,
+      'The "foo_bar" CKEditor 5 plugin definition must have a plugin ID that starts with "ckeditor5_invalid_plugin_".',
+    ];
+
+    // Now let's show the progressive exceptions that should steer the plugin
+    // developer in the right direction.
+
+    yield 'only plugin ID, nothing else' => [
+      <<<YAML
+foo_bar: {}
+YAML,
+      'The "foo_bar" CKEditor 5 plugin definition must have a plugin ID that starts with "ckeditor5_invalid_plugin_".',
+    ];
+
+    yield 'fixed plugin ID' => [
+      <<<YAML
+ckeditor5_invalid_plugin_foo_bar: {}
+YAML,
+      'The "ckeditor5_invalid_plugin_foo_bar" CKEditor 5 plugin definition must contain a "ckeditor5" key.',
+    ];
+
+    yield 'added ckeditor5' => [
+      <<<YAML
+ckeditor5_invalid_plugin_foo_bar:
+  ckeditor5: {}
+YAML,
+      'The "ckeditor5_invalid_plugin_foo_bar" CKEditor 5 plugin definition must contain a "ckeditor5.plugins" key.',
+    ];
+
+    yield 'added ckeditor5.plugins' => [
+      <<<YAML
+ckeditor5_invalid_plugin_foo_bar:
+  ckeditor5:
+    plugins: {}
+YAML,
+      'The "ckeditor5_invalid_plugin_foo_bar" CKEditor 5 plugin definition must contain a "drupal" key.',
+    ];
+
+    yield 'added drupal' => [
+      <<<YAML
+ckeditor5_invalid_plugin_foo_bar:
+  ckeditor5:
+    plugins: {}
+  drupal: {}
+YAML,
+      'The "ckeditor5_invalid_plugin_foo_bar" CKEditor 5 plugin definition must contain a "drupal.label" key.',
+    ];
+
+    yield 'added drupal.label' => [
+      <<<YAML
+ckeditor5_invalid_plugin_foo_bar:
+  ckeditor5:
+    plugins: {}
+  drupal:
+    label: {}
+YAML,
+      'The "ckeditor5_invalid_plugin_foo_bar" CKEditor 5 plugin definition has a "drupal.label" value that is not a string nor a TranslatableMarkup instance.',
+    ];
+
+    yield 'fixed drupal.label' => [
+      <<<YAML
+ckeditor5_invalid_plugin_foo_bar:
+  ckeditor5:
+    plugins: {}
+  drupal:
+    label: "Foo bar"
+YAML,
+      'The "ckeditor5_invalid_plugin_foo_bar" CKEditor 5 plugin definition must contain a "drupal.elements" key.',
+    ];
+
+    yield 'added drupal.elements' => [
+      <<<YAML
+ckeditor5_invalid_plugin_foo_bar:
+  ckeditor5:
+    plugins: {}
+  drupal:
+    label: "Foo bar"
+    elements: {}
+YAML,
+      'The "ckeditor5_invalid_plugin_foo_bar" CKEditor 5 plugin definition has a "drupal.elements" value that is neither a list of HTML tags/attributes nor false.',
+    ];
+
+    yield 'wrongly fixed drupal.elements: no valid tags' => [
+      <<<YAML
+ckeditor5_invalid_plugin_foo_bar:
+  ckeditor5:
+    plugins: {}
+  drupal:
+    label: "Foo bar"
+    elements:
+      - foo
+      - bar
+YAML,
+      'The "ckeditor5_invalid_plugin_foo_bar" CKEditor 5 plugin definition has a value at "drupal.elements.0" that is not an HTML tag with optional attributes: "foo". Expected structure: "<tag allowedAttribute="allowedValue1 allowedValue2">".',
+    ];
+
+    yield 'wrongly fixed drupal.elements: multiple tags per entry' => [
+      <<<YAML
+ckeditor5_invalid_plugin_foo_bar:
+  ckeditor5:
+    plugins: {}
+  drupal:
+    label: "Foo bar"
+    elements:
+      - <foo> <bar>
+YAML,
+      'The "ckeditor5_invalid_plugin_foo_bar" CKEditor 5 plugin definition has a value at "drupal.elements.0": multiple tags listed, should be one: "<foo> <bar>".',
+    ];
+
+    yield 'fixed drupal.elements' => [
+      <<<YAML
+ckeditor5_invalid_plugin_foo_bar:
+  ckeditor5:
+    plugins: {}
+  drupal:
+    label: "Foo bar"
+    elements:
+      - <foo>
+      - <bar>
+YAML,
+      NULL,
+    ];
+
+    yield 'alternative fix for drupal.elements' => [
+      <<<YAML
+ckeditor5_invalid_plugin_foo_bar:
+  ckeditor5:
+    plugins: {}
+  drupal:
+    label: "Foo bar"
+    elements: false
+YAML,
+      NULL,
+    ];
+
+    yield 'added invalid optional metadata: drupal.admin_library' => [
+      <<<YAML
+ckeditor5_invalid_plugin_foo_bar:
+  ckeditor5:
+    plugins: {}
+  drupal:
+    label: "Foo bar"
+    elements:
+      - <foo>
+      - <bar>
+    admin_library: ckeditor5/foo_bar
+YAML,
+      'The "ckeditor5_invalid_plugin_foo_bar" CKEditor 5 plugin definition has a "drupal.admin_library" key whose asset library "ckeditor5/foo_bar" does not exist.',
+    ];
+
+    yield 'fixed drupal.admin_library' => [
+      <<<YAML
+ckeditor5_invalid_plugin_foo_bar:
+  ckeditor5:
+    plugins: {}
+  drupal:
+    label: "Foo bar"
+    elements:
+      - <foo>
+      - <bar>
+    admin_library: ckeditor5/admin.basic
+YAML,
+      NULL,
+    ];
+
+    // Add a plugin class; observe what additional requirements need to be met.
+    yield 'added plugin class' => [
+      <<<YAML
+ckeditor5_invalid_plugin_foo_bar:
+  ckeditor5:
+    plugins: {}
+  drupal:
+    class: Drupal\ckeditor5_invalid_plugin\Plugin\CKEditor5Plugin\FooBar
+    label: "Foo bar"
+    elements:
+      - <foo>
+      - <bar>
+    admin_library: ckeditor5/admin.basic
+YAML,
+      'The CKEditor 5 "ckeditor5_invalid_plugin_foo_bar" provides a plugin class: "Drupal\ckeditor5_invalid_plugin\Plugin\CKEditor5Plugin\FooBar", but it does not exist.',
+    ];
+
+    yield 'defined minimal (but not yet valid) plugin class' => [
+      <<<YAML
+ckeditor5_invalid_plugin_foo_bar:
+  ckeditor5:
+    plugins: {}
+  drupal:
+    class: Drupal\ckeditor5_invalid_plugin\Plugin\CKEditor5Plugin\FooBar
+    label: "Foo bar"
+    elements:
+      - <foo>
+      - <bar>
+    admin_library: ckeditor5/admin.basic
+YAML,
+      'CKEditor 5 plugins must implement \Drupal\ckeditor5\Plugin\CKEditor5PluginInterface. "ckeditor5_invalid_plugin_foo_bar" does not.',
+      [
+        'src' => [
+          'Plugin' => [
+            'CKEditor5Plugin' => [
+              'FooBar.php' => <<<'PHP'
+<?php
+namespace Drupal\ckeditor5_invalid_plugin\Plugin\CKEditor5Plugin;
+class FooBar {}
+PHP,
+            ],
+          ],
+        ],
+      ],
+    ];
+
+    yield 'defined minimal and valid plugin class' => [
+      <<<YAML
+ckeditor5_invalid_plugin_foo_bar:
+  ckeditor5:
+    plugins: {}
+  drupal:
+    class: Drupal\ckeditor5_invalid_plugin\Plugin\CKEditor5Plugin\FooBar
+    label: "Foo bar"
+    elements:
+      - <foo>
+      - <bar>
+    admin_library: ckeditor5/admin.basic
+YAML,
+      NULL,
+      [
+        'src' => [
+          'Plugin' => [
+            'CKEditor5Plugin' => [
+              'FooBar.php' => <<<'PHP'
+<?php
+namespace Drupal\ckeditor5_invalid_plugin\Plugin\CKEditor5Plugin;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginDefault;
+class FooBar extends CKEditor5PluginDefault {}
+PHP,
+            ],
+          ],
+        ],
+      ],
+    ];
+
+    // Make the plugin configurable; observe what additional requirements need
+    // to be met.
+    yield 'defined minimal and valid plugin class made configurable but not really anything configurable' => [
+      <<<YAML
+ckeditor5_invalid_plugin_foo_bar:
+  ckeditor5:
+    plugins: {}
+  drupal:
+    class: Drupal\ckeditor5_invalid_plugin\Plugin\CKEditor5Plugin\FooBar
+    label: "Foo bar"
+    elements:
+      - <foo>
+      - <bar>
+    admin_library: ckeditor5/admin.basic
+YAML,
+      NULL,
+      [
+        'src' => [
+          'Plugin' => [
+            'CKEditor5Plugin' => [
+              'FooBar.php' => <<<'PHP'
+<?php
+namespace Drupal\ckeditor5_invalid_plugin\Plugin\CKEditor5Plugin;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginDefault;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginConfigurableInterface;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginConfigurableTrait;
+use Drupal\Core\Form\FormStateInterface;
+class FooBar extends CKEditor5PluginDefault implements CKEditor5PluginConfigurableInterface {
+  use CKEditor5PluginConfigurableTrait;
+  public function defaultConfiguration() { return []; }
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) { return []; }
+  public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {}
+  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {}
+}
+PHP,
+            ],
+          ],
+        ],
+      ],
+    ];
+
+    yield 'defined minimal and valid plugin class made configurable: invalid if config schema is missing' => [
+      <<<YAML
+ckeditor5_invalid_plugin_foo_bar:
+  ckeditor5:
+    plugins: {}
+  drupal:
+    class: Drupal\ckeditor5_invalid_plugin\Plugin\CKEditor5Plugin\FooBar
+    label: "Foo bar"
+    elements:
+      - <foo>
+      - <bar>
+    admin_library: ckeditor5/admin.basic
+YAML,
+      'The "ckeditor5_invalid_plugin_foo_bar" CKEditor 5 plugin definition is configurable, has non-empty default configuration but has no config schema. Config schema is required for validation.',
+      [
+        'src' => [
+          'Plugin' => [
+            'CKEditor5Plugin' => [
+              'FooBar.php' => <<<'PHP'
+<?php
+namespace Drupal\ckeditor5_invalid_plugin\Plugin\CKEditor5Plugin;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginDefault;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginConfigurableInterface;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginConfigurableTrait;
+use Drupal\Core\Form\FormStateInterface;
+class FooBar extends CKEditor5PluginDefault implements CKEditor5PluginConfigurableInterface {
+  use CKEditor5PluginConfigurableTrait;
+  public function defaultConfiguration() { return ['foo' => FALSE]; }
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) { return []; }
+  public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {}
+  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {}
+}
+PHP,
+            ],
+          ],
+        ],
+      ],
+    ];
+
+    yield 'defined minimal and valid plugin class made configurable: valid if config schema is present' => [
+      <<<YAML
+ckeditor5_invalid_plugin_foo_bar:
+  ckeditor5:
+    plugins: {}
+  drupal:
+    class: Drupal\ckeditor5_invalid_plugin\Plugin\CKEditor5Plugin\FooBar
+    label: "Foo bar"
+    elements:
+      - <foo>
+      - <bar>
+    admin_library: ckeditor5/admin.basic
+YAML,
+      NULL,
+      [
+        'config' => [
+          'schema' => [
+            'ckeditor5_invalid_plugin.schema.yml' => <<<YAML
+ckeditor5.plugin.ckeditor5_invalid_plugin_foo_bar:
+  type: mapping
+  label: 'Foo Bar'
+  mapping:
+    foo:
+      type: boolean
+      label: 'Foo'
+YAML,
+          ],
+        ],
+        'src' => [
+          'Plugin' => [
+            'CKEditor5Plugin' => [
+              'FooBar.php' => <<<'PHP'
+<?php
+namespace Drupal\ckeditor5_invalid_plugin\Plugin\CKEditor5Plugin;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginDefault;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginConfigurableInterface;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginConfigurableTrait;
+use Drupal\Core\Form\FormStateInterface;
+class FooBar extends CKEditor5PluginDefault implements CKEditor5PluginConfigurableInterface {
+  use CKEditor5PluginConfigurableTrait;
+  public function defaultConfiguration() { return ['foo' => FALSE]; }
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) { return []; }
+  public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {}
+  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {}
+}
+PHP,
+            ],
+          ],
+        ],
+      ],
+    ];
+
+    yield 'defined minimal and valid plugin class made configurable: invalid if config schema is present but incomplete' => [
+      <<<YAML
+ckeditor5_invalid_plugin_foo_bar:
+  ckeditor5:
+    plugins: {}
+  drupal:
+    class: Drupal\ckeditor5_invalid_plugin\Plugin\CKEditor5Plugin\FooBar
+    label: "Foo bar"
+    elements:
+      - <foo>
+      - <bar>
+    admin_library: ckeditor5/admin.basic
+YAML,
+      'The "ckeditor5_invalid_plugin_foo_bar" CKEditor 5 plugin definition is configurable, but its default configuration does not match its config schema. The following errors were found: [foo] The configuration property foo.bar doesn\'t exist, [baz] missing schema.',
+      [
+        'config' => [
+          'schema' => [
+            'ckeditor5_invalid_plugin.schema.yml' => <<<YAML
+ckeditor5.plugin.ckeditor5_invalid_plugin_foo_bar:
+  type: mapping
+  label: 'Foo Bar'
+  mapping:
+    foo:
+      type: boolean
+      label: 'Foo'
+YAML,
+          ],
+        ],
+        'src' => [
+          'Plugin' => [
+            'CKEditor5Plugin' => [
+              'FooBar.php' => <<<'PHP'
+<?php
+namespace Drupal\ckeditor5_invalid_plugin\Plugin\CKEditor5Plugin;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginDefault;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginConfigurableInterface;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginConfigurableTrait;
+use Drupal\Core\Form\FormStateInterface;
+class FooBar extends CKEditor5PluginDefault implements CKEditor5PluginConfigurableInterface {
+  use CKEditor5PluginConfigurableTrait;
+  public function defaultConfiguration() { return ['foo' => ['bar' => TRUE], 'baz' => FALSE]; }
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) { return []; }
+  public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {}
+  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {}
+}
+PHP,
+            ],
+          ],
+        ],
+      ],
+    ];
+
+    yield 'defined minimal and valid plugin class made configurable: valid if config schema is present and complete' => [
+      <<<YAML
+ckeditor5_invalid_plugin_foo_bar:
+  ckeditor5:
+    plugins: {}
+  drupal:
+    class: Drupal\ckeditor5_invalid_plugin\Plugin\CKEditor5Plugin\FooBar
+    label: "Foo bar"
+    elements:
+      - <foo>
+      - <bar>
+    admin_library: ckeditor5/admin.basic
+YAML,
+      NULL,
+      [
+        'config' => [
+          'schema' => [
+            'ckeditor5_invalid_plugin.schema.yml' => <<<YAML
+ckeditor5.plugin.ckeditor5_invalid_plugin_foo_bar:
+  type: mapping
+  label: 'Foo Bar'
+  mapping:
+    foo:
+      type: boolean
+      label: 'Foo'
+    bar:
+      type: boolean
+      label: 'Bar'
+YAML,
+          ],
+        ],
+        'src' => [
+          'Plugin' => [
+            'CKEditor5Plugin' => [
+              'FooBar.php' => <<<'PHP'
+<?php
+namespace Drupal\ckeditor5_invalid_plugin\Plugin\CKEditor5Plugin;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginDefault;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginConfigurableInterface;
+use Drupal\ckeditor5\Plugin\CKEditor5PluginConfigurableTrait;
+use Drupal\Core\Form\FormStateInterface;
+class FooBar extends CKEditor5PluginDefault implements CKEditor5PluginConfigurableInterface {
+  use CKEditor5PluginConfigurableTrait;
+  public function defaultConfiguration() { return ['foo' => FALSE, 'bar' => FALSE]; }
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) { return []; }
+  public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {}
+  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {}
+}
+PHP,
+            ],
+          ],
+        ],
+      ],
+    ];
+  }
+
+  /**
+   * Tests detection of invalid CKEditor5PluginElementsSubsetInterface class.
+   */
+  public function testProvidedElementsInvalidElementSubset(): void {
+    $this->enableModules(['ckeditor5_plugin_elements_subset']);
+
+    // Configure the sneaky superset plugin to have a random tag as the subset.
+    $sneaky_plugin_id = 'ckeditor5_plugin_elements_subset_sneakySuperset';
+    $random_tag = "<{$this->randomMachineName()}>";
+    $text_editor = Editor::create([
+      'format' => 'dummy',
+      'editor' => 'ckeditor5',
+      'settings' => [
+        'plugins' => [
+          $sneaky_plugin_id => ['configured_subset' => [$random_tag]],
+        ],
+      ],
+      'image_upload' => [],
+    ]);
+
+    // No exception when getting all provided elements.
+    $this->assertGreaterThan(0, count($this->manager->getProvidedElements()));
+
+    // No exception when getting the sneaky plugin's provided elements.
+    $this->assertGreaterThan(0, count($this->manager->getProvidedElements([$sneaky_plugin_id])));
+
+    // Exception when getting the sneaky plugin's provided elements *and* a text
+    // editor config entity is passed: only then can a subset be generated based
+    // on configuration.
+    $this->expectException(\LogicException::class);
+    $this->expectExceptionMessage("The \"ckeditor5_plugin_elements_subset_sneakySuperset\" CKEditor 5 plugin implements ::getElementsSubset() and did not return a subset, the following tags are absent from the plugin definition: \"$random_tag\".");
+    $this->manager->getProvidedElements([$sneaky_plugin_id], $text_editor);
+  }
+
+  /**
+   * Tests the enabling of plugins.
+   */
+  public function testEnabledPlugins() {
+    $editor = Editor::load('basic_html');
+
+    // Case 1: no extra CKEditor 5 plugins.
+    $definitions = array_keys($this->manager->getEnabledDefinitions($editor));
+    $default_plugins = [
+      'ckeditor5_bold',
+      'ckeditor5_emphasis',
+      'ckeditor5_essentials',
+      'ckeditor5_heading',
+      'ckeditor5_paragraph',
+      'ckeditor5_pasteFromOffice',
+    ];
+    $this->assertSame($default_plugins, $definitions, 'No CKEditor 5 plugins found besides the built-in ones.');
+    $default_libraries = [
+      'ckeditor5/drupal.ckeditor5',
+      'ckeditor5/drupal.ckeditor5.emphasis',
+      'ckeditor5/drupal.ckeditor5.internal',
+      'core/ckeditor5.basic',
+      'core/ckeditor5.internal',
+      'core/ckeditor5.pasteFromOffice',
+    ];
+    $this->assertSame($default_libraries, $this->manager->getEnabledLibraries($editor));
+
+    // Enable the CKEditor 5 Test module, which has the layercake plugin and
+    // clear the editor manager's static cache so that it is picked up.
+    $this->enableModules(['ckeditor5_test']);
+    $this->manager = $this->container->get('plugin.manager.ckeditor5.plugin');
+    $this->manager->clearCachedDefinitions();
+
+    // Case 2: The CKEditor 5 layercake plugin is available and library should
+    // NOT be loaded if its toolbar items are not enabled.
+    $this->assertSame($default_plugins, array_keys($this->manager->getEnabledDefinitions($editor)));
+    $this->assertSame($default_libraries, $this->manager->getEnabledLibraries($editor));
+
+    // Case 3: The CKEditor 5 layercake plugin is available and library should
+    // be loaded without having to enable plugins.
+    $settings = $editor->getSettings();
+    $settings['toolbar']['items'][] = 'simpleBox';
+    $editor->setSettings($settings);
+    $plugin_ids = array_keys($this->manager->getEnabledDefinitions($editor));
+    $default_plugins_with_layercake = array_merge($default_plugins, ['ckeditor5_test_layercake']);
+
+    // Sort on plugin id.
+    asort($default_plugins_with_layercake);
+    $this->assertSame(array_values($default_plugins_with_layercake), $plugin_ids);
+    $default_libraries_with_layercake = array_merge($default_libraries, ['ckeditor5_test/layercake']);
+    sort($default_libraries_with_layercake);
+    $this->assertSame($default_libraries_with_layercake, $this->manager->getEnabledLibraries($editor));
+
+    // Enable media embed filter which the CKEditor 5 media plugin requires.
+    $editor->getFilterFormat()->setFilterConfig('media_embed', ['status' => TRUE])->save();
+
+    // Case 4: The CKEditor 5 media plugin should be enabled and the library
+    // should be available now that the media_embed is enabled.
+    $plugin_ids = array_keys($this->manager->getEnabledDefinitions($editor));
+    $expected_plugins = array_merge($default_plugins, [
+      'ckeditor5_test_layercake',
+      'media_media',
+    ]);
+    sort($expected_plugins);
+    $this->assertSame($expected_plugins, $plugin_ids);
+    $expected_libraries = array_merge($default_libraries, [
+      'ckeditor5/drupal.ckeditor5.media',
+      'ckeditor5_test/layercake',
+    ]);
+    sort($expected_libraries);
+    $this->assertSame($expected_libraries, $this->manager->getEnabledLibraries($editor));
+
+    // Enable the CKEditor 5 Plugin Conditions Test module, which has the
+    // ckeditor5_plugin_conditions_test_plugins_condition plugin which is
+    // conditionally enabled. Clear the editor manager's static cache so that it
+    // is picked up.
+    $this->enableModules(['ckeditor5_plugin_conditions_test']);
+    $this->manager = $this->container->get('plugin.manager.ckeditor5.plugin');
+    $this->manager->clearCachedDefinitions();
+
+    // Case 5: just installing the ckeditor5_plugin_conditions_test module does
+    // not enable its conditionally enabled plugin.
+    $this->assertSame($expected_plugins, $plugin_ids);
+    $this->assertSame($expected_libraries, $this->manager->getEnabledLibraries($editor));
+
+    // Case 6: placing the table plugin's button enables the table plugin, but
+    // also implicitly enables the conditionally enabled plugin.
+    $settings['toolbar']['items'][] = 'insertTable';
+    $editor->setSettings($settings);
+    $plugin_ids = array_keys($this->manager->getEnabledDefinitions($editor));
+    $expected_plugins = array_merge($expected_plugins, ['ckeditor5_table', 'ckeditor5_plugin_conditions_test_plugins_condition']);
+    sort($expected_plugins);
+    $this->assertSame(array_values($expected_plugins), $plugin_ids);
+    $expected_libraries = array_merge($default_libraries, [
+      'ckeditor5/drupal.ckeditor5.media',
+      'ckeditor5_test/layercake',
+      'core/ckeditor5.table',
+    ]);
+    sort($expected_libraries);
+    $this->assertSame($expected_libraries, $this->manager->getEnabledLibraries($editor));
+
+    // Case 7: GHS is only enabled for Full HTML (or any other text format that
+    // has no TYPE_HTML_RESTRICTOR filters).
+    $editor = Editor::load('full_html');
+    $definitions = array_keys($this->manager->getEnabledDefinitions($editor));
+    $default_plugins = [
+      'ckeditor5_bold',
+      'ckeditor5_emphasis',
+      'ckeditor5_essentials',
+      'ckeditor5_heading',
+      'ckeditor5_htmlSupport',
+      'ckeditor5_paragraph',
+      'ckeditor5_pasteFromOffice',
+    ];
+    $this->assertSame($default_plugins, $definitions, 'No CKEditor 5 plugins found besides the built-in ones.');
+    $default_libraries = [
+      'ckeditor5/drupal.ckeditor5',
+      'ckeditor5/drupal.ckeditor5.emphasis',
+      'ckeditor5/drupal.ckeditor5.internal',
+      'core/ckeditor5.basic',
+      'core/ckeditor5.htmlSupport',
+      'core/ckeditor5.internal',
+      'core/ckeditor5.pasteFromOffice',
+    ];
+    $this->assertSame($default_libraries, $this->manager->getEnabledLibraries($editor));
+  }
+
+  /**
+   * Tests the parsing of CKEditor 5 plugin element config.
+   *
+   * @param string[] $plugins
+   *   The plugins to parse the elements list from.
+   * @param array $text_editor_settings
+   *   The text editor settings.
+   * @param array $expected_elements
+   *   An array of expected allowed elements an attributes in the structure
+   *   used by filter_html.
+   * @param string $expected_readable_string
+   *   The expected allowed tags and attributes as a string, typically used
+   *   in the filter_html "Allowed tags" field.
+   *
+   * @covers \Drupal\ckeditor5\Plugin\CKEditor5PluginManager::getProvidedElements
+   * @covers \Drupal\ckeditor5\HTMLRestrictionsUtilities::toReadableElements
+   * @dataProvider providerTestProvidedElements
+   */
+  public function testProvidedElements(array $plugins, array $text_editor_settings, array $expected_elements, string $expected_readable_string) {
+    $this->enableModules(['ckeditor5_plugin_elements_test']);
+
+    $text_editor = Editor::create([
+      'format' => 'dummy',
+      'editor' => 'ckeditor5',
+      'settings' => $text_editor_settings,
+      'image_upload' => [],
+    ]);
+    $this->assertConfigSchema(
+      $this->typedConfig,
+      $text_editor->getConfigDependencyName(),
+      $text_editor->toArray()
+    );
+
+    $provided_elements = $this->manager->getProvidedElements($plugins, $text_editor);
+    $this->assertSame($expected_elements, $provided_elements);
+    $readable_string = implode(' ', HTMLRestrictionsUtilities::toReadableElements($provided_elements));
+    $this->assertSame($expected_readable_string, $readable_string);
+  }
+
+  /**
+   * Provides uses cases enabling different elements and the expected results.
+   */
+  public function providerTestProvidedElements(): array {
+    $text_align_classes = [
+      'text-align-left' => TRUE,
+      'text-align-center' => TRUE,
+      'text-align-right' => TRUE,
+      'text-align-justify' => TRUE,
+    ];
+
+    return [
+      'sourceEditing' => [
+        'plugins' => ['ckeditor5_sourceEditing'],
+        'text_editor_settings' => [],
+        'expected_elements' => [],
+        'expected_readable_string' => '',
+      ],
+      'language' => [
+        'plugins' => ['ckeditor5_language'],
+        'text_editor_settings' => [],
+        'expected_elements' => [
+          'span' => [
+            'lang' => TRUE,
+            'dir' => TRUE,
+          ],
+        ],
+        'expected_readable_string' => '<span lang dir>',
+      ],
+      'alignment and heading' => [
+        'plugins' => [
+          'ckeditor5_alignment',
+          'ckeditor5_heading',
+          'ckeditor5_paragraph',
+        ],
+        'text_editor_settings' => [
+          'plugins' => [
+            'ckeditor5_heading' => Heading::DEFAULT_CONFIGURATION,
+          ],
+        ],
+        'expected_elements' => [
+          'p' => [
+            'class' => $text_align_classes,
+          ],
+          'h2' => [
+            'class' => $text_align_classes,
+          ],
+          'h3' => [
+            'class' => $text_align_classes,
+          ],
+          'h4' => [
+            'class' => $text_align_classes,
+          ],
+          'h5' => [
+            'class' => $text_align_classes,
+          ],
+          'h6' => [
+            'class' => $text_align_classes,
+          ],
+        ],
+        'expected_readable_string' => '<p class="text-align-left text-align-center text-align-right text-align-justify"> <h2 class="text-align-left text-align-center text-align-right text-align-justify"> <h3 class="text-align-left text-align-center text-align-right text-align-justify"> <h4 class="text-align-left text-align-center text-align-right text-align-justify"> <h5 class="text-align-left text-align-center text-align-right text-align-justify"> <h6 class="text-align-left text-align-center text-align-right text-align-justify">',
+      ],
+      'alignment and heading, but all class values allowed for headings' => [
+        'plugins' => [
+          'ckeditor5_alignment',
+          'ckeditor5_heading',
+          'ckeditor5_paragraph',
+          'ckeditor5_plugin_elements_test_headingsUseClassAnyValue',
+        ],
+        'text_editor_settings' => [
+          'plugins' => [
+            'ckeditor5_heading' => Heading::DEFAULT_CONFIGURATION,
+          ],
+        ],
+        'expected_elements' => [
+          'p' => [
+            'class' => $text_align_classes,
+          ],
+          'h2' => [
+            'class' => TRUE,
+          ],
+          'h3' => [
+            'class' => TRUE,
+          ],
+          'h4' => [
+            'class' => TRUE,
+          ],
+          'h5' => [
+            'class' => TRUE,
+          ],
+          'h6' => [
+            'class' => TRUE,
+          ],
+          'h1' => [
+            'class' => TRUE,
+          ],
+        ],
+        'expected_readable_string' => '<p class="text-align-left text-align-center text-align-right text-align-justify"> <h2 class> <h3 class> <h4 class> <h5 class> <h6 class> <h1 class>',
+      ],
+      'blockquote combo' => [
+        'plugins' => [
+          'ckeditor5_plugin_elements_test_blockquoteCombo',
+          'ckeditor5_paragraph',
+        ],
+        'text_editor_settings' => [
+          'plugins' => [
+            'ckeditor5_heading' => Heading::DEFAULT_CONFIGURATION,
+          ],
+        ],
+        'expected_elements' => [
+          'p' => [
+            'data-everyblock' => TRUE,
+          ],
+          'blockquote' => [
+            'data-justblockquote' => TRUE,
+            'data-everyblock' => TRUE,
+          ],
+        ],
+        'expected_readable_string' => '<p data-everyblock> <blockquote data-justblockquote data-everyblock>',
+      ],
+      'headings plus headings with attributes' => [
+        'plugins' => [
+          'ckeditor5_plugin_elements_test_headingsWithOtherAttributes',
+          'ckeditor5_heading',
+        ],
+        'text_editor_settings' => [
+          'plugins' => [
+            'ckeditor5_heading' => Heading::DEFAULT_CONFIGURATION,
+          ],
+        ],
+        'expected_elements' => [
+          'h2' => [
+            'class' => [
+              'additional-allowed-class' => TRUE,
+            ],
+          ],
+          'h3' => [
+            'data-just-h3' => TRUE,
+            'data-just-h3-limited' => [
+              'i-am-the-only-allowed-value' => TRUE,
+            ],
+          ],
+          'h4' => FALSE,
+          'h5' => [
+            'data-just-h5-limited' => [
+              'first-allowed-value' => TRUE,
+              'second-allowed-value' => TRUE,
+            ],
+          ],
+          'h6' => FALSE,
+          'h1' => [
+            'data-just-h1' => TRUE,
+          ],
+        ],
+        'expected_readable_string' => '<h2 class="additional-allowed-class"> <h3 data-just-h3 data-just-h3-limited="i-am-the-only-allowed-value"> <h4> <h5 data-just-h5-limited="first-allowed-value second-allowed-value"> <h6> <h1 data-just-h1>',
+      ],
+      'headings plus headings with attributes and alignment' => [
+        'plugins' => [
+          'ckeditor5_plugin_elements_test_headingsWithOtherAttributes',
+          'ckeditor5_heading',
+          'ckeditor5_alignment',
+        ],
+        'text_editor_settings' => [
+          'plugins' => [
+            'ckeditor5_heading' => Heading::DEFAULT_CONFIGURATION,
+          ],
+        ],
+        'expected_elements' => [
+          'h2' => [
+            'class' => ['additional-allowed-class' => TRUE] + $text_align_classes,
+          ],
+          'h3' => [
+            'data-just-h3' => TRUE,
+            'data-just-h3-limited' => [
+              'i-am-the-only-allowed-value' => TRUE,
+            ],
+            'class' => $text_align_classes,
+          ],
+          'h4' => [
+            'class' => $text_align_classes,
+          ],
+          'h5' => [
+            'data-just-h5-limited' => [
+              'first-allowed-value' => TRUE,
+              'second-allowed-value' => TRUE,
+            ],
+            'class' => $text_align_classes,
+          ],
+          'h6' => [
+            'class' => $text_align_classes,
+          ],
+          'h1' => [
+            'data-just-h1' => TRUE,
+            'class' => $text_align_classes,
+          ],
+        ],
+        'expected_readable_string' => '<h2 class="additional-allowed-class text-align-left text-align-center text-align-right text-align-justify"> <h3 data-just-h3 data-just-h3-limited="i-am-the-only-allowed-value" class="text-align-left text-align-center text-align-right text-align-justify"> <h4 class="text-align-left text-align-center text-align-right text-align-justify"> <h5 data-just-h5-limited="first-allowed-value second-allowed-value" class="text-align-left text-align-center text-align-right text-align-justify"> <h6 class="text-align-left text-align-center text-align-right text-align-justify"> <h1 data-just-h1 class="text-align-left text-align-center text-align-right text-align-justify">',
+      ],
+    ];
+  }
+
+  /**
+   * Tests the logic of findPluginSupportingElement.
+   *
+   * When multiple plugins support a given tag, this method decides which plugin
+   * to return based on which provides the broadest attribute support.
+   *
+   * @covers \Drupal\ckeditor5\Plugin\CKEditor5PluginManager::findPluginSupportingElement
+   *
+   * @dataProvider providerTestPluginSupportingElement
+   */
+  public function testPluginSupportingElement(string $tag, ?string $expected_plugin_id) {
+    $this->enableModules(['ckeditor5_definition_supporting_element']);
+    $plugin_id = $this->manager->findPluginSupportingElement($tag);
+    $this->assertSame($expected_plugin_id, $plugin_id);
+  }
+
+  /**
+   * Provides use cases for findPluginSupportingElement().
+   */
+  public function providerTestPluginSupportingElement() {
+    return [
+      'tag that belongs to a superset' => [
+        'tag' => 'h2',
+        'expected_plugin' => 'ckeditor5_heading',
+      ],
+      'tag only available as tag' => [
+        'tag' => 'nav',
+        'expected_plugin' => 'ckeditor5_definition_supporting_element_just_nav',
+      ],
+      'between just tag, full use of class, and constrained use of class, return full use of class' => [
+        'tag' => 'article',
+        'expected_plugin' => 'ckeditor5_definition_supporting_element_article_class',
+      ],
+      'between just tag and full use of class, return full use of class' => [
+        'tag' => 'footer',
+        'expected_plugin' => 'ckeditor5_definition_supporting_element_footer_class',
+      ],
+      'between just tag and constrained use of class, return constrained use of class' => [
+        'tag' => 'aside',
+        'expected_plugin' => 'ckeditor5_definition_supporting_element_aside_class_with_values',
+      ],
+      'between full use of class and constrained use of class, return full use of class' => [
+        'tag' => 'main',
+        'expected_plugin' => 'ckeditor5_definition_supporting_element_main_class',
+      ],
+      'between one plugin allows one attribute, second allows two, return the one that allows two' => [
+        'tag' => 'figure',
+        'expected_plugin' => 'ckeditor5_definition_supporting_element_figure_two_attrib',
+      ],
+      'between one plugin allows one attribute, second allows two (but appearing in opposite order), still return the one that allows two' => [
+        'tag' => 'dialog',
+        'expected_plugin' => 'ckeditor5_definition_supporting_element_dialog_two_attrib',
+      ],
+      'tag that belongs to a plugin with conditions' => [
+        'tag' => 'drupal-media',
+        'expected_plugin' => NULL,
+      ],
+    ];
+  }
+
+}
diff --git a/core/modules/ckeditor5/tests/src/Kernel/CKEditor5ValidationTestTrait.php b/core/modules/ckeditor5/tests/src/Kernel/CKEditor5ValidationTestTrait.php
new file mode 100644
index 000000000000..16c43e5ba0ec
--- /dev/null
+++ b/core/modules/ckeditor5/tests/src/Kernel/CKEditor5ValidationTestTrait.php
@@ -0,0 +1,50 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\Tests\ckeditor5\Kernel;
+
+use Drupal\ckeditor5\Plugin\Editor\CKEditor5;
+use Drupal\editor\EditorInterface;
+use Drupal\filter\FilterFormatInterface;
+
+/**
+ * Defines a trait for testing CKEditor 5 validity.
+ */
+trait CKEditor5ValidationTestTrait {
+
+  /**
+   * Decorator for CKEditor5::validatePair() that returns an assertable array.
+   *
+   * @param \Drupal\editor\EditorInterface $text_editor
+   *   The paired text editor to validate.
+   * @param \Drupal\filter\FilterFormatInterface $text_format
+   *   The paired text format to validate.
+   * @param bool $all_compatibility_problems
+   *   Only fundamental compatibility violations are returned unless TRUE.
+   *
+   * @return array
+   *   An array with property paths as keys and violation messages as values.
+   *
+   * @see \Drupal\ckeditor5\Plugin\Editor\CKEditor5::validatePair
+   */
+  private function validatePairToViolationsArray(EditorInterface $text_editor, FilterFormatInterface $text_format, bool $all_compatibility_problems): array {
+    $violations = CKEditor5::validatePair($text_editor, $text_format, $all_compatibility_problems);
+    $actual_violations = [];
+    foreach ($violations as $violation) {
+      if (!isset($actual_violations[$violation->getPropertyPath()])) {
+        $actual_violations[$violation->getPropertyPath()] = (string) $violation->getMessage();
+      }
+      else {
+        // Transform value from string to array.
+        if (is_string($actual_violations[$violation->getPropertyPath()])) {
+          $actual_violations[$violation->getPropertyPath()] = (array) $actual_violations[$violation->getPropertyPath()];
+        }
+        // And append.
+        $actual_violations[$violation->getPropertyPath()][] = (string) $violation->getMessage();
+      }
+    }
+    return $actual_violations;
+  }
+
+}
diff --git a/core/modules/ckeditor5/tests/src/Kernel/ConfigurablePluginTest.php b/core/modules/ckeditor5/tests/src/Kernel/ConfigurablePluginTest.php
new file mode 100644
index 000000000000..9a598b165804
--- /dev/null
+++ b/core/modules/ckeditor5/tests/src/Kernel/ConfigurablePluginTest.php
@@ -0,0 +1,78 @@
+<?php
+
+namespace Drupal\Tests\ckeditor5\Kernel;
+
+use Drupal\ckeditor5\Plugin\CKEditor5PluginDefinition;
+use Drupal\KernelTests\KernelTestBase;
+
+/**
+ * Tests configurable plugins.
+ *
+ * @group ckeditor5
+ * @internal
+ */
+class ConfigurablePluginTest extends KernelTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = [
+    'ckeditor5',
+    // These modules must be installed for ckeditor5_config_schema_info_alter()
+    // to work, which in turn is necessary for the plugin definition validation
+    // logic.
+    // @see \Drupal\ckeditor5\Plugin\CKEditor5PluginDefinition::validateDrupalAspects()
+    'filter',
+    'editor',
+  ];
+
+  /**
+   * The manager for "CKEditor 5 plugin" plugins.
+   *
+   * @var \Drupal\Component\Plugin\PluginManagerInterface
+   */
+  protected $manager;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp(): void {
+    parent::setUp();
+    $this->manager = $this->container->get('plugin.manager.ckeditor5.plugin');
+  }
+
+  /**
+   * Tests default settings for configurable CKEditor 5 plugins.
+   */
+  public function testDefaults() {
+    $all_definitions = $this->manager->getDefinitions();
+    $configurable_definitions = array_filter($all_definitions, function (CKEditor5PluginDefinition $definition): bool {
+      return $definition->isConfigurable();
+    });
+    $default_plugin_settings = [];
+    foreach (array_keys($configurable_definitions) as $plugin_name) {
+      $default_plugin_settings[$plugin_name] = $this->manager->getPlugin($plugin_name, NULL)->defaultConfiguration();
+    }
+
+    $expected_default_plugin_settings = [
+      'ckeditor5_heading' => [
+        'enabled_headings' => [
+          'heading2',
+          'heading3',
+          'heading4',
+          'heading5',
+          'heading6',
+        ],
+      ],
+      'ckeditor5_sourceEditing' => [
+        'allowed_tags' => [],
+      ],
+      'ckeditor5_language' => [
+        'language_list' => 'un',
+      ],
+      'ckeditor5_imageUpload' => [],
+    ];
+    $this->assertSame($expected_default_plugin_settings, $default_plugin_settings);
+  }
+
+}
diff --git a/core/modules/ckeditor5/tests/src/Kernel/LanguageTest.php b/core/modules/ckeditor5/tests/src/Kernel/LanguageTest.php
new file mode 100644
index 000000000000..c5bfa506ac07
--- /dev/null
+++ b/core/modules/ckeditor5/tests/src/Kernel/LanguageTest.php
@@ -0,0 +1,122 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\Tests\ckeditor5\Kernel;
+
+use Drupal\editor\Entity\Editor;
+use Drupal\filter\Entity\FilterFormat;
+use Drupal\KernelTests\KernelTestBase;
+use Drupal\language\Entity\ConfigurableLanguage;
+use Symfony\Component\Yaml\Yaml;
+
+/**
+ * Tests language resolving for CKEditor 5.
+ *
+ * @group ckeditor5
+ * @internal
+ */
+class LanguageTest extends KernelTestBase {
+
+  /**
+   * The CKEditor 5 plugin.
+   *
+   * @var \Drupal\ckeditor5\Plugin\Editor\CKEditor5
+   */
+  protected $ckeditor5;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = [
+    'system',
+    'user',
+    'ckeditor5',
+    'editor',
+    'filter',
+    'language',
+    'locale',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp(): void {
+    parent::setUp();
+    $this->ckeditor5 = $this->container->get('plugin.manager.editor')->createInstance('ckeditor5');
+
+    FilterFormat::create(
+      Yaml::parseFile('core/profiles/standard/config/install/filter.format.basic_html.yml')
+    )->save();
+    Editor::create([
+      'format' => 'basic_html',
+      'editor' => 'ckeditor5',
+    ])->save();
+
+    $this->installConfig(['language']);
+  }
+
+  /**
+   * Ensure that languages are resolved correctly.
+   *
+   * @param string $drupal_langcode
+   *   The language code in Drupal.
+   * @param string $cke5_langcode
+   *   The language code in CKEditor 5.
+   * @param bool $is_missing_mapping
+   *   Whether this mapping is expected to be missing from language.mappings.
+   *
+   * @dataProvider provider
+   */
+  public function test(string $drupal_langcode, string $cke5_langcode, bool $is_missing_mapping = FALSE): void {
+    $editor = Editor::load('basic_html');
+
+    ConfigurableLanguage::createFromLangcode($drupal_langcode)->save();
+    $this->config('system.site')->set('default_langcode', $drupal_langcode)->save();
+
+    if ($is_missing_mapping) {
+      // CKEditor 5's UI language falls back to English, until the language
+      // mapping is expanded.
+      $settings = $this->ckeditor5->getJSSettings($editor);
+      $this->assertSame('en', $settings['language']['ui']);
+
+      // Expand the language mapping.
+      $config = $this->config('language.mappings');
+      $mapping = $config->get('map');
+      $mapping += [$cke5_langcode => $drupal_langcode];
+      $config->set('map', $mapping)->save();
+    }
+
+    $settings = $this->ckeditor5->getJSSettings($editor);
+    $this->assertSame($cke5_langcode, $settings['language']['ui']);
+  }
+
+  /**
+   * Provides a list of language code pairs.
+   *
+   * @return \string[][]
+   */
+  public function provider(): array {
+    $random_langcode = $this->randomMachineName();
+    return [
+      'Language code transformed from browser mappings' => [
+        'drupal_langcode' => 'pt-pt',
+        'cke_langcode' => 'pt',
+      ],
+      'Language code transformed from browser mappings 2' => [
+        'drupal_langcode' => 'zh-hans',
+        'cke_langcode' => 'zh-cn',
+      ],
+      'Language code both in Drupal and CKEditor' => [
+        'drupal_langcode' => 'fi',
+        'cke_langcode' => 'fi',
+      ],
+      'Language code not in Drupal but in CKEditor 5 requires new language.mappings entry' => [
+        'drupal_langcode' => $random_langcode,
+        'cke_langcode' => 'de-ch',
+        'is_missing_mapping' => TRUE,
+      ],
+    ];
+  }
+
+}
diff --git a/core/modules/ckeditor5/tests/src/Kernel/SmartDefaultSettingsTest.php b/core/modules/ckeditor5/tests/src/Kernel/SmartDefaultSettingsTest.php
new file mode 100644
index 000000000000..d03e2c98f968
--- /dev/null
+++ b/core/modules/ckeditor5/tests/src/Kernel/SmartDefaultSettingsTest.php
@@ -0,0 +1,682 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\Tests\ckeditor5\Kernel;
+
+use Drupal\ckeditor5\HTMLRestrictionsUtilities;
+use Drupal\Component\Utility\NestedArray;
+use Drupal\editor\Entity\Editor;
+use Drupal\filter\Entity\FilterFormat;
+use Drupal\KernelTests\KernelTestBase;
+use Drupal\Tests\SchemaCheckTestTrait;
+use Symfony\Component\Yaml\Yaml;
+
+/**
+ * @covers \Drupal\ckeditor5\SmartDefaultSettings::computeSmartDefaultSettings()
+ * @group ckeditor5
+ * @internal
+ */
+class SmartDefaultSettingsTest extends KernelTestBase {
+
+  use SchemaCheckTestTrait;
+  use CKEditor5ValidationTestTrait;
+
+  /**
+   * The manager for "CKEditor 5 plugin" plugins.
+   *
+   * @var \Drupal\Component\Plugin\PluginManagerInterface
+   */
+  protected $manager;
+
+  /**
+   * The typed config manager.
+   *
+   * @var \Drupal\Core\Config\TypedConfigManagerInterface
+   */
+  protected $typedConfig;
+
+  /**
+   * Smart default settings utility.
+   *
+   * @var \Drupal\ckeditor5\SmartDefaultSettings
+   */
+  protected $smartDefaultSettings;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = [
+    'ckeditor',
+    'ckeditor_test',
+    'ckeditor5',
+    'editor',
+    'filter',
+    'user',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp(): void {
+    parent::setUp();
+    $this->manager = $this->container->get('plugin.manager.ckeditor5.plugin');
+    $this->typedConfig = $this->container->get('config.typed');
+    $this->smartDefaultSettings = $this->container->get('ckeditor5.smart_default_settings');
+
+    FilterFormat::create(
+      Yaml::parseFile('core/profiles/standard/config/install/filter.format.full_html.yml')
+    )
+      ->setSyncing(TRUE)
+      ->save();
+    Editor::create(
+      Yaml::parseFile('core/profiles/standard/config/install/editor.editor.full_html.yml')
+    )->save();
+
+    $basic_html_format = Yaml::parseFile('core/profiles/standard/config/install/filter.format.basic_html.yml');
+    FilterFormat::create($basic_html_format)->save();
+    Editor::create(
+      Yaml::parseFile('core/profiles/standard/config/install/editor.editor.basic_html.yml')
+    )->save();
+
+    FilterFormat::create(
+      Yaml::parseFile('core/profiles/standard/config/install/filter.format.restricted_html.yml')
+    )->save();
+
+    $allowed_html_parents = ['filters', 'filter_html', 'settings', 'allowed_html'];
+    $current_value = NestedArray::getValue($basic_html_format, $allowed_html_parents);
+    $new_value = str_replace(['<h4 id> ', '<h6 id> '], '', $current_value);
+    $basic_html_format_without_h4_h6 = $basic_html_format;
+    $basic_html_format_without_h4_h6['name'] .= ' (without H4 and H6)';
+    $basic_html_format_without_h4_h6['format'] = 'basic_html_without_h4_h6';
+    NestedArray::setValue($basic_html_format_without_h4_h6, $allowed_html_parents, $new_value);
+    FilterFormat::create($basic_html_format_without_h4_h6)->save();
+    Editor::create(
+      ['format' => 'basic_html_without_h4_h6']
+      +
+      Yaml::parseFile('core/profiles/standard/config/install/editor.editor.basic_html.yml')
+    )->save();
+
+    $filter_plugin_manager = $this->container->get('plugin.manager.filter');
+    FilterFormat::create([
+      'format' => 'filter_only__filter_html',
+      'name' => 'Only the "filter_html" filter and its default settings',
+      'filters' => [
+        'filter_html' => [
+          'status' => 1,
+          'settings' => $filter_plugin_manager->getDefinition('filter_html')['settings'],
+        ],
+      ],
+    ])->save();
+
+    FilterFormat::create([
+      'format' => 'cke4_plugins_with_settings',
+      'name' => 'All CKEditor 4 core plugins with settings',
+    ])->save();
+    Editor::create([
+      'format' => 'cke4_plugins_with_settings',
+      'editor' => 'ckeditor',
+      'settings' => [
+        'toolbar' => [
+          'rows' => [
+            0 => [
+              [
+                'name' => 'Buttons with settings',
+                'items' => [
+                  'Language',
+                  'Styles',
+                ],
+              ],
+              [
+                'name' => 'Button without upgrade path',
+                'items' => [
+                  'Llama',
+                ],
+              ],
+            ],
+          ],
+        ],
+        'plugins' => [
+          'language' => [
+            'language_list' => 'all',
+          ],
+          'stylescombo' => [
+            'styles' => "p.callout|Callout\r\nblockquote.interesting|Interesting quote",
+          ],
+          // Plugin setting without upgrade path.
+          'llama_contextual_and_button' => [
+            'ultra_llama_mode' => TRUE,
+          ],
+        ],
+      ],
+    ])->save();
+
+    FilterFormat::create([
+      'format' => 'cke4_plugins_with_settings_for_disabled_plugins',
+      'name' => 'All CKEditor 4 core plugins with settings for disabled plugins',
+    ])->save();
+    Editor::create([
+      'format' => 'cke4_plugins_with_settings_for_disabled_plugins',
+      'editor' => 'ckeditor',
+      'settings' => [
+        // Empty toolbar.
+        'toolbar' => [
+          'rows' => [
+            0 => [
+              [
+                'name' => 'Only buttons without settings',
+                'items' => [
+                  'Bold',
+                ],
+              ],
+            ],
+          ],
+        ],
+        // Same plugin settings as `cke4_plugins_with_settings`.
+        'plugins' => Editor::load('cke4_plugins_with_settings')->getSettings()['plugins'],
+      ],
+    ])->save();
+
+  }
+
+  /**
+   * Tests the CKEditor 5 default settings conversion.
+   *
+   * @param string $format_id
+   *   The existing text format/editor pair to switch to CKEditor 5.
+   * @param array $filters_to_drop
+   *   An array of filter IDs to drop as the keys and either TRUE (fundamental
+   *   compatibility error from CKEditor 5 expected) or FALSE (if optional to
+   *   drop).
+   * @param array $expected_ckeditor5_settings
+   *   The CKEditor 5 settings to test.
+   * @param string $expected_superset
+   *   The default settings conversion may generate a superset of the original
+   *   HTML restrictions. This lists the additional elements and attributes.
+   * @param array $expected_fundamental_compatibility_violations
+   *   All expected fundamental compatibility violations for the given text
+   *   format.
+   * @param string[] $expected_messages
+   *   The expected messages associated with the computed settings.
+   * @param array|null $expected_post_filter_drop_fundamental_compatibility_violations
+   *   All expected fundamental compatibility violations for the given text
+   *   format, after dropping filters specified in $filters_to_drop.
+   *
+   * @dataProvider provider
+   */
+  public function test(string $format_id, array $filters_to_drop, array $expected_ckeditor5_settings, string $expected_superset, array $expected_fundamental_compatibility_violations, array $expected_messages, ?array $expected_post_filter_drop_fundamental_compatibility_violations = NULL): void {
+    $text_format = FilterFormat::load($format_id);
+    $text_editor = Editor::load($format_id);
+
+    // Check the pre-CKE5 switch validation errors in case of a minimal (empty)
+    // CKEditor 5 text editor config entity, to allow us to detect fundamental
+    // compatibility problems, such as incompatible filters.
+    $minimal_valid_cke5_text_editor = Editor::create([
+      'format' => $format_id,
+      'editor' => 'ckeditor5',
+      'settings' => ['toolbar' => ['items' => []]],
+    ]);
+    $pre_ck5_validation_errors = $this->validatePairToViolationsArray($minimal_valid_cke5_text_editor, $text_format, FALSE);
+    $this->assertSame($expected_fundamental_compatibility_violations, $pre_ck5_validation_errors);
+
+    if (!empty($filters_to_drop)) {
+      foreach ($filters_to_drop as $filter_name => $is_fundamentally_incompatible) {
+        // Assert if it should appear in the pre-CKE5 switch validation errors.
+        $this->assertSame($is_fundamentally_incompatible, mb_strpos(implode("\n\n", $pre_ck5_validation_errors[''] ?? []), $filter_name) !== FALSE);
+        $text_format->setFilterConfig($filter_name, [
+          'status' => FALSE,
+        ]);
+      }
+
+      // If filters were dropped because of a fundamental compatibility problem,
+      // validate the text format + minimal CKEditor 5 text editor config again
+      // after dropping those filters from the text format. This allows us to be
+      // confident that we have caught all fundamental compatibility problems.
+      if (!empty(array_filter($filters_to_drop))) {
+        $post_filter_drop_validation_errors = $this->validatePairToViolationsArray($minimal_valid_cke5_text_editor, $text_format, FALSE);
+        $this->assertSame($expected_post_filter_drop_fundamental_compatibility_violations, $post_filter_drop_validation_errors);
+      }
+    }
+
+    [$updated_text_editor, $messages] = $this->smartDefaultSettings->computeSmartDefaultSettings($text_editor, $text_format);
+
+    // Ensure that the result of ::computeSmartDefaultSettings() always complies
+    // with the config schema.
+    $this->assertConfigSchema(
+      $this->typedConfig,
+      $updated_text_editor->getConfigDependencyName(),
+      $updated_text_editor->toArray()
+    );
+
+    // We should now have the expected data in the Editor config entity.
+    $this->assertSame('ckeditor5', $updated_text_editor->getEditor());
+    $this->assertSame($expected_ckeditor5_settings, $updated_text_editor->getSettings());
+
+    // If this text format already had a text editor, ensure that the settings
+    // do not match the original settings, but the image upload settings should
+    // not have been changed.
+    if ($text_editor !== NULL) {
+      $this->assertNotSame($text_editor->getSettings(), $updated_text_editor->getSettings());
+      $this->assertSame($text_editor->getImageUploadSettings(), $updated_text_editor->getImageUploadSettings());
+    }
+
+    // The resulting Editor config entity should be valid.
+    $typed_config = $this->typedConfig->createFromNameAndData(
+      $updated_text_editor->getConfigDependencyName(),
+      $updated_text_editor->toArray(),
+    );
+    $this->assertCount(0, $typed_config->validate());
+
+    // If the text format has HTML restrictions, ensure that a strict superset
+    // is allowed after switching to CKEditor 5.
+    $html_restrictions = $text_format->getHtmlRestrictions();
+    $allowed_tags = $html_restrictions['allowed'] ?? [];
+    if ($allowed_tags) {
+      unset($allowed_tags['*']);
+      $enabled_plugins = array_keys($this->manager->getEnabledDefinitions($updated_text_editor));
+      $updated_allowed_tags = $this->manager->getProvidedElements($enabled_plugins, $updated_text_editor);
+      $unsupported_tags_attributes = HTMLRestrictionsUtilities::diffAllowedElements($allowed_tags, $updated_allowed_tags);
+      $superset_tags_attributes = HTMLRestrictionsUtilities::diffAllowedElements($updated_allowed_tags, $allowed_tags);
+      $this->assertSame($expected_superset, implode(' ', HTMLRestrictionsUtilities::toReadableElements($superset_tags_attributes)));
+      $this->assertEmpty($unsupported_tags_attributes, "The following tags/attributes are not allowed in the updated text format:" . print_r($unsupported_tags_attributes, TRUE));
+
+      // Update the text format like ckeditor5_form_filter_format_form_alter()
+      // would.
+      $updated_text_format = clone $text_format;
+      $filter_html_config = $text_format->filters('filter_html')->getConfiguration();
+      $filter_html_config['settings']['allowed_html'] = implode(' ', HTMLRestrictionsUtilities::toReadableElements($updated_allowed_tags));
+      $updated_text_format->setFilterConfig('filter_html', $filter_html_config);
+    }
+    else {
+      // No update.
+      $updated_text_format = $text_format;
+    }
+
+    // The resulting pair should be valid.
+    $this->assertSame([], $this->validatePairToViolationsArray($updated_text_editor, $updated_text_format, TRUE));
+
+    foreach ($messages as $key => $message) {
+      $messages[$key] = (string) $message;
+    }
+    $this->assertSame($expected_messages, $messages);
+  }
+
+  /**
+   * Data provider.
+   *
+   * @return \Generator
+   *   Test scenarios.
+   */
+  public function provider() {
+    $basic_html_test_case = [
+      'format_id' => 'basic_html',
+      'filters_to_drop' => [],
+      'expected_ckeditor5_settings' => [
+        'toolbar' => [
+          'items' => [
+            // Items based on toolbar items from prior config.
+            'bold',
+            'italic',
+            '|',
+            'link',
+            '|',
+            'bulletedList',
+            'numberedList',
+            '|',
+            'blockQuote',
+            'uploadImage',
+            '|',
+            'heading',
+            '|',
+            'sourceEditing',
+            // Items added based on "allowed tags" config.
+            '|',
+            // The 'code' button added because <code> is allowed.
+            'code',
+            // The 'textPartLanguage' button added because <span> is allowed.
+            'textPartLanguage',
+          ],
+        ],
+        'plugins' => [
+          'ckeditor5_sourceEditing' => [
+            'allowed_tags' => [
+              '<cite>',
+              '<dl>',
+              '<dt>',
+              '<dd>',
+              '<a hreflang>',
+              '<blockquote cite>',
+              '<ul type>',
+              '<ol start type>',
+              '<h2 id>',
+              '<h3 id>',
+              '<h4 id>',
+              '<h5 id>',
+              '<h6 id>',
+            ],
+          ],
+          'ckeditor5_heading' => [
+            'enabled_headings' => [
+              'heading2',
+              'heading3',
+              'heading4',
+              'heading5',
+              'heading6',
+            ],
+          ],
+          'ckeditor5_language' => [
+            'language_list' => 'un',
+          ],
+        ],
+      ],
+      'expected_superset' => '<span lang dir>',
+      'expected_fundamental_compatibility_violations' => [],
+      'expected_messages' => [
+        'The following plugins were enabled to support tags that are allowed by this text format: <em class="placeholder">Code (for tags: &lt;code&gt;) Language (for tags: &lt;span&gt;)</em>.',
+        'The following tags were permitted by this format\'s filter configuration, but no plugin was available that supports them. To ensure the tags remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;cite&gt; &lt;dl&gt; &lt;dt&gt; &lt;dd&gt;.',
+      ],
+    ];
+
+    yield "basic_html can be switched to CKEditor 5 without problems (3 upgrade messages)" => NestedArray::mergeDeep(
+      $basic_html_test_case,
+      [
+        'expected_messages' => [
+          'This format\'s HTML filters includes plugins that support the following tags, but not some of their attributes. To ensure these attributes remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;a hreflang&gt; &lt;blockquote cite&gt; &lt;ul type&gt; &lt;ol start type&gt; &lt;h2 id&gt; &lt;h3 id&gt; &lt;h4 id&gt; &lt;h5 id&gt; &lt;h6 id&gt;.',
+        ],
+      ]
+    );
+
+    yield "basic_html with filter_caption removed => disallows <img data-caption> => supported through sourceEditing (3 upgrade messages)" => NestedArray::mergeDeep(
+      $basic_html_test_case,
+      [
+        'filters_to_drop' => [
+          'filter_caption' => FALSE,
+        ],
+        'expected_ckeditor5_settings' => [
+          'plugins' => [
+            'ckeditor5_sourceEditing' => [
+              'allowed_tags' => [
+                '<img data-caption>',
+              ],
+            ],
+          ],
+        ],
+        'expected_messages' => [
+          'This format\'s HTML filters includes plugins that support the following tags, but not some of their attributes. To ensure these attributes remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;a hreflang&gt; &lt;blockquote cite&gt; &lt;ul type&gt; &lt;ol start type&gt; &lt;h2 id&gt; &lt;h3 id&gt; &lt;h4 id&gt; &lt;h5 id&gt; &lt;h6 id&gt; &lt;img data-caption&gt;.',
+        ],
+      ]);
+
+    yield "basic_html with filter_align removed => disallows <img data-align> => supported through sourceEditing (3 upgrade messages) " => NestedArray::mergeDeep(
+      $basic_html_test_case,
+      [
+        'filters_to_drop' => [
+          'filter_align' => FALSE,
+        ],
+        'expected_ckeditor5_settings' => [
+          'plugins' => [
+            'ckeditor5_sourceEditing' => [
+              'allowed_tags' => [
+                '<img data-align>',
+              ],
+            ],
+          ],
+        ],
+        'expected_messages' => [
+          'This format\'s HTML filters includes plugins that support the following tags, but not some of their attributes. To ensure these attributes remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;a hreflang&gt; &lt;blockquote cite&gt; &lt;ul type&gt; &lt;ol start type&gt; &lt;h2 id&gt; &lt;h3 id&gt; &lt;h4 id&gt; &lt;h5 id&gt; &lt;h6 id&gt; &lt;img data-align&gt;.',
+        ],
+      ]);
+
+    yield "basic_html_without_h4_h6 can be switched to CKEditor 5 without problems, heading configuration computed automatically" => [
+      'format_id' => 'basic_html_without_h4_h6',
+      'filters_to_drop' => $basic_html_test_case['filters_to_drop'],
+      'expected_ckeditor5_settings' => [
+        'toolbar' => $basic_html_test_case['expected_ckeditor5_settings']['toolbar'],
+        'plugins' => [
+          'ckeditor5_sourceEditing' => [
+            'allowed_tags' => array_values(array_diff(
+              $basic_html_test_case['expected_ckeditor5_settings']['plugins']['ckeditor5_sourceEditing']['allowed_tags'],
+              ['<h4 id>', '<h6 id>'],
+            )),
+          ],
+          'ckeditor5_heading' => [
+            'enabled_headings' => [
+              'heading2',
+              'heading3',
+              'heading5',
+            ],
+          ],
+          'ckeditor5_language' => $basic_html_test_case['expected_ckeditor5_settings']['plugins']['ckeditor5_language'],
+        ],
+      ],
+      'expected_superset' => $basic_html_test_case['expected_superset'],
+      'expected_fundamental_compatibility_violations' => $basic_html_test_case['expected_fundamental_compatibility_violations'],
+      'expected_messages' => array_merge(
+        $basic_html_test_case['expected_messages'],
+        ['This format\'s HTML filters includes plugins that support the following tags, but not some of their attributes. To ensure these attributes remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;a hreflang&gt; &lt;blockquote cite&gt; &lt;ul type&gt; &lt;ol start type&gt; &lt;h2 id&gt; &lt;h3 id&gt; &lt;h5 id&gt;.'],
+      ),
+    ];
+
+    yield "restricted_html can be switched to CKEditor 5 after dropping the two markup-creating filters (3 upgrade messages)" => [
+      'format_id' => 'restricted_html',
+      'filters_to_drop' => [
+        'filter_autop' => TRUE,
+        'filter_url' => TRUE,
+      ],
+      'expected_ckeditor5_settings' => [
+        'toolbar' => [
+          'items' => [
+            // Items originating from CKEditor5::getDefaultSettings().
+            'heading',
+            'bold',
+            'italic',
+            // Items added based on "allowed tags" config.
+            '|',
+            // Because '<a>' is in allowed_html.
+            'link',
+            // Because '<blockquote cite>' is in allowed_html.
+            'blockQuote',
+            // Because '<code>' is in allowed_html.
+            'code',
+            // Because '<ul>' is in allowed_html.
+            'bulletedList',
+            // Because '<ol>' is in allowed_html.
+            'numberedList',
+            // Because additional tags need to be allowed to achieve a superset.
+            'sourceEditing',
+          ],
+        ],
+        'plugins' => [
+          'ckeditor5_heading' => [
+            'enabled_headings' => [
+              'heading2',
+              'heading3',
+              'heading4',
+              'heading5',
+              'heading6',
+            ],
+          ],
+          'ckeditor5_sourceEditing' => [
+            'allowed_tags' => [
+              '<cite>',
+              '<dl>',
+              '<dt>',
+              '<dd>',
+              '<a hreflang>',
+              '<blockquote cite>',
+              '<ul type>',
+              '<ol start type>',
+              '<h2 id>',
+              '<h3 id>',
+              '<h4 id>',
+              '<h5 id>',
+              '<h6 id>',
+            ],
+          ],
+        ],
+      ],
+      'expected_superset' => '<br> <p>',
+      'expected_fundamental_compatibility_violations' => [
+        '' => [
+          0 => 'CKEditor 5 only works with HTML-based text formats. The "<em class="placeholder">Convert URLs into links</em>" (<em class="placeholder">filter_url</em>) filter implies this text format is not HTML anymore.',
+          1 => 'CKEditor 5 only works with HTML-based text formats. The "<em class="placeholder">Convert line breaks into HTML (i.e. &lt;code&gt;&amp;lt;br&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;)</em>" (<em class="placeholder">filter_autop</em>) filter implies this text format is not HTML anymore.',
+        ],
+      ],
+      'expected_messages' => [
+        'The following plugins were enabled to support tags that are allowed by this text format: <em class="placeholder">Link (for tags: &lt;a&gt;) Block quote (for tags: &lt;blockquote&gt;) Code (for tags: &lt;code&gt;) List (for tags: &lt;ul&gt;&lt;ol&gt;&lt;li&gt;)</em>.',
+        'The following tags were permitted by this format\'s filter configuration, but no plugin was available that supports them. To ensure the tags remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;cite&gt; &lt;dl&gt; &lt;dt&gt; &lt;dd&gt;.',
+        'This format\'s HTML filters includes plugins that support the following tags, but not some of their attributes. To ensure these attributes remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;a hreflang&gt; &lt;blockquote cite&gt; &lt;ul type&gt; &lt;ol start type&gt; &lt;h2 id&gt; &lt;h3 id&gt; &lt;h4 id&gt; &lt;h5 id&gt; &lt;h6 id&gt;.',
+      ],
+      'expected_post_filter_drop_fundamental_compatibility_violations' => [
+        '' => 'CKEditor 5 needs at least the &lt;p&gt; and &lt;br&gt; tags to be allowed to be able to function. They are not allowed by the "<em class="placeholder">Limit allowed HTML tags and correct faulty HTML</em>" (<em class="placeholder">filter_html</em>) filter.',
+      ],
+    ];
+
+    yield "full_html can be switched to CKEditor 5 (no upgrade messages)" => [
+      'format_id' => 'full_html',
+      'filters_to_drop' => [],
+      'expected_ckeditor5_settings' => [
+        'toolbar' => [
+          'items' => [
+            'bold',
+            'italic',
+            'strikethrough',
+            'superscript',
+            'subscript',
+            'removeFormat',
+            '|',
+            'link',
+            '|',
+            'bulletedList',
+            'numberedList',
+            '|',
+            'blockQuote',
+            'uploadImage',
+            'insertTable',
+            'horizontalLine',
+            '|',
+            'heading',
+            '|',
+            'sourceEditing',
+          ],
+        ],
+        'plugins' => [
+          'ckeditor5_heading' => [
+            'enabled_headings' => [
+              'heading2',
+              'heading3',
+              'heading4',
+              'heading5',
+              'heading6',
+            ],
+          ],
+          'ckeditor5_sourceEditing' => [
+            'allowed_tags' => [],
+          ],
+        ],
+      ],
+      'expected_superset' => '',
+      'expected_fundamental_compatibility_violations' => [],
+      'expected_messages' => [],
+    ];
+
+    yield "filter_only__filter_html can be switched to CKEditor 5 without problems (3 upgrade messages)" => [
+      'format_id' => 'filter_only__filter_html',
+      'filters_to_drop' => [],
+      'expected_ckeditor5_settings' => [
+        'toolbar' => [
+          'items' => [
+            // Default toolbar items.
+            'heading',
+            'bold',
+            'italic',
+            '|',
+            // Items added based on filter_html's "allowed tags" config.
+            'link',
+            'blockQuote',
+            'code',
+            'bulletedList',
+            'numberedList',
+            'sourceEditing',
+          ],
+        ],
+        'plugins' => [
+          'ckeditor5_heading' => [
+            'enabled_headings' => [
+              'heading2',
+              'heading3',
+              'heading4',
+              'heading5',
+              'heading6',
+            ],
+          ],
+          'ckeditor5_sourceEditing' => [
+            'allowed_tags' => [
+              '<cite>',
+              '<dl>',
+              '<dt>',
+              '<dd>',
+              '<a hreflang>',
+              '<blockquote cite>',
+              '<ul type>',
+              '<ol start type="1 A I">',
+              '<h2 id="jump-*">',
+              '<h3 id>',
+              '<h4 id>',
+              '<h5 id>',
+              '<h6 id>',
+            ],
+          ],
+        ],
+      ],
+      'expected_superset' => '<br> <p>',
+      'expected_fundamental_compatibility_violations' => [
+        '' => 'CKEditor 5 needs at least the &lt;p&gt; and &lt;br&gt; tags to be allowed to be able to function. They are not allowed by the "<em class="placeholder">Limit allowed HTML tags and correct faulty HTML</em>" (<em class="placeholder">filter_html</em>) filter.',
+      ],
+      'expected_messages' => [
+        'The following plugins were enabled to support tags that are allowed by this text format: <em class="placeholder">Link (for tags: &lt;a&gt;) Block quote (for tags: &lt;blockquote&gt;) Code (for tags: &lt;code&gt;) List (for tags: &lt;ul&gt;&lt;ol&gt;&lt;li&gt;)</em>.',
+        'The following tags were permitted by this format\'s filter configuration, but no plugin was available that supports them. To ensure the tags remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;cite&gt; &lt;dl&gt; &lt;dt&gt; &lt;dd&gt;.',
+        'This format\'s HTML filters includes plugins that support the following tags, but not some of their attributes. To ensure these attributes remain supported by this text format, the following were added to the Source Editing plugin\'s <em>Manually editable HTML tags</em>: &lt;a hreflang&gt; &lt;blockquote cite&gt; &lt;ul type&gt; &lt;ol start type=&quot;1 A I&quot;&gt; &lt;h2 id=&quot;jump-*&quot;&gt; &lt;h3 id&gt; &lt;h4 id&gt; &lt;h5 id&gt; &lt;h6 id&gt;.',
+      ],
+    ];
+
+    yield "cke4_plugins_with_settings can be switched to CKEditor 5 without problems, settings are upgraded too" => [
+      'format_id' => 'cke4_plugins_with_settings',
+      'filters_to_drop' => [],
+      'expected_ckeditor5_settings' => [
+        'toolbar' => [
+          'items' => [
+            'textPartLanguage',
+          ],
+        ],
+        'plugins' => [
+          'ckeditor5_language' => [
+            'language_list' => 'all',
+          ],
+        ],
+      ],
+      'expected_superset' => '',
+      'expected_fundamental_compatibility_violations' => [],
+      'expected_messages' => [
+        'The CKEditor 4 button <em class="placeholder">Llama</em> does not have a known upgrade path. If it allowed editing markup, then you can do so now through the Source Editing functionality.',
+        'The <em class="placeholder">llama_contextual_and_button</em> plugin settings do not have a known upgrade path.',
+      ],
+    ];
+
+    yield "cke4_plugins_with_settings_for_disabled_plugins can be switched to CKEditor 5 without problems; irrelevant settings are dropped" => [
+      'format_id' => 'cke4_plugins_with_settings_for_disabled_plugins',
+      'filters_to_drop' => [],
+      'expected_ckeditor5_settings' => [
+        'toolbar' => [
+          'items' => [
+            'bold',
+          ],
+        ],
+        'plugins' => [],
+      ],
+      'expected_superset' => '',
+      'expected_fundamental_compatibility_violations' => [],
+      'expected_messages' => [],
+    ];
+  }
+
+}
diff --git a/core/modules/ckeditor5/tests/src/Kernel/ValidatorsTest.php b/core/modules/ckeditor5/tests/src/Kernel/ValidatorsTest.php
new file mode 100644
index 000000000000..151cfbd9d8c5
--- /dev/null
+++ b/core/modules/ckeditor5/tests/src/Kernel/ValidatorsTest.php
@@ -0,0 +1,775 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\Tests\ckeditor5\Kernel;
+
+use Drupal\Component\Utility\Html;
+use Drupal\editor\EditorInterface;
+use Drupal\editor\Entity\Editor;
+use Drupal\filter\Entity\FilterFormat;
+use Drupal\filter\FilterFormatInterface;
+use Drupal\KernelTests\KernelTestBase;
+use Drupal\Tests\SchemaCheckTestTrait;
+use Symfony\Component\Yaml\Yaml;
+
+/**
+ * @covers \Drupal\ckeditor5\Plugin\Validation\Constraint\ToolbarItemConstraintValidator
+ * @covers \Drupal\ckeditor5\Plugin\Validation\Constraint\ToolbarItemDependencyConstraintValidator
+ * @covers \Drupal\ckeditor5\Plugin\Validation\Constraint\EnabledConfigurablePluginsConstraintValidator
+ * @covers \Drupal\ckeditor5\Plugin\Editor\CKEditor5::validatePair()
+ * @covers \Drupal\ckeditor5\Plugin\Validation\Constraint\FundamentalCompatibilityConstraintValidator
+ * @group ckeditor5
+ */
+class ValidatorsTest extends KernelTestBase {
+
+  use SchemaCheckTestTrait;
+  use CKEditor5ValidationTestTrait;
+
+  /**
+   * The typed config manager.
+   *
+   * @var \Drupal\Core\Config\TypedConfigManagerInterface
+   */
+  protected $typedConfig;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = [
+    'ckeditor5',
+    'ckeditor5_plugin_conditions_test',
+    'editor',
+    'filter',
+    'filter_test',
+    'media',
+    'media_library',
+    'views',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp(): void {
+    parent::setUp();
+    $this->typedConfig = $this->container->get('config.typed');
+  }
+
+  /**
+   * @covers \Drupal\ckeditor5\Plugin\Validation\Constraint\ToolbarItemConstraintValidator
+   * @covers \Drupal\ckeditor5\Plugin\Validation\Constraint\ToolbarItemDependencyConstraintValidator
+   * @covers \Drupal\ckeditor5\Plugin\Validation\Constraint\EnabledConfigurablePluginsConstraintValidator
+   * @dataProvider provider
+   *
+   * @param array $ckeditor5_settings
+   *   The CKEditor 5 settings to test.
+   * @param array $expected_violations
+   *   All expected violations for the given CKEditor 5 settings, with property
+   *   path as keys and message as values.
+   */
+  public function test(array $ckeditor5_settings, array $expected_violations) {
+    // The data provider is unable to access services, so the test scenario of
+    // testing with CKEditor 5's default settings is partially provided here.
+    if ($ckeditor5_settings === ['__DEFAULT__']) {
+      $ckeditor5_settings = \Drupal::service('plugin.manager.editor')->createInstance('ckeditor5')->getDefaultSettings();
+    }
+
+    FilterFormat::create([
+      'format' => 'dummy',
+      'name' => 'Dummy',
+    ])->save();
+    $editor = Editor::create([
+      'format' => 'dummy',
+      'editor' => 'ckeditor5',
+      'settings' => $ckeditor5_settings,
+      'image_upload' => [],
+    ]);
+
+    $typed_config = $this->typedConfig->createFromNameAndData(
+      $editor->getConfigDependencyName(),
+      $editor->toArray(),
+    );
+    $violations = $typed_config->validate();
+
+    $actual_violations = [];
+    foreach ($violations as $violation) {
+      $actual_violations[$violation->getPropertyPath()] = (string) $violation->getMessage();
+    }
+    $this->assertSame($expected_violations, $actual_violations);
+
+    if (empty($expected_violations)) {
+      $this->assertConfigSchema(
+        $this->typedConfig,
+        $editor->getConfigDependencyName(),
+        $typed_config->getValue()
+      );
+    }
+  }
+
+  /**
+   * Provides a list of Text Editor config entities using CKEditor 5 to test.
+   */
+  public function provider(): array {
+    $data = [];
+    $data['CKEditor5::getDefaultSettings()'] = [
+      // @see ::test()
+      'settings' => ['__DEFAULT__'],
+      'violations' => [],
+    ];
+    $data['non-existent toolbar button'] = [
+      'settings' => [
+        'toolbar' => [
+          'items' => [
+            'underline',
+            'bold',
+            'italic',
+            '-',
+            'bulletedList',
+            'foobar',
+          ],
+        ],
+        'plugins' => [],
+      ],
+      'violations' => [
+        'settings.toolbar.items.5' => 'The provided toolbar item <em class="placeholder">foobar</em> is not valid.',
+      ],
+    ];
+
+    $data['missing heading plugin configuration'] = [
+      'settings' => [
+        'toolbar' => [
+          'items' => [
+            'heading',
+          ],
+        ],
+        'plugins' => [],
+      ],
+      'violations' => [
+        'settings.plugins.ckeditor5_heading' => 'Configuration for the enabled plugin "<em class="placeholder">Headings</em>" (<em class="placeholder">ckeditor5_heading</em>) is missing.',
+      ],
+    ];
+    $data['missing language plugin configuration'] = [
+      'settings' => [
+        'toolbar' => [
+          'items' => [
+            'textPartLanguage',
+          ],
+        ],
+        'plugins' => [],
+      ],
+      'violations' => [
+        'settings.plugins.ckeditor5_language' => 'Configuration for the enabled plugin "<em class="placeholder">Language</em>" (<em class="placeholder">ckeditor5_language</em>) is missing.',
+      ],
+    ];
+    $data['empty language plugin configuration'] = [
+      'settings' => [
+        'toolbar' => [
+          'items' => [
+            'textPartLanguage',
+          ],
+        ],
+        'plugins' => [
+          'ckeditor5_language' => [],
+        ],
+      ],
+      'violations' => [
+        'settings.plugins.ckeditor5_language' => 'Configuration for the enabled plugin "<em class="placeholder">Language</em>" (<em class="placeholder">ckeditor5_language</em>) is missing.',
+      ],
+    ];
+    $data['valid language plugin configuration: un'] = [
+      'settings' => [
+        'toolbar' => [
+          'items' => [
+            'textPartLanguage',
+          ],
+        ],
+        'plugins' => [
+          'ckeditor5_language' => [
+            'language_list' => 'un',
+          ],
+        ],
+      ],
+      'violations' => [],
+    ];
+    $data['valid language plugin configuration: all'] = [
+      'settings' => [
+        'toolbar' => [
+          'items' => [
+            'textPartLanguage',
+          ],
+        ],
+        'plugins' => [
+          'ckeditor5_language' => [
+            'language_list' => 'all',
+          ],
+        ],
+      ],
+      'violations' => [],
+    ];
+    $data['invalid language plugin configuration: textPartLanguage button not enabled'] = [
+      'settings' => [
+        'toolbar' => [
+          'items' => [
+            'bold',
+          ],
+        ],
+        'plugins' => [
+          'ckeditor5_language' => [
+            'language_list' => 'all',
+          ],
+        ],
+      ],
+      'violations' => [
+        'settings.plugins.ckeditor5_language.language_list' => 'Depends on <em class="placeholder">textPartLanguage</em>, which is not enabled.',
+      ],
+    ];
+    $data['invalid language plugin configuration: invalid language_list setting'] = [
+      'settings' => [
+        'toolbar' => [
+          'items' => [
+            'textPartLanguage',
+          ],
+        ],
+        'plugins' => [
+          'ckeditor5_language' => [
+            'language_list' => 'foo',
+          ],
+        ],
+      ],
+      'violations' => [
+        'settings.plugins.ckeditor5_language.language_list' => 'The value you selected is not a valid choice.',
+      ],
+    ];
+
+    $data['uploadImage toolbar item condition not met: image uploads must be enabled'] = [
+      'settings' => [
+        'toolbar' => [
+          'items' => [
+            'uploadImage',
+          ],
+        ],
+        'plugins' => [],
+      ],
+      'violations' => [
+        'settings.toolbar.items.0' => 'The <em class="placeholder">Image upload</em> toolbar item requires image uploads to be enabled.',
+      ],
+    ];
+    $data['drupalMedia toolbar item condition not met: media filter enabled'] = [
+      'settings' => [
+        'toolbar' => [
+          'items' => [
+            'drupalMedia',
+          ],
+        ],
+        'plugins' => [],
+      ],
+      'violations' => [
+        'settings.toolbar.items.0' => 'The <em class="placeholder">Drupal media</em> toolbar item requires the <em class="placeholder">Embed media</em> filter to be enabled.',
+      ],
+    ];
+    $data['fooBarConditions toolbar item condition not met: Heading and Table plugins enabled, neither are'] = [
+      'settings' => [
+        'toolbar' => [
+          'items' => [
+            'fooBarConditions',
+          ],
+        ],
+        'plugins' => [],
+      ],
+      'violations' => [
+        'settings.toolbar.items.0' => 'The <em class="placeholder">Foo Bar (Test Plugins Condition)</em> toolbar item requires the <em class="placeholder">Headings, Table</em> plugins to be enabled.',
+      ],
+    ];
+    $data['fooBarConditions toolbar item condition not met: Heading and Table plugins enabled, only one is'] = [
+      'settings' => [
+        'toolbar' => [
+          'items' => [
+            'fooBarConditions',
+            'heading',
+          ],
+        ],
+        'plugins' => [
+          'ckeditor5_heading' => [
+            'enabled_headings' => [
+              'heading2',
+            ],
+          ],
+        ],
+      ],
+      'violations' => [
+        'settings.toolbar.items.0' => 'The <em class="placeholder">Foo Bar (Test Plugins Condition)</em> toolbar item requires the <em class="placeholder">Table</em> plugin to be enabled.',
+      ],
+    ];
+    $data['fooBarConditions toolbar item condition met: Heading and Table plugins enabled, both are'] = [
+      'settings' => [
+        'toolbar' => [
+          'items' => [
+            'fooBarConditions',
+            'heading',
+            'insertTable',
+          ],
+        ],
+        'plugins' => [
+          'ckeditor5_heading' => [
+            'enabled_headings' => [
+              'heading2',
+            ],
+          ],
+        ],
+      ],
+      'violations' => [],
+    ];
+
+    return $data;
+  }
+
+  /**
+   * @covers \Drupal\ckeditor5\Plugin\Editor\CKEditor5::validatePair()
+   * @covers \Drupal\ckeditor5\Plugin\Validation\Constraint\FundamentalCompatibilityConstraintValidator
+   * @covers \Drupal\ckeditor5\Plugin\Validation\Constraint\ToolbarItemConstraintValidator
+   * @covers \Drupal\ckeditor5\Plugin\Validation\Constraint\ToolbarItemDependencyConstraintValidator
+   * @covers \Drupal\ckeditor5\Plugin\Validation\Constraint\EnabledConfigurablePluginsConstraintValidator
+   * @dataProvider providerPair
+   *
+   * @param array $ckeditor5_settings
+   *   The paired text editor's CKEditor 5 settings to test.
+   * @param array $editor_image_upload_settings
+   *   The paired text editor's image upload settings to test.
+   * @param array $filters
+   *   The paired text format's filters and filter settings.
+   * @param array $expected_violations
+   *   All expected violations for the pair.
+   */
+  public function testPair(array $ckeditor5_settings, array $editor_image_upload_settings, array $filters, array $expected_violations) {
+    $text_editor = Editor::create([
+      'format' => 'dummy',
+      'editor' => 'ckeditor5',
+      'settings' => $ckeditor5_settings,
+      'image_upload' => $editor_image_upload_settings,
+    ]);
+    assert($text_editor instanceof EditorInterface);
+    $this->assertConfigSchema(
+      $this->typedConfig,
+      $text_editor->getConfigDependencyName(),
+      $text_editor->toArray()
+    );
+    $text_format = FilterFormat::create([
+      'filters' => $filters,
+    ]);
+    assert($text_format instanceof FilterFormatInterface);
+
+    $this->assertSame($expected_violations, $this->validatePairToViolationsArray($text_editor, $text_format, TRUE));
+  }
+
+  /**
+   * Provides a list of Text Editor + Text Format pairs to test.
+   */
+  public function providerPair(): array {
+    // cspell:ignore donk
+    $data = [];
+    $data['INVALID: non-HTML format: filter_autop'] = [
+      'settings' => [
+        'toolbar' => [
+          'items' => [
+            'bold',
+          ],
+        ],
+        'plugins' => [],
+      ],
+      'image_upload' => [
+        'status' => FALSE,
+      ],
+      'filters' => [
+        'filter_autop' => [
+          'id' => 'filter_autop',
+          'provider' => 'filter',
+          'status' => TRUE,
+          'weight' => 0,
+          'settings' => [],
+        ],
+      ],
+      'violations' => [
+        '' => 'CKEditor 5 only works with HTML-based text formats. The "<em class="placeholder">Convert line breaks into HTML (i.e. &lt;code&gt;&amp;lt;br&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;)</em>" (<em class="placeholder">filter_autop</em>) filter implies this text format is not HTML anymore.',
+      ],
+    ];
+    $data['INVALID: non-HTML format: filter_autop + filter_url'] = [
+      'settings' => [
+        'toolbar' => [
+          'items' => [
+            'bold',
+          ],
+        ],
+        'plugins' => [],
+      ],
+      'image_upload' => [
+        'status' => FALSE,
+      ],
+      'filters' => [
+        'filter_autop' => [
+          'id' => 'filter_autop',
+          'provider' => 'filter',
+          'status' => TRUE,
+          'weight' => 0,
+          'settings' => [],
+        ],
+        'filter_url' => [
+          'id' => 'filter_url',
+          'provider' => 'filter',
+          'status' => TRUE,
+          'weight' => 0,
+          'settings' => [
+            'filter_url_length' => 72,
+          ],
+        ],
+      ],
+      'violations' => [
+        '' => [
+          'CKEditor 5 only works with HTML-based text formats. The "<em class="placeholder">Convert URLs into links</em>" (<em class="placeholder">filter_url</em>) filter implies this text format is not HTML anymore.',
+          'CKEditor 5 only works with HTML-based text formats. The "<em class="placeholder">Convert line breaks into HTML (i.e. &lt;code&gt;&amp;lt;br&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;)</em>" (<em class="placeholder">filter_autop</em>) filter implies this text format is not HTML anymore.',
+        ],
+      ],
+    ];
+    $data['INVALID: forbidden tags'] = [
+      'settings' => [
+        'toolbar' => [
+          'items' => [],
+        ],
+        'plugins' => [],
+      ],
+      'image_upload' => [
+        'status' => FALSE,
+      ],
+      'filters' => [
+        'filter_test_restrict_tags_and_attributes' => [
+          'id' => 'filter_test_restrict_tags_and_attributes',
+          'provider' => 'filter_test',
+          'status' => TRUE,
+          'weight' => 0,
+          'settings' => [
+            'restrictions' => [
+              'forbidden_tags' => ['p' => FALSE],
+            ],
+          ],
+        ],
+      ],
+      'violations' => [
+        '' => 'CKEditor 5 needs at least the &lt;p&gt; and &lt;br&gt; tags to be allowed to be able to function. They are forbidden by the "<em class="placeholder">Tag and attribute restricting filter</em>" (<em class="placeholder">filter_test_restrict_tags_and_attributes</em>) filter.',
+      ],
+    ];
+    $restricted_html_format_filters = Yaml::parseFile('profiles/standard/config/install/filter.format.restricted_html.yml')['filters'];
+    $data['INVALID: the default restricted_html text format'] = [
+      'settings' => [
+        'toolbar' => [
+          'items' => [],
+        ],
+        'plugins' => [],
+      ],
+      'image_upload' => [
+        'status' => FALSE,
+      ],
+      'filters' => $restricted_html_format_filters,
+      'violations' => [
+        '' => [
+          'CKEditor 5 only works with HTML-based text formats. The "<em class="placeholder">Convert URLs into links</em>" (<em class="placeholder">filter_url</em>) filter implies this text format is not HTML anymore.',
+          'CKEditor 5 only works with HTML-based text formats. The "<em class="placeholder">Convert line breaks into HTML (i.e. &lt;code&gt;&amp;lt;br&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;)</em>" (<em class="placeholder">filter_autop</em>) filter implies this text format is not HTML anymore.',
+        ],
+      ],
+    ];
+    $data['INVALID: the modified restricted_html text format (with filter_autop and filter_url removed)'] = [
+      'settings' => [
+        'toolbar' => [
+          'items' => [],
+        ],
+        'plugins' => [],
+      ],
+      'image_upload' => [
+        'status' => FALSE,
+      ],
+      'filters' => array_diff_key(
+        $restricted_html_format_filters,
+        ['filter_autop' => TRUE, 'filter_url' => TRUE]
+      ),
+      'violations' => [
+        '' => 'CKEditor 5 needs at least the &lt;p&gt; and &lt;br&gt; tags to be allowed to be able to function. They are not allowed by the "<em class="placeholder">Limit allowed HTML tags and correct faulty HTML</em>" (<em class="placeholder">filter_html</em>) filter.',
+      ],
+    ];
+    $data['VALID: HTML format: empty toolbar + minimal allowed HTML'] = [
+      'settings' => [
+        'toolbar' => [
+          'items' => [],
+        ],
+        'plugins' => [],
+      ],
+      'image_upload' => [
+        'status' => FALSE,
+      ],
+      'filters' => [
+        'filter_html' => [
+          'id' => 'filter_html',
+          'provider' => 'filter',
+          'status' => TRUE,
+          'weight' => 0,
+          'settings' => [
+            'allowed_html' => "<p> <br>",
+            'filter_html_help' => TRUE,
+            'filter_html_nofollow' => TRUE,
+          ],
+        ],
+      ],
+      'violations' => [],
+    ];
+    $data['VALID: HTML format: very minimal toolbar + minimal allowed HTML'] = [
+      'settings' => [
+        'toolbar' => [
+          'items' => [
+            'bold',
+          ],
+        ],
+        'plugins' => [],
+      ],
+      'image_upload' => [
+        'status' => FALSE,
+      ],
+      'filters' => [
+        'filter_html' => [
+          'id' => 'filter_html',
+          'provider' => 'filter',
+          'status' => TRUE,
+          'weight' => 0,
+          'settings' => [
+            'allowed_html' => "<p> <br> <strong>",
+            'filter_html_help' => TRUE,
+            'filter_html_nofollow' => TRUE,
+          ],
+        ],
+      ],
+      'violations' => [],
+    ];
+    $data['INVALID: HTML format: empty toolbar + default allowed HTML tags + <p> + <br>'] = [
+      'settings' => [
+        'toolbar' => [
+          'items' => [],
+        ],
+        'plugins' => [],
+      ],
+      'image_upload' => [
+        'status' => FALSE,
+      ],
+      'filters' => [
+        'filter_html' => [
+          'id' => 'filter_html',
+          'provider' => 'filter',
+          'status' => TRUE,
+          'weight' => 0,
+          'settings' => [
+            'allowed_html' => "<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type='1 A I'> <li> <dl> <dt> <dd> <h2 id='jump-*'> <h3 id> <h4 id> <h5 id> <h6 id>" . "<p> <br>",
+            'filter_html_help' => TRUE,
+            'filter_html_nofollow' => TRUE,
+          ],
+        ],
+      ],
+      'violations' => [
+        'filters.filter_html' => sprintf(
+          'The current CKEditor 5 build requires the following elements and attributes: <br><code>%s</code><br>The following elements are not supported: <br><code>%s</code>',
+          Html::escape('<br> <p>'),
+          Html::escape('<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type="1 A I"> <li> <dl> <dt> <dd> <h2 id="jump-*"> <h3 id> <h4 id> <h5 id> <h6 id>'),
+        ),
+      ],
+    ];
+    $data['INVALID: HTML format: empty toolbar + default allowed HTML tags'] = [
+      'settings' => [
+        'toolbar' => [
+          'items' => [],
+        ],
+        'plugins' => [],
+      ],
+      'image_upload' => [
+        'status' => FALSE,
+      ],
+      'filters' => [
+        'filter_html' => [
+          'id' => 'filter_html',
+          'provider' => 'filter',
+          'status' => TRUE,
+          'weight' => 0,
+          'settings' => [
+            'allowed_html' => "<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type='1 A I'> <li> <dl> <dt> <dd> <h2 id='jump-*'> <h3 id> <h4 id> <h5 id> <h6 id>",
+            'filter_html_help' => TRUE,
+            'filter_html_nofollow' => TRUE,
+          ],
+        ],
+      ],
+      'violations' => [
+        '' => 'CKEditor 5 needs at least the &lt;p&gt; and &lt;br&gt; tags to be allowed to be able to function. They are not allowed by the "<em class="placeholder">Limit allowed HTML tags and correct faulty HTML</em>" (<em class="placeholder">filter_html</em>) filter.',
+      ],
+    ];
+    $data['INVALID Source Editable tag already provided by plugin and another available in a not enabled plugin'] = [
+      'settings' => [
+        'toolbar' => [
+          'items' => [
+            'heading',
+            'bold',
+            'italic',
+            'sourceEditing',
+            'textPartLanguage',
+          ],
+        ],
+        'plugins' => [
+          'ckeditor5_heading' => [
+            'enabled_headings' => [
+              'heading2',
+              'heading3',
+              'heading4',
+              'heading5',
+              'heading6',
+            ],
+          ],
+          'ckeditor5_language' => [
+            'language_list' => 'un',
+          ],
+          'ckeditor5_sourceEditing' => [
+            'allowed_tags' => [
+              '<strong>',
+              '<table>',
+            ],
+          ],
+        ],
+      ],
+      'image_upload' => [
+        'status' => TRUE,
+      ],
+      'filters' => [],
+      'violations' => [
+        'settings.plugins.ckeditor5_sourceEditing.allowed_tags.0' => 'The following tag(s) are already supported by enabled plugins and should not be added to the Source Editing "Manually editable HTML tags" field: <em class="placeholder">Bold (&lt;strong&gt;)</em>.',
+        'settings.plugins.ckeditor5_sourceEditing.allowed_tags.1' => 'The following tag(s) are already supported by available plugins and should not be added to the Source Editing "Manually editable HTML tags" field. Instead, enable the following plugins to support these tags: <em class="placeholder">Table (&lt;table&gt;)</em>.',
+      ],
+    ];
+    $data['INVALID some invalid Source Editable tags provided by plugin and another available in a not enabled plugin'] = [
+      'settings' => [
+        'toolbar' => [
+          'items' => [
+            'heading',
+            'bold',
+            'italic',
+            'sourceEditing',
+            'textPartLanguage',
+          ],
+        ],
+        'plugins' => [
+          'ckeditor5_heading' => [
+            'enabled_headings' => [
+              'heading2',
+              'heading3',
+              'heading4',
+              'heading5',
+              'heading6',
+            ],
+          ],
+          'ckeditor5_language' => [
+            'language_list' => 'un',
+          ],
+          'ckeditor5_sourceEditing' => [
+            'allowed_tags' => [
+              '<aside>',
+              '<footer>',
+              'roy',
+              '<#donk>',
+              '<junior>cruft',
+            ],
+          ],
+        ],
+      ],
+      'image_upload' => [
+        'status' => TRUE,
+      ],
+      'filters' => [],
+      'violations' => [
+        'settings.plugins.ckeditor5_sourceEditing.allowed_tags.2' => 'The following tag is not valid HTML: <em class="placeholder">roy</em>.',
+        'settings.plugins.ckeditor5_sourceEditing.allowed_tags.3' => 'The following tag is not valid HTML: <em class="placeholder">&lt;#donk&gt;</em>.',
+        'settings.plugins.ckeditor5_sourceEditing.allowed_tags.4' => 'The following tag is not valid HTML: <em class="placeholder">&lt;junior&gt;cruft</em>.',
+      ],
+    ];
+
+    $data['INVALID: uploadImage toolbar item condition NOT met: image uploads must be enabled'] = [
+      'settings' => [
+        'toolbar' => [
+          'items' => [
+            'uploadImage',
+          ],
+        ],
+        'plugins' => [],
+      ],
+      'image_upload' => [
+        'status' => FALSE,
+      ],
+      'filters' => [],
+      'violations' => [
+        'settings.toolbar.items.0' => 'The <em class="placeholder">Image upload</em> toolbar item requires image uploads to be enabled.',
+      ],
+    ];
+    $data['VALID: uploadImage toolbar item condition met: image uploads must be enabled'] = [
+      'settings' => [
+        'toolbar' => [
+          'items' => [
+            'uploadImage',
+          ],
+        ],
+        'plugins' => [],
+      ],
+      'image_upload' => [
+        'status' => TRUE,
+      ],
+      'filters' => [],
+      'violations' => [],
+    ];
+    $data['INVALID: drupalMedia toolbar item condition NOT met: media filter enabled'] = [
+      'settings' => [
+        'toolbar' => [
+          'items' => [
+            'drupalMedia',
+          ],
+        ],
+        'plugins' => [],
+      ],
+      'image_upload' => [
+        'status' => FALSE,
+      ],
+      'filters' => [],
+      'violations' => [
+        'settings.toolbar.items.0' => 'The <em class="placeholder">Drupal media</em> toolbar item requires the <em class="placeholder">Embed media</em> filter to be enabled.',
+      ],
+    ];
+    $data['VALID: drupalMedia toolbar item condition met: media filter enabled'] = [
+      'settings' => [
+        'toolbar' => [
+          'items' => [
+            'drupalMedia',
+          ],
+        ],
+        'plugins' => [],
+      ],
+      'image_upload' => [
+        'status' => FALSE,
+      ],
+      'filters' => [
+        'filter_html' => [
+          'id' => 'media_embed',
+          'provider' => 'media',
+          'status' => TRUE,
+          'weight' => 0,
+          'settings' => [
+            'default_view_mode' => 'default',
+            'allowed_view_modes' => [],
+            'allowed_media_types' => [],
+          ],
+        ],
+      ],
+      'violations' => [
+        'settings.toolbar.items.0' => 'The <em class="placeholder">Drupal media</em> toolbar item requires the <em class="placeholder">Embed media</em> filter to be enabled.',
+      ],
+    ];
+
+    return $data;
+  }
+
+}
diff --git a/core/modules/ckeditor5/tests/src/Nightwatch/Tests/drupalHtmlBuilderTest.es6.js b/core/modules/ckeditor5/tests/src/Nightwatch/Tests/drupalHtmlBuilderTest.es6.js
new file mode 100644
index 000000000000..906097a3f7be
--- /dev/null
+++ b/core/modules/ckeditor5/tests/src/Nightwatch/Tests/drupalHtmlBuilderTest.es6.js
@@ -0,0 +1,131 @@
+const assert = require('assert');
+const fs = require('fs');
+const path = require('path');
+// eslint-disable-next-line import/no-extraneous-dependencies
+const { JSDOM } = require('jsdom');
+
+// Nightwatch doesn't support ES modules. This workaround loads the class
+// directly here.
+// @todo remove this after https://www.drupal.org/project/drupal/issues/3247647
+//   has been resolved.
+// eslint-disable-next-line no-eval
+const DrupalHtmlBuilder = eval(
+  `(${fs
+    .readFileSync(
+      path.resolve(
+        __dirname,
+        '../../../../js/ckeditor5_plugins/drupalHtmlEngine/src/drupalhtmlbuilder.js',
+      ),
+    )
+    .toString()})`.replace('export default', ''),
+);
+const { document, Node } = new JSDOM(`<!DOCTYPE html>`).window;
+
+module.exports = {
+  '@tags': ['ckeditor5'],
+  '@unitTest': true,
+  'should return empty string when empty DocumentFragment is passed':
+    function () {
+      const drupalHtmlBuilder = new DrupalHtmlBuilder();
+      drupalHtmlBuilder.appendNode(document.createDocumentFragment());
+      assert.equal(drupalHtmlBuilder.build(), '');
+    },
+  'should create text from single text node': function () {
+    const drupalHtmlBuilder = new DrupalHtmlBuilder();
+    const text = 'foo bar';
+    const fragment = document.createDocumentFragment();
+    const textNode = document.createTextNode(text);
+    fragment.appendChild(textNode);
+
+    drupalHtmlBuilder.appendNode(fragment);
+    assert.equal(drupalHtmlBuilder.build(), text);
+  },
+  'should return correct HTML from fragment with paragraph': function () {
+    const drupalHtmlBuilder = new DrupalHtmlBuilder();
+    const fragment = document.createDocumentFragment();
+    const paragraph = document.createElement('p');
+    paragraph.textContent = 'foo bar';
+    fragment.appendChild(paragraph);
+
+    drupalHtmlBuilder.appendNode(fragment);
+    assert.equal(drupalHtmlBuilder.build(), '<p>foo bar</p>');
+  },
+  'should return correct HTML from fragment with multiple child nodes':
+    function () {
+      const drupalHtmlBuilder = new DrupalHtmlBuilder();
+      const fragment = document.createDocumentFragment();
+      const text = document.createTextNode('foo bar');
+      const paragraph = document.createElement('p');
+      const div = document.createElement('div');
+
+      paragraph.textContent = 'foo';
+      div.textContent = 'bar';
+
+      fragment.appendChild(text);
+      fragment.appendChild(paragraph);
+      fragment.appendChild(div);
+
+      drupalHtmlBuilder.appendNode(fragment);
+
+      assert.equal(
+        drupalHtmlBuilder.build(),
+        'foo bar<p>foo</p><div>bar</div>',
+      );
+    },
+  'should return correct HTML from fragment with comment': function () {
+    const drupalHtmlBuilder = new DrupalHtmlBuilder();
+    const fragment = document.createDocumentFragment();
+    const div = document.createElement('div');
+    const comment = document.createComment('bar');
+    div.textContent = 'bar';
+
+    fragment.appendChild(div);
+    fragment.appendChild(comment);
+
+    drupalHtmlBuilder.appendNode(fragment);
+
+    assert.equal(drupalHtmlBuilder.build(), '<div>bar</div>');
+  },
+  'should return correct HTML from fragment with attributes': function () {
+    const drupalHtmlBuilder = new DrupalHtmlBuilder();
+    const fragment = document.createDocumentFragment();
+    const div = document.createElement('div');
+    div.setAttribute('id', 'foo');
+    div.classList.add('bar');
+    div.textContent = 'baz';
+
+    fragment.appendChild(div);
+    drupalHtmlBuilder.appendNode(fragment);
+
+    assert.equal(
+      drupalHtmlBuilder.build(),
+      '<div id="foo" class="bar">baz</div>',
+    );
+  },
+  'should return correct HTML from fragment with self closing tag':
+    function () {
+      const drupalHtmlBuilder = new DrupalHtmlBuilder();
+      const fragment = document.createDocumentFragment();
+      const hr = document.createElement('hr');
+
+      fragment.appendChild(hr);
+      drupalHtmlBuilder.appendNode(fragment);
+
+      assert.equal(drupalHtmlBuilder.build(), '<hr>');
+    },
+  'attribute values should be escaped': function () {
+    const drupalHtmlBuilder = new DrupalHtmlBuilder();
+    const fragment = document.createDocumentFragment();
+    const div = document.createElement('div');
+    div.setAttribute('data-caption', 'Kittens & llamas are <em>cute</em>');
+    div.textContent = 'foo';
+
+    fragment.appendChild(div);
+    drupalHtmlBuilder.appendNode(fragment);
+
+    assert.equal(
+      drupalHtmlBuilder.build(),
+      '<div data-caption="Kittens &amp; llamas are &lt;em&gt;cute&lt;/em&gt;">foo</div>',
+    );
+  },
+};
diff --git a/core/modules/ckeditor5/tests/src/Nightwatch/Tests/drupalHtmlBuilderTest.js b/core/modules/ckeditor5/tests/src/Nightwatch/Tests/drupalHtmlBuilderTest.js
new file mode 100644
index 000000000000..8d416758b517
--- /dev/null
+++ b/core/modules/ckeditor5/tests/src/Nightwatch/Tests/drupalHtmlBuilderTest.js
@@ -0,0 +1,101 @@
+/**
+* DO NOT EDIT THIS FILE.
+* See the following change record for more information,
+* https://www.drupal.org/node/2815083
+* @preserve
+**/
+
+var assert = require('assert');
+
+var fs = require('fs');
+
+var path = require('path');
+
+var _require = require('jsdom'),
+    JSDOM = _require.JSDOM;
+
+var DrupalHtmlBuilder = eval("(".concat(fs.readFileSync(path.resolve(__dirname, '../../../../js/ckeditor5_plugins/drupalHtmlEngine/src/drupalhtmlbuilder.js')).toString(), ")").replace('export default', ''));
+var _JSDOM$window = new JSDOM("<!DOCTYPE html>").window,
+    document = _JSDOM$window.document,
+    Node = _JSDOM$window.Node;
+module.exports = {
+  '@tags': ['ckeditor5'],
+  '@unitTest': true,
+  'should return empty string when empty DocumentFragment is passed': function shouldReturnEmptyStringWhenEmptyDocumentFragmentIsPassed() {
+    var drupalHtmlBuilder = new DrupalHtmlBuilder();
+    drupalHtmlBuilder.appendNode(document.createDocumentFragment());
+    assert.equal(drupalHtmlBuilder.build(), '');
+  },
+  'should create text from single text node': function shouldCreateTextFromSingleTextNode() {
+    var drupalHtmlBuilder = new DrupalHtmlBuilder();
+    var text = 'foo bar';
+    var fragment = document.createDocumentFragment();
+    var textNode = document.createTextNode(text);
+    fragment.appendChild(textNode);
+    drupalHtmlBuilder.appendNode(fragment);
+    assert.equal(drupalHtmlBuilder.build(), text);
+  },
+  'should return correct HTML from fragment with paragraph': function shouldReturnCorrectHTMLFromFragmentWithParagraph() {
+    var drupalHtmlBuilder = new DrupalHtmlBuilder();
+    var fragment = document.createDocumentFragment();
+    var paragraph = document.createElement('p');
+    paragraph.textContent = 'foo bar';
+    fragment.appendChild(paragraph);
+    drupalHtmlBuilder.appendNode(fragment);
+    assert.equal(drupalHtmlBuilder.build(), '<p>foo bar</p>');
+  },
+  'should return correct HTML from fragment with multiple child nodes': function shouldReturnCorrectHTMLFromFragmentWithMultipleChildNodes() {
+    var drupalHtmlBuilder = new DrupalHtmlBuilder();
+    var fragment = document.createDocumentFragment();
+    var text = document.createTextNode('foo bar');
+    var paragraph = document.createElement('p');
+    var div = document.createElement('div');
+    paragraph.textContent = 'foo';
+    div.textContent = 'bar';
+    fragment.appendChild(text);
+    fragment.appendChild(paragraph);
+    fragment.appendChild(div);
+    drupalHtmlBuilder.appendNode(fragment);
+    assert.equal(drupalHtmlBuilder.build(), 'foo bar<p>foo</p><div>bar</div>');
+  },
+  'should return correct HTML from fragment with comment': function shouldReturnCorrectHTMLFromFragmentWithComment() {
+    var drupalHtmlBuilder = new DrupalHtmlBuilder();
+    var fragment = document.createDocumentFragment();
+    var div = document.createElement('div');
+    var comment = document.createComment('bar');
+    div.textContent = 'bar';
+    fragment.appendChild(div);
+    fragment.appendChild(comment);
+    drupalHtmlBuilder.appendNode(fragment);
+    assert.equal(drupalHtmlBuilder.build(), '<div>bar</div>');
+  },
+  'should return correct HTML from fragment with attributes': function shouldReturnCorrectHTMLFromFragmentWithAttributes() {
+    var drupalHtmlBuilder = new DrupalHtmlBuilder();
+    var fragment = document.createDocumentFragment();
+    var div = document.createElement('div');
+    div.setAttribute('id', 'foo');
+    div.classList.add('bar');
+    div.textContent = 'baz';
+    fragment.appendChild(div);
+    drupalHtmlBuilder.appendNode(fragment);
+    assert.equal(drupalHtmlBuilder.build(), '<div id="foo" class="bar">baz</div>');
+  },
+  'should return correct HTML from fragment with self closing tag': function shouldReturnCorrectHTMLFromFragmentWithSelfClosingTag() {
+    var drupalHtmlBuilder = new DrupalHtmlBuilder();
+    var fragment = document.createDocumentFragment();
+    var hr = document.createElement('hr');
+    fragment.appendChild(hr);
+    drupalHtmlBuilder.appendNode(fragment);
+    assert.equal(drupalHtmlBuilder.build(), '<hr>');
+  },
+  'attribute values should be escaped': function attributeValuesShouldBeEscaped() {
+    var drupalHtmlBuilder = new DrupalHtmlBuilder();
+    var fragment = document.createDocumentFragment();
+    var div = document.createElement('div');
+    div.setAttribute('data-caption', 'Kittens & llamas are <em>cute</em>');
+    div.textContent = 'foo';
+    fragment.appendChild(div);
+    drupalHtmlBuilder.appendNode(fragment);
+    assert.equal(drupalHtmlBuilder.build(), '<div data-caption="Kittens &amp; llamas are &lt;em&gt;cute&lt;/em&gt;">foo</div>');
+  }
+};
\ No newline at end of file
diff --git a/core/modules/ckeditor5/tests/src/Traits/CKEditor5TestTrait.php b/core/modules/ckeditor5/tests/src/Traits/CKEditor5TestTrait.php
new file mode 100644
index 000000000000..2510d3a58fcc
--- /dev/null
+++ b/core/modules/ckeditor5/tests/src/Traits/CKEditor5TestTrait.php
@@ -0,0 +1,127 @@
+<?php
+
+namespace Drupal\Tests\ckeditor5\Traits;
+
+use Behat\Mink\Element\NodeElement;
+use Drupal\Component\Utility\Html;
+
+// cspell:ignore downcasted
+
+/**
+ * Provides methods to test CKEditor 5.
+ *
+ * This trait is meant to be used only by functional JavaScript test classes.
+ */
+trait CKEditor5TestTrait {
+
+  /**
+   * Gets CKEditor 5 instance data as a PHP DOMDocument.
+   *
+   * @return \DOMDocument
+   *   The result of parsing CKEditor 5's data into a PHP DOMDocument.
+   *
+   * @see https://ckeditor.com/docs/ckeditor5/latest/api/module_editor-classic_classiceditor-ClassicEditor.html#function-getData
+   */
+  protected function getEditorDataAsDom(): \DOMDocument {
+    // We cannot trust on CKEditor updating the textarea every time model
+    // changes. Therefore, the most reliable way to get downcasted data is to
+    // use the CKEditor API.
+    $javascript = <<<JS
+(function(){
+  return Drupal.CKEditor5Instances.get(Drupal.CKEditor5Instances.keys().next().value).getData();
+})();
+JS;
+    return Html::load($this->getSession()->evaluateScript($javascript));
+  }
+
+  /**
+   * Waits for CKEditor to initialize.
+   */
+  protected function waitForEditor() {
+    $assert_session = $this->assertSession();
+    $this->assertNotEmpty($assert_session->waitForElement('css', '.ck-editor'));
+  }
+
+  /**
+   * Clicks a CKEditor button.
+   *
+   * @param string $name
+   *   The name of the button, such as `drupallink`, `source`, etc.
+   */
+  protected function pressEditorButton($name) {
+    $this->getEditorButton($name)->click();
+  }
+
+  /**
+   * Waits for a CKEditor button and returns it when available and visible.
+   *
+   * @param string $name
+   *   The name of the button, such as `drupallink`, `source`, etc.
+   *
+   * @return \Behat\Mink\Element\NodeElement|null
+   *   The page element node if found, NULL if not.
+   */
+  protected function getEditorButton($name) {
+    $button = $this->assertSession()->waitForElementVisible('xpath', "//button[span[text()='$name']]");
+    $this->assertNotEmpty($button);
+    return $button;
+  }
+
+  /**
+   * Asserts a CKEditor button is disabled.
+   *
+   * @param string $name
+   *   The name of the button, such as `drupallink`, `source`, etc.
+   */
+  protected function assertEditorButtonDisabled($name) {
+    $button = $this->getEditorButton($name);
+    $this->assertTrue($button->hasAttribute('aria-disabled'));
+    $this->assertTrue($button->hasClass('ck-disabled'));
+  }
+
+  /**
+   * Asserts a CKEditor button is enabled.
+   *
+   * @param string $name
+   *   The name of the button, such as `drupallink`, `source`, etc.
+   */
+  protected function assertEditorButtonEnabled($name) {
+    $button = $this->getEditorButton($name);
+    $this->assertFalse($button->hasAttribute('aria-disabled'));
+    $this->assertFalse($button->hasClass('ck-disabled'));
+  }
+
+  /**
+   * Asserts a particular balloon is visible.
+   *
+   * @param string $balloon_content_selector
+   *   A CSS selector.
+   *
+   * @return \Behat\Mink\Element\NodeElement
+   *   The asserted balloon.
+   */
+  protected function assertVisibleBalloon(string $balloon_content_selector): NodeElement {
+    $this->assertSession()->elementExists('css', '.ck-balloon-panel_visible');
+    $selector = ".ck-balloon-panel_visible .ck-balloon-rotator__content > .ck$balloon_content_selector";
+    $this->assertSession()->elementExists('css', $selector);
+    return $this->getSession()->getPage()->find('css', $selector);
+  }
+
+  /**
+   * Gets a button from the currently visible balloon.
+   *
+   * @param string $name
+   *   The label of the button to find.
+   *
+   * @return \Behat\Mink\Element\NodeElement
+   *   The requested button.
+   */
+  protected function getBalloonButton(string $name): NodeElement {
+    $button = $this->getSession()->getPage()
+      ->find('css', '.ck-balloon-panel_visible .ck-balloon-rotator__content')
+      ->find('xpath', "//button[span[text()='$name']]");
+    $this->assertNotEmpty($button);
+    return $button;
+  }
+
+}
diff --git a/core/modules/ckeditor5/tests/src/Traits/SynchronizeCsrfTokenSeedTrait.php b/core/modules/ckeditor5/tests/src/Traits/SynchronizeCsrfTokenSeedTrait.php
new file mode 100644
index 000000000000..e106d28c43ee
--- /dev/null
+++ b/core/modules/ckeditor5/tests/src/Traits/SynchronizeCsrfTokenSeedTrait.php
@@ -0,0 +1,42 @@
+<?php
+
+namespace Drupal\Tests\ckeditor5\Traits;
+
+use Drupal\Core\Session\AccountInterface;
+
+/**
+ * Synchronizes the child site's CSRF token seed back to the test runner.
+ *
+ * For the test to be able to generate valid CSRF tokens, it needs access to the
+ * CSRF token seed in the child site (i.e. tested site). This requires reading
+ * the CSRF token seed from the session that gets created in the child site
+ * after logging in, and then setting it in the test runner's container.
+ * Otherwise, the test runner would generate its own CSRF token seed and would
+ * hence generate CSRF tokens that are not valid for the session in the child
+ * site.
+ *
+ * @see \Drupal\Core\Access\CsrfTokenGenerator::get()
+ *
+ * @internal
+ */
+trait SynchronizeCsrfTokenSeedTrait {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function drupalLogin(AccountInterface $account) {
+    parent::drupalLogin($account);
+    $session_data = $this->container->get('session_handler.write_safe')->read($this->getSession()->getCookie($this->getSessionName()));
+    $csrf_token_seed = unserialize(explode('_sf2_meta|', $session_data)[1])['s'];
+    $this->container->get('session_manager.metadata_bag')->setCsrfTokenSeed($csrf_token_seed);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function drupalLogout() {
+    parent::drupalLogout();
+    $this->container->get('session_manager.metadata_bag')->stampNew();
+  }
+
+}
diff --git a/core/modules/ckeditor5/tests/src/Unit/CKEditor5Test.php b/core/modules/ckeditor5/tests/src/Unit/CKEditor5Test.php
new file mode 100644
index 000000000000..66b339439a02
--- /dev/null
+++ b/core/modules/ckeditor5/tests/src/Unit/CKEditor5Test.php
@@ -0,0 +1,117 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace Drupal\Tests\ckeditor5\Unit;
+
+use Drupal\ckeditor5\Plugin\Editor\CKEditor5;
+use Drupal\Tests\UnitTestCase;
+
+/**
+ * @coversDefaultClass \Drupal\ckeditor5\Plugin\Editor\CKEditor5
+ * @group ckeditor5
+ * @internal
+ */
+class CKEditor5Test extends UnitTestCase {
+
+  /**
+   * Simulated CKEditor5::buildConfigurationForm() form structure.
+   *
+   * @var array
+   */
+  protected const SIMULATED_FORM_STRUCTURE = [
+    'toolbar' => [
+      'available' => [],
+      'items' => [],
+    ],
+    'available_items_description' => [],
+    'active_items_description' => [],
+    'plugin_settings' => [],
+    'plugins' => [
+      'providerA_plugin1' => [],
+      'providerB_plugin2' => [
+        'foo' => [],
+        'bar' => [],
+      ],
+    ],
+  ];
+
+  /**
+   * Gets a protected/private method to test.
+   *
+   * @param string $name
+   *   The method name.
+   *
+   * @return \ReflectionMethod
+   *   The accessible method.
+   */
+  protected static function getMethod(string $name): \ReflectionMethod {
+    $class = new \ReflectionClass(CKEditor5::class);
+    $method = $class->getMethod($name);
+    $method->setAccessible(TRUE);
+    return $method;
+  }
+
+  /**
+   * @covers \Drupal\ckeditor5\Plugin\Editor\CKEditor5::mapViolationPropertyPathsToFormNames
+   * @dataProvider providerPathsToFormNames
+   */
+  public function testPathsToFormNames(string $property_path, string $expected_form_item_name, bool $expect_exception = FALSE): void {
+    $mapMethod = self::getMethod('mapViolationPropertyPathsToFormNames');
+    if ($expect_exception) {
+      $this->expectExceptionMessage('assert($shifted === \'settings\')');
+    }
+
+    $form_item_name = $mapMethod->invokeArgs(NULL, [$property_path, static::SIMULATED_FORM_STRUCTURE]);
+
+    if (!$expect_exception) {
+      $this->assertSame($expected_form_item_name, $form_item_name);
+    }
+  }
+
+  /**
+   * Data provider for testing mapViolationPropertyPathsToFormNames.
+   *
+   * @return array[]
+   *   An array with the property path and expected form item name.
+   */
+  public function providerPathsToFormNames(): array {
+    return [
+      'validation error targeting toolbar items' => [
+        'settings.toolbar.items',
+        'settings][toolbar][items',
+      ],
+      'validation error targeting a specific toolbar item' => [
+        'settings.toolbar.items.6',
+        'settings][toolbar][items',
+      ],
+      'validation error targeting a simple plugin form' => [
+        'settings.plugins.providerA_plugin1',
+        'settings][plugins][providerA_plugin1',
+      ],
+      'validation error targeting a simple plugin form, with deep config schema detail' => [
+        'settings.plugins.providerA_plugin1.foo.bar.baz',
+        'settings][plugins][providerA_plugin1',
+      ],
+      'validation error targeting a complex plugin form' => [
+        'settings.plugins.providerB_plugin2',
+        'settings][plugins][providerB_plugin2',
+      ],
+      'validation error targeting a complex plugin form, with deep config schema detail' => [
+        'settings.plugins.providerB_plugin2.foo.bar.baz',
+        'settings][plugins][providerB_plugin2][foo',
+      ],
+      'unrealistic example one — should trigger exception' => [
+        'bad.bad.worst',
+        'I DO NOT EXIST',
+        TRUE,
+      ],
+      'unrealistic example two — should trigger exception' => [
+        'one.two.three.four',
+        'one][two][three][four',
+        TRUE,
+      ],
+    ];
+  }
+
+}
diff --git a/core/modules/ckeditor5/webpack.config.js b/core/modules/ckeditor5/webpack.config.js
new file mode 100644
index 000000000000..71152e4b1e59
--- /dev/null
+++ b/core/modules/ckeditor5/webpack.config.js
@@ -0,0 +1,63 @@
+const path = require('path');
+const fs = require('fs');
+const webpack = require('webpack');
+const { styles, builds } = require('@ckeditor/ckeditor5-dev-utils');
+const TerserPlugin = require('terser-webpack-plugin');
+
+function getDirectories(srcpath) {
+  return fs
+    .readdirSync(srcpath)
+    .filter((item) => fs.statSync(path.join(srcpath, item)).isDirectory());
+}
+
+module.exports = [];
+// Loop through every subdirectory in ckeditor5_plugins, which should be a different
+// plugin, and build them all in ./build.
+getDirectories(path.resolve(__dirname, './js/ckeditor5_plugins')).forEach((dir) => {
+  const bc = {
+    mode: 'production',
+    optimization: {
+      minimize: true,
+      minimizer: [
+        new TerserPlugin({
+          terserOptions: {
+            format: {
+              comments: false,
+            },
+          },
+          test: /\.js(\?.*)?$/i,
+          extractComments: false,
+        }),
+      ],
+      moduleIds: 'named',
+    },
+    entry: {
+      path: path.resolve(
+        __dirname,
+        'js/ckeditor5_plugins',
+        dir,
+        'src/index.js',
+      ),
+    },
+    output: {
+      path: path.resolve(__dirname, './js/build'),
+      filename: `${dir}.js`,
+      library: ['CKEditor5', dir],
+      libraryTarget: 'umd',
+      libraryExport: 'default',
+    },
+    plugins: [
+      new webpack.BannerPlugin('cspell:disable'),
+      new webpack.DllReferencePlugin({
+        manifest: require(path.resolve(__dirname, '../../node_modules/ckeditor5/build/ckeditor5-dll.manifest.json')), // eslint-disable-line global-require, import/no-unresolved
+        scope: 'ckeditor5/src',
+        name: 'CKEditor5.dll',
+      }),
+    ],
+    module: {
+      rules: [{ test: /\.svg$/, use: 'raw-loader' }],
+    },
+  };
+
+  module.exports.push(bc);
+});
diff --git a/core/package.json b/core/package.json
index 9c0807696182..1d132c75e27e 100644
--- a/core/package.json
+++ b/core/package.json
@@ -24,16 +24,38 @@
     "lint:css-checkstyle": "stylelint \"**/*.css\" --custom-formatter ./node_modules/stylelint-checkstyle-formatter/index.js",
     "lint:yaml": "node ./node_modules/eslint/bin/eslint.js --ext .yml .",
     "test:nightwatch": "cross-env BABEL_ENV=development node -r dotenv-safe/config -r @babel/register ./node_modules/.bin/nightwatch --config ./tests/Drupal/Nightwatch/nightwatch.conf.js",
-    "prettier": "prettier --write \"./**/*.es6.js\" \"./tests/Drupal/Nightwatch/**/*.js\"",
+    "prettier": "prettier --write \"./**/*.es6.js\" \"./tests/Drupal/Nightwatch/**/*.js\" \"./modules/ckeditor5/js/ckeditor5_plugins/**/*.js\"",
     "spellcheck": "cspell",
     "spellcheck:make-drupal-dict": "rm -f misc/cspell/dictionary.txt && touch misc/cspell/dictionary.txt && yarn -s spellcheck:core --unique --wordsOnly | tr '[:upper:]' '[:lower:]' | tr -d \\\\\\\\ | LC_ALL=C sort -u -o misc/cspell/dictionary.txt",
     "spellcheck:core": "cspell \"**/*\" \".*\" \"../composer/**/*\" \"../composer.json\"",
-    "vendor-update": "node ./scripts/js/assets.js"
+    "vendor-update": "node ./scripts/js/assets.js",
+    "ckeditor5:watch": "webpack --mode development --config ./modules/ckeditor5/webpack.config.js --watch",
+    "ckeditor5:build": "webpack --config ./modules/ckeditor5/webpack.config.js"
   },
   "devDependencies": {
     "@babel/core": "^7.0.0",
     "@babel/preset-env": "^7.0.0",
     "@babel/register": "^7.7.7",
+    "@ckeditor/ckeditor5-alignment": "~31.0.0",
+    "@ckeditor/ckeditor5-basic-styles": "~31.0.0",
+    "@ckeditor/ckeditor5-block-quote": "~31.0.0",
+    "@ckeditor/ckeditor5-dev-utils": "^25.4.5",
+    "@ckeditor/ckeditor5-editor-classic": "~31.0.0",
+    "@ckeditor/ckeditor5-editor-decoupled": "~31.0.0",
+    "@ckeditor/ckeditor5-essentials": "~31.0.0",
+    "@ckeditor/ckeditor5-heading": "~31.0.0",
+    "@ckeditor/ckeditor5-horizontal-line": "~31.0.0",
+    "@ckeditor/ckeditor5-html-support": "~31.0.0",
+    "@ckeditor/ckeditor5-image": "~31.0.0",
+    "@ckeditor/ckeditor5-indent": "~31.0.0",
+    "@ckeditor/ckeditor5-language": "~31.0.0",
+    "@ckeditor/ckeditor5-link": "~31.0.0",
+    "@ckeditor/ckeditor5-list": "~31.0.0",
+    "@ckeditor/ckeditor5-paste-from-office": "~31.0.0",
+    "@ckeditor/ckeditor5-remove-format": "~31.0.0",
+    "@ckeditor/ckeditor5-source-editing": "~31.0.0",
+    "@ckeditor/ckeditor5-special-characters": "~31.0.0",
+    "@ckeditor/ckeditor5-table": "~31.0.0",
     "@drupal/once": "^1.0.1",
     "@popperjs/core": "^2.9.2",
     "babel-plugin-add-header-comment": "^1.0.3",
@@ -41,6 +63,7 @@
     "chalk": "^4.1.0",
     "chokidar": "^3.3.1",
     "chromedriver": "^87.0.0",
+    "ckeditor5": "~31.0.0",
     "cross-env": "^7.0.2",
     "cspell": "^5.0.0",
     "css.escape": "^1.5.1",
@@ -63,6 +86,7 @@
     "jquery-form": "^4.3.0",
     "jquery-once": "^2.2.3",
     "js-cookie": "^3.0.1",
+    "jsdom": "^18.0.1",
     "loadjs": "^4.2.0",
     "minimist": "^1.2.2",
     "mkdirp": "^1.0.4",
@@ -77,6 +101,7 @@
     "postcss-pxtorem": "^5.1.1",
     "postcss-url": "^8.0.0",
     "prettier": "^2.1.2",
+    "raw-loader": "^4.0.2",
     "shepherd.js": "^8.3.1",
     "sortablejs": "^1.13.0",
     "stylelint": "^13.0.0",
@@ -85,7 +110,10 @@
     "stylelint-order": "^4.0.0",
     "tabbable": "^5.2.0",
     "terser": "^5.3.4",
-    "underscore": "^1.13.1"
+    "terser-webpack-plugin": "^5.2.0",
+    "underscore": "^1.13.1",
+    "webpack": "^5.51.1",
+    "webpack-cli": "^4.4.0"
   },
   "//": "'development is the default environment, and legacy is for transpiling the old jQuery codebase",
   "babel": {
diff --git a/core/scripts/dev/commit-code-check.sh b/core/scripts/dev/commit-code-check.sh
index db3eabda9192..e5cba556954c 100755
--- a/core/scripts/dev/commit-code-check.sh
+++ b/core/scripts/dev/commit-code-check.sh
@@ -286,7 +286,7 @@
   ############################################################################
   ### JAVASCRIPT FILES
   ############################################################################
-  if [[ -f "$TOP_LEVEL/$FILE" ]] && [[ $FILE =~ \.js$ ]] && [[ ! $FILE =~ ^core/tests/Drupal/Nightwatch ]] && [[ ! $FILE =~ ^core/assets/vendor/jquery.ui/ui ]]; then
+  if [[ -f "$TOP_LEVEL/$FILE" ]] && [[ $FILE =~ \.js$ ]] && [[ ! $FILE =~ ^core/tests/Drupal/Nightwatch ]] && [[ ! $FILE =~ ^core/assets/vendor/jquery.ui/ui ]] && [[ ! $FILE =~ ^core/modules/ckeditor5/js/ckeditor5_plugins ]]; then
     # Work out the root name of the JavaScript so we can ensure that the ES6
     # version has been compiled correctly.
     if [[ $FILE =~ \.es6\.js$ ]]; then
@@ -327,7 +327,7 @@
     else
       # If there is no .es6.js file then there should be unless the .js is
       # not really Drupal's.
-      if ! [[ "$FILE" =~ ^core/assets/vendor ]] && ! [[ "$FILE" =~ ^core/scripts/js ]] && ! [[ "$FILE" =~ ^core/scripts/css ]] && ! [[ "$FILE" =~ core/postcss.config.js ]] && ! [[ -f "$TOP_LEVEL/$BASENAME.es6.js" ]]; then
+      if ! [[ "$FILE" =~ ^core/assets/vendor ]] && ! [[ "$FILE" =~ ^core/modules/ckeditor5/js/build ]] && ! [[ "$FILE" =~ ^core/scripts/js ]] && ! [[ "$FILE" =~ ^core/scripts/css ]] && ! [[ "$FILE" =~ core/postcss.config.js ]] && ! [[ "$FILE" =~ webpack.config.js$ ]] && ! [[ -f "$TOP_LEVEL/$BASENAME.es6.js" ]] && ! [[ "$FILE" =~ core/modules/ckeditor5/tests/modules/ckeditor5_test/js/build/layercake.js ]]; then
         printf "${red}FAILURE${reset} $FILE does not have a corresponding $BASENAME.es6.js\n"
         STATUS=1
       fi
diff --git a/core/scripts/js/assets.js b/core/scripts/js/assets.js
index 5e7186775faf..d6b3cf2586ea 100644
--- a/core/scripts/js/assets.js
+++ b/core/scripts/js/assets.js
@@ -8,7 +8,7 @@
  */
 
 const path = require('path');
-const { copyFile, writeFile, readFile, chmod } = require('fs').promises;
+const { copyFile, writeFile, readFile, chmod, rmdir, mkdir, readdir, appendFile } = require('fs').promises;
 
 const coreFolder = path.resolve(__dirname, '../../');
 const packageFolder = `${coreFolder}/node_modules`;
@@ -28,7 +28,7 @@ const assetsFolder = `${coreFolder}/assets/vendor`;
       const libraryDeclaration = libraries[libraryIndex];
       // Get the previous package version.
       const currentVersion = libraryDeclaration.match(/version: "(.*)"\n/)[1];
-      // Replace the version value and the version in the licence URL.
+      // Replace the version value and the version in the license URL.
       libraries[libraryIndex] = libraryDeclaration.replace(
         new RegExp(currentVersion, 'g'),
         version,
@@ -36,6 +36,16 @@ const assetsFolder = `${coreFolder}/assets/vendor`;
     }
   }
 
+  // CKEditor 5 translation files need some special handling. Start by ensuring
+  // that an empty /translations directory exists in the
+  // /core/assets/vendor/ckeditor5 directory.
+  const ckeditor5Path = `${assetsFolder}/ckeditor5`;
+  await rmdir(`${ckeditor5Path}/translations`, { recursive: true })
+    .catch(() => {
+      // Nothing to do if the directory doesn't exist.
+    });
+  await mkdir(`${ckeditor5Path}/translations`);
+
   /**
    * Declare the array that defines what needs to be copied over.
    *
@@ -171,66 +181,249 @@ const assetsFolder = `${coreFolder}/assets/vendor`;
       pack: 'loadjs',
       files: [{ from: 'dist/loadjs.min.js', to: 'loadjs.min.js' }],
     },
-  ].map(async ({ pack, files = [], folder = false, library = false }) => {
-    const sourceFolder = pack;
-    const libraryName = library || folder || pack;
-    const destFolder = folder || pack;
-
-    let packageInfo;
-    // Take the version info from the package.json file.
-    if (!['joyride', 'farbtastic'].includes(pack)) {
-      packageInfo = JSON.parse(
-        await readFile(`${packageFolder}/${sourceFolder}/package.json`),
-      );
-    }
-    if (packageInfo) {
-      updateLibraryVersion(libraryName, packageInfo);
+    {
+      pack: '@ckeditor/ckeditor5-alignment',
+      folder: 'ckeditor5',
+      files: [
+        { from: 'build/alignment.js', to: 'alignment.js' }
+      ],
+      library: 'ckeditor5.alignment',
+    },
+    {
+      pack: '@ckeditor/ckeditor5-basic-styles',
+      folder: 'ckeditor5',
+      files: [
+        { from: 'build/basic-styles.js', to: 'basic-styles.js' }
+      ],
+      library: 'ckeditor5.basic',
+    },
+    {
+      pack: '@ckeditor/ckeditor5-block-quote',
+      folder: 'ckeditor5',
+      files: [
+        { from: 'build/block-quote.js', to: 'block-quote.js' }
+      ],
+      library: 'ckeditor5.blockquote',
+    },
+    {
+      pack: '@ckeditor/ckeditor5-editor-classic',
+      folder: 'ckeditor5',
+      files: [
+        { from: 'build/editor-classic.js', to: 'editor-classic.js' }
+      ],
+      library: 'ckeditor5.editorClassic',
+    },
+    {
+      pack: '@ckeditor/ckeditor5-editor-decoupled',
+      folder: 'ckeditor5',
+      files: [
+        { from: 'build/editor-decoupled.js', to: 'editor-decoupled.js' }
+      ],
+      library: 'ckeditor5.editorDecoupled',
+    },
+    {
+      pack: '@ckeditor/ckeditor5-essentials',
+      folder: 'ckeditor5',
+      files: [
+        { from: 'build/essentials.js', to: 'essentials.js' }
+      ],
+      library: 'ckeditor5.internal',
+    },
+    {
+      pack: '@ckeditor/ckeditor5-heading',
+      folder: 'ckeditor5',
+      files: [
+        { from: 'build/heading.js', to: 'heading.js' }
+      ],
+      library: 'ckeditor5.internal',
+    },
+    {
+      pack: '@ckeditor/ckeditor5-horizontal-line',
+      folder: 'ckeditor5',
+      files: [
+        { from: 'build/horizontal-line.js', to: 'horizontal-line.js' }
+      ],
+      library: 'ckeditor5.horizontalLine',
+    },
+    {
+      pack: '@ckeditor/ckeditor5-image',
+      folder: 'ckeditor5',
+      files: [
+        { from: 'build/image.js', to: 'image.js' }
+      ],
+      library: 'ckeditor5.image',
+    },
+    {
+      pack: '@ckeditor/ckeditor5-indent',
+      folder: 'ckeditor5',
+      files: [
+        { from: 'build/indent.js', to: 'indent.js' }
+      ],
+      library: 'ckeditor5.indent',
+    },
+    {
+      pack: '@ckeditor/ckeditor5-language',
+      folder: 'ckeditor5',
+      files: [
+        { from: 'build/language.js', to: 'language.js' },
+      ],
+      library: 'ckeditor5.language',
+    },
+    {
+      pack: '@ckeditor/ckeditor5-link',
+      folder: 'ckeditor5',
+      files: [
+        { from: 'build/link.js', to: 'link.js' }
+      ],
+      library: 'ckeditor5.link',
+    },
+    {
+      pack: '@ckeditor/ckeditor5-list',
+      folder: 'ckeditor5',
+      files: [
+        { from: 'build/list.js', to: 'list.js' }
+      ],
+      library: 'ckeditor5.list',
+    },
+    {
+      pack: '@ckeditor/ckeditor5-paste-from-office',
+      folder: 'ckeditor5',
+      files: [
+        { from: 'build/paste-from-office.js', to: 'paste-from-office.js' }
+      ],
+      library: 'ckeditor5.pasteFromOffice',
+    },
+    {
+      pack: '@ckeditor/ckeditor5-remove-format',
+      folder: 'ckeditor5',
+      files: [
+        { from: 'build/remove-format.js', to: 'remove-format.js' }
+      ],
+      library: 'ckeditor5.removeFormat',
+    },
+    {
+      pack: '@ckeditor/ckeditor5-source-editing',
+      folder: 'ckeditor5',
+      files: [
+        { from: 'build/source-editing.js', to: 'source-editing.js' }
+      ],
+      library: 'ckeditor5.sourceEditing',
+    },
+    {
+      pack: '@ckeditor/ckeditor5-table',
+      folder: 'ckeditor5',
+      files: [
+        { from: 'build/table.js', to: 'table.js' }
+      ],
+      library: 'ckeditor5.table',
+    },
+    {
+      pack: '@ckeditor/ckeditor5-html-support',
+      folder: 'ckeditor5',
+      files: [
+        { from: 'build/html-support.js', to: 'html-support.js' }
+      ],
+      library: 'ckeditor5.htmlSupport',
+    },
+    {
+      pack: '@ckeditor/ckeditor5-special-characters',
+      folder: 'ckeditor5',
+      files: [
+        { from: 'build/special-characters.js', to: 'special-characters.js' }
+      ],
+      library: 'ckeditor5.specialCharacters',
+    },
+    {
+      pack: 'ckeditor5',
+      files: [
+        { from: 'build/ckeditor5-dll.js', to: 'ckeditor5-dll.js' }
+      ],
     }
+  ];
 
-    files.forEach(async (file) => {
-      let source = file;
-      let dest = file;
-      if (typeof file === 'object') {
-        source = file.from;
-        dest = file.to;
-      }
-      // For map files, make sure the sources files don't leak outside the
-      // library folder. In the `sources` member, remove all "../" values at
-      // the start of the files names to avoid having the virtual files outside
-      // of the library vendor folder in dev tools.
-      if (path.extname(source) === '.map') {
-        console.log('Process map file', source);
-        const map = await readFile(
-          `${packageFolder}/${sourceFolder}/${source}`,
-        );
-        const json = JSON.parse(map);
-        json.sources = json.sources.map((source) =>
-          source.replace(/^(\.\.\/)+/, ''),
-        );
-        await writeFile(
-          `${assetsFolder}/${destFolder}/${dest}`,
-          JSON.stringify(json),
-        );
-      } else {
-        console.log(
-          'Copy',
-          `${sourceFolder}/${source}`,
-          'to',
-          `${destFolder}/${dest}`,
-        );
-        await copyFile(
-          `${packageFolder}/${sourceFolder}/${source}`,
-          `${assetsFolder}/${destFolder}/${dest}`,
+  // Use Array.reduce for sequential processing to avoid corrupting the
+  // contents of the concatenated CKEditor 5 translation files.
+  process.reduce(async (previous, { pack, files = [], folder = false, library = false }) => {
+    return previous.then(async () => {
+      const sourceFolder = pack;
+      const libraryName = library || folder || pack;
+      const destFolder = folder || pack;
+
+      let packageInfo;
+      // Take the version info from the package.json file.
+      if (!['joyride', 'farbtastic'].includes(pack)) {
+        packageInfo = JSON.parse(
+          await readFile(`${packageFolder}/${sourceFolder}/package.json`),
         );
-        // These 2 files come from a zip file that hasn't been updated in years
-        // hardcode the permission fix to pass the commit checks.
-        if (['jquery.joyride-2.1.js', 'marker.png'].includes(dest)) {
-          await chmod(`${assetsFolder}/${destFolder}/${dest}`, 0o644);
-        }
       }
+      if (packageInfo) {
+        updateLibraryVersion(libraryName, packageInfo);
+      }
+
+      // CKEditor 5 packages ship with translation files.
+      if (pack.startsWith('@ckeditor') || pack === 'ckeditor5') {
+        const packageTranslationPath = `${packageFolder}/${sourceFolder}/build/translations`;
+        await readdir(packageTranslationPath, { withFileTypes: true }).then(async (translationFiles) => {
+          return translationFiles.map(async (translationFile) => {
+            if (!translationFile.isDirectory()) {
+              // Translation files are concatenated to a single translation
+              // file to avoid having to make multiple network requests to
+              // various translation files. As a trade off, this leads into
+              // some redundant translations depending on configuration.
+              await readFile(`${packageTranslationPath}/${translationFile.name}`).then(async (contents) => {
+                return appendFile(`${assetsFolder}/${destFolder}/translations/${translationFile.name}`, contents);
+              });
+            }
+          }, Promise.resolve());
+        }).catch(() => {
+          // Do nothing as it's expected that not all packages ship translations.
+        });
+      }
+
+      return files.forEach(async (file) => {
+        let source = file;
+        let dest = file;
+        if (typeof file === 'object') {
+          source = file.from;
+          dest = file.to;
+        }
+        // For map files, make sure the sources files don't leak outside the
+        // library folder. In the `sources` member, remove all "../" values at
+        // the start of the files names to avoid having the virtual files outside
+        // of the library vendor folder in dev tools.
+        if (path.extname(source) === '.map') {
+          console.log('Process map file', source);
+          const map = await readFile(
+            `${packageFolder}/${sourceFolder}/${source}`,
+          );
+          const json = JSON.parse(map);
+          json.sources = json.sources.map((source) =>
+            source.replace(/^(\.\.\/)+/, ''),
+          );
+          await writeFile(
+            `${assetsFolder}/${destFolder}/${dest}`,
+            JSON.stringify(json),
+          );
+        } else {
+          console.log(
+            'Copy',
+            `${sourceFolder}/${source}`,
+            'to',
+            `${destFolder}/${dest}`,
+          );
+          await copyFile(
+            `${packageFolder}/${sourceFolder}/${source}`,
+            `${assetsFolder}/${destFolder}/${dest}`,
+          );
+          // These 2 files come from a zip file that hasn't been updated in years
+          // hardcode the permission fix to pass the commit checks.
+          if (['jquery.joyride-2.1.js', 'marker.png'].includes(dest)) {
+            await chmod(`${assetsFolder}/${destFolder}/${dest}`, 0o644);
+          }
+        }
+      });
     });
-  });
+  }, Promise.resolve());
 
-  await Promise.all(process);
   await writeFile(librariesPath, libraries.join('\n\n'));
 })();
diff --git a/core/yarn.lock b/core/yarn.lock
index ff0c29bfeaac..2670ffc02422 100644
--- a/core/yarn.lock
+++ b/core/yarn.lock
@@ -894,6 +894,305 @@
     "@babel/helper-validator-identifier" "^7.14.9"
     to-fast-properties "^2.0.0"
 
+"@ckeditor/ckeditor5-alignment@~31.0.0":
+  version "31.0.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-alignment/-/ckeditor5-alignment-31.0.0.tgz#b91e935a9fef8731cea13a83cc6bc3d9391a45cf"
+  integrity sha512-nbu6O657MyUj+OaUrVTE7VZaHO7KFqCmsYeQJq+endcLiwKqBWEBtBKNRgakJCsgbIvh/7E6QQCr75kmLKa9+Q==
+  dependencies:
+    ckeditor5 "^31.0.0"
+
+"@ckeditor/ckeditor5-basic-styles@~31.0.0":
+  version "31.0.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-basic-styles/-/ckeditor5-basic-styles-31.0.0.tgz#e65e3b3fd6133b8fa27cca7d30ae61f66f194619"
+  integrity sha512-1QXryQRj3uQ0Qmef6yMk5V0xjfk3T8fXESi1pHIsy/A3zgSUCUg+/xXJmIOBLp6LLRiL+bju/grbjerbHXEIHg==
+  dependencies:
+    ckeditor5 "^31.0.0"
+
+"@ckeditor/ckeditor5-block-quote@~31.0.0":
+  version "31.0.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-block-quote/-/ckeditor5-block-quote-31.0.0.tgz#8c59783f5168599ff621071a0efeaf60f48007a8"
+  integrity sha512-T9NPuCWVtNF4EGXn4q8YSyJI1Ry9jJ0PZUv2exKsQAh5DloVXA3ufdAqqi7W/h7S4e5ffF+VAhrgNa0js3BcnA==
+  dependencies:
+    ckeditor5 "^31.0.0"
+
+"@ckeditor/ckeditor5-clipboard@^31.0.0":
+  version "31.0.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-clipboard/-/ckeditor5-clipboard-31.0.0.tgz#158b4089ca2c38d6d29e1399915a82146b0ce6fc"
+  integrity sha512-wmdYd/bNp3zYA9ERo2ednl+ivf2xYq91iTnUDybxgexRHrMc8mjYTTzevrF4aXY56kpQR8c7dhU+Mzy68F7dTg==
+  dependencies:
+    "@ckeditor/ckeditor5-core" "^31.0.0"
+    "@ckeditor/ckeditor5-engine" "^31.0.0"
+    "@ckeditor/ckeditor5-utils" "^31.0.0"
+    "@ckeditor/ckeditor5-widget" "^31.0.0"
+    lodash-es "^4.17.11"
+
+"@ckeditor/ckeditor5-core@^31.0.0":
+  version "31.0.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-core/-/ckeditor5-core-31.0.0.tgz#3559042497791a026be56bef5c0bbd18dacc8d74"
+  integrity sha512-8AvolCaFC/iTDJViNAQk2uJr2LLRieCEc0Kda5OUT0xgeoUF+/B5DYSU3ie8cJOghBSjZmEoZFUApqGaDm0QIA==
+  dependencies:
+    "@ckeditor/ckeditor5-engine" "^31.0.0"
+    "@ckeditor/ckeditor5-ui" "^31.0.0"
+    "@ckeditor/ckeditor5-utils" "^31.0.0"
+    lodash-es "^4.17.15"
+
+"@ckeditor/ckeditor5-dev-utils@^25.4.5":
+  version "25.4.5"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-dev-utils/-/ckeditor5-dev-utils-25.4.5.tgz#723d5a2bbf128f492279e5f9b9c8899fd9a923e5"
+  integrity sha512-ssW6QPNVG/yz0JxFfivNP8LLFgzAnQvuW2qA90RT9E0+jVpB1E5ayrhuZv2KOKvGeVMc5l7PIoNrR6NShvfOpQ==
+  dependencies:
+    "@ckeditor/ckeditor5-dev-webpack-plugin" "^25.4.5"
+    acorn "^6.2.1"
+    acorn-walk "^6.2.0"
+    chalk "^3.0.0"
+    cssnano "^4.0.0"
+    del "^5.0.0"
+    escodegen "^1.9.0"
+    fs-extra "^8.1.0"
+    javascript-stringify "^1.6.0"
+    pofile "^1.0.9"
+    postcss "^7.0.36"
+    postcss-import "^12.0.0"
+    postcss-loader "^3.0.0"
+    postcss-mixins "^6.2.0"
+    postcss-nesting "^7.0.0"
+    raw-loader "^4.0.1"
+    shelljs "^0.8.1"
+    style-loader "^1.2.1"
+    terser-webpack-plugin "^3.0.2"
+    through2 "^3.0.1"
+
+"@ckeditor/ckeditor5-dev-webpack-plugin@^25.4.5":
+  version "25.4.5"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-dev-webpack-plugin/-/ckeditor5-dev-webpack-plugin-25.4.5.tgz#6513dd9d3cf001e3e6be887aa2565b8f69c7897d"
+  integrity sha512-pR8eUDcq1ssEj2fRIJMKwFQzJj/KARLo78SS+MzmE27b+p4PR+sJERZle6ihzrJO8Y4jgHPbG6G/jsv8BlBzeA==
+  dependencies:
+    "@ckeditor/ckeditor5-dev-utils" "^25.4.5"
+    chalk "^4.0.0"
+    rimraf "^3.0.2"
+    semver "^7.3.4"
+    webpack-sources "^2.0.1"
+
+"@ckeditor/ckeditor5-editor-classic@~31.0.0":
+  version "31.0.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-classic/-/ckeditor5-editor-classic-31.0.0.tgz#6038007a5b4fdbb2a64c48fd5752f2b68201b2ba"
+  integrity sha512-73uctgAl8cX6//KlW1CUMQFXEK3USw6DfpUJrKXucMrdRksNXllu1WcZbADwcXgQk006byr8DKA51wNI00+daQ==
+  dependencies:
+    ckeditor5 "^31.0.0"
+    lodash-es "^4.17.15"
+
+"@ckeditor/ckeditor5-editor-decoupled@~31.0.0":
+  version "31.0.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-decoupled/-/ckeditor5-editor-decoupled-31.0.0.tgz#4730f285919d9428ac4c958375700b91c0a6609c"
+  integrity sha512-FRjfzldQEk3i0hBSxRdgQWcwRpVeNF7Hvkf50vRFHoZItww/NQWURi+tUwf/Ohkshr4Pv9Rx5Pu/7HOvnJA3sw==
+  dependencies:
+    ckeditor5 "^31.0.0"
+    lodash-es "^4.17.15"
+
+"@ckeditor/ckeditor5-engine@^31.0.0":
+  version "31.0.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-31.0.0.tgz#629cdd6e8824a0679cd1842ce4f511234fba5a89"
+  integrity sha512-RVsGWx2R9T0cgDZtEo6O5GihvKB3PHoM7SJ/qbmDDWKuhJ/89KZDrWuFrgdNyfZsZwdgNplwnvX8gDvSHpRqkw==
+  dependencies:
+    "@ckeditor/ckeditor5-utils" "^31.0.0"
+    lodash-es "^4.17.15"
+
+"@ckeditor/ckeditor5-enter@^31.0.0":
+  version "31.0.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-enter/-/ckeditor5-enter-31.0.0.tgz#803badc2be7a38ca27a25e3e2de2e44c8905169c"
+  integrity sha512-FCv890nP1CoBLpZ8gOWmgWhmtNhSzIYODmbogI42pVhtQXbu/wMdlA5PsJF81cdrDL1MlL7Tnmor7+Yk1Ej1QQ==
+  dependencies:
+    "@ckeditor/ckeditor5-core" "^31.0.0"
+    "@ckeditor/ckeditor5-engine" "^31.0.0"
+    "@ckeditor/ckeditor5-utils" "^31.0.0"
+
+"@ckeditor/ckeditor5-essentials@~31.0.0":
+  version "31.0.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-essentials/-/ckeditor5-essentials-31.0.0.tgz#48928686e44ebf2658af6223ce18fd6e318a9f23"
+  integrity sha512-S14B/cyushn4n4ANz8H4TjjbxaeH94OG+EDwKL4bXAYn/B1S/I5Cm+MRi7Q8Z3A8A6fjzGhNPUyDx0GnpmKZHQ==
+  dependencies:
+    ckeditor5 "^31.0.0"
+
+"@ckeditor/ckeditor5-heading@~31.0.0":
+  version "31.0.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-heading/-/ckeditor5-heading-31.0.0.tgz#a0eae16d9d5b0288b250596502a7e9b8f89815d4"
+  integrity sha512-bAcNG2K7sZWxvTJTriof/lsR81o4QGbpaFcwj62QfTjYP+To5jlD4YhUIcCbg1YpiwlbJr8tv6PuWH6MkNh/5g==
+  dependencies:
+    ckeditor5 "^31.0.0"
+
+"@ckeditor/ckeditor5-horizontal-line@~31.0.0":
+  version "31.0.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-horizontal-line/-/ckeditor5-horizontal-line-31.0.0.tgz#4a01738e435474f4213b7430b235912711c39724"
+  integrity sha512-QBw34CAMZ3KDr69qJ+qlPoMx7nxkv0Z9NrN/ZkguFmFFI+Wa6SvQKw5qhu9f8T6cgGlkruDtXOGBWSoiEIPfUg==
+  dependencies:
+    ckeditor5 "^31.0.0"
+
+"@ckeditor/ckeditor5-html-support@~31.0.0":
+  version "31.0.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-html-support/-/ckeditor5-html-support-31.0.0.tgz#02abcfc62102828e752768c7c8e139faec48e7d4"
+  integrity sha512-ayNDdGqmhQLqUvbNGv4c+4qtzfOFrQsO8OqIsn1TLbCLjyIzHKrVHpAVUWIQCxJBZDUPJKQ/McGLIS2R37LIrQ==
+  dependencies:
+    ckeditor5 "^31.0.0"
+    lodash-es "^4.17.15"
+
+"@ckeditor/ckeditor5-image@~31.0.0":
+  version "31.0.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-image/-/ckeditor5-image-31.0.0.tgz#75ea102cac5909c1b2d09a1c4e7f030fc59941bc"
+  integrity sha512-t7eYiRx4fLbSrBuSV7DoRC8zmTyzUQyind5gWQNWWDq/nF+bEaMkijOmbvak/gKQIl/C15Eo3jV6dPbzDdwgbg==
+  dependencies:
+    "@ckeditor/ckeditor5-ui" "^31.0.0"
+    ckeditor5 "^31.0.0"
+    lodash-es "^4.17.15"
+
+"@ckeditor/ckeditor5-indent@~31.0.0":
+  version "31.0.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-indent/-/ckeditor5-indent-31.0.0.tgz#397043a4f830a1cef6bded40547c2b2a84c6acb4"
+  integrity sha512-3WuQFMvbxTzGJkAlNhmXaCqwyrSb0k/8HpTw3M9ef7nu0J0eutwT09bJQrfdyeyZ9I7thOXKjh00wTOAni8y2Q==
+  dependencies:
+    ckeditor5 "^31.0.0"
+
+"@ckeditor/ckeditor5-language@~31.0.0":
+  version "31.0.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-language/-/ckeditor5-language-31.0.0.tgz#807ac9f6bd2c5dd59b07ae8cb169e86c26081b0f"
+  integrity sha512-3r5pv/xpErMb5QstCEpABFCifdubIw/nKSeVIPza/gIMOYExJOjVJGRsSuqsPu9QxdkxxTY62JTbjlWq/33elw==
+  dependencies:
+    ckeditor5 "^31.0.0"
+
+"@ckeditor/ckeditor5-link@~31.0.0":
+  version "31.0.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-link/-/ckeditor5-link-31.0.0.tgz#4cf4fe0e318c64b038b636f732b87dde8ba6143c"
+  integrity sha512-CeX05fQIR1p3/aD512vuLedq2OVHJE/toEg3ewZOlWfKan71L3/6wiuuSHO7KkCbp1d/1I/pGOz9G9pBfLUtvg==
+  dependencies:
+    "@ckeditor/ckeditor5-ui" "^31.0.0"
+    ckeditor5 "^31.0.0"
+    lodash-es "^4.17.15"
+
+"@ckeditor/ckeditor5-list@~31.0.0":
+  version "31.0.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-list/-/ckeditor5-list-31.0.0.tgz#a2ef7bc30939774ccdf1b97b132ffcf04f24a5a7"
+  integrity sha512-lSGobEoHdS94ueyhJ+N7XJmZ6CafCobVy+5cNCOymSVoHAY3GI5xOdkWO9slOxV+i8+/yiHT5NDWuCxTzj3WxQ==
+  dependencies:
+    ckeditor5 "^31.0.0"
+
+"@ckeditor/ckeditor5-paragraph@^31.0.0":
+  version "31.0.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paragraph/-/ckeditor5-paragraph-31.0.0.tgz#8e5d5b94c362965625b6478dab6ab467144f3d9f"
+  integrity sha512-v6zSihnX6/C2eQ1P0Q2V1po/u/vkiPqUKYBSagCvW6jexUhUWiAUiBfyc1mS2VUFdyr9Anw6eHaMjbauwnTmFw==
+  dependencies:
+    "@ckeditor/ckeditor5-core" "^31.0.0"
+    "@ckeditor/ckeditor5-ui" "^31.0.0"
+    "@ckeditor/ckeditor5-utils" "^31.0.0"
+
+"@ckeditor/ckeditor5-paste-from-office@~31.0.0":
+  version "31.0.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paste-from-office/-/ckeditor5-paste-from-office-31.0.0.tgz#ff001fa47e48feeec18cc3ebba61e1fedded2272"
+  integrity sha512-ACdbjBOm9SjQGYkA43bX6e+SfCMcyIxnHX7yl2iEXLSZO5kk70xqpKv0tWlg8N5jlcsYPEXR9dHJheWRPehNsg==
+  dependencies:
+    ckeditor5 "^31.0.0"
+
+"@ckeditor/ckeditor5-remove-format@~31.0.0":
+  version "31.0.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-remove-format/-/ckeditor5-remove-format-31.0.0.tgz#e62f7a277a55c0a650582e5f914dd0cb254d865f"
+  integrity sha512-zAcQjsvqPMro3PqBE3QrladNvKlT6cxRtYN4tWBn+kqg3DPlnZcH9HqeVxf6e2GVwDLkp8xRY9BD2CgyLtGt3Q==
+  dependencies:
+    ckeditor5 "^31.0.0"
+
+"@ckeditor/ckeditor5-select-all@^31.0.0":
+  version "31.0.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-select-all/-/ckeditor5-select-all-31.0.0.tgz#59877462ff73cfd490464d9a9eed76288cd592d6"
+  integrity sha512-+n3LvYx9Kdr+A0AUr012FT8O+5/A7GdkSRMI/L0gAuy1IHXYmPYzbymO+qFLY8lyrAfJvZX6rqFLcnaqtLUL6A==
+  dependencies:
+    "@ckeditor/ckeditor5-core" "^31.0.0"
+    "@ckeditor/ckeditor5-ui" "^31.0.0"
+    "@ckeditor/ckeditor5-utils" "^31.0.0"
+
+"@ckeditor/ckeditor5-source-editing@~31.0.0":
+  version "31.0.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-source-editing/-/ckeditor5-source-editing-31.0.0.tgz#eec813af3fb6178631fbeb0a80960722b0f94150"
+  integrity sha512-PPy6Q0/+APKECexoDgzwj52obpow+PnEuoRFTaEspjgt11Dfw/YB7XjAnvuc2msehSkzDhEnDfsB0rPgVvvnzw==
+  dependencies:
+    "@ckeditor/ckeditor5-theme-lark" "^31.0.0"
+    ckeditor5 "^31.0.0"
+
+"@ckeditor/ckeditor5-special-characters@~31.0.0":
+  version "31.0.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-special-characters/-/ckeditor5-special-characters-31.0.0.tgz#d6534ee116e03f4b11ebd3e37db68a833ad594eb"
+  integrity sha512-ja7WjK+GHpfql+CmVV1R6m5ukiQwwenFaiwyf0e8JYrvG0h7brt32ala8Faum/HvwpaTjoLJZRLlxgtt1sTdQg==
+  dependencies:
+    ckeditor5 "^31.0.0"
+
+"@ckeditor/ckeditor5-table@~31.0.0":
+  version "31.0.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-table/-/ckeditor5-table-31.0.0.tgz#40e19b8dca19f8d7163416bfce3196a122c28323"
+  integrity sha512-KdotVXhRlJBuYUPkTo/VDvCSoPm4dZSeZDwV0PWTMiAutmxkpdHHG0FGnAJphCPA1BLO0eLj84DkSyMdw3WlsQ==
+  dependencies:
+    ckeditor5 "^31.0.0"
+    lodash-es "^4.17.15"
+
+"@ckeditor/ckeditor5-theme-lark@^31.0.0":
+  version "31.0.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-theme-lark/-/ckeditor5-theme-lark-31.0.0.tgz#713197a129ef346297c4c218d9968f14e9283f74"
+  integrity sha512-e66pDi5uc6pF7R2LQas64zp1dmi55VfuXabTopsLaaS0TIN1KO6vtKQse7rd9wHGlZPwgonY/YbweeXWIN/EhA==
+  dependencies:
+    "@ckeditor/ckeditor5-ui" "^31.0.0"
+
+"@ckeditor/ckeditor5-typing@^31.0.0":
+  version "31.0.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-31.0.0.tgz#cd7ef4fc34985d56d00ae3da2ac85588be43959c"
+  integrity sha512-7lILwGNhynpUcXKqzzAmPsL57myxqFcv0K1OPb+2jkzEruaYkAINJ3fMYNBwwAxtg2wZDP598ufwonplcSNsJA==
+  dependencies:
+    "@ckeditor/ckeditor5-core" "^31.0.0"
+    "@ckeditor/ckeditor5-engine" "^31.0.0"
+    "@ckeditor/ckeditor5-utils" "^31.0.0"
+    lodash-es "^4.17.15"
+
+"@ckeditor/ckeditor5-ui@^31.0.0":
+  version "31.0.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-31.0.0.tgz#1c3e7703a99bb3a0e80cab7356d0dc593dc0ef14"
+  integrity sha512-WDEwToA8FOPi/AeYqdF6isdTM7hJp26WzxDhDNGWC8aYu/zA146Z07qTbYuBOebG9TWqjsZOQYDXbH/4phmyDg==
+  dependencies:
+    "@ckeditor/ckeditor5-core" "^31.0.0"
+    "@ckeditor/ckeditor5-utils" "^31.0.0"
+    lodash-es "^4.17.15"
+
+"@ckeditor/ckeditor5-undo@^31.0.0":
+  version "31.0.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-undo/-/ckeditor5-undo-31.0.0.tgz#f5b84a9c8cb8183ea0b3ba84a16c4e46b1a12484"
+  integrity sha512-mTSjiMJ/sSTP485djBiMQ4yD7M0qDIcqDlTV6op34M1eXLY63ZwQUnd9NiOqOLrBiwaBBmnRYlSeZCQjoCuk0A==
+  dependencies:
+    "@ckeditor/ckeditor5-core" "^31.0.0"
+    "@ckeditor/ckeditor5-engine" "^31.0.0"
+    "@ckeditor/ckeditor5-ui" "^31.0.0"
+
+"@ckeditor/ckeditor5-upload@^31.0.0":
+  version "31.0.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-upload/-/ckeditor5-upload-31.0.0.tgz#caea779bf563077ff96b74491233e0176d317d95"
+  integrity sha512-ChtGU66fdqwTaOazXtRXcOi6tOzAiTPC5UUv+LycxwSB6MKbqJANg8ny9RoTGWDpHUabb6UHyX8bwlfkXKIqbQ==
+  dependencies:
+    "@ckeditor/ckeditor5-core" "^31.0.0"
+    "@ckeditor/ckeditor5-ui" "^31.0.0"
+    "@ckeditor/ckeditor5-utils" "^31.0.0"
+
+"@ckeditor/ckeditor5-utils@^31.0.0":
+  version "31.0.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-31.0.0.tgz#aeff820668e46dd4ab709da8d5f5089da3cd1b71"
+  integrity sha512-T9S2x0AUBnhN8BJ7Pg4E8okEUccYBKyu5hp4nH2kMUSmfqeJ0JWC9CD5dA1nDOXvU10J6Rw8VoqkbRx/4MuYEw==
+  dependencies:
+    lodash-es "^4.17.15"
+
+"@ckeditor/ckeditor5-widget@^31.0.0":
+  version "31.0.0"
+  resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-widget/-/ckeditor5-widget-31.0.0.tgz#b6bfe9643b36498f11dc44c3dec7bd721eab7081"
+  integrity sha512-MCpBdT2sD/nRgC825aIaI1Tu7T6OQYvNxc6Q4D+gNkdRbLLZrGoWKHNZdgmQg9Di1WgVO1cPo+h45HO2KYHAMA==
+  dependencies:
+    "@ckeditor/ckeditor5-core" "^31.0.0"
+    "@ckeditor/ckeditor5-engine" "^31.0.0"
+    "@ckeditor/ckeditor5-enter" "^31.0.0"
+    "@ckeditor/ckeditor5-typing" "^31.0.0"
+    "@ckeditor/ckeditor5-ui" "^31.0.0"
+    "@ckeditor/ckeditor5-utils" "^31.0.0"
+    lodash-es "^4.17.15"
+
 "@cspell/cspell-bundled-dicts@^5.12.3":
   version "5.12.3"
   resolved "https://registry.yarnpkg.com/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-5.12.3.tgz#d4ae61d03c6f991f4b03b03ee718830522bf74d5"
@@ -1120,6 +1419,11 @@
   resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7"
   integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==
 
+"@discoveryjs/json-ext@^0.5.0":
+  version "0.5.5"
+  resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz#9283c9ce5b289a3c4f61c12757469e59377f81f3"
+  integrity sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA==
+
 "@drupal/once@^1.0.1":
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/@drupal/once/-/once-1.0.1.tgz#7c1ef480aec6d5fa4b5ae986afa5a607afc38482"
@@ -1140,6 +1444,11 @@
     minimatch "^3.0.4"
     strip-json-comments "^3.1.1"
 
+"@gar/promisify@^1.0.1":
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.2.tgz#30aa825f11d438671d585bd44e7fd564535fc210"
+  integrity sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==
+
 "@humanwhocodes/config-array@^0.5.0":
   version "0.5.0"
   resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9"
@@ -1154,6 +1463,14 @@
   resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf"
   integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==
 
+"@mrmlnc/readdir-enhanced@^2.2.1":
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde"
+  integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==
+  dependencies:
+    call-me-maybe "^1.0.1"
+    glob-to-regexp "^0.3.0"
+
 "@nodelib/fs.scandir@2.1.5":
   version "2.1.5"
   resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
@@ -1167,6 +1484,11 @@
   resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
   integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
 
+"@nodelib/fs.stat@^1.1.2":
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b"
+  integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==
+
 "@nodelib/fs.walk@^1.2.3":
   version "1.2.8"
   resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
@@ -1175,6 +1497,22 @@
     "@nodelib/fs.scandir" "2.1.5"
     fastq "^1.6.0"
 
+"@npmcli/fs@^1.0.0":
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.0.0.tgz#589612cfad3a6ea0feafcb901d29c63fd52db09f"
+  integrity sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ==
+  dependencies:
+    "@gar/promisify" "^1.0.1"
+    semver "^7.3.5"
+
+"@npmcli/move-file@^1.0.1":
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674"
+  integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==
+  dependencies:
+    mkdirp "^1.0.4"
+    rimraf "^3.0.2"
+
 "@popperjs/core@^2.9.2":
   version "2.10.2"
   resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.10.2.tgz#0798c03351f0dea1a5a4cabddf26a55a7cbee590"
@@ -1205,6 +1543,45 @@
   resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82"
   integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==
 
+"@tootallnate/once@2":
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf"
+  integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==
+
+"@types/eslint-scope@^3.7.0":
+  version "3.7.1"
+  resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.1.tgz#8dc390a7b4f9dd9f1284629efce982e41612116e"
+  integrity sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==
+  dependencies:
+    "@types/eslint" "*"
+    "@types/estree" "*"
+
+"@types/eslint@*":
+  version "7.28.2"
+  resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.28.2.tgz#0ff2947cdd305897c52d5372294e8c76f351db68"
+  integrity sha512-KubbADPkfoU75KgKeKLsFHXnU4ipH7wYg0TRT33NK3N3yiu7jlFAAoygIWBV+KbuHx/G+AvuGX6DllnK35gfJA==
+  dependencies:
+    "@types/estree" "*"
+    "@types/json-schema" "*"
+
+"@types/estree@*", "@types/estree@^0.0.50":
+  version "0.0.50"
+  resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83"
+  integrity sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==
+
+"@types/glob@^7.1.1":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb"
+  integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==
+  dependencies:
+    "@types/minimatch" "*"
+    "@types/node" "*"
+
+"@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8":
+  version "7.0.9"
+  resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d"
+  integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==
+
 "@types/json5@^0.0.29":
   version "0.0.29"
   resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
@@ -1217,6 +1594,11 @@
   dependencies:
     "@types/unist" "*"
 
+"@types/minimatch@*":
+  version "3.0.5"
+  resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40"
+  integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==
+
 "@types/minimist@^1.2.0":
   version "1.2.2"
   resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c"
@@ -1237,6 +1619,11 @@
   resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
   integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
 
+"@types/q@^1.5.1":
+  version "1.5.5"
+  resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df"
+  integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==
+
 "@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2":
   version "2.0.6"
   resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d"
@@ -1249,16 +1636,202 @@
   dependencies:
     "@types/node" "*"
 
+"@webassemblyjs/ast@1.11.1":
+  version "1.11.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7"
+  integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==
+  dependencies:
+    "@webassemblyjs/helper-numbers" "1.11.1"
+    "@webassemblyjs/helper-wasm-bytecode" "1.11.1"
+
+"@webassemblyjs/floating-point-hex-parser@1.11.1":
+  version "1.11.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f"
+  integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==
+
+"@webassemblyjs/helper-api-error@1.11.1":
+  version "1.11.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16"
+  integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==
+
+"@webassemblyjs/helper-buffer@1.11.1":
+  version "1.11.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5"
+  integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==
+
+"@webassemblyjs/helper-numbers@1.11.1":
+  version "1.11.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae"
+  integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==
+  dependencies:
+    "@webassemblyjs/floating-point-hex-parser" "1.11.1"
+    "@webassemblyjs/helper-api-error" "1.11.1"
+    "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/helper-wasm-bytecode@1.11.1":
+  version "1.11.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1"
+  integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==
+
+"@webassemblyjs/helper-wasm-section@1.11.1":
+  version "1.11.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a"
+  integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.1"
+    "@webassemblyjs/helper-buffer" "1.11.1"
+    "@webassemblyjs/helper-wasm-bytecode" "1.11.1"
+    "@webassemblyjs/wasm-gen" "1.11.1"
+
+"@webassemblyjs/ieee754@1.11.1":
+  version "1.11.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614"
+  integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==
+  dependencies:
+    "@xtuc/ieee754" "^1.2.0"
+
+"@webassemblyjs/leb128@1.11.1":
+  version "1.11.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5"
+  integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==
+  dependencies:
+    "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/utf8@1.11.1":
+  version "1.11.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff"
+  integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==
+
+"@webassemblyjs/wasm-edit@1.11.1":
+  version "1.11.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6"
+  integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.1"
+    "@webassemblyjs/helper-buffer" "1.11.1"
+    "@webassemblyjs/helper-wasm-bytecode" "1.11.1"
+    "@webassemblyjs/helper-wasm-section" "1.11.1"
+    "@webassemblyjs/wasm-gen" "1.11.1"
+    "@webassemblyjs/wasm-opt" "1.11.1"
+    "@webassemblyjs/wasm-parser" "1.11.1"
+    "@webassemblyjs/wast-printer" "1.11.1"
+
+"@webassemblyjs/wasm-gen@1.11.1":
+  version "1.11.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76"
+  integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.1"
+    "@webassemblyjs/helper-wasm-bytecode" "1.11.1"
+    "@webassemblyjs/ieee754" "1.11.1"
+    "@webassemblyjs/leb128" "1.11.1"
+    "@webassemblyjs/utf8" "1.11.1"
+
+"@webassemblyjs/wasm-opt@1.11.1":
+  version "1.11.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2"
+  integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.1"
+    "@webassemblyjs/helper-buffer" "1.11.1"
+    "@webassemblyjs/wasm-gen" "1.11.1"
+    "@webassemblyjs/wasm-parser" "1.11.1"
+
+"@webassemblyjs/wasm-parser@1.11.1":
+  version "1.11.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199"
+  integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.1"
+    "@webassemblyjs/helper-api-error" "1.11.1"
+    "@webassemblyjs/helper-wasm-bytecode" "1.11.1"
+    "@webassemblyjs/ieee754" "1.11.1"
+    "@webassemblyjs/leb128" "1.11.1"
+    "@webassemblyjs/utf8" "1.11.1"
+
+"@webassemblyjs/wast-printer@1.11.1":
+  version "1.11.1"
+  resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0"
+  integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==
+  dependencies:
+    "@webassemblyjs/ast" "1.11.1"
+    "@xtuc/long" "4.2.2"
+
+"@webpack-cli/configtest@^1.1.0":
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.1.0.tgz#8342bef0badfb7dfd3b576f2574ab80c725be043"
+  integrity sha512-ttOkEkoalEHa7RaFYpM0ErK1xc4twg3Am9hfHhL7MVqlHebnkYd2wuI/ZqTDj0cVzZho6PdinY0phFZV3O0Mzg==
+
+"@webpack-cli/info@^1.4.0":
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.4.0.tgz#b9179c3227ab09cbbb149aa733475fcf99430223"
+  integrity sha512-F6b+Man0rwE4n0409FyAJHStYA5OIZERxmnUfLVwv0mc0V1wLad3V7jqRlMkgKBeAq07jUvglacNaa6g9lOpuw==
+  dependencies:
+    envinfo "^7.7.3"
+
+"@webpack-cli/serve@^1.6.0":
+  version "1.6.0"
+  resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.6.0.tgz#2c275aa05c895eccebbfc34cfb223c6e8bd591a2"
+  integrity sha512-ZkVeqEmRpBV2GHvjjUZqEai2PpUbuq8Bqd//vEYsp63J8WyexI8ppCqVS3Zs0QADf6aWuPdU+0XsPI647PVlQA==
+
+"@xtuc/ieee754@^1.2.0":
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
+  integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
+
+"@xtuc/long@4.2.2":
+  version "4.2.2"
+  resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
+  integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
+
+abab@^2.0.3, abab@^2.0.5:
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a"
+  integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==
+
+acorn-globals@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45"
+  integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==
+  dependencies:
+    acorn "^7.1.1"
+    acorn-walk "^7.1.1"
+
+acorn-import-assertions@^1.7.6:
+  version "1.8.0"
+  resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9"
+  integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==
+
 acorn-jsx@^5.3.1:
   version "5.3.2"
   resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
   integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
 
-acorn@^7.4.0:
+acorn-walk@^6.2.0:
+  version "6.2.0"
+  resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c"
+  integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==
+
+acorn-walk@^7.1.1:
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc"
+  integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
+
+acorn@^6.2.1:
+  version "6.4.2"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6"
+  integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==
+
+acorn@^7.1.1, acorn@^7.4.0:
   version "7.4.1"
   resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
   integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
 
+acorn@^8.4.1, acorn@^8.5.0:
+  version "8.5.0"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.5.0.tgz#4512ccb99b3698c752591e9bb4472e38ad43cee2"
+  integrity sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==
+
 agent-base@6, agent-base@^6.0.0, agent-base@^6.0.2:
   version "6.0.2"
   resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
@@ -1274,7 +1847,17 @@ aggregate-error@^3.0.0:
     clean-stack "^2.0.0"
     indent-string "^4.0.0"
 
-ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4:
+ajv-errors@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d"
+  integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==
+
+ajv-keywords@^3.1.0, ajv-keywords@^3.5.2:
+  version "3.5.2"
+  resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
+  integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
+
+ajv@^6.1.0, ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5:
   version "6.12.6"
   resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
   integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
@@ -1294,6 +1877,11 @@ ajv@^8.0.1:
     require-from-string "^2.0.2"
     uri-js "^4.2.2"
 
+alphanum-sort@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
+  integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=
+
 ansi-colors@3.2.3:
   version "3.2.3"
   resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813"
@@ -1356,6 +1944,21 @@ aria-query@^4.2.2:
     "@babel/runtime" "^7.10.2"
     "@babel/runtime-corejs3" "^7.10.2"
 
+arr-diff@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+  integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
+
+arr-flatten@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+  integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
+
+arr-union@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+  integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
+
 array-includes@^3.1.1, array-includes@^3.1.3, array-includes@^3.1.4:
   version "3.1.4"
   resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9"
@@ -1372,11 +1975,28 @@ array-timsort@^1.0.3:
   resolved "https://registry.yarnpkg.com/array-timsort/-/array-timsort-1.0.3.tgz#3c9e4199e54fb2b9c3fe5976396a21614ef0d926"
   integrity sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==
 
+array-union@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
+  integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=
+  dependencies:
+    array-uniq "^1.0.1"
+
 array-union@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
   integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
 
+array-uniq@^1.0.1:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
+  integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=
+
+array-unique@^0.3.2:
+  version "0.3.2"
+  resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+  integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
+
 array.prototype.flat@^1.2.5:
   version "1.2.5"
   resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz#07e0975d84bbc7c48cd1879d609e682598d33e13"
@@ -1422,6 +2042,11 @@ assertion-error@^1.1.0:
   resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b"
   integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==
 
+assign-symbols@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+  integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
+
 ast-types-flow@^0.0.7:
   version "0.0.7"
   resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
@@ -1449,6 +2074,11 @@ asynckit@^0.4.0:
   resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
   integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
 
+atob@^2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
+  integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+
 autoprefixer@^9.6.1, autoprefixer@^9.8.6:
   version "9.8.8"
   resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.8.tgz#fd4bd4595385fa6f06599de749a4d5f7a474957a"
@@ -1547,6 +2177,19 @@ balanced-match@^2.0.0:
   resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-2.0.0.tgz#dc70f920d78db8b858535795867bf48f820633d9"
   integrity sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==
 
+base@^0.11.1:
+  version "0.11.2"
+  resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
+  integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
+  dependencies:
+    cache-base "^1.0.1"
+    class-utils "^0.3.5"
+    component-emitter "^1.2.1"
+    define-property "^1.0.0"
+    isobject "^3.0.1"
+    mixin-deep "^1.2.0"
+    pascalcase "^0.1.1"
+
 bcrypt-pbkdf@^1.0.0:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
@@ -1554,6 +2197,11 @@ bcrypt-pbkdf@^1.0.0:
   dependencies:
     tweetnacl "^0.14.3"
 
+big.js@^5.2.2:
+  version "5.2.2"
+  resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
+  integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
+
 binary-extensions@^2.0.0:
   version "2.2.0"
   resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
@@ -1564,6 +2212,11 @@ bluebird@^3.5.0:
   resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
   integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
 
+boolbase@^1.0.0, boolbase@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+  integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24=
+
 brace-expansion@^1.1.7:
   version "1.1.11"
   resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
@@ -1572,6 +2225,22 @@ brace-expansion@^1.1.7:
     balanced-match "^1.0.0"
     concat-map "0.0.1"
 
+braces@^2.3.1:
+  version "2.3.2"
+  resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
+  integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
+  dependencies:
+    arr-flatten "^1.1.0"
+    array-unique "^0.3.2"
+    extend-shallow "^2.0.1"
+    fill-range "^4.0.0"
+    isobject "^3.0.1"
+    repeat-element "^1.1.2"
+    snapdragon "^0.8.1"
+    snapdragon-node "^2.0.1"
+    split-string "^3.0.2"
+    to-regex "^3.0.1"
+
 braces@^3.0.1, braces@~3.0.2:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
@@ -1579,11 +2248,27 @@ braces@^3.0.1, braces@~3.0.2:
   dependencies:
     fill-range "^7.0.1"
 
+browser-process-hrtime@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626"
+  integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==
+
 browser-stdout@1.3.1:
   version "1.3.1"
   resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"
   integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==
 
+browserslist@^4.0.0, browserslist@^4.14.5:
+  version "4.17.6"
+  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.6.tgz#c76be33e7786b497f66cad25a73756c8b938985d"
+  integrity sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw==
+  dependencies:
+    caniuse-lite "^1.0.30001274"
+    electron-to-chromium "^1.3.886"
+    escalade "^3.1.1"
+    node-releases "^2.0.1"
+    picocolors "^1.0.0"
+
 browserslist@^4.12.0, browserslist@^4.16.6, browserslist@^4.17.5, browserslist@^4.6.4:
   version "4.17.5"
   resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.5.tgz#c827bbe172a4c22b123f5e337533ceebadfdd559"
@@ -1610,6 +2295,45 @@ bytes@3.1.0:
   resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
   integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
 
+cacache@^15.0.5:
+  version "15.3.0"
+  resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb"
+  integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==
+  dependencies:
+    "@npmcli/fs" "^1.0.0"
+    "@npmcli/move-file" "^1.0.1"
+    chownr "^2.0.0"
+    fs-minipass "^2.0.0"
+    glob "^7.1.4"
+    infer-owner "^1.0.4"
+    lru-cache "^6.0.0"
+    minipass "^3.1.1"
+    minipass-collect "^1.0.2"
+    minipass-flush "^1.0.5"
+    minipass-pipeline "^1.2.2"
+    mkdirp "^1.0.3"
+    p-map "^4.0.0"
+    promise-inflight "^1.0.1"
+    rimraf "^3.0.2"
+    ssri "^8.0.1"
+    tar "^6.0.2"
+    unique-filename "^1.1.1"
+
+cache-base@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
+  integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
+  dependencies:
+    collection-visit "^1.0.0"
+    component-emitter "^1.2.1"
+    get-value "^2.0.6"
+    has-value "^1.0.0"
+    isobject "^3.0.1"
+    set-value "^2.0.0"
+    to-object-path "^0.3.0"
+    union-value "^1.0.0"
+    unset-value "^1.0.0"
+
 call-bind@^1.0.0, call-bind@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
@@ -1618,11 +2342,40 @@ call-bind@^1.0.0, call-bind@^1.0.2:
     function-bind "^1.1.1"
     get-intrinsic "^1.0.2"
 
+call-me-maybe@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b"
+  integrity sha1-JtII6onje1y95gJQoV8DHBak1ms=
+
+caller-callsite@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134"
+  integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=
+  dependencies:
+    callsites "^2.0.0"
+
+caller-path@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4"
+  integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=
+  dependencies:
+    caller-callsite "^2.0.0"
+
+callsites@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
+  integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=
+
 callsites@^3.0.0, callsites@^3.1.0:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
   integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
 
+camelcase-css@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5"
+  integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==
+
 camelcase-keys@^6.2.2:
   version "6.2.2"
   resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0"
@@ -1637,6 +2390,21 @@ camelcase@^5.0.0, camelcase@^5.3.1:
   resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
   integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
 
+caniuse-api@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0"
+  integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==
+  dependencies:
+    browserslist "^4.0.0"
+    caniuse-lite "^1.0.0"
+    lodash.memoize "^4.1.2"
+    lodash.uniq "^4.5.0"
+
+caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001274:
+  version "1.0.30001279"
+  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001279.tgz#eb06818da481ef5096a3b3760f43e5382ed6b0ce"
+  integrity sha512-VfEHpzHEXj6/CxggTwSFoZBBYGQfQv9Cf42KPlO79sWXCD1QNKWKsKzFeWL7QpZHJQYAvocqV6Rty1yJMkqWLQ==
+
 caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001271:
   version "1.0.30001271"
   resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001271.tgz#0dda0c9bcae2cf5407cd34cac304186616cc83e8"
@@ -1655,7 +2423,7 @@ chai-nightwatch@^0.4.0:
     assertion-error "1.0.0"
     deep-eql "0.1.3"
 
-chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.2:
+chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.1, chalk@^2.4.2:
   version "2.4.2"
   resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
   integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
@@ -1710,6 +2478,16 @@ chokidar@^3.3.1:
   optionalDependencies:
     fsevents "~2.3.2"
 
+chownr@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
+  integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
+
+chrome-trace-event@^1.0.2:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac"
+  integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==
+
 chromedriver@^87.0.0:
   version "87.0.7"
   resolved "https://registry.yarnpkg.com/chromedriver/-/chromedriver-87.0.7.tgz#74041e02ff7f633e91b98eb707e2476f713dc4ca"
@@ -1729,6 +2507,34 @@ ci-info@^2.0.0:
   resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
   integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
 
+ckeditor5@^31.0.0, ckeditor5@~31.0.0:
+  version "31.0.0"
+  resolved "https://registry.yarnpkg.com/ckeditor5/-/ckeditor5-31.0.0.tgz#304208c1796138c8d063895e8b962f321a627846"
+  integrity sha512-6e6RJWn4mk3xKASy4DiwF0wz165wxagYfWsun7nB0oM4/s7Ri8T6Ihr433RVdepwaVLwrEp70yjk5pbY02cU9A==
+  dependencies:
+    "@ckeditor/ckeditor5-clipboard" "^31.0.0"
+    "@ckeditor/ckeditor5-core" "^31.0.0"
+    "@ckeditor/ckeditor5-engine" "^31.0.0"
+    "@ckeditor/ckeditor5-enter" "^31.0.0"
+    "@ckeditor/ckeditor5-paragraph" "^31.0.0"
+    "@ckeditor/ckeditor5-select-all" "^31.0.0"
+    "@ckeditor/ckeditor5-typing" "^31.0.0"
+    "@ckeditor/ckeditor5-ui" "^31.0.0"
+    "@ckeditor/ckeditor5-undo" "^31.0.0"
+    "@ckeditor/ckeditor5-upload" "^31.0.0"
+    "@ckeditor/ckeditor5-utils" "^31.0.0"
+    "@ckeditor/ckeditor5-widget" "^31.0.0"
+
+class-utils@^0.3.5:
+  version "0.3.6"
+  resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
+  integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
+  dependencies:
+    arr-union "^3.1.0"
+    define-property "^0.2.5"
+    isobject "^3.0.0"
+    static-extend "^0.1.1"
+
 clean-stack@^2.0.0:
   version "2.2.0"
   resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
@@ -1784,7 +2590,24 @@ clone@^1.0.2:
   resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
   integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
 
-color-convert@^1.9.0:
+coa@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3"
+  integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==
+  dependencies:
+    "@types/q" "^1.5.1"
+    chalk "^2.4.1"
+    q "^1.1.2"
+
+collection-visit@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
+  integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
+  dependencies:
+    map-visit "^1.0.0"
+    object-visit "^1.0.0"
+
+color-convert@^1.9.0, color-convert@^1.9.3:
   version "1.9.3"
   resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
   integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
@@ -1803,12 +2626,33 @@ color-name@1.1.3:
   resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
   integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
 
-color-name@~1.1.4:
+color-name@^1.0.0, color-name@~1.1.4:
   version "1.1.4"
   resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
   integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
 
-combined-stream@^1.0.6, combined-stream@~1.0.6:
+color-string@^1.6.0:
+  version "1.6.0"
+  resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.6.0.tgz#c3915f61fe267672cb7e1e064c9d692219f6c312"
+  integrity sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==
+  dependencies:
+    color-name "^1.0.0"
+    simple-swizzle "^0.2.2"
+
+color@^3.0.0:
+  version "3.2.1"
+  resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164"
+  integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==
+  dependencies:
+    color-convert "^1.9.3"
+    color-string "^1.6.0"
+
+colorette@^2.0.14:
+  version "2.0.16"
+  resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da"
+  integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==
+
+combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6:
   version "1.0.8"
   resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
   integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
@@ -1820,6 +2664,11 @@ commander@^2.20.0:
   resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
   integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
 
+commander@^7.0.0:
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
+  integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
+
 commander@^8.2.0:
   version "8.3.0"
   resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66"
@@ -1841,6 +2690,11 @@ commondir@^1.0.1:
   resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
   integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
 
+component-emitter@^1.2.1:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
+  integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
+
 concat-map@0.0.1:
   version "0.0.1"
   resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
@@ -1870,6 +2724,11 @@ convert-source-map@^1.7.0:
   dependencies:
     safe-buffer "~5.1.1"
 
+copy-descriptor@^0.1.0:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
+  integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
+
 core-js-compat@^3.16.0, core-js-compat@^3.16.2:
   version "3.19.0"
   resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.19.0.tgz#b3b93f93c8721b3ed52b91f12f964cc410967f8b"
@@ -1893,6 +2752,16 @@ core-util-is@^1.0.2, core-util-is@~1.0.0:
   resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
   integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
 
+cosmiconfig@^5.0.0:
+  version "5.2.1"
+  resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a"
+  integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==
+  dependencies:
+    import-fresh "^2.0.0"
+    is-directory "^0.3.1"
+    js-yaml "^3.13.1"
+    parse-json "^4.0.0"
+
 cosmiconfig@^7.0.0, cosmiconfig@^7.0.1:
   version "7.0.1"
   resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d"
@@ -1911,7 +2780,7 @@ cross-env@^7.0.2:
   dependencies:
     cross-spawn "^7.0.1"
 
-cross-spawn@^7.0.1, cross-spawn@^7.0.2:
+cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
   version "7.0.3"
   resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
   integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
@@ -2002,6 +2871,19 @@ css-blank-pseudo@^0.1.4:
   dependencies:
     postcss "^7.0.5"
 
+css-color-names@0.0.4, css-color-names@^0.0.4:
+  version "0.0.4"
+  resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
+  integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=
+
+css-declaration-sorter@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22"
+  integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==
+  dependencies:
+    postcss "^7.0.1"
+    timsort "^0.3.0"
+
 css-has-pseudo@^0.10.0:
   version "0.10.0"
   resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz#3c642ab34ca242c59c41a125df9105841f6966ee"
@@ -2017,6 +2899,42 @@ css-prefers-color-scheme@^3.1.1:
   dependencies:
     postcss "^7.0.5"
 
+css-select-base-adapter@^0.1.1:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7"
+  integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==
+
+css-select@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef"
+  integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==
+  dependencies:
+    boolbase "^1.0.0"
+    css-what "^3.2.1"
+    domutils "^1.7.0"
+    nth-check "^1.0.2"
+
+css-tree@1.0.0-alpha.37:
+  version "1.0.0-alpha.37"
+  resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22"
+  integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==
+  dependencies:
+    mdn-data "2.0.4"
+    source-map "^0.6.1"
+
+css-tree@^1.1.2:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d"
+  integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==
+  dependencies:
+    mdn-data "2.0.14"
+    source-map "^0.6.1"
+
+css-what@^3.2.1:
+  version "3.4.2"
+  resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4"
+  integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==
+
 css.escape@^1.5.1:
   version "1.5.1"
   resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb"
@@ -2037,6 +2955,98 @@ cssesc@^3.0.0:
   resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
   integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
 
+cssnano-preset-default@^4.0.8:
+  version "4.0.8"
+  resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz#920622b1fc1e95a34e8838203f1397a504f2d3ff"
+  integrity sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==
+  dependencies:
+    css-declaration-sorter "^4.0.1"
+    cssnano-util-raw-cache "^4.0.1"
+    postcss "^7.0.0"
+    postcss-calc "^7.0.1"
+    postcss-colormin "^4.0.3"
+    postcss-convert-values "^4.0.1"
+    postcss-discard-comments "^4.0.2"
+    postcss-discard-duplicates "^4.0.2"
+    postcss-discard-empty "^4.0.1"
+    postcss-discard-overridden "^4.0.1"
+    postcss-merge-longhand "^4.0.11"
+    postcss-merge-rules "^4.0.3"
+    postcss-minify-font-values "^4.0.2"
+    postcss-minify-gradients "^4.0.2"
+    postcss-minify-params "^4.0.2"
+    postcss-minify-selectors "^4.0.2"
+    postcss-normalize-charset "^4.0.1"
+    postcss-normalize-display-values "^4.0.2"
+    postcss-normalize-positions "^4.0.2"
+    postcss-normalize-repeat-style "^4.0.2"
+    postcss-normalize-string "^4.0.2"
+    postcss-normalize-timing-functions "^4.0.2"
+    postcss-normalize-unicode "^4.0.1"
+    postcss-normalize-url "^4.0.1"
+    postcss-normalize-whitespace "^4.0.2"
+    postcss-ordered-values "^4.1.2"
+    postcss-reduce-initial "^4.0.3"
+    postcss-reduce-transforms "^4.0.2"
+    postcss-svgo "^4.0.3"
+    postcss-unique-selectors "^4.0.1"
+
+cssnano-util-get-arguments@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f"
+  integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=
+
+cssnano-util-get-match@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d"
+  integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=
+
+cssnano-util-raw-cache@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282"
+  integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==
+  dependencies:
+    postcss "^7.0.0"
+
+cssnano-util-same-parent@^4.0.0:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3"
+  integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==
+
+cssnano@^4.0.0:
+  version "4.1.11"
+  resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.11.tgz#c7b5f5b81da269cb1fd982cb960c1200910c9a99"
+  integrity sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==
+  dependencies:
+    cosmiconfig "^5.0.0"
+    cssnano-preset-default "^4.0.8"
+    is-resolvable "^1.0.0"
+    postcss "^7.0.0"
+
+csso@^4.0.2:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529"
+  integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==
+  dependencies:
+    css-tree "^1.1.2"
+
+cssom@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36"
+  integrity sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==
+
+cssom@~0.3.6:
+  version "0.3.8"
+  resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a"
+  integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==
+
+cssstyle@^2.3.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852"
+  integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==
+  dependencies:
+    cssom "~0.3.6"
+
 cuint@^0.2.2:
   version "0.2.2"
   resolved "https://registry.yarnpkg.com/cuint/-/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b"
@@ -2059,6 +3069,15 @@ data-uri-to-buffer@3:
   resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636"
   integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==
 
+data-urls@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.1.tgz#597fc2ae30f8bc4dbcf731fcd1b1954353afc6f8"
+  integrity sha512-Ds554NeT5Gennfoo9KN50Vh6tpgtvYEwraYjejXnyTpu1C7oXKxdFk75REooENHE8ndTVOJuv+BEs4/J/xcozw==
+  dependencies:
+    abab "^2.0.3"
+    whatwg-mimetype "^3.0.0"
+    whatwg-url "^10.0.0"
+
 debug@3.2.6:
   version "3.2.6"
   resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
@@ -2080,7 +3099,7 @@ debug@4.3.1:
   dependencies:
     ms "2.1.2"
 
-debug@^2.6.9:
+debug@^2.2.0, debug@^2.3.3, debug@^2.6.9:
   version "2.6.9"
   resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
   integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
@@ -2107,6 +3126,16 @@ decamelize@^1.1.0, decamelize@^1.2.0:
   resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
   integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
 
+decimal.js@^10.3.1:
+  version "10.3.1"
+  resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783"
+  integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==
+
+decode-uri-component@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
+  integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
+
 deep-eql@0.1.3:
   version "0.1.3"
   resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2"
@@ -2138,6 +3167,28 @@ define-properties@^1.1.2, define-properties@^1.1.3:
   dependencies:
     object-keys "^1.0.12"
 
+define-property@^0.2.5:
+  version "0.2.5"
+  resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
+  integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
+  dependencies:
+    is-descriptor "^0.1.0"
+
+define-property@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
+  integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
+  dependencies:
+    is-descriptor "^1.0.0"
+
+define-property@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
+  integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
+  dependencies:
+    is-descriptor "^1.0.2"
+    isobject "^3.0.1"
+
 degenerator@^3.0.1:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-3.0.1.tgz#7ef78ec0c8577a544477308ddf1d2d6e88d51f5b"
@@ -2148,6 +3199,20 @@ degenerator@^3.0.1:
     esprima "^4.0.0"
     vm2 "^3.9.3"
 
+del@^5.0.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/del/-/del-5.1.0.tgz#d9487c94e367410e6eff2925ee58c0c84a75b3a7"
+  integrity sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==
+  dependencies:
+    globby "^10.0.1"
+    graceful-fs "^4.2.2"
+    is-glob "^4.0.1"
+    is-path-cwd "^2.2.0"
+    is-path-inside "^3.0.1"
+    p-map "^3.0.0"
+    rimraf "^3.0.0"
+    slash "^3.0.0"
+
 del@^6.0.0:
   version "6.0.0"
   resolved "https://registry.yarnpkg.com/del/-/del-6.0.0.tgz#0b40d0332cea743f1614f818be4feb717714c952"
@@ -2182,6 +3247,14 @@ diff@3.5.0:
   resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
   integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
 
+dir-glob@2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034"
+  integrity sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==
+  dependencies:
+    arrify "^1.0.1"
+    path-type "^3.0.0"
+
 dir-glob@^3.0.1:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
@@ -2221,6 +3294,13 @@ domelementtype@^2.0.1:
   resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57"
   integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==
 
+domexception@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673"
+  integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==
+  dependencies:
+    webidl-conversions "^7.0.0"
+
 domhandler@^2.3.0:
   version "2.4.2"
   resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803"
@@ -2228,7 +3308,7 @@ domhandler@^2.3.0:
   dependencies:
     domelementtype "1"
 
-domutils@^1.5.1:
+domutils@^1.5.1, domutils@^1.7.0:
   version "1.7.0"
   resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a"
   integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==
@@ -2280,6 +3360,11 @@ electron-to-chromium@^1.3.878:
   resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.880.tgz#58d1a298c5267f2faf440683d038c50ab39a6401"
   integrity sha512-iwIP/6WoeSimzUKJIQtjtpVDsK8Ir8qQCMXsUBwg+rxJR2Uh3wTNSbxoYRfs+3UWx/9MAnPIxVZCyWkm8MT0uw==
 
+electron-to-chromium@^1.3.886:
+  version "1.3.893"
+  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.893.tgz#9d804c68953b05ede35409dba0d73dd54c077b4d"
+  integrity sha512-ChtwF7qB03INq1SyMpue08wc6cve+ktj2UC/Y7se9vB+JryfzziJeYwsgb8jLaCA5GMkHCdn5M62PfSMWhifZg==
+
 emoji-regex@^7.0.1:
   version "7.0.3"
   resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
@@ -2295,6 +3380,11 @@ emoji-regex@^9.0.0:
   resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
   integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
 
+emojis-list@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
+  integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
+
 end-of-stream@^1.1.0:
   version "1.4.4"
   resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
@@ -2302,6 +3392,14 @@ end-of-stream@^1.1.0:
   dependencies:
     once "^1.4.0"
 
+enhanced-resolve@^5.8.3:
+  version "5.8.3"
+  resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz#6d552d465cce0423f5b3d718511ea53826a7b2f0"
+  integrity sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==
+  dependencies:
+    graceful-fs "^4.2.4"
+    tapable "^2.2.0"
+
 enquirer@^2.3.5:
   version "2.3.6"
   resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d"
@@ -2319,7 +3417,7 @@ entities@^2.0.0:
   resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
   integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
 
-envinfo@^7.5.1:
+envinfo@^7.5.1, envinfo@^7.7.3:
   version "7.8.1"
   resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475"
   integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==
@@ -2331,7 +3429,7 @@ error-ex@^1.3.1:
   dependencies:
     is-arrayish "^0.2.1"
 
-es-abstract@^1.19.0, es-abstract@^1.19.1:
+es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.19.1:
   version "1.19.1"
   resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3"
   integrity sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==
@@ -2357,6 +3455,11 @@ es-abstract@^1.19.0, es-abstract@^1.19.1:
     string.prototype.trimstart "^1.0.4"
     unbox-primitive "^1.0.1"
 
+es-module-lexer@^0.9.0:
+  version "0.9.3"
+  resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19"
+  integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==
+
 es-to-primitive@^1.2.1:
   version "1.2.1"
   resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
@@ -2386,7 +3489,7 @@ escape-string-regexp@^4.0.0:
   resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
   integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
 
-escodegen@^1.8.1:
+escodegen@^1.8.1, escodegen@^1.9.0:
   version "1.14.3"
   resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503"
   integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==
@@ -2398,6 +3501,18 @@ escodegen@^1.8.1:
   optionalDependencies:
     source-map "~0.6.1"
 
+escodegen@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd"
+  integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==
+  dependencies:
+    esprima "^4.0.1"
+    estraverse "^5.2.0"
+    esutils "^2.0.2"
+    optionator "^0.8.1"
+  optionalDependencies:
+    source-map "~0.6.1"
+
 eslint-config-airbnb-base@^14.2.1:
   version "14.2.1"
   resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz#8a2eb38455dc5a312550193b319cdaeef042cd1e"
@@ -2523,7 +3638,7 @@ eslint-plugin-yml@^0.10.0:
     natural-compare "^1.4.0"
     yaml-eslint-parser "^0.4.0"
 
-eslint-scope@^5.1.1:
+eslint-scope@5.1.1, eslint-scope@^5.1.1:
   version "5.1.1"
   resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
   integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
@@ -2637,6 +3752,26 @@ esutils@^2.0.2:
   resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
   integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
 
+events@^3.2.0:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
+  integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
+
+execa@^5.0.0:
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
+  integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
+  dependencies:
+    cross-spawn "^7.0.3"
+    get-stream "^6.0.0"
+    human-signals "^2.1.0"
+    is-stream "^2.0.0"
+    merge-stream "^2.0.0"
+    npm-run-path "^4.0.1"
+    onetime "^5.1.2"
+    signal-exit "^3.0.3"
+    strip-final-newline "^2.0.0"
+
 execall@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/execall/-/execall-2.0.0.tgz#16a06b5fe5099df7d00be5d9c06eecded1663b45"
@@ -2644,11 +3779,53 @@ execall@^2.0.0:
   dependencies:
     clone-regexp "^2.1.0"
 
+expand-brackets@^2.1.4:
+  version "2.1.4"
+  resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
+  integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
+  dependencies:
+    debug "^2.3.3"
+    define-property "^0.2.5"
+    extend-shallow "^2.0.1"
+    posix-character-classes "^0.1.0"
+    regex-not "^1.0.0"
+    snapdragon "^0.8.1"
+    to-regex "^3.0.1"
+
+extend-shallow@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+  integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
+  dependencies:
+    is-extendable "^0.1.0"
+
+extend-shallow@^3.0.0, extend-shallow@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+  integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
+  dependencies:
+    assign-symbols "^1.0.0"
+    is-extendable "^1.0.1"
+
 extend@^3.0.0, extend@~3.0.2:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
   integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
 
+extglob@^2.0.4:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
+  integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
+  dependencies:
+    array-unique "^0.3.2"
+    define-property "^1.0.0"
+    expand-brackets "^2.1.4"
+    extend-shallow "^2.0.1"
+    fragment-cache "^0.2.1"
+    regex-not "^1.0.0"
+    snapdragon "^0.8.1"
+    to-regex "^3.0.1"
+
 extract-zip@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a"
@@ -2684,7 +3861,19 @@ fast-diff@^1.1.2:
   resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03"
   integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==
 
-fast-glob@^3.1.1, fast-glob@^3.2.5:
+fast-glob@^2.0.2:
+  version "2.2.7"
+  resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d"
+  integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==
+  dependencies:
+    "@mrmlnc/readdir-enhanced" "^2.2.1"
+    "@nodelib/fs.stat" "^1.1.2"
+    glob-parent "^3.1.0"
+    is-glob "^4.0.0"
+    merge2 "^1.2.3"
+    micromatch "^3.1.10"
+
+fast-glob@^3.0.3, fast-glob@^3.1.1, fast-glob@^3.2.5:
   version "3.2.7"
   resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1"
   integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==
@@ -2743,6 +3932,16 @@ filelist@^1.0.1:
   dependencies:
     minimatch "^3.0.4"
 
+fill-range@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+  integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
+  dependencies:
+    extend-shallow "^2.0.1"
+    is-number "^3.0.0"
+    repeat-string "^1.6.1"
+    to-regex-range "^2.1.0"
+
 fill-range@^7.0.1:
   version "7.0.1"
   resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
@@ -2759,6 +3958,15 @@ find-cache-dir@^2.0.0:
     make-dir "^2.0.0"
     pkg-dir "^3.0.0"
 
+find-cache-dir@^3.3.1:
+  version "3.3.2"
+  resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b"
+  integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==
+  dependencies:
+    commondir "^1.0.1"
+    make-dir "^3.0.2"
+    pkg-dir "^4.1.0"
+
 find-up@3.0.0, find-up@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
@@ -2773,7 +3981,7 @@ find-up@^2.1.0:
   dependencies:
     locate-path "^2.0.0"
 
-find-up@^4.1.0:
+find-up@^4.0.0, find-up@^4.1.0:
   version "4.1.0"
   resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
   integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
@@ -2819,11 +4027,25 @@ follow-redirects@^1.14.0:
   resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.4.tgz#838fdf48a8bbdd79e52ee51fb1c94e3ed98b9379"
   integrity sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==
 
+for-in@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+  integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
+
 forever-agent@~0.6.1:
   version "0.6.1"
   resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
   integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
 
+form-data@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
+  integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
+  dependencies:
+    asynckit "^0.4.0"
+    combined-stream "^1.0.8"
+    mime-types "^2.1.12"
+
 form-data@~2.3.2:
   version "2.3.3"
   resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
@@ -2833,6 +4055,13 @@ form-data@~2.3.2:
     combined-stream "^1.0.6"
     mime-types "^2.1.12"
 
+fragment-cache@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+  integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
+  dependencies:
+    map-cache "^0.2.2"
+
 fs-extra@^10.0.0:
   version "10.0.0"
   resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.0.tgz#9ff61b655dde53fb34a82df84bb214ce802e17c1"
@@ -2851,6 +4080,13 @@ fs-extra@^8.1.0:
     jsonfile "^4.0.0"
     universalify "^0.1.0"
 
+fs-minipass@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
+  integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
+  dependencies:
+    minipass "^3.0.0"
+
 fs.realpath@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
@@ -2920,6 +4156,11 @@ get-stream@^5.1.0:
   dependencies:
     pump "^3.0.0"
 
+get-stream@^6.0.0:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
+  integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
+
 get-symbol-description@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6"
@@ -2940,6 +4181,11 @@ get-uri@3:
     fs-extra "^8.1.0"
     ftp "^0.3.10"
 
+get-value@^2.0.3, get-value@^2.0.6:
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+  integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
+
 getpass@^0.1.1:
   version "0.1.7"
   resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
@@ -2947,6 +4193,14 @@ getpass@^0.1.1:
   dependencies:
     assert-plus "^1.0.0"
 
+glob-parent@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
+  integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=
+  dependencies:
+    is-glob "^3.1.0"
+    path-dirname "^1.0.0"
+
 glob-parent@^5.1.2, glob-parent@~5.1.2:
   version "5.1.2"
   resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
@@ -2954,6 +4208,16 @@ glob-parent@^5.1.2, glob-parent@~5.1.2:
   dependencies:
     is-glob "^4.0.1"
 
+glob-to-regexp@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab"
+  integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=
+
+glob-to-regexp@^0.4.1:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
+  integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
+
 glob@7.1.3:
   version "7.1.3"
   resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
@@ -2966,7 +4230,7 @@ glob@7.1.3:
     once "^1.3.0"
     path-is-absolute "^1.0.0"
 
-glob@^7.1.2, glob@^7.1.3, glob@^7.2.0:
+glob@^7.0.0, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0:
   version "7.2.0"
   resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023"
   integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==
@@ -3013,6 +4277,20 @@ globals@^13.6.0, globals@^13.9.0:
   dependencies:
     type-fest "^0.20.2"
 
+globby@^10.0.1:
+  version "10.0.2"
+  resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543"
+  integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==
+  dependencies:
+    "@types/glob" "^7.1.1"
+    array-union "^2.1.0"
+    dir-glob "^3.0.1"
+    fast-glob "^3.0.3"
+    glob "^7.1.3"
+    ignore "^5.1.1"
+    merge2 "^1.2.3"
+    slash "^3.0.0"
+
 globby@^11.0.1, globby@^11.0.3:
   version "11.0.4"
   resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5"
@@ -3025,6 +4303,19 @@ globby@^11.0.1, globby@^11.0.3:
     merge2 "^1.3.0"
     slash "^3.0.0"
 
+globby@^8.0.1:
+  version "8.0.2"
+  resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d"
+  integrity sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==
+  dependencies:
+    array-union "^1.0.1"
+    dir-glob "2.0.0"
+    fast-glob "^2.0.2"
+    glob "^7.1.2"
+    ignore "^3.3.5"
+    pify "^3.0.0"
+    slash "^1.0.0"
+
 globjoin@^0.1.4:
   version "0.1.4"
   resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43"
@@ -3037,7 +4328,7 @@ gonzales-pe@^4.3.0:
   dependencies:
     minimist "^1.2.5"
 
-graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4:
+graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.4:
   version "4.2.8"
   resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a"
   integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==
@@ -3097,7 +4388,38 @@ has-tostringtag@^1.0.0:
   dependencies:
     has-symbols "^1.0.2"
 
-has@^1.0.3:
+has-value@^0.3.1:
+  version "0.3.1"
+  resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
+  integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
+  dependencies:
+    get-value "^2.0.3"
+    has-values "^0.1.4"
+    isobject "^2.0.0"
+
+has-value@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
+  integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
+  dependencies:
+    get-value "^2.0.6"
+    has-values "^1.0.0"
+    isobject "^3.0.0"
+
+has-values@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+  integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
+
+has-values@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+  integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
+  dependencies:
+    is-number "^3.0.0"
+    kind-of "^4.0.0"
+
+has@^1.0.0, has@^1.0.3:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
   integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
@@ -3109,6 +4431,11 @@ he@1.2.0:
   resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
   integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
 
+hex-color-regex@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e"
+  integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==
+
 hosted-git-info@^2.1.4:
   version "2.8.9"
   resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
@@ -3121,6 +4448,23 @@ hosted-git-info@^4.0.1:
   dependencies:
     lru-cache "^6.0.0"
 
+hsl-regex@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e"
+  integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=
+
+hsla-regex@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38"
+  integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg=
+
+html-encoding-sniffer@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9"
+  integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==
+  dependencies:
+    whatwg-encoding "^2.0.0"
+
 html-tags@^3.1.0:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140"
@@ -3158,6 +4502,15 @@ http-proxy-agent@^4.0.0, http-proxy-agent@^4.0.1:
     agent-base "6"
     debug "4"
 
+http-proxy-agent@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43"
+  integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==
+  dependencies:
+    "@tootallnate/once" "2"
+    agent-base "6"
+    debug "4"
+
 http-signature@~1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
@@ -3175,6 +4528,11 @@ https-proxy-agent@5, https-proxy-agent@^5.0.0:
     agent-base "6"
     debug "4"
 
+human-signals@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
+  integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
+
 iconv-lite@0.4.24:
   version "0.4.24"
   resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
@@ -3182,16 +4540,48 @@ iconv-lite@0.4.24:
   dependencies:
     safer-buffer ">= 2.1.2 < 3"
 
+iconv-lite@0.6.3:
+  version "0.6.3"
+  resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
+  integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
+  dependencies:
+    safer-buffer ">= 2.1.2 < 3.0.0"
+
+ignore@^3.3.5:
+  version "3.3.10"
+  resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043"
+  integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==
+
 ignore@^4.0.6:
   version "4.0.6"
   resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
   integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
 
+ignore@^5.1.1:
+  version "5.1.9"
+  resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.9.tgz#9ec1a5cbe8e1446ec60d4420060d43aa6e7382fb"
+  integrity sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==
+
 ignore@^5.1.4, ignore@^5.1.8:
   version "5.1.8"
   resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57"
   integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==
 
+import-cwd@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9"
+  integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=
+  dependencies:
+    import-from "^2.1.0"
+
+import-fresh@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546"
+  integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY=
+  dependencies:
+    caller-path "^2.0.0"
+    resolve-from "^3.0.0"
+
 import-fresh@^3.0.0, import-fresh@^3.2.1, import-fresh@^3.3.0:
   version "3.3.0"
   resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
@@ -3200,11 +4590,26 @@ import-fresh@^3.0.0, import-fresh@^3.2.1, import-fresh@^3.3.0:
     parent-module "^1.0.0"
     resolve-from "^4.0.0"
 
+import-from@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1"
+  integrity sha1-M1238qev/VOqpHHUuAId7ja387E=
+  dependencies:
+    resolve-from "^3.0.0"
+
 import-lazy@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153"
   integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==
 
+import-local@^3.0.2:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.3.tgz#4d51c2c495ca9393da259ec66b62e022920211e0"
+  integrity sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==
+  dependencies:
+    pkg-dir "^4.2.0"
+    resolve-cwd "^3.0.0"
+
 imurmurhash@^0.1.4:
   version "0.1.4"
   resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
@@ -3220,6 +4625,11 @@ indexes-of@^1.0.1:
   resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
   integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc=
 
+infer-owner@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"
+  integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==
+
 inflight@^1.0.4:
   version "1.0.6"
   resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
@@ -3228,7 +4638,7 @@ inflight@^1.0.4:
     once "^1.3.0"
     wrappy "1"
 
-inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1:
+inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1:
   version "2.0.4"
   resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
   integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@@ -3247,6 +4657,16 @@ internal-slot@^1.0.3:
     has "^1.0.3"
     side-channel "^1.0.4"
 
+interpret@^1.0.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e"
+  integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==
+
+interpret@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9"
+  integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==
+
 ip-regex@^4.1.0:
   version "4.3.0"
   resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5"
@@ -3257,6 +4677,25 @@ ip@^1.1.5:
   resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
   integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=
 
+is-absolute-url@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"
+  integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=
+
+is-accessor-descriptor@^0.1.6:
+  version "0.1.6"
+  resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+  integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
+  dependencies:
+    kind-of "^3.0.2"
+
+is-accessor-descriptor@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+  integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
+  dependencies:
+    kind-of "^6.0.0"
+
 is-alphabetical@^1.0.0:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d"
@@ -3275,6 +4714,11 @@ is-arrayish@^0.2.1:
   resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
   integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
 
+is-arrayish@^0.3.1:
+  version "0.3.2"
+  resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
+  integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==
+
 is-bigint@^1.0.1:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3"
@@ -3297,6 +4741,11 @@ is-boolean-object@^1.1.0:
     call-bind "^1.0.2"
     has-tostringtag "^1.0.0"
 
+is-buffer@^1.1.5:
+  version "1.1.6"
+  resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+  integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+
 is-buffer@^2.0.0, is-buffer@~2.0.3:
   version "2.0.5"
   resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191"
@@ -3307,6 +4756,18 @@ is-callable@^1.1.4, is-callable@^1.2.4:
   resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945"
   integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==
 
+is-color-stop@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345"
+  integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=
+  dependencies:
+    css-color-names "^0.0.4"
+    hex-color-regex "^1.1.0"
+    hsl-regex "^1.0.0"
+    hsla-regex "^1.0.0"
+    rgb-regex "^1.0.1"
+    rgba-regex "^1.0.0"
+
 is-core-module@^2.2.0, is-core-module@^2.5.0, is-core-module@^2.7.0:
   version "2.8.0"
   resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548"
@@ -3314,6 +4775,20 @@ is-core-module@^2.2.0, is-core-module@^2.5.0, is-core-module@^2.7.0:
   dependencies:
     has "^1.0.3"
 
+is-data-descriptor@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+  integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
+  dependencies:
+    kind-of "^3.0.2"
+
+is-data-descriptor@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+  integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
+  dependencies:
+    kind-of "^6.0.0"
+
 is-date-object@^1.0.1:
   version "1.0.5"
   resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f"
@@ -3326,7 +4801,42 @@ is-decimal@^1.0.0:
   resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5"
   integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==
 
-is-extglob@^2.1.1:
+is-descriptor@^0.1.0:
+  version "0.1.6"
+  resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
+  integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
+  dependencies:
+    is-accessor-descriptor "^0.1.6"
+    is-data-descriptor "^0.1.4"
+    kind-of "^5.0.0"
+
+is-descriptor@^1.0.0, is-descriptor@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+  integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
+  dependencies:
+    is-accessor-descriptor "^1.0.0"
+    is-data-descriptor "^1.0.0"
+    kind-of "^6.0.2"
+
+is-directory@^0.3.1:
+  version "0.3.1"
+  resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
+  integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=
+
+is-extendable@^0.1.0, is-extendable@^0.1.1:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+  integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
+
+is-extendable@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+  integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
+  dependencies:
+    is-plain-object "^2.0.4"
+
+is-extglob@^2.1.0, is-extglob@^2.1.1:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
   integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
@@ -3341,6 +4851,13 @@ is-fullwidth-code-point@^3.0.0:
   resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
   integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
 
+is-glob@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
+  integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=
+  dependencies:
+    is-extglob "^2.1.0"
+
 is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
   version "4.0.3"
   resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
@@ -3370,6 +4887,13 @@ is-number-object@^1.0.4:
   dependencies:
     has-tostringtag "^1.0.0"
 
+is-number@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+  integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
+  dependencies:
+    kind-of "^3.0.2"
+
 is-number@^7.0.0:
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
@@ -3385,7 +4909,7 @@ is-path-cwd@^2.2.0:
   resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb"
   integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==
 
-is-path-inside@^3.0.2:
+is-path-inside@^3.0.1, is-path-inside@^3.0.2:
   version "3.0.3"
   resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
   integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
@@ -3400,13 +4924,18 @@ is-plain-obj@^2.0.0:
   resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
   integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==
 
-is-plain-object@^2.0.4:
+is-plain-object@^2.0.3, is-plain-object@^2.0.4:
   version "2.0.4"
   resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
   integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
   dependencies:
     isobject "^3.0.1"
 
+is-potential-custom-element-name@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5"
+  integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==
+
 is-regex@^1.1.4:
   version "1.1.4"
   resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
@@ -3420,11 +4949,21 @@ is-regexp@^2.0.0:
   resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-2.1.0.tgz#cd734a56864e23b956bf4e7c66c396a4c0b22c2d"
   integrity sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==
 
+is-resolvable@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
+  integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==
+
 is-shared-array-buffer@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6"
   integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==
 
+is-stream@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
+  integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
+
 is-string@^1.0.5, is-string@^1.0.7:
   version "1.0.7"
   resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
@@ -3461,6 +5000,11 @@ is-weakref@^1.0.1:
   dependencies:
     call-bind "^1.0.0"
 
+is-windows@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
+  integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
+
 is2@^2.0.6:
   version "2.0.7"
   resolved "https://registry.yarnpkg.com/is2/-/is2-2.0.7.tgz#d084e10cab3bd45d6c9dfde7a48599fcbb93fcac"
@@ -3475,12 +5019,24 @@ isarray@0.0.1:
   resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
   integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
 
+isarray@1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+  integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
 isexe@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
   integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
 
-isobject@^3.0.1:
+isobject@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+  integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
+  dependencies:
+    isarray "1.0.0"
+
+isobject@^3.0.0, isobject@^3.0.1:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
   integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
@@ -3500,6 +5056,29 @@ jake@^10.6.1:
     filelist "^1.0.1"
     minimatch "^3.0.4"
 
+javascript-stringify@^1.6.0:
+  version "1.6.0"
+  resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-1.6.0.tgz#142d111f3a6e3dae8f4a9afd77d45855b5a9cce3"
+  integrity sha1-FC0RHzpuPa6PSpr9d9RYVbWpzOM=
+
+jest-worker@^26.2.1:
+  version "26.6.2"
+  resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed"
+  integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==
+  dependencies:
+    "@types/node" "*"
+    merge-stream "^2.0.0"
+    supports-color "^7.0.0"
+
+jest-worker@^27.0.6:
+  version "27.3.1"
+  resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.3.1.tgz#0def7feae5b8042be38479799aeb7b5facac24b2"
+  integrity sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==
+  dependencies:
+    "@types/node" "*"
+    merge-stream "^2.0.0"
+    supports-color "^8.0.0"
+
 "joyride@https://github.com/zurb/joyride/archive/refs/heads/v2.1.tar.gz":
   version "0.0.0"
   resolved "https://github.com/zurb/joyride/archive/refs/heads/v2.1.tar.gz#a2149b220318565de072ed0c956310cd7c30c7d7"
@@ -3554,6 +5133,39 @@ jsbn@~0.1.0:
   resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
   integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
 
+jsdom@^18.0.1:
+  version "18.0.1"
+  resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-18.0.1.tgz#7317c91be425f31ff25814ad427eed8a2a310b61"
+  integrity sha512-mgVzrYP4IJiJKVqXkAdBn+jg+nQgPusBxTJulz3m1Y/1RIrkk8aDoNaQE5BNbHwe72WwiwE7k3Av2THXDpvzPQ==
+  dependencies:
+    abab "^2.0.5"
+    acorn "^8.5.0"
+    acorn-globals "^6.0.0"
+    cssom "^0.5.0"
+    cssstyle "^2.3.0"
+    data-urls "^3.0.1"
+    decimal.js "^10.3.1"
+    domexception "^4.0.0"
+    escodegen "^2.0.0"
+    form-data "^4.0.0"
+    html-encoding-sniffer "^3.0.0"
+    http-proxy-agent "^5.0.0"
+    https-proxy-agent "^5.0.0"
+    is-potential-custom-element-name "^1.0.1"
+    nwsapi "^2.2.0"
+    parse5 "6.0.1"
+    saxes "^5.0.1"
+    symbol-tree "^3.2.4"
+    tough-cookie "^4.0.0"
+    w3c-hr-time "^1.0.2"
+    w3c-xmlserializer "^3.0.0"
+    webidl-conversions "^7.0.0"
+    whatwg-encoding "^2.0.0"
+    whatwg-mimetype "^3.0.0"
+    whatwg-url "^10.0.0"
+    ws "^8.2.3"
+    xml-name-validator "^4.0.0"
+
 jsesc@^2.5.1:
   version "2.5.2"
   resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
@@ -3564,6 +5176,11 @@ jsesc@~0.5.0:
   resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
   integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
 
+json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
+  integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
+
 json-parse-even-better-errors@^2.3.0:
   version "2.3.1"
   resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
@@ -3642,7 +5259,26 @@ jsprim@^1.2.2:
     array-includes "^3.1.3"
     object.assign "^4.1.2"
 
-kind-of@^6.0.2, kind-of@^6.0.3:
+kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
+  version "3.2.2"
+  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+  integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
+  dependencies:
+    is-buffer "^1.1.5"
+
+kind-of@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+  integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
+  dependencies:
+    is-buffer "^1.1.5"
+
+kind-of@^5.0.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
+  integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
+
+kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3:
   version "6.0.3"
   resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
   integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
@@ -3685,6 +5321,29 @@ lines-and-columns@^1.1.6:
   resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
   integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
 
+loader-runner@^4.2.0:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384"
+  integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==
+
+loader-utils@^1.1.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"
+  integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==
+  dependencies:
+    big.js "^5.2.2"
+    emojis-list "^3.0.0"
+    json5 "^1.0.1"
+
+loader-utils@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.2.tgz#d6e3b4fb81870721ae4e0868ab11dd638368c129"
+  integrity sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==
+  dependencies:
+    big.js "^5.2.2"
+    emojis-list "^3.0.0"
+    json5 "^2.1.2"
+
 loadjs@^4.2.0:
   version "4.2.0"
   resolved "https://registry.yarnpkg.com/loadjs/-/loadjs-4.2.0.tgz#2a0336376397a6a43edf98c9ec3229ddd5abb6f6"
@@ -3720,6 +5379,11 @@ locate-path@^6.0.0:
   dependencies:
     p-locate "^5.0.0"
 
+lodash-es@^4.17.11, lodash-es@^4.17.15:
+  version "4.17.21"
+  resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee"
+  integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
+
 lodash._arraycopy@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1"
@@ -3818,6 +5482,11 @@ lodash.keys@^3.0.0:
     lodash.isarguments "^3.0.0"
     lodash.isarray "^3.0.0"
 
+lodash.memoize@^4.1.2:
+  version "4.1.2"
+  resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
+  integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=
+
 lodash.merge@^4.6.2:
   version "4.6.2"
   resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
@@ -3828,6 +5497,11 @@ lodash.truncate@^4.4.2:
   resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193"
   integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=
 
+lodash.uniq@^4.5.0:
+  version "4.5.0"
+  resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
+  integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
+
 lodash@^4.17.10, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21:
   version "4.17.21"
   resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
@@ -3889,13 +5563,18 @@ make-dir@^2.0.0, make-dir@^2.1.0:
     pify "^4.0.1"
     semver "^5.6.0"
 
-make-dir@^3.0.0:
+make-dir@^3.0.0, make-dir@^3.0.2:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
   integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
   dependencies:
     semver "^6.0.0"
 
+map-cache@^0.2.2:
+  version "0.2.2"
+  resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+  integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
+
 map-obj@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
@@ -3906,6 +5585,13 @@ map-obj@^4.0.0:
   resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a"
   integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==
 
+map-visit@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
+  integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
+  dependencies:
+    object-visit "^1.0.0"
+
 mathml-tag-names@^2.1.3:
   version "2.1.3"
   resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3"
@@ -3939,6 +5625,16 @@ mdast-util-to-string@^2.0.0:
   resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b"
   integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==
 
+mdn-data@2.0.14:
+  version "2.0.14"
+  resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50"
+  integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==
+
+mdn-data@2.0.4:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b"
+  integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==
+
 meow@^9.0.0:
   version "9.0.0"
   resolved "https://registry.yarnpkg.com/meow/-/meow-9.0.0.tgz#cd9510bc5cac9dee7d03c73ee1f9ad959f4ea364"
@@ -3957,7 +5653,12 @@ meow@^9.0.0:
     type-fest "^0.18.0"
     yargs-parser "^20.2.3"
 
-merge2@^1.3.0:
+merge-stream@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
+  integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
+
+merge2@^1.2.3, merge2@^1.3.0:
   version "1.4.1"
   resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
   integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
@@ -3970,6 +5671,25 @@ micromark@~2.11.0:
     debug "^4.0.0"
     parse-entities "^2.0.0"
 
+micromatch@^3.1.10:
+  version "3.1.10"
+  resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
+  integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
+  dependencies:
+    arr-diff "^4.0.0"
+    array-unique "^0.3.2"
+    braces "^2.3.1"
+    define-property "^2.0.2"
+    extend-shallow "^3.0.2"
+    extglob "^2.0.4"
+    fragment-cache "^0.2.1"
+    kind-of "^6.0.2"
+    nanomatch "^1.2.9"
+    object.pick "^1.3.0"
+    regex-not "^1.0.0"
+    snapdragon "^0.8.1"
+    to-regex "^3.0.2"
+
 micromatch@^4.0.4:
   version "4.0.4"
   resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9"
@@ -3983,6 +5703,11 @@ mime-db@1.50.0:
   resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.50.0.tgz#abd4ac94e98d3c0e185016c67ab45d5fde40c11f"
   integrity sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==
 
+mime-db@1.51.0:
+  version "1.51.0"
+  resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c"
+  integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==
+
 mime-types@^2.1.12, mime-types@~2.1.19:
   version "2.1.33"
   resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.33.tgz#1fa12a904472fafd068e48d9e8401f74d3f70edb"
@@ -3990,6 +5715,13 @@ mime-types@^2.1.12, mime-types@~2.1.19:
   dependencies:
     mime-db "1.50.0"
 
+mime-types@^2.1.27:
+  version "2.1.34"
+  resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24"
+  integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==
+  dependencies:
+    mime-db "1.51.0"
+
 mime@^2.3.1:
   version "2.5.2"
   resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe"
@@ -4026,6 +5758,50 @@ minimist@^1.2.0, minimist@^1.2.2, minimist@^1.2.5:
   resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
   integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
 
+minipass-collect@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617"
+  integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==
+  dependencies:
+    minipass "^3.0.0"
+
+minipass-flush@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373"
+  integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==
+  dependencies:
+    minipass "^3.0.0"
+
+minipass-pipeline@^1.2.2:
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c"
+  integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==
+  dependencies:
+    minipass "^3.0.0"
+
+minipass@^3.0.0, minipass@^3.1.1:
+  version "3.1.5"
+  resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.5.tgz#71f6251b0a33a49c01b3cf97ff77eda030dff732"
+  integrity sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==
+  dependencies:
+    yallist "^4.0.0"
+
+minizlib@^2.1.1:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
+  integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==
+  dependencies:
+    minipass "^3.0.0"
+    yallist "^4.0.0"
+
+mixin-deep@^1.2.0:
+  version "1.3.2"
+  resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
+  integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
+  dependencies:
+    for-in "^1.0.2"
+    is-extendable "^1.0.1"
+
 mkdirp@0.5.4:
   version "0.5.4"
   resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.4.tgz#fd01504a6797ec5c9be81ff43d204961ed64a512"
@@ -4033,14 +5809,14 @@ mkdirp@0.5.4:
   dependencies:
     minimist "^1.2.5"
 
-mkdirp@^0.5.0:
+mkdirp@^0.5.0, mkdirp@~0.5.1:
   version "0.5.5"
   resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
   integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
   dependencies:
     minimist "^1.2.5"
 
-mkdirp@^1.0.4:
+mkdirp@^1.0.3, mkdirp@^1.0.4:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
   integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
@@ -4104,11 +5880,33 @@ mute-stream@0.0.8:
   resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
   integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
 
+nanomatch@^1.2.9:
+  version "1.2.13"
+  resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
+  integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
+  dependencies:
+    arr-diff "^4.0.0"
+    array-unique "^0.3.2"
+    define-property "^2.0.2"
+    extend-shallow "^3.0.2"
+    fragment-cache "^0.2.1"
+    is-windows "^1.0.2"
+    kind-of "^6.0.2"
+    object.pick "^1.3.0"
+    regex-not "^1.0.0"
+    snapdragon "^0.8.1"
+    to-regex "^3.0.1"
+
 natural-compare@^1.4.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
   integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
 
+neo-async@^2.6.2:
+  version "2.6.2"
+  resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
+  integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
+
 netmask@^2.0.1:
   version "2.0.2"
   resolved "https://registry.yarnpkg.com/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7"
@@ -4193,16 +5991,40 @@ normalize-selector@^0.2.0:
   resolved "https://registry.yarnpkg.com/normalize-selector/-/normalize-selector-0.2.0.tgz#d0b145eb691189c63a78d201dc4fdb1293ef0c03"
   integrity sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=
 
+normalize-url@^3.0.0:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559"
+  integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==
+
 normalize.css@^8.0.1:
   version "8.0.1"
   resolved "https://registry.yarnpkg.com/normalize.css/-/normalize.css-8.0.1.tgz#9b98a208738b9cc2634caacbc42d131c97487bf3"
   integrity sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==
 
+npm-run-path@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
+  integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
+  dependencies:
+    path-key "^3.0.0"
+
+nth-check@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c"
+  integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==
+  dependencies:
+    boolbase "~1.0.0"
+
 num2fraction@^1.2.2:
   version "1.2.2"
   resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
   integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=
 
+nwsapi@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7"
+  integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==
+
 oauth-sign@~0.9.0:
   version "0.9.0"
   resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
@@ -4213,6 +6035,15 @@ object-assign@^4.1.1:
   resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
   integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
 
+object-copy@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
+  integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
+  dependencies:
+    copy-descriptor "^0.1.0"
+    define-property "^0.2.5"
+    kind-of "^3.0.3"
+
 object-inspect@^1.11.0, object-inspect@^1.9.0:
   version "1.11.0"
   resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1"
@@ -4223,6 +6054,13 @@ object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1:
   resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
   integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
 
+object-visit@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
+  integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
+  dependencies:
+    isobject "^3.0.0"
+
 object.assign@4.1.0:
   version "4.1.0"
   resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da"
@@ -4261,7 +6099,7 @@ object.fromentries@^2.0.4:
     define-properties "^1.1.3"
     es-abstract "^1.19.1"
 
-object.getownpropertydescriptors@^2.0.3:
+object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0:
   version "2.1.3"
   resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz#b223cf38e17fefb97a63c10c91df72ccb386df9e"
   integrity sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==
@@ -4278,7 +6116,14 @@ object.hasown@^1.0.0:
     define-properties "^1.1.3"
     es-abstract "^1.19.1"
 
-object.values@^1.1.4, object.values@^1.1.5:
+object.pick@^1.3.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+  integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
+  dependencies:
+    isobject "^3.0.1"
+
+object.values@^1.1.0, object.values@^1.1.4, object.values@^1.1.5:
   version "1.1.5"
   resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac"
   integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==
@@ -4294,7 +6139,7 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0:
   dependencies:
     wrappy "1"
 
-onetime@^5.1.0:
+onetime@^5.1.0, onetime@^5.1.2:
   version "5.1.2"
   resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
   integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
@@ -4388,6 +6233,13 @@ p-locate@^5.0.0:
   dependencies:
     p-limit "^3.0.2"
 
+p-map@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d"
+  integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==
+  dependencies:
+    aggregate-error "^3.0.0"
+
 p-map@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b"
@@ -4455,6 +6307,14 @@ parse-entities@^2.0.0:
     is-decimal "^1.0.0"
     is-hexadecimal "^1.0.0"
 
+parse-json@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
+  integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=
+  dependencies:
+    error-ex "^1.3.1"
+    json-parse-better-errors "^1.0.1"
+
 parse-json@^5.0.0:
   version "5.2.0"
   resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
@@ -4465,6 +6325,21 @@ parse-json@^5.0.0:
     json-parse-even-better-errors "^2.3.0"
     lines-and-columns "^1.1.6"
 
+parse5@6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
+  integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
+
+pascalcase@^0.1.1:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+  integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
+
+path-dirname@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
+  integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=
+
 path-exists@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
@@ -4480,7 +6355,7 @@ path-is-absolute@^1.0.0:
   resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
   integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
 
-path-key@^3.1.0:
+path-key@^3.0.0, path-key@^3.1.0:
   version "3.1.1"
   resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
   integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
@@ -4490,6 +6365,13 @@ path-parse@^1.0.6:
   resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
   integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
 
+path-type@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
+  integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==
+  dependencies:
+    pify "^3.0.0"
+
 path-type@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
@@ -4530,6 +6412,11 @@ pify@^2.3.0:
   resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
   integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
 
+pify@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
+  integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
+
 pify@^4.0.1:
   version "4.0.1"
   resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
@@ -4556,6 +6443,23 @@ pkg-dir@^3.0.0:
   dependencies:
     find-up "^3.0.0"
 
+pkg-dir@^4.1.0, pkg-dir@^4.2.0:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
+  integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
+  dependencies:
+    find-up "^4.0.0"
+
+pofile@^1.0.9:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/pofile/-/pofile-1.1.1.tgz#a581df04a6fae4941eebd7c1211dbd43700c5541"
+  integrity sha512-RVAzFGo1Mx9+YukVKSgTLut6r4ZVBW8IVrqGHAPfEsVJN93WSp5HRD6+qNa7av1q/joPKDNJd55m5AJl9GBQGA==
+
+posix-character-classes@^0.1.0:
+  version "0.1.1"
+  resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
+  integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
+
 postcss-attribute-case-insensitive@^4.0.1:
   version "4.0.2"
   resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz#d93e46b504589e94ac7277b0463226c68041a880"
@@ -4615,6 +6519,25 @@ postcss-color-rebeccapurple@^4.0.1:
     postcss "^7.0.2"
     postcss-values-parser "^2.0.0"
 
+postcss-colormin@^4.0.3:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381"
+  integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==
+  dependencies:
+    browserslist "^4.0.0"
+    color "^3.0.0"
+    has "^1.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-convert-values@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f"
+  integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==
+  dependencies:
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
 postcss-custom-media@^7.0.8:
   version "7.0.8"
   resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz#fffd13ffeffad73621be5f387076a28b00294e0c"
@@ -4646,6 +6569,34 @@ postcss-dir-pseudo-class@^5.0.0:
     postcss "^7.0.2"
     postcss-selector-parser "^5.0.0-rc.3"
 
+postcss-discard-comments@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033"
+  integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==
+  dependencies:
+    postcss "^7.0.0"
+
+postcss-discard-duplicates@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb"
+  integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==
+  dependencies:
+    postcss "^7.0.0"
+
+postcss-discard-empty@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765"
+  integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==
+  dependencies:
+    postcss "^7.0.0"
+
+postcss-discard-overridden@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57"
+  integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==
+  dependencies:
+    postcss "^7.0.0"
+
 postcss-double-position-gradients@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz#fc927d52fddc896cb3a2812ebc5df147e110522e"
@@ -4713,7 +6664,7 @@ postcss-image-set-function@^3.0.1:
     postcss "^7.0.2"
     postcss-values-parser "^2.0.0"
 
-postcss-import@^12.0.1:
+postcss-import@^12.0.0, postcss-import@^12.0.1:
   version "12.0.1"
   resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-12.0.1.tgz#cf8c7ab0b5ccab5649024536e565f841928b7153"
   integrity sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw==
@@ -4730,6 +6681,14 @@ postcss-initial@^3.0.0:
   dependencies:
     postcss "^7.0.2"
 
+postcss-js@^2.0.3:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-2.0.3.tgz#a96f0f23ff3d08cec7dc5b11bf11c5f8077cdab9"
+  integrity sha512-zS59pAk3deu6dVHyrGqmC3oDXBdNdajk4k1RyxeVXCrcEDBUBHoIhE4QTsmhxgzXxsaqFDAkUZfmMa5f/N/79w==
+  dependencies:
+    camelcase-css "^2.0.1"
+    postcss "^7.0.18"
+
 postcss-lab-function@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz#bb51a6856cd12289ab4ae20db1e3821ef13d7d2e"
@@ -4744,33 +6703,214 @@ postcss-less@^3.1.4:
   resolved "https://registry.yarnpkg.com/postcss-less/-/postcss-less-3.1.4.tgz#369f58642b5928ef898ffbc1a6e93c958304c5ad"
   integrity sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==
   dependencies:
-    postcss "^7.0.14"
+    postcss "^7.0.14"
+
+postcss-load-config@^2.0.0:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a"
+  integrity sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==
+  dependencies:
+    cosmiconfig "^5.0.0"
+    import-cwd "^2.0.0"
+
+postcss-loader@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d"
+  integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==
+  dependencies:
+    loader-utils "^1.1.0"
+    postcss "^7.0.0"
+    postcss-load-config "^2.0.0"
+    schema-utils "^1.0.0"
+
+postcss-logical@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-3.0.0.tgz#2495d0f8b82e9f262725f75f9401b34e7b45d5b5"
+  integrity sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==
+  dependencies:
+    postcss "^7.0.2"
+
+postcss-media-minmax@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz#b75bb6cbc217c8ac49433e12f22048814a4f5ed5"
+  integrity sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==
+  dependencies:
+    postcss "^7.0.2"
+
+postcss-media-query-parser@^0.2.3:
+  version "0.2.3"
+  resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244"
+  integrity sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=
+
+postcss-merge-longhand@^4.0.11:
+  version "4.0.11"
+  resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24"
+  integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==
+  dependencies:
+    css-color-names "0.0.4"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+    stylehacks "^4.0.0"
+
+postcss-merge-rules@^4.0.3:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650"
+  integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==
+  dependencies:
+    browserslist "^4.0.0"
+    caniuse-api "^3.0.0"
+    cssnano-util-same-parent "^4.0.0"
+    postcss "^7.0.0"
+    postcss-selector-parser "^3.0.0"
+    vendors "^1.0.0"
+
+postcss-minify-font-values@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6"
+  integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==
+  dependencies:
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-minify-gradients@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471"
+  integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==
+  dependencies:
+    cssnano-util-get-arguments "^4.0.0"
+    is-color-stop "^1.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-minify-params@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874"
+  integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==
+  dependencies:
+    alphanum-sort "^1.0.0"
+    browserslist "^4.0.0"
+    cssnano-util-get-arguments "^4.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+    uniqs "^2.0.0"
+
+postcss-minify-selectors@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8"
+  integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==
+  dependencies:
+    alphanum-sort "^1.0.0"
+    has "^1.0.0"
+    postcss "^7.0.0"
+    postcss-selector-parser "^3.0.0"
+
+postcss-mixins@^6.2.0:
+  version "6.2.3"
+  resolved "https://registry.yarnpkg.com/postcss-mixins/-/postcss-mixins-6.2.3.tgz#021893ba455d04b5baa052bf196297ddd70e4af1"
+  integrity sha512-gfH5d09YilzDn/CLGFA9Lwv7GTezuyHgnAyXC8AfvhUMpl67ZTewhcpNuOgawClCOD+76XePE2IHO1xMgsOlvA==
+  dependencies:
+    globby "^8.0.1"
+    postcss "^7.0.21"
+    postcss-js "^2.0.3"
+    postcss-simple-vars "^5.0.2"
+    sugarss "^2.0.0"
+
+postcss-nesting@^7.0.0:
+  version "7.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-7.0.1.tgz#b50ad7b7f0173e5b5e3880c3501344703e04c052"
+  integrity sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==
+  dependencies:
+    postcss "^7.0.2"
+
+postcss-normalize-charset@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4"
+  integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==
+  dependencies:
+    postcss "^7.0.0"
+
+postcss-normalize-display-values@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a"
+  integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==
+  dependencies:
+    cssnano-util-get-match "^4.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-normalize-positions@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f"
+  integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==
+  dependencies:
+    cssnano-util-get-arguments "^4.0.0"
+    has "^1.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-normalize-repeat-style@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c"
+  integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==
+  dependencies:
+    cssnano-util-get-arguments "^4.0.0"
+    cssnano-util-get-match "^4.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-normalize-string@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c"
+  integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==
+  dependencies:
+    has "^1.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
+postcss-normalize-timing-functions@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9"
+  integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==
+  dependencies:
+    cssnano-util-get-match "^4.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
 
-postcss-logical@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-3.0.0.tgz#2495d0f8b82e9f262725f75f9401b34e7b45d5b5"
-  integrity sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==
+postcss-normalize-unicode@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb"
+  integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==
   dependencies:
-    postcss "^7.0.2"
+    browserslist "^4.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
 
-postcss-media-minmax@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz#b75bb6cbc217c8ac49433e12f22048814a4f5ed5"
-  integrity sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==
+postcss-normalize-url@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1"
+  integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==
   dependencies:
-    postcss "^7.0.2"
+    is-absolute-url "^2.0.0"
+    normalize-url "^3.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
 
-postcss-media-query-parser@^0.2.3:
-  version "0.2.3"
-  resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244"
-  integrity sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=
+postcss-normalize-whitespace@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82"
+  integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==
+  dependencies:
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
 
-postcss-nesting@^7.0.0:
-  version "7.0.1"
-  resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-7.0.1.tgz#b50ad7b7f0173e5b5e3880c3501344703e04c052"
-  integrity sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==
+postcss-ordered-values@^4.1.2:
+  version "4.1.2"
+  resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee"
+  integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==
   dependencies:
-    postcss "^7.0.2"
+    cssnano-util-get-arguments "^4.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
 
 postcss-overflow-shorthand@^2.0.0:
   version "2.0.0"
@@ -4852,6 +6992,26 @@ postcss-pxtorem@^5.1.1:
   dependencies:
     postcss "^7.0.27"
 
+postcss-reduce-initial@^4.0.3:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df"
+  integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==
+  dependencies:
+    browserslist "^4.0.0"
+    caniuse-api "^3.0.0"
+    has "^1.0.0"
+    postcss "^7.0.0"
+
+postcss-reduce-transforms@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29"
+  integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==
+  dependencies:
+    cssnano-util-get-match "^4.0.0"
+    has "^1.0.0"
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+
 postcss-replace-overflow-wrap@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz#61b360ffdaedca84c7c918d2b0f0d0ea559ab01c"
@@ -4902,6 +7062,15 @@ postcss-selector-not@^4.0.0:
     balanced-match "^1.0.0"
     postcss "^7.0.2"
 
+postcss-selector-parser@^3.0.0:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270"
+  integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==
+  dependencies:
+    dot-prop "^5.2.0"
+    indexes-of "^1.0.1"
+    uniq "^1.0.1"
+
 postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4:
   version "5.0.0"
   resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c"
@@ -4919,6 +7088,13 @@ postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.5:
     cssesc "^3.0.0"
     util-deprecate "^1.0.2"
 
+postcss-simple-vars@^5.0.2:
+  version "5.0.2"
+  resolved "https://registry.yarnpkg.com/postcss-simple-vars/-/postcss-simple-vars-5.0.2.tgz#e2f81b3d0847ddd4169816b6d141b91d51e6e22e"
+  integrity sha512-xWIufxBoINJv6JiLb7jl5oElgp+6puJwvT5zZHliUSydoLz4DADRB3NDDsYgfKVwojn4TDLiseoC65MuS8oGGg==
+  dependencies:
+    postcss "^7.0.14"
+
 postcss-sorting@^5.0.1:
   version "5.0.1"
   resolved "https://registry.yarnpkg.com/postcss-sorting/-/postcss-sorting-5.0.1.tgz#10d5d0059eea8334dacc820c0121864035bc3f11"
@@ -4927,11 +7103,29 @@ postcss-sorting@^5.0.1:
     lodash "^4.17.14"
     postcss "^7.0.17"
 
+postcss-svgo@^4.0.3:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.3.tgz#343a2cdbac9505d416243d496f724f38894c941e"
+  integrity sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==
+  dependencies:
+    postcss "^7.0.0"
+    postcss-value-parser "^3.0.0"
+    svgo "^1.0.0"
+
 postcss-syntax@^0.36.2:
   version "0.36.2"
   resolved "https://registry.yarnpkg.com/postcss-syntax/-/postcss-syntax-0.36.2.tgz#f08578c7d95834574e5593a82dfbfa8afae3b51c"
   integrity sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==
 
+postcss-unique-selectors@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac"
+  integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==
+  dependencies:
+    alphanum-sort "^1.0.0"
+    postcss "^7.0.0"
+    uniqs "^2.0.0"
+
 postcss-url@^8.0.0:
   version "8.0.0"
   resolved "https://registry.yarnpkg.com/postcss-url/-/postcss-url-8.0.0.tgz#7b10059bd12929cdbb1971c60f61a0e5af86b4ca"
@@ -4943,7 +7137,7 @@ postcss-url@^8.0.0:
     postcss "^7.0.2"
     xxhashjs "^0.2.1"
 
-postcss-value-parser@^3.2.3:
+postcss-value-parser@^3.0.0, postcss-value-parser@^3.2.3:
   version "3.3.1"
   resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281"
   integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==
@@ -4962,7 +7156,7 @@ postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1:
     indexes-of "^1.0.1"
     uniq "^1.0.1"
 
-postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.18, postcss@^7.0.2, postcss@^7.0.21, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.31, postcss@^7.0.32, postcss@^7.0.35, postcss@^7.0.5, postcss@^7.0.6:
+postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.18, postcss@^7.0.2, postcss@^7.0.21, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.31, postcss@^7.0.32, postcss@^7.0.35, postcss@^7.0.36, postcss@^7.0.5, postcss@^7.0.6:
   version "7.0.39"
   resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309"
   integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==
@@ -4997,6 +7191,11 @@ progress@^2.0.0:
   resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
   integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
 
+promise-inflight@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
+  integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
+
 prop-types@^15.7.2:
   version "15.7.2"
   resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
@@ -5025,7 +7224,7 @@ proxy-from-env@^1.0.0, proxy-from-env@^1.1.0:
   resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
   integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
 
-psl@^1.1.28:
+psl@^1.1.28, psl@^1.1.33:
   version "1.8.0"
   resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
   integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
@@ -5043,6 +7242,11 @@ punycode@^2.1.0, punycode@^2.1.1:
   resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
   integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
 
+q@^1.1.2:
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
+  integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=
+
 qs@~6.5.2:
   version "6.5.2"
   resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
@@ -5058,6 +7262,13 @@ quick-lru@^4.0.1:
   resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f"
   integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==
 
+randombytes@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
+  integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+  dependencies:
+    safe-buffer "^5.1.0"
+
 raw-body@^2.2.0:
   version "2.4.1"
   resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c"
@@ -5068,6 +7279,14 @@ raw-body@^2.2.0:
     iconv-lite "0.4.24"
     unpipe "1.0.0"
 
+raw-loader@^4.0.1, raw-loader@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.2.tgz#1aac6b7d1ad1501e66efdac1522c73e59a584eb6"
+  integrity sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==
+  dependencies:
+    loader-utils "^2.0.0"
+    schema-utils "^3.0.0"
+
 react-is@^16.8.1:
   version "16.13.1"
   resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
@@ -5109,7 +7328,7 @@ readable-stream@1.1.x:
     isarray "0.0.1"
     string_decoder "~0.10.x"
 
-readable-stream@^3.1.1:
+"readable-stream@2 || 3", readable-stream@^3.1.1:
   version "3.6.0"
   resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
   integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
@@ -5125,6 +7344,20 @@ readdirp@~3.6.0:
   dependencies:
     picomatch "^2.2.1"
 
+rechoir@^0.6.2:
+  version "0.6.2"
+  resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
+  integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=
+  dependencies:
+    resolve "^1.1.6"
+
+rechoir@^0.7.0:
+  version "0.7.1"
+  resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686"
+  integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==
+  dependencies:
+    resolve "^1.9.0"
+
 redent@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f"
@@ -5157,6 +7390,14 @@ regenerator-transform@^0.14.2:
   dependencies:
     "@babel/runtime" "^7.8.4"
 
+regex-not@^1.0.0, regex-not@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
+  integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
+  dependencies:
+    extend-shallow "^3.0.2"
+    safe-regex "^1.1.0"
+
 regexp.prototype.flags@^1.3.1:
   version "1.3.1"
   resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26"
@@ -5217,6 +7458,11 @@ remark@^13.0.0:
     remark-stringify "^9.0.0"
     unified "^9.1.0"
 
+repeat-element@^1.1.2:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9"
+  integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==
+
 repeat-string@^1.0.0, repeat-string@^1.6.1:
   version "1.6.1"
   resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
@@ -5280,6 +7526,18 @@ require-main-filename@^2.0.0:
   resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
   integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
 
+resolve-cwd@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
+  integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==
+  dependencies:
+    resolve-from "^5.0.0"
+
+resolve-from@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
+  integrity sha1-six699nWiBvItuZTM17rywoYh0g=
+
 resolve-from@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
@@ -5297,7 +7555,12 @@ resolve-global@^1.0.0:
   dependencies:
     global-dirs "^0.1.1"
 
-resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.20.0:
+resolve-url@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+  integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
+
+resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.9.0:
   version "1.20.0"
   resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975"
   integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==
@@ -5321,12 +7584,27 @@ restore-cursor@^3.1.0:
     onetime "^5.1.0"
     signal-exit "^3.0.2"
 
+ret@~0.1.10:
+  version "0.1.15"
+  resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+  integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
+
 reusify@^1.0.4:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
   integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
 
-rimraf@^3.0.2:
+rgb-regex@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1"
+  integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE=
+
+rgba-regex@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3"
+  integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=
+
+rimraf@^3.0.0, rimraf@^3.0.2:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
   integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
@@ -5340,7 +7618,7 @@ run-parallel@^1.1.9:
   dependencies:
     queue-microtask "^1.2.2"
 
-safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0:
+safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.2.0:
   version "5.2.1"
   resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
   integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
@@ -5350,11 +7628,57 @@ safe-buffer@~5.1.1:
   resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
   integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
 
-"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
+safe-regex@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
+  integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
+  dependencies:
+    ret "~0.1.10"
+
+"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
   version "2.1.2"
   resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
   integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
 
+sax@~1.2.4:
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+  integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+
+saxes@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d"
+  integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==
+  dependencies:
+    xmlchars "^2.2.0"
+
+schema-utils@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770"
+  integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==
+  dependencies:
+    ajv "^6.1.0"
+    ajv-errors "^1.0.0"
+    ajv-keywords "^3.1.0"
+
+schema-utils@^2.6.6, schema-utils@^2.7.0:
+  version "2.7.1"
+  resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7"
+  integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==
+  dependencies:
+    "@types/json-schema" "^7.0.5"
+    ajv "^6.12.4"
+    ajv-keywords "^3.5.2"
+
+schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281"
+  integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==
+  dependencies:
+    "@types/json-schema" "^7.0.8"
+    ajv "^6.12.5"
+    ajv-keywords "^3.5.2"
+
 "semver@2 || 3 || 4 || 5", semver@^5.6.0, semver@^5.7.0:
   version "5.7.1"
   resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
@@ -5370,18 +7694,42 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0:
   resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
   integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
 
-semver@^7.2.1, semver@^7.3.4:
+semver@^7.2.1, semver@^7.3.4, semver@^7.3.5:
   version "7.3.5"
   resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
   integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
   dependencies:
     lru-cache "^6.0.0"
 
+serialize-javascript@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa"
+  integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==
+  dependencies:
+    randombytes "^2.1.0"
+
+serialize-javascript@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8"
+  integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==
+  dependencies:
+    randombytes "^2.1.0"
+
 set-blocking@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
   integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
 
+set-value@^2.0.0, set-value@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
+  integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
+  dependencies:
+    extend-shallow "^2.0.1"
+    is-extendable "^0.1.1"
+    is-plain-object "^2.0.3"
+    split-string "^3.0.1"
+
 setprototypeof@1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
@@ -5406,6 +7754,15 @@ shebang-regex@^3.0.0:
   resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
   integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
 
+shelljs@^0.8.1:
+  version "0.8.4"
+  resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2"
+  integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==
+  dependencies:
+    glob "^7.0.0"
+    interpret "^1.0.0"
+    rechoir "^0.6.2"
+
 shepherd.js@^8.3.1:
   version "8.3.1"
   resolved "https://registry.yarnpkg.com/shepherd.js/-/shepherd.js-8.3.1.tgz#131eeefc5eb2bc44c9e23d0da139db46b2b55339"
@@ -5424,11 +7781,23 @@ side-channel@^1.0.4:
     get-intrinsic "^1.0.2"
     object-inspect "^1.9.0"
 
-signal-exit@^3.0.2:
+signal-exit@^3.0.2, signal-exit@^3.0.3:
   version "3.0.5"
   resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.5.tgz#9e3e8cc0c75a99472b44321033a7702e7738252f"
   integrity sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==
 
+simple-swizzle@^0.2.2:
+  version "0.2.2"
+  resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
+  integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=
+  dependencies:
+    is-arrayish "^0.3.1"
+
+slash@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
+  integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=
+
 slash@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
@@ -5453,6 +7822,36 @@ smoothscroll-polyfill@^0.4.4:
   resolved "https://registry.yarnpkg.com/smoothscroll-polyfill/-/smoothscroll-polyfill-0.4.4.tgz#3a259131dc6930e6ca80003e1cb03b603b69abf8"
   integrity sha512-TK5ZA9U5RqCwMpfoMq/l1mrH0JAR7y7KRvOBx0n2869aLxch+gT9GhN3yUfjiw+d/DiF1mKo14+hd62JyMmoBg==
 
+snapdragon-node@^2.0.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+  integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
+  dependencies:
+    define-property "^1.0.0"
+    isobject "^3.0.0"
+    snapdragon-util "^3.0.1"
+
+snapdragon-util@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+  integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
+  dependencies:
+    kind-of "^3.2.0"
+
+snapdragon@^0.8.1:
+  version "0.8.2"
+  resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
+  integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
+  dependencies:
+    base "^0.11.1"
+    debug "^2.2.0"
+    define-property "^0.2.5"
+    extend-shallow "^2.0.1"
+    map-cache "^0.2.2"
+    source-map "^0.5.6"
+    source-map-resolve "^0.5.0"
+    use "^3.1.0"
+
 socks-proxy-agent@5, socks-proxy-agent@^5.0.0:
   version "5.0.1"
   resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz#032fb583048a29ebffec2e6a73fca0761f48177e"
@@ -5475,7 +7874,23 @@ sortablejs@^1.13.0:
   resolved "https://registry.yarnpkg.com/sortablejs/-/sortablejs-1.14.0.tgz#6d2e17ccbdb25f464734df621d4f35d4ab35b3d8"
   integrity sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==
 
-source-map-support@^0.5.16, source-map-support@~0.5.20:
+source-list-map@^2.0.0, source-list-map@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
+  integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
+
+source-map-resolve@^0.5.0:
+  version "0.5.3"
+  resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
+  integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==
+  dependencies:
+    atob "^2.1.2"
+    decode-uri-component "^0.2.0"
+    resolve-url "^0.2.1"
+    source-map-url "^0.4.0"
+    urix "^0.1.0"
+
+source-map-support@^0.5.16, source-map-support@~0.5.12, source-map-support@~0.5.20:
   version "0.5.20"
   resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.20.tgz#12166089f8f5e5e8c56926b377633392dd2cb6c9"
   integrity sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==
@@ -5483,7 +7898,12 @@ source-map-support@^0.5.16, source-map-support@~0.5.20:
     buffer-from "^1.0.0"
     source-map "^0.6.0"
 
-source-map@^0.5.0:
+source-map-url@^0.4.0:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56"
+  integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==
+
+source-map@^0.5.0, source-map@^0.5.6:
   version "0.5.7"
   resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
   integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
@@ -5529,6 +7949,13 @@ specificity@^0.4.1:
   resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.4.1.tgz#aab5e645012db08ba182e151165738d00887b019"
   integrity sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==
 
+split-string@^3.0.1, split-string@^3.0.2:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+  integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
+  dependencies:
+    extend-shallow "^3.0.0"
+
 sprintf-js@~1.0.2:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
@@ -5549,6 +7976,26 @@ sshpk@^1.7.0:
     safer-buffer "^2.0.2"
     tweetnacl "~0.14.0"
 
+ssri@^8.0.1:
+  version "8.0.1"
+  resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af"
+  integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==
+  dependencies:
+    minipass "^3.1.1"
+
+stable@^0.1.8:
+  version "0.1.8"
+  resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf"
+  integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==
+
+static-extend@^0.1.1:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
+  integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
+  dependencies:
+    define-property "^0.2.5"
+    object-copy "^0.1.0"
+
 "statuses@>= 1.5.0 < 2":
   version "1.5.0"
   resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
@@ -5653,6 +8100,11 @@ strip-bom@^3.0.0:
   resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
   integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
 
+strip-final-newline@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
+  integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
+
 strip-indent@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001"
@@ -5670,11 +8122,28 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
   resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
   integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
 
+style-loader@^1.2.1:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.3.0.tgz#828b4a3b3b7e7aa5847ce7bae9e874512114249e"
+  integrity sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==
+  dependencies:
+    loader-utils "^2.0.0"
+    schema-utils "^2.7.0"
+
 style-search@^0.1.0:
   version "0.1.0"
   resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902"
   integrity sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=
 
+stylehacks@^4.0.0:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5"
+  integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==
+  dependencies:
+    browserslist "^4.0.0"
+    postcss "^7.0.0"
+    postcss-selector-parser "^3.0.0"
+
 stylelint-checkstyle-formatter@^0.1.1:
   version "0.1.2"
   resolved "https://registry.yarnpkg.com/stylelint-checkstyle-formatter/-/stylelint-checkstyle-formatter-0.1.2.tgz#a127d97d352ec0e98229945db9768a65e1a89ca5"
@@ -5778,18 +8247,49 @@ supports-color@^5.3.0:
   dependencies:
     has-flag "^3.0.0"
 
-supports-color@^7.1.0:
+supports-color@^7.0.0, supports-color@^7.1.0:
   version "7.2.0"
   resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
   integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
   dependencies:
     has-flag "^4.0.0"
 
+supports-color@^8.0.0:
+  version "8.1.1"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
+  integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
+  dependencies:
+    has-flag "^4.0.0"
+
 svg-tags@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764"
   integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=
 
+svgo@^1.0.0:
+  version "1.3.2"
+  resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167"
+  integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==
+  dependencies:
+    chalk "^2.4.1"
+    coa "^2.0.2"
+    css-select "^2.0.0"
+    css-select-base-adapter "^0.1.1"
+    css-tree "1.0.0-alpha.37"
+    csso "^4.0.2"
+    js-yaml "^3.13.1"
+    mkdirp "~0.5.1"
+    object.values "^1.1.0"
+    sax "~1.2.4"
+    stable "^0.1.8"
+    unquote "~1.1.1"
+    util.promisify "~1.0.0"
+
+symbol-tree@^3.2.4:
+  version "3.2.4"
+  resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
+  integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
+
 tabbable@^5.2.0:
   version "5.2.1"
   resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-5.2.1.tgz#e3fda7367ddbb172dcda9f871c0fdb36d1c4cd9c"
@@ -5807,6 +8307,23 @@ table@^6.0.9, table@^6.6.0:
     string-width "^4.2.3"
     strip-ansi "^6.0.1"
 
+tapable@^2.1.1, tapable@^2.2.0:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
+  integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
+
+tar@^6.0.2:
+  version "6.1.11"
+  resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621"
+  integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==
+  dependencies:
+    chownr "^2.0.0"
+    fs-minipass "^2.0.0"
+    minipass "^3.0.0"
+    minizlib "^2.1.1"
+    mkdirp "^1.0.3"
+    yallist "^4.0.0"
+
 tcp-port-used@^1.0.1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/tcp-port-used/-/tcp-port-used-1.0.2.tgz#9652b7436eb1f4cfae111c79b558a25769f6faea"
@@ -5815,7 +8332,42 @@ tcp-port-used@^1.0.1:
     debug "4.3.1"
     is2 "^2.0.6"
 
-terser@^5.3.4:
+terser-webpack-plugin@^3.0.2:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-3.1.0.tgz#91e6d39571460ed240c0cf69d295bcf30ebf98cb"
+  integrity sha512-cjdZte66fYkZ65rQ2oJfrdCAkkhJA7YLYk5eGOcGCSGlq0ieZupRdjedSQXYknMPo2IveQL+tPdrxUkERENCFA==
+  dependencies:
+    cacache "^15.0.5"
+    find-cache-dir "^3.3.1"
+    jest-worker "^26.2.1"
+    p-limit "^3.0.2"
+    schema-utils "^2.6.6"
+    serialize-javascript "^4.0.0"
+    source-map "^0.6.1"
+    terser "^4.8.0"
+    webpack-sources "^1.4.3"
+
+terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.2.0:
+  version "5.2.5"
+  resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.2.5.tgz#ce65b9880a0c36872555c4874f45bbdb02ee32c9"
+  integrity sha512-3luOVHku5l0QBeYS8r4CdHYWEGMmIj3H1U64jgkdZzECcSOJAyJ9TjuqcQZvw1Y+4AOBN9SeYJPJmFn2cM4/2g==
+  dependencies:
+    jest-worker "^27.0.6"
+    schema-utils "^3.1.1"
+    serialize-javascript "^6.0.0"
+    source-map "^0.6.1"
+    terser "^5.7.2"
+
+terser@^4.8.0:
+  version "4.8.0"
+  resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17"
+  integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==
+  dependencies:
+    commander "^2.20.0"
+    source-map "~0.6.1"
+    source-map-support "~0.5.12"
+
+terser@^5.3.4, terser@^5.7.2:
   version "5.9.0"
   resolved "https://registry.yarnpkg.com/terser/-/terser-5.9.0.tgz#47d6e629a522963240f2b55fcaa3c99083d2c351"
   integrity sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==
@@ -5829,11 +8381,39 @@ text-table@^0.2.0:
   resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
   integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
 
+through2@^3.0.1:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.2.tgz#99f88931cfc761ec7678b41d5d7336b5b6a07bf4"
+  integrity sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==
+  dependencies:
+    inherits "^2.0.4"
+    readable-stream "2 || 3"
+
+timsort@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4"
+  integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=
+
 to-fast-properties@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
   integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
 
+to-object-path@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
+  integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
+  dependencies:
+    kind-of "^3.0.2"
+
+to-regex-range@^2.1.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
+  integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
+  dependencies:
+    is-number "^3.0.0"
+    repeat-string "^1.6.1"
+
 to-regex-range@^5.0.1:
   version "5.0.1"
   resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
@@ -5841,6 +8421,16 @@ to-regex-range@^5.0.1:
   dependencies:
     is-number "^7.0.0"
 
+to-regex@^3.0.1, to-regex@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
+  integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
+  dependencies:
+    define-property "^2.0.2"
+    extend-shallow "^3.0.2"
+    regex-not "^1.0.2"
+    safe-regex "^1.1.0"
+
 toidentifier@1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
@@ -5854,6 +8444,22 @@ tough-cookie@^2.3.3, tough-cookie@~2.5.0:
     psl "^1.1.28"
     punycode "^2.1.1"
 
+tough-cookie@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4"
+  integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==
+  dependencies:
+    psl "^1.1.33"
+    punycode "^2.1.1"
+    universalify "^0.1.2"
+
+tr46@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9"
+  integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==
+  dependencies:
+    punycode "^2.1.1"
+
 trim-newlines@^3.0.0:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144"
@@ -5987,11 +8593,40 @@ unified@^9.1.0:
     trough "^1.0.0"
     vfile "^4.0.0"
 
+union-value@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
+  integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
+  dependencies:
+    arr-union "^3.1.0"
+    get-value "^2.0.6"
+    is-extendable "^0.1.1"
+    set-value "^2.0.1"
+
 uniq@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
   integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=
 
+uniqs@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02"
+  integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI=
+
+unique-filename@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230"
+  integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==
+  dependencies:
+    unique-slug "^2.0.0"
+
+unique-slug@^2.0.0:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c"
+  integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==
+  dependencies:
+    imurmurhash "^0.1.4"
+
 unique-string@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d"
@@ -6018,7 +8653,7 @@ unist-util-stringify-position@^2.0.0:
   dependencies:
     "@types/unist" "^2.0.2"
 
-universalify@^0.1.0:
+universalify@^0.1.0, universalify@^0.1.2:
   version "0.1.2"
   resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
   integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
@@ -6033,6 +8668,19 @@ unpipe@1.0.0:
   resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
   integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
 
+unquote@~1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544"
+  integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=
+
+unset-value@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
+  integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
+  dependencies:
+    has-value "^0.3.1"
+    isobject "^3.0.0"
+
 uri-js@^4.2.2:
   version "4.4.1"
   resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
@@ -6040,11 +8688,31 @@ uri-js@^4.2.2:
   dependencies:
     punycode "^2.1.0"
 
+urix@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
+  integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
+
+use@^3.1.0:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
+  integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
+
 util-deprecate@^1.0.1, util-deprecate@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
   integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
 
+util.promisify@~1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee"
+  integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==
+  dependencies:
+    define-properties "^1.1.3"
+    es-abstract "^1.17.2"
+    has-symbols "^1.0.1"
+    object.getownpropertydescriptors "^2.1.0"
+
 uuid@^3.3.2:
   version "3.4.0"
   resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
@@ -6063,6 +8731,11 @@ validate-npm-package-license@^3.0.1:
     spdx-correct "^3.0.0"
     spdx-expression-parse "^3.0.0"
 
+vendors@^1.0.0:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e"
+  integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==
+
 verror@1.10.0:
   version "1.10.0"
   resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
@@ -6100,6 +8773,28 @@ vscode-uri@^3.0.2:
   resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.2.tgz#ecfd1d066cb8ef4c3a208decdbab9a8c23d055d0"
   integrity sha512-jkjy6pjU1fxUvI51P+gCsxg1u2n8LSt0W6KrCNQceaziKzff74GoWmjVG46KieVzybO1sttPQmYfrwSHey7GUA==
 
+w3c-hr-time@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd"
+  integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==
+  dependencies:
+    browser-process-hrtime "^1.0.0"
+
+w3c-xmlserializer@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz#06cdc3eefb7e4d0b20a560a5a3aeb0d2d9a65923"
+  integrity sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==
+  dependencies:
+    xml-name-validator "^4.0.0"
+
+watchpack@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.2.0.tgz#47d78f5415fe550ecd740f99fe2882323a58b1ce"
+  integrity sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==
+  dependencies:
+    glob-to-regexp "^0.4.1"
+    graceful-fs "^4.1.2"
+
 wcwidth@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
@@ -6107,6 +8802,108 @@ wcwidth@^1.0.1:
   dependencies:
     defaults "^1.0.3"
 
+webidl-conversions@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a"
+  integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==
+
+webpack-cli@^4.4.0:
+  version "4.9.1"
+  resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.9.1.tgz#b64be825e2d1b130f285c314caa3b1ba9a4632b3"
+  integrity sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==
+  dependencies:
+    "@discoveryjs/json-ext" "^0.5.0"
+    "@webpack-cli/configtest" "^1.1.0"
+    "@webpack-cli/info" "^1.4.0"
+    "@webpack-cli/serve" "^1.6.0"
+    colorette "^2.0.14"
+    commander "^7.0.0"
+    execa "^5.0.0"
+    fastest-levenshtein "^1.0.12"
+    import-local "^3.0.2"
+    interpret "^2.2.0"
+    rechoir "^0.7.0"
+    webpack-merge "^5.7.3"
+
+webpack-merge@^5.7.3:
+  version "5.8.0"
+  resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61"
+  integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==
+  dependencies:
+    clone-deep "^4.0.1"
+    wildcard "^2.0.0"
+
+webpack-sources@^1.4.3:
+  version "1.4.3"
+  resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933"
+  integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==
+  dependencies:
+    source-list-map "^2.0.0"
+    source-map "~0.6.1"
+
+webpack-sources@^2.0.1:
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.3.1.tgz#570de0af163949fe272233c2cefe1b56f74511fd"
+  integrity sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==
+  dependencies:
+    source-list-map "^2.0.1"
+    source-map "^0.6.1"
+
+webpack-sources@^3.2.0:
+  version "3.2.1"
+  resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.1.tgz#251a7d9720d75ada1469ca07dbb62f3641a05b6d"
+  integrity sha512-t6BMVLQ0AkjBOoRTZgqrWm7xbXMBzD+XDq2EZ96+vMfn3qKgsvdXZhbPZ4ElUOpdv4u+iiGe+w3+J75iy/bYGA==
+
+webpack@^5.51.1:
+  version "5.63.0"
+  resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.63.0.tgz#4b074115800e0526d85112985e46c64b95e04aaf"
+  integrity sha512-HYrw6bkj/MDmphAXvqLEvn2fVoDZsYu6O638WjK6lSNgIpjb5jl/KtOrqJyU9EC/ZV9mLUmZW5h4mASB+CVA4A==
+  dependencies:
+    "@types/eslint-scope" "^3.7.0"
+    "@types/estree" "^0.0.50"
+    "@webassemblyjs/ast" "1.11.1"
+    "@webassemblyjs/wasm-edit" "1.11.1"
+    "@webassemblyjs/wasm-parser" "1.11.1"
+    acorn "^8.4.1"
+    acorn-import-assertions "^1.7.6"
+    browserslist "^4.14.5"
+    chrome-trace-event "^1.0.2"
+    enhanced-resolve "^5.8.3"
+    es-module-lexer "^0.9.0"
+    eslint-scope "5.1.1"
+    events "^3.2.0"
+    glob-to-regexp "^0.4.1"
+    graceful-fs "^4.2.4"
+    json-parse-better-errors "^1.0.2"
+    loader-runner "^4.2.0"
+    mime-types "^2.1.27"
+    neo-async "^2.6.2"
+    schema-utils "^3.1.0"
+    tapable "^2.1.1"
+    terser-webpack-plugin "^5.1.3"
+    watchpack "^2.2.0"
+    webpack-sources "^3.2.0"
+
+whatwg-encoding@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53"
+  integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==
+  dependencies:
+    iconv-lite "0.6.3"
+
+whatwg-mimetype@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7"
+  integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==
+
+whatwg-url@^10.0.0:
+  version "10.0.0"
+  resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-10.0.0.tgz#37264f720b575b4a311bd4094ed8c760caaa05da"
+  integrity sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==
+  dependencies:
+    tr46 "^3.0.0"
+    webidl-conversions "^7.0.0"
+
 which-boxed-primitive@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
@@ -6144,6 +8941,11 @@ wide-align@1.1.3:
   dependencies:
     string-width "^1.0.2 || 2"
 
+wildcard@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec"
+  integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==
+
 word-wrap@^1.2.3, word-wrap@~1.2.3:
   version "1.2.3"
   resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
@@ -6173,11 +8975,26 @@ write-file-atomic@^3.0.0, write-file-atomic@^3.0.3:
     signal-exit "^3.0.2"
     typedarray-to-buffer "^3.1.5"
 
+ws@^8.2.3:
+  version "8.2.3"
+  resolved "https://registry.yarnpkg.com/ws/-/ws-8.2.3.tgz#63a56456db1b04367d0b721a0b80cae6d8becbba"
+  integrity sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==
+
 xdg-basedir@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13"
   integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==
 
+xml-name-validator@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835"
+  integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==
+
+xmlchars@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
+  integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
+
 xregexp@2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943"
-- 
GitLab


From 56fa4e202ceb7d531e33be2f1514956559870d4f Mon Sep 17 00:00:00 2001
From: xjm <xjm@65776.no-reply.drupal.org>
Date: Fri, 12 Nov 2021 13:20:31 -0600
Subject: [PATCH 27/69] Drupal 9.3.0-beta1

---
 composer.lock                                        | 12 ++++--------
 composer/Metapackage/CoreRecommended/composer.json   |  2 +-
 .../Metapackage/PinnedDevDependencies/composer.json  |  2 +-
 composer/Template/LegacyProject/composer.json        |  2 +-
 composer/Template/RecommendedProject/composer.json   |  2 +-
 core/lib/Drupal.php                                  |  2 +-
 6 files changed, 9 insertions(+), 13 deletions(-)

diff --git a/composer.lock b/composer.lock
index 74c5c365ef38..5e9208be5742 100644
--- a/composer.lock
+++ b/composer.lock
@@ -531,7 +531,7 @@
         },
         {
             "name": "drupal/core",
-            "version": "9.3.x-dev",
+            "version": "9.3.0-beta1",
             "dist": {
                 "type": "path",
                 "url": "core",
@@ -788,7 +788,7 @@
         },
         {
             "name": "drupal/core-project-message",
-            "version": "9.3.x-dev",
+            "version": "9.3.0-beta1",
             "dist": {
                 "type": "path",
                 "url": "composer/Plugin/ProjectMessage",
@@ -821,7 +821,7 @@
         },
         {
             "name": "drupal/core-vendor-hardening",
-            "version": "9.3.x-dev",
+            "version": "9.3.0-beta1",
             "dist": {
                 "type": "path",
                 "url": "composer/Plugin/VendorHardening",
@@ -7901,11 +7901,7 @@
     ],
     "aliases": [],
     "minimum-stability": "dev",
-    "stability-flags": {
-        "drupal/core": 20,
-        "drupal/core-project-message": 20,
-        "drupal/core-vendor-hardening": 20
-    },
+    "stability-flags": [],
     "prefer-stable": true,
     "prefer-lowest": false,
     "platform": [],
diff --git a/composer/Metapackage/CoreRecommended/composer.json b/composer/Metapackage/CoreRecommended/composer.json
index 0dc75a816089..b557a3707392 100644
--- a/composer/Metapackage/CoreRecommended/composer.json
+++ b/composer/Metapackage/CoreRecommended/composer.json
@@ -7,7 +7,7 @@
         "webflo/drupal-core-strict": "*"
     },
     "require": {
-        "drupal/core": "9.3.x-dev",
+        "drupal/core": "9.3.0-beta1",
         "asm89/stack-cors": "1.3.0",
         "composer/semver": "3.2.6",
         "doctrine/annotations": "1.13.2",
diff --git a/composer/Metapackage/PinnedDevDependencies/composer.json b/composer/Metapackage/PinnedDevDependencies/composer.json
index 26eb7a5f52c7..e4a0271271ba 100644
--- a/composer/Metapackage/PinnedDevDependencies/composer.json
+++ b/composer/Metapackage/PinnedDevDependencies/composer.json
@@ -7,7 +7,7 @@
         "webflo/drupal-core-require-dev": "*"
     },
     "require": {
-        "drupal/core": "9.3.x-dev",
+        "drupal/core": "9.3.0-beta1",
         "behat/mink": "v1.9.0",
         "behat/mink-selenium2-driver": "v1.5.0",
         "composer/ca-bundle": "1.3.1",
diff --git a/composer/Template/LegacyProject/composer.json b/composer/Template/LegacyProject/composer.json
index 1b1a2af337ab..afc7c7f0dcf1 100644
--- a/composer/Template/LegacyProject/composer.json
+++ b/composer/Template/LegacyProject/composer.json
@@ -27,7 +27,7 @@
     "conflict": {
         "drupal/drupal": "*"
     },
-    "minimum-stability": "dev",
+    "minimum-stability": "beta",
     "prefer-stable": true,
     "config": {
         "sort-packages": true
diff --git a/composer/Template/RecommendedProject/composer.json b/composer/Template/RecommendedProject/composer.json
index 99e9f55f2394..8b2984364d5f 100644
--- a/composer/Template/RecommendedProject/composer.json
+++ b/composer/Template/RecommendedProject/composer.json
@@ -26,7 +26,7 @@
     "conflict": {
         "drupal/drupal": "*"
     },
-    "minimum-stability": "dev",
+    "minimum-stability": "beta",
     "prefer-stable": true,
     "config": {
         "sort-packages": true
diff --git a/core/lib/Drupal.php b/core/lib/Drupal.php
index 4ffa6c6f0b0b..470e5e33840e 100644
--- a/core/lib/Drupal.php
+++ b/core/lib/Drupal.php
@@ -75,7 +75,7 @@ class Drupal {
   /**
    * The current system version.
    */
-  const VERSION = '9.3.0-dev';
+  const VERSION = '9.3.0-beta1';
 
   /**
    * Core API compatibility.
-- 
GitLab


From 460665f72c96781bf686de6ef8d237d026dd96c1 Mon Sep 17 00:00:00 2001
From: xjm <xjm@65776.no-reply.drupal.org>
Date: Fri, 12 Nov 2021 13:20:32 -0600
Subject: [PATCH 28/69] Back to dev.

---
 composer.lock                                        | 12 ++++++++----
 composer/Metapackage/CoreRecommended/composer.json   |  2 +-
 .../Metapackage/PinnedDevDependencies/composer.json  |  2 +-
 composer/Template/LegacyProject/composer.json        |  2 +-
 composer/Template/RecommendedProject/composer.json   |  2 +-
 core/lib/Drupal.php                                  |  2 +-
 6 files changed, 13 insertions(+), 9 deletions(-)

diff --git a/composer.lock b/composer.lock
index 5e9208be5742..74c5c365ef38 100644
--- a/composer.lock
+++ b/composer.lock
@@ -531,7 +531,7 @@
         },
         {
             "name": "drupal/core",
-            "version": "9.3.0-beta1",
+            "version": "9.3.x-dev",
             "dist": {
                 "type": "path",
                 "url": "core",
@@ -788,7 +788,7 @@
         },
         {
             "name": "drupal/core-project-message",
-            "version": "9.3.0-beta1",
+            "version": "9.3.x-dev",
             "dist": {
                 "type": "path",
                 "url": "composer/Plugin/ProjectMessage",
@@ -821,7 +821,7 @@
         },
         {
             "name": "drupal/core-vendor-hardening",
-            "version": "9.3.0-beta1",
+            "version": "9.3.x-dev",
             "dist": {
                 "type": "path",
                 "url": "composer/Plugin/VendorHardening",
@@ -7901,7 +7901,11 @@
     ],
     "aliases": [],
     "minimum-stability": "dev",
-    "stability-flags": [],
+    "stability-flags": {
+        "drupal/core": 20,
+        "drupal/core-project-message": 20,
+        "drupal/core-vendor-hardening": 20
+    },
     "prefer-stable": true,
     "prefer-lowest": false,
     "platform": [],
diff --git a/composer/Metapackage/CoreRecommended/composer.json b/composer/Metapackage/CoreRecommended/composer.json
index b557a3707392..0dc75a816089 100644
--- a/composer/Metapackage/CoreRecommended/composer.json
+++ b/composer/Metapackage/CoreRecommended/composer.json
@@ -7,7 +7,7 @@
         "webflo/drupal-core-strict": "*"
     },
     "require": {
-        "drupal/core": "9.3.0-beta1",
+        "drupal/core": "9.3.x-dev",
         "asm89/stack-cors": "1.3.0",
         "composer/semver": "3.2.6",
         "doctrine/annotations": "1.13.2",
diff --git a/composer/Metapackage/PinnedDevDependencies/composer.json b/composer/Metapackage/PinnedDevDependencies/composer.json
index e4a0271271ba..26eb7a5f52c7 100644
--- a/composer/Metapackage/PinnedDevDependencies/composer.json
+++ b/composer/Metapackage/PinnedDevDependencies/composer.json
@@ -7,7 +7,7 @@
         "webflo/drupal-core-require-dev": "*"
     },
     "require": {
-        "drupal/core": "9.3.0-beta1",
+        "drupal/core": "9.3.x-dev",
         "behat/mink": "v1.9.0",
         "behat/mink-selenium2-driver": "v1.5.0",
         "composer/ca-bundle": "1.3.1",
diff --git a/composer/Template/LegacyProject/composer.json b/composer/Template/LegacyProject/composer.json
index afc7c7f0dcf1..1b1a2af337ab 100644
--- a/composer/Template/LegacyProject/composer.json
+++ b/composer/Template/LegacyProject/composer.json
@@ -27,7 +27,7 @@
     "conflict": {
         "drupal/drupal": "*"
     },
-    "minimum-stability": "beta",
+    "minimum-stability": "dev",
     "prefer-stable": true,
     "config": {
         "sort-packages": true
diff --git a/composer/Template/RecommendedProject/composer.json b/composer/Template/RecommendedProject/composer.json
index 8b2984364d5f..99e9f55f2394 100644
--- a/composer/Template/RecommendedProject/composer.json
+++ b/composer/Template/RecommendedProject/composer.json
@@ -26,7 +26,7 @@
     "conflict": {
         "drupal/drupal": "*"
     },
-    "minimum-stability": "beta",
+    "minimum-stability": "dev",
     "prefer-stable": true,
     "config": {
         "sort-packages": true
diff --git a/core/lib/Drupal.php b/core/lib/Drupal.php
index 470e5e33840e..4ffa6c6f0b0b 100644
--- a/core/lib/Drupal.php
+++ b/core/lib/Drupal.php
@@ -75,7 +75,7 @@ class Drupal {
   /**
    * The current system version.
    */
-  const VERSION = '9.3.0-beta1';
+  const VERSION = '9.3.0-dev';
 
   /**
    * Core API compatibility.
-- 
GitLab


From f436f7c014bac61e0779a72d1dc84a2b6a5902bd Mon Sep 17 00:00:00 2001
From: Lee Rowlands <lee.rowlands@previousnext.com.au>
Date: Mon, 15 Nov 2021 12:19:43 +1000
Subject: [PATCH 29/69] Issue #3222251 by bbrala, longwave: [November 8, 2021]
 Replace all isset constructs with the null coalescing operator

(cherry picked from commit 330473e759cbe9fd0e9a404b48ad18aebd0293a7)
---
 composer/Generator/Util/DrupalCoreComposer.php |  2 +-
 composer/Plugin/VendorHardening/Config.php     |  4 ++--
 core/includes/batch.inc                        |  2 +-
 core/includes/bootstrap.inc                    |  4 ++--
 core/includes/common.inc                       |  4 ++--
 core/includes/errors.inc                       |  2 +-
 core/includes/form.inc                         | 14 +++++++-------
 core/includes/install.core.inc                 |  2 +-
 core/includes/install.inc                      |  4 ++--
 core/includes/theme.inc                        | 12 ++++++------
 .../lib/Drupal/Component/Annotation/Plugin.php |  2 +-
 .../DependencyInjection/Container.php          | 10 +++++-----
 .../DependencyInjection/PhpArrayContainer.php  |  8 ++++----
 .../ContainerAwareEventDispatcher.php          |  4 ++--
 .../Drupal/Component/FileCache/FileCache.php   |  2 +-
 .../Component/Gettext/PoStreamReader.php       |  2 +-
 .../Plugin/ContextAwarePluginBase.php          |  2 +-
 .../Transliteration/PhpTransliteration.php     |  2 +-
 .../lib/Drupal/Component/Utility/UserAgent.php |  4 ++--
 .../Ajax/AjaxResponseAttachmentsProcessor.php  |  4 ++--
 .../lib/Drupal/Core/Annotation/Translation.php |  2 +-
 .../Core/Asset/LibraryDiscoveryParser.php      |  2 +-
 .../Authentication/AuthenticationCollector.php |  2 +-
 core/lib/Drupal/Core/Cache/ApcuBackend.php     |  2 +-
 .../Core/Cache/ChainedFastBackendFactory.php   |  2 +-
 core/lib/Drupal/Core/Cache/MemoryBackend.php   |  2 +-
 .../Drupal/Core/Cache/MemoryCounterBackend.php |  4 ++--
 core/lib/Drupal/Core/Cache/PhpBackend.php      |  2 +-
 core/lib/Drupal/Core/Command/DbDumpCommand.php |  2 +-
 .../lib/Drupal/Core/Command/InstallCommand.php |  4 ++--
 core/lib/Drupal/Core/Config/CachedStorage.php  |  2 +-
 core/lib/Drupal/Core/Config/Config.php         |  4 ++--
 core/lib/Drupal/Core/Config/ConfigBase.php     |  2 +-
 .../Core/Config/ConfigCollectionInfo.php       |  2 +-
 .../Core/Config/Entity/ConfigEntityBase.php    |  8 ++++----
 .../Core/Config/Entity/ConfigEntityStorage.php |  2 +-
 .../Drupal/Core/Config/Entity/Query/Query.php  |  4 ++--
 .../Drupal/Core/Config/Schema/ArrayElement.php |  4 ++--
 core/lib/Drupal/Core/Config/Schema/Mapping.php |  4 ++--
 .../lib/Drupal/Core/Config/Schema/Sequence.php |  2 +-
 .../Config/Schema/SequenceDataDefinition.php   |  2 +-
 core/lib/Drupal/Core/Cron.php                  |  2 +-
 core/lib/Drupal/Core/Database/Connection.php   |  2 +-
 .../Core/Database/Driver/mysql/Schema.php      |  2 +-
 .../Core/Database/Driver/pgsql/Connection.php  |  2 +-
 .../Core/Database/Driver/sqlite/Connection.php |  2 +-
 .../Drupal/Core/Database/Query/Condition.php   |  2 +-
 core/lib/Drupal/Core/Database/Query/Merge.php  |  2 +-
 core/lib/Drupal/Core/Database/Query/Select.php |  4 ++--
 .../Drupal/Core/Database/StatementPrefetch.php |  6 +++---
 .../Drupal/Core/Datetime/Element/Datetime.php  |  2 +-
 .../Compiler/MimeTypePass.php                  |  2 +-
 .../Compiler/RegisterEventSubscribersPass.php  |  4 ++--
 .../Compiler/StackedKernelPass.php             |  2 +-
 .../Compiler/StackedSessionHandlerPass.php     |  2 +-
 .../Compiler/TaggedHandlersPass.php            | 16 ++++++++--------
 .../DependencyInjection/YamlFileLoader.php     |  4 ++--
 core/lib/Drupal/Core/DrupalKernel.php          |  4 ++--
 .../Drupal/Core/Entity/ContentEntityBase.php   |  2 +-
 .../Core/Entity/ContentEntityStorageBase.php   |  2 +-
 .../Drupal/Core/Entity/ContentEntityType.php   |  2 +-
 .../Entity/Controller/EntityController.php     |  2 +-
 .../Core/Entity/Element/EntityAutocomplete.php |  6 +++---
 .../Core/Entity/Entity/EntityFormDisplay.php   |  2 +-
 core/lib/Drupal/Core/Entity/EntityBase.php     |  4 ++--
 .../Drupal/Core/Entity/EntityDisplayBase.php   |  6 +++---
 .../Drupal/Core/Entity/EntityFieldManager.php  |  2 +-
 .../Drupal/Core/Entity/EntityStorageBase.php   |  2 +-
 core/lib/Drupal/Core/Entity/EntityType.php     |  8 ++++----
 .../Core/Entity/EntityTypeBundleInfo.php       |  2 +-
 .../Drupal/Core/Entity/EntityTypeManager.php   |  2 +-
 .../Drupal/Core/Entity/EntityViewBuilder.php   |  2 +-
 .../lib/Drupal/Core/Entity/Query/QueryBase.php |  4 ++--
 .../lib/Drupal/Core/Entity/Query/Sql/Query.php |  2 +-
 .../Entity/Sql/SqlContentEntityStorage.php     |  2 +-
 .../Entity/TypedData/EntityDataDefinition.php  |  9 +++------
 .../EventSubscriber/ConfigImportSubscriber.php |  2 +-
 .../Core/Extension/InfoParserDynamic.php       |  2 +-
 .../Core/Extension/ModuleExtensionList.php     |  2 +-
 .../Drupal/Core/Extension/ModuleHandler.php    |  4 ++--
 .../Drupal/Core/Extension/ModuleInstaller.php  |  4 ++--
 .../Drupal/Core/Field/BaseFieldDefinition.php  | 18 +++++++++---------
 core/lib/Drupal/Core/Field/FieldConfigBase.php |  2 +-
 core/lib/Drupal/Core/Field/FieldDefinition.php |  8 ++++----
 .../EntityReferenceEntityFormatter.php         |  2 +-
 .../Field/FieldWidget/EmailDefaultWidget.php   |  2 +-
 .../EntityReferenceAutocompleteWidget.php      |  4 ++--
 .../Plugin/Field/FieldWidget/NumberWidget.php  |  2 +-
 .../FieldWidget/StringTextfieldWidget.php      |  2 +-
 .../Plugin/Field/FieldWidget/UriWidget.php     |  2 +-
 .../Drupal/Core/Field/PluginSettingsBase.php   |  6 +++---
 core/lib/Drupal/Core/Field/WidgetBase.php      |  8 ++++----
 .../Drupal/Core/Field/WidgetPluginManager.php  |  2 +-
 core/lib/Drupal/Core/Form/FormBuilder.php      |  2 +-
 core/lib/Drupal/Core/Http/LinkRelationType.php |  6 +++---
 .../Core/Installer/Form/SelectProfileForm.php  |  2 +-
 .../Drupal/Core/KeyValueStore/StorageBase.php  |  2 +-
 .../Drupal/Core/Language/LanguageManager.php   |  2 +-
 .../Drupal/Core/Layout/LayoutDefinition.php    |  4 ++--
 .../Drupal/Core/Layout/LayoutPluginManager.php |  4 ++--
 .../Drupal/Core/Menu/LocalActionDefault.php    |  2 +-
 core/lib/Drupal/Core/Menu/LocalTaskDefault.php |  2 +-
 core/lib/Drupal/Core/Menu/MenuLinkBase.php     |  4 ++--
 core/lib/Drupal/Core/Menu/MenuTreeStorage.php  |  4 ++--
 core/lib/Drupal/Core/Pager/PagerManager.php    |  2 +-
 .../Core/PhpStorage/PhpStorageFactory.php      |  2 +-
 .../Plugin/CategorizingPluginManagerTrait.php  |  4 ++--
 .../Core/Plugin/Context/ContextDefinition.php  |  2 +-
 .../Core/Plugin/Context/ContextHandler.php     |  2 +-
 .../Core/Plugin/ContextAwarePluginTrait.php    |  2 +-
 .../Plugin/DefaultLazyPluginCollection.php     |  2 +-
 .../Drupal/Core/Render/Element/Checkbox.php    |  2 +-
 .../Drupal/Core/Render/Element/Checkboxes.php  |  2 +-
 .../Drupal/Core/Render/Element/FormElement.php |  2 +-
 .../lib/Drupal/Core/Render/Element/HtmlTag.php |  6 +++---
 core/lib/Drupal/Core/Render/Element/Number.php |  2 +-
 core/lib/Drupal/Core/Render/Element/Radios.php |  6 +++---
 .../Drupal/Core/Render/Element/Tableselect.php |  4 ++--
 .../Drupal/Core/Render/ElementInfoManager.php  |  4 ++--
 .../HtmlResponseAttachmentsProcessor.php       |  2 +-
 .../Core/Render/MainContent/DialogRenderer.php |  2 +-
 .../Core/Render/MainContent/HtmlRenderer.php   |  4 ++--
 .../Core/Render/MainContent/ModalRenderer.php  |  2 +-
 .../Render/MainContent/OffCanvasRenderer.php   |  2 +-
 core/lib/Drupal/Core/Render/RenderCache.php    |  4 ++--
 core/lib/Drupal/Core/Render/Renderer.php       | 10 +++++-----
 core/lib/Drupal/Core/Site/Settings.php         |  2 +-
 core/lib/Drupal/Core/State/State.php           |  2 +-
 .../StringTranslation/TranslatableMarkup.php   |  2 +-
 .../Core/Test/FunctionalTestSetupTrait.php     |  6 +++---
 core/lib/Drupal/Core/Test/TestSetupTrait.php   |  2 +-
 core/lib/Drupal/Core/Theme/Registry.php        |  2 +-
 .../Drupal/Core/Theme/ThemeInitialization.php  |  4 ++--
 .../Core/TypedData/ComputedItemListTrait.php   |  2 +-
 .../Drupal/Core/TypedData/DataDefinition.php   | 12 ++++++------
 .../TypedData/Plugin/DataType/ItemList.php     |  4 ++--
 .../Core/TypedData/Plugin/DataType/Map.php     |  2 +-
 .../Core/Validation/DrupalTranslator.php       |  2 +-
 core/modules/big_pipe/src/Render/BigPipe.php   |  4 ++--
 core/modules/block/src/BlockForm.php           |  2 +-
 core/modules/book/src/BookManager.php          |  8 ++++----
 core/modules/ckeditor/ckeditor.admin.inc       |  2 +-
 core/modules/comment/src/CommentManager.php    |  2 +-
 .../FieldFormatter/CommentDefaultFormatter.php |  2 +-
 .../src/FormElement/ListElement.php            |  2 +-
 .../src/FormElement/PluralVariants.php         |  4 ++--
 .../tests/src/Unit/ConfigNamesMapperTest.php   |  2 +-
 core/modules/contact/contact.module            |  2 +-
 .../Form/ContentModerationConfigureForm.php    |  2 +-
 .../Plugin/WorkflowType/ContentModeration.php  |  2 +-
 .../src/FieldTranslationSynchronizer.php       |  4 ++--
 .../source/d7/EntityTranslationSettings.php    | 16 ++++++++--------
 .../contextual/src/Element/ContextualLinks.php |  2 +-
 .../Field/FieldType/DateTimeFieldItemList.php  |  2 +-
 .../Field/FieldType/DateRangeFieldItemList.php |  2 +-
 core/modules/editor/editor.module              |  5 ++---
 .../editor/src/Form/EditorImageDialog.php      |  4 ++--
 .../editor/src/Form/EditorLinkDialog.php       |  4 ++--
 core/modules/field/src/FieldConfigStorage.php  |  2 +-
 .../field/src/FieldStorageConfigStorage.php    |  2 +-
 .../d6/FieldFormatterSettingsDefaults.php      |  2 +-
 .../d6/FieldInstanceOptionTranslation.php      |  2 +-
 .../process/d6/FieldInstanceWidgetSettings.php |  8 ++++----
 .../migrate/process/d6/FieldSettings.php       |  6 +++---
 .../Field/FieldWidget/TestFieldWidget.php      |  2 +-
 .../field_ui/src/Element/FieldUiTable.php      |  2 +-
 .../src/Form/EntityDisplayFormBase.php         |  8 ++++----
 .../src/Form/EntityFormDisplayEditForm.php     |  2 +-
 .../src/Form/EntityViewDisplayEditForm.php     |  2 +-
 .../field_ui/src/Form/FieldStorageAddForm.php  |  8 ++++----
 .../src/Form/FieldStorageConfigEditForm.php    |  2 +-
 core/modules/file/file.module                  | 10 +++++-----
 core/modules/file/src/Element/ManagedFile.php  |  8 ++++----
 .../src/Plugin/Field/FieldType/FileItem.php    |  2 +-
 .../Plugin/Field/FieldWidget/FileWidget.php    |  2 +-
 .../Plugin/migrate/process/d6/FieldFile.php    |  6 +++---
 .../file/src/Plugin/migrate/source/d6/File.php |  2 +-
 .../tests/src/Functional/FileFieldTestBase.php |  6 +++---
 .../process/d6/FilterFormatPermission.php      |  2 +-
 core/modules/forum/forum.module                |  2 +-
 core/modules/forum/src/ForumManager.php        |  2 +-
 .../EntityReferenceItemNormalizer.php          |  2 +-
 .../image/src/Form/ImageStyleEditForm.php      |  2 +-
 core/modules/image/src/ImageStyleStorage.php   |  2 +-
 .../Plugin/Field/FieldWidget/ImageWidget.php   |  4 ++--
 .../src/Functional/ImageFieldTestBase.php      |  2 +-
 .../jsonapi/src/Access/TemporaryQueryGuard.php |  2 +-
 .../jsonapi/src/Controller/EntityResource.php  |  4 ++--
 ...egisterSerializationClassesCompilerPass.php |  4 ++--
 core/modules/jsonapi/src/IncludeResolver.php   |  2 +-
 ...tityAccessDeniedHttpExceptionNormalizer.php |  5 ++---
 .../ResourceIdentifierNormalizer.php           |  2 +-
 .../Normalizer/ResourceObjectNormalizer.php    |  6 +-----
 .../ResourceType/ResourceTypeRepository.php    |  2 +-
 core/modules/jsonapi/src/Routing/Routes.php    |  2 +-
 .../tests/src/Functional/ResourceTestBase.php  |  2 +-
 core/modules/language/language.admin.inc       |  2 +-
 .../src/Element/LanguageConfiguration.php      |  2 +-
 .../src/Entity/ConfigurableLanguage.php        |  2 +-
 .../language/src/Form/LanguageAddForm.php      |  2 +-
 .../src/Form/NegotiationConfigureForm.php      |  4 ++--
 .../language/src/Form/NegotiationUrlForm.php   |  4 ++--
 .../language/src/LanguageNegotiator.php        |  2 +-
 .../LanguageNegotiationContentEntity.php       |  4 ++--
 .../LanguageNegotiationSession.php             |  2 +-
 .../Functional/LanguageUrlRewritingTest.php    |  2 +-
 .../layout_builder/layout_builder.module       |  2 +-
 .../src/Element/LayoutBuilder.php              |  2 +-
 .../Entity/LayoutBuilderEntityViewDisplay.php  |  2 +-
 core/modules/layout_builder/src/Section.php    |  4 ++--
 .../layout_builder/src/SectionComponent.php    |  4 ++--
 .../SectionStorageDefinition.php               |  4 ++--
 .../layout_discovery/layout_discovery.module   |  4 ++--
 .../Plugin/Field/FieldWidget/LinkWidget.php    |  2 +-
 core/modules/locale/locale.batch.inc           |  2 +-
 core/modules/locale/locale.bulk.inc            |  4 ++--
 core/modules/locale/locale.compare.inc         |  2 +-
 core/modules/locale/locale.module              |  2 +-
 core/modules/locale/locale.translation.inc     |  4 ++--
 .../locale/src/Form/TranslateEditForm.php      |  4 ++--
 .../locale/src/Form/TranslateFilterForm.php    |  2 +-
 .../locale/src/Form/TranslationStatusForm.php  |  8 ++++----
 .../locale/src/LocaleConfigSubscriber.php      |  2 +-
 .../locale/src/LocaleProjectStorage.php        |  2 +-
 core/modules/locale/src/PluralFormula.php      |  2 +-
 core/modules/locale/src/SourceString.php       |  2 +-
 core/modules/locale/src/StringBase.php         |  8 ++++----
 core/modules/locale/src/TranslationString.php  |  2 +-
 core/modules/media/media.module                |  4 ++--
 .../media/src/Form/EditorMediaDialog.php       |  2 +-
 core/modules/media/src/MediaSourceBase.php     |  4 ++--
 core/modules/media/src/MediaTypeForm.php       |  2 +-
 .../media_library/src/Form/AddFormBase.php     |  2 +-
 .../Field/FieldWidget/MediaLibraryWidget.php   | 12 ++++++------
 .../src/Plugin/Menu/MenuLinkContent.php        |  2 +-
 .../tests/src/Kernel/MenuLinksTest.php         |  2 +-
 core/modules/menu_ui/menu_ui.module            |  2 +-
 core/modules/migrate/src/MigrateMessage.php    |  2 +-
 core/modules/migrate/src/Plugin/Migration.php  |  4 ++--
 .../src/Plugin/MigrationPluginManager.php      |  6 +++---
 .../src/Plugin/migrate/destination/Entity.php  |  2 +-
 .../src/Plugin/migrate/process/Concat.php      |  2 +-
 .../Plugin/migrate/process/DefaultValue.php    |  2 +-
 .../src/Plugin/migrate/process/Explode.php     |  2 +-
 .../src/Plugin/migrate/process/FormatDate.php  |  6 +++---
 .../Plugin/migrate/process/MakeUniqueBase.php  |  6 +++---
 .../src/Plugin/migrate/process/Substr.php      |  4 ++--
 .../migrate_drupal/src/FieldDiscovery.php      |  2 +-
 .../Plugin/migrate/source/DrupalSqlBase.php    |  2 +-
 .../migrate/source/d7/FieldableEntity.php      |  2 +-
 .../node/src/Plugin/Search/NodeSearch.php      | 14 +++++++-------
 .../node/src/Plugin/migrate/source/d6/Node.php |  2 +-
 .../src/Plugin/migrate/source/d6/NodeType.php  |  2 +-
 .../node/src/Plugin/views/field/Node.php       |  2 +-
 .../FieldFormatter/OptionsDefaultFormatter.php |  2 +-
 .../migrate/process/PathSetTranslated.php      |  2 +-
 core/modules/rdf/rdf.module                    |  4 ++--
 .../src/ResponsiveImageStyleForm.php           |  6 +++---
 core/modules/rest/src/Plugin/ResourceBase.php  |  4 ++--
 .../rest/src/Plugin/views/row/DataFieldRow.php |  6 +++---
 core/modules/search/search.pages.inc           |  2 +-
 .../Normalizer/DateTimeIso8601Normalizer.php   | 11 +++++++----
 .../src/Normalizer/DateTimeNormalizer.php      |  4 +---
 .../FieldableEntityNormalizerTrait.php         |  2 +-
 .../RegisterEntityResolversCompilerPass.php    |  2 +-
 ...egisterSerializationClassesCompilerPass.php |  4 ++--
 .../tests/src/Functional/ShortcutTestBase.php  |  2 +-
 .../system/src/Controller/BatchController.php  |  2 +-
 .../src/Controller/DbUpdateController.php      |  2 +-
 .../system/src/Form/ModulesListForm.php        |  4 ++--
 .../src/Form/ThemeExperimentalConfirmForm.php  |  4 ++--
 .../system/src/Form/ThemeSettingsForm.php      |  2 +-
 .../system/src/PhpStorage/MockPhpStorage.php   |  2 +-
 core/modules/system/system.admin.inc           |  2 +-
 core/modules/system/system.module              |  2 +-
 .../Render/MainContent/WideModalRenderer.php   |  2 +-
 .../ShapeOnlyColorEditableWidget.php           |  2 +-
 .../mock_block/MockUserLoginBlock.php          |  2 +-
 .../Traits/EntityDefinitionTestTrait.php       |  4 ++--
 .../tests/src/Functional/Form/FormTest.php     |  6 +++---
 .../src/Kernel/Block/SystemMenuBlockTest.php   |  6 +++---
 .../taxonomy/src/Form/OverviewTerms.php        |  2 +-
 .../views/argument/IndexTidDepthModifier.php   |  2 +-
 .../Plugin/views/field/TaxonomyIndexTid.php    |  2 +-
 .../FieldWidget/TelephoneDefaultWidget.php     |  2 +-
 .../Field/FieldWidget/TextfieldWidget.php      |  2 +-
 .../src/Plugin/migrate/field/d6/TextField.php  |  2 +-
 core/modules/tour/src/Entity/Tour.php          |  2 +-
 .../src/Plugin/HelpSection/TourHelpSection.php |  2 +-
 .../user/src/Controller/UserController.php     |  2 +-
 .../Plugin/migrate/process/UserUpdate8002.php  |  2 +-
 .../migrate/source/d6/UserPictureFile.php      |  2 +-
 core/modules/user/user.module                  |  4 ++--
 .../Render/TranslationLanguageRenderer.php     |  5 ++---
 .../views/src/Plugin/views/PluginBase.php      |  2 +-
 .../src/Plugin/views/area/AreaPluginBase.php   |  2 +-
 .../views/src/Plugin/views/area/Result.php     |  2 +-
 .../views/src/Plugin/views/area/Text.php       |  4 ++--
 .../views/argument/ArgumentPluginBase.php      | 10 +++++-----
 .../Plugin/views/argument/LanguageArgument.php |  2 +-
 .../src/Plugin/views/cache/CachePluginBase.php |  2 +-
 .../Plugin/views/display/DisplayPluginBase.php | 10 +++++-----
 .../views/src/Plugin/views/display/Page.php    |  2 +-
 .../Plugin/views/display/PathPluginBase.php    |  2 +-
 .../exposed_form/ExposedFormPluginBase.php     |  4 ++--
 .../views/exposed_form/InputRequired.php       |  2 +-
 .../views/src/Plugin/views/field/Boolean.php   |  2 +-
 .../views/src/Plugin/views/field/Date.php      |  4 ++--
 .../src/Plugin/views/field/EntityField.php     |  6 +++---
 .../src/Plugin/views/field/FieldPluginBase.php |  2 +-
 .../src/Plugin/views/field/NumericField.php    |  2 +-
 .../src/Plugin/views/field/TimeInterval.php    |  2 +-
 .../Plugin/views/filter/FilterPluginBase.php   |  4 ++--
 .../src/Plugin/views/filter/StringFilter.php   |  2 +-
 .../src/Plugin/views/pager/PagerPluginBase.php |  6 +++---
 .../views/src/Plugin/views/query/Sql.php       |  2 +-
 .../views/src/Plugin/views/row/Fields.php      |  2 +-
 .../views/src/Plugin/views/row/OpmlFields.php  |  2 +-
 .../src/Plugin/views/row/RowPluginBase.php     |  2 +-
 .../views/src/Plugin/views/row/RssFields.php   |  2 +-
 .../views/src/Plugin/views/style/Mapping.php   |  2 +-
 .../src/Plugin/views/style/StylePluginBase.php |  8 ++++----
 .../views/src/Plugin/views/style/Table.php     |  6 +++---
 .../Plugin/views/wizard/WizardPluginBase.php   | 14 +++++++-------
 core/modules/views/src/ViewExecutable.php      |  6 +++---
 .../Unit/Controller/ViewAjaxControllerTest.php |  2 +-
 .../Unit/Plugin/field/FieldPluginBaseTest.php  |  4 ++--
 core/modules/views_ui/src/ViewUI.php           |  2 +-
 core/modules/views_ui/views_ui.theme.inc       |  4 ++--
 .../tests/src/Kernel/WorkspaceTestTrait.php    |  2 +-
 core/scripts/run-tests.sh                      |  2 +-
 .../Drupal/KernelTests/AssertContentTrait.php  |  2 +-
 .../FileCache/StaticFileCacheBackend.php       |  2 +-
 .../Tests/Component/Gettext/PoHeaderTest.php   |  2 +-
 .../Drupal/Tests/Component/Graph/GraphTest.php |  4 ++--
 .../Core/Asset/LibraryDiscoveryParserTest.php  |  2 +-
 .../Entity/Sql/DefaultTableMappingTest.php     |  6 +++---
 .../Tests/Core/Menu/LocalActionManagerTest.php |  2 +-
 .../Tests/Core/Menu/LocalTaskManagerTest.php   |  8 ++++----
 .../Drupal/Tests/Core/Render/RendererTest.php  |  2 +-
 core/themes/claro/claro.theme                  |  4 +---
 core/themes/claro/src/ClaroPreRender.php       |  2 +-
 342 files changed, 585 insertions(+), 596 deletions(-)

diff --git a/composer/Generator/Util/DrupalCoreComposer.php b/composer/Generator/Util/DrupalCoreComposer.php
index f33e759e20ce..cf4aea0ce8df 100644
--- a/composer/Generator/Util/DrupalCoreComposer.php
+++ b/composer/Generator/Util/DrupalCoreComposer.php
@@ -83,7 +83,7 @@ public function composerLock() {
    */
   public function getRequireDev() {
     $composerJsonData = $this->rootComposerJson();
-    return isset($composerJsonData['require-dev']) ? $composerJsonData['require-dev'] : [];
+    return $composerJsonData['require-dev'] ?? [];
   }
 
   /**
diff --git a/composer/Plugin/VendorHardening/Config.php b/composer/Plugin/VendorHardening/Config.php
index b63238756874..6baf99aedc38 100644
--- a/composer/Plugin/VendorHardening/Config.php
+++ b/composer/Plugin/VendorHardening/Config.php
@@ -139,7 +139,7 @@ public function getAllCleanupPaths() {
     // Merge root config with defaults.
     foreach (array_change_key_case(static::$defaultConfig, CASE_LOWER) as $package => $paths) {
       $this->configData[$package] = array_merge(
-        isset($this->configData[$package]) ? $this->configData[$package] : [],
+        $this->configData[$package] ?? [],
         $paths);
     }
     return $this->configData;
@@ -157,7 +157,7 @@ public function getAllCleanupPaths() {
   public function getPathsForPackage($package) {
     $package = strtolower($package);
     $paths = $this->getAllCleanupPaths();
-    return isset($paths[$package]) ? $paths[$package] : [];
+    return $paths[$package] ?? [];
   }
 
 }
diff --git a/core/includes/batch.inc b/core/includes/batch.inc
index ebee3eb35cd7..ce812f155b09 100644
--- a/core/includes/batch.inc
+++ b/core/includes/batch.inc
@@ -354,7 +354,7 @@ function _batch_process() {
     // completion level of the current operation.
     $current    = $total - $remaining + $finished;
     $percentage = _batch_api_percentage($total, $current);
-    $elapsed    = isset($current_set['elapsed']) ? $current_set['elapsed'] : 0;
+    $elapsed    = $current_set['elapsed'] ?? 0;
     $values     = [
       '@remaining'  => $remaining,
       '@total'      => $total,
diff --git a/core/includes/bootstrap.inc b/core/includes/bootstrap.inc
index 74dfb3f4d5af..12464555f759 100644
--- a/core/includes/bootstrap.inc
+++ b/core/includes/bootstrap.inc
@@ -415,8 +415,8 @@ function drupal_valid_test_ua($new_prefix = NULL) {
   // A valid Simpletest request will contain a hashed and salted authentication
   // code. Check if this code is present in a cookie or custom user agent
   // string.
-  $http_user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : NULL;
-  $user_agent = isset($_COOKIE['SIMPLETEST_USER_AGENT']) ? $_COOKIE['SIMPLETEST_USER_AGENT'] : $http_user_agent;
+  $http_user_agent = $_SERVER['HTTP_USER_AGENT'] ?? NULL;
+  $user_agent = $_COOKIE['SIMPLETEST_USER_AGENT'] ?? $http_user_agent;
   if (isset($user_agent) && preg_match("/^simple(\w+\d+):(.+):(.+):(.+)$/", $user_agent, $matches)) {
     list(, $prefix, $time, $salt, $hmac) = $matches;
     $check_string = $prefix . ':' . $time . ':' . $salt;
diff --git a/core/includes/common.inc b/core/includes/common.inc
index 5350acba31ec..f6a42a17109a 100644
--- a/core/includes/common.inc
+++ b/core/includes/common.inc
@@ -355,8 +355,8 @@ function drupal_attach_tabledrag(&$element, array $options) {
   $tabledrag_id = (!isset($tabledrag_id)) ? 0 : $tabledrag_id + 1;
 
   // If a subgroup or source isn't set, assume it is the same as the group.
-  $target = isset($options['subgroup']) ? $options['subgroup'] : $group;
-  $source = isset($options['source']) ? $options['source'] : $target;
+  $target = $options['subgroup'] ?? $group;
+  $source = $options['source'] ?? $target;
   $element['#attached']['drupalSettings']['tableDrag'][$options['table_id']][$group][$tabledrag_id] = [
     'target' => $target,
     'source' => $source,
diff --git a/core/includes/errors.inc b/core/includes/errors.inc
index 045b2dd417c8..69543cf0af89 100644
--- a/core/includes/errors.inc
+++ b/core/includes/errors.inc
@@ -323,7 +323,7 @@ function _drupal_get_error_level() {
     $error_level = \Drupal::config('system.logging')->get('error_level');
   }
   catch (\Exception $e) {
-    $error_level = isset($GLOBALS['config']['system.logging']['error_level']) ? $GLOBALS['config']['system.logging']['error_level'] : ERROR_REPORTING_HIDE;
+    $error_level = $GLOBALS['config']['system.logging']['error_level'] ?? ERROR_REPORTING_HIDE;
   }
 
   // If there is no container or if it has no config.factory service, we are
diff --git a/core/includes/form.inc b/core/includes/form.inc
index 4eb5f48bace6..d85ae6313d2d 100644
--- a/core/includes/form.inc
+++ b/core/includes/form.inc
@@ -193,10 +193,10 @@ function template_preprocess_fieldset(&$variables) {
   $element = $variables['element'];
   Element::setAttributes($element, ['id']);
   RenderElement::setAttributes($element);
-  $variables['attributes'] = isset($element['#attributes']) ? $element['#attributes'] : [];
-  $variables['prefix'] = isset($element['#field_prefix']) ? $element['#field_prefix'] : NULL;
-  $variables['suffix'] = isset($element['#field_suffix']) ? $element['#field_suffix'] : NULL;
-  $variables['title_display'] = isset($element['#title_display']) ? $element['#title_display'] : NULL;
+  $variables['attributes'] = $element['#attributes'] ?? [];
+  $variables['prefix'] = $element['#field_prefix'] ?? NULL;
+  $variables['suffix'] = $element['#field_suffix'] ?? NULL;
+  $variables['title_display'] = $element['#title_display'] ?? NULL;
   $variables['children'] = $element['#children'];
   $variables['required'] = !empty($element['#required']) ? $element['#required'] : NULL;
 
@@ -477,8 +477,8 @@ function template_preprocess_form_element(&$variables) {
 
   $variables['title_display'] = $element['#title_display'];
 
-  $variables['prefix'] = isset($element['#field_prefix']) ? $element['#field_prefix'] : NULL;
-  $variables['suffix'] = isset($element['#field_suffix']) ? $element['#field_suffix'] : NULL;
+  $variables['prefix'] = $element['#field_prefix'] ?? NULL;
+  $variables['suffix'] = $element['#field_suffix'] ?? NULL;
 
   $variables['description'] = NULL;
   if (!empty($element['#description'])) {
@@ -883,7 +883,7 @@ function batch_process($redirect = NULL, Url $url = NULL, $redirect_callback = N
     $process_info = [
       'current_set' => 0,
       'progressive' => TRUE,
-      'url' => isset($url) ? $url : Url::fromRoute('system.batch_page.html'),
+      'url' => $url ?? Url::fromRoute('system.batch_page.html'),
       'source_url' => Url::fromRouteMatch(\Drupal::routeMatch())->mergeOptions(['query' => \Drupal::request()->query->all()]),
       'batch_redirect' => $redirect,
       'theme' => \Drupal::theme()->getActiveTheme()->getName(),
diff --git a/core/includes/install.core.inc b/core/includes/install.core.inc
index e488cd7f3641..5a5f92339baa 100644
--- a/core/includes/install.core.inc
+++ b/core/includes/install.core.inc
@@ -1523,7 +1523,7 @@ function _install_get_version_info($version) {
 function install_load_profile(&$install_state) {
   $profile = $install_state['parameters']['profile'];
   $install_state['profiles'][$profile]->load();
-  $install_state['profile_info'] = install_profile_info($profile, isset($install_state['parameters']['langcode']) ? $install_state['parameters']['langcode'] : 'en');
+  $install_state['profile_info'] = install_profile_info($profile, $install_state['parameters']['langcode'] ?? 'en');
 
   $sync_directory = Settings::get('config_sync_directory');
   if (!empty($install_state['parameters']['existing_config']) && !empty($sync_directory)) {
diff --git a/core/includes/install.inc b/core/includes/install.inc
index 44dc75c15255..c24c16533342 100644
--- a/core/includes/install.inc
+++ b/core/includes/install.inc
@@ -114,7 +114,7 @@ function drupal_install_profile_distribution_name() {
     $profile = \Drupal::installProfile();
     $info = \Drupal::service('extension.list.profile')->getExtensionInfo($profile);
   }
-  return isset($info['distribution']['name']) ? $info['distribution']['name'] : 'Drupal';
+  return $info['distribution']['name'] ?? 'Drupal';
 }
 
 /**
@@ -132,7 +132,7 @@ function drupal_install_profile_distribution_version() {
   // installation state (it might not be saved anywhere yet).
   if (InstallerKernel::installationAttempted()) {
     global $install_state;
-    return isset($install_state['profile_info']['version']) ? $install_state['profile_info']['version'] : \Drupal::VERSION;
+    return $install_state['profile_info']['version'] ?? \Drupal::VERSION;
   }
   // At all other times, we load the profile via standard methods.
   else {
diff --git a/core/includes/theme.inc b/core/includes/theme.inc
index d2f65b2bfcc6..7476d323c3b2 100644
--- a/core/includes/theme.inc
+++ b/core/includes/theme.inc
@@ -151,7 +151,7 @@ function drupal_find_theme_functions($cache, $prefixes) {
       // refers to a base hook, not to another suggestion, and all suggestions
       // are found using the base hook's pattern, not a pattern from an
       // intermediary suggestion.
-      $pattern = isset($info['pattern']) ? $info['pattern'] : ($hook . '__');
+      $pattern = $info['pattern'] ?? ($hook . '__');
       // Grep only the functions which are within the prefix group.
       list($first_prefix,) = explode('_', $prefix, 2);
       if (!isset($info['base hook']) && !empty($pattern) && isset($grouped_functions[$first_prefix])) {
@@ -212,7 +212,7 @@ function drupal_find_theme_templates($cache, $extension, $path) {
     }
   }
   $theme = \Drupal::theme()->getActiveTheme()->getName();
-  $subtheme_paths = isset($theme_paths[$theme]) ? $theme_paths[$theme] : [];
+  $subtheme_paths = $theme_paths[$theme] ?? [];
 
   // Escape the periods in the extension.
   $regex = '/' . str_replace('.', '\.', $extension) . '$/';
@@ -261,7 +261,7 @@ function drupal_find_theme_templates($cache, $extension, $path) {
   // the use of 'pattern' and 'base hook'.
   $patterns = array_keys($files);
   foreach ($cache as $hook => $info) {
-    $pattern = isset($info['pattern']) ? $info['pattern'] : ($hook . '__');
+    $pattern = $info['pattern'] ?? ($hook . '__');
     if (!isset($info['base hook']) && !empty($pattern)) {
       // Transform _ in pattern to - to match file naming scheme
       // for the purposes of searching.
@@ -1020,7 +1020,7 @@ function template_preprocess_table(&$variables) {
           unset($cell['data']);
         }
         // Flag the cell as a header or not and remove the flag.
-        $is_header = isset($cell['header']) ? $cell['header'] : TRUE;
+        $is_header = $cell['header'] ?? TRUE;
         unset($cell['header']);
 
         // Track responsive classes for each column as needed. Only the header
@@ -1061,7 +1061,7 @@ function template_preprocess_table(&$variables) {
         // Check if we're dealing with a simple or complex row
         if (isset($row['data'])) {
           $cells = $row['data'];
-          $variables['no_striping'] = isset($row['no_striping']) ? $row['no_striping'] : FALSE;
+          $variables['no_striping'] = $row['no_striping'] ?? FALSE;
 
           // Set the attributes array and exclude 'data' and 'no_striping'.
           $row_attributes = $row;
@@ -1788,7 +1788,7 @@ function template_preprocess_pager(&$variables) {
   $parameters = $variables['pager']['#parameters'];
   $quantity = empty($variables['pager']['#quantity']) ? 0 : $variables['pager']['#quantity'];
   $route_name = $variables['pager']['#route_name'];
-  $route_parameters = isset($variables['pager']['#route_parameters']) ? $variables['pager']['#route_parameters'] : [];
+  $route_parameters = $variables['pager']['#route_parameters'] ?? [];
 
   /** @var \Drupal\Core\Pager\PagerManagerInterface $pager_manager */
   $pager_manager = \Drupal::service('pager.manager');
diff --git a/core/lib/Drupal/Component/Annotation/Plugin.php b/core/lib/Drupal/Component/Annotation/Plugin.php
index 504ff401d1aa..6bae9c4f6eb3 100644
--- a/core/lib/Drupal/Component/Annotation/Plugin.php
+++ b/core/lib/Drupal/Component/Annotation/Plugin.php
@@ -78,7 +78,7 @@ public function get() {
    * {@inheritdoc}
    */
   public function getProvider() {
-    return isset($this->definition['provider']) ? $this->definition['provider'] : FALSE;
+    return $this->definition['provider'] ?? FALSE;
   }
 
   /**
diff --git a/core/lib/Drupal/Component/DependencyInjection/Container.php b/core/lib/Drupal/Component/DependencyInjection/Container.php
index 41684d3e709c..127656539ad5 100644
--- a/core/lib/Drupal/Component/DependencyInjection/Container.php
+++ b/core/lib/Drupal/Component/DependencyInjection/Container.php
@@ -115,10 +115,10 @@ public function __construct(array $container_definition = []) {
       throw new InvalidArgumentException('The non-optimized format is not supported by this class. Use an optimized machine-readable format instead, e.g. as produced by \Drupal\Component\DependencyInjection\Dumper\OptimizedPhpArrayDumper.');
     }
 
-    $this->aliases = isset($container_definition['aliases']) ? $container_definition['aliases'] : [];
-    $this->parameters = isset($container_definition['parameters']) ? $container_definition['parameters'] : [];
-    $this->serviceDefinitions = isset($container_definition['services']) ? $container_definition['services'] : [];
-    $this->frozen = isset($container_definition['frozen']) ? $container_definition['frozen'] : FALSE;
+    $this->aliases = $container_definition['aliases'] ?? [];
+    $this->parameters = $container_definition['parameters'] ?? [];
+    $this->serviceDefinitions = $container_definition['services'] ?? [];
+    $this->frozen = $container_definition['frozen'] ?? FALSE;
 
     // Register the service_container with itself.
     $this->services['service_container'] = $this;
@@ -146,7 +146,7 @@ public function get($id, $invalid_behavior = ContainerInterface::EXCEPTION_ON_IN
       throw new ServiceCircularReferenceException($id, array_keys($this->loading));
     }
 
-    $definition = isset($this->serviceDefinitions[$id]) ? $this->serviceDefinitions[$id] : NULL;
+    $definition = $this->serviceDefinitions[$id] ?? NULL;
 
     if (!$definition && $invalid_behavior === ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE) {
       if (!$id) {
diff --git a/core/lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php b/core/lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php
index be690488defa..95c4e34d0c7a 100644
--- a/core/lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php
+++ b/core/lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php
@@ -34,10 +34,10 @@ public function __construct(array $container_definition = []) {
 
     // Do not call the parent's constructor as it would bail on the
     // machine-optimized format.
-    $this->aliases = isset($container_definition['aliases']) ? $container_definition['aliases'] : [];
-    $this->parameters = isset($container_definition['parameters']) ? $container_definition['parameters'] : [];
-    $this->serviceDefinitions = isset($container_definition['services']) ? $container_definition['services'] : [];
-    $this->frozen = isset($container_definition['frozen']) ? $container_definition['frozen'] : FALSE;
+    $this->aliases = $container_definition['aliases'] ?? [];
+    $this->parameters = $container_definition['parameters'] ?? [];
+    $this->serviceDefinitions = $container_definition['services'] ?? [];
+    $this->frozen = $container_definition['frozen'] ?? FALSE;
 
     // Register the service_container with itself.
     $this->services['service_container'] = $this;
diff --git a/core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php b/core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php
index 8aa35299beea..eda980cfd8ae 100644
--- a/core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php
+++ b/core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php
@@ -293,11 +293,11 @@ public function addSubscriber(EventSubscriberInterface $subscriber) {
         $this->addListener($event_name, [$subscriber, $params]);
       }
       elseif (is_string($params[0])) {
-        $this->addListener($event_name, [$subscriber, $params[0]], isset($params[1]) ? $params[1] : 0);
+        $this->addListener($event_name, [$subscriber, $params[0]], $params[1] ?? 0);
       }
       else {
         foreach ($params as $listener) {
-          $this->addListener($event_name, [$subscriber, $listener[0]], isset($listener[1]) ? $listener[1] : 0);
+          $this->addListener($event_name, [$subscriber, $listener[0]], $listener[1] ?? 0);
         }
       }
     }
diff --git a/core/lib/Drupal/Component/FileCache/FileCache.php b/core/lib/Drupal/Component/FileCache/FileCache.php
index eea92ac1947e..256d5dd79fe3 100644
--- a/core/lib/Drupal/Component/FileCache/FileCache.php
+++ b/core/lib/Drupal/Component/FileCache/FileCache.php
@@ -68,7 +68,7 @@ public function __construct($prefix, $collection, $cache_backend_class = NULL, a
   public function get($filepath) {
     $filepaths = [$filepath];
     $cached = $this->getMultiple($filepaths);
-    return isset($cached[$filepath]) ? $cached[$filepath] : NULL;
+    return $cached[$filepath] ?? NULL;
   }
 
   /**
diff --git a/core/lib/Drupal/Component/Gettext/PoStreamReader.php b/core/lib/Drupal/Component/Gettext/PoStreamReader.php
index a92bccb1271a..bbdd8e8ae6a2 100644
--- a/core/lib/Drupal/Component/Gettext/PoStreamReader.php
+++ b/core/lib/Drupal/Component/Gettext/PoStreamReader.php
@@ -526,7 +526,7 @@ public function setItemFromArray($value) {
     }
 
     $item = new PoItem();
-    $item->setContext(isset($value['msgctxt']) ? $value['msgctxt'] : '');
+    $item->setContext($value['msgctxt'] ?? '');
     $item->setSource($value['msgid']);
     $item->setTranslation($value['msgstr']);
     $item->setPlural($plural);
diff --git a/core/lib/Drupal/Component/Plugin/ContextAwarePluginBase.php b/core/lib/Drupal/Component/Plugin/ContextAwarePluginBase.php
index 533b026236ab..f664a06fa30a 100644
--- a/core/lib/Drupal/Component/Plugin/ContextAwarePluginBase.php
+++ b/core/lib/Drupal/Component/Plugin/ContextAwarePluginBase.php
@@ -37,7 +37,7 @@ abstract class ContextAwarePluginBase extends PluginBase implements ContextAware
    *   The plugin implementation definition.
    */
   public function __construct(array $configuration, $plugin_id, $plugin_definition) {
-    $context_configuration = isset($configuration['context']) ? $configuration['context'] : [];
+    $context_configuration = $configuration['context'] ?? [];
     unset($configuration['context']);
 
     parent::__construct($configuration, $plugin_id, $plugin_definition);
diff --git a/core/lib/Drupal/Component/Transliteration/PhpTransliteration.php b/core/lib/Drupal/Component/Transliteration/PhpTransliteration.php
index 8d62175e604d..977892ddabf4 100644
--- a/core/lib/Drupal/Component/Transliteration/PhpTransliteration.php
+++ b/core/lib/Drupal/Component/Transliteration/PhpTransliteration.php
@@ -260,7 +260,7 @@ protected function lookupReplacement($code, $unknown_character = '?') {
       $this->readGenericData($bank);
     }
     $code = $code & 0xff;
-    return isset($this->genericMap[$bank][$code]) ? $this->genericMap[$bank][$code] : $unknown_character;
+    return $this->genericMap[$bank][$code] ?? $unknown_character;
   }
 
   /**
diff --git a/core/lib/Drupal/Component/Utility/UserAgent.php b/core/lib/Drupal/Component/Utility/UserAgent.php
index 934049033c1a..f7403e2fdd57 100644
--- a/core/lib/Drupal/Component/Utility/UserAgent.php
+++ b/core/lib/Drupal/Component/Utility/UserAgent.php
@@ -68,7 +68,7 @@ public static function getBestMatchingLangcode($http_accept_language, $langcodes
         // to the same langcode for different qvalues. Keep the highest.
         $ua_langcodes[$langcode] = max(
           (int) ($qvalue * 1000),
-          (isset($ua_langcodes[$langcode]) ? $ua_langcodes[$langcode] : 0)
+          ($ua_langcodes[$langcode] ?? 0)
         );
       }
     }
@@ -113,7 +113,7 @@ public static function getBestMatchingLangcode($http_accept_language, $langcodes
 
       // If nothing matches below, the default qvalue is the one of the wildcard
       // language, if set, or is 0 (which will never match).
-      $qvalue = isset($ua_langcodes['*']) ? $ua_langcodes['*'] : 0;
+      $qvalue = $ua_langcodes['*'] ?? 0;
 
       // Find the longest possible prefix of the user agent supplied language
       // ('the language-range') that matches this site language ('the language
diff --git a/core/lib/Drupal/Core/Ajax/AjaxResponseAttachmentsProcessor.php b/core/lib/Drupal/Core/Ajax/AjaxResponseAttachmentsProcessor.php
index 875c9d3ef961..55a3b4374c0a 100644
--- a/core/lib/Drupal/Core/Ajax/AjaxResponseAttachmentsProcessor.php
+++ b/core/lib/Drupal/Core/Ajax/AjaxResponseAttachmentsProcessor.php
@@ -138,9 +138,9 @@ protected function buildAttachmentsCommands(AjaxResponse $response, Request $req
 
     // Resolve the attached libraries into asset collections.
     $assets = new AttachedAssets();
-    $assets->setLibraries(isset($attachments['library']) ? $attachments['library'] : [])
+    $assets->setLibraries($attachments['library'] ?? [])
       ->setAlreadyLoadedLibraries(isset($ajax_page_state['libraries']) ? explode(',', $ajax_page_state['libraries']) : [])
-      ->setSettings(isset($attachments['drupalSettings']) ? $attachments['drupalSettings'] : []);
+      ->setSettings($attachments['drupalSettings'] ?? []);
     $css_assets = $this->assetResolver->getCssAssets($assets, $optimize_css);
     list($js_assets_header, $js_assets_footer) = $this->assetResolver->getJsAssets($assets, $optimize_js);
 
diff --git a/core/lib/Drupal/Core/Annotation/Translation.php b/core/lib/Drupal/Core/Annotation/Translation.php
index 14fdda986e59..f63a9a0ab875 100644
--- a/core/lib/Drupal/Core/Annotation/Translation.php
+++ b/core/lib/Drupal/Core/Annotation/Translation.php
@@ -74,7 +74,7 @@ class Translation extends AnnotationBase {
    */
   public function __construct(array $values) {
     $string = $values['value'];
-    $arguments = isset($values['arguments']) ? $values['arguments'] : [];
+    $arguments = $values['arguments'] ?? [];
     $options = [];
     if (!empty($values['context'])) {
       $options = [
diff --git a/core/lib/Drupal/Core/Asset/LibraryDiscoveryParser.php b/core/lib/Drupal/Core/Asset/LibraryDiscoveryParser.php
index 5631483d45bd..9392d565109c 100644
--- a/core/lib/Drupal/Core/Asset/LibraryDiscoveryParser.php
+++ b/core/lib/Drupal/Core/Asset/LibraryDiscoveryParser.php
@@ -257,7 +257,7 @@ public function buildByExtension($extension) {
 
           // Set the 'minified' flag on JS file assets, default to FALSE.
           if ($type == 'js' && $options['type'] == 'file') {
-            $options['minified'] = isset($options['minified']) ? $options['minified'] : FALSE;
+            $options['minified'] = $options['minified'] ?? FALSE;
           }
 
           $library[$type][] = $options;
diff --git a/core/lib/Drupal/Core/Authentication/AuthenticationCollector.php b/core/lib/Drupal/Core/Authentication/AuthenticationCollector.php
index 616e936b557e..de6edae00619 100644
--- a/core/lib/Drupal/Core/Authentication/AuthenticationCollector.php
+++ b/core/lib/Drupal/Core/Authentication/AuthenticationCollector.php
@@ -60,7 +60,7 @@ public function isGlobal($provider_id) {
    * {@inheritdoc}
    */
   public function getProvider($provider_id) {
-    return isset($this->providers[$provider_id]) ? $this->providers[$provider_id] : NULL;
+    return $this->providers[$provider_id] ?? NULL;
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Cache/ApcuBackend.php b/core/lib/Drupal/Core/Cache/ApcuBackend.php
index 6014fb8bff61..fc6fab38bfa9 100644
--- a/core/lib/Drupal/Core/Cache/ApcuBackend.php
+++ b/core/lib/Drupal/Core/Cache/ApcuBackend.php
@@ -184,7 +184,7 @@ public function set($cid, $data, $expire = CacheBackendInterface::CACHE_PERMANEN
    */
   public function setMultiple(array $items = []) {
     foreach ($items as $cid => $item) {
-      $this->set($cid, $item['data'], isset($item['expire']) ? $item['expire'] : CacheBackendInterface::CACHE_PERMANENT, isset($item['tags']) ? $item['tags'] : []);
+      $this->set($cid, $item['data'], $item['expire'] ?? CacheBackendInterface::CACHE_PERMANENT, $item['tags'] ?? []);
     }
   }
 
diff --git a/core/lib/Drupal/Core/Cache/ChainedFastBackendFactory.php b/core/lib/Drupal/Core/Cache/ChainedFastBackendFactory.php
index b04ee5c55cfd..789b7274aafc 100644
--- a/core/lib/Drupal/Core/Cache/ChainedFastBackendFactory.php
+++ b/core/lib/Drupal/Core/Cache/ChainedFastBackendFactory.php
@@ -48,7 +48,7 @@ public function __construct(Settings $settings = NULL, $consistent_service_name
     // Default the consistent backend to the site's default backend.
     if (!isset($consistent_service_name)) {
       $cache_settings = isset($settings) ? $settings->get('cache') : [];
-      $consistent_service_name = isset($cache_settings['default']) ? $cache_settings['default'] : 'cache.backend.database';
+      $consistent_service_name = $cache_settings['default'] ?? 'cache.backend.database';
     }
 
     // Default the fast backend to APCu if it's available.
diff --git a/core/lib/Drupal/Core/Cache/MemoryBackend.php b/core/lib/Drupal/Core/Cache/MemoryBackend.php
index d402d70b543a..18e3658d3237 100644
--- a/core/lib/Drupal/Core/Cache/MemoryBackend.php
+++ b/core/lib/Drupal/Core/Cache/MemoryBackend.php
@@ -118,7 +118,7 @@ public function set($cid, $data, $expire = Cache::PERMANENT, array $tags = []) {
    */
   public function setMultiple(array $items = []) {
     foreach ($items as $cid => $item) {
-      $this->set($cid, $item['data'], isset($item['expire']) ? $item['expire'] : CacheBackendInterface::CACHE_PERMANENT, isset($item['tags']) ? $item['tags'] : []);
+      $this->set($cid, $item['data'], $item['expire'] ?? CacheBackendInterface::CACHE_PERMANENT, $item['tags'] ?? []);
     }
   }
 
diff --git a/core/lib/Drupal/Core/Cache/MemoryCounterBackend.php b/core/lib/Drupal/Core/Cache/MemoryCounterBackend.php
index 63d20076c6fb..634120133dd2 100644
--- a/core/lib/Drupal/Core/Cache/MemoryCounterBackend.php
+++ b/core/lib/Drupal/Core/Cache/MemoryCounterBackend.php
@@ -73,10 +73,10 @@ protected function increaseCounter($function, $cid) {
    */
   public function getCounter($method = NULL, $cid = NULL) {
     if ($method && $cid) {
-      return isset($this->counter[$method][$cid]) ? $this->counter[$method][$cid] : 0;
+      return $this->counter[$method][$cid] ?? 0;
     }
     elseif ($method) {
-      return isset($this->counter[$method]) ? $this->counter[$method] : [];
+      return $this->counter[$method] ?? [];
     }
     else {
       return $this->counter;
diff --git a/core/lib/Drupal/Core/Cache/PhpBackend.php b/core/lib/Drupal/Core/Cache/PhpBackend.php
index 96a2b834bdaf..85935b0b618a 100644
--- a/core/lib/Drupal/Core/Cache/PhpBackend.php
+++ b/core/lib/Drupal/Core/Cache/PhpBackend.php
@@ -84,7 +84,7 @@ protected function getByHash($cidhash, $allow_invalid = FALSE) {
    */
   public function setMultiple(array $items) {
     foreach ($items as $cid => $item) {
-      $this->set($cid, $item['data'], isset($item['expire']) ? $item['expire'] : CacheBackendInterface::CACHE_PERMANENT, isset($item['tags']) ? $item['tags'] : []);
+      $this->set($cid, $item['data'], $item['expire'] ?? CacheBackendInterface::CACHE_PERMANENT, $item['tags'] ?? []);
     }
   }
 
diff --git a/core/lib/Drupal/Core/Command/DbDumpCommand.php b/core/lib/Drupal/Core/Command/DbDumpCommand.php
index 404a38820a02..bb345e4d2659 100644
--- a/core/lib/Drupal/Core/Command/DbDumpCommand.php
+++ b/core/lib/Drupal/Core/Command/DbDumpCommand.php
@@ -186,7 +186,7 @@ protected function getTableSchema(Connection $connection, $table) {
       elseif (!isset($definition['fields'][$name]['size'])) {
         // Try use the provided length, if it doesn't exist default to 100. It's
         // not great but good enough for our dumps at this point.
-        $definition['fields'][$name]['length'] = isset($matches[2]) ? $matches[2] : 100;
+        $definition['fields'][$name]['length'] = $matches[2] ?? 100;
       }
 
       if (isset($row['Default'])) {
diff --git a/core/lib/Drupal/Core/Command/InstallCommand.php b/core/lib/Drupal/Core/Command/InstallCommand.php
index 5736bd1f5a1c..4b76025c11d1 100644
--- a/core/lib/Drupal/Core/Command/InstallCommand.php
+++ b/core/lib/Drupal/Core/Command/InstallCommand.php
@@ -328,8 +328,8 @@ protected function getProfiles($include_hidden = FALSE, $auto_select_distributio
       }
       // Determine the name of the profile; default to the internal name if none
       // is specified.
-      $name = isset($details['name']) ? $details['name'] : $profile->getName();
-      $description = isset($details['description']) ? $details['description'] : $name;
+      $name = $details['name'] ?? $profile->getName();
+      $description = $details['description'] ?? $name;
       $profiles[$profile->getName()] = $description;
 
       if ($auto_select_distributions && !empty($details['distribution'])) {
diff --git a/core/lib/Drupal/Core/Config/CachedStorage.php b/core/lib/Drupal/Core/Config/CachedStorage.php
index f43ede2a6375..c1633dbcb538 100644
--- a/core/lib/Drupal/Core/Config/CachedStorage.php
+++ b/core/lib/Drupal/Core/Config/CachedStorage.php
@@ -97,7 +97,7 @@ public function readMultiple(array $names) {
       // missing configuration objects as an explicit FALSE.
       $items = [];
       foreach ($names_to_get as $name) {
-        $data = isset($list[$name]) ? $list[$name] : FALSE;
+        $data = $list[$name] ?? FALSE;
         $data_to_return[$name] = $data;
         $items[$cache_keys_map[$name]] = ['data' => $data];
       }
diff --git a/core/lib/Drupal/Core/Config/Config.php b/core/lib/Drupal/Core/Config/Config.php
index 3a3ccbad3d57..abcb41fe7e78 100644
--- a/core/lib/Drupal/Core/Config/Config.php
+++ b/core/lib/Drupal/Core/Config/Config.php
@@ -91,7 +91,7 @@ public function get($key = '') {
     else {
       $parts = explode('.', $key);
       if (count($parts) == 1) {
-        return isset($this->overriddenData[$key]) ? $this->overriddenData[$key] : NULL;
+        return $this->overriddenData[$key] ?? NULL;
       }
       else {
         $value = NestedArray::getValue($this->overriddenData, $parts, $key_exists);
@@ -293,7 +293,7 @@ public function getOriginal($key = '', $apply_overrides = TRUE) {
     else {
       $parts = explode('.', $key);
       if (count($parts) == 1) {
-        return isset($original_data[$key]) ? $original_data[$key] : NULL;
+        return $original_data[$key] ?? NULL;
       }
       else {
         $value = NestedArray::getValue($original_data, $parts, $key_exists);
diff --git a/core/lib/Drupal/Core/Config/ConfigBase.php b/core/lib/Drupal/Core/Config/ConfigBase.php
index 4f445ea21c77..0bf960e93e4d 100644
--- a/core/lib/Drupal/Core/Config/ConfigBase.php
+++ b/core/lib/Drupal/Core/Config/ConfigBase.php
@@ -135,7 +135,7 @@ public function get($key = '') {
     else {
       $parts = explode('.', $key);
       if (count($parts) == 1) {
-        return isset($this->data[$key]) ? $this->data[$key] : NULL;
+        return $this->data[$key] ?? NULL;
       }
       else {
         $value = NestedArray::getValue($this->data, $parts, $key_exists);
diff --git a/core/lib/Drupal/Core/Config/ConfigCollectionInfo.php b/core/lib/Drupal/Core/Config/ConfigCollectionInfo.php
index 35fe0284e3ee..c68ac7255e68 100644
--- a/core/lib/Drupal/Core/Config/ConfigCollectionInfo.php
+++ b/core/lib/Drupal/Core/Config/ConfigCollectionInfo.php
@@ -68,7 +68,7 @@ public function getCollectionNames($include_default = TRUE) {
    *   if not.
    */
   public function getOverrideService($collection) {
-    return isset($this->collections[$collection]) ? $this->collections[$collection] : NULL;
+    return $this->collections[$collection] ?? NULL;
   }
 
 }
diff --git a/core/lib/Drupal/Core/Config/Entity/ConfigEntityBase.php b/core/lib/Drupal/Core/Config/Entity/ConfigEntityBase.php
index fad13076ec03..08731ab9d7a5 100644
--- a/core/lib/Drupal/Core/Config/Entity/ConfigEntityBase.php
+++ b/core/lib/Drupal/Core/Config/Entity/ConfigEntityBase.php
@@ -150,7 +150,7 @@ public function isNew() {
    * {@inheritdoc}
    */
   public function get($property_name) {
-    return isset($this->{$property_name}) ? $this->{$property_name} : NULL;
+    return $this->{$property_name} ?? NULL;
   }
 
   /**
@@ -228,8 +228,8 @@ public function createDuplicate() {
    * Helper callback for uasort() to sort configuration entities by weight and label.
    */
   public static function sort(ConfigEntityInterface $a, ConfigEntityInterface $b) {
-    $a_weight = isset($a->weight) ? $a->weight : 0;
-    $b_weight = isset($b->weight) ? $b->weight : 0;
+    $a_weight = $a->weight ?? 0;
+    $b_weight = $b->weight ?? 0;
     if ($a_weight == $b_weight) {
       $a_label = $a->label() ?? '';
       $b_label = $b->label() ?? '';
@@ -521,7 +521,7 @@ public function getThirdPartySetting($module, $key, $default = NULL) {
    * {@inheritdoc}
    */
   public function getThirdPartySettings($module) {
-    return isset($this->third_party_settings[$module]) ? $this->third_party_settings[$module] : [];
+    return $this->third_party_settings[$module] ?? [];
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Config/Entity/ConfigEntityStorage.php b/core/lib/Drupal/Core/Config/Entity/ConfigEntityStorage.php
index 1f91da8c69c5..d631a66f97dd 100644
--- a/core/lib/Drupal/Core/Config/Entity/ConfigEntityStorage.php
+++ b/core/lib/Drupal/Core/Config/Entity/ConfigEntityStorage.php
@@ -471,7 +471,7 @@ public function updateFromStorageRecord(ConfigEntityInterface $entity, array $va
    */
   public function loadOverrideFree($id) {
     $entities = $this->loadMultipleOverrideFree([$id]);
-    return isset($entities[$id]) ? $entities[$id] : NULL;
+    return $entities[$id] ?? NULL;
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Config/Entity/Query/Query.php b/core/lib/Drupal/Core/Config/Entity/Query/Query.php
index 757ce8ba6f1d..a18968873c83 100644
--- a/core/lib/Drupal/Core/Config/Entity/Query/Query.php
+++ b/core/lib/Drupal/Core/Config/Entity/Query/Query.php
@@ -92,8 +92,8 @@ public function execute() {
         $properties = explode('.', $field);
         foreach ($properties as $property) {
           if (isset($a[$property]) || isset($b[$property])) {
-            $a = isset($a[$property]) ? $a[$property] : NULL;
-            $b = isset($b[$property]) ? $b[$property] : NULL;
+            $a = $a[$property] ?? NULL;
+            $b = $b[$property] ?? NULL;
           }
         }
         return ($a <= $b) ? $direction : -$direction;
diff --git a/core/lib/Drupal/Core/Config/Schema/ArrayElement.php b/core/lib/Drupal/Core/Config/Schema/ArrayElement.php
index fed16db7d0ac..14e45059efce 100644
--- a/core/lib/Drupal/Core/Config/Schema/ArrayElement.php
+++ b/core/lib/Drupal/Core/Config/Schema/ArrayElement.php
@@ -33,7 +33,7 @@ protected function getAllKeys() {
   protected function parse() {
     $elements = [];
     foreach ($this->getAllKeys() as $key) {
-      $value = isset($this->value[$key]) ? $this->value[$key] : NULL;
+      $value = $this->value[$key] ?? NULL;
       $definition = $this->getElementDefinition($key);
       $elements[$key] = $this->createElement($definition, $value, $key);
     }
@@ -98,7 +98,7 @@ public function isEmpty() {
    * {@inheritdoc}
    */
   public function toArray() {
-    return isset($this->value) ? $this->value : [];
+    return $this->value ?? [];
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Config/Schema/Mapping.php b/core/lib/Drupal/Core/Config/Schema/Mapping.php
index 220a350490e2..3fa470be170e 100644
--- a/core/lib/Drupal/Core/Config/Schema/Mapping.php
+++ b/core/lib/Drupal/Core/Config/Schema/Mapping.php
@@ -21,8 +21,8 @@ class Mapping extends ArrayElement {
    * {@inheritdoc}
    */
   protected function getElementDefinition($key) {
-    $value = isset($this->value[$key]) ? $this->value[$key] : NULL;
-    $definition = isset($this->definition['mapping'][$key]) ? $this->definition['mapping'][$key] : [];
+    $value = $this->value[$key] ?? NULL;
+    $definition = $this->definition['mapping'][$key] ?? [];
     return $this->buildDataDefinition($definition, $value, $key);
   }
 
diff --git a/core/lib/Drupal/Core/Config/Schema/Sequence.php b/core/lib/Drupal/Core/Config/Schema/Sequence.php
index 547969bbccec..8e715baf6704 100644
--- a/core/lib/Drupal/Core/Config/Schema/Sequence.php
+++ b/core/lib/Drupal/Core/Config/Schema/Sequence.php
@@ -23,7 +23,7 @@ class Sequence extends ArrayElement {
    * {@inheritdoc}
    */
   protected function getElementDefinition($key) {
-    $value = isset($this->value[$key]) ? $this->value[$key] : NULL;
+    $value = $this->value[$key] ?? NULL;
     // @todo: Remove BC layer for sequence with hyphen in front. https://www.drupal.org/node/2444979
     $definition = [];
     if (isset($this->definition['sequence'][0])) {
diff --git a/core/lib/Drupal/Core/Config/Schema/SequenceDataDefinition.php b/core/lib/Drupal/Core/Config/Schema/SequenceDataDefinition.php
index c317e29e02cf..c616741a5cc8 100644
--- a/core/lib/Drupal/Core/Config/Schema/SequenceDataDefinition.php
+++ b/core/lib/Drupal/Core/Config/Schema/SequenceDataDefinition.php
@@ -22,7 +22,7 @@ class SequenceDataDefinition extends ListDataDefinition {
    *   be sorted).
    */
   public function getOrderBy() {
-    return isset($this->definition['orderby']) ? $this->definition['orderby'] : NULL;
+    return $this->definition['orderby'] ?? NULL;
   }
 
 }
diff --git a/core/lib/Drupal/Core/Cron.php b/core/lib/Drupal/Core/Cron.php
index 59e0a67ae623..c45dfbd28761 100644
--- a/core/lib/Drupal/Core/Cron.php
+++ b/core/lib/Drupal/Core/Cron.php
@@ -174,7 +174,7 @@ protected function processQueues() {
         $this->queueFactory->get($queue_name)->createQueue();
 
         $queue_worker = $this->queueManager->createInstance($queue_name);
-        $end = time() + (isset($info['cron']['time']) ? $info['cron']['time'] : 15);
+        $end = time() + ($info['cron']['time'] ?? 15);
         $queue = $this->queueFactory->get($queue_name);
         $lease_time = isset($info['cron']['time']) ?: NULL;
         while (time() < $end && ($item = $queue->claimItem($lease_time))) {
diff --git a/core/lib/Drupal/Core/Database/Connection.php b/core/lib/Drupal/Core/Database/Connection.php
index 9337ff1b384f..4f28e5b669a7 100644
--- a/core/lib/Drupal/Core/Database/Connection.php
+++ b/core/lib/Drupal/Core/Database/Connection.php
@@ -958,7 +958,7 @@ public function query($query, array $args = [], $options = []) {
           return $stmt->rowCount();
 
         case Database::RETURN_INSERT_ID:
-          $sequence_name = isset($options['sequence_name']) ? $options['sequence_name'] : NULL;
+          $sequence_name = $options['sequence_name'] ?? NULL;
           return $this->connection->lastInsertId($sequence_name);
 
         case Database::RETURN_NULL:
diff --git a/core/lib/Drupal/Core/Database/Driver/mysql/Schema.php b/core/lib/Drupal/Core/Database/Driver/mysql/Schema.php
index e05f10c86eb0..283035b835b7 100644
--- a/core/lib/Drupal/Core/Database/Driver/mysql/Schema.php
+++ b/core/lib/Drupal/Core/Database/Driver/mysql/Schema.php
@@ -313,7 +313,7 @@ protected function createKeysSql($spec) {
    *   Thrown if field specification is missing.
    */
   protected function getNormalizedIndexes(array $spec) {
-    $indexes = isset($spec['indexes']) ? $spec['indexes'] : [];
+    $indexes = $spec['indexes'] ?? [];
     foreach ($indexes as $index_name => $index_fields) {
       foreach ($index_fields as $index_key => $index_field) {
         // Get the name of the field from the index specification.
diff --git a/core/lib/Drupal/Core/Database/Driver/pgsql/Connection.php b/core/lib/Drupal/Core/Database/Driver/pgsql/Connection.php
index a5b6ae3296ca..9154a0188a9d 100644
--- a/core/lib/Drupal/Core/Database/Driver/pgsql/Connection.php
+++ b/core/lib/Drupal/Core/Database/Driver/pgsql/Connection.php
@@ -263,7 +263,7 @@ public function createDatabase($database) {
   }
 
   public function mapConditionOperator($operator) {
-    return isset(static::$postgresqlConditionOperatorMap[$operator]) ? static::$postgresqlConditionOperatorMap[$operator] : NULL;
+    return static::$postgresqlConditionOperatorMap[$operator] ?? NULL;
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Database/Driver/sqlite/Connection.php b/core/lib/Drupal/Core/Database/Driver/sqlite/Connection.php
index 4f4663d5cb5e..210b2a64088d 100644
--- a/core/lib/Drupal/Core/Database/Driver/sqlite/Connection.php
+++ b/core/lib/Drupal/Core/Database/Driver/sqlite/Connection.php
@@ -428,7 +428,7 @@ public function createDatabase($database) {
   }
 
   public function mapConditionOperator($operator) {
-    return isset(static::$sqliteConditionOperatorMap[$operator]) ? static::$sqliteConditionOperatorMap[$operator] : NULL;
+    return static::$sqliteConditionOperatorMap[$operator] ?? NULL;
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Database/Query/Condition.php b/core/lib/Drupal/Core/Database/Query/Condition.php
index 16793b803403..80198371bb28 100644
--- a/core/lib/Drupal/Core/Database/Query/Condition.php
+++ b/core/lib/Drupal/Core/Database/Query/Condition.php
@@ -399,7 +399,7 @@ protected function mapConditionOperator($operator) {
       // do not need the more expensive mb_strtoupper() because SQL statements
       // are ASCII.
       $operator = strtoupper($operator);
-      $return = isset(static::$conditionOperatorMap[$operator]) ? static::$conditionOperatorMap[$operator] : [];
+      $return = static::$conditionOperatorMap[$operator] ?? [];
     }
 
     $return += ['operator' => $operator];
diff --git a/core/lib/Drupal/Core/Database/Query/Merge.php b/core/lib/Drupal/Core/Database/Query/Merge.php
index b758f2214e15..90a9abab1e11 100644
--- a/core/lib/Drupal/Core/Database/Query/Merge.php
+++ b/core/lib/Drupal/Core/Database/Query/Merge.php
@@ -331,7 +331,7 @@ public function keys(array $fields, array $values = []) {
   public function key($field, $value = NULL) {
     // @todo D9: Remove this backwards-compatibility shim.
     if (is_array($field)) {
-      $this->keys($field, isset($value) ? $value : []);
+      $this->keys($field, $value ?? []);
     }
     else {
       $this->keys([$field => $value]);
diff --git a/core/lib/Drupal/Core/Database/Query/Select.php b/core/lib/Drupal/Core/Database/Query/Select.php
index 8a8672367532..5da38481662c 100644
--- a/core/lib/Drupal/Core/Database/Query/Select.php
+++ b/core/lib/Drupal/Core/Database/Query/Select.php
@@ -133,7 +133,7 @@ class Select extends Query implements SelectInterface {
   public function __construct(Connection $connection, $table, $alias = NULL, $options = []) {
     $options['return'] = Database::RETURN_STATEMENT;
     parent::__construct($connection, $options);
-    $conjunction = isset($options['conjunction']) ? $options['conjunction'] : 'AND';
+    $conjunction = $options['conjunction'] ?? 'AND';
     $this->condition = $this->connection->condition($conjunction);
     $this->having = $this->connection->condition($conjunction);
     $this->addJoin(NULL, $table, $alias);
@@ -180,7 +180,7 @@ public function addMetaData($key, $object) {
    * {@inheritdoc}
    */
   public function getMetaData($key) {
-    return isset($this->alterMetaData[$key]) ? $this->alterMetaData[$key] : NULL;
+    return $this->alterMetaData[$key] ?? NULL;
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Database/StatementPrefetch.php b/core/lib/Drupal/Core/Database/StatementPrefetch.php
index 8c083e37babf..ab68dec877b4 100644
--- a/core/lib/Drupal/Core/Database/StatementPrefetch.php
+++ b/core/lib/Drupal/Core/Database/StatementPrefetch.php
@@ -435,7 +435,7 @@ public function rowCount() {
   public function fetch($fetch_style = NULL, $cursor_orientation = \PDO::FETCH_ORI_NEXT, $cursor_offset = NULL) {
     if (isset($this->currentRow)) {
       // Set the fetch parameter.
-      $this->fetchStyle = isset($fetch_style) ? $fetch_style : $this->defaultFetchStyle;
+      $this->fetchStyle = $fetch_style ?? $this->defaultFetchStyle;
       $this->fetchOptions = $this->defaultFetchOptions;
 
       // Grab the row in the format specified above.
@@ -521,7 +521,7 @@ public function fetchAssoc() {
    * {@inheritdoc}
    */
   public function fetchAll($mode = NULL, $column_index = NULL, $constructor_arguments = NULL) {
-    $this->fetchStyle = isset($mode) ? $mode : $this->defaultFetchStyle;
+    $this->fetchStyle = $mode ?? $this->defaultFetchStyle;
     $this->fetchOptions = $this->defaultFetchOptions;
     if (isset($column_index)) {
       $this->fetchOptions['column'] = $column_index;
@@ -586,7 +586,7 @@ public function fetchAllKeyed($key_index = 0, $value_index = 1) {
    * {@inheritdoc}
    */
   public function fetchAllAssoc($key, $fetch_style = NULL) {
-    $this->fetchStyle = isset($fetch_style) ? $fetch_style : $this->defaultFetchStyle;
+    $this->fetchStyle = $fetch_style ?? $this->defaultFetchStyle;
     $this->fetchOptions = $this->defaultFetchOptions;
 
     $result = [];
diff --git a/core/lib/Drupal/Core/Datetime/Element/Datetime.php b/core/lib/Drupal/Core/Datetime/Element/Datetime.php
index e3bfa9c59a3c..e1d0aea4720a 100644
--- a/core/lib/Drupal/Core/Datetime/Element/Datetime.php
+++ b/core/lib/Drupal/Core/Datetime/Element/Datetime.php
@@ -105,7 +105,7 @@ public static function valueCallback(&$element, $input, FormStateInterface $form
       ];
     }
     else {
-      $date = isset($element['#default_value']) ? $element['#default_value'] : NULL;
+      $date = $element['#default_value'] ?? NULL;
       if ($date instanceof DrupalDateTime && !$date->hasErrors()) {
         $date->setTimezone(new \DateTimeZone($element['#date_timezone']));
         $input = [
diff --git a/core/lib/Drupal/Core/DependencyInjection/Compiler/MimeTypePass.php b/core/lib/Drupal/Core/DependencyInjection/Compiler/MimeTypePass.php
index 87294d933a7c..5daa81a65587 100644
--- a/core/lib/Drupal/Core/DependencyInjection/Compiler/MimeTypePass.php
+++ b/core/lib/Drupal/Core/DependencyInjection/Compiler/MimeTypePass.php
@@ -42,7 +42,7 @@ public function process(ContainerBuilder $container) {
           throw new LogicException("Service '$id' does not implement $interface.");
         }
       }
-      $handlers[$id] = isset($attributes[0]['priority']) ? $attributes[0]['priority'] : 0;
+      $handlers[$id] = $attributes[0]['priority'] ?? 0;
       $interfaces[$id] = $handler->getClass();
     }
     if (empty($handlers)) {
diff --git a/core/lib/Drupal/Core/DependencyInjection/Compiler/RegisterEventSubscribersPass.php b/core/lib/Drupal/Core/DependencyInjection/Compiler/RegisterEventSubscribersPass.php
index aa943c724650..c2c28b38e774 100644
--- a/core/lib/Drupal/Core/DependencyInjection/Compiler/RegisterEventSubscribersPass.php
+++ b/core/lib/Drupal/Core/DependencyInjection/Compiler/RegisterEventSubscribersPass.php
@@ -40,12 +40,12 @@ public function process(ContainerBuilder $container) {
           $event_subscriber_info[$event_name][$priority][] = ['service' => [$id, $params]];
         }
         elseif (is_string($params[0])) {
-          $priority = isset($params[1]) ? $params[1] : 0;
+          $priority = $params[1] ?? 0;
           $event_subscriber_info[$event_name][$priority][] = ['service' => [$id, $params[0]]];
         }
         else {
           foreach ($params as $listener) {
-            $priority = isset($listener[1]) ? $listener[1] : 0;
+            $priority = $listener[1] ?? 0;
             $event_subscriber_info[$event_name][$priority][] = ['service' => [$id, $listener[0]]];
           }
         }
diff --git a/core/lib/Drupal/Core/DependencyInjection/Compiler/StackedKernelPass.php b/core/lib/Drupal/Core/DependencyInjection/Compiler/StackedKernelPass.php
index a6f79c6820e2..21f77dd55dad 100644
--- a/core/lib/Drupal/Core/DependencyInjection/Compiler/StackedKernelPass.php
+++ b/core/lib/Drupal/Core/DependencyInjection/Compiler/StackedKernelPass.php
@@ -68,7 +68,7 @@ public function process(ContainerBuilder $container) {
     $responders = [];
 
     foreach ($container->findTaggedServiceIds('http_middleware') as $id => $attributes) {
-      $priorities[$id] = isset($attributes[0]['priority']) ? $attributes[0]['priority'] : 0;
+      $priorities[$id] = $attributes[0]['priority'] ?? 0;
       $middlewares[$id] = $container->getDefinition($id);
       $responders[$id] = !empty($attributes[0]['responder']);
     }
diff --git a/core/lib/Drupal/Core/DependencyInjection/Compiler/StackedSessionHandlerPass.php b/core/lib/Drupal/Core/DependencyInjection/Compiler/StackedSessionHandlerPass.php
index cf535dfc8b1f..6862cc465f34 100644
--- a/core/lib/Drupal/Core/DependencyInjection/Compiler/StackedSessionHandlerPass.php
+++ b/core/lib/Drupal/Core/DependencyInjection/Compiler/StackedSessionHandlerPass.php
@@ -24,7 +24,7 @@ public function process(ContainerBuilder $container) {
     $priorities = [];
 
     foreach ($container->findTaggedServiceIds('session_handler_proxy') as $id => $attributes) {
-      $priorities[$id] = isset($attributes[0]['priority']) ? $attributes[0]['priority'] : 0;
+      $priorities[$id] = $attributes[0]['priority'] ?? 0;
       $session_handler_proxies[$id] = $container->getDefinition($id);
     }
 
diff --git a/core/lib/Drupal/Core/DependencyInjection/Compiler/TaggedHandlersPass.php b/core/lib/Drupal/Core/DependencyInjection/Compiler/TaggedHandlersPass.php
index 8a79378919ee..8022440efafb 100644
--- a/core/lib/Drupal/Core/DependencyInjection/Compiler/TaggedHandlersPass.php
+++ b/core/lib/Drupal/Core/DependencyInjection/Compiler/TaggedHandlersPass.php
@@ -134,9 +134,9 @@ public function process(ContainerBuilder $container) {
    *   The service container.
    */
   protected function processServiceCollectorPass(array $pass, $consumer_id, ContainerBuilder $container) {
-    $tag = isset($pass['tag']) ? $pass['tag'] : $consumer_id;
-    $method_name = isset($pass['call']) ? $pass['call'] : 'addHandler';
-    $required = isset($pass['required']) ? $pass['required'] : FALSE;
+    $tag = $pass['tag'] ?? $consumer_id;
+    $method_name = $pass['call'] ?? 'addHandler';
+    $required = $pass['required'] ?? FALSE;
 
     // Determine parameters.
     $consumer = $container->getDefinition($consumer_id);
@@ -181,10 +181,10 @@ protected function processServiceCollectorPass(array $pass, $consumer_id, Contai
       if (!is_subclass_of($handler->getClass(), $interface)) {
         throw new LogicException("Service '$id' for consumer '$consumer_id' does not implement $interface.");
       }
-      $handlers[$id] = isset($attributes[0]['priority']) ? $attributes[0]['priority'] : 0;
+      $handlers[$id] = $attributes[0]['priority'] ?? 0;
       // Keep track of other tagged handlers arguments.
       foreach ($extra_params as $name => $pos) {
-        $extra_arguments[$id][$pos] = isset($attributes[0][$name]) ? $attributes[0][$name] : $params[$pos]->getDefaultValue();
+        $extra_arguments[$id][$pos] = $attributes[0][$name] ?? $params[$pos]->getDefaultValue();
       }
     }
 
@@ -228,15 +228,15 @@ protected function processServiceCollectorPass(array $pass, $consumer_id, Contai
    *   The service container.
    */
   protected function processServiceIdCollectorPass(array $pass, $consumer_id, ContainerBuilder $container) {
-    $tag = isset($pass['tag']) ? $pass['tag'] : $consumer_id;
-    $required = isset($pass['required']) ? $pass['required'] : FALSE;
+    $tag = $pass['tag'] ?? $consumer_id;
+    $required = $pass['required'] ?? FALSE;
 
     $consumer = $container->getDefinition($consumer_id);
 
     // Find all tagged handlers.
     $handlers = [];
     foreach ($this->tagCache[$tag] ?? [] as $id => $attributes) {
-      $handlers[$id] = isset($attributes[0]['priority']) ? $attributes[0]['priority'] : 0;
+      $handlers[$id] = $attributes[0]['priority'] ?? 0;
     }
 
     if ($required && empty($handlers)) {
diff --git a/core/lib/Drupal/Core/DependencyInjection/YamlFileLoader.php b/core/lib/Drupal/Core/DependencyInjection/YamlFileLoader.php
index 55cd154e0502..cab99558f0aa 100644
--- a/core/lib/Drupal/Core/DependencyInjection/YamlFileLoader.php
+++ b/core/lib/Drupal/Core/DependencyInjection/YamlFileLoader.php
@@ -311,8 +311,8 @@ private function parseDefinition($id, $service, $file)
         }
 
         if (isset($service['decorates'])) {
-            $renameId = isset($service['decoration_inner_name']) ? $service['decoration_inner_name'] : null;
-            $priority = isset($service['decoration_priority']) ? $service['decoration_priority'] : 0;
+            $renameId = $service['decoration_inner_name'] ?? null;
+            $priority = $service['decoration_priority'] ?? 0;
             $definition->setDecoratedService($service['decorates'], $renameId, $priority);
         }
 
diff --git a/core/lib/Drupal/Core/DrupalKernel.php b/core/lib/Drupal/Core/DrupalKernel.php
index 04ce6ca97b03..d9c18029994a 100644
--- a/core/lib/Drupal/Core/DrupalKernel.php
+++ b/core/lib/Drupal/Core/DrupalKernel.php
@@ -635,7 +635,7 @@ public function discoverServiceProviders() {
         $this->containerNeedsDumping = FALSE;
         $GLOBALS['conf']['container_service_providers']['InstallerServiceProvider'] = 'Drupal\Core\Installer\InstallerServiceProvider';
       }
-      $this->moduleList = isset($extensions['module']) ? $extensions['module'] : [];
+      $this->moduleList = $extensions['module'] ?? [];
     }
     $module_filenames = $this->getModuleFileNames();
     $this->classLoaderAddMultiplePsr4($this->getModuleNamespacesPsr4($module_filenames));
@@ -778,7 +778,7 @@ protected function moduleData($module) {
       // Now find modules.
       $this->moduleData = $profiles + $listing->scan('module');
     }
-    return isset($this->moduleData[$module]) ? $this->moduleData[$module] : FALSE;
+    return $this->moduleData[$module] ?? FALSE;
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Entity/ContentEntityBase.php b/core/lib/Drupal/Core/Entity/ContentEntityBase.php
index 3913143156ff..ee965898bc6a 100644
--- a/core/lib/Drupal/Core/Entity/ContentEntityBase.php
+++ b/core/lib/Drupal/Core/Entity/ContentEntityBase.php
@@ -606,7 +606,7 @@ protected function getTranslatedField($name, $langcode) {
           // $this->defaultLangcode might not be set if we are initializing the
           // default language code cache, in which case there is no valid
           // langcode to assign.
-          $field_langcode = isset($this->defaultLangcode) ? $this->defaultLangcode : LanguageInterface::LANGCODE_NOT_SPECIFIED;
+          $field_langcode = $this->defaultLangcode ?? LanguageInterface::LANGCODE_NOT_SPECIFIED;
         }
         else {
           $field_langcode = $langcode;
diff --git a/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php b/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php
index a395e3bc4157..d1044043a577 100644
--- a/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php
+++ b/core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php
@@ -632,7 +632,7 @@ protected function preLoad(array &$ids = NULL) {
   public function loadRevision($revision_id) {
     $revisions = $this->loadMultipleRevisions([$revision_id]);
 
-    return isset($revisions[$revision_id]) ? $revisions[$revision_id] : NULL;
+    return $revisions[$revision_id] ?? NULL;
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Entity/ContentEntityType.php b/core/lib/Drupal/Core/Entity/ContentEntityType.php
index 5904851dabfc..73f07bf0916e 100644
--- a/core/lib/Drupal/Core/Entity/ContentEntityType.php
+++ b/core/lib/Drupal/Core/Entity/ContentEntityType.php
@@ -65,7 +65,7 @@ public function getRevisionMetadataKeys() {
    */
   public function getRevisionMetadataKey($key) {
     $keys = $this->getRevisionMetadataKeys();
-    return isset($keys[$key]) ? $keys[$key] : FALSE;
+    return $keys[$key] ?? FALSE;
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Entity/Controller/EntityController.php b/core/lib/Drupal/Core/Entity/Controller/EntityController.php
index 5d8f25698b4a..4dd93475fb72 100644
--- a/core/lib/Drupal/Core/Entity/Controller/EntityController.php
+++ b/core/lib/Drupal/Core/Entity/Controller/EntityController.php
@@ -183,7 +183,7 @@ public function addPage($entity_type_id) {
     foreach ($bundles as $bundle_name => $bundle_info) {
       $build['#bundles'][$bundle_name] = [
         'label' => $bundle_info['label'],
-        'description' => isset($bundle_info['description']) ? $bundle_info['description'] : '',
+        'description' => $bundle_info['description'] ?? '',
         'add_link' => Link::createFromRoute($bundle_info['label'], $form_route_name, [$bundle_argument => $bundle_name]),
       ];
     }
diff --git a/core/lib/Drupal/Core/Entity/Element/EntityAutocomplete.php b/core/lib/Drupal/Core/Entity/Element/EntityAutocomplete.php
index 1083f1127ae1..083de1d63975 100644
--- a/core/lib/Drupal/Core/Entity/Element/EntityAutocomplete.php
+++ b/core/lib/Drupal/Core/Entity/Element/EntityAutocomplete.php
@@ -167,12 +167,12 @@ public static function processEntityAutocomplete(array &$element, FormStateInter
         throw new \InvalidArgumentException("Missing required #autocreate['bundle'] parameter.");
       }
       // Default the autocreate user ID to the current user.
-      $element['#autocreate']['uid'] = isset($element['#autocreate']['uid']) ? $element['#autocreate']['uid'] : \Drupal::currentUser()->id();
+      $element['#autocreate']['uid'] = $element['#autocreate']['uid'] ?? \Drupal::currentUser()->id();
     }
 
     // Store the selection settings in the key/value store and pass a hashed key
     // in the route parameters.
-    $selection_settings = isset($element['#selection_settings']) ? $element['#selection_settings'] : [];
+    $selection_settings = $element['#selection_settings'] ?? [];
     $data = serialize($selection_settings) . $element['#target_type'] . $element['#selection_handler'];
     $selection_settings_key = Crypt::hmacBase64($data, Settings::getHashSalt());
 
@@ -287,7 +287,7 @@ public static function validateEntityAutocomplete(array &$element, FormStateInte
       // matches (tags).
       if (!$element['#tags'] && !empty($value)) {
         $last_value = $value[count($value) - 1];
-        $value = isset($last_value['target_id']) ? $last_value['target_id'] : $last_value;
+        $value = $last_value['target_id'] ?? $last_value;
       }
     }
 
diff --git a/core/lib/Drupal/Core/Entity/Entity/EntityFormDisplay.php b/core/lib/Drupal/Core/Entity/Entity/EntityFormDisplay.php
index dfa011ed55f7..3dcffd2cfa4b 100644
--- a/core/lib/Drupal/Core/Entity/Entity/EntityFormDisplay.php
+++ b/core/lib/Drupal/Core/Entity/Entity/EntityFormDisplay.php
@@ -216,7 +216,7 @@ public function processForm($element, FormStateInterface $form_state, $form) {
 
     // Hide extra fields.
     $extra_fields = \Drupal::service('entity_field.manager')->getExtraFields($this->targetEntityType, $this->bundle);
-    $extra_fields = isset($extra_fields['form']) ? $extra_fields['form'] : [];
+    $extra_fields = $extra_fields['form'] ?? [];
     foreach ($extra_fields as $extra_field => $info) {
       if (!$this->getComponent($extra_field)) {
         $element[$extra_field]['#access'] = FALSE;
diff --git a/core/lib/Drupal/Core/Entity/EntityBase.php b/core/lib/Drupal/Core/Entity/EntityBase.php
index 68dbe437c0d3..44a673489679 100644
--- a/core/lib/Drupal/Core/Entity/EntityBase.php
+++ b/core/lib/Drupal/Core/Entity/EntityBase.php
@@ -104,14 +104,14 @@ protected function uuidGenerator() {
    * {@inheritdoc}
    */
   public function id() {
-    return isset($this->id) ? $this->id : NULL;
+    return $this->id ?? NULL;
   }
 
   /**
    * {@inheritdoc}
    */
   public function uuid() {
-    return isset($this->uuid) ? $this->uuid : NULL;
+    return $this->uuid ?? NULL;
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Entity/EntityDisplayBase.php b/core/lib/Drupal/Core/Entity/EntityDisplayBase.php
index c2b67869305c..7dce1ff3c307 100644
--- a/core/lib/Drupal/Core/Entity/EntityDisplayBase.php
+++ b/core/lib/Drupal/Core/Entity/EntityDisplayBase.php
@@ -158,7 +158,7 @@ protected function init() {
       // Fill in defaults for extra fields.
       $context = $this->displayContext == 'view' ? 'display' : $this->displayContext;
       $extra_fields = \Drupal::service('entity_field.manager')->getExtraFields($this->targetEntityType, $this->bundle);
-      $extra_fields = isset($extra_fields[$context]) ? $extra_fields[$context] : [];
+      $extra_fields = $extra_fields[$context] ?? [];
       foreach ($extra_fields as $name => $definition) {
         if (!isset($this->content[$name]) && !isset($this->hidden[$name])) {
           // Extra fields are visible by default unless they explicitly say so.
@@ -328,7 +328,7 @@ public function getComponents() {
    * {@inheritdoc}
    */
   public function getComponent($name) {
-    return isset($this->content[$name]) ? $this->content[$name] : NULL;
+    return $this->content[$name] ?? NULL;
   }
 
   /**
@@ -391,7 +391,7 @@ public function getHighestWeight() {
    */
   protected function getFieldDefinition($field_name) {
     $definitions = $this->getFieldDefinitions();
-    return isset($definitions[$field_name]) ? $definitions[$field_name] : NULL;
+    return $definitions[$field_name] ?? NULL;
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Entity/EntityFieldManager.php b/core/lib/Drupal/Core/Entity/EntityFieldManager.php
index c8459426125d..4b1b9b1d7fe4 100644
--- a/core/lib/Drupal/Core/Entity/EntityFieldManager.php
+++ b/core/lib/Drupal/Core/Entity/EntityFieldManager.php
@@ -656,7 +656,7 @@ public function getExtraFields($entity_type_id, $bundle) {
 
     $extra = $this->moduleHandler->invokeAll('entity_extra_field_info');
     $this->moduleHandler->alter('entity_extra_field_info', $extra);
-    $info = isset($extra[$entity_type_id][$bundle]) ? $extra[$entity_type_id][$bundle] : [];
+    $info = $extra[$entity_type_id][$bundle] ?? [];
     $info += [
       'form' => [],
       'display' => [],
diff --git a/core/lib/Drupal/Core/Entity/EntityStorageBase.php b/core/lib/Drupal/Core/Entity/EntityStorageBase.php
index ca3e1e04d378..6f970268090c 100644
--- a/core/lib/Drupal/Core/Entity/EntityStorageBase.php
+++ b/core/lib/Drupal/Core/Entity/EntityStorageBase.php
@@ -294,7 +294,7 @@ protected function doCreate(array $values) {
   public function load($id) {
     assert(!is_null($id), sprintf('Cannot load the "%s" entity with NULL ID.', $this->entityTypeId));
     $entities = $this->loadMultiple([$id]);
-    return isset($entities[$id]) ? $entities[$id] : NULL;
+    return $entities[$id] ?? NULL;
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Entity/EntityType.php b/core/lib/Drupal/Core/Entity/EntityType.php
index 4b8abf1e1d3d..527930c0670b 100644
--- a/core/lib/Drupal/Core/Entity/EntityType.php
+++ b/core/lib/Drupal/Core/Entity/EntityType.php
@@ -332,10 +332,10 @@ public function __construct($definition) {
    */
   public function get($property) {
     if (property_exists($this, $property)) {
-      $value = isset($this->{$property}) ? $this->{$property} : NULL;
+      $value = $this->{$property} ?? NULL;
     }
     else {
-      $value = isset($this->additional[$property]) ? $this->additional[$property] : NULL;
+      $value = $this->additional[$property] ?? NULL;
     }
     return $value;
   }
@@ -393,7 +393,7 @@ public function getKeys() {
    */
   public function getKey($key) {
     $keys = $this->getKeys();
-    return isset($keys[$key]) ? $keys[$key] : FALSE;
+    return $keys[$key] ?? FALSE;
   }
 
   /**
@@ -627,7 +627,7 @@ public function getLinkTemplates() {
    */
   public function getLinkTemplate($key) {
     $links = $this->getLinkTemplates();
-    return isset($links[$key]) ? $links[$key] : FALSE;
+    return $links[$key] ?? FALSE;
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Entity/EntityTypeBundleInfo.php b/core/lib/Drupal/Core/Entity/EntityTypeBundleInfo.php
index aa917c845cb5..8aef5ee039e1 100644
--- a/core/lib/Drupal/Core/Entity/EntityTypeBundleInfo.php
+++ b/core/lib/Drupal/Core/Entity/EntityTypeBundleInfo.php
@@ -78,7 +78,7 @@ public function __construct(EntityTypeManagerInterface $entity_type_manager, Lan
    */
   public function getBundleInfo($entity_type_id) {
     $bundle_info = $this->getAllBundleInfo();
-    return isset($bundle_info[$entity_type_id]) ? $bundle_info[$entity_type_id] : [];
+    return $bundle_info[$entity_type_id] ?? [];
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Entity/EntityTypeManager.php b/core/lib/Drupal/Core/Entity/EntityTypeManager.php
index fae13959578d..8b7daa354fed 100644
--- a/core/lib/Drupal/Core/Entity/EntityTypeManager.php
+++ b/core/lib/Drupal/Core/Entity/EntityTypeManager.php
@@ -232,7 +232,7 @@ public function getRouteProviders($entity_type_id) {
       }
     }
 
-    return isset($this->handlers['route_provider'][$entity_type_id]) ? $this->handlers['route_provider'][$entity_type_id] : [];
+    return $this->handlers['route_provider'][$entity_type_id] ?? [];
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Entity/EntityViewBuilder.php b/core/lib/Drupal/Core/Entity/EntityViewBuilder.php
index 90e56472cf8c..2ff43fcb1622 100644
--- a/core/lib/Drupal/Core/Entity/EntityViewBuilder.php
+++ b/core/lib/Drupal/Core/Entity/EntityViewBuilder.php
@@ -482,7 +482,7 @@ public function viewFieldItem(FieldItemInterface $item, $display = []) {
     $elements = $this->viewField($clone->{$field_name}, $display);
 
     // Extract the part of the render array we need.
-    $output = isset($elements[0]) ? $elements[0] : [];
+    $output = $elements[0] ?? [];
     if (isset($elements['#access'])) {
       $output['#access'] = $elements['#access'];
     }
diff --git a/core/lib/Drupal/Core/Entity/Query/QueryBase.php b/core/lib/Drupal/Core/Entity/Query/QueryBase.php
index da5c76031b55..85878aa75cbc 100644
--- a/core/lib/Drupal/Core/Entity/Query/QueryBase.php
+++ b/core/lib/Drupal/Core/Entity/Query/QueryBase.php
@@ -330,7 +330,7 @@ public function tableSort(&$headers) {
     $direction = TableSort::getSort($headers, \Drupal::request());
     foreach ($headers as $header) {
       if (is_array($header) && ($header['data'] == $order['name'])) {
-        $this->sort($header['specifier'], $direction, isset($header['langcode']) ? $header['langcode'] : NULL);
+        $this->sort($header['specifier'], $direction, $header['langcode'] ?? NULL);
       }
     }
 
@@ -385,7 +385,7 @@ public function addMetaData($key, $object) {
    * {@inheritdoc}
    */
   public function getMetaData($key) {
-    return isset($this->alterMetaData[$key]) ? $this->alterMetaData[$key] : NULL;
+    return $this->alterMetaData[$key] ?? NULL;
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Entity/Query/Sql/Query.php b/core/lib/Drupal/Core/Entity/Query/Sql/Query.php
index c2699dd4c906..ad66a4297210 100644
--- a/core/lib/Drupal/Core/Entity/Query/Sql/Query.php
+++ b/core/lib/Drupal/Core/Entity/Query/Sql/Query.php
@@ -250,7 +250,7 @@ protected function finish() {
       $this->sqlQuery->groupBy($field);
     }
     foreach ($this->sqlFields as $field) {
-      $this->sqlQuery->addField($field[0], $field[1], isset($field[2]) ? $field[2] : NULL);
+      $this->sqlQuery->addField($field[0], $field[1], $field[2] ?? NULL);
     }
     return $this;
   }
diff --git a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php
index 7f307debaf74..a21f2646987d 100644
--- a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php
+++ b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php
@@ -1048,7 +1048,7 @@ protected function mapToStorageRecord(ContentEntityInterface $entity, $table_nam
           $value = ($item = $entity->$field_name->first()) ? $item->getValue() : [];
         }
         else {
-          $value = isset($entity->$field_name->$column_name) ? $entity->$field_name->$column_name : NULL;
+          $value = $entity->$field_name->$column_name ?? NULL;
         }
         if (!empty($definition->getSchema()['columns'][$column_name]['serialize'])) {
           $value = serialize($value);
diff --git a/core/lib/Drupal/Core/Entity/TypedData/EntityDataDefinition.php b/core/lib/Drupal/Core/Entity/TypedData/EntityDataDefinition.php
index 3e362317b574..e3910fd6f01e 100644
--- a/core/lib/Drupal/Core/Entity/TypedData/EntityDataDefinition.php
+++ b/core/lib/Drupal/Core/Entity/TypedData/EntityDataDefinition.php
@@ -60,10 +60,7 @@ public static function createFromDataType($data_type) {
     if ($parts[0] != 'entity') {
       throw new \InvalidArgumentException('Data type must be in the form of "entity:ENTITY_TYPE:BUNDLE."');
     }
-    return static::create(
-      isset($parts[1]) ? $parts[1] : NULL,
-      isset($parts[2]) ? $parts[2] : NULL
-    );
+    return static::create($parts[1] ?? NULL, $parts[2] ?? NULL);
   }
 
   /**
@@ -120,7 +117,7 @@ public function getDataType() {
    * {@inheritdoc}
    */
   public function getEntityTypeId() {
-    return isset($this->definition['constraints']['EntityType']) ? $this->definition['constraints']['EntityType'] : NULL;
+    return $this->definition['constraints']['EntityType'] ?? NULL;
   }
 
   /**
@@ -134,7 +131,7 @@ public function setEntityTypeId($entity_type_id) {
    * {@inheritdoc}
    */
   public function getBundles() {
-    $bundle = isset($this->definition['constraints']['Bundle']) ? $this->definition['constraints']['Bundle'] : NULL;
+    $bundle = $this->definition['constraints']['Bundle'] ?? NULL;
     return is_string($bundle) ? [$bundle] : $bundle;
   }
 
diff --git a/core/lib/Drupal/Core/EventSubscriber/ConfigImportSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/ConfigImportSubscriber.php
index dd0b355c79f1..906dab45deb9 100644
--- a/core/lib/Drupal/Core/EventSubscriber/ConfigImportSubscriber.php
+++ b/core/lib/Drupal/Core/EventSubscriber/ConfigImportSubscriber.php
@@ -92,7 +92,7 @@ protected function validateModules(ConfigImporter $config_importer) {
 
     // Get the install profile from the site's configuration.
     $current_core_extension = $config_importer->getStorageComparer()->getTargetStorage()->read('core.extension');
-    $install_profile = isset($current_core_extension['profile']) ? $current_core_extension['profile'] : NULL;
+    $install_profile = $current_core_extension['profile'] ?? NULL;
 
     // Ensure the profile is not changing.
     if ($install_profile !== $core_extension['profile']) {
diff --git a/core/lib/Drupal/Core/Extension/InfoParserDynamic.php b/core/lib/Drupal/Core/Extension/InfoParserDynamic.php
index 718be0aa53b1..7189560d1720 100644
--- a/core/lib/Drupal/Core/Extension/InfoParserDynamic.php
+++ b/core/lib/Drupal/Core/Extension/InfoParserDynamic.php
@@ -102,7 +102,7 @@ public function parse($filename) {
 
       // Determine if the extension is compatible with the current version of
       // Drupal core.
-      $core_version_constraint = isset($parsed_info['core_version_requirement']) ? $parsed_info['core_version_requirement'] : $parsed_info['core'];
+      $core_version_constraint = $parsed_info['core_version_requirement'] ?? $parsed_info['core'];
       $parsed_info['core_incompatible'] = !Semver::satisfies(\Drupal::VERSION, $core_version_constraint);
       if (isset($parsed_info['version']) && $parsed_info['version'] === 'VERSION') {
         $parsed_info['version'] = \Drupal::VERSION;
diff --git a/core/lib/Drupal/Core/Extension/ModuleExtensionList.php b/core/lib/Drupal/Core/Extension/ModuleExtensionList.php
index ab4be3869846..5aed60c0b04c 100644
--- a/core/lib/Drupal/Core/Extension/ModuleExtensionList.php
+++ b/core/lib/Drupal/Core/Extension/ModuleExtensionList.php
@@ -162,7 +162,7 @@ protected function doList() {
     // Add status, weight, and schema version.
     $installed_modules = $this->configFactory->get('core.extension')->get('module') ?: [];
     foreach ($extensions as $name => $module) {
-      $module->weight = isset($installed_modules[$name]) ? $installed_modules[$name] : 0;
+      $module->weight = $installed_modules[$name] ?? 0;
       $module->status = (int) isset($installed_modules[$name]);
       $module->schema_version = UpdateHookRegistry::SCHEMA_UNINSTALLED;
     }
diff --git a/core/lib/Drupal/Core/Extension/ModuleHandler.php b/core/lib/Drupal/Core/Extension/ModuleHandler.php
index 74b0834ab3c8..1b22117ae227 100644
--- a/core/lib/Drupal/Core/Extension/ModuleHandler.php
+++ b/core/lib/Drupal/Core/Extension/ModuleHandler.php
@@ -233,8 +233,8 @@ public function buildModuleDependencies(array $modules) {
     $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'] : [];
-      $modules[$module_name]->requires = isset($data['paths']) ? $data['paths'] : [];
+      $modules[$module_name]->required_by = $data['reverse_paths'] ?? [];
+      $modules[$module_name]->requires = $data['paths'] ?? [];
       $modules[$module_name]->sort = $data['weight'];
     }
     return $modules;
diff --git a/core/lib/Drupal/Core/Extension/ModuleInstaller.php b/core/lib/Drupal/Core/Extension/ModuleInstaller.php
index bb55a1d85299..21970253e91b 100644
--- a/core/lib/Drupal/Core/Extension/ModuleInstaller.php
+++ b/core/lib/Drupal/Core/Extension/ModuleInstaller.php
@@ -583,9 +583,9 @@ protected function removeCacheBins($module) {
     $definitions = Yaml::decode(file_get_contents($service_yaml_file));
 
     $cache_bin_services = array_filter(
-      isset($definitions['services']) ? $definitions['services'] : [],
+      $definitions['services'] ?? [],
       function ($definition) {
-        $tags = isset($definition['tags']) ? $definition['tags'] : [];
+        $tags = $definition['tags'] ?? [];
         foreach ($tags as $tag) {
           if (isset($tag['name']) && ($tag['name'] == 'cache.bin')) {
             return TRUE;
diff --git a/core/lib/Drupal/Core/Field/BaseFieldDefinition.php b/core/lib/Drupal/Core/Field/BaseFieldDefinition.php
index 7cd56e25788e..4a0b53d2f052 100644
--- a/core/lib/Drupal/Core/Field/BaseFieldDefinition.php
+++ b/core/lib/Drupal/Core/Field/BaseFieldDefinition.php
@@ -192,7 +192,7 @@ public function setSetting($setting_name, $value) {
    * {@inheritdoc}
    */
   public function getProvider() {
-    return isset($this->definition['provider']) ? $this->definition['provider'] : NULL;
+    return $this->definition['provider'] ?? NULL;
   }
 
   /**
@@ -257,7 +257,7 @@ public function setRevisionable($revisionable) {
    */
   public function getCardinality() {
     // @todo: Allow to control this.
-    return isset($this->definition['cardinality']) ? $this->definition['cardinality'] : 1;
+    return $this->definition['cardinality'] ?? 1;
   }
 
   /**
@@ -408,28 +408,28 @@ public function setDisplayConfigurable($display_context, $configurable) {
    * {@inheritdoc}
    */
   public function getDisplayOptions($display_context) {
-    return isset($this->definition['display'][$display_context]['options']) ? $this->definition['display'][$display_context]['options'] : NULL;
+    return $this->definition['display'][$display_context]['options'] ?? NULL;
   }
 
   /**
    * {@inheritdoc}
    */
   public function isDisplayConfigurable($display_context) {
-    return isset($this->definition['display'][$display_context]['configurable']) ? $this->definition['display'][$display_context]['configurable'] : FALSE;
+    return $this->definition['display'][$display_context]['configurable'] ?? FALSE;
   }
 
   /**
    * {@inheritdoc}
    */
   public function getDefaultValueLiteral() {
-    return isset($this->definition['default_value']) ? $this->definition['default_value'] : [];
+    return $this->definition['default_value'] ?? [];
   }
 
   /**
    * {@inheritdoc}
    */
   public function getDefaultValueCallback() {
-    return isset($this->definition['default_value_callback']) ? $this->definition['default_value_callback'] : NULL;
+    return $this->definition['default_value_callback'] ?? NULL;
   }
 
   /**
@@ -524,7 +524,7 @@ public function setInitialValue($value) {
    *   The field name.
    */
   public function getInitialValueFromField() {
-    return isset($this->definition['initial_value_from_field']) ? $this->definition['initial_value_from_field'] : NULL;
+    return $this->definition['initial_value_from_field'] ?? NULL;
   }
 
   /**
@@ -620,7 +620,7 @@ public function __sleep() {
    * {@inheritdoc}
    */
   public function getTargetEntityTypeId() {
-    return isset($this->definition['entity_type']) ? $this->definition['entity_type'] : NULL;
+    return $this->definition['entity_type'] ?? NULL;
   }
 
   /**
@@ -640,7 +640,7 @@ public function setTargetEntityTypeId($entity_type_id) {
    * {@inheritdoc}
    */
   public function getTargetBundle() {
-    return isset($this->definition['bundle']) ? $this->definition['bundle'] : NULL;
+    return $this->definition['bundle'] ?? NULL;
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Field/FieldConfigBase.php b/core/lib/Drupal/Core/Field/FieldConfigBase.php
index 4f3bdf99b748..3f4fc4ea5d8a 100644
--- a/core/lib/Drupal/Core/Field/FieldConfigBase.php
+++ b/core/lib/Drupal/Core/Field/FieldConfigBase.php
@@ -505,7 +505,7 @@ public function getConstraints() {
    */
   public function getConstraint($constraint_name) {
     $constraints = $this->getConstraints();
-    return isset($constraints[$constraint_name]) ? $constraints[$constraint_name] : NULL;
+    return $constraints[$constraint_name] ?? NULL;
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Field/FieldDefinition.php b/core/lib/Drupal/Core/Field/FieldDefinition.php
index 80bb222d9dc2..9fbc65937a80 100644
--- a/core/lib/Drupal/Core/Field/FieldDefinition.php
+++ b/core/lib/Drupal/Core/Field/FieldDefinition.php
@@ -124,7 +124,7 @@ public function setDisplayConfigurable($display_context, $configurable) {
    * {@inheritdoc}
    */
   public function isDisplayConfigurable($display_context) {
-    return isset($this->definition['display'][$display_context]['configurable']) ? $this->definition['display'][$display_context]['configurable'] : FALSE;
+    return $this->definition['display'][$display_context]['configurable'] ?? FALSE;
   }
 
   /**
@@ -157,14 +157,14 @@ public function setDisplayOptions($display_context, array $options) {
    * {@inheritdoc}
    */
   public function getDisplayOptions($display_context) {
-    return isset($this->definition['display'][$display_context]['options']) ? $this->definition['display'][$display_context]['options'] : NULL;
+    return $this->definition['display'][$display_context]['options'] ?? NULL;
   }
 
   /**
    * {@inheritdoc}
    */
   public function getDefaultValueLiteral() {
-    return isset($this->definition['default_value']) ? $this->definition['default_value'] : [];
+    return $this->definition['default_value'] ?? [];
   }
 
   /**
@@ -187,7 +187,7 @@ public function setDefaultValueCallback($callback) {
    * {@inheritdoc}
    */
   public function getDefaultValueCallback() {
-    return isset($this->definition['default_value_callback']) ? $this->definition['default_value_callback'] : NULL;
+    return $this->definition['default_value_callback'] ?? NULL;
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceEntityFormatter.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceEntityFormatter.php
index efdc92eddf85..d337350983ef 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceEntityFormatter.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceEntityFormatter.php
@@ -146,7 +146,7 @@ public function settingsSummary() {
 
     $view_modes = $this->entityDisplayRepository->getViewModeOptions($this->getFieldSetting('target_type'));
     $view_mode = $this->getSetting('view_mode');
-    $summary[] = t('Rendered as @mode', ['@mode' => isset($view_modes[$view_mode]) ? $view_modes[$view_mode] : $view_mode]);
+    $summary[] = t('Rendered as @mode', ['@mode' => $view_modes[$view_mode] ?? $view_mode]);
 
     return $summary;
   }
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EmailDefaultWidget.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EmailDefaultWidget.php
index 07f66cf269a8..76d0bdd24e68 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EmailDefaultWidget.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EmailDefaultWidget.php
@@ -74,7 +74,7 @@ public function settingsSummary() {
   public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
     $element['value'] = $element + [
       '#type' => 'email',
-      '#default_value' => isset($items[$delta]->value) ? $items[$delta]->value : NULL,
+      '#default_value' => $items[$delta]->value ?? NULL,
       '#placeholder' => $this->getSetting('placeholder'),
       '#size' => $this->getSetting('size'),
       '#maxlength' => Email::EMAIL_MAX_LENGTH,
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EntityReferenceAutocompleteWidget.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EntityReferenceAutocompleteWidget.php
index d9f5b581f389..2ce3912d8bda 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EntityReferenceAutocompleteWidget.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EntityReferenceAutocompleteWidget.php
@@ -112,7 +112,7 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen
       // the 'ValidReference' constraint.
       '#validate_reference' => FALSE,
       '#maxlength' => 1024,
-      '#default_value' => isset($referenced_entities[$delta]) ? $referenced_entities[$delta] : NULL,
+      '#default_value' => $referenced_entities[$delta] ?? NULL,
       '#size' => $this->getSetting('size'),
       '#placeholder' => $this->getSetting('placeholder'),
     ];
@@ -196,7 +196,7 @@ protected function getAutocreateBundle() {
    */
   protected function getSelectionHandlerSetting($setting_name) {
     $settings = $this->getFieldSetting('handler_settings');
-    return isset($settings[$setting_name]) ? $settings[$setting_name] : NULL;
+    return $settings[$setting_name] ?? NULL;
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/NumberWidget.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/NumberWidget.php
index b4fac537b476..976b52832e71 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/NumberWidget.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/NumberWidget.php
@@ -66,7 +66,7 @@ public function settingsSummary() {
    * {@inheritdoc}
    */
   public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
-    $value = isset($items[$delta]->value) ? $items[$delta]->value : NULL;
+    $value = $items[$delta]->value ?? NULL;
     $field_settings = $this->getFieldSettings();
 
     $element += [
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/StringTextfieldWidget.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/StringTextfieldWidget.php
index 3be168176143..a0bb425f0cb8 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/StringTextfieldWidget.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/StringTextfieldWidget.php
@@ -70,7 +70,7 @@ public function settingsSummary() {
   public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
     $element['value'] = $element + [
       '#type' => 'textfield',
-      '#default_value' => isset($items[$delta]->value) ? $items[$delta]->value : NULL,
+      '#default_value' => $items[$delta]->value ?? NULL,
       '#size' => $this->getSetting('size'),
       '#placeholder' => $this->getSetting('placeholder'),
       '#maxlength' => $this->getFieldSetting('max_length'),
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/UriWidget.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/UriWidget.php
index f89b4442e45a..4d8dc0e14389 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/UriWidget.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/UriWidget.php
@@ -70,7 +70,7 @@ public function settingsSummary() {
   public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
     $element['value'] = $element + [
       '#type' => 'url',
-      '#default_value' => isset($items[$delta]->value) ? $items[$delta]->value : NULL,
+      '#default_value' => $items[$delta]->value ?? NULL,
       '#size' => $this->getSetting('size'),
       '#placeholder' => $this->getSetting('placeholder'),
       '#maxlength' => $this->getFieldSetting('max_length'),
diff --git a/core/lib/Drupal/Core/Field/PluginSettingsBase.php b/core/lib/Drupal/Core/Field/PluginSettingsBase.php
index 4e38e755f142..528d7d507c14 100644
--- a/core/lib/Drupal/Core/Field/PluginSettingsBase.php
+++ b/core/lib/Drupal/Core/Field/PluginSettingsBase.php
@@ -61,7 +61,7 @@ public function getSetting($key) {
     if (!$this->defaultSettingsMerged && !array_key_exists($key, $this->settings)) {
       $this->mergeDefaults();
     }
-    return isset($this->settings[$key]) ? $this->settings[$key] : NULL;
+    return $this->settings[$key] ?? NULL;
   }
 
   /**
@@ -94,7 +94,7 @@ public function setSetting($key, $value) {
    */
   public function getThirdPartySettings($module = NULL) {
     if ($module) {
-      return isset($this->thirdPartySettings[$module]) ? $this->thirdPartySettings[$module] : [];
+      return $this->thirdPartySettings[$module] ?? [];
     }
     return $this->thirdPartySettings;
   }
@@ -103,7 +103,7 @@ public function getThirdPartySettings($module = NULL) {
    * {@inheritdoc}
    */
   public function getThirdPartySetting($module, $key, $default = NULL) {
-    return isset($this->thirdPartySettings[$module][$key]) ? $this->thirdPartySettings[$module][$key] : $default;
+    return $this->thirdPartySettings[$module][$key] ?? $default;
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Field/WidgetBase.php b/core/lib/Drupal/Core/Field/WidgetBase.php
index ce896fb5f45c..a5549e670132 100644
--- a/core/lib/Drupal/Core/Field/WidgetBase.php
+++ b/core/lib/Drupal/Core/Field/WidgetBase.php
@@ -84,7 +84,7 @@ public function form(FieldItemListInterface $items, array &$form, FormStateInter
     // displaying an individual element, just get a single form element and make
     // it the $delta value.
     if ($this->handlesMultipleValues() || isset($get_delta)) {
-      $delta = isset($get_delta) ? $get_delta : 0;
+      $delta = $get_delta ?? 0;
       $element = [
         '#title' => $this->fieldDefinition->getLabel(),
         '#description' => $this->getFilteredDescription(),
@@ -332,8 +332,8 @@ public static function addMoreAjax(array $form, FormStateInterface $form_state)
 
     // Add a DIV around the delta receiving the Ajax effect.
     $delta = $element['#max_delta'];
-    $element[$delta]['#prefix'] = '<div class="ajax-new-content">' . (isset($element[$delta]['#prefix']) ? $element[$delta]['#prefix'] : '');
-    $element[$delta]['#suffix'] = (isset($element[$delta]['#suffix']) ? $element[$delta]['#suffix'] : '') . '</div>';
+    $element[$delta]['#prefix'] = '<div class="ajax-new-content">' . ($element[$delta]['#prefix'] ?? '');
+    $element[$delta]['#suffix'] = ($element[$delta]['#suffix'] ?? '') . '</div>';
 
     return $element;
   }
@@ -406,7 +406,7 @@ public function extractFormValues(FieldItemListInterface $items, array $form, Fo
       // Put delta mapping in $form_state, so that flagErrors() can use it.
       $field_state = static::getWidgetState($form['#parents'], $field_name, $form_state);
       foreach ($items as $delta => $item) {
-        $field_state['original_deltas'][$delta] = isset($item->_original_delta) ? $item->_original_delta : $delta;
+        $field_state['original_deltas'][$delta] = $item->_original_delta ?? $delta;
         unset($item->_original_delta, $item->_weight);
       }
       static::setWidgetState($form['#parents'], $field_name, $form_state, $field_state);
diff --git a/core/lib/Drupal/Core/Field/WidgetPluginManager.php b/core/lib/Drupal/Core/Field/WidgetPluginManager.php
index 80e9718769c6..e5afb21e5fcd 100644
--- a/core/lib/Drupal/Core/Field/WidgetPluginManager.php
+++ b/core/lib/Drupal/Core/Field/WidgetPluginManager.php
@@ -145,7 +145,7 @@ public function prepareConfiguration($field_type, array $configuration) {
     // If no widget is specified, use the default widget.
     if (!isset($configuration['type'])) {
       $field_type = $this->fieldTypeManager->getDefinition($field_type);
-      $configuration['type'] = isset($field_type['default_widget']) ? $field_type['default_widget'] : NULL;
+      $configuration['type'] = $field_type['default_widget'] ?? NULL;
     }
     // Filter out unknown settings, and fill in defaults for missing settings.
     $default_settings = $this->getDefaultSettings($configuration['type']);
diff --git a/core/lib/Drupal/Core/Form/FormBuilder.php b/core/lib/Drupal/Core/Form/FormBuilder.php
index 8acb6321b9d5..6388b857c767 100644
--- a/core/lib/Drupal/Core/Form/FormBuilder.php
+++ b/core/lib/Drupal/Core/Form/FormBuilder.php
@@ -1280,7 +1280,7 @@ protected function handleInputElement($form_id, &$element, FormStateInterface &$
         // value. Avoid image buttons (which come with garbage value), so we
         // only get value for the button actually clicked.
         if (!isset($element['#value']) && empty($element['#has_garbage_value'])) {
-          $element['#value'] = isset($element['#default_value']) ? $element['#default_value'] : '';
+          $element['#value'] = $element['#default_value'] ?? '';
         }
       }
     }
diff --git a/core/lib/Drupal/Core/Http/LinkRelationType.php b/core/lib/Drupal/Core/Http/LinkRelationType.php
index b0366e5ef64d..8c2af13bb0ca 100644
--- a/core/lib/Drupal/Core/Http/LinkRelationType.php
+++ b/core/lib/Drupal/Core/Http/LinkRelationType.php
@@ -41,21 +41,21 @@ public function getExtensionUri() {
    * {@inheritdoc}
    */
   public function getDescription() {
-    return isset($this->pluginDefinition['description']) ? $this->pluginDefinition['description'] : '';
+    return $this->pluginDefinition['description'] ?? '';
   }
 
   /**
    * {@inheritdoc}
    */
   public function getReference() {
-    return isset($this->pluginDefinition['reference']) ? $this->pluginDefinition['reference'] : '';
+    return $this->pluginDefinition['reference'] ?? '';
   }
 
   /**
    * {@inheritdoc}
    */
   public function getNotes() {
-    return isset($this->pluginDefinition['notes']) ? $this->pluginDefinition['notes'] : '';
+    return $this->pluginDefinition['notes'] ?? '';
   }
 
 }
diff --git a/core/lib/Drupal/Core/Installer/Form/SelectProfileForm.php b/core/lib/Drupal/Core/Installer/Form/SelectProfileForm.php
index c37150c7796c..82b7d3c9e251 100644
--- a/core/lib/Drupal/Core/Installer/Form/SelectProfileForm.php
+++ b/core/lib/Drupal/Core/Installer/Form/SelectProfileForm.php
@@ -48,7 +48,7 @@ public function buildForm(array $form, FormStateInterface $form_state, $install_
 
       // Determine the name of the profile; default to file name if defined name
       // is unspecified.
-      $name = isset($details['name']) ? $details['name'] : $profile->getName();
+      $name = $details['name'] ?? $profile->getName();
       $names[$profile->getName()] = $name;
     }
 
diff --git a/core/lib/Drupal/Core/KeyValueStore/StorageBase.php b/core/lib/Drupal/Core/KeyValueStore/StorageBase.php
index ad5e3b4a56f7..ead499c70ce0 100644
--- a/core/lib/Drupal/Core/KeyValueStore/StorageBase.php
+++ b/core/lib/Drupal/Core/KeyValueStore/StorageBase.php
@@ -33,7 +33,7 @@ public function getCollectionName() {
    */
   public function get($key, $default = NULL) {
     $values = $this->getMultiple([$key]);
-    return isset($values[$key]) ? $values[$key] : $default;
+    return $values[$key] ?? $default;
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Language/LanguageManager.php b/core/lib/Drupal/Core/Language/LanguageManager.php
index eb5295cdbe57..dd1687d56bac 100644
--- a/core/lib/Drupal/Core/Language/LanguageManager.php
+++ b/core/lib/Drupal/Core/Language/LanguageManager.php
@@ -149,7 +149,7 @@ public function getNativeLanguages() {
    */
   public function getLanguage($langcode) {
     $languages = $this->getLanguages(LanguageInterface::STATE_ALL);
-    return isset($languages[$langcode]) ? $languages[$langcode] : NULL;
+    return $languages[$langcode] ?? NULL;
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Layout/LayoutDefinition.php b/core/lib/Drupal/Core/Layout/LayoutDefinition.php
index 033175188a69..d80a8720cabd 100644
--- a/core/lib/Drupal/Core/Layout/LayoutDefinition.php
+++ b/core/lib/Drupal/Core/Layout/LayoutDefinition.php
@@ -158,10 +158,10 @@ public function __construct(array $definition) {
    */
   public function get($property) {
     if (property_exists($this, $property)) {
-      $value = isset($this->{$property}) ? $this->{$property} : NULL;
+      $value = $this->{$property} ?? NULL;
     }
     else {
-      $value = isset($this->additional[$property]) ? $this->additional[$property] : NULL;
+      $value = $this->additional[$property] ?? NULL;
     }
     return $value;
   }
diff --git a/core/lib/Drupal/Core/Layout/LayoutPluginManager.php b/core/lib/Drupal/Core/Layout/LayoutPluginManager.php
index 2cd0c6895735..12d740350918 100644
--- a/core/lib/Drupal/Core/Layout/LayoutPluginManager.php
+++ b/core/lib/Drupal/Core/Layout/LayoutPluginManager.php
@@ -198,7 +198,7 @@ public function getCategories() {
    */
   public function getSortedDefinitions(array $definitions = NULL, $label_key = 'label') {
     // Sort the plugins first by category, then by label.
-    $definitions = isset($definitions) ? $definitions : $this->getDefinitions();
+    $definitions = $definitions ?? $this->getDefinitions();
     // Suppress errors because PHPUnit will indirectly modify the contents,
     // triggering https://bugs.php.net/bug.php?id=50688.
     @uasort($definitions, function (LayoutDefinition $a, LayoutDefinition $b) {
@@ -216,7 +216,7 @@ public function getSortedDefinitions(array $definitions = NULL, $label_key = 'la
    * @return \Drupal\Core\Layout\LayoutDefinition[][]
    */
   public function getGroupedDefinitions(array $definitions = NULL, $label_key = 'label') {
-    $definitions = $this->getSortedDefinitions(isset($definitions) ? $definitions : $this->getDefinitions(), $label_key);
+    $definitions = $this->getSortedDefinitions($definitions ?? $this->getDefinitions(), $label_key);
     $grouped_definitions = [];
     foreach ($definitions as $id => $definition) {
       $grouped_definitions[(string) $definition->getCategory()][$id] = $definition;
diff --git a/core/lib/Drupal/Core/Menu/LocalActionDefault.php b/core/lib/Drupal/Core/Menu/LocalActionDefault.php
index 5e161ec1de31..f3c0962306ae 100644
--- a/core/lib/Drupal/Core/Menu/LocalActionDefault.php
+++ b/core/lib/Drupal/Core/Menu/LocalActionDefault.php
@@ -83,7 +83,7 @@ public function getWeight() {
    * {@inheritdoc}
    */
   public function getRouteParameters(RouteMatchInterface $route_match) {
-    $route_parameters = isset($this->pluginDefinition['route_parameters']) ? $this->pluginDefinition['route_parameters'] : [];
+    $route_parameters = $this->pluginDefinition['route_parameters'] ?? [];
     $route = $this->routeProvider->getRouteByName($this->getRouteName());
     $variables = $route->compile()->getVariables();
 
diff --git a/core/lib/Drupal/Core/Menu/LocalTaskDefault.php b/core/lib/Drupal/Core/Menu/LocalTaskDefault.php
index 49a7a2cc6862..edc09131db2e 100644
--- a/core/lib/Drupal/Core/Menu/LocalTaskDefault.php
+++ b/core/lib/Drupal/Core/Menu/LocalTaskDefault.php
@@ -41,7 +41,7 @@ public function getRouteName() {
    * {@inheritdoc}
    */
   public function getRouteParameters(RouteMatchInterface $route_match) {
-    $route_parameters = isset($this->pluginDefinition['route_parameters']) ? $this->pluginDefinition['route_parameters'] : [];
+    $route_parameters = $this->pluginDefinition['route_parameters'] ?? [];
     $route = $this->routeProvider()->getRouteByName($this->getRouteName());
     $variables = $route->compile()->getVariables();
 
diff --git a/core/lib/Drupal/Core/Menu/MenuLinkBase.php b/core/lib/Drupal/Core/Menu/MenuLinkBase.php
index c61b5db0aa0b..22d5bbaf02c7 100644
--- a/core/lib/Drupal/Core/Menu/MenuLinkBase.php
+++ b/core/lib/Drupal/Core/Menu/MenuLinkBase.php
@@ -106,14 +106,14 @@ public function getMetaData() {
    * {@inheritdoc}
    */
   public function getRouteName() {
-    return isset($this->pluginDefinition['route_name']) ? $this->pluginDefinition['route_name'] : '';
+    return $this->pluginDefinition['route_name'] ?? '';
   }
 
   /**
    * {@inheritdoc}
    */
   public function getRouteParameters() {
-    return isset($this->pluginDefinition['route_parameters']) ? $this->pluginDefinition['route_parameters'] : [];
+    return $this->pluginDefinition['route_parameters'] ?? [];
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Menu/MenuTreeStorage.php b/core/lib/Drupal/Core/Menu/MenuTreeStorage.php
index 62a7fc7007d4..b343a2f36fed 100644
--- a/core/lib/Drupal/Core/Menu/MenuTreeStorage.php
+++ b/core/lib/Drupal/Core/Menu/MenuTreeStorage.php
@@ -729,7 +729,7 @@ public function load($id) {
       return $this->definitions[$id];
     }
     $loaded = $this->loadMultiple([$id]);
-    return isset($loaded[$id]) ? $loaded[$id] : FALSE;
+    return $loaded[$id] ?? FALSE;
   }
 
   /**
@@ -743,7 +743,7 @@ public function load($id) {
    */
   protected function loadFull($id) {
     $loaded = $this->loadFullMultiple([$id]);
-    return isset($loaded[$id]) ? $loaded[$id] : [];
+    return $loaded[$id] ?? [];
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Pager/PagerManager.php b/core/lib/Drupal/Core/Pager/PagerManager.php
index 6a9cb7c9b82a..1fad49ce79c3 100644
--- a/core/lib/Drupal/Core/Pager/PagerManager.php
+++ b/core/lib/Drupal/Core/Pager/PagerManager.php
@@ -63,7 +63,7 @@ public function createPager($total, $limit, $element = 0) {
    * {@inheritdoc}
    */
   public function getPager($element = 0) {
-    return isset($this->pagers[$element]) ? $this->pagers[$element] : NULL;
+    return $this->pagers[$element] ?? NULL;
   }
 
   /**
diff --git a/core/lib/Drupal/Core/PhpStorage/PhpStorageFactory.php b/core/lib/Drupal/Core/PhpStorage/PhpStorageFactory.php
index 87e78d868ce5..85ca11bb63f9 100644
--- a/core/lib/Drupal/Core/PhpStorage/PhpStorageFactory.php
+++ b/core/lib/Drupal/Core/PhpStorage/PhpStorageFactory.php
@@ -38,7 +38,7 @@ public static function get($name) {
       $configuration = $overrides['default'];
     }
     // Make sure all the necessary configuration values are set.
-    $class = isset($configuration['class']) ? $configuration['class'] : 'Drupal\Component\PhpStorage\MTimeProtectedFileStorage';
+    $class = $configuration['class'] ?? 'Drupal\Component\PhpStorage\MTimeProtectedFileStorage';
     if (!isset($configuration['secret'])) {
       $configuration['secret'] = Settings::getHashSalt();
     }
diff --git a/core/lib/Drupal/Core/Plugin/CategorizingPluginManagerTrait.php b/core/lib/Drupal/Core/Plugin/CategorizingPluginManagerTrait.php
index 52d153c3edc1..7f8ae617a400 100644
--- a/core/lib/Drupal/Core/Plugin/CategorizingPluginManagerTrait.php
+++ b/core/lib/Drupal/Core/Plugin/CategorizingPluginManagerTrait.php
@@ -89,7 +89,7 @@ public function getCategories() {
   public function getSortedDefinitions(array $definitions = NULL, $label_key = 'label') {
     // Sort the plugins first by category, then by label.
     /** @var \Drupal\Core\Plugin\CategorizingPluginManagerTrait|\Drupal\Component\Plugin\PluginManagerInterface $this */
-    $definitions = isset($definitions) ? $definitions : $this->getDefinitions();
+    $definitions = $definitions ?? $this->getDefinitions();
     uasort($definitions, function ($a, $b) use ($label_key) {
       if ($a['category'] != $b['category']) {
         return strnatcasecmp($a['category'], $b['category']);
@@ -104,7 +104,7 @@ public function getSortedDefinitions(array $definitions = NULL, $label_key = 'la
    */
   public function getGroupedDefinitions(array $definitions = NULL, $label_key = 'label') {
     /** @var \Drupal\Core\Plugin\CategorizingPluginManagerTrait|\Drupal\Component\Plugin\PluginManagerInterface $this */
-    $definitions = $this->getSortedDefinitions(isset($definitions) ? $definitions : $this->getDefinitions(), $label_key);
+    $definitions = $this->getSortedDefinitions($definitions ?? $this->getDefinitions(), $label_key);
     $grouped_definitions = [];
     foreach ($definitions as $id => $definition) {
       $grouped_definitions[(string) $definition['category']][$id] = $definition;
diff --git a/core/lib/Drupal/Core/Plugin/Context/ContextDefinition.php b/core/lib/Drupal/Core/Plugin/Context/ContextDefinition.php
index 05887d3da1f0..895650c89ca1 100644
--- a/core/lib/Drupal/Core/Plugin/Context/ContextDefinition.php
+++ b/core/lib/Drupal/Core/Plugin/Context/ContextDefinition.php
@@ -218,7 +218,7 @@ public function getConstraints() {
    */
   public function getConstraint($constraint_name) {
     $constraints = $this->getConstraints();
-    return isset($constraints[$constraint_name]) ? $constraints[$constraint_name] : NULL;
+    return $constraints[$constraint_name] ?? NULL;
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Plugin/Context/ContextHandler.php b/core/lib/Drupal/Core/Plugin/Context/ContextHandler.php
index d07556bc1815..248cf7adbf25 100644
--- a/core/lib/Drupal/Core/Plugin/Context/ContextHandler.php
+++ b/core/lib/Drupal/Core/Plugin/Context/ContextHandler.php
@@ -89,7 +89,7 @@ public function applyContextMapping(ContextAwarePluginInterface $plugin, $contex
 
     foreach ($plugin->getContextDefinitions() as $plugin_context_id => $plugin_context_definition) {
       // If this context was given a specific name, use that.
-      $context_id = isset($mappings[$plugin_context_id]) ? $mappings[$plugin_context_id] : $plugin_context_id;
+      $context_id = $mappings[$plugin_context_id] ?? $plugin_context_id;
       if (!empty($contexts[$context_id])) {
         // This assignment has been used, remove it.
         unset($mappings[$plugin_context_id]);
diff --git a/core/lib/Drupal/Core/Plugin/ContextAwarePluginTrait.php b/core/lib/Drupal/Core/Plugin/ContextAwarePluginTrait.php
index a6060b710f23..444f8654d7de 100644
--- a/core/lib/Drupal/Core/Plugin/ContextAwarePluginTrait.php
+++ b/core/lib/Drupal/Core/Plugin/ContextAwarePluginTrait.php
@@ -129,7 +129,7 @@ public function setContextValue($name, $value) {
    */
   public function getContextMapping() {
     $configuration = $this instanceof ConfigurableInterface ? $this->getConfiguration() : $this->configuration;
-    return isset($configuration['context_mapping']) ? $configuration['context_mapping'] : [];
+    return $configuration['context_mapping'] ?? [];
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Plugin/DefaultLazyPluginCollection.php b/core/lib/Drupal/Core/Plugin/DefaultLazyPluginCollection.php
index 071a5648b01a..c3fa2ee5bb2c 100644
--- a/core/lib/Drupal/Core/Plugin/DefaultLazyPluginCollection.php
+++ b/core/lib/Drupal/Core/Plugin/DefaultLazyPluginCollection.php
@@ -74,7 +74,7 @@ public function __construct(PluginManagerInterface $manager, array $configuratio
    * {@inheritdoc}
    */
   protected function initializePlugin($instance_id) {
-    $configuration = isset($this->configurations[$instance_id]) ? $this->configurations[$instance_id] : [];
+    $configuration = $this->configurations[$instance_id] ?? [];
     if (!isset($configuration[$this->pluginKey])) {
       throw new PluginNotFoundException($instance_id);
     }
diff --git a/core/lib/Drupal/Core/Render/Element/Checkbox.php b/core/lib/Drupal/Core/Render/Element/Checkbox.php
index c1e657b1675d..f2e1501253cb 100644
--- a/core/lib/Drupal/Core/Render/Element/Checkbox.php
+++ b/core/lib/Drupal/Core/Render/Element/Checkbox.php
@@ -57,7 +57,7 @@ public static function valueCallback(&$element, $input, FormStateInterface $form
       // NULL to 0, because FormBuilder::handleInputElement() would otherwise
       // replace NULL with empty string, but an empty string is a potentially
       // valid value for a checked checkbox.
-      return isset($element['#default_value']) ? $element['#default_value'] : 0;
+      return $element['#default_value'] ?? 0;
     }
     else {
       // Checked checkboxes are submitted with a value (possibly '0' or ''):
diff --git a/core/lib/Drupal/Core/Render/Element/Checkboxes.php b/core/lib/Drupal/Core/Render/Element/Checkboxes.php
index 0d25f75c6951..cdf055487325 100644
--- a/core/lib/Drupal/Core/Render/Element/Checkboxes.php
+++ b/core/lib/Drupal/Core/Render/Element/Checkboxes.php
@@ -80,7 +80,7 @@ public static function processCheckboxes(&$element, FormStateInterface $form_sta
           '#return_value' => $key,
           '#default_value' => isset($value[$key]) ? $key : NULL,
           '#attributes' => $element['#attributes'],
-          '#ajax' => isset($element['#ajax']) ? $element['#ajax'] : NULL,
+          '#ajax' => $element['#ajax'] ?? NULL,
           // Errors should only be shown on the parent checkboxes element.
           '#error_no_message' => TRUE,
           '#weight' => $weight,
diff --git a/core/lib/Drupal/Core/Render/Element/FormElement.php b/core/lib/Drupal/Core/Render/Element/FormElement.php
index 62fe3c1112cf..f911d72e8594 100644
--- a/core/lib/Drupal/Core/Render/Element/FormElement.php
+++ b/core/lib/Drupal/Core/Render/Element/FormElement.php
@@ -184,7 +184,7 @@ public static function processAutocomplete(&$element, FormStateInterface $form_s
     $access = FALSE;
 
     if (!empty($element['#autocomplete_route_name'])) {
-      $parameters = isset($element['#autocomplete_route_parameters']) ? $element['#autocomplete_route_parameters'] : [];
+      $parameters = $element['#autocomplete_route_parameters'] ?? [];
       $url = Url::fromRoute($element['#autocomplete_route_name'], $parameters)->toString(TRUE);
       /** @var \Drupal\Core\Access\AccessManagerInterface $access_manager */
       $access_manager = \Drupal::service('access_manager');
diff --git a/core/lib/Drupal/Core/Render/Element/HtmlTag.php b/core/lib/Drupal/Core/Render/Element/HtmlTag.php
index 78c477e65f87..eedc008382e4 100644
--- a/core/lib/Drupal/Core/Render/Element/HtmlTag.php
+++ b/core/lib/Drupal/Core/Render/Element/HtmlTag.php
@@ -146,7 +146,7 @@ public static function preRenderHtmlTag($element) {
    *   added to '#prefix' and '#suffix'.
    */
   public static function preRenderConditionalComments($element) {
-    $browsers = isset($element['#browsers']) ? $element['#browsers'] : [];
+    $browsers = $element['#browsers'] ?? [];
     $browsers += [
       'IE' => TRUE,
       '!IE' => TRUE,
@@ -181,11 +181,11 @@ public static function preRenderConditionalComments($element) {
 
     // Ensure what we are dealing with is safe. This would be done later anyway
     // in \Drupal::service('renderer')->render().
-    $prefix = isset($element['#prefix']) ? $element['#prefix'] : '';
+    $prefix = $element['#prefix'] ?? '';
     if ($prefix && !($prefix instanceof MarkupInterface)) {
       $prefix = Xss::filterAdmin($prefix);
     }
-    $suffix = isset($element['#suffix']) ? $element['#suffix'] : '';
+    $suffix = $element['#suffix'] ?? '';
     if ($suffix && !($suffix instanceof MarkupInterface)) {
       $suffix = Xss::filterAdmin($suffix);
     }
diff --git a/core/lib/Drupal/Core/Render/Element/Number.php b/core/lib/Drupal/Core/Render/Element/Number.php
index 36abb32b1844..8f7efca552d8 100644
--- a/core/lib/Drupal/Core/Render/Element/Number.php
+++ b/core/lib/Drupal/Core/Render/Element/Number.php
@@ -86,7 +86,7 @@ public static function validateNumber(&$element, FormStateInterface $form_state,
     if (isset($element['#step']) && strtolower($element['#step']) != 'any') {
       // Check that the input is an allowed multiple of #step (offset by #min if
       // #min is set).
-      $offset = isset($element['#min']) ? $element['#min'] : 0.0;
+      $offset = $element['#min'] ?? 0.0;
 
       if (!NumberUtility::validStep($value, $element['#step'], $offset)) {
         $form_state->setError($element, t('%name is not a valid number.', ['%name' => $name]));
diff --git a/core/lib/Drupal/Core/Render/Element/Radios.php b/core/lib/Drupal/Core/Render/Element/Radios.php
index a64312ff630c..38a043e5f917 100644
--- a/core/lib/Drupal/Core/Render/Element/Radios.php
+++ b/core/lib/Drupal/Core/Render/Element/Radios.php
@@ -73,11 +73,11 @@ public static function processRadios(&$element, FormStateInterface $form_state,
           '#return_value' => $key,
           // Use default or FALSE. A value of FALSE means that the radio button is
           // not 'checked'.
-          '#default_value' => isset($element['#default_value']) ? $element['#default_value'] : FALSE,
+          '#default_value' => $element['#default_value'] ?? FALSE,
           '#attributes' => $element['#attributes'],
           '#parents' => $element['#parents'],
           '#id' => HtmlUtility::getUniqueId('edit-' . implode('-', $parents_for_id)),
-          '#ajax' => isset($element['#ajax']) ? $element['#ajax'] : NULL,
+          '#ajax' => $element['#ajax'] ?? NULL,
           // Errors should only be shown on the parent radios element.
           '#error_no_message' => TRUE,
           '#weight' => $weight,
@@ -108,7 +108,7 @@ public static function valueCallback(&$element, $input, FormStateInterface $form
       // FormBuilder::handleInputElement() converting the NULL to an empty
       // string, so that code can distinguish between nothing selected and the
       // selection of a radio button whose value is an empty string.
-      $value = isset($element['#default_value']) ? $element['#default_value'] : NULL;
+      $value = $element['#default_value'] ?? NULL;
       if (!isset($value)) {
         $element['#has_garbage_value'] = TRUE;
       }
diff --git a/core/lib/Drupal/Core/Render/Element/Tableselect.php b/core/lib/Drupal/Core/Render/Element/Tableselect.php
index a8a7a36d91cb..908e66044a74 100644
--- a/core/lib/Drupal/Core/Render/Element/Tableselect.php
+++ b/core/lib/Drupal/Core/Render/Element/Tableselect.php
@@ -254,7 +254,7 @@ public static function processTableselect(&$element, FormStateInterface $form_st
               '#return_value' => $key,
               '#default_value' => isset($value[$key]) ? $key : NULL,
               '#attributes' => $element['#attributes'],
-              '#ajax' => isset($element['#ajax']) ? $element['#ajax'] : NULL,
+              '#ajax' => $element['#ajax'] ?? NULL,
             ];
           }
           else {
@@ -269,7 +269,7 @@ public static function processTableselect(&$element, FormStateInterface $form_st
               '#attributes' => $element['#attributes'],
               '#parents' => $element['#parents'],
               '#id' => HtmlUtility::getUniqueId('edit-' . implode('-', $parents_for_id)),
-              '#ajax' => isset($element['#ajax']) ? $element['#ajax'] : NULL,
+              '#ajax' => $element['#ajax'] ?? NULL,
             ];
           }
           if (isset($element['#options'][$key]['#weight'])) {
diff --git a/core/lib/Drupal/Core/Render/ElementInfoManager.php b/core/lib/Drupal/Core/Render/ElementInfoManager.php
index 1de1f4c61c38..ed927652634d 100644
--- a/core/lib/Drupal/Core/Render/ElementInfoManager.php
+++ b/core/lib/Drupal/Core/Render/ElementInfoManager.php
@@ -76,7 +76,7 @@ public function getInfo($type) {
     if (!isset($this->elementInfo[$theme_name])) {
       $this->elementInfo[$theme_name] = $this->buildInfo($theme_name);
     }
-    $info = isset($this->elementInfo[$theme_name][$type]) ? $this->elementInfo[$theme_name][$type] : [];
+    $info = $this->elementInfo[$theme_name][$type] ?? [];
     $info['#defaults_loaded'] = TRUE;
     return $info;
   }
@@ -87,7 +87,7 @@ public function getInfo($type) {
   public function getInfoProperty($type, $property_name, $default = NULL) {
     $info = $this->getInfo($type);
 
-    return isset($info[$property_name]) ? $info[$property_name] : $default;
+    return $info[$property_name] ?? $default;
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Render/HtmlResponseAttachmentsProcessor.php b/core/lib/Drupal/Core/Render/HtmlResponseAttachmentsProcessor.php
index 2dc416f4bd7b..950eb68ae685 100644
--- a/core/lib/Drupal/Core/Render/HtmlResponseAttachmentsProcessor.php
+++ b/core/lib/Drupal/Core/Render/HtmlResponseAttachmentsProcessor.php
@@ -429,7 +429,7 @@ protected function processHtmlHeadLink(array $html_head_link) {
 
     foreach ($html_head_link as $item) {
       $attributes = $item[0];
-      $should_add_header = isset($item[1]) ? $item[1] : FALSE;
+      $should_add_header = $item[1] ?? FALSE;
 
       $element = [
         '#tag' => 'link',
diff --git a/core/lib/Drupal/Core/Render/MainContent/DialogRenderer.php b/core/lib/Drupal/Core/Render/MainContent/DialogRenderer.php
index c445d8507c6b..e9dd1ed17539 100644
--- a/core/lib/Drupal/Core/Render/MainContent/DialogRenderer.php
+++ b/core/lib/Drupal/Core/Render/MainContent/DialogRenderer.php
@@ -58,7 +58,7 @@ public function renderResponse(array $main_content, Request $request, RouteMatch
 
     // Determine the title: use the title provided by the main content if any,
     // otherwise get it from the routing information.
-    $title = isset($main_content['#title']) ? $main_content['#title'] : $this->titleResolver->getTitle($request, $route_match->getRouteObject());
+    $title = $main_content['#title'] ?? $this->titleResolver->getTitle($request, $route_match->getRouteObject());
 
     // Determine the dialog options and the target for the OpenDialogCommand.
     $options = $request->request->get('dialogOptions', []);
diff --git a/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php b/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php
index 46992d8f68c2..fe1890f57ddd 100644
--- a/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php
+++ b/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php
@@ -205,7 +205,7 @@ protected function prepare(array $main_content, Request $request, RouteMatchInte
     // Determine the title: use the title provided by the main content if any,
     // otherwise get it from the routing information.
     $get_title = function (array $main_content) use ($request, $route_match) {
-      return isset($main_content['#title']) ? $main_content['#title'] : $this->titleResolver->getTitle($request, $route_match->getRouteObject());
+      return $main_content['#title'] ?? $this->titleResolver->getTitle($request, $route_match->getRouteObject());
     };
 
     // If the _controller result already is #type => page,
@@ -241,7 +241,7 @@ protected function prepare(array $main_content, Request $request, RouteMatchInte
           return $this->renderer->render($main_content, FALSE);
         });
         $main_content = $this->renderCache->getCacheableRenderArray($main_content) + [
-          '#title' => isset($main_content['#title']) ? $main_content['#title'] : NULL,
+          '#title' => $main_content['#title'] ?? NULL,
         ];
       }
 
diff --git a/core/lib/Drupal/Core/Render/MainContent/ModalRenderer.php b/core/lib/Drupal/Core/Render/MainContent/ModalRenderer.php
index d250d57329b0..d903acf88d15 100644
--- a/core/lib/Drupal/Core/Render/MainContent/ModalRenderer.php
+++ b/core/lib/Drupal/Core/Render/MainContent/ModalRenderer.php
@@ -27,7 +27,7 @@ public function renderResponse(array $main_content, Request $request, RouteMatch
     $response->setAttachments($main_content['#attached']);
 
     // If the main content doesn't provide a title, use the title resolver.
-    $title = isset($main_content['#title']) ? $main_content['#title'] : $this->titleResolver->getTitle($request, $route_match->getRouteObject());
+    $title = $main_content['#title'] ?? $this->titleResolver->getTitle($request, $route_match->getRouteObject());
 
     // Determine the title: use the title provided by the main content if any,
     // otherwise get it from the routing information.
diff --git a/core/lib/Drupal/Core/Render/MainContent/OffCanvasRenderer.php b/core/lib/Drupal/Core/Render/MainContent/OffCanvasRenderer.php
index 086e84f929de..6c598ccb0a91 100644
--- a/core/lib/Drupal/Core/Render/MainContent/OffCanvasRenderer.php
+++ b/core/lib/Drupal/Core/Render/MainContent/OffCanvasRenderer.php
@@ -60,7 +60,7 @@ public function renderResponse(array $main_content, Request $request, RouteMatch
     $response->setAttachments($main_content['#attached']);
 
     // If the main content doesn't provide a title, use the title resolver.
-    $title = isset($main_content['#title']) ? $main_content['#title'] : $this->titleResolver->getTitle($request, $route_match->getRouteObject());
+    $title = $main_content['#title'] ?? $this->titleResolver->getTitle($request, $route_match->getRouteObject());
 
     // Determine the title: use the title provided by the main content if any,
     // otherwise get it from the routing information.
diff --git a/core/lib/Drupal/Core/Render/RenderCache.php b/core/lib/Drupal/Core/Render/RenderCache.php
index 385d317f4ae9..674c00e28f2a 100644
--- a/core/lib/Drupal/Core/Render/RenderCache.php
+++ b/core/lib/Drupal/Core/Render/RenderCache.php
@@ -66,7 +66,7 @@ public function get(array $elements) {
     if (!$this->requestStack->getCurrentRequest()->isMethodCacheable() || !$cid = $this->createCacheID($elements)) {
       return FALSE;
     }
-    $bin = isset($elements['#cache']['bin']) ? $elements['#cache']['bin'] : 'render';
+    $bin = $elements['#cache']['bin'] ?? 'render';
 
     if (!empty($cid) && ($cache_bin = $this->cacheFactory->get($bin)) && $cache = $cache_bin->get($cid)) {
       $cached_element = $cache->data;
@@ -96,7 +96,7 @@ public function set(array &$elements, array $pre_bubbling_elements) {
 
     $data = $this->getCacheableRenderArray($elements);
 
-    $bin = isset($elements['#cache']['bin']) ? $elements['#cache']['bin'] : 'render';
+    $bin = $elements['#cache']['bin'] ?? 'render';
     $cache = $this->cacheFactory->get($bin);
 
     // Calculate the pre-bubbling CID.
diff --git a/core/lib/Drupal/Core/Render/Renderer.php b/core/lib/Drupal/Core/Render/Renderer.php
index 9deb15d9f419..f95116e5f77e 100644
--- a/core/lib/Drupal/Core/Render/Renderer.php
+++ b/core/lib/Drupal/Core/Render/Renderer.php
@@ -370,9 +370,9 @@ protected function doRender(&$elements, $is_root_call = FALSE) {
     }
 
     // Defaults for bubbleable rendering metadata.
-    $elements['#cache']['tags'] = isset($elements['#cache']['tags']) ? $elements['#cache']['tags'] : [];
-    $elements['#cache']['max-age'] = isset($elements['#cache']['max-age']) ? $elements['#cache']['max-age'] : Cache::PERMANENT;
-    $elements['#attached'] = isset($elements['#attached']) ? $elements['#attached'] : [];
+    $elements['#cache']['tags'] = $elements['#cache']['tags'] ?? [];
+    $elements['#cache']['max-age'] = $elements['#cache']['max-age'] ?? Cache::PERMANENT;
+    $elements['#attached'] = $elements['#attached'] ?? [];
 
     // Allow #pre_render to abort rendering.
     if (!empty($elements['#printed'])) {
@@ -581,7 +581,7 @@ public function executeInRenderContext(RenderContext $context, callable $callabl
    */
   protected function getCurrentRenderContext() {
     $request = $this->requestStack->getCurrentRequest();
-    return isset(static::$contextCollection[$request]) ? static::$contextCollection[$request] : NULL;
+    return static::$contextCollection[$request] ?? NULL;
   }
 
   /**
@@ -731,7 +731,7 @@ protected function ensureMarkupIsSafe(array $elements) {
     }
     elseif (!($elements['#markup'] instanceof MarkupInterface)) {
       // The default behavior is to XSS filter using the admin tag list.
-      $tags = isset($elements['#allowed_tags']) ? $elements['#allowed_tags'] : Xss::getAdminTagList();
+      $tags = $elements['#allowed_tags'] ?? Xss::getAdminTagList();
       $elements['#markup'] = Markup::create(Xss::filter($elements['#markup'], $tags));
     }
 
diff --git a/core/lib/Drupal/Core/Site/Settings.php b/core/lib/Drupal/Core/Site/Settings.php
index dac9714d1f92..31b2b8f0afa5 100644
--- a/core/lib/Drupal/Core/Site/Settings.php
+++ b/core/lib/Drupal/Core/Site/Settings.php
@@ -119,7 +119,7 @@ public static function get($name, $default = NULL) {
     if (isset(self::$deprecatedSettings[$name])) {
       @trigger_error(self::$deprecatedSettings[$name]['message'], E_USER_DEPRECATED);
     }
-    return isset(self::$instance->storage[$name]) ? self::$instance->storage[$name] : $default;
+    return self::$instance->storage[$name] ?? $default;
   }
 
   /**
diff --git a/core/lib/Drupal/Core/State/State.php b/core/lib/Drupal/Core/State/State.php
index f35c954596fc..a71e5b2752fa 100644
--- a/core/lib/Drupal/Core/State/State.php
+++ b/core/lib/Drupal/Core/State/State.php
@@ -38,7 +38,7 @@ public function __construct(KeyValueFactoryInterface $key_value_factory) {
    */
   public function get($key, $default = NULL) {
     $values = $this->getMultiple([$key]);
-    return isset($values[$key]) ? $values[$key] : $default;
+    return $values[$key] ?? $default;
   }
 
   /**
diff --git a/core/lib/Drupal/Core/StringTranslation/TranslatableMarkup.php b/core/lib/Drupal/Core/StringTranslation/TranslatableMarkup.php
index 517bfb208356..8f24cf3cb09c 100644
--- a/core/lib/Drupal/Core/StringTranslation/TranslatableMarkup.php
+++ b/core/lib/Drupal/Core/StringTranslation/TranslatableMarkup.php
@@ -156,7 +156,7 @@ public function getUntranslatedString() {
    *   The value of this option or empty string of option is not set.
    */
   public function getOption($name) {
-    return isset($this->options[$name]) ? $this->options[$name] : '';
+    return $this->options[$name] ?? '';
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Test/FunctionalTestSetupTrait.php b/core/lib/Drupal/Core/Test/FunctionalTestSetupTrait.php
index 03631793c29e..e1a234c92973 100644
--- a/core/lib/Drupal/Core/Test/FunctionalTestSetupTrait.php
+++ b/core/lib/Drupal/Core/Test/FunctionalTestSetupTrait.php
@@ -543,8 +543,8 @@ protected function installParameters() {
             'name' => $this->rootUser->name,
             'mail' => $this->rootUser->getEmail(),
             'pass' => [
-              'pass1' => isset($this->rootUser->pass_raw) ? $this->rootUser->pass_raw : $this->rootUser->passRaw,
-              'pass2' => isset($this->rootUser->pass_raw) ? $this->rootUser->pass_raw : $this->rootUser->passRaw,
+              'pass1' => $this->rootUser->pass_raw ?? $this->rootUser->passRaw,
+              'pass2' => $this->rootUser->pass_raw ?? $this->rootUser->passRaw,
             ],
           ],
           // form_type_checkboxes_value() requires NULL instead of FALSE values
@@ -585,7 +585,7 @@ protected function setupBaseUrl() {
     $parsed_url = parse_url($base_url);
     $host = $parsed_url['host'] . (isset($parsed_url['port']) ? ':' . $parsed_url['port'] : '');
     $path = isset($parsed_url['path']) ? rtrim(rtrim($parsed_url['path']), '/') : '';
-    $port = isset($parsed_url['port']) ? $parsed_url['port'] : 80;
+    $port = $parsed_url['port'] ?? 80;
 
     $valid_url_schemes = ['http', 'https'];
     if (!in_array(strtolower($parsed_url['scheme']), $valid_url_schemes, TRUE)) {
diff --git a/core/lib/Drupal/Core/Test/TestSetupTrait.php b/core/lib/Drupal/Core/Test/TestSetupTrait.php
index de780437b889..24795a466ea0 100644
--- a/core/lib/Drupal/Core/Test/TestSetupTrait.php
+++ b/core/lib/Drupal/Core/Test/TestSetupTrait.php
@@ -153,7 +153,7 @@ protected function changeDatabasePrefix() {
       // Ensure no existing database gets in the way. If a default database
       // exists already it must be removed.
       Database::removeConnection('default');
-      $database = Database::convertDbUrlToConnectionInfo($db_url, isset($this->root) ? $this->root : DRUPAL_ROOT);
+      $database = Database::convertDbUrlToConnectionInfo($db_url, $this->root ?? DRUPAL_ROOT);
       Database::addConnectionInfo('default', 'default', $database);
     }
 
diff --git a/core/lib/Drupal/Core/Theme/Registry.php b/core/lib/Drupal/Core/Theme/Registry.php
index 08f1b7cea338..2a4e8d95f131 100644
--- a/core/lib/Drupal/Core/Theme/Registry.php
+++ b/core/lib/Drupal/Core/Theme/Registry.php
@@ -500,7 +500,7 @@ protected function processExtension(array &$cache, $name, $type, $theme, $path)
         // system.module to declare theme functions on behalf of core .include
         // files.
         if (isset($info['file'])) {
-          $include_file = isset($info['path']) ? $info['path'] : $path;
+          $include_file = $info['path'] ?? $path;
           $include_file .= '/' . $info['file'];
           include_once $this->root . '/' . $include_file;
           $result[$hook]['includes'][] = $include_file;
diff --git a/core/lib/Drupal/Core/Theme/ThemeInitialization.php b/core/lib/Drupal/Core/Theme/ThemeInitialization.php
index c81be077f54c..d9c3830143a2 100644
--- a/core/lib/Drupal/Core/Theme/ThemeInitialization.php
+++ b/core/lib/Drupal/Core/Theme/ThemeInitialization.php
@@ -261,8 +261,8 @@ public function getActiveTheme(Extension $theme, array $base_themes = []) {
       }
     }
 
-    $values['engine'] = isset($theme->engine) ? $theme->engine : NULL;
-    $values['owner'] = isset($theme->owner) ? $theme->owner : NULL;
+    $values['engine'] = $theme->engine ?? NULL;
+    $values['owner'] = $theme->owner ?? NULL;
     $values['extension'] = $theme;
 
     $base_active_themes = [];
diff --git a/core/lib/Drupal/Core/TypedData/ComputedItemListTrait.php b/core/lib/Drupal/Core/TypedData/ComputedItemListTrait.php
index 18f05b9ea007..09a2dc267959 100644
--- a/core/lib/Drupal/Core/TypedData/ComputedItemListTrait.php
+++ b/core/lib/Drupal/Core/TypedData/ComputedItemListTrait.php
@@ -80,7 +80,7 @@ public function get($index) {
     // @see \Drupal\Core\TypedData\Plugin\DataType\ItemList::get().
     $this->ensureComputedValue();
 
-    return isset($this->list[$index]) ? $this->list[$index] : NULL;
+    return $this->list[$index] ?? NULL;
   }
 
   /**
diff --git a/core/lib/Drupal/Core/TypedData/DataDefinition.php b/core/lib/Drupal/Core/TypedData/DataDefinition.php
index 44a8301ef062..8ac57a164100 100644
--- a/core/lib/Drupal/Core/TypedData/DataDefinition.php
+++ b/core/lib/Drupal/Core/TypedData/DataDefinition.php
@@ -72,7 +72,7 @@ public function setDataType($type) {
    * {@inheritdoc}
    */
   public function getLabel() {
-    return isset($this->definition['label']) ? $this->definition['label'] : NULL;
+    return $this->definition['label'] ?? NULL;
   }
 
   /**
@@ -93,7 +93,7 @@ public function setLabel($label) {
    * {@inheritdoc}
    */
   public function getDescription() {
-    return isset($this->definition['description']) ? $this->definition['description'] : NULL;
+    return $this->definition['description'] ?? NULL;
   }
 
   /**
@@ -215,7 +215,7 @@ public function setClass($class) {
    * {@inheritdoc}
    */
   public function getSettings() {
-    return isset($this->definition['settings']) ? $this->definition['settings'] : [];
+    return $this->definition['settings'] ?? [];
   }
 
   /**
@@ -236,7 +236,7 @@ public function setSettings(array $settings) {
    * {@inheritdoc}
    */
   public function getSetting($setting_name) {
-    return isset($this->definition['settings'][$setting_name]) ? $this->definition['settings'][$setting_name] : NULL;
+    return $this->definition['settings'][$setting_name] ?? NULL;
   }
 
   /**
@@ -259,7 +259,7 @@ public function setSetting($setting_name, $value) {
    * {@inheritdoc}
    */
   public function getConstraints() {
-    $constraints = isset($this->definition['constraints']) ? $this->definition['constraints'] : [];
+    $constraints = $this->definition['constraints'] ?? [];
     $constraints += $this->getTypedDataManager()->getDefaultConstraints($this);
     return $constraints;
   }
@@ -269,7 +269,7 @@ public function getConstraints() {
    */
   public function getConstraint($constraint_name) {
     $constraints = $this->getConstraints();
-    return isset($constraints[$constraint_name]) ? $constraints[$constraint_name] : NULL;
+    return $constraints[$constraint_name] ?? NULL;
   }
 
   /**
diff --git a/core/lib/Drupal/Core/TypedData/Plugin/DataType/ItemList.php b/core/lib/Drupal/Core/TypedData/Plugin/DataType/ItemList.php
index 71fa357778d0..18d68267a456 100644
--- a/core/lib/Drupal/Core/TypedData/Plugin/DataType/ItemList.php
+++ b/core/lib/Drupal/Core/TypedData/Plugin/DataType/ItemList.php
@@ -100,7 +100,7 @@ public function get($index) {
     if (!is_numeric($index)) {
       throw new \InvalidArgumentException('Unable to get a value with a non-numeric delta in a list.');
     }
-    return isset($this->list[$index]) ? $this->list[$index] : NULL;
+    return $this->list[$index] ?? NULL;
   }
 
   /**
@@ -120,7 +120,7 @@ public function set($index, $value) {
       $value = $value->getValue();
     }
     // If needed, create the item at the next position.
-    $item = isset($this->list[$index]) ? $this->list[$index] : $this->appendItem();
+    $item = $this->list[$index] ?? $this->appendItem();
     $item->setValue($value);
     return $this;
   }
diff --git a/core/lib/Drupal/Core/TypedData/Plugin/DataType/Map.php b/core/lib/Drupal/Core/TypedData/Plugin/DataType/Map.php
index 72768aa39bdf..800bcb37a532 100644
--- a/core/lib/Drupal/Core/TypedData/Plugin/DataType/Map.php
+++ b/core/lib/Drupal/Core/TypedData/Plugin/DataType/Map.php
@@ -83,7 +83,7 @@ public function setValue($values, $notify = TRUE) {
 
     // Update any existing property objects.
     foreach ($this->properties as $name => $property) {
-      $value = isset($values[$name]) ? $values[$name] : NULL;
+      $value = $values[$name] ?? NULL;
       $property->setValue($value, FALSE);
       // Remove the value from $this->values to ensure it does not contain any
       // value for computed properties.
diff --git a/core/lib/Drupal/Core/Validation/DrupalTranslator.php b/core/lib/Drupal/Core/Validation/DrupalTranslator.php
index 3003c1737c5b..6ac4169877e4 100644
--- a/core/lib/Drupal/Core/Validation/DrupalTranslator.php
+++ b/core/lib/Drupal/Core/Validation/DrupalTranslator.php
@@ -115,7 +115,7 @@ protected function getOptions($domain = NULL, $locale = NULL) {
     // We do not support domains, so we ignore this parameter.
     // If locale is left NULL, TranslatableMarkup will default to the interface
     // language.
-    $locale = isset($locale) ? $locale : $this->locale;
+    $locale = $locale ?? $this->locale;
     return ['langcode' => $locale];
   }
 
diff --git a/core/modules/big_pipe/src/Render/BigPipe.php b/core/modules/big_pipe/src/Render/BigPipe.php
index 40174b349b24..53e4424984c0 100644
--- a/core/modules/big_pipe/src/Render/BigPipe.php
+++ b/core/modules/big_pipe/src/Render/BigPipe.php
@@ -282,8 +282,8 @@ public function sendContent(BigPipeResponse $response) {
     $attachments = $response->getAttachments();
 
     // First, gather the BigPipe placeholders that must be replaced.
-    $placeholders = isset($attachments['big_pipe_placeholders']) ? $attachments['big_pipe_placeholders'] : [];
-    $nojs_placeholders = isset($attachments['big_pipe_nojs_placeholders']) ? $attachments['big_pipe_nojs_placeholders'] : [];
+    $placeholders = $attachments['big_pipe_placeholders'] ?? [];
+    $nojs_placeholders = $attachments['big_pipe_nojs_placeholders'] ?? [];
 
     // BigPipe sends responses using "Transfer-Encoding: chunked". To avoid
     // sending already-sent assets, it is necessary to track cumulative assets
diff --git a/core/modules/block/src/BlockForm.php b/core/modules/block/src/BlockForm.php
index 22c35644e669..297149dda8aa 100644
--- a/core/modules/block/src/BlockForm.php
+++ b/core/modules/block/src/BlockForm.php
@@ -248,7 +248,7 @@ protected function buildVisibilityInterface(array $form, FormStateInterface $for
       }
 
       /** @var \Drupal\Core\Condition\ConditionInterface $condition */
-      $condition = $this->manager->createInstance($condition_id, isset($visibility[$condition_id]) ? $visibility[$condition_id] : []);
+      $condition = $this->manager->createInstance($condition_id, $visibility[$condition_id] ?? []);
       $form_state->set(['conditions', $condition_id], $condition);
       $condition_form = $condition->buildConfigurationForm([], $form_state);
       $condition_form['#type'] = 'details';
diff --git a/core/modules/book/src/BookManager.php b/core/modules/book/src/BookManager.php
index 12d023cd3912..58a44e66373b 100644
--- a/core/modules/book/src/BookManager.php
+++ b/core/modules/book/src/BookManager.php
@@ -540,7 +540,7 @@ public function deleteFromBook($nid) {
    */
   public function bookTreeAllData($bid, $link = NULL, $max_depth = NULL) {
     // Use $nid as flag for whether the data being loaded is for the whole tree.
-    $nid = isset($link['nid']) ? $link['nid'] : 0;
+    $nid = $link['nid'] ?? 0;
     $langcode = $this->languageManager->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)->getId();
 
     // Create a cache ID for the given $nid, $link, $langcode and $max_depth.
@@ -747,7 +747,7 @@ protected function doBookTreeBuild($bid, array $parameters = []) {
       return $cache->data;
     }
 
-    $min_depth = (isset($parameters['min_depth']) ? $parameters['min_depth'] : 1);
+    $min_depth = $parameters['min_depth'] ?? 1;
     $result = $this->bookOutlineStorage->getBookMenuTree($bid, $parameters, $min_depth, static::BOOK_MAX_DEPTH);
 
     // Build an ordered array of links using the query result object.
@@ -756,7 +756,7 @@ protected function doBookTreeBuild($bid, array $parameters = []) {
       $link = (array) $link;
       $links[$link['nid']] = $link;
     }
-    $active_trail = (isset($parameters['active_trail']) ? $parameters['active_trail'] : []);
+    $active_trail = $parameters['active_trail'] ?? [];
     $data['tree'] = $this->buildBookOutlineData($links, $active_trail, $min_depth);
     $data['node_links'] = [];
     $this->bookTreeCollectNodeLinks($data['tree'], $data['node_links']);
@@ -821,7 +821,7 @@ protected function flatBookTree(array $tree, array &$flat) {
    */
   public function loadBookLink($nid, $translate = TRUE) {
     $links = $this->loadBookLinks([$nid], $translate);
-    return isset($links[$nid]) ? $links[$nid] : FALSE;
+    return $links[$nid] ?? FALSE;
   }
 
   /**
diff --git a/core/modules/ckeditor/ckeditor.admin.inc b/core/modules/ckeditor/ckeditor.admin.inc
index f9316c6a586d..b344edff9d4d 100644
--- a/core/modules/ckeditor/ckeditor.admin.inc
+++ b/core/modules/ckeditor/ckeditor.admin.inc
@@ -77,7 +77,7 @@ function template_preprocess_ckeditor_settings_toolbar(&$variables) {
     elseif (isset($button['image']) || isset($button['image' . $rtl])) {
       $value = [
         '#theme' => 'image',
-        '#uri' => isset($button['image' . $rtl]) ? $button['image' . $rtl] : $button['image'],
+        '#uri' => $button['image' . $rtl] ?? $button['image'],
         '#title' => $button['label'],
         '#prefix' => '<a href="#" role="button" title="' . $button['label'] . '" aria-label="' . $button['label'] . '"><span class="cke_button_icon">',
         '#suffix' => '</span></a>',
diff --git a/core/modules/comment/src/CommentManager.php b/core/modules/comment/src/CommentManager.php
index 815a391b180f..565df434b851 100644
--- a/core/modules/comment/src/CommentManager.php
+++ b/core/modules/comment/src/CommentManager.php
@@ -112,7 +112,7 @@ public function getFields($entity_type_id) {
     }
 
     $map = $this->entityFieldManager->getFieldMapByFieldType('comment');
-    return isset($map[$entity_type_id]) ? $map[$entity_type_id] : [];
+    return $map[$entity_type_id] ?? [];
   }
 
   /**
diff --git a/core/modules/comment/src/Plugin/Field/FieldFormatter/CommentDefaultFormatter.php b/core/modules/comment/src/Plugin/Field/FieldFormatter/CommentDefaultFormatter.php
index 35ce99b7ebe4..4e918ed5a8bc 100644
--- a/core/modules/comment/src/Plugin/Field/FieldFormatter/CommentDefaultFormatter.php
+++ b/core/modules/comment/src/Plugin/Field/FieldFormatter/CommentDefaultFormatter.php
@@ -251,7 +251,7 @@ public function settingsForm(array $form, FormStateInterface $form_state) {
   public function settingsSummary() {
     $view_mode = $this->getSetting('view_mode');
     $view_modes = $this->getViewModes();
-    $view_mode_label = isset($view_modes[$view_mode]) ? $view_modes[$view_mode] : 'default';
+    $view_mode_label = $view_modes[$view_mode] ?? 'default';
     $summary = [$this->t('Comment view mode: @mode', ['@mode' => $view_mode_label])];
     if ($pager_id = $this->getSetting('pager_id')) {
       $summary[] = $this->t('Pager ID: @id', ['@id' => $pager_id]);
diff --git a/core/modules/config_translation/src/FormElement/ListElement.php b/core/modules/config_translation/src/FormElement/ListElement.php
index 1ea452362b8b..612b0f1bc32f 100644
--- a/core/modules/config_translation/src/FormElement/ListElement.php
+++ b/core/modules/config_translation/src/FormElement/ListElement.php
@@ -85,7 +85,7 @@ public function setConfig(Config $base_config, LanguageConfigOverride $config_tr
       $element_key = isset($base_key) ? "$base_key.$key" : $key;
       if ($form_element = ConfigTranslationFormBase::createFormElement($element)) {
         // Traverse into the next level of the configuration.
-        $value = isset($config_values[$key]) ? $config_values[$key] : NULL;
+        $value = $config_values[$key] ?? NULL;
         $form_element->setConfig($base_config, $config_translation, $value, $element_key);
       }
     }
diff --git a/core/modules/config_translation/src/FormElement/PluralVariants.php b/core/modules/config_translation/src/FormElement/PluralVariants.php
index 42754e2c9b23..c659531b1331 100644
--- a/core/modules/config_translation/src/FormElement/PluralVariants.php
+++ b/core/modules/config_translation/src/FormElement/PluralVariants.php
@@ -35,7 +35,7 @@ protected function getSourceElement(LanguageInterface $source_language, $source_
         '#title' => $i == 0 ? $this->t('Singular form') : $this->formatPlural($i, 'First plural form', '@count. plural form'),
         '#markup' => new FormattableMarkup('<span lang="@langcode">@value</span>', [
           '@langcode' => $source_language->getId(),
-          '@value' => isset($values[$i]) ? $values[$i] : $this->t('(Empty)'),
+          '@value' => $values[$i] ?? $this->t('(Empty)'),
         ]),
       ];
     }
@@ -62,7 +62,7 @@ protected function getTranslationElement(LanguageInterface $translation_language
         '#type' => 'textfield',
         // @todo Should use better labels https://www.drupal.org/node/2499639
         '#title' => $i == 0 ? $this->t('Singular form') : $this->formatPlural($i, 'First plural form', '@count. plural form'),
-        '#default_value' => isset($values[$i]) ? $values[$i] : '',
+        '#default_value' => $values[$i] ?? '',
         '#attributes' => ['lang' => $translation_language->getId()],
       ];
     }
diff --git a/core/modules/config_translation/tests/src/Unit/ConfigNamesMapperTest.php b/core/modules/config_translation/tests/src/Unit/ConfigNamesMapperTest.php
index 1a66307611c0..728063ad5756 100644
--- a/core/modules/config_translation/tests/src/Unit/ConfigNamesMapperTest.php
+++ b/core/modules/config_translation/tests/src/Unit/ConfigNamesMapperTest.php
@@ -668,7 +668,7 @@ class TestConfigNamesMapper extends ConfigNamesMapper {
    *   The language code of this mapper if it is set; NULL otherwise.
    */
   public function getInternalLangcode() {
-    return isset($this->langcode) ? $this->langcode : NULL;
+    return $this->langcode ?? NULL;
   }
 
   /**
diff --git a/core/modules/contact/contact.module b/core/modules/contact/contact.module
index 6a81f5401dee..da2541b1c1f2 100644
--- a/core/modules/contact/contact.module
+++ b/core/modules/contact/contact.module
@@ -191,7 +191,7 @@ function contact_form_user_form_alter(&$form, FormStateInterface $form_state) {
   $form['contact']['contact'] = [
     '#type' => 'checkbox',
     '#title' => t('Personal contact form'),
-    '#default_value' => isset($account_data) ? $account_data : \Drupal::config('contact.settings')->get('user_default_enabled'),
+    '#default_value' => $account_data ?? \Drupal::config('contact.settings')->get('user_default_enabled'),
     '#description' => t('Allow other users to contact you via a personal contact form which keeps your email address hidden. Note that some privileged users such as site administrators are still able to contact you even if you choose to disable this feature.'),
   ];
   $form['actions']['submit']['#submit'][] = 'contact_user_profile_form_submit';
diff --git a/core/modules/content_moderation/src/Form/ContentModerationConfigureForm.php b/core/modules/content_moderation/src/Form/ContentModerationConfigureForm.php
index 12259d8dba27..301932f46c39 100644
--- a/core/modules/content_moderation/src/Form/ContentModerationConfigureForm.php
+++ b/core/modules/content_moderation/src/Form/ContentModerationConfigureForm.php
@@ -142,7 +142,7 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
       '#required' => TRUE,
       '#options' => array_map([State::class, 'labelCallback'], $this->workflowType->getStates()),
       '#description' => $this->t('Select the state that new content will be assigned. This state will appear as the default in content forms and the available target states will be based on the transitions available from this state.'),
-      '#default_value' => isset($workflow_type_configuration['default_moderation_state']) ? $workflow_type_configuration['default_moderation_state'] : 'draft',
+      '#default_value' => $workflow_type_configuration['default_moderation_state'] ?? 'draft',
     ];
     return $form;
   }
diff --git a/core/modules/content_moderation/src/Plugin/WorkflowType/ContentModeration.php b/core/modules/content_moderation/src/Plugin/WorkflowType/ContentModeration.php
index b585961d2dfd..d967f717e4a2 100644
--- a/core/modules/content_moderation/src/Plugin/WorkflowType/ContentModeration.php
+++ b/core/modules/content_moderation/src/Plugin/WorkflowType/ContentModeration.php
@@ -147,7 +147,7 @@ public function getEntityTypes() {
    * {@inheritdoc}
    */
   public function getBundlesForEntityType($entity_type_id) {
-    return isset($this->configuration['entity_types'][$entity_type_id]) ? $this->configuration['entity_types'][$entity_type_id] : [];
+    return $this->configuration['entity_types'][$entity_type_id] ?? [];
   }
 
   /**
diff --git a/core/modules/content_translation/src/FieldTranslationSynchronizer.php b/core/modules/content_translation/src/FieldTranslationSynchronizer.php
index 4c4aaaf93bf2..336909d2a7e8 100644
--- a/core/modules/content_translation/src/FieldTranslationSynchronizer.php
+++ b/core/modules/content_translation/src/FieldTranslationSynchronizer.php
@@ -155,7 +155,7 @@ public function synchronizeFields(ContentEntityInterface $entity, $sync_langcode
           foreach ($groups as $group) {
             $info = $column_groups[$group];
             // A missing 'columns' key indicates we have a single-column group.
-            $columns = array_merge($columns, isset($info['columns']) ? $info['columns'] : [$group]);
+            $columns = array_merge($columns, $info['columns'] ?? [$group]);
           }
           if (!empty($columns)) {
             $values = [];
@@ -285,7 +285,7 @@ public function synchronizeItems(array &$values, array $unchanged_items, $sync_l
             // the new values are at least propagated to all the translations.
             // If the value has only been reordered we just move the old one in
             // the new position.
-            $item = isset($original_field_values[$langcode][$old_delta]) ? $original_field_values[$langcode][$old_delta] : $source_items[$new_delta];
+            $item = $original_field_values[$langcode][$old_delta] ?? $source_items[$new_delta];
             // When saving a default revision starting from a pending revision,
             // we may have desynchronized field values, so we make sure that
             // untranslatable properties are synchronized, even if in any other
diff --git a/core/modules/content_translation/src/Plugin/migrate/source/d7/EntityTranslationSettings.php b/core/modules/content_translation/src/Plugin/migrate/source/d7/EntityTranslationSettings.php
index 1723e09708b3..c5f3bb2aa06a 100644
--- a/core/modules/content_translation/src/Plugin/migrate/source/d7/EntityTranslationSettings.php
+++ b/core/modules/content_translation/src/Plugin/migrate/source/d7/EntityTranslationSettings.php
@@ -80,12 +80,12 @@ protected function initializeIterator() {
       // settings variable exists for that node type, otherwise use default
       // values.
       foreach ($node_types as $node_type) {
-        $settings = isset($results['entity_translation_settings_node__' . $node_type]) ? $results['entity_translation_settings_node__' . $node_type] : [];
+        $settings = $results['entity_translation_settings_node__' . $node_type] ?? [];
         $rows[] = [
           'id' => 'node.' . $node_type,
           'target_entity_type_id' => 'node',
           'target_bundle' => $node_type,
-          'default_langcode' => isset($settings['default_language']) ? $settings['default_language'] : 'und',
+          'default_langcode' => $settings['default_language'] ?? 'und',
           // The Drupal 7 'hide_language_selector' configuration has become
           // 'language_alterable' in Drupal 8 so we need to negate the value we
           // receive from the source. The Drupal 7 'hide_language_selector'
@@ -104,7 +104,7 @@ protected function initializeIterator() {
       // if a settings variable exists for that comment type, otherwise use
       // default values.
       foreach ($node_types as $node_type) {
-        $settings = isset($results['entity_translation_settings_comment__comment_node_' . $node_type]) ? $results['entity_translation_settings_comment__comment_node_' . $node_type] : [];
+        $settings = $results['entity_translation_settings_comment__comment_node_' . $node_type] ?? [];
         // Forum uses a hardcoded comment type name, so make sure we use it
         // when we're dealing with forum comment type.
         $bundle = $node_type == 'forum' ? 'comment_forum' : 'comment_node_' . $node_type;
@@ -112,7 +112,7 @@ protected function initializeIterator() {
           'id' => 'comment.' . $bundle,
           'target_entity_type_id' => 'comment',
           'target_bundle' => $bundle,
-          'default_langcode' => isset($settings['default_language']) ? $settings['default_language'] : 'xx-et-current',
+          'default_langcode' => $settings['default_language'] ?? 'xx-et-current',
           // The Drupal 7 'hide_language_selector' configuration has become
           // 'language_alterable' in Drupal 8 so we need to negate the value we
           // receive from the source. The Drupal 7 'hide_language_selector'
@@ -129,12 +129,12 @@ protected function initializeIterator() {
       // settings variable exists for that vocabulary, otherwise use default
       // values.
       foreach ($vocabularies as $vocabulary) {
-        $settings = isset($results['entity_translation_settings_taxonomy_term__' . $vocabulary]) ? $results['entity_translation_settings_taxonomy_term__' . $vocabulary] : [];
+        $settings = $results['entity_translation_settings_taxonomy_term__' . $vocabulary] ?? [];
         $rows[] = [
           'id' => 'taxonomy_term.' . $vocabulary,
           'target_entity_type_id' => 'taxonomy_term',
           'target_bundle' => $vocabulary,
-          'default_langcode' => isset($settings['default_language']) ? $settings['default_language'] : 'xx-et-default',
+          'default_langcode' => $settings['default_language'] ?? 'xx-et-default',
           // The Drupal 7 'hide_language_selector' configuration has become
           // 'language_alterable' in Drupal 8 so we need to negate the value we
           // receive from the source. The Drupal 7 'hide_language_selector'
@@ -149,12 +149,12 @@ protected function initializeIterator() {
     if (in_array('user', $entity_types, TRUE)) {
       // User entity type is not bundleable. Check if a settings variable
       // exists, otherwise use default values.
-      $settings = isset($results['entity_translation_settings_user__user']) ? $results['entity_translation_settings_user__user'] : [];
+      $settings = $results['entity_translation_settings_user__user'] ?? [];
       $rows[] = [
         'id' => 'user.user',
         'target_entity_type_id' => 'user',
         'target_bundle' => 'user',
-        'default_langcode' => isset($settings['default_language']) ? $settings['default_language'] : 'xx-et-default',
+        'default_langcode' => $settings['default_language'] ?? 'xx-et-default',
         // The Drupal 7 'hide_language_selector' configuration has become
         // 'language_alterable' in Drupal 8 so we need to negate the value we
         // receive from the source. The Drupal 7 'hide_language_selector'
diff --git a/core/modules/contextual/src/Element/ContextualLinks.php b/core/modules/contextual/src/Element/ContextualLinks.php
index c4bd3b21f714..27c71dcbcb87 100644
--- a/core/modules/contextual/src/Element/ContextualLinks.php
+++ b/core/modules/contextual/src/Element/ContextualLinks.php
@@ -78,7 +78,7 @@ public static function preRenderLinks(array $element) {
       $class = Html::getClass($class);
       $links[$class] = [
         'title' => $item['title'],
-        'url' => Url::fromRoute(isset($item['route_name']) ? $item['route_name'] : '', isset($item['route_parameters']) ? $item['route_parameters'] : [], $item['localized_options']),
+        'url' => Url::fromRoute($item['route_name'] ?? '', $item['route_parameters'] ?? [], $item['localized_options']),
       ];
     }
     $element['#links'] = $links;
diff --git a/core/modules/datetime/src/Plugin/Field/FieldType/DateTimeFieldItemList.php b/core/modules/datetime/src/Plugin/Field/FieldType/DateTimeFieldItemList.php
index 203f15d0bd0a..5f77efcd6cd6 100644
--- a/core/modules/datetime/src/Plugin/Field/FieldType/DateTimeFieldItemList.php
+++ b/core/modules/datetime/src/Plugin/Field/FieldType/DateTimeFieldItemList.php
@@ -36,7 +36,7 @@ public function defaultValuesForm(array &$form, FormStateInterface $form_state)
           '#type' => 'select',
           '#title' => t('Default date'),
           '#description' => t('Set a default value for this date.'),
-          '#default_value' => isset($default_value[0]['default_date_type']) ? $default_value[0]['default_date_type'] : '',
+          '#default_value' => $default_value[0]['default_date_type'] ?? '',
           '#options' => [
             static::DEFAULT_VALUE_NOW => t('Current date'),
             static::DEFAULT_VALUE_CUSTOM => t('Relative date'),
diff --git a/core/modules/datetime_range/src/Plugin/Field/FieldType/DateRangeFieldItemList.php b/core/modules/datetime_range/src/Plugin/Field/FieldType/DateRangeFieldItemList.php
index f4ca8b8febf5..bf2e578feff9 100644
--- a/core/modules/datetime_range/src/Plugin/Field/FieldType/DateRangeFieldItemList.php
+++ b/core/modules/datetime_range/src/Plugin/Field/FieldType/DateRangeFieldItemList.php
@@ -31,7 +31,7 @@ public function defaultValuesForm(array &$form, FormStateInterface $form_state)
         '#type' => 'select',
         '#title' => $this->t('Default end date'),
         '#description' => $this->t('Set a default value for the end date.'),
-        '#default_value' => isset($default_value[0]['default_end_date_type']) ? $default_value[0]['default_end_date_type'] : '',
+        '#default_value' => $default_value[0]['default_end_date_type'] ?? '',
         '#options' => [
           static::DEFAULT_VALUE_NOW => $this->t('Current date'),
           static::DEFAULT_VALUE_CUSTOM => $this->t('Relative date'),
diff --git a/core/modules/editor/editor.module b/core/modules/editor/editor.module
index 4a76f7c86557..da32ff01cba0 100644
--- a/core/modules/editor/editor.module
+++ b/core/modules/editor/editor.module
@@ -282,7 +282,7 @@ function editor_load($format_id) {
   // formats for administrators). Loading a small number of editors all at once
   // is more efficient than loading multiple editors individually.
   $editors = Editor::loadMultiple();
-  return isset($editors[$format_id]) ? $editors[$format_id] : NULL;
+  return $editors[$format_id] ?? NULL;
 }
 
 /**
@@ -403,8 +403,7 @@ function editor_entity_update(EntityInterface $entity) {
 
     // Detect file usages that should be incremented.
     foreach ($uuids_by_field as $field => $uuids) {
-      $original_uuids = isset($original_uuids_by_field[$field]) ?
-        $original_uuids_by_field[$field] : [];
+      $original_uuids = $original_uuids_by_field[$field] ?? [];
 
       if ($added_files = array_diff($uuids_by_field[$field], $original_uuids)) {
         _editor_record_file_usage($added_files, $entity);
diff --git a/core/modules/editor/src/Form/EditorImageDialog.php b/core/modules/editor/src/Form/EditorImageDialog.php
index 6308aea77313..a1ced5747b31 100644
--- a/core/modules/editor/src/Form/EditorImageDialog.php
+++ b/core/modules/editor/src/Form/EditorImageDialog.php
@@ -116,7 +116,7 @@ public function buildForm(array $form, FormStateInterface $form_state, Editor $e
     $form['attributes']['src'] = [
       '#title' => $this->t('URL'),
       '#type' => 'textfield',
-      '#default_value' => isset($image_element['src']) ? $image_element['src'] : '',
+      '#default_value' => $image_element['src'] ?? '',
       '#maxlength' => 2048,
       '#required' => TRUE,
     ];
@@ -139,7 +139,7 @@ public function buildForm(array $form, FormStateInterface $form_state, Editor $e
     // an existing image (which means the src attribute is set) and its alt
     // attribute is empty, then we show that as two double quotes in the dialog.
     // @see https://www.drupal.org/node/2307647
-    $alt = isset($image_element['alt']) ? $image_element['alt'] : '';
+    $alt = $image_element['alt'] ?? '';
     if ($alt === '' && !empty($image_element['src'])) {
       $alt = '""';
     }
diff --git a/core/modules/editor/src/Form/EditorLinkDialog.php b/core/modules/editor/src/Form/EditorLinkDialog.php
index 1b1735a2e781..df0bcfef69d8 100644
--- a/core/modules/editor/src/Form/EditorLinkDialog.php
+++ b/core/modules/editor/src/Form/EditorLinkDialog.php
@@ -40,7 +40,7 @@ public function buildForm(array $form, FormStateInterface $form_state, Editor $e
     // The default values are set directly from \Drupal::request()->request,
     // provided by the editor plugin opening the dialog.
     $user_input = $form_state->getUserInput();
-    $input = isset($user_input['editor_object']) ? $user_input['editor_object'] : [];
+    $input = $user_input['editor_object'] ?? [];
 
     $form['#tree'] = TRUE;
     $form['#attached']['library'][] = 'editor/drupal.editor.dialog';
@@ -52,7 +52,7 @@ public function buildForm(array $form, FormStateInterface $form_state, Editor $e
     $form['attributes']['href'] = [
       '#title' => $this->t('URL'),
       '#type' => 'textfield',
-      '#default_value' => isset($input['href']) ? $input['href'] : '',
+      '#default_value' => $input['href'] ?? '',
       '#maxlength' => 2048,
     ];
 
diff --git a/core/modules/field/src/FieldConfigStorage.php b/core/modules/field/src/FieldConfigStorage.php
index 7d5389778c4f..3f18a0fed7a6 100644
--- a/core/modules/field/src/FieldConfigStorage.php
+++ b/core/modules/field/src/FieldConfigStorage.php
@@ -101,7 +101,7 @@ public function importDelete($name, Config $new_config, Config $old_config) {
    */
   public function loadByProperties(array $conditions = []) {
     // Include deleted fields if specified in the $conditions parameters.
-    $include_deleted = isset($conditions['include_deleted']) ? $conditions['include_deleted'] : FALSE;
+    $include_deleted = $conditions['include_deleted'] ?? FALSE;
     unset($conditions['include_deleted']);
 
     $fields = [];
diff --git a/core/modules/field/src/FieldStorageConfigStorage.php b/core/modules/field/src/FieldStorageConfigStorage.php
index 1125ab97ec3f..dee08eb58d34 100644
--- a/core/modules/field/src/FieldStorageConfigStorage.php
+++ b/core/modules/field/src/FieldStorageConfigStorage.php
@@ -101,7 +101,7 @@ public static function createInstance(ContainerInterface $container, EntityTypeI
    */
   public function loadByProperties(array $conditions = []) {
     // Include deleted fields if specified in the $conditions parameters.
-    $include_deleted = isset($conditions['include_deleted']) ? $conditions['include_deleted'] : FALSE;
+    $include_deleted = $conditions['include_deleted'] ?? FALSE;
     unset($conditions['include_deleted']);
 
     /** @var \Drupal\field\FieldStorageConfigInterface[] $storages */
diff --git a/core/modules/field/src/Plugin/migrate/process/d6/FieldFormatterSettingsDefaults.php b/core/modules/field/src/Plugin/migrate/process/d6/FieldFormatterSettingsDefaults.php
index 9a8e86abb735..1e9c82cd3a94 100644
--- a/core/modules/field/src/Plugin/migrate/process/d6/FieldFormatterSettingsDefaults.php
+++ b/core/modules/field/src/Plugin/migrate/process/d6/FieldFormatterSettingsDefaults.php
@@ -126,7 +126,7 @@ protected function numberSettings($type, $format) {
       ],
     ];
 
-    return isset($map[$type][$format]) ? $map[$type][$format] : [];
+    return $map[$type][$format] ?? [];
   }
 
 }
diff --git a/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceOptionTranslation.php b/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceOptionTranslation.php
index 72e954bf0cb4..4b612bffaa78 100644
--- a/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceOptionTranslation.php
+++ b/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceOptionTranslation.php
@@ -34,7 +34,7 @@ public function transform($value, MigrateExecutableInterface $migrate_executable
           for ($i = 0; $i < 2; $i++) {
             $value = $list[$i];
             $tmp = explode("|", $value);
-            $original_option_key = isset($tmp[0]) ? $tmp[0] : NULL;
+            $original_option_key = $tmp[0] ?? NULL;
             $option_key = ($i === 0) ? 'off_label' : 'on_label';
             // Find property with name matching the original option.
             if ($option == $original_option_key) {
diff --git a/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceWidgetSettings.php b/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceWidgetSettings.php
index 758e803eb5d4..a64a14968903 100644
--- a/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceWidgetSettings.php
+++ b/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceWidgetSettings.php
@@ -39,9 +39,9 @@ public function transform($value, MigrateExecutableInterface $migrate_executable
    *   A valid array of settings.
    */
   public function getSettings($widget_type, $widget_settings) {
-    $progress = isset($widget_settings['progress_indicator']) ? $widget_settings['progress_indicator'] : 'throbber';
-    $size = isset($widget_settings['size']) ? $widget_settings['size'] : 60;
-    $rows = isset($widget_settings['rows']) ? $widget_settings['rows'] : 5;
+    $progress = $widget_settings['progress_indicator'] ?? 'throbber';
+    $size = $widget_settings['size'] ?? 60;
+    $rows = $widget_settings['rows'] ?? 5;
 
     $settings = [
       'text_textfield' => [
@@ -77,7 +77,7 @@ public function getSettings($widget_type, $widget_settings) {
       ],
     ];
 
-    return isset($settings[$widget_type]) ? $settings[$widget_type] : [];
+    return $settings[$widget_type] ?? [];
   }
 
 }
diff --git a/core/modules/field/src/Plugin/migrate/process/d6/FieldSettings.php b/core/modules/field/src/Plugin/migrate/process/d6/FieldSettings.php
index e8cf7f5fa687..967b4cbd796c 100644
--- a/core/modules/field/src/Plugin/migrate/process/d6/FieldSettings.php
+++ b/core/modules/field/src/Plugin/migrate/process/d6/FieldSettings.php
@@ -44,7 +44,7 @@ public function transform($value, MigrateExecutableInterface $migrate_executable
    *   A valid array of settings.
    */
   public function getSettings($field_type, $global_settings, $original_field_type = NULL) {
-    $max_length = isset($global_settings['max_length']) ? $global_settings['max_length'] : '';
+    $max_length = $global_settings['max_length'] ?? '';
     $max_length = empty($max_length) ? 255 : $max_length;
     $allowed_values = [];
     if (isset($global_settings['allowed_values'])) {
@@ -57,7 +57,7 @@ public function getSettings($field_type, $global_settings, $original_field_type
         case 'list_float':
           foreach ($list as $value) {
             $value = explode("|", $value);
-            $allowed_values[$value[0]] = isset($value[1]) ? $value[1] : $value[0];
+            $allowed_values[$value[0]] = $value[1] ?? $value[0];
           }
           break;
 
@@ -89,7 +89,7 @@ public function getSettings($field_type, $global_settings, $original_field_type
       return ['target_type' => 'user'];
     }
     else {
-      return isset($settings[$field_type]) ? $settings[$field_type] : [];
+      return $settings[$field_type] ?? [];
     }
   }
 
diff --git a/core/modules/field/tests/modules/field_test/src/Plugin/Field/FieldWidget/TestFieldWidget.php b/core/modules/field/tests/modules/field_test/src/Plugin/Field/FieldWidget/TestFieldWidget.php
index 9dd3387e5aae..b2f9738f24c8 100644
--- a/core/modules/field/tests/modules/field_test/src/Plugin/Field/FieldWidget/TestFieldWidget.php
+++ b/core/modules/field/tests/modules/field_test/src/Plugin/Field/FieldWidget/TestFieldWidget.php
@@ -63,7 +63,7 @@ public function settingsSummary() {
   public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
     $element += [
       '#type' => 'textfield',
-      '#default_value' => isset($items[$delta]->value) ? $items[$delta]->value : '',
+      '#default_value' => $items[$delta]->value ?? '',
     ];
     return ['value' => $element];
   }
diff --git a/core/modules/field_ui/src/Element/FieldUiTable.php b/core/modules/field_ui/src/Element/FieldUiTable.php
index 839a0ed5f44a..8dee40d7333a 100644
--- a/core/modules/field_ui/src/Element/FieldUiTable.php
+++ b/core/modules/field_ui/src/Element/FieldUiTable.php
@@ -83,7 +83,7 @@ public static function tablePreRender($elements) {
             $indentation = [
               '#theme' => 'indentation',
               '#size' => $depth,
-              '#suffix' => isset($row[$cell]['#prefix']) ? $row[$cell]['#prefix'] : '',
+              '#suffix' => $row[$cell]['#prefix'] ?? '',
             ];
             $row[$cell]['#prefix'] = \Drupal::service('renderer')->render($indentation);
           }
diff --git a/core/modules/field_ui/src/Form/EntityDisplayFormBase.php b/core/modules/field_ui/src/Form/EntityDisplayFormBase.php
index 97d234aad4f2..8f399144099f 100644
--- a/core/modules/field_ui/src/Form/EntityDisplayFormBase.php
+++ b/core/modules/field_ui/src/Form/EntityDisplayFormBase.php
@@ -604,7 +604,7 @@ protected function copyFormValuesToEntity(EntityInterface $entity, array $form,
           // Only store settings actually used by the selected plugin.
           $default_settings = $this->pluginManager->getDefaultSettings($options['type']);
           $options['settings'] = isset($values['settings_edit_form']['settings']) ? array_intersect_key($values['settings_edit_form']['settings'], $default_settings) : [];
-          $options['third_party_settings'] = isset($values['settings_edit_form']['third_party_settings']) ? $values['settings_edit_form']['third_party_settings'] : [];
+          $options['third_party_settings'] = $values['settings_edit_form']['third_party_settings'] ?? [];
           $form_state->set('plugin_settings_update', NULL);
         }
 
@@ -704,8 +704,8 @@ public function multistepAjax($form, FormStateInterface $form_state) {
     foreach ($updated_rows as $name) {
       foreach ($updated_columns as $key) {
         $element = &$form['fields'][$name][$key];
-        $element['#prefix'] = '<div class="ajax-new-content">' . (isset($element['#prefix']) ? $element['#prefix'] : '');
-        $element['#suffix'] = (isset($element['#suffix']) ? $element['#suffix'] : '') . '</div>';
+        $element['#prefix'] = '<div class="ajax-new-content">' . ($element['#prefix'] ?? '');
+        $element['#suffix'] = ($element['#suffix'] ?? '') . '</div>';
       }
     }
 
@@ -724,7 +724,7 @@ public function multistepAjax($form, FormStateInterface $form_state) {
   protected function getExtraFields() {
     $context = $this->displayContext == 'view' ? 'display' : $this->displayContext;
     $extra_fields = $this->entityFieldManager->getExtraFields($this->entity->getTargetEntityTypeId(), $this->entity->getTargetBundle());
-    return isset($extra_fields[$context]) ? $extra_fields[$context] : [];
+    return $extra_fields[$context] ?? [];
   }
 
   /**
diff --git a/core/modules/field_ui/src/Form/EntityFormDisplayEditForm.php b/core/modules/field_ui/src/Form/EntityFormDisplayEditForm.php
index 5442d7fa7ee6..6ee46132f2d4 100644
--- a/core/modules/field_ui/src/Form/EntityFormDisplayEditForm.php
+++ b/core/modules/field_ui/src/Form/EntityFormDisplayEditForm.php
@@ -62,7 +62,7 @@ protected function getEntityDisplay($entity_type_id, $bundle, $mode) {
    * {@inheritdoc}
    */
   protected function getDefaultPlugin($field_type) {
-    return isset($this->fieldTypes[$field_type]['default_widget']) ? $this->fieldTypes[$field_type]['default_widget'] : NULL;
+    return $this->fieldTypes[$field_type]['default_widget'] ?? NULL;
   }
 
   /**
diff --git a/core/modules/field_ui/src/Form/EntityViewDisplayEditForm.php b/core/modules/field_ui/src/Form/EntityViewDisplayEditForm.php
index eeb54fcb4415..73ed8b439599 100644
--- a/core/modules/field_ui/src/Form/EntityViewDisplayEditForm.php
+++ b/core/modules/field_ui/src/Form/EntityViewDisplayEditForm.php
@@ -95,7 +95,7 @@ protected function getEntityDisplay($entity_type_id, $bundle, $mode) {
    * {@inheritdoc}
    */
   protected function getDefaultPlugin($field_type) {
-    return isset($this->fieldTypes[$field_type]['default_formatter']) ? $this->fieldTypes[$field_type]['default_formatter'] : NULL;
+    return $this->fieldTypes[$field_type]['default_formatter'] ?? NULL;
   }
 
   /**
diff --git a/core/modules/field_ui/src/Form/FieldStorageAddForm.php b/core/modules/field_ui/src/Form/FieldStorageAddForm.php
index c4af96099c9b..8a1139b0df0e 100644
--- a/core/modules/field_ui/src/Form/FieldStorageAddForm.php
+++ b/core/modules/field_ui/src/Form/FieldStorageAddForm.php
@@ -363,10 +363,10 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
           }
         }
 
-        $widget_id = isset($field_options['entity_form_display']['type']) ? $field_options['entity_form_display']['type'] : NULL;
-        $widget_settings = isset($field_options['entity_form_display']['settings']) ? $field_options['entity_form_display']['settings'] : [];
-        $formatter_id = isset($field_options['entity_view_display']['type']) ? $field_options['entity_view_display']['type'] : NULL;
-        $formatter_settings = isset($field_options['entity_view_display']['settings']) ? $field_options['entity_view_display']['settings'] : [];
+        $widget_id = $field_options['entity_form_display']['type'] ?? NULL;
+        $widget_settings = $field_options['entity_form_display']['settings'] ?? [];
+        $formatter_id = $field_options['entity_view_display']['type'] ?? NULL;
+        $formatter_settings = $field_options['entity_view_display']['settings'] ?? [];
       }
 
       // Create the field storage and field.
diff --git a/core/modules/field_ui/src/Form/FieldStorageConfigEditForm.php b/core/modules/field_ui/src/Form/FieldStorageConfigEditForm.php
index bf1994c1f93c..d70c0aadd4cb 100644
--- a/core/modules/field_ui/src/Form/FieldStorageConfigEditForm.php
+++ b/core/modules/field_ui/src/Form/FieldStorageConfigEditForm.php
@@ -254,7 +254,7 @@ protected function getEnforcedCardinality() {
     /** @var \Drupal\Core\Field\FieldTypePluginManager $field_type_manager */
     $field_type_manager = \Drupal::service('plugin.manager.field.field_type');
     $definition = $field_type_manager->getDefinition($this->entity->getType());
-    return isset($definition['cardinality']) ? $definition['cardinality'] : NULL;
+    return $definition['cardinality'] ?? NULL;
   }
 
 }
diff --git a/core/modules/file/file.module b/core/modules/file/file.module
index 62e44a390724..d222f3560c9d 100644
--- a/core/modules/file/file.module
+++ b/core/modules/file/file.module
@@ -713,9 +713,9 @@ function _file_save_upload_from_form(array $element, FormStateInterface $form_st
   // from the messenger service.
   $errors_before = \Drupal::messenger()->deleteByType(MessengerInterface::TYPE_ERROR);
 
-  $upload_location = isset($element['#upload_location']) ? $element['#upload_location'] : FALSE;
+  $upload_location = $element['#upload_location'] ?? FALSE;
   $upload_name = implode('_', $element['#parents']);
-  $upload_validators = isset($element['#upload_validators']) ? $element['#upload_validators'] : [];
+  $upload_validators = $element['#upload_validators'] ?? [];
 
   $result = file_save_upload($upload_name, $upload_validators, $upload_location, $delta, $replace);
 
@@ -1431,7 +1431,7 @@ function file_managed_file_save_upload($element, FormStateInterface $form_state)
   }
   $file_upload = $all_files[$upload_name];
 
-  $destination = isset($element['#upload_location']) ? $element['#upload_location'] : NULL;
+  $destination = $element['#upload_location'] ?? NULL;
   if (isset($destination) && !\Drupal::service('file_system')->prepareDirectory($destination, FileSystemInterface::CREATE_DIRECTORY)) {
     \Drupal::logger('file')->notice('The upload directory %directory for the file field %name could not be created or is not accessible. A newly uploaded file could not be saved in this directory as a consequence, and the upload was canceled.', ['%directory' => $destination, '%name' => $element['#field_name']]);
     $form_state->setError($element, t('The file could not be uploaded.'));
@@ -1725,7 +1725,7 @@ function file_get_file_references(FileInterface $file, FieldDefinitionInterface
   if (!isset($references[$file->id()][$age])) {
     $references[$file->id()][$age] = [];
     $usage_list = \Drupal::service('file.usage')->listUsage($file);
-    $file_usage_list = isset($usage_list['file']) ? $usage_list['file'] : [];
+    $file_usage_list = $usage_list['file'] ?? [];
     foreach ($file_usage_list as $entity_type_id => $entity_ids) {
       $entities = \Drupal::entityTypeManager()
         ->getStorage($entity_type_id)->loadMultiple(array_keys($entity_ids));
@@ -1807,7 +1807,7 @@ function _views_file_status($choice = NULL) {
   ];
 
   if (isset($choice)) {
-    return isset($status[$choice]) ? $status[$choice] : t('Unknown');
+    return $status[$choice] ?? t('Unknown');
   }
 
   return $status;
diff --git a/core/modules/file/src/Element/ManagedFile.php b/core/modules/file/src/Element/ManagedFile.php
index cd5006a62801..e198f353dc8f 100644
--- a/core/modules/file/src/Element/ManagedFile.php
+++ b/core/modules/file/src/Element/ManagedFile.php
@@ -136,11 +136,11 @@ public static function valueCallback(&$element, $input, FormStateInterface $form
     // default value.
     if ($input === FALSE || $force_default) {
       if ($element['#extended']) {
-        $default_fids = isset($element['#default_value']['fids']) ? $element['#default_value']['fids'] : [];
-        $return = isset($element['#default_value']) ? $element['#default_value'] : ['fids' => []];
+        $default_fids = $element['#default_value']['fids'] ?? [];
+        $return = $element['#default_value'] ?? ['fids' => []];
       }
       else {
-        $default_fids = isset($element['#default_value']) ? $element['#default_value'] : [];
+        $default_fids = $element['#default_value'] ?? [];
         $return = ['fids' => []];
       }
 
@@ -220,7 +220,7 @@ public static function processManagedFile(&$element, FormStateInterface $form_st
     // This is used sometimes so let's implode it just once.
     $parents_prefix = implode('_', $element['#parents']);
 
-    $fids = isset($element['#value']['fids']) ? $element['#value']['fids'] : [];
+    $fids = $element['#value']['fids'] ?? [];
 
     // Set some default element properties.
     $element['#progress_indicator'] = empty($element['#progress_indicator']) ? 'none' : $element['#progress_indicator'];
diff --git a/core/modules/file/src/Plugin/Field/FieldType/FileItem.php b/core/modules/file/src/Plugin/Field/FieldType/FileItem.php
index 9f8bc687fb7a..758d483e0139 100644
--- a/core/modules/file/src/Plugin/Field/FieldType/FileItem.php
+++ b/core/modules/file/src/Plugin/Field/FieldType/FileItem.php
@@ -188,7 +188,7 @@ public function fieldSettingsForm(array $form, FormStateInterface $form_state) {
     $element['description_field'] = [
       '#type' => 'checkbox',
       '#title' => t('Enable <em>Description</em> field'),
-      '#default_value' => isset($settings['description_field']) ? $settings['description_field'] : '',
+      '#default_value' => $settings['description_field'] ?? '',
       '#description' => t('The description field allows users to enter a description about the uploaded file.'),
       '#weight' => 11,
     ];
diff --git a/core/modules/file/src/Plugin/Field/FieldWidget/FileWidget.php b/core/modules/file/src/Plugin/Field/FieldWidget/FileWidget.php
index da7c22e8d750..889279788871 100644
--- a/core/modules/file/src/Plugin/Field/FieldWidget/FileWidget.php
+++ b/core/modules/file/src/Plugin/Field/FieldWidget/FileWidget.php
@@ -409,7 +409,7 @@ public static function process($element, FormStateInterface $form_state, $form)
       $element['description'] = [
         '#type' => $config->get('description.type'),
         '#title' => t('Description'),
-        '#value' => isset($item['description']) ? $item['description'] : '',
+        '#value' => $item['description'] ?? '',
         '#maxlength' => $config->get('description.length'),
         '#description' => t('The description may be used as the label of the link to the file.'),
       ];
diff --git a/core/modules/file/src/Plugin/migrate/process/d6/FieldFile.php b/core/modules/file/src/Plugin/migrate/process/d6/FieldFile.php
index 9a0c93f610d6..86987453de7e 100644
--- a/core/modules/file/src/Plugin/migrate/process/d6/FieldFile.php
+++ b/core/modules/file/src/Plugin/migrate/process/d6/FieldFile.php
@@ -74,9 +74,9 @@ public function transform($value, MigrateExecutableInterface $migrate_executable
       return [
         'target_id' => $lookup_result[0]['fid'],
         'display' => $value['list'],
-        'description' => isset($options['description']) ? $options['description'] : '',
-        'alt' => isset($options['alt']) ? $options['alt'] : '',
-        'title' => isset($options['title']) ? $options['title'] : '',
+        'description' => $options['description'] ?? '',
+        'alt' => $options['alt'] ?? '',
+        'title' => $options['title'] ?? '',
       ];
     }
     else {
diff --git a/core/modules/file/src/Plugin/migrate/source/d6/File.php b/core/modules/file/src/Plugin/migrate/source/d6/File.php
index 7b7b2df31164..1332a0c9cfda 100644
--- a/core/modules/file/src/Plugin/migrate/source/d6/File.php
+++ b/core/modules/file/src/Plugin/migrate/source/d6/File.php
@@ -54,7 +54,7 @@ public function query() {
    * {@inheritdoc}
    */
   protected function initializeIterator() {
-    $site_path = isset($this->configuration['site_path']) ? $this->configuration['site_path'] : 'sites/default';
+    $site_path = $this->configuration['site_path'] ?? 'sites/default';
     $this->filePath = $this->variableGet('file_directory_path', $site_path . '/files') . '/';
     $this->tempFilePath = $this->variableGet('file_directory_temp', '/tmp') . '/';
 
diff --git a/core/modules/file/tests/src/Functional/FileFieldTestBase.php b/core/modules/file/tests/src/Functional/FileFieldTestBase.php
index cdb0e3da3194..cbfe67fa3c18 100644
--- a/core/modules/file/tests/src/Functional/FileFieldTestBase.php
+++ b/core/modules/file/tests/src/Functional/FileFieldTestBase.php
@@ -222,7 +222,7 @@ public function replaceNodeFile($file, $field_name, $nid, $new_revision = TRUE)
   public function assertFileEntryExists($file, $message = NULL) {
     $this->container->get('entity_type.manager')->getStorage('file')->resetCache();
     $db_file = File::load($file->id());
-    $message = isset($message) ? $message : new FormattableMarkup('File %file exists in database at the correct path.', ['%file' => $file->getFileUri()]);
+    $message = $message ?? new FormattableMarkup('File %file exists in database at the correct path.', ['%file' => $file->getFileUri()]);
     $this->assertEquals($file->getFileUri(), $db_file->getFileUri(), $message);
   }
 
@@ -231,7 +231,7 @@ public function assertFileEntryExists($file, $message = NULL) {
    */
   public function assertFileEntryNotExists($file, $message) {
     $this->container->get('entity_type.manager')->getStorage('file')->resetCache();
-    $message = isset($message) ? $message : new FormattableMarkup('File %file exists in database at the correct path.', ['%file' => $file->getFileUri()]);
+    $message = $message ?? new FormattableMarkup('File %file exists in database at the correct path.', ['%file' => $file->getFileUri()]);
     $this->assertNull(File::load($file->id()), $message);
   }
 
@@ -239,7 +239,7 @@ public function assertFileEntryNotExists($file, $message) {
    * Asserts that a file's status is set to permanent in the database.
    */
   public function assertFileIsPermanent(FileInterface $file, $message = NULL) {
-    $message = isset($message) ? $message : new FormattableMarkup('File %file is permanent.', ['%file' => $file->getFileUri()]);
+    $message = $message ?? new FormattableMarkup('File %file is permanent.', ['%file' => $file->getFileUri()]);
     $this->assertTrue($file->isPermanent(), $message);
   }
 
diff --git a/core/modules/filter/src/Plugin/migrate/process/d6/FilterFormatPermission.php b/core/modules/filter/src/Plugin/migrate/process/d6/FilterFormatPermission.php
index db17056c178d..2e688aa71f3b 100644
--- a/core/modules/filter/src/Plugin/migrate/process/d6/FilterFormatPermission.php
+++ b/core/modules/filter/src/Plugin/migrate/process/d6/FilterFormatPermission.php
@@ -67,7 +67,7 @@ public static function create(ContainerInterface $container, array $configuratio
    */
   public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
     $rid = $row->getSourceProperty('rid');
-    $migration = isset($this->configuration['migration']) ? $this->configuration['migration'] : 'd6_filter_format';
+    $migration = $this->configuration['migration'] ?? 'd6_filter_format';
     if ($formats = $row->getSourceProperty("filter_permissions:$rid")) {
       foreach ($formats as $format) {
         $lookup_result = $this->migrateLookup->lookup($migration, [$format]);
diff --git a/core/modules/forum/forum.module b/core/modules/forum/forum.module
index 8bf800e11a86..c11ec858f803 100644
--- a/core/modules/forum/forum.module
+++ b/core/modules/forum/forum.module
@@ -465,7 +465,7 @@ function template_preprocess_forums(&$variables) {
         $variables['topics'][$id]->submitted = \Drupal::service('renderer')->render($forum_submitted);
         $forum_submitted = [
           '#theme' => 'forum_submitted',
-          '#topic' => isset($topic->last_reply) ? $topic->last_reply : NULL,
+          '#topic' => $topic->last_reply ?? NULL,
         ];
         $variables['topics'][$id]->last_reply = \Drupal::service('renderer')->render($forum_submitted);
 
diff --git a/core/modules/forum/src/ForumManager.php b/core/modules/forum/src/ForumManager.php
index 3a5ec47c74d8..3e9a16e9a6cc 100644
--- a/core/modules/forum/src/ForumManager.php
+++ b/core/modules/forum/src/ForumManager.php
@@ -329,7 +329,7 @@ protected function lastVisit($nid, AccountInterface $account) {
         $this->history[$t->nid] = $t->timestamp > HISTORY_READ_LIMIT ? $t->timestamp : HISTORY_READ_LIMIT;
       }
     }
-    return isset($this->history[$nid]) ? $this->history[$nid] : HISTORY_READ_LIMIT;
+    return $this->history[$nid] ?? HISTORY_READ_LIMIT;
   }
 
   /**
diff --git a/core/modules/hal/src/Normalizer/EntityReferenceItemNormalizer.php b/core/modules/hal/src/Normalizer/EntityReferenceItemNormalizer.php
index 50315dc30ad6..d078cf154a72 100644
--- a/core/modules/hal/src/Normalizer/EntityReferenceItemNormalizer.php
+++ b/core/modules/hal/src/Normalizer/EntityReferenceItemNormalizer.php
@@ -76,7 +76,7 @@ public function normalize($field_item, $format = NULL, array $context = []) {
     // If the parent entity passed in a langcode, unset it before normalizing
     // the target entity. Otherwise, untranslatable fields of the target entity
     // will include the langcode.
-    $langcode = isset($context['langcode']) ? $context['langcode'] : NULL;
+    $langcode = $context['langcode'] ?? NULL;
     unset($context['langcode']);
     $context['included_fields'] = ['uuid'];
 
diff --git a/core/modules/image/src/Form/ImageStyleEditForm.php b/core/modules/image/src/Form/ImageStyleEditForm.php
index 5f075b3bbf8e..5a7ad036f8ff 100644
--- a/core/modules/image/src/Form/ImageStyleEditForm.php
+++ b/core/modules/image/src/Form/ImageStyleEditForm.php
@@ -153,7 +153,7 @@ public function form(array $form, FormStateInterface $form_state) {
     }
     $form['effects']['new'] = [
       '#tree' => FALSE,
-      '#weight' => isset($user_input['weight']) ? $user_input['weight'] : NULL,
+      '#weight' => $user_input['weight'] ?? NULL,
       '#attributes' => ['class' => ['draggable']],
     ];
     $form['effects']['new']['effect'] = [
diff --git a/core/modules/image/src/ImageStyleStorage.php b/core/modules/image/src/ImageStyleStorage.php
index 69b7a513e400..1a629dd0a488 100644
--- a/core/modules/image/src/ImageStyleStorage.php
+++ b/core/modules/image/src/ImageStyleStorage.php
@@ -33,7 +33,7 @@ public function setReplacementId($name, $replacement) {
    * {@inheritdoc}
    */
   public function getReplacementId($name) {
-    return isset($this->replacement[$name]) ? $this->replacement[$name] : NULL;
+    return $this->replacement[$name] ?? NULL;
   }
 
   /**
diff --git a/core/modules/image/src/Plugin/Field/FieldWidget/ImageWidget.php b/core/modules/image/src/Plugin/Field/FieldWidget/ImageWidget.php
index 17360160a35e..5a602339a226 100644
--- a/core/modules/image/src/Plugin/Field/FieldWidget/ImageWidget.php
+++ b/core/modules/image/src/Plugin/Field/FieldWidget/ImageWidget.php
@@ -258,7 +258,7 @@ public static function process($element, FormStateInterface $form_state, $form)
     $element['alt'] = [
       '#title' => t('Alternative text'),
       '#type' => 'textfield',
-      '#default_value' => isset($item['alt']) ? $item['alt'] : '',
+      '#default_value' => $item['alt'] ?? '',
       '#description' => t('Short description of the image used by screen readers and displayed when the image is not loaded. This is important for accessibility.'),
       // @see https://www.drupal.org/node/465106#alt-text
       '#maxlength' => 512,
@@ -270,7 +270,7 @@ public static function process($element, FormStateInterface $form_state, $form)
     $element['title'] = [
       '#type' => 'textfield',
       '#title' => t('Title'),
-      '#default_value' => isset($item['title']) ? $item['title'] : '',
+      '#default_value' => $item['title'] ?? '',
       '#description' => t('The title is used as a tool tip when the user hovers the mouse over the image.'),
       '#maxlength' => 1024,
       '#weight' => -11,
diff --git a/core/modules/image/tests/src/Functional/ImageFieldTestBase.php b/core/modules/image/tests/src/Functional/ImageFieldTestBase.php
index d4a03267bb53..82cef6e7757c 100644
--- a/core/modules/image/tests/src/Functional/ImageFieldTestBase.php
+++ b/core/modules/image/tests/src/Functional/ImageFieldTestBase.php
@@ -116,7 +116,7 @@ public function uploadNodeImage($image, $field_name, $type, $alt = '') {
     // Retrieve ID of the newly created node from the current URL.
     $matches = [];
     preg_match('/node\/([0-9]+)/', $this->getUrl(), $matches);
-    return isset($matches[1]) ? $matches[1] : FALSE;
+    return $matches[1] ?? FALSE;
   }
 
   /**
diff --git a/core/modules/jsonapi/src/Access/TemporaryQueryGuard.php b/core/modules/jsonapi/src/Access/TemporaryQueryGuard.php
index 7a7991f158dc..1c5c34db1612 100644
--- a/core/modules/jsonapi/src/Access/TemporaryQueryGuard.php
+++ b/core/modules/jsonapi/src/Access/TemporaryQueryGuard.php
@@ -588,7 +588,7 @@ protected static function buildTree(array $paths) {
       // This complex expression is needed to handle the string, "0", which
       // would be evaluated as FALSE.
       if (!is_null(($field_name = array_shift($parts)))) {
-        $previous = isset($merged[$field_name]) ? $merged[$field_name] : [];
+        $previous = $merged[$field_name] ?? [];
         $merged[$field_name] = array_merge($previous, [$parts]);
       }
     }
diff --git a/core/modules/jsonapi/src/Controller/EntityResource.php b/core/modules/jsonapi/src/Controller/EntityResource.php
index ca588d12f7a2..9ce8a725ce2d 100644
--- a/core/modules/jsonapi/src/Controller/EntityResource.php
+++ b/core/modules/jsonapi/src/Controller/EntityResource.php
@@ -901,8 +901,8 @@ protected function getCollectionQuery(ResourceType $resource_type, array $params
     if (isset($params[Sort::KEY_NAME]) && $sort = $params[Sort::KEY_NAME]) {
       foreach ($sort->fields() as $field) {
         $path = $this->fieldResolver->resolveInternalEntityQueryPath($resource_type, $field[Sort::PATH_KEY]);
-        $direction = isset($field[Sort::DIRECTION_KEY]) ? $field[Sort::DIRECTION_KEY] : 'ASC';
-        $langcode = isset($field[Sort::LANGUAGE_KEY]) ? $field[Sort::LANGUAGE_KEY] : NULL;
+        $direction = $field[Sort::DIRECTION_KEY] ?? 'ASC';
+        $langcode = $field[Sort::LANGUAGE_KEY] ?? NULL;
         $query->sort($path, $direction, $langcode);
       }
     }
diff --git a/core/modules/jsonapi/src/DependencyInjection/Compiler/RegisterSerializationClassesCompilerPass.php b/core/modules/jsonapi/src/DependencyInjection/Compiler/RegisterSerializationClassesCompilerPass.php
index 7587cb324290..a0a33b69bfd6 100644
--- a/core/modules/jsonapi/src/DependencyInjection/Compiler/RegisterSerializationClassesCompilerPass.php
+++ b/core/modules/jsonapi/src/DependencyInjection/Compiler/RegisterSerializationClassesCompilerPass.php
@@ -70,14 +70,14 @@ public function process(ContainerBuilder $container) {
       // Normalizers are not an API: mark private.
       $container->getDefinition($id)->setPublic(FALSE);
 
-      $priority = isset($attributes[0]['priority']) ? $attributes[0]['priority'] : 0;
+      $priority = $attributes[0]['priority'] ?? 0;
       $normalizers[$priority][] = new Reference($id);
     }
     foreach ($container->findTaggedServiceIds(static::OVERRIDDEN_SERVICE_ENCODER_TAG) as $id => $attributes) {
       // Encoders are not an API: mark private.
       $container->getDefinition($id)->setPublic(FALSE);
 
-      $priority = isset($attributes[0]['priority']) ? $attributes[0]['priority'] : 0;
+      $priority = $attributes[0]['priority'] ?? 0;
       $encoders[$priority][] = new Reference($id);
     }
 
diff --git a/core/modules/jsonapi/src/IncludeResolver.php b/core/modules/jsonapi/src/IncludeResolver.php
index af055b1c16ee..2aad83386f94 100644
--- a/core/modules/jsonapi/src/IncludeResolver.php
+++ b/core/modules/jsonapi/src/IncludeResolver.php
@@ -249,7 +249,7 @@ protected static function buildTree(array $paths) {
       if (!$field_name = array_shift($parts)) {
         continue;
       }
-      $previous = isset($merged[$field_name]) ? $merged[$field_name] : [];
+      $previous = $merged[$field_name] ?? [];
       $merged[$field_name] = array_merge($previous, [$parts]);
     }
     return !empty($merged) ? array_map([static::class, __FUNCTION__], $merged) : $merged;
diff --git a/core/modules/jsonapi/src/Normalizer/EntityAccessDeniedHttpExceptionNormalizer.php b/core/modules/jsonapi/src/Normalizer/EntityAccessDeniedHttpExceptionNormalizer.php
index 1e0930eea994..ff9c1c7b532b 100644
--- a/core/modules/jsonapi/src/Normalizer/EntityAccessDeniedHttpExceptionNormalizer.php
+++ b/core/modules/jsonapi/src/Normalizer/EntityAccessDeniedHttpExceptionNormalizer.php
@@ -40,9 +40,8 @@ protected function buildErrorObjects(HttpException $exception) {
       $entity = $error['entity'];
       $pointer = $error['pointer'];
       $reason = $error['reason'];
-      $relationship_field = isset($error['relationship_field'])
-        ? $error['relationship_field']
-        : NULL;
+      $relationship_field = $error['relationship_field']
+        ?? NULL;
 
       if (isset($entity)) {
         $entity_type_id = $entity->getEntityTypeId();
diff --git a/core/modules/jsonapi/src/Normalizer/ResourceIdentifierNormalizer.php b/core/modules/jsonapi/src/Normalizer/ResourceIdentifierNormalizer.php
index c428b3c788f4..8e65b7789c72 100644
--- a/core/modules/jsonapi/src/Normalizer/ResourceIdentifierNormalizer.php
+++ b/core/modules/jsonapi/src/Normalizer/ResourceIdentifierNormalizer.php
@@ -97,7 +97,7 @@ public function denormalize($data, $class, $format = NULL, array $context = [])
           implode(', ', $target_resource_type_names)
         ));
       }
-      return new ResourceIdentifier($value['type'], $value['id'], isset($value['meta']) ? $value['meta'] : []);
+      return new ResourceIdentifier($value['type'], $value['id'], $value['meta'] ?? []);
     }, $data['data']);
     if (!ResourceIdentifier::areResourceIdentifiersUnique($resource_identifiers)) {
       throw new BadRequestHttpException('Duplicate relationships are not permitted. Use `meta.arity` to distinguish resource identifiers with matching `type` and `id` values.');
diff --git a/core/modules/jsonapi/src/Normalizer/ResourceObjectNormalizer.php b/core/modules/jsonapi/src/Normalizer/ResourceObjectNormalizer.php
index 8a21f420202b..a79eb95b5411 100644
--- a/core/modules/jsonapi/src/Normalizer/ResourceObjectNormalizer.php
+++ b/core/modules/jsonapi/src/Normalizer/ResourceObjectNormalizer.php
@@ -122,11 +122,7 @@ protected function getNormalization(array $field_names, ResourceObject $object,
     }
     // Add links if missing.
     $base = &$normalizer_values[ResourceObjectNormalizationCacher::RESOURCE_CACHE_SUBSET_BASE];
-    $base['links'] = isset($base['links'])
-      ? $base['links']
-      : $this->serializer
-        ->normalize($object->getLinks(), $format, $context)
-        ->omitIfEmpty();
+    $base['links'] = $base['links'] ?? $this->serializer->normalize($object->getLinks(), $format, $context)->omitIfEmpty();
 
     if (!empty($non_cached_requested_fields)) {
       $this->cacher->saveOnTerminate($object, $normalizer_values);
diff --git a/core/modules/jsonapi/src/ResourceType/ResourceTypeRepository.php b/core/modules/jsonapi/src/ResourceType/ResourceTypeRepository.php
index faa7017455c5..7963ca2ac2e1 100644
--- a/core/modules/jsonapi/src/ResourceType/ResourceTypeRepository.php
+++ b/core/modules/jsonapi/src/ResourceType/ResourceTypeRepository.php
@@ -204,7 +204,7 @@ public function get($entity_type_id, $bundle) {
    */
   public function getByTypeName($type_name) {
     $resource_types = $this->all();
-    return isset($resource_types[$type_name]) ? $resource_types[$type_name] : NULL;
+    return $resource_types[$type_name] ?? NULL;
   }
 
   /**
diff --git a/core/modules/jsonapi/src/Routing/Routes.php b/core/modules/jsonapi/src/Routing/Routes.php
index 8a7586a26207..609ed91312a0 100644
--- a/core/modules/jsonapi/src/Routing/Routes.php
+++ b/core/modules/jsonapi/src/Routing/Routes.php
@@ -465,7 +465,7 @@ protected static function hasNonInternalFileTargetResourceTypes(array $resource_
    */
   public static function getResourceTypeNameFromParameters(array $parameters) {
     if (isset($parameters[static::JSON_API_ROUTE_FLAG_KEY]) && $parameters[static::JSON_API_ROUTE_FLAG_KEY]) {
-      return isset($parameters[static::RESOURCE_TYPE_KEY]) ? $parameters[static::RESOURCE_TYPE_KEY] : NULL;
+      return $parameters[static::RESOURCE_TYPE_KEY] ?? NULL;
     }
     return NULL;
   }
diff --git a/core/modules/jsonapi/tests/src/Functional/ResourceTestBase.php b/core/modules/jsonapi/tests/src/Functional/ResourceTestBase.php
index ba22bb7db7e4..58838f000275 100644
--- a/core/modules/jsonapi/tests/src/Functional/ResourceTestBase.php
+++ b/core/modules/jsonapi/tests/src/Functional/ResourceTestBase.php
@@ -1705,7 +1705,7 @@ protected function getExpectedGetRelationshipResponse($relationship_field_name,
       ])
       ->addCacheableDependency($entity)
       ->addCacheableDependency($access);
-    $status_code = isset($expected_document['errors'][0]['status']) ? $expected_document['errors'][0]['status'] : 200;
+    $status_code = $expected_document['errors'][0]['status'] ?? 200;
     $resource_response = new CacheableResourceResponse($expected_document, $status_code);
     $resource_response->addCacheableDependency($expected_cacheability);
     return $resource_response;
diff --git a/core/modules/language/language.admin.inc b/core/modules/language/language.admin.inc
index a55e65a23cb6..7a5c4fa1d1c5 100644
--- a/core/modules/language/language.admin.inc
+++ b/core/modules/language/language.admin.inc
@@ -74,7 +74,7 @@ function template_preprocess_language_negotiation_configure_form(&$variables) {
     }
 
     // Unset configurable to prevent rendering twice with children.
-    $configurable = isset($form[$type]['configurable']) ? $form[$type]['configurable'] : NULL;
+    $configurable = $form[$type]['configurable'] ?? NULL;
     unset($form[$type]['configurable']);
 
     $variables['language_types'][] = [
diff --git a/core/modules/language/src/Element/LanguageConfiguration.php b/core/modules/language/src/Element/LanguageConfiguration.php
index 543e9a0e754d..b6790da2b5a1 100644
--- a/core/modules/language/src/Element/LanguageConfiguration.php
+++ b/core/modules/language/src/Element/LanguageConfiguration.php
@@ -32,7 +32,7 @@ public function getInfo() {
    * Process handler for the language_configuration form element.
    */
   public static function processLanguageConfiguration(&$element, FormStateInterface $form_state, &$form) {
-    $options = isset($element['#options']) ? $element['#options'] : [];
+    $options = $element['#options'] ?? [];
     // Avoid validation failure since we are moving the '#options' key in the
     // nested 'language' select element.
     unset($element['#options']);
diff --git a/core/modules/language/src/Entity/ConfigurableLanguage.php b/core/modules/language/src/Entity/ConfigurableLanguage.php
index f268cb65a3fd..5dbdeda0eff1 100644
--- a/core/modules/language/src/Entity/ConfigurableLanguage.php
+++ b/core/modules/language/src/Entity/ConfigurableLanguage.php
@@ -284,7 +284,7 @@ public static function createFromLangcode($langcode) {
       return static::create([
         'id' => $langcode,
         'label' => $standard_languages[$langcode][0],
-        'direction' => isset($standard_languages[$langcode][2]) ? $standard_languages[$langcode][2] : static::DIRECTION_LTR,
+        'direction' => $standard_languages[$langcode][2] ?? static::DIRECTION_LTR,
       ]);
     }
   }
diff --git a/core/modules/language/src/Form/LanguageAddForm.php b/core/modules/language/src/Form/LanguageAddForm.php
index 22d569f64ee8..44900447060b 100644
--- a/core/modules/language/src/Form/LanguageAddForm.php
+++ b/core/modules/language/src/Form/LanguageAddForm.php
@@ -153,7 +153,7 @@ protected function copyFormValuesToEntity(EntityInterface $entity, array $form,
     else {
       $standard_languages = LanguageManager::getStandardLanguageList();
       $label = $standard_languages[$langcode][0];
-      $direction = isset($standard_languages[$langcode][2]) ? $standard_languages[$langcode][2] : ConfigurableLanguage::DIRECTION_LTR;
+      $direction = $standard_languages[$langcode][2] ?? ConfigurableLanguage::DIRECTION_LTR;
     }
     $entity->set('id', $langcode);
     $entity->set('label', $label);
diff --git a/core/modules/language/src/Form/NegotiationConfigureForm.php b/core/modules/language/src/Form/NegotiationConfigureForm.php
index 0679a563d21e..6af8c1458569 100644
--- a/core/modules/language/src/Form/NegotiationConfigureForm.php
+++ b/core/modules/language/src/Form/NegotiationConfigureForm.php
@@ -248,7 +248,7 @@ protected function configureFormTable(array &$form, $type) {
     // Add missing data to the methods lists.
     foreach ($negotiation_info as $method_id => $method) {
       if (!isset($methods_weight[$method_id])) {
-        $methods_weight[$method_id] = isset($method['weight']) ? $method['weight'] : 0;
+        $methods_weight[$method_id] = $method['weight'] ?? 0;
       }
     }
 
@@ -267,7 +267,7 @@ protected function configureFormTable(array &$form, $type) {
 
       // List the method only if the current type is defined in its 'types' key.
       // If it is not defined default to all the configurable language types.
-      $types = array_flip(isset($method['types']) ? $method['types'] : $form['#language_types']);
+      $types = array_flip($method['types'] ?? $form['#language_types']);
 
       if (isset($types[$type])) {
         $table_form['#language_negotiation_info'][$method_id] = $method;
diff --git a/core/modules/language/src/Form/NegotiationUrlForm.php b/core/modules/language/src/Form/NegotiationUrlForm.php
index 707b5ebe9edf..8f43315452e9 100644
--- a/core/modules/language/src/Form/NegotiationUrlForm.php
+++ b/core/modules/language/src/Form/NegotiationUrlForm.php
@@ -117,14 +117,14 @@ public function buildForm(array $form, FormStateInterface $form_state) {
         '#type' => 'textfield',
         '#title' => $language->isDefault() ? $this->t('%language (%langcode) path prefix (Default language)', $t_args) : $this->t('%language (%langcode) path prefix', $t_args),
         '#maxlength' => 64,
-        '#default_value' => isset($prefixes[$langcode]) ? $prefixes[$langcode] : '',
+        '#default_value' => $prefixes[$langcode] ?? '',
         '#field_prefix' => $base_url . '/',
       ];
       $form['domain'][$langcode] = [
         '#type' => 'textfield',
         '#title' => $this->t('%language (%langcode) domain', ['%language' => $language->getName(), '%langcode' => $language->getId()]),
         '#maxlength' => 128,
-        '#default_value' => isset($domains[$langcode]) ? $domains[$langcode] : '',
+        '#default_value' => $domains[$langcode] ?? '',
       ];
     }
 
diff --git a/core/modules/language/src/LanguageNegotiator.php b/core/modules/language/src/LanguageNegotiator.php
index 40a0d0296d74..c4e083ab1a30 100644
--- a/core/modules/language/src/LanguageNegotiator.php
+++ b/core/modules/language/src/LanguageNegotiator.php
@@ -189,7 +189,7 @@ protected function negotiateLanguage($type, $method_id) {
     }
 
     $languages = $this->languageManager->getLanguages();
-    return isset($languages[$langcode]) ? $languages[$langcode] : NULL;
+    return $languages[$langcode] ?? NULL;
   }
 
   /**
diff --git a/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationContentEntity.php b/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationContentEntity.php
index b78dbb9e4008..34474f35e553 100644
--- a/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationContentEntity.php
+++ b/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationContentEntity.php
@@ -188,7 +188,7 @@ protected function hasLowerLanguageNegotiationWeight() {
           $max_weight = isset($content_method_weights[LanguageNegotiationUrl::METHOD_ID]) ? max($max_weight, $content_method_weights[LanguageNegotiationUrl::METHOD_ID]) : $max_weight;
         }
         else {
-          $max_weight = isset($content_method_weights[LanguageNegotiationUrl::METHOD_ID]) ? $content_method_weights[LanguageNegotiationUrl::METHOD_ID] : PHP_INT_MAX;
+          $max_weight = $content_method_weights[LanguageNegotiationUrl::METHOD_ID] ?? PHP_INT_MAX;
         }
 
         $this->hasLowerLanguageNegotiationWeightResult = $content_method_weights[static::METHOD_ID] < $max_weight;
@@ -214,7 +214,7 @@ protected function hasLowerLanguageNegotiationWeight() {
    */
   protected function meetsContentEntityRoutesCondition(Route $outbound_route, Request $request) {
     $outbound_path_pattern = $outbound_route->getPath();
-    $storage = isset($this->paths[$request]) ? $this->paths[$request] : [];
+    $storage = $this->paths[$request] ?? [];
     if (!isset($storage[$outbound_path_pattern])) {
       $storage[$outbound_path_pattern] = FALSE;
 
diff --git a/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationSession.php b/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationSession.php
index a9dce393aeb7..f36d43e94652 100644
--- a/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationSession.php
+++ b/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationSession.php
@@ -127,7 +127,7 @@ public function getLanguageSwitchLinks(Request $request, $type, Url $url) {
     $links = [];
     $config = $this->config->get('language.negotiation')->get('session');
     $param = $config['parameter'];
-    $language_query = isset($_SESSION[$param]) ? $_SESSION[$param] : $this->languageManager->getCurrentLanguage($type)->getId();
+    $language_query = $_SESSION[$param] ?? $this->languageManager->getCurrentLanguage($type)->getId();
     $query = $request->query->all();
 
     foreach ($this->languageManager->getNativeLanguages() as $language) {
diff --git a/core/modules/language/tests/src/Functional/LanguageUrlRewritingTest.php b/core/modules/language/tests/src/Functional/LanguageUrlRewritingTest.php
index 018ed621f7a3..93827d3e135e 100644
--- a/core/modules/language/tests/src/Functional/LanguageUrlRewritingTest.php
+++ b/core/modules/language/tests/src/Functional/LanguageUrlRewritingTest.php
@@ -92,7 +92,7 @@ private function checkUrl(LanguageInterface $language, $message) {
     $rewritten_path = trim(str_replace($base_path, '', Url::fromRoute('<front>', [], $options)->toString()), '/');
     $segments = explode('/', $rewritten_path, 2);
     $prefix = $segments[0];
-    $path = isset($segments[1]) ? $segments[1] : $prefix;
+    $path = $segments[1] ?? $prefix;
 
     // If the rewritten URL has not a language prefix we pick a random prefix so
     // we can always check the prefixed URL.
diff --git a/core/modules/layout_builder/layout_builder.module b/core/modules/layout_builder/layout_builder.module
index cc849733e362..6e8d0a25f93a 100644
--- a/core/modules/layout_builder/layout_builder.module
+++ b/core/modules/layout_builder/layout_builder.module
@@ -144,7 +144,7 @@ function layout_builder_entity_view_alter(array &$build, EntityInterface $entity
       foreach ($extra_fields['display'] as $field_name => $extra_field) {
         // If the extra field is not set replace with an empty array to avoid
         // the placeholder text from being rendered.
-        $replacement = isset($build[$field_name]) ? $build[$field_name] : [];
+        $replacement = $build[$field_name] ?? [];
         ExtraFieldBlock::replaceFieldPlaceholder($build, $replacement, $field_name);
         // After the rendered field in $build has been copied over to the
         // ExtraFieldBlock block we must remove it from its original location or
diff --git a/core/modules/layout_builder/src/Element/LayoutBuilder.php b/core/modules/layout_builder/src/Element/LayoutBuilder.php
index 8bf656475bd5..5c91b1e39208 100644
--- a/core/modules/layout_builder/src/Element/LayoutBuilder.php
+++ b/core/modules/layout_builder/src/Element/LayoutBuilder.php
@@ -310,7 +310,7 @@ protected function buildAdministrativeSection(SectionStorageInterface $section_s
 
       // Get weights of all children for use by the region label.
       $weights = array_map(function ($a) {
-        return isset($a['#weight']) ? $a['#weight'] : 0;
+        return $a['#weight'] ?? 0;
       }, $build[$region]);
 
       // The region label is made visible when the move block dialog is open.
diff --git a/core/modules/layout_builder/src/Entity/LayoutBuilderEntityViewDisplay.php b/core/modules/layout_builder/src/Entity/LayoutBuilderEntityViewDisplay.php
index 60948896647a..c0794f9e2707 100644
--- a/core/modules/layout_builder/src/Entity/LayoutBuilderEntityViewDisplay.php
+++ b/core/modules/layout_builder/src/Entity/LayoutBuilderEntityViewDisplay.php
@@ -436,7 +436,7 @@ public function setComponent($name, array $options = []) {
       }
 
       $section = $this->getDefaultSection();
-      $region = isset($options['region']) ? $options['region'] : $section->getDefaultRegion();
+      $region = $options['region'] ?? $section->getDefaultRegion();
       $new_component = (new SectionComponent(\Drupal::service('uuid')->generate(), $region, $configuration));
       $section->appendComponent($new_component);
     }
diff --git a/core/modules/layout_builder/src/Section.php b/core/modules/layout_builder/src/Section.php
index e87bb7c30551..b06f66f5a9b8 100644
--- a/core/modules/layout_builder/src/Section.php
+++ b/core/modules/layout_builder/src/Section.php
@@ -391,14 +391,14 @@ public function __clone() {
    * {@inheritdoc}
    */
   public function getThirdPartySetting($provider, $key, $default = NULL) {
-    return isset($this->thirdPartySettings[$provider][$key]) ? $this->thirdPartySettings[$provider][$key] : $default;
+    return $this->thirdPartySettings[$provider][$key] ?? $default;
   }
 
   /**
    * {@inheritdoc}
    */
   public function getThirdPartySettings($provider) {
-    return isset($this->thirdPartySettings[$provider]) ? $this->thirdPartySettings[$provider] : [];
+    return $this->thirdPartySettings[$provider] ?? [];
   }
 
   /**
diff --git a/core/modules/layout_builder/src/SectionComponent.php b/core/modules/layout_builder/src/SectionComponent.php
index 2627ccf1d862..b0f8ff13e4f3 100644
--- a/core/modules/layout_builder/src/SectionComponent.php
+++ b/core/modules/layout_builder/src/SectionComponent.php
@@ -104,10 +104,10 @@ public function toRenderArray(array $contexts = [], $in_preview = FALSE) {
    */
   public function get($property) {
     if (property_exists($this, $property)) {
-      $value = isset($this->{$property}) ? $this->{$property} : NULL;
+      $value = $this->{$property} ?? NULL;
     }
     else {
-      $value = isset($this->additional[$property]) ? $this->additional[$property] : NULL;
+      $value = $this->additional[$property] ?? NULL;
     }
     return $value;
   }
diff --git a/core/modules/layout_builder/src/SectionStorage/SectionStorageDefinition.php b/core/modules/layout_builder/src/SectionStorage/SectionStorageDefinition.php
index eb9e5afc4f06..c97584b39cff 100644
--- a/core/modules/layout_builder/src/SectionStorage/SectionStorageDefinition.php
+++ b/core/modules/layout_builder/src/SectionStorage/SectionStorageDefinition.php
@@ -60,10 +60,10 @@ public function __construct(array $definition = []) {
    */
   public function get($property) {
     if (property_exists($this, $property)) {
-      $value = isset($this->{$property}) ? $this->{$property} : NULL;
+      $value = $this->{$property} ?? NULL;
     }
     else {
-      $value = isset($this->additional[$property]) ? $this->additional[$property] : NULL;
+      $value = $this->additional[$property] ?? NULL;
     }
     return $value;
   }
diff --git a/core/modules/layout_discovery/layout_discovery.module b/core/modules/layout_discovery/layout_discovery.module
index 3eed9fe2f994..ce08617e025d 100644
--- a/core/modules/layout_discovery/layout_discovery.module
+++ b/core/modules/layout_discovery/layout_discovery.module
@@ -37,8 +37,8 @@ function layout_discovery_theme() {
  *     Properties used: #settings, #layout.
  */
 function template_preprocess_layout(&$variables) {
-  $variables['settings'] = isset($variables['content']['#settings']) ? $variables['content']['#settings'] : [];
-  $variables['layout'] = isset($variables['content']['#layout']) ? $variables['content']['#layout'] : [];
+  $variables['settings'] = $variables['content']['#settings'] ?? [];
+  $variables['layout'] = $variables['content']['#layout'] ?? [];
 
   // Create an attributes variable for each region.
   foreach (Element::children($variables['content']) as $name) {
diff --git a/core/modules/link/src/Plugin/Field/FieldWidget/LinkWidget.php b/core/modules/link/src/Plugin/Field/FieldWidget/LinkWidget.php
index 9bb9f8de5eea..721841f1ae4a 100644
--- a/core/modules/link/src/Plugin/Field/FieldWidget/LinkWidget.php
+++ b/core/modules/link/src/Plugin/Field/FieldWidget/LinkWidget.php
@@ -233,7 +233,7 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen
       '#type' => 'textfield',
       '#title' => $this->t('Link text'),
       '#placeholder' => $this->getSetting('placeholder_title'),
-      '#default_value' => isset($items[$delta]->title) ? $items[$delta]->title : NULL,
+      '#default_value' => $items[$delta]->title ?? NULL,
       '#maxlength' => 255,
       '#access' => $this->getFieldSetting('title') != DRUPAL_DISABLED,
       '#required' => $this->getFieldSetting('title') === DRUPAL_REQUIRED && $element['#required'],
diff --git a/core/modules/locale/locale.batch.inc b/core/modules/locale/locale.batch.inc
index fcc284618fcc..8b3fe6ac434a 100644
--- a/core/modules/locale/locale.batch.inc
+++ b/core/modules/locale/locale.batch.inc
@@ -63,7 +63,7 @@ function locale_translation_batch_status_check($project, $langcode, array $optio
       // Update the file object with the result data. In case of a redirect we
       // store the resulting uri.
       if (isset($result['last_modified'])) {
-        $remote_file->uri = isset($result['location']) ? $result['location'] : $remote_file->uri;
+        $remote_file->uri = $result['location'] ?? $remote_file->uri;
         $remote_file->timestamp = $result['last_modified'];
         locale_translation_status_save($source->name, $source->langcode, LOCALE_TRANSLATION_REMOTE, $remote_file);
       }
diff --git a/core/modules/locale/locale.bulk.inc b/core/modules/locale/locale.bulk.inc
index dd67e8f2b4ea..b4f70a4be6d6 100644
--- a/core/modules/locale/locale.bulk.inc
+++ b/core/modules/locale/locale.bulk.inc
@@ -484,7 +484,7 @@ function locale_translate_file_attach_properties($file, array $options = []) {
   if (isset($matches[5])) {
     $file->project = $matches[2] . $matches[3];
     $file->version = $matches[4];
-    $file->langcode = isset($options['langcode']) ? $options['langcode'] : $matches[5];
+    $file->langcode = $options['langcode'] ?? $matches[5];
   }
   else {
     $file->langcode = LanguageInterface::LANGCODE_NOT_SPECIFIED;
@@ -634,7 +634,7 @@ function locale_config_batch_refresh_name(array $names, array $langcodes, &$cont
  */
 function locale_config_batch_finished($success, array $results) {
   if ($success) {
-    $configuration = isset($results['stats']['config']) ? $results['stats']['config'] : 0;
+    $configuration = $results['stats']['config'] ?? 0;
     if ($configuration) {
       \Drupal::messenger()->addStatus(t('The configuration was successfully updated. There are %number configuration objects updated.', ['%number' => $configuration]));
       \Drupal::logger('locale')->notice('The configuration was successfully updated. %number configuration objects updated.', ['%number' => $configuration]);
diff --git a/core/modules/locale/locale.compare.inc b/core/modules/locale/locale.compare.inc
index 1c81cc87f9a4..9b0209fd57ac 100644
--- a/core/modules/locale/locale.compare.inc
+++ b/core/modules/locale/locale.compare.inc
@@ -69,7 +69,7 @@ function locale_translation_build_projects() {
     // For every project store information.
     $data += [
       'name' => $name,
-      'version' => isset($data['info']['version']) ? $data['info']['version'] : '',
+      'version' => $data['info']['version'] ?? '',
       'core' => 'all',
       // A project can provide the path and filename pattern to download the
       // gettext file. Use the default if not.
diff --git a/core/modules/locale/locale.module b/core/modules/locale/locale.module
index e1ac093d629e..c781ec0f46ec 100644
--- a/core/modules/locale/locale.module
+++ b/core/modules/locale/locale.module
@@ -298,7 +298,7 @@ function locale_get_plural($count, $langcode = NULL) {
       // modulo used but storing 0-99 is not enough because below 100 we often
       // find exceptions (1, 2, etc).
       $index = $count > 199 ? 100 + ($count % 100) : $count;
-      $plural_indexes[$langcode][$count] = isset($plural_formulas[$index]) ? $plural_formulas[$index] : $plural_formulas['default'];
+      $plural_indexes[$langcode][$count] = $plural_formulas[$index] ?? $plural_formulas['default'];
     }
     // In case there is no plural formula for English (no imported translation
     // for English), use a default formula.
diff --git a/core/modules/locale/locale.translation.inc b/core/modules/locale/locale.translation.inc
index 2672d5c38a56..74667cf1fe3a 100644
--- a/core/modules/locale/locale.translation.inc
+++ b/core/modules/locale/locale.translation.inc
@@ -112,7 +112,7 @@ function locale_translation_load_sources(array $projects = NULL, array $langcode
   // Use only the selected projects and languages for update.
   foreach ($projects as $project) {
     foreach ($langcodes as $langcode) {
-      $sources[$project][$langcode] = isset($status[$project][$langcode]) ? $status[$project][$langcode] : NULL;
+      $sources[$project][$langcode] = $status[$project][$langcode] ?? NULL;
     }
   }
   return $sources;
@@ -318,7 +318,7 @@ function locale_translation_build_server_pattern($project, $template) {
     '%project' => $project->name,
     '%version' => $project->version,
     '%core' => $project->core,
-    '%language' => isset($project->langcode) ? $project->langcode : '%language',
+    '%language' => $project->langcode ?? '%language',
   ];
   return strtr($template, $variables);
 }
diff --git a/core/modules/locale/src/Form/TranslateEditForm.php b/core/modules/locale/src/Form/TranslateEditForm.php
index aa2f74bc4a6e..18b8f834b357 100644
--- a/core/modules/locale/src/Form/TranslateEditForm.php
+++ b/core/modules/locale/src/Form/TranslateEditForm.php
@@ -128,7 +128,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
               // @todo Should use better labels https://www.drupal.org/node/2499639
               '#title' => ($i == 0 ? $this->t('Singular form') : $this->formatPlural($i, 'First plural form', '@count. plural form')),
               '#rows' => $rows,
-              '#default_value' => isset($translation_array[$i]) ? $translation_array[$i] : '',
+              '#default_value' => $translation_array[$i] ?? '',
               '#attributes' => ['lang' => $langcode],
               '#prefix' => $i == 0 ? ('<span class="visually-hidden">' . $this->t('Translated string (@language)', ['@language' => $langname]) . '</span>') : '',
             ];
@@ -207,7 +207,7 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
 
       if ($is_changed) {
         // Only update or insert if we have a value to use.
-        $target = isset($existing_translation_objects[$lid]) ? $existing_translation_objects[$lid] : $this->localeStorage->createTranslation(['lid' => $lid, 'language' => $langcode]);
+        $target = $existing_translation_objects[$lid] ?? $this->localeStorage->createTranslation(['lid' => $lid, 'language' => $langcode]);
         $target->setPlurals($new_translation['translations'])
           ->setCustomized()
           ->save();
diff --git a/core/modules/locale/src/Form/TranslateFilterForm.php b/core/modules/locale/src/Form/TranslateFilterForm.php
index 2186187ad61a..649499377796 100644
--- a/core/modules/locale/src/Form/TranslateFilterForm.php
+++ b/core/modules/locale/src/Form/TranslateFilterForm.php
@@ -43,7 +43,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
         ];
       }
       else {
-        $empty_option = isset($filter['options'][$filter['default']]) ? $filter['options'][$filter['default']] : '- None -';
+        $empty_option = $filter['options'][$filter['default']] ?? '- None -';
         $form['filters']['status'][$key] = [
           '#title' => $filter['title'],
           '#type' => 'select',
diff --git a/core/modules/locale/src/Form/TranslationStatusForm.php b/core/modules/locale/src/Form/TranslationStatusForm.php
index 4ac817c784dc..e354153dfd75 100644
--- a/core/modules/locale/src/Form/TranslationStatusForm.php
+++ b/core/modules/locale/src/Form/TranslationStatusForm.php
@@ -207,8 +207,8 @@ protected function prepareUpdateData(array $status) {
         }
         // Translation update found for this project-language combination.
         elseif ($project_info->type == LOCALE_TRANSLATION_LOCAL || $project_info->type == LOCALE_TRANSLATION_REMOTE) {
-          $local = isset($project_info->files[LOCALE_TRANSLATION_LOCAL]) ? $project_info->files[LOCALE_TRANSLATION_LOCAL] : NULL;
-          $remote = isset($project_info->files[LOCALE_TRANSLATION_REMOTE]) ? $project_info->files[LOCALE_TRANSLATION_REMOTE] : NULL;
+          $local = $project_info->files[LOCALE_TRANSLATION_LOCAL] ?? NULL;
+          $remote = $project_info->files[LOCALE_TRANSLATION_REMOTE] ?? NULL;
           $recent = _locale_translation_source_compare($local, $remote) == LOCALE_TRANSLATION_SOURCE_COMPARE_LT ? $remote : $local;
           $updates[$langcode]['updates'][] = [
             'name' => $project_info->name == 'drupal' ? $this->t('Drupal core') : $project_data[$project_info->name]->info['name'],
@@ -237,8 +237,8 @@ protected function prepareUpdateData(array $status) {
    *   The string which contains debug information.
    */
   protected function createInfoString($project_info) {
-    $remote_path = isset($project_info->files['remote']->uri) ? $project_info->files['remote']->uri : FALSE;
-    $local_path = isset($project_info->files['local']->uri) ? $project_info->files['local']->uri : FALSE;
+    $remote_path = $project_info->files['remote']->uri ?? FALSE;
+    $local_path = $project_info->files['local']->uri ?? FALSE;
 
     if (locale_translation_use_remote_source() && $remote_path && $local_path) {
       return $this->t('File not found at %remote_path nor at %local_path', [
diff --git a/core/modules/locale/src/LocaleConfigSubscriber.php b/core/modules/locale/src/LocaleConfigSubscriber.php
index 289e838e0545..2817251a829c 100644
--- a/core/modules/locale/src/LocaleConfigSubscriber.php
+++ b/core/modules/locale/src/LocaleConfigSubscriber.php
@@ -149,7 +149,7 @@ protected function processTranslatableData($name, array $config, array $translat
         continue;
       }
       if (is_array($item)) {
-        $reference_config_item = isset($reference_config[$key]) ? $reference_config[$key] : [];
+        $reference_config_item = $reference_config[$key] ?? [];
         $this->processTranslatableData($name, $config[$key], $item, $langcode, $reference_config_item);
       }
       else {
diff --git a/core/modules/locale/src/LocaleProjectStorage.php b/core/modules/locale/src/LocaleProjectStorage.php
index 05faa17db31e..8147b4c0eb4c 100644
--- a/core/modules/locale/src/LocaleProjectStorage.php
+++ b/core/modules/locale/src/LocaleProjectStorage.php
@@ -45,7 +45,7 @@ public function __construct(KeyValueFactoryInterface $key_value_factory) {
    */
   public function get($key, $default = NULL) {
     $values = $this->getMultiple([$key]);
-    return isset($values[$key]) ? $values[$key] : $default;
+    return $values[$key] ?? $default;
   }
 
   /**
diff --git a/core/modules/locale/src/PluralFormula.php b/core/modules/locale/src/PluralFormula.php
index 8f1920e64930..0913a69cdaf7 100644
--- a/core/modules/locale/src/PluralFormula.php
+++ b/core/modules/locale/src/PluralFormula.php
@@ -86,7 +86,7 @@ public function getNumberOfPlurals($langcode = NULL) {
    */
   public function getFormula($langcode) {
     $this->loadFormulae();
-    return isset($this->formulae[$langcode]['formula']) ? $this->formulae[$langcode]['formula'] : FALSE;
+    return $this->formulae[$langcode]['formula'] ?? FALSE;
   }
 
   /**
diff --git a/core/modules/locale/src/SourceString.php b/core/modules/locale/src/SourceString.php
index dd59954bf7c1..94cd6413a2df 100644
--- a/core/modules/locale/src/SourceString.php
+++ b/core/modules/locale/src/SourceString.php
@@ -29,7 +29,7 @@ public function isTranslation() {
    * {@inheritdoc}
    */
   public function getString() {
-    return isset($this->source) ? $this->source : '';
+    return $this->source ?? '';
   }
 
   /**
diff --git a/core/modules/locale/src/StringBase.php b/core/modules/locale/src/StringBase.php
index 55572d07d51a..832d1965b0fa 100644
--- a/core/modules/locale/src/StringBase.php
+++ b/core/modules/locale/src/StringBase.php
@@ -67,7 +67,7 @@ public function __construct($values = []) {
    * {@inheritdoc}
    */
   public function getId() {
-    return isset($this->lid) ? $this->lid : NULL;
+    return $this->lid ?? NULL;
   }
 
   /**
@@ -82,7 +82,7 @@ public function setId($lid) {
    * {@inheritdoc}
    */
   public function getVersion() {
-    return isset($this->version) ? $this->version : NULL;
+    return $this->version ?? NULL;
   }
 
   /**
@@ -112,7 +112,7 @@ public function setPlurals($plurals) {
    * {@inheritdoc}
    */
   public function getStorage() {
-    return isset($this->storage) ? $this->storage : NULL;
+    return $this->storage ?? NULL;
   }
 
   /**
@@ -158,7 +158,7 @@ public function getLocations($check_only = FALSE) {
         $this->locations[$location->type][$location->name] = $location->lid;
       }
     }
-    return isset($this->locations) ? $this->locations : [];
+    return $this->locations ?? [];
   }
 
   /**
diff --git a/core/modules/locale/src/TranslationString.php b/core/modules/locale/src/TranslationString.php
index c32d23f2d25f..ac8ef1440b52 100644
--- a/core/modules/locale/src/TranslationString.php
+++ b/core/modules/locale/src/TranslationString.php
@@ -84,7 +84,7 @@ public function isTranslation() {
    * {@inheritdoc}
    */
   public function getString() {
-    return isset($this->translation) ? $this->translation : '';
+    return $this->translation ?? '';
   }
 
   /**
diff --git a/core/modules/media/media.module b/core/modules/media/media.module
index 0dc9bd20a771..b4d3112e9c6d 100644
--- a/core/modules/media/media.module
+++ b/core/modules/media/media.module
@@ -271,7 +271,7 @@ function media_field_widget_complete_form_alter(array &$field_widget_complete_fo
 
   // Use the title set on the element if it exists, otherwise fall back to the
   // field label.
-  $elements['#media_help']['#original_label'] = isset($elements['#title']) ? $elements['#title'] : $context['items']->getFieldDefinition()->getLabel();
+  $elements['#media_help']['#original_label'] = $elements['#title'] ?? $context['items']->getFieldDefinition()->getLabel();
 
   // Customize the label for the field widget.
   // @todo Research a better approach https://www.drupal.org/node/2943024.
@@ -316,7 +316,7 @@ function media_preprocess_media_reference_help(&$variables) {
   $element = $variables['element'];
   Element::setAttributes($element, ['id']);
   RenderElement::setAttributes($element);
-  $variables['attributes'] = isset($element['#attributes']) ? $element['#attributes'] : [];
+  $variables['attributes'] = $element['#attributes'] ?? [];
   $variables['legend_attributes'] = new Attribute();
   $variables['header_attributes'] = new Attribute();
   $variables['description']['attributes'] = new Attribute();
diff --git a/core/modules/media/src/Form/EditorMediaDialog.php b/core/modules/media/src/Form/EditorMediaDialog.php
index ca8b7671a0f6..65f2d5986505 100644
--- a/core/modules/media/src/Form/EditorMediaDialog.php
+++ b/core/modules/media/src/Form/EditorMediaDialog.php
@@ -135,7 +135,7 @@ public function buildForm(array $form, FormStateInterface $form_state, EditorInt
         $media = $media->getTranslation($editor_object['hostEntityLangcode']);
       }
       $settings = $media->{$image_field_name}->getItemDefinition()->getSettings();
-      $alt = isset($media_embed_element['alt']) ? $media_embed_element['alt'] : NULL;
+      $alt = $media_embed_element['alt'] ?? NULL;
       $form['alt'] = [
         '#type' => 'textfield',
         '#title' => $this->t('Alternate text'),
diff --git a/core/modules/media/src/MediaSourceBase.php b/core/modules/media/src/MediaSourceBase.php
index 5cc284835e60..df21b94c3834 100644
--- a/core/modules/media/src/MediaSourceBase.php
+++ b/core/modules/media/src/MediaSourceBase.php
@@ -258,7 +258,7 @@ protected function getSourceFieldStorage() {
       // Even if we do know the name of the source field, there's no
       // guarantee that it exists.
       $fields = $this->entityFieldManager->getFieldStorageDefinitions('media');
-      return isset($fields[$field]) ? $fields[$field] : NULL;
+      return $fields[$field] ?? NULL;
     }
     return NULL;
   }
@@ -273,7 +273,7 @@ public function getSourceFieldDefinition(MediaTypeInterface $type) {
       // Even if we do know the name of the source field, there is no
       // guarantee that it already exists.
       $fields = $this->entityFieldManager->getFieldDefinitions('media', $type->id());
-      return isset($fields[$field]) ? $fields[$field] : NULL;
+      return $fields[$field] ?? NULL;
     }
     return NULL;
   }
diff --git a/core/modules/media/src/MediaTypeForm.php b/core/modules/media/src/MediaTypeForm.php
index 289fc8aad080..ded58b036c86 100644
--- a/core/modules/media/src/MediaTypeForm.php
+++ b/core/modules/media/src/MediaTypeForm.php
@@ -188,7 +188,7 @@ public function form(array $form, FormStateInterface $form_state) {
           '#type' => 'select',
           '#title' => $metadata_attribute_label,
           '#options' => $options,
-          '#default_value' => isset($field_map[$metadata_attribute_name]) ? $field_map[$metadata_attribute_name] : MediaSourceInterface::METADATA_FIELD_EMPTY,
+          '#default_value' => $field_map[$metadata_attribute_name] ?? MediaSourceInterface::METADATA_FIELD_EMPTY,
         ];
       }
     }
diff --git a/core/modules/media_library/src/Form/AddFormBase.php b/core/modules/media_library/src/Form/AddFormBase.php
index a63bc7dc875f..83742a3a172d 100644
--- a/core/modules/media_library/src/Form/AddFormBase.php
+++ b/core/modules/media_library/src/Form/AddFormBase.php
@@ -255,7 +255,7 @@ protected function buildEntityFormElement(MediaInterface $media, array $form, Fo
     // triggering element is not set correctly and the wrong media item is
     // removed.
     // @see ::removeButtonSubmit()
-    $parents = isset($form['#parents']) ? $form['#parents'] : [];
+    $parents = $form['#parents'] ?? [];
     $id_suffix = $parents ? '-' . implode('-', $parents) : '';
 
     $element = [
diff --git a/core/modules/media_library/src/Plugin/Field/FieldWidget/MediaLibraryWidget.php b/core/modules/media_library/src/Plugin/Field/FieldWidget/MediaLibraryWidget.php
index 1d890c974d3a..017c99e65be0 100644
--- a/core/modules/media_library/src/Plugin/Field/FieldWidget/MediaLibraryWidget.php
+++ b/core/modules/media_library/src/Plugin/Field/FieldWidget/MediaLibraryWidget.php
@@ -138,7 +138,7 @@ protected function getAllowedMediaTypeIdsSorted() {
     $handler_settings = $this->getFieldSetting('handler_settings');
     // The target bundles will be blank when saving field storage settings,
     // when first adding a media reference field.
-    $allowed_media_type_ids = isset($handler_settings['target_bundles']) ? $handler_settings['target_bundles'] : NULL;
+    $allowed_media_type_ids = $handler_settings['target_bundles'] ?? NULL;
 
     // When there are no allowed media types, return the empty array.
     if ($allowed_media_type_ids === []) {
@@ -238,7 +238,7 @@ public function settingsForm(array $form, FormStateInterface $form_state) {
    */
   public static function setMediaTypesValue(array &$element, $input, FormStateInterface $form_state) {
     if ($input === FALSE) {
-      return isset($element['#default_value']) ? $element['#default_value'] : [];
+      return $element['#default_value'] ?? [];
     }
 
     // Sort the media types by weight value and set the value in the form state.
@@ -305,7 +305,7 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen
     $element += [
       '#type' => 'fieldset',
       '#cardinality' => $this->fieldDefinition->getFieldStorageDefinition()->getCardinality(),
-      '#target_bundles' => isset($settings['target_bundles']) ? $settings['target_bundles'] : FALSE,
+      '#target_bundles' => $settings['target_bundles'] ?? FALSE,
       '#attributes' => [
         'id' => $wrapper_id,
         'class' => ['js-media-library-widget'],
@@ -636,7 +636,7 @@ protected function getNoMediaTypesAvailableMessage() {
    * {@inheritdoc}
    */
   public function errorElement(array $element, ConstraintViolationInterface $error, array $form, FormStateInterface $form_state) {
-    return isset($element['target_id']) ? $element['target_id'] : FALSE;
+    return $element['target_id'] ?? FALSE;
   }
 
   /**
@@ -920,10 +920,10 @@ protected static function getFieldState(array $element, FormStateInterface $form
     // is used, the unvalidated user input is not added to the form state.
     // @see FormValidator::handleErrorsWithLimitedValidation()
     $values = NestedArray::getValue($form_state->getUserInput(), $path);
-    $selection = isset($values['selection']) ? $values['selection'] : [];
+    $selection = $values['selection'] ?? [];
 
     $widget_state = static::getWidgetState($element['#field_parents'], $element['#field_name'], $form_state);
-    $widget_state['items'] = isset($widget_state['items']) ? $widget_state['items'] : $selection;
+    $widget_state['items'] = $widget_state['items'] ?? $selection;
     return $widget_state;
   }
 
diff --git a/core/modules/menu_link_content/src/Plugin/Menu/MenuLinkContent.php b/core/modules/menu_link_content/src/Plugin/Menu/MenuLinkContent.php
index 0aec98069ce2..83a2a086f2a0 100644
--- a/core/modules/menu_link_content/src/Plugin/Menu/MenuLinkContent.php
+++ b/core/modules/menu_link_content/src/Plugin/Menu/MenuLinkContent.php
@@ -134,7 +134,7 @@ protected function getEntity() {
         // multiple IDs added earlier in each plugin's constructor.
         static::$entityIdsToLoad[$entity_id] = $entity_id;
         $entities = $storage->loadMultiple(array_values(static::$entityIdsToLoad));
-        $entity = isset($entities[$entity_id]) ? $entities[$entity_id] : NULL;
+        $entity = $entities[$entity_id] ?? NULL;
         static::$entityIdsToLoad = [];
       }
       if (!$entity) {
diff --git a/core/modules/menu_link_content/tests/src/Kernel/MenuLinksTest.php b/core/modules/menu_link_content/tests/src/Kernel/MenuLinksTest.php
index afe0aee563e3..61279cb7a76c 100644
--- a/core/modules/menu_link_content/tests/src/Kernel/MenuLinksTest.php
+++ b/core/modules/menu_link_content/tests/src/Kernel/MenuLinksTest.php
@@ -125,7 +125,7 @@ public function assertMenuLinkParents($links, $expected_hierarchy) {
     foreach ($expected_hierarchy as $id => $parent) {
       /** @var \Drupal\Core\Menu\MenuLinkInterface $menu_link_plugin  */
       $menu_link_plugin = $this->menuLinkManager->createInstance($links[$id]);
-      $expected_parent = isset($links[$parent]) ? $links[$parent] : '';
+      $expected_parent = $links[$parent] ?? '';
 
       $this->assertEquals($expected_parent, $menu_link_plugin->getParent(), new FormattableMarkup('Menu link %id has parent of %parent, expected %expected_parent.', ['%id' => $id, '%parent' => $menu_link_plugin->getParent(), '%expected_parent' => $expected_parent]));
     }
diff --git a/core/modules/menu_ui/menu_ui.module b/core/modules/menu_ui/menu_ui.module
index 090567541ee2..aaa740624153 100644
--- a/core/modules/menu_ui/menu_ui.module
+++ b/core/modules/menu_ui/menu_ui.module
@@ -114,7 +114,7 @@ function _menu_ui_node_save(NodeInterface $node, array $values) {
   $entity->description->value = trim($values['description']);
   $entity->menu_name->value = $values['menu_name'];
   $entity->parent->value = $values['parent'];
-  $entity->weight->value = isset($values['weight']) ? $values['weight'] : 0;
+  $entity->weight->value = $values['weight'] ?? 0;
   $entity->isDefaultRevision($node->isDefaultRevision());
   $entity->save();
 }
diff --git a/core/modules/migrate/src/MigrateMessage.php b/core/modules/migrate/src/MigrateMessage.php
index 4cc166c81c55..bcf73ad537f8 100644
--- a/core/modules/migrate/src/MigrateMessage.php
+++ b/core/modules/migrate/src/MigrateMessage.php
@@ -23,7 +23,7 @@ class MigrateMessage implements MigrateMessageInterface {
    * {@inheritdoc}
    */
   public function display($message, $type = 'status') {
-    $type = isset($this->map[$type]) ? $this->map[$type] : RfcLogLevel::NOTICE;
+    $type = $this->map[$type] ?? RfcLogLevel::NOTICE;
     \Drupal::logger('migrate')->log($type, $message);
   }
 
diff --git a/core/modules/migrate/src/Plugin/Migration.php b/core/modules/migrate/src/Plugin/Migration.php
index 021edfd6ba72..0891311cfa46 100644
--- a/core/modules/migrate/src/Plugin/Migration.php
+++ b/core/modules/migrate/src/Plugin/Migration.php
@@ -412,7 +412,7 @@ public function getDestinationPlugin($stub_being_requested = FALSE) {
   public function getIdMap() {
     if (!isset($this->idMapPlugin)) {
       $configuration = $this->idMap;
-      $plugin = isset($configuration['plugin']) ? $configuration['plugin'] : 'sql';
+      $plugin = $configuration['plugin'] ?? 'sql';
       $this->idMapPlugin = $this->idMapPluginManager->createInstance($plugin, $configuration, $this);
     }
     return $this->idMapPlugin;
@@ -657,7 +657,7 @@ public function getPluginDefinition() {
     // While normal plugins do not change their definitions on the fly, this
     // one does so accommodate for that.
     foreach (parent::getPluginDefinition() as $key => $value) {
-      $definition[$key] = isset($this->$key) ? $this->$key : $value;
+      $definition[$key] = $this->$key ?? $value;
     }
     return $definition;
   }
diff --git a/core/modules/migrate/src/Plugin/MigrationPluginManager.php b/core/modules/migrate/src/Plugin/MigrationPluginManager.php
index bb4f6c0be8ba..6f53b87f5043 100644
--- a/core/modules/migrate/src/Plugin/MigrationPluginManager.php
+++ b/core/modules/migrate/src/Plugin/MigrationPluginManager.php
@@ -108,7 +108,7 @@ public function createInstances($migration_id, array $configuration = []) {
 
     $instances = [];
     foreach ($plugin_ids as $plugin_id) {
-      $instances[$plugin_id] = $factory->createInstance($plugin_id, isset($configuration[$plugin_id]) ? $configuration[$plugin_id] : []);
+      $instances[$plugin_id] = $factory->createInstance($plugin_id, $configuration[$plugin_id] ?? []);
     }
 
     foreach ($instances as $migration) {
@@ -226,7 +226,7 @@ public function buildDependencyMigration(array $migrations, array $dynamic_ids)
    *   The dynamic ID mapping.
    */
   protected function addDependency(array &$graph, $id, $dependency, $dynamic_ids) {
-    $dependencies = isset($dynamic_ids[$dependency]) ? $dynamic_ids[$dependency] : [$dependency];
+    $dependencies = $dynamic_ids[$dependency] ?? [$dependency];
     if (!isset($graph[$id]['edges'])) {
       $graph[$id]['edges'] = [];
     }
@@ -237,7 +237,7 @@ protected function addDependency(array &$graph, $id, $dependency, $dynamic_ids)
    * {@inheritdoc}
    */
   public function createStubMigration(array $definition) {
-    $id = isset($definition['id']) ? $definition['id'] : uniqid();
+    $id = $definition['id'] ?? uniqid();
     return Migration::create(\Drupal::getContainer(), [], $id, $definition);
   }
 
diff --git a/core/modules/migrate/src/Plugin/migrate/destination/Entity.php b/core/modules/migrate/src/Plugin/migrate/destination/Entity.php
index d96bfab70dcb..0e9668b54f27 100644
--- a/core/modules/migrate/src/Plugin/migrate/destination/Entity.php
+++ b/core/modules/migrate/src/Plugin/migrate/destination/Entity.php
@@ -129,7 +129,7 @@ public static function create(ContainerInterface $container, array $configuratio
    *   The bundle for this row.
    */
   public function getBundle(Row $row) {
-    $default_bundle = isset($this->configuration['default_bundle']) ? $this->configuration['default_bundle'] : '';
+    $default_bundle = $this->configuration['default_bundle'] ?? '';
     $bundle_key = $this->getKey('bundle');
     return $row->getDestinationProperty($bundle_key) ?: $default_bundle;
   }
diff --git a/core/modules/migrate/src/Plugin/migrate/process/Concat.php b/core/modules/migrate/src/Plugin/migrate/process/Concat.php
index 3490ae81e318..801d65d6c469 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/Concat.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/Concat.php
@@ -63,7 +63,7 @@ class Concat extends ProcessPluginBase {
    */
   public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
     if (is_array($value)) {
-      $delimiter = isset($this->configuration['delimiter']) ? $this->configuration['delimiter'] : '';
+      $delimiter = $this->configuration['delimiter'] ?? '';
       return implode($delimiter, $value);
     }
     else {
diff --git a/core/modules/migrate/src/Plugin/migrate/process/DefaultValue.php b/core/modules/migrate/src/Plugin/migrate/process/DefaultValue.php
index b6f3839df8cf..05229f03d1b7 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/DefaultValue.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/DefaultValue.php
@@ -53,7 +53,7 @@ class DefaultValue extends ProcessPluginBase {
    */
   public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
     if (!empty($this->configuration['strict'])) {
-      return isset($value) ? $value : $this->configuration['default_value'];
+      return $value ?? $this->configuration['default_value'];
     }
     return $value ?: $this->configuration['default_value'];
   }
diff --git a/core/modules/migrate/src/Plugin/migrate/process/Explode.php b/core/modules/migrate/src/Plugin/migrate/process/Explode.php
index 536a9e1b0ab8..b2051c2a5b51 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/Explode.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/Explode.php
@@ -117,7 +117,7 @@ public function transform($value, MigrateExecutableInterface $migrate_executable
       }
     }
 
-    $limit = isset($this->configuration['limit']) ? $this->configuration['limit'] : PHP_INT_MAX;
+    $limit = $this->configuration['limit'] ?? PHP_INT_MAX;
 
     return explode($this->configuration['delimiter'], $value, $limit);
   }
diff --git a/core/modules/migrate/src/Plugin/migrate/process/FormatDate.php b/core/modules/migrate/src/Plugin/migrate/process/FormatDate.php
index e5d14efe7a64..4cb76c801e43 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/FormatDate.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/FormatDate.php
@@ -112,9 +112,9 @@ public function transform($value, MigrateExecutableInterface $migrate_executable
     $toFormat = $this->configuration['to_format'];
     $system_timezone = date_default_timezone_get();
     $default_timezone = !empty($system_timezone) ? $system_timezone : 'UTC';
-    $from_timezone = isset($this->configuration['from_timezone']) ? $this->configuration['from_timezone'] : $default_timezone;
-    $to_timezone = isset($this->configuration['to_timezone']) ? $this->configuration['to_timezone'] : $default_timezone;
-    $settings = isset($this->configuration['settings']) ? $this->configuration['settings'] : [];
+    $from_timezone = $this->configuration['from_timezone'] ?? $default_timezone;
+    $to_timezone = $this->configuration['to_timezone'] ?? $default_timezone;
+    $settings = $this->configuration['settings'] ?? [];
 
     // Older versions of Drupal where omitting certain granularity values (also
     // known as "collected date attributes") resulted in invalid timestamps
diff --git a/core/modules/migrate/src/Plugin/migrate/process/MakeUniqueBase.php b/core/modules/migrate/src/Plugin/migrate/process/MakeUniqueBase.php
index 861a6b6f8890..ee421b08466c 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/MakeUniqueBase.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/MakeUniqueBase.php
@@ -45,12 +45,12 @@ abstract class MakeUniqueBase extends ProcessPluginBase {
    */
   public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
     $i = 1;
-    $postfix = isset($this->configuration['postfix']) ? $this->configuration['postfix'] : '';
-    $start = isset($this->configuration['start']) ? $this->configuration['start'] : 0;
+    $postfix = $this->configuration['postfix'] ?? '';
+    $start = $this->configuration['start'] ?? 0;
     if (!is_int($start)) {
       throw new MigrateException('The start position configuration key should be an integer. Omit this key to capture from the beginning of the string.');
     }
-    $length = isset($this->configuration['length']) ? $this->configuration['length'] : NULL;
+    $length = $this->configuration['length'] ?? NULL;
     if (!is_null($length) && !is_int($length)) {
       throw new MigrateException('The character length configuration key should be an integer. Omit this key to capture the entire string.');
     }
diff --git a/core/modules/migrate/src/Plugin/migrate/process/Substr.php b/core/modules/migrate/src/Plugin/migrate/process/Substr.php
index d97c3ba51a78..45835f153cde 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/Substr.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/Substr.php
@@ -71,11 +71,11 @@ class Substr extends ProcessPluginBase {
    * {@inheritdoc}
    */
   public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
-    $start = isset($this->configuration['start']) ? $this->configuration['start'] : 0;
+    $start = $this->configuration['start'] ?? 0;
     if (!is_int($start)) {
       throw new MigrateException('The start position configuration value should be an integer. Omit this key to capture from the beginning of the string.');
     }
-    $length = isset($this->configuration['length']) ? $this->configuration['length'] : NULL;
+    $length = $this->configuration['length'] ?? NULL;
     if ($length !== NULL && !is_int($length)) {
       throw new MigrateException('The character length configuration value should be an integer. Omit this key to capture from the start position to the end of the string.');
     }
diff --git a/core/modules/migrate_drupal/src/FieldDiscovery.php b/core/modules/migrate_drupal/src/FieldDiscovery.php
index 176988532440..f1c4745ece90 100644
--- a/core/modules/migrate_drupal/src/FieldDiscovery.php
+++ b/core/modules/migrate_drupal/src/FieldDiscovery.php
@@ -143,7 +143,7 @@ public function addBundleFieldProcesses(MigrationInterface $migration, $entity_t
     foreach ($bundle_fields as $field_name => $field_info) {
       $plugin = $this->getFieldPlugin($field_info['type'], $migration);
       if ($plugin) {
-        $method = isset($plugin_definition['field_plugin_method']) ? $plugin_definition['field_plugin_method'] : 'defineValueProcessPipeline';
+        $method = $plugin_definition['field_plugin_method'] ?? 'defineValueProcessPipeline';
 
         call_user_func_array([
           $plugin,
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/source/DrupalSqlBase.php b/core/modules/migrate_drupal/src/Plugin/migrate/source/DrupalSqlBase.php
index 428bfd2b42cd..0df37ea25641 100644
--- a/core/modules/migrate_drupal/src/Plugin/migrate/source/DrupalSqlBase.php
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/source/DrupalSqlBase.php
@@ -133,7 +133,7 @@ public function checkRequirements() {
    */
   protected function getModuleSchemaVersion($module) {
     $system_data = $this->getSystemData();
-    return isset($system_data['module'][$module]['schema_version']) ? $system_data['module'][$module]['schema_version'] : FALSE;
+    return $system_data['module'][$module]['schema_version'] ?? FALSE;
   }
 
   /**
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/source/d7/FieldableEntity.php b/core/modules/migrate_drupal/src/Plugin/migrate/source/d7/FieldableEntity.php
index 176749480b54..4ddc36e84715 100644
--- a/core/modules/migrate_drupal/src/Plugin/migrate/source/d7/FieldableEntity.php
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/source/d7/FieldableEntity.php
@@ -40,7 +40,7 @@ protected function getFields($entity_type, $bundle = NULL) {
     $query = $this->select('field_config_instance', 'fci')
       ->fields('fci')
       ->condition('fci.entity_type', $entity_type)
-      ->condition('fci.bundle', isset($bundle) ? $bundle : $entity_type)
+      ->condition('fci.bundle', $bundle ?? $entity_type)
       ->condition('fci.deleted', 0);
 
     // Join the 'field_config' table and add the 'translatable' setting to the
diff --git a/core/modules/node/src/Plugin/Search/NodeSearch.php b/core/modules/node/src/Plugin/Search/NodeSearch.php
index b23112ae31f3..5412541a49b7 100644
--- a/core/modules/node/src/Plugin/Search/NodeSearch.php
+++ b/core/modules/node/src/Plugin/Search/NodeSearch.php
@@ -446,7 +446,7 @@ protected function addNodeRankings(SelectExtender $query) {
           if (isset($values['join']) && !isset($tables[$values['join']['alias']])) {
             $query->addJoin($values['join']['type'], $values['join']['table'], $values['join']['alias'], $values['join']['on']);
           }
-          $arguments = isset($values['arguments']) ? $values['arguments'] : [];
+          $arguments = $values['arguments'] ?? [];
           $query->addScore($values['score'], $arguments, $node_rank);
         }
       }
@@ -604,7 +604,7 @@ public function searchFormAlter(array &$form, FormStateInterface $form_state) {
       '#title' => t('Containing any of the words'),
       '#size' => 30,
       '#maxlength' => 255,
-      '#default_value' => isset($defaults['or']) ? $defaults['or'] : '',
+      '#default_value' => $defaults['or'] ?? '',
     ];
 
     $form['advanced']['keywords-fieldset']['keywords']['phrase'] = [
@@ -612,7 +612,7 @@ public function searchFormAlter(array &$form, FormStateInterface $form_state) {
       '#title' => t('Containing the phrase'),
       '#size' => 30,
       '#maxlength' => 255,
-      '#default_value' => isset($defaults['phrase']) ? $defaults['phrase'] : '',
+      '#default_value' => $defaults['phrase'] ?? '',
     ];
 
     $form['advanced']['keywords-fieldset']['keywords']['negative'] = [
@@ -620,7 +620,7 @@ public function searchFormAlter(array &$form, FormStateInterface $form_state) {
       '#title' => t('Containing none of the words'),
       '#size' => 30,
       '#maxlength' => 255,
-      '#default_value' => isset($defaults['negative']) ? $defaults['negative'] : '',
+      '#default_value' => $defaults['negative'] ?? '',
     ];
 
     // Add node types.
@@ -635,7 +635,7 @@ public function searchFormAlter(array &$form, FormStateInterface $form_state) {
       '#prefix' => '<div class="criterion">',
       '#suffix' => '</div>',
       '#options' => $types,
-      '#default_value' => isset($defaults['type']) ? $defaults['type'] : [],
+      '#default_value' => $defaults['type'] ?? [],
     ];
 
     $form['advanced']['submit'] = [
@@ -664,7 +664,7 @@ public function searchFormAlter(array &$form, FormStateInterface $form_state) {
         '#prefix' => '<div class="criterion">',
         '#suffix' => '</div>',
         '#options' => $language_options,
-        '#default_value' => isset($defaults['language']) ? $defaults['language'] : [],
+        '#default_value' => $defaults['language'] ?? [],
       ];
     }
   }
@@ -847,7 +847,7 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
         '#type' => 'select',
         '#options' => $options,
         '#attributes' => ['aria-label' => $this->t("Influence of '@title'", ['@title' => $values['title']])],
-        '#default_value' => isset($this->configuration['rankings'][$var]) ? $this->configuration['rankings'][$var] : 0,
+        '#default_value' => $this->configuration['rankings'][$var] ?? 0,
       ];
     }
     return $form;
diff --git a/core/modules/node/src/Plugin/migrate/source/d6/Node.php b/core/modules/node/src/Plugin/migrate/source/d6/Node.php
index e120ef9cc671..a1a3166420e6 100644
--- a/core/modules/node/src/Plugin/migrate/source/d6/Node.php
+++ b/core/modules/node/src/Plugin/migrate/source/d6/Node.php
@@ -255,7 +255,7 @@ protected function getFieldInfo($node_type) {
       }
     }
 
-    return isset($this->fieldInfo[$node_type]) ? $this->fieldInfo[$node_type] : [];
+    return $this->fieldInfo[$node_type] ?? [];
   }
 
   /**
diff --git a/core/modules/node/src/Plugin/migrate/source/d6/NodeType.php b/core/modules/node/src/Plugin/migrate/source/d6/NodeType.php
index 1238e0ee981d..c741e2742fa0 100644
--- a/core/modules/node/src/Plugin/migrate/source/d6/NodeType.php
+++ b/core/modules/node/src/Plugin/migrate/source/d6/NodeType.php
@@ -132,7 +132,7 @@ public function prepareRow(Row $row) {
       $options[$item] = in_array($item, $source_options);
     }
     $row->setSourceProperty('options', $options);
-    $submitted = isset($this->themeSettings['toggle_node_info_' . $type]) ? $this->themeSettings['toggle_node_info_' . $type] : FALSE;
+    $submitted = $this->themeSettings['toggle_node_info_' . $type] ?? FALSE;
     $row->setSourceProperty('display_submitted', $submitted);
 
     if ($default_node_menu = $this->variableGet('menu_default_node_menu', NULL)) {
diff --git a/core/modules/node/src/Plugin/views/field/Node.php b/core/modules/node/src/Plugin/views/field/Node.php
index ae35363e270e..f81777e42199 100644
--- a/core/modules/node/src/Plugin/views/field/Node.php
+++ b/core/modules/node/src/Plugin/views/field/Node.php
@@ -37,7 +37,7 @@ public function init(ViewExecutable $view, DisplayPluginBase $display, array &$o
    */
   protected function defineOptions() {
     $options = parent::defineOptions();
-    $options['link_to_node'] = ['default' => isset($this->definition['link_to_node default']) ? $this->definition['link_to_node default'] : FALSE];
+    $options['link_to_node'] = ['default' => $this->definition['link_to_node default'] ?? FALSE];
     return $options;
   }
 
diff --git a/core/modules/options/src/Plugin/Field/FieldFormatter/OptionsDefaultFormatter.php b/core/modules/options/src/Plugin/Field/FieldFormatter/OptionsDefaultFormatter.php
index 5ad9539d3ea4..228352045465 100644
--- a/core/modules/options/src/Plugin/Field/FieldFormatter/OptionsDefaultFormatter.php
+++ b/core/modules/options/src/Plugin/Field/FieldFormatter/OptionsDefaultFormatter.php
@@ -40,7 +40,7 @@ public function viewElements(FieldItemListInterface $items, $langcode) {
         $value = $item->value;
         // If the stored value is in the current set of allowed values, display
         // the associated label, otherwise just display the raw value.
-        $output = isset($options[$value]) ? $options[$value] : $value;
+        $output = $options[$value] ?? $value;
         $elements[$delta] = [
           '#markup' => $output,
           '#allowed_tags' => FieldFilteredMarkup::allowedTags(),
diff --git a/core/modules/path/src/Plugin/migrate/process/PathSetTranslated.php b/core/modules/path/src/Plugin/migrate/process/PathSetTranslated.php
index 74ed9652d962..b982d2b34820 100644
--- a/core/modules/path/src/Plugin/migrate/process/PathSetTranslated.php
+++ b/core/modules/path/src/Plugin/migrate/process/PathSetTranslated.php
@@ -64,7 +64,7 @@ public function transform($value, MigrateExecutableInterface $migrate_executable
       throw new MigrateException("The input value should be an array.");
     }
 
-    $path = isset($value[0]) ? $value[0] : '';
+    $path = $value[0] ?? '';
     $nid = (is_array($value[1]) && isset($value[1][0])) ? $value[1][0] : FALSE;
     if (preg_match('/^\/node\/\d+$/', $path) && $nid) {
       return '/node/' . $nid;
diff --git a/core/modules/rdf/rdf.module b/core/modules/rdf/rdf.module
index 1c003a51639b..69b5f724ebdd 100644
--- a/core/modules/rdf/rdf.module
+++ b/core/modules/rdf/rdf.module
@@ -170,7 +170,7 @@ function rdf_rdfa_attributes($mapping, $data = NULL) {
   $attributes = [];
 
   // The type of mapping defaults to 'property'.
-  $type = isset($mapping['mapping_type']) ? $mapping['mapping_type'] : 'property';
+  $type = $mapping['mapping_type'] ?? 'property';
 
   switch ($type) {
     // The mapping expresses the relationship between two resources.
@@ -187,7 +187,7 @@ function rdf_rdfa_attributes($mapping, $data = NULL) {
         // Convert $data to a specific format as per the callback function.
         if (isset($data) && !empty($mapping['datatype_callback'])) {
           $callback = $mapping['datatype_callback']['callable'];
-          $arguments = isset($mapping['datatype_callback']['arguments']) ? $mapping['datatype_callback']['arguments'] : NULL;
+          $arguments = $mapping['datatype_callback']['arguments'] ?? NULL;
           $attributes['content'] = call_user_func($callback, $data, $arguments);
         }
         if (isset($mapping['datatype'])) {
diff --git a/core/modules/responsive_image/src/ResponsiveImageStyleForm.php b/core/modules/responsive_image/src/ResponsiveImageStyleForm.php
index 17e00500c9de..7bceff174ec4 100644
--- a/core/modules/responsive_image/src/ResponsiveImageStyleForm.php
+++ b/core/modules/responsive_image/src/ResponsiveImageStyleForm.php
@@ -141,7 +141,7 @@ public function form(array $form, FormStateInterface $form_state) {
             'image_style' => $this->t('Select a single image style.'),
             '_none' => $this->t('Do not use this breakpoint.'),
           ],
-          '#default_value' => isset($image_style_mapping['image_mapping_type']) ? $image_style_mapping['image_mapping_type'] : '_none',
+          '#default_value' => $image_style_mapping['image_mapping_type'] ?? '_none',
           '#description' => $description,
         ];
         $form['keyed_styles'][$breakpoint_id][$multiplier]['image_style'] = [
@@ -159,7 +159,7 @@ public function form(array $form, FormStateInterface $form_state) {
         $form['keyed_styles'][$breakpoint_id][$multiplier]['sizes'] = [
           '#type' => 'textarea',
           '#title' => $this->t('Sizes'),
-          '#default_value' => isset($image_style_mapping['image_mapping']['sizes']) ? $image_style_mapping['image_mapping']['sizes'] : '100vw',
+          '#default_value' => $image_style_mapping['image_mapping']['sizes'] ?? '100vw',
           '#description' => $this->t('Enter the value for the sizes attribute, for example: %example_sizes.', ['%example_sizes' => '(min-width:700px) 700px, 100vw']),
           '#states' => [
             'visible' => [
@@ -175,7 +175,7 @@ public function form(array $form, FormStateInterface $form_state) {
           '#type' => 'checkboxes',
           '#options' => array_diff_key($image_styles, ['' => '']),
           '#description' => $this->t('Select image styles with widths that range from the smallest amount of space this image will take up in the layout to the largest, bearing in mind that high resolution screens will need images 1.5x to 2x larger.'),
-          '#default_value' => isset($image_style_mapping['image_mapping']['sizes_image_styles']) ? $image_style_mapping['image_mapping']['sizes_image_styles'] : [],
+          '#default_value' => $image_style_mapping['image_mapping']['sizes_image_styles'] ?? [],
           '#states' => [
             'visible' => [
               ':input[name="keyed_styles[' . $breakpoint_id . '][' . $multiplier . '][image_mapping_type]"]' => ['value' => 'sizes'],
diff --git a/core/modules/rest/src/Plugin/ResourceBase.php b/core/modules/rest/src/Plugin/ResourceBase.php
index b7c4ab41c025..0c64978df8b5 100644
--- a/core/modules/rest/src/Plugin/ResourceBase.php
+++ b/core/modules/rest/src/Plugin/ResourceBase.php
@@ -99,8 +99,8 @@ public function routes() {
     $collection = new RouteCollection();
 
     $definition = $this->getPluginDefinition();
-    $canonical_path = isset($definition['uri_paths']['canonical']) ? $definition['uri_paths']['canonical'] : '/' . strtr($this->pluginId, ':', '/') . '/{id}';
-    $create_path = isset($definition['uri_paths']['create']) ? $definition['uri_paths']['create'] : '/' . strtr($this->pluginId, ':', '/');
+    $canonical_path = $definition['uri_paths']['canonical'] ?? '/' . strtr($this->pluginId, ':', '/') . '/{id}';
+    $create_path = $definition['uri_paths']['create'] ?? '/' . strtr($this->pluginId, ':', '/');
 
     $route_name = strtr($this->pluginId, ':', '.');
 
diff --git a/core/modules/rest/src/Plugin/views/row/DataFieldRow.php b/core/modules/rest/src/Plugin/views/row/DataFieldRow.php
index 9b9e28573ea5..b328e452e03e 100644
--- a/core/modules/rest/src/Plugin/views/row/DataFieldRow.php
+++ b/core/modules/rest/src/Plugin/views/row/DataFieldRow.php
@@ -94,14 +94,14 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) {
           '#title' => $this->t('Alias for @id', ['@id' => $id]),
           '#title_display' => 'invisible',
           '#type' => 'textfield',
-          '#default_value' => isset($options[$id]['alias']) ? $options[$id]['alias'] : '',
+          '#default_value' => $options[$id]['alias'] ?? '',
           '#element_validate' => [[$this, 'validateAliasName']],
         ];
         $form['field_options'][$id]['raw_output'] = [
           '#title' => $this->t('Raw output for @id', ['@id' => $id]),
           '#title_display' => 'invisible',
           '#type' => 'checkbox',
-          '#default_value' => isset($options[$id]['raw_output']) ? $options[$id]['raw_output'] : '',
+          '#default_value' => $options[$id]['raw_output'] ?? '',
         ];
       }
     }
@@ -189,7 +189,7 @@ public function getFieldKeyAlias($id) {
    */
   protected static function extractFromOptionsArray($key, $options) {
     return array_map(function ($item) use ($key) {
-      return isset($item[$key]) ? $item[$key] : NULL;
+      return $item[$key] ?? NULL;
     }, $options);
   }
 
diff --git a/core/modules/search/search.pages.inc b/core/modules/search/search.pages.inc
index 8db7d159f2a8..a9e49ffc21a6 100644
--- a/core/modules/search/search.pages.inc
+++ b/core/modules/search/search.pages.inc
@@ -49,7 +49,7 @@ function template_preprocess_search_result(&$variables) {
     $info = array_merge($info, $result['extra']);
   }
   // Check for existence. User search does not include snippets.
-  $variables['snippet'] = isset($result['snippet']) ? $result['snippet'] : '';
+  $variables['snippet'] = $result['snippet'] ?? '';
   // Provide separated and grouped meta information..
   $variables['info_split'] = $info;
   $variables['info'] = [
diff --git a/core/modules/serialization/src/Normalizer/DateTimeIso8601Normalizer.php b/core/modules/serialization/src/Normalizer/DateTimeIso8601Normalizer.php
index c70c43d8bbb2..10d0037bf39e 100644
--- a/core/modules/serialization/src/Normalizer/DateTimeIso8601Normalizer.php
+++ b/core/modules/serialization/src/Normalizer/DateTimeIso8601Normalizer.php
@@ -56,10 +56,13 @@ public function normalize($datetime, $format = NULL, array $context = []) {
    */
   public function denormalize($data, $class, $format = NULL, array $context = []) {
     // @todo Move the date-only handling out of here in https://www.drupal.org/project/drupal/issues/2958416.
-    $field_definition = isset($context['target_instance'])
-      ? $context['target_instance']->getFieldDefinition()
-      : (isset($context['field_definition']) ? $context['field_definition'] : NULL);
-    if ($field_definition === NULL) {
+    if (isset($context['target_instance'])) {
+      $field_definition = $context['target_instance']->getFieldDefinition();
+    }
+    elseif (isset($context['field_definition'])) {
+      $field_definition = $context['field_definition'];
+    }
+    else {
       throw new InvalidArgumentException('$context[\'target_instance\'] or $context[\'field_definition\'] must be set to denormalize with the DateTimeIso8601Normalizer');
     }
 
diff --git a/core/modules/serialization/src/Normalizer/DateTimeNormalizer.php b/core/modules/serialization/src/Normalizer/DateTimeNormalizer.php
index b84e170d6b75..42a715092b75 100644
--- a/core/modules/serialization/src/Normalizer/DateTimeNormalizer.php
+++ b/core/modules/serialization/src/Normalizer/DateTimeNormalizer.php
@@ -96,9 +96,7 @@ public function denormalize($data, $class, $format = NULL, array $context = [])
     // input data if it matches the defined pattern. Since the formats are
     // unambiguous (i.e., they reference an absolute time with a defined time
     // zone), only one will ever match.
-    $allowed_formats = isset($context['datetime_allowed_formats'])
-      ? $context['datetime_allowed_formats']
-      : $this->allowedFormats;
+    $allowed_formats = $context['datetime_allowed_formats'] ?? $this->allowedFormats;
     foreach ($allowed_formats as $format) {
       $date = \DateTime::createFromFormat($format, $data);
       $errors = \DateTime::getLastErrors();
diff --git a/core/modules/serialization/src/Normalizer/FieldableEntityNormalizerTrait.php b/core/modules/serialization/src/Normalizer/FieldableEntityNormalizerTrait.php
index c35ed41add84..379d0f9d8a79 100644
--- a/core/modules/serialization/src/Normalizer/FieldableEntityNormalizerTrait.php
+++ b/core/modules/serialization/src/Normalizer/FieldableEntityNormalizerTrait.php
@@ -101,7 +101,7 @@ protected function extractBundleData(array &$data, EntityTypeInterface $entity_t
     $key_id = isset($base_field_definitions[$bundle_key]) ? $base_field_definitions[$bundle_key]->getFieldStorageDefinition()->getMainPropertyName() : 'value';
 
     // Normalize the bundle if it is not explicitly set.
-    $bundle_value = isset($data[$bundle_key][0][$key_id]) ? $data[$bundle_key][0][$key_id] : (isset($data[$bundle_key]) ? $data[$bundle_key] : NULL);
+    $bundle_value = $data[$bundle_key][0][$key_id] ?? ($data[$bundle_key] ?? NULL);
     // Unset the bundle from the data.
     unset($data[$bundle_key]);
 
diff --git a/core/modules/serialization/src/RegisterEntityResolversCompilerPass.php b/core/modules/serialization/src/RegisterEntityResolversCompilerPass.php
index 483ad43efe5e..2e61158dda35 100644
--- a/core/modules/serialization/src/RegisterEntityResolversCompilerPass.php
+++ b/core/modules/serialization/src/RegisterEntityResolversCompilerPass.php
@@ -23,7 +23,7 @@ public function process(ContainerBuilder $container) {
 
     // Retrieve registered Normalizers and Encoders from the container.
     foreach ($container->findTaggedServiceIds('entity_resolver') as $id => $attributes) {
-      $priority = isset($attributes[0]['priority']) ? $attributes[0]['priority'] : 0;
+      $priority = $attributes[0]['priority'] ?? 0;
       $resolvers[$priority][] = new Reference($id);
     }
 
diff --git a/core/modules/serialization/src/RegisterSerializationClassesCompilerPass.php b/core/modules/serialization/src/RegisterSerializationClassesCompilerPass.php
index eba01ba91856..3071c59d606f 100644
--- a/core/modules/serialization/src/RegisterSerializationClassesCompilerPass.php
+++ b/core/modules/serialization/src/RegisterSerializationClassesCompilerPass.php
@@ -25,14 +25,14 @@ public function process(ContainerBuilder $container) {
       // The 'serializer' service is the public API: mark normalizers private.
       $container->getDefinition($id)->setPublic(FALSE);
 
-      $priority = isset($attributes[0]['priority']) ? $attributes[0]['priority'] : 0;
+      $priority = $attributes[0]['priority'] ?? 0;
       $normalizers[$priority][] = new Reference($id);
     }
     foreach ($container->findTaggedServiceIds('encoder') as $id => $attributes) {
       // The 'serializer' service is the public API: mark encoders private.
       $container->getDefinition($id)->setPublic(FALSE);
 
-      $priority = isset($attributes[0]['priority']) ? $attributes[0]['priority'] : 0;
+      $priority = $attributes[0]['priority'] ?? 0;
       $encoders[$priority][] = new Reference($id);
     }
 
diff --git a/core/modules/shortcut/tests/src/Functional/ShortcutTestBase.php b/core/modules/shortcut/tests/src/Functional/ShortcutTestBase.php
index 636db2008cf8..bdec9903dffc 100644
--- a/core/modules/shortcut/tests/src/Functional/ShortcutTestBase.php
+++ b/core/modules/shortcut/tests/src/Functional/ShortcutTestBase.php
@@ -110,7 +110,7 @@ protected function setUp() {
    */
   public function generateShortcutSet($label = '', $id = NULL) {
     $set = ShortcutSet::create([
-      'id' => isset($id) ? $id : strtolower($this->randomMachineName()),
+      'id' => $id ?? strtolower($this->randomMachineName()),
       'label' => empty($label) ? $this->randomString() : $label,
     ]);
     $set->save();
diff --git a/core/modules/system/src/Controller/BatchController.php b/core/modules/system/src/Controller/BatchController.php
index 038b1333019e..761c32a08ddd 100644
--- a/core/modules/system/src/Controller/BatchController.php
+++ b/core/modules/system/src/Controller/BatchController.php
@@ -61,7 +61,7 @@ public function batchPage(Request $request) {
       return $output;
     }
     elseif (isset($output)) {
-      $title = isset($output['#title']) ? $output['#title'] : NULL;
+      $title = $output['#title'] ?? NULL;
       $page = [
         '#type' => 'page',
         '#title' => $title,
diff --git a/core/modules/system/src/Controller/DbUpdateController.php b/core/modules/system/src/Controller/DbUpdateController.php
index be3adb210fad..417fa6a5f560 100644
--- a/core/modules/system/src/Controller/DbUpdateController.php
+++ b/core/modules/system/src/Controller/DbUpdateController.php
@@ -191,7 +191,7 @@ public function handle($op, Request $request) {
     if ($output instanceof Response) {
       return $output;
     }
-    $title = isset($output['#title']) ? $output['#title'] : $this->t('Drupal database update');
+    $title = $output['#title'] ?? $this->t('Drupal database update');
 
     return $this->bareHtmlPageRenderer->renderBarePage($output, $title, 'maintenance_page', $regions);
   }
diff --git a/core/modules/system/src/Form/ModulesListForm.php b/core/modules/system/src/Form/ModulesListForm.php
index b7e0450320ba..ec50babddce8 100644
--- a/core/modules/system/src/Form/ModulesListForm.php
+++ b/core/modules/system/src/Form/ModulesListForm.php
@@ -276,7 +276,7 @@ protected function buildRow(array $modules, Extension $module, $distribution) {
 
     // Generate link for module's configuration page, if it has one.
     if ($module->status && isset($module->info['configure'])) {
-      $route_parameters = isset($module->info['configure_parameters']) ? $module->info['configure_parameters'] : [];
+      $route_parameters = $module->info['configure_parameters'] ?? [];
       if ($this->accessManager->checkNamedRoute($module->info['configure'], $route_parameters, $this->currentUser)) {
         $row['links']['configure'] = [
           '#type' => 'link',
@@ -320,7 +320,7 @@ protected function buildRow(array $modules, Extension $module, $distribution) {
         '@core_version' => \Drupal::VERSION,
       ]);
       $row['#requires']['core'] = $this->t('Drupal Core (@core_requirement) (<span class="admin-missing">incompatible with</span> version @core_version)', [
-        '@core_requirement' => isset($module->info['core_version_requirement']) ? $module->info['core_version_requirement'] : $module->info['core'],
+        '@core_requirement' => $module->info['core_version_requirement'] ?? $module->info['core'],
         '@core_version' => \Drupal::VERSION,
       ]);
     }
diff --git a/core/modules/system/src/Form/ThemeExperimentalConfirmForm.php b/core/modules/system/src/Form/ThemeExperimentalConfirmForm.php
index d83cd422ef9b..c9c993775161 100644
--- a/core/modules/system/src/Form/ThemeExperimentalConfirmForm.php
+++ b/core/modules/system/src/Form/ThemeExperimentalConfirmForm.php
@@ -134,8 +134,8 @@ public function buildForm(array $form, FormStateInterface $form_state) {
    */
   public function submitForm(array &$form, FormStateInterface $form_state) {
     $args = $form_state->getBuildInfo()['args'];
-    $theme = isset($args[0]) ? $args[0] : NULL;
-    $set_default = isset($args[1]) ? $args[1] : FALSE;
+    $theme = $args[0] ?? NULL;
+    $set_default = $args[1] ?? FALSE;
     $themes = $this->themeList->getList();
     $config = $this->configFactory()->getEditable('system.theme');
     try {
diff --git a/core/modules/system/src/Form/ThemeSettingsForm.php b/core/modules/system/src/Form/ThemeSettingsForm.php
index 8fa152625f2a..51b57e6be1e0 100644
--- a/core/modules/system/src/Form/ThemeSettingsForm.php
+++ b/core/modules/system/src/Form/ThemeSettingsForm.php
@@ -314,7 +314,7 @@ public function buildForm(array $form, FormStateInterface $form_state, $theme =
         }
 
         $element['#description'] = $this->t('Examples: <code>@implicit-public-file</code> (for a file in the public filesystem), <code>@explicit-file</code>, or <code>@local-file</code>.', [
-          '@implicit-public-file' => isset($friendly_path) ? $friendly_path : $default,
+          '@implicit-public-file' => $friendly_path ?? $default,
           '@explicit-file' => StreamWrapperManager::getScheme($original_path) !== FALSE ? $original_path : 'public://' . $default,
           '@local-file' => $local_file,
         ]);
diff --git a/core/modules/system/src/PhpStorage/MockPhpStorage.php b/core/modules/system/src/PhpStorage/MockPhpStorage.php
index faac373b9eab..cb3c42f8a42a 100644
--- a/core/modules/system/src/PhpStorage/MockPhpStorage.php
+++ b/core/modules/system/src/PhpStorage/MockPhpStorage.php
@@ -34,7 +34,7 @@ public function getConfiguration() {
    * Gets a single configuration key.
    */
   public function getConfigurationValue($key) {
-    return isset($this->configuration[$key]) ? $this->configuration[$key] : NULL;
+    return $this->configuration[$key] ?? NULL;
   }
 
 }
diff --git a/core/modules/system/system.admin.inc b/core/modules/system/system.admin.inc
index 40fa1037ec75..65fb20a62b06 100644
--- a/core/modules/system/system.admin.inc
+++ b/core/modules/system/system.admin.inc
@@ -300,7 +300,7 @@ function template_preprocess_system_themes_page(&$variables) {
 
       $current_theme['attributes'] = new Attribute();
       $current_theme['name'] = $theme->info['name'];
-      $current_theme['version'] = isset($theme->info['version']) ? $theme->info['version'] : '';
+      $current_theme['version'] = $theme->info['version'] ?? '';
       $current_theme['notes'] = $theme->notes;
       $current_theme['is_default'] = $theme->is_default;
       $current_theme['is_admin'] = $theme->is_admin;
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index 2d3606bfeded..1295b6d18b3f 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -944,7 +944,7 @@ function system_system_info_alter(&$info, Extension $file, $type) {
  */
 function system_default_region($theme) {
   $regions = array_keys(system_region_list($theme, REGIONS_VISIBLE));
-  return isset($regions[0]) ? $regions[0] : '';
+  return $regions[0] ?? '';
 }
 
 /**
diff --git a/core/modules/system/tests/modules/dialog_renderer_test/src/Render/MainContent/WideModalRenderer.php b/core/modules/system/tests/modules/dialog_renderer_test/src/Render/MainContent/WideModalRenderer.php
index aecb4dd0de93..88f304e2bdde 100644
--- a/core/modules/system/tests/modules/dialog_renderer_test/src/Render/MainContent/WideModalRenderer.php
+++ b/core/modules/system/tests/modules/dialog_renderer_test/src/Render/MainContent/WideModalRenderer.php
@@ -56,7 +56,7 @@ public function renderResponse(array $main_content, Request $request, RouteMatch
     $response->setAttachments($main_content['#attached']);
 
     // If the main content doesn't provide a title, use the title resolver.
-    $title = isset($main_content['#title']) ? $main_content['#title'] : $this->titleResolver->getTitle($request, $route_match->getRouteObject());
+    $title = $main_content['#title'] ?? $this->titleResolver->getTitle($request, $route_match->getRouteObject());
 
     // Determine the title: use the title provided by the main content if any,
     // otherwise get it from the routing information.
diff --git a/core/modules/system/tests/modules/entity_test/src/Plugin/Field/FieldWidget/ShapeOnlyColorEditableWidget.php b/core/modules/system/tests/modules/entity_test/src/Plugin/Field/FieldWidget/ShapeOnlyColorEditableWidget.php
index 6283bc3cea9c..e12c6bff62ca 100644
--- a/core/modules/system/tests/modules/entity_test/src/Plugin/Field/FieldWidget/ShapeOnlyColorEditableWidget.php
+++ b/core/modules/system/tests/modules/entity_test/src/Plugin/Field/FieldWidget/ShapeOnlyColorEditableWidget.php
@@ -30,7 +30,7 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen
 
     $element['color'] = [
       '#type' => 'textfield',
-      '#default_value' => isset($items[$delta]->color) ? $items[$delta]->color : NULL,
+      '#default_value' => $items[$delta]->color ?? NULL,
       '#size' => 255,
     ];
 
diff --git a/core/modules/system/tests/modules/plugin_test/src/Plugin/plugin_test/mock_block/MockUserLoginBlock.php b/core/modules/system/tests/modules/plugin_test/src/Plugin/plugin_test/mock_block/MockUserLoginBlock.php
index 6741eac9646d..f9354820a430 100644
--- a/core/modules/system/tests/modules/plugin_test/src/Plugin/plugin_test/mock_block/MockUserLoginBlock.php
+++ b/core/modules/system/tests/modules/plugin_test/src/Plugin/plugin_test/mock_block/MockUserLoginBlock.php
@@ -20,7 +20,7 @@ class MockUserLoginBlock extends PluginBase {
 
   public function __construct(array $configuration, $plugin_id, $plugin_definition) {
     parent::__construct($configuration, $plugin_id, $plugin_definition);
-    $this->title = isset($configuration['title']) ? $configuration['title'] : '';
+    $this->title = $configuration['title'] ?? '';
   }
 
   public function getTitle() {
diff --git a/core/modules/system/tests/src/Functional/Entity/Traits/EntityDefinitionTestTrait.php b/core/modules/system/tests/src/Functional/Entity/Traits/EntityDefinitionTestTrait.php
index 350d14530223..206bf394b492 100644
--- a/core/modules/system/tests/src/Functional/Entity/Traits/EntityDefinitionTestTrait.php
+++ b/core/modules/system/tests/src/Functional/Entity/Traits/EntityDefinitionTestTrait.php
@@ -49,8 +49,8 @@ protected function applyEntityUpdates($entity_type_id = NULL) {
         $original_storage_definitions = \Drupal::service('entity.last_installed_schema.repository')->getLastInstalledFieldStorageDefinitions($entity_type_id);
 
         foreach ($change_list['field_storage_definitions'] as $field_name => $change) {
-          $storage_definition = isset($storage_definitions[$field_name]) ? $storage_definitions[$field_name] : NULL;
-          $original_storage_definition = isset($original_storage_definitions[$field_name]) ? $original_storage_definitions[$field_name] : NULL;
+          $storage_definition = $storage_definitions[$field_name] ?? NULL;
+          $original_storage_definition = $original_storage_definitions[$field_name] ?? NULL;
           $this->doFieldUpdate($change, $storage_definition, $original_storage_definition);
         }
       }
diff --git a/core/modules/system/tests/src/Functional/Form/FormTest.php b/core/modules/system/tests/src/Functional/Form/FormTest.php
index 75097b3954b4..47416c0dba35 100644
--- a/core/modules/system/tests/src/Functional/Form/FormTest.php
+++ b/core/modules/system/tests/src/Functional/Form/FormTest.php
@@ -651,8 +651,8 @@ public function testNumber() {
         // Create placeholder array.
         $placeholders = [
           '%name' => $form[$element]['#title'],
-          '%min' => isset($form[$element]['#min']) ? $form[$element]['#min'] : '0',
-          '%max' => isset($form[$element]['#max']) ? $form[$element]['#max'] : '0',
+          '%min' => $form[$element]['#min'] ?? '0',
+          '%max' => $form[$element]['#max'] ?? '0',
         ];
 
         foreach ($error_messages as $id => $message) {
@@ -860,7 +860,7 @@ public function testDisabledMarkup() {
       $element = $this->xpath($path, [
         ':name' => Html::escape($name),
         ':div-class' => $class,
-        ':value' => isset($item['#value']) ? $item['#value'] : '',
+        ':value' => $item['#value'] ?? '',
       ]);
       $this->assertTrue(isset($element[0]), new FormattableMarkup('Disabled form element class found for #type %type.', ['%type' => $item['#type']]));
     }
diff --git a/core/modules/system/tests/src/Kernel/Block/SystemMenuBlockTest.php b/core/modules/system/tests/src/Kernel/Block/SystemMenuBlockTest.php
index 720ff0850b5a..30575f2abe62 100644
--- a/core/modules/system/tests/src/Kernel/Block/SystemMenuBlockTest.php
+++ b/core/modules/system/tests/src/Kernel/Block/SystemMenuBlockTest.php
@@ -226,7 +226,7 @@ public function testConfigLevelDepth() {
     $no_active_trail_expectations['level_3_and_beyond'] = [];
     foreach ($blocks as $id => $block) {
       $block_build = $block->build();
-      $items = isset($block_build['#items']) ? $block_build['#items'] : [];
+      $items = $block_build['#items'] ?? [];
       $this->assertSame($no_active_trail_expectations[$id], $this->convertBuiltMenuToIdTree($items), new FormattableMarkup('Menu block %id with no active trail renders the expected tree.', ['%id' => $id]));
     }
 
@@ -278,7 +278,7 @@ public function testConfigLevelDepth() {
     $active_trail_expectations['level_3_and_beyond'] = $active_trail_expectations['level_3_only'];
     foreach ($blocks as $id => $block) {
       $block_build = $block->build();
-      $items = isset($block_build['#items']) ? $block_build['#items'] : [];
+      $items = $block_build['#items'] ?? [];
       $this->assertSame($active_trail_expectations[$id], $this->convertBuiltMenuToIdTree($items), new FormattableMarkup('Menu block %id with an active trail renders the expected tree.', ['%id' => $id]));
     }
   }
@@ -305,7 +305,7 @@ public function testConfigExpanded($active_route, $menu_block_level, $expected_i
     $this->container->get('request_stack')->push($request);
 
     $block_build = $block->build();
-    $items = isset($block_build['#items']) ? $block_build['#items'] : [];
+    $items = $block_build['#items'] ?? [];
     $this->assertEquals($expected_items, $this->convertBuiltMenuToIdTree($items));
   }
 
diff --git a/core/modules/taxonomy/src/Form/OverviewTerms.php b/core/modules/taxonomy/src/Form/OverviewTerms.php
index a7a38cbbcfdc..0b918bf7314e 100644
--- a/core/modules/taxonomy/src/Form/OverviewTerms.php
+++ b/core/modules/taxonomy/src/Form/OverviewTerms.php
@@ -192,7 +192,7 @@ public function buildForm(array $form, FormStateInterface $form_state, Vocabular
           }
         }
       }
-      $back_step = isset($back_step) ? $back_step : 0;
+      $back_step = $back_step ?? 0;
 
       // Continue rendering the tree until we reach the a new root item.
       if ($page_entries >= $page_increment + $back_step + 1 && $term->depth == 0 && $root_entries > 1) {
diff --git a/core/modules/taxonomy/src/Plugin/views/argument/IndexTidDepthModifier.php b/core/modules/taxonomy/src/Plugin/views/argument/IndexTidDepthModifier.php
index b1822dedda45..65af6623be71 100644
--- a/core/modules/taxonomy/src/Plugin/views/argument/IndexTidDepthModifier.php
+++ b/core/modules/taxonomy/src/Plugin/views/argument/IndexTidDepthModifier.php
@@ -23,7 +23,7 @@ public function query($group_by = FALSE) {}
 
   public function preQuery() {
     // We don't know our argument yet, but it's based upon our position:
-    $argument = isset($this->view->args[$this->position]) ? $this->view->args[$this->position] : NULL;
+    $argument = $this->view->args[$this->position] ?? NULL;
     if (!is_numeric($argument)) {
       return;
     }
diff --git a/core/modules/taxonomy/src/Plugin/views/field/TaxonomyIndexTid.php b/core/modules/taxonomy/src/Plugin/views/field/TaxonomyIndexTid.php
index 93d0ab397881..805f56b8c28f 100644
--- a/core/modules/taxonomy/src/Plugin/views/field/TaxonomyIndexTid.php
+++ b/core/modules/taxonomy/src/Plugin/views/field/TaxonomyIndexTid.php
@@ -170,7 +170,7 @@ protected function documentSelfTokens(&$tokens) {
 
   protected function addSelfTokens(&$tokens, $item) {
     foreach (['tid', 'name', 'vocabulary_vid', 'vocabulary'] as $token) {
-      $tokens['{{ ' . $this->options['id'] . '__' . $token . ' }}'] = isset($item[$token]) ? $item[$token] : '';
+      $tokens['{{ ' . $this->options['id'] . '__' . $token . ' }}'] = $item[$token] ?? '';
     }
   }
 
diff --git a/core/modules/telephone/src/Plugin/Field/FieldWidget/TelephoneDefaultWidget.php b/core/modules/telephone/src/Plugin/Field/FieldWidget/TelephoneDefaultWidget.php
index 1ea1837dea1d..99db3c13fe94 100644
--- a/core/modules/telephone/src/Plugin/Field/FieldWidget/TelephoneDefaultWidget.php
+++ b/core/modules/telephone/src/Plugin/Field/FieldWidget/TelephoneDefaultWidget.php
@@ -64,7 +64,7 @@ public function settingsSummary() {
   public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
     $element['value'] = $element + [
       '#type' => 'tel',
-      '#default_value' => isset($items[$delta]->value) ? $items[$delta]->value : NULL,
+      '#default_value' => $items[$delta]->value ?? NULL,
       '#placeholder' => $this->getSetting('placeholder'),
     ];
     return $element;
diff --git a/core/modules/text/src/Plugin/Field/FieldWidget/TextfieldWidget.php b/core/modules/text/src/Plugin/Field/FieldWidget/TextfieldWidget.php
index 8f4c73ba695c..e6954cc1df05 100644
--- a/core/modules/text/src/Plugin/Field/FieldWidget/TextfieldWidget.php
+++ b/core/modules/text/src/Plugin/Field/FieldWidget/TextfieldWidget.php
@@ -28,7 +28,7 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen
 
     $element = $main_widget['value'];
     $element['#type'] = 'text_format';
-    $element['#format'] = isset($items[$delta]->format) ? $items[$delta]->format : NULL;
+    $element['#format'] = $items[$delta]->format ?? NULL;
     $element['#base_type'] = $main_widget['value']['#type'];
     return $element;
   }
diff --git a/core/modules/text/src/Plugin/migrate/field/d6/TextField.php b/core/modules/text/src/Plugin/migrate/field/d6/TextField.php
index e279332a5717..59c5ab57ed24 100644
--- a/core/modules/text/src/Plugin/migrate/field/d6/TextField.php
+++ b/core/modules/text/src/Plugin/migrate/field/d6/TextField.php
@@ -47,7 +47,7 @@ public function getFieldFormatterMap() {
    * {@inheritdoc}
    */
   public function defineValueProcessPipeline(MigrationInterface $migration, $field_name, $field_info) {
-    $widget_type = isset($field_info['widget_type']) ? $field_info['widget_type'] : $field_info['widget']['type'];
+    $widget_type = $field_info['widget_type'] ?? $field_info['widget']['type'];
 
     if ($widget_type == 'optionwidgets_onoff') {
       $process = [
diff --git a/core/modules/tour/src/Entity/Tour.php b/core/modules/tour/src/Entity/Tour.php
index 032817a91293..8e168fe0a816 100644
--- a/core/modules/tour/src/Entity/Tour.php
+++ b/core/modules/tour/src/Entity/Tour.php
@@ -144,7 +144,7 @@ public function hasMatchingRoute($route_name, $route_params) {
     if (!isset($this->keyedRoutes)) {
       $this->keyedRoutes = [];
       foreach ($this->getRoutes() as $route) {
-        $this->keyedRoutes[$route['route_name']] = isset($route['route_params']) ? $route['route_params'] : [];
+        $this->keyedRoutes[$route['route_name']] = $route['route_params'] ?? [];
       }
     }
     if (!isset($this->keyedRoutes[$route_name])) {
diff --git a/core/modules/tour/src/Plugin/HelpSection/TourHelpSection.php b/core/modules/tour/src/Plugin/HelpSection/TourHelpSection.php
index ab9fc8e39f6b..4716af427131 100644
--- a/core/modules/tour/src/Plugin/HelpSection/TourHelpSection.php
+++ b/core/modules/tour/src/Plugin/HelpSection/TourHelpSection.php
@@ -99,7 +99,7 @@ public function listTopics() {
         // out with a missing parameter exception if the route leads to a set
         // of pages instead of a single page.
         try {
-          $params = isset($route['route_params']) ? $route['route_params'] : [];
+          $params = $route['route_params'] ?? [];
           $url = Url::fromRoute($route['route_name'], $params);
           // Skip this route if the current user cannot access it.
           if (!$url->access()) {
diff --git a/core/modules/user/src/Controller/UserController.php b/core/modules/user/src/Controller/UserController.php
index ac3540cb1a43..d6c298d3008b 100644
--- a/core/modules/user/src/Controller/UserController.php
+++ b/core/modules/user/src/Controller/UserController.php
@@ -345,7 +345,7 @@ public function confirmCancel(UserInterface $user, $timestamp = 0, $hashed_pass
       // Validate expiration and hashed password/login.
       if ($timestamp <= $current && $current - $timestamp < $timeout && $user->id() && $timestamp >= $user->getLastLoginTime() && hash_equals($hashed_pass, user_pass_rehash($user, $timestamp))) {
         $edit = [
-          'user_cancel_notify' => isset($account_data['cancel_notify']) ? $account_data['cancel_notify'] : $this->config('user.settings')->get('notify.status_canceled'),
+          'user_cancel_notify' => $account_data['cancel_notify'] ?? $this->config('user.settings')->get('notify.status_canceled'),
         ];
         user_cancel($edit, $user->id(), $account_data['cancel_method']);
         // Since user_cancel() is not invoked via Form API, batch processing
diff --git a/core/modules/user/src/Plugin/migrate/process/UserUpdate8002.php b/core/modules/user/src/Plugin/migrate/process/UserUpdate8002.php
index 7a67c466e3fe..9ba582d46b4b 100644
--- a/core/modules/user/src/Plugin/migrate/process/UserUpdate8002.php
+++ b/core/modules/user/src/Plugin/migrate/process/UserUpdate8002.php
@@ -26,7 +26,7 @@ public function transform($value, MigrateExecutableInterface $migrate_executable
       1 => 'anonymous',
       2 => 'authenticated',
     ];
-    return isset($map[$rid]) ? $map[$rid] : $value;
+    return $map[$rid] ?? $value;
   }
 
 }
diff --git a/core/modules/user/src/Plugin/migrate/source/d6/UserPictureFile.php b/core/modules/user/src/Plugin/migrate/source/d6/UserPictureFile.php
index 02ba6163f6bc..26f8d64e5e54 100644
--- a/core/modules/user/src/Plugin/migrate/source/d6/UserPictureFile.php
+++ b/core/modules/user/src/Plugin/migrate/source/d6/UserPictureFile.php
@@ -52,7 +52,7 @@ public function query() {
    * {@inheritdoc}
    */
   public function initializeIterator() {
-    $site_path = isset($this->configuration['site_path']) ? $this->configuration['site_path'] : 'sites/default';
+    $site_path = $this->configuration['site_path'] ?? 'sites/default';
     $this->filePath = $this->variableGet('file_directory_path', $site_path . '/files') . '/';
     $this->tempFilePath = $this->variableGet('file_directory_temp', '/tmp') . '/';
     return parent::initializeIterator();
diff --git a/core/modules/user/user.module b/core/modules/user/user.module
index 08143dca37be..833cdc5be64a 100644
--- a/core/modules/user/user.module
+++ b/core/modules/user/user.module
@@ -522,7 +522,7 @@ function user_user_logout(AccountInterface $account) {
  */
 function user_pass_reset_url($account, $options = []) {
   $timestamp = REQUEST_TIME;
-  $langcode = isset($options['langcode']) ? $options['langcode'] : $account->getPreferredLangcode();
+  $langcode = $options['langcode'] ?? $account->getPreferredLangcode();
   return Url::fromRoute('user.reset',
     [
       'uid' => $account->id(),
@@ -555,7 +555,7 @@ function user_pass_reset_url($account, $options = []) {
  */
 function user_cancel_url(UserInterface $account, $options = []) {
   $timestamp = REQUEST_TIME;
-  $langcode = isset($options['langcode']) ? $options['langcode'] : $account->getPreferredLangcode();
+  $langcode = $options['langcode'] ?? $account->getPreferredLangcode();
   $url_options = ['absolute' => TRUE, 'language' => \Drupal::languageManager()->getLanguage($langcode)];
   return Url::fromRoute('user.cancel_confirm', [
     'user' => $account->id(),
diff --git a/core/modules/views/src/Entity/Render/TranslationLanguageRenderer.php b/core/modules/views/src/Entity/Render/TranslationLanguageRenderer.php
index f769f7339520..89f465988be1 100644
--- a/core/modules/views/src/Entity/Render/TranslationLanguageRenderer.php
+++ b/core/modules/views/src/Entity/Render/TranslationLanguageRenderer.php
@@ -60,8 +60,7 @@ protected function getLangcodeTable(QueryPluginBase $query, $relationship) {
     // use the revision table or the revision data table, depending on which one
     // is being used as query base table.
     if ($this->entityType->isRevisionable()) {
-      $query_base_table = isset($query->relationships[$relationship]['base']) ?
-        $query->relationships[$relationship]['base'] :
+      $query_base_table = $query->relationships[$relationship]['base'] ??
         $this->view->storage->get('base_table');
       $revision_table = $storage->getRevisionTable();
       $revision_data_table = $storage->getRevisionDataTable();
@@ -104,7 +103,7 @@ public function render(ResultRow $row) {
    * {@inheritdoc}
    */
   public function getLangcode(ResultRow $row) {
-    return isset($row->{$this->langcodeAlias}) ? $row->{$this->langcodeAlias} : $this->languageManager->getDefaultLanguage()->getId();
+    return $row->{$this->langcodeAlias} ?? $this->languageManager->getDefaultLanguage()->getId();
   }
 
   /**
diff --git a/core/modules/views/src/Plugin/views/PluginBase.php b/core/modules/views/src/Plugin/views/PluginBase.php
index 1a194699516c..0069beee7e19 100644
--- a/core/modules/views/src/Plugin/views/PluginBase.php
+++ b/core/modules/views/src/Plugin/views/PluginBase.php
@@ -245,7 +245,7 @@ public function unpackOptions(&$storage, $options, $definition = NULL, $all = TR
           continue;
         }
 
-        $this->unpackOptions($storage[$key], $value, isset($definition[$key]['contains']) ? $definition[$key]['contains'] : [], $all, FALSE);
+        $this->unpackOptions($storage[$key], $value, $definition[$key]['contains'] ?? [], $all, FALSE);
       }
       elseif ($all || !empty($definition[$key])) {
         $storage[$key] = $value;
diff --git a/core/modules/views/src/Plugin/views/area/AreaPluginBase.php b/core/modules/views/src/Plugin/views/area/AreaPluginBase.php
index 476a808cd133..a1a9ccf87a31 100644
--- a/core/modules/views/src/Plugin/views/area/AreaPluginBase.php
+++ b/core/modules/views/src/Plugin/views/area/AreaPluginBase.php
@@ -84,7 +84,7 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) {
       $form['empty'] = [
         '#type' => 'checkbox',
         '#title' => $this->t('Display even if view has no result'),
-        '#default_value' => isset($this->options['empty']) ? $this->options['empty'] : 0,
+        '#default_value' => $this->options['empty'] ?? 0,
       ];
     }
   }
diff --git a/core/modules/views/src/Plugin/views/area/Result.php b/core/modules/views/src/Plugin/views/area/Result.php
index 6fc6805dbc93..efe78d077068 100644
--- a/core/modules/views/src/Plugin/views/area/Result.php
+++ b/core/modules/views/src/Plugin/views/area/Result.php
@@ -80,7 +80,7 @@ public function render($empty = FALSE) {
     $per_page = (int) $this->view->getItemsPerPage();
     // @TODO: Maybe use a possible is views empty functionality.
     // Not every view has total_rows set, use view->result instead.
-    $total = isset($this->view->total_rows) ? $this->view->total_rows : count($this->view->result);
+    $total = $this->view->total_rows ?? count($this->view->result);
     $label = Html::escape($this->view->storage->label());
     // If there is no result the "start" and "current_record_count" should be
     // equal to 0. To have the same calculation logic, we use a "start offset"
diff --git a/core/modules/views/src/Plugin/views/area/Text.php b/core/modules/views/src/Plugin/views/area/Text.php
index aafcbf2095d6..c62d4646effb 100644
--- a/core/modules/views/src/Plugin/views/area/Text.php
+++ b/core/modules/views/src/Plugin/views/area/Text.php
@@ -38,7 +38,7 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) {
       '#type' => 'text_format',
       '#default_value' => $this->options['content']['value'],
       '#rows' => 6,
-      '#format' => isset($this->options['content']['format']) ? $this->options['content']['format'] : filter_default_format(),
+      '#format' => $this->options['content']['format'] ?? filter_default_format(),
       '#editor' => FALSE,
     ];
   }
@@ -58,7 +58,7 @@ public function preQuery() {
    * {@inheritdoc}
    */
   public function render($empty = FALSE) {
-    $format = isset($this->options['content']['format']) ? $this->options['content']['format'] : filter_default_format();
+    $format = $this->options['content']['format'] ?? filter_default_format();
     if (!$empty || !empty($this->options['empty'])) {
       return [
         '#type' => 'processed_text',
diff --git a/core/modules/views/src/Plugin/views/argument/ArgumentPluginBase.php b/core/modules/views/src/Plugin/views/argument/ArgumentPluginBase.php
index 628b6f7a58e1..3da81eb1a2ee 100644
--- a/core/modules/views/src/Plugin/views/argument/ArgumentPluginBase.php
+++ b/core/modules/views/src/Plugin/views/argument/ArgumentPluginBase.php
@@ -89,7 +89,7 @@ public function init(ViewExecutable $view, DisplayPluginBase $display, array &$o
 
   public function isException($arg = NULL) {
     if (!isset($arg)) {
-      $arg = isset($this->argument) ? $this->argument : NULL;
+      $arg = $this->argument ?? NULL;
     }
     return !empty($this->options['exception']['value']) && $this->options['exception']['value'] === $arg;
   }
@@ -1066,7 +1066,7 @@ public function getValue() {
       $position++;
     }
 
-    $arg = isset($this->view->args[$position]) ? $this->view->args[$position] : NULL;
+    $arg = $this->view->args[$position] ?? NULL;
     $this->position = $position;
 
     // Clone ourselves so that we don't break things when we're really
@@ -1123,7 +1123,7 @@ public function getPlugin($type = 'argument_default', $name = NULL) {
     // we only fetch the options if we're fetching the plugin actually
     // in use.
     if ($name == $plugin_name) {
-      $options = isset($this->options[$options_name]) ? $this->options[$options_name] : [];
+      $options = $this->options[$options_name] ?? [];
     }
 
     $plugin = Views::pluginManager($type)->createInstance($name);
@@ -1171,11 +1171,11 @@ public static function processContainerRadios($element) {
           // The key is sanitized in drupal_attributes() during output from the
           // theme function.
           '#return_value' => $key,
-          '#default_value' => isset($element['#default_value']) ? $element['#default_value'] : NULL,
+          '#default_value' => $element['#default_value'] ?? NULL,
           '#attributes' => $element['#attributes'],
           '#parents' => $element['#parents'],
           '#id' => Html::getUniqueId('edit-' . implode('-', $parents_for_id)),
-          '#ajax' => isset($element['#ajax']) ? $element['#ajax'] : NULL,
+          '#ajax' => $element['#ajax'] ?? NULL,
         ];
         $element[$key . '_options'] = [
           '#type' => 'container',
diff --git a/core/modules/views/src/Plugin/views/argument/LanguageArgument.php b/core/modules/views/src/Plugin/views/argument/LanguageArgument.php
index 2eb1870ed140..24dfcd967bec 100644
--- a/core/modules/views/src/Plugin/views/argument/LanguageArgument.php
+++ b/core/modules/views/src/Plugin/views/argument/LanguageArgument.php
@@ -42,7 +42,7 @@ public function title() {
    */
   public function language($langcode) {
     $languages = $this->listLanguages();
-    return isset($languages[$langcode]) ? $languages[$langcode] : $this->t('Unknown language');
+    return $languages[$langcode] ?? $this->t('Unknown language');
   }
 
 }
diff --git a/core/modules/views/src/Plugin/views/cache/CachePluginBase.php b/core/modules/views/src/Plugin/views/cache/CachePluginBase.php
index 66df4a6e465a..8cbb2fd3439f 100644
--- a/core/modules/views/src/Plugin/views/cache/CachePluginBase.php
+++ b/core/modules/views/src/Plugin/views/cache/CachePluginBase.php
@@ -110,7 +110,7 @@ public function cacheSet($type) {
       case 'results':
         $data = [
           'result' => $this->prepareViewResult($this->view->result),
-          'total_rows' => isset($this->view->total_rows) ? $this->view->total_rows : 0,
+          'total_rows' => $this->view->total_rows ?? 0,
           'current_page' => $this->view->getCurrentPage(),
         ];
         $expire = ($this->cacheSetMaxAge($type) === Cache::PERMANENT) ? Cache::PERMANENT : (int) $this->view->getRequest()->server->get('REQUEST_TIME') + $this->cacheSetMaxAge($type);
diff --git a/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php b/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php
index 0d89fb724be7..4a9f2fbbdd85 100644
--- a/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php
+++ b/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php
@@ -806,7 +806,7 @@ public function getPlugin($type) {
     // Query plugins allow specifying a specific query class per base table.
     if ($type == 'query') {
       $views_data = Views::viewsData()->get($this->view->storage->get('base_table'));
-      $name = isset($views_data['table']['base']['query_id']) ? $views_data['table']['base']['query_id'] : 'views_query';
+      $name = $views_data['table']['base']['query_id'] ?? 'views_query';
     }
     else {
       $name = $options['type'];
@@ -2205,9 +2205,9 @@ protected function applyDisplayCacheabilityMetadata(array &$element) {
     $cache = $this->getPlugin('cache');
 
     (new CacheableMetadata())
-      ->setCacheTags(Cache::mergeTags($this->view->getCacheTags(), isset($this->display['cache_metadata']['tags']) ? $this->display['cache_metadata']['tags'] : []))
-      ->setCacheContexts(isset($this->display['cache_metadata']['contexts']) ? $this->display['cache_metadata']['contexts'] : [])
-      ->setCacheMaxAge(Cache::mergeMaxAges($cache->getCacheMaxAge(), isset($this->display['cache_metadata']['max-age']) ? $this->display['cache_metadata']['max-age'] : Cache::PERMANENT))
+      ->setCacheTags(Cache::mergeTags($this->view->getCacheTags(), $this->display['cache_metadata']['tags'] ?? []))
+      ->setCacheContexts($this->display['cache_metadata']['contexts'] ?? [])
+      ->setCacheMaxAge(Cache::mergeMaxAges($cache->getCacheMaxAge(), $this->display['cache_metadata']['max-age'] ?? Cache::PERMANENT))
       ->merge(CacheableMetadata::createFromRenderArray($element))
       ->applyTo($element);
   }
@@ -2232,7 +2232,7 @@ public function elementPreRender(array $element) {
     $element['#feed_icons'] = !empty($view->feedIcons) ? $view->feedIcons : [];
 
     if ($view->display_handler->renderPager()) {
-      $exposed_input = isset($view->exposed_raw_input) ? $view->exposed_raw_input : NULL;
+      $exposed_input = $view->exposed_raw_input ?? NULL;
       $element['#pager'] = $view->renderPager($exposed_input);
     }
 
diff --git a/core/modules/views/src/Plugin/views/display/Page.php b/core/modules/views/src/Plugin/views/display/Page.php
index c0c874d9b9cc..e2104da8a751 100644
--- a/core/modules/views/src/Plugin/views/display/Page.php
+++ b/core/modules/views/src/Plugin/views/display/Page.php
@@ -348,7 +348,7 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) {
         $form['menu']['weight'] = [
           '#title' => $this->t('Weight'),
           '#type' => 'textfield',
-          '#default_value' => isset($menu['weight']) ? $menu['weight'] : 0,
+          '#default_value' => $menu['weight'] ?? 0,
           '#description' => $this->t('In the menu, the heavier links will sink and the lighter links will be positioned nearer the top.'),
           '#states' => [
             'visible' => [
diff --git a/core/modules/views/src/Plugin/views/display/PathPluginBase.php b/core/modules/views/src/Plugin/views/display/PathPluginBase.php
index b733524033cb..ca3e6b7dfd67 100644
--- a/core/modules/views/src/Plugin/views/display/PathPluginBase.php
+++ b/core/modules/views/src/Plugin/views/display/PathPluginBase.php
@@ -554,7 +554,7 @@ public function getRouteName() {
     // Check for overridden route names.
     $view_route_names = $this->getAlteredRouteNames();
 
-    return (isset($view_route_names[$view_route_key]) ? $view_route_names[$view_route_key] : "view.$view_route_key");
+    return $view_route_names[$view_route_key] ?? "view.$view_route_key";
   }
 
   /**
diff --git a/core/modules/views/src/Plugin/views/exposed_form/ExposedFormPluginBase.php b/core/modules/views/src/Plugin/views/exposed_form/ExposedFormPluginBase.php
index ff6a2dce2e6e..ff5261cadb79 100644
--- a/core/modules/views/src/Plugin/views/exposed_form/ExposedFormPluginBase.php
+++ b/core/modules/views/src/Plugin/views/exposed_form/ExposedFormPluginBase.php
@@ -152,8 +152,8 @@ public function renderExposedForm($block = FALSE) {
    */
   public function query() {
     $view = $this->view;
-    $exposed_data = isset($view->exposed_data) ? $view->exposed_data : [];
-    $sort_by = isset($exposed_data['sort_by']) ? $exposed_data['sort_by'] : NULL;
+    $exposed_data = $view->exposed_data ?? [];
+    $sort_by = $exposed_data['sort_by'] ?? NULL;
     if (!empty($sort_by)) {
       // Make sure the original order of sorts is preserved
       // (e.g. a sticky sort is often first)
diff --git a/core/modules/views/src/Plugin/views/exposed_form/InputRequired.php b/core/modules/views/src/Plugin/views/exposed_form/InputRequired.php
index 38a5283606c9..821fffaaedfd 100644
--- a/core/modules/views/src/Plugin/views/exposed_form/InputRequired.php
+++ b/core/modules/views/src/Plugin/views/exposed_form/InputRequired.php
@@ -34,7 +34,7 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) {
       '#title' => $this->t('Text on demand'),
       '#description' => $this->t('Text to display instead of results until the user selects and applies an exposed filter.'),
       '#default_value' => $this->options['text_input_required'],
-      '#format' => isset($this->options['text_input_required_format']) ? $this->options['text_input_required_format'] : filter_default_format(),
+      '#format' => $this->options['text_input_required_format'] ?? filter_default_format(),
       '#editor' => FALSE,
     ];
   }
diff --git a/core/modules/views/src/Plugin/views/field/Boolean.php b/core/modules/views/src/Plugin/views/field/Boolean.php
index 75f097e1348b..ec542fc52d3d 100644
--- a/core/modules/views/src/Plugin/views/field/Boolean.php
+++ b/core/modules/views/src/Plugin/views/field/Boolean.php
@@ -56,7 +56,7 @@ public function init(ViewExecutable $view, DisplayPluginBase $display, array &$o
       'boolean' => [1, 0],
       'unicode-yes-no' => ['✔', '✖'],
     ];
-    $output_formats = isset($this->definition['output formats']) ? $this->definition['output formats'] : [];
+    $output_formats = $this->definition['output formats'] ?? [];
     $custom_format = ['custom' => [t('Custom')]];
     $this->formats = array_merge($default_formats, $output_formats, $custom_format);
   }
diff --git a/core/modules/views/src/Plugin/views/field/Date.php b/core/modules/views/src/Plugin/views/field/Date.php
index 9d72ddae892a..e33994b2ebde 100644
--- a/core/modules/views/src/Plugin/views/field/Date.php
+++ b/core/modules/views/src/Plugin/views/field/Date.php
@@ -101,13 +101,13 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) {
         'inverse time span' => $this->t('Time span (past dates have "-" prepended)'),
         'time span' => $this->t('Time span (with "ago/hence" appended)'),
       ],
-      '#default_value' => isset($this->options['date_format']) ? $this->options['date_format'] : 'small',
+      '#default_value' => $this->options['date_format'] ?? 'small',
     ];
     $form['custom_date_format'] = [
       '#type' => 'textfield',
       '#title' => $this->t('Custom date format'),
       '#description' => $this->t('If "Custom", see <a href="https://www.php.net/manual/datetime.format.php#refsect1-datetime.format-parameters" target="_blank">the PHP docs</a> for date formats. Otherwise, enter the number of different time units to display, which defaults to 2.'),
-      '#default_value' => isset($this->options['custom_date_format']) ? $this->options['custom_date_format'] : '',
+      '#default_value' => $this->options['custom_date_format'] ?? '',
     ];
     // Setup #states for all possible date_formats on the custom_date_format form element.
     foreach (['custom', 'raw time ago', 'time ago', 'raw time hence', 'time hence', 'raw time span', 'time span', 'raw time span', 'inverse time span', 'time span'] as $custom_date_possible) {
diff --git a/core/modules/views/src/Plugin/views/field/EntityField.php b/core/modules/views/src/Plugin/views/field/EntityField.php
index d3525f4e1042..61db27cd1033 100644
--- a/core/modules/views/src/Plugin/views/field/EntityField.php
+++ b/core/modules/views/src/Plugin/views/field/EntityField.php
@@ -394,7 +394,7 @@ protected function defineOptions() {
     }
 
     $options['settings'] = [
-      'default' => isset($this->definition['default_formatter_settings']) ? $this->definition['default_formatter_settings'] : [],
+      'default' => $this->definition['default_formatter_settings'] ?? [],
     ];
     $options['group_column'] = [
       'default' => $default_column,
@@ -455,7 +455,7 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) {
     if (count($field->getColumns()) == 1) {
       $form['click_sort_column'] = [
         '#type' => 'value',
-        '#value' => isset($column_names[0]) ? $column_names[0] : '',
+        '#value' => $column_names[0] ?? '',
       ];
     }
     else {
@@ -1078,7 +1078,7 @@ public function getValue(ResultRow $values, $field = NULL) {
     // Some bundles might not have a specific field, in which case the entity
     // (potentially a fake one) doesn't have it either.
     /** @var \Drupal\Core\Field\FieldItemListInterface $field_item_list */
-    $field_item_list = isset($translated_entity->{$this->definition['field_name']}) ? $translated_entity->{$this->definition['field_name']} : NULL;
+    $field_item_list = $translated_entity->{$this->definition['field_name']} ?? NULL;
 
     if (!isset($field_item_list)) {
       // There isn't anything we can do without a valid field.
diff --git a/core/modules/views/src/Plugin/views/field/FieldPluginBase.php b/core/modules/views/src/Plugin/views/field/FieldPluginBase.php
index 8207fce70cb2..0fe56cbc65e8 100644
--- a/core/modules/views/src/Plugin/views/field/FieldPluginBase.php
+++ b/core/modules/views/src/Plugin/views/field/FieldPluginBase.php
@@ -228,7 +228,7 @@ public function clickSort($order) {
    * {@inheritdoc}
    */
   public function clickSortable() {
-    return isset($this->definition['click sortable']) ? $this->definition['click sortable'] : TRUE;
+    return $this->definition['click sortable'] ?? TRUE;
   }
 
   /**
diff --git a/core/modules/views/src/Plugin/views/field/NumericField.php b/core/modules/views/src/Plugin/views/field/NumericField.php
index 83d6dee7f653..8ee361729c12 100644
--- a/core/modules/views/src/Plugin/views/field/NumericField.php
+++ b/core/modules/views/src/Plugin/views/field/NumericField.php
@@ -101,7 +101,7 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) {
         '#type' => 'textfield',
         // @todo Should use better labels https://www.drupal.org/node/2499639
         '#title' => ($i == 0 ? $this->t('Singular form') : $this->formatPlural($i, 'First plural form', '@count. plural form')),
-        '#default_value' => isset($plural_array[$i]) ? $plural_array[$i] : '',
+        '#default_value' => $plural_array[$i] ?? '',
         '#description' => $this->t('Text to use for this variant, @count will be replaced with the value.'),
         '#states' => [
           'visible' => [
diff --git a/core/modules/views/src/Plugin/views/field/TimeInterval.php b/core/modules/views/src/Plugin/views/field/TimeInterval.php
index 77924234d1ce..3c288fe61e4d 100644
--- a/core/modules/views/src/Plugin/views/field/TimeInterval.php
+++ b/core/modules/views/src/Plugin/views/field/TimeInterval.php
@@ -82,7 +82,7 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) {
    */
   public function render(ResultRow $values) {
     $value = $values->{$this->field_alias};
-    return $this->dateFormatter->formatInterval((int) $value, isset($this->options['granularity']) ? $this->options['granularity'] : 2);
+    return $this->dateFormatter->formatInterval((int) $value, $this->options['granularity'] ?? 2);
   }
 
 }
diff --git a/core/modules/views/src/Plugin/views/filter/FilterPluginBase.php b/core/modules/views/src/Plugin/views/filter/FilterPluginBase.php
index 4d4cdb8be06f..4207ef9ea68a 100644
--- a/core/modules/views/src/Plugin/views/filter/FilterPluginBase.php
+++ b/core/modules/views/src/Plugin/views/filter/FilterPluginBase.php
@@ -332,8 +332,8 @@ public function operatorSubmit($form, FormStateInterface $form_state) {}
   protected function showValueForm(&$form, FormStateInterface $form_state) {
     $this->valueForm($form, $form_state);
     if (empty($this->no_operator)) {
-      $form['value']['#prefix'] = '<div class="views-group-box views-right-70">' . (isset($form['value']['#prefix']) ? $form['value']['#prefix'] : '');
-      $form['value']['#suffix'] = (isset($form['value']['#suffix']) ? $form['value']['#suffix'] : '') . '</div>';
+      $form['value']['#prefix'] = '<div class="views-group-box views-right-70">' . ($form['value']['#prefix'] ?? '');
+      $form['value']['#suffix'] = ($form['value']['#suffix'] ?? '') . '</div>';
     }
   }
 
diff --git a/core/modules/views/src/Plugin/views/filter/StringFilter.php b/core/modules/views/src/Plugin/views/filter/StringFilter.php
index 403401c2147e..5d027309a4a6 100644
--- a/core/modules/views/src/Plugin/views/filter/StringFilter.php
+++ b/core/modules/views/src/Plugin/views/filter/StringFilter.php
@@ -325,7 +325,7 @@ public function operator() {
    */
   protected function getConditionOperator($operator) {
     $mapping = $this->connection->mapConditionOperator($operator);
-    return isset($mapping['operator']) ? $mapping['operator'] : $operator;
+    return $mapping['operator'] ?? $operator;
   }
 
   /**
diff --git a/core/modules/views/src/Plugin/views/pager/PagerPluginBase.php b/core/modules/views/src/Plugin/views/pager/PagerPluginBase.php
index f9168089747f..5227a6ac4306 100644
--- a/core/modules/views/src/Plugin/views/pager/PagerPluginBase.php
+++ b/core/modules/views/src/Plugin/views/pager/PagerPluginBase.php
@@ -43,7 +43,7 @@ abstract class PagerPluginBase extends PluginBase {
    * most pagers will not need to override this method.
    */
   public function getItemsPerPage() {
-    return isset($this->options['items_per_page']) ? $this->options['items_per_page'] : 0;
+    return $this->options['items_per_page'] ?? 0;
   }
 
   /**
@@ -62,7 +62,7 @@ public function setItemsPerPage($items) {
    * so few pagers will need to override this method.
    */
   public function getOffset() {
-    return isset($this->options['offset']) ? $this->options['offset'] : 0;
+    return $this->options['offset'] ?? 0;
   }
 
   /**
@@ -108,7 +108,7 @@ public function getTotalItems() {
    * Get the pager id, if it exists.
    */
   public function getPagerId() {
-    return isset($this->options['id']) ? $this->options['id'] : 0;
+    return $this->options['id'] ?? 0;
   }
 
   /**
diff --git a/core/modules/views/src/Plugin/views/query/Sql.php b/core/modules/views/src/Plugin/views/query/Sql.php
index 53a9ac037c68..1f090ac81bd2 100644
--- a/core/modules/views/src/Plugin/views/query/Sql.php
+++ b/core/modules/views/src/Plugin/views/query/Sql.php
@@ -1074,7 +1074,7 @@ public function addGroupBy($clause) {
    * @see \Drupal\views\Plugin\views\query\Sql::addField
    */
   protected function getFieldAlias($table_alias, $field) {
-    return isset($this->fieldAliases[$table_alias][$field]) ? $this->fieldAliases[$table_alias][$field] : FALSE;
+    return $this->fieldAliases[$table_alias][$field] ?? FALSE;
   }
 
   /**
diff --git a/core/modules/views/src/Plugin/views/row/Fields.php b/core/modules/views/src/Plugin/views/row/Fields.php
index 9041bef185b0..20b4229506e0 100644
--- a/core/modules/views/src/Plugin/views/row/Fields.php
+++ b/core/modules/views/src/Plugin/views/row/Fields.php
@@ -74,7 +74,7 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) {
       '#title' => $this->t('Separator'),
       '#type' => 'textfield',
       '#size' => 10,
-      '#default_value' => isset($this->options['separator']) ? $this->options['separator'] : '',
+      '#default_value' => $this->options['separator'] ?? '',
       '#description' => $this->t('The separator may be placed between inline fields to keep them from squishing up next to each other. You can use HTML in this field.'),
       '#states' => [
         'visible' => [
diff --git a/core/modules/views/src/Plugin/views/row/OpmlFields.php b/core/modules/views/src/Plugin/views/row/OpmlFields.php
index 61359978e58a..c5116f3fbd49 100644
--- a/core/modules/views/src/Plugin/views/row/OpmlFields.php
+++ b/core/modules/views/src/Plugin/views/row/OpmlFields.php
@@ -195,7 +195,7 @@ public function render($row) {
       '#view' => $this->view,
       '#options' => $this->options,
       '#row' => $item,
-      '#field_alias' => isset($this->field_alias) ? $this->field_alias : '',
+      '#field_alias' => $this->field_alias ?? '',
     ];
     return $build;
   }
diff --git a/core/modules/views/src/Plugin/views/row/RowPluginBase.php b/core/modules/views/src/Plugin/views/row/RowPluginBase.php
index 33351185041c..e3d2c5893389 100644
--- a/core/modules/views/src/Plugin/views/row/RowPluginBase.php
+++ b/core/modules/views/src/Plugin/views/row/RowPluginBase.php
@@ -169,7 +169,7 @@ public function render($row) {
       '#view' => $this->view,
       '#options' => $this->options,
       '#row' => $row,
-      '#field_alias' => isset($this->field_alias) ? $this->field_alias : '',
+      '#field_alias' => $this->field_alias ?? '',
     ];
   }
 
diff --git a/core/modules/views/src/Plugin/views/row/RssFields.php b/core/modules/views/src/Plugin/views/row/RssFields.php
index dc80f7e028fe..aaa009c4426e 100644
--- a/core/modules/views/src/Plugin/views/row/RssFields.php
+++ b/core/modules/views/src/Plugin/views/row/RssFields.php
@@ -177,7 +177,7 @@ public function render($row) {
       '#view' => $this->view,
       '#options' => $this->options,
       '#row' => $item,
-      '#field_alias' => isset($this->field_alias) ? $this->field_alias : '',
+      '#field_alias' => $this->field_alias ?? '',
     ];
 
     return $build;
diff --git a/core/modules/views/src/Plugin/views/style/Mapping.php b/core/modules/views/src/Plugin/views/style/Mapping.php
index 7db524788665..09b26fad5138 100644
--- a/core/modules/views/src/Plugin/views/style/Mapping.php
+++ b/core/modules/views/src/Plugin/views/style/Mapping.php
@@ -51,7 +51,7 @@ protected function defineOptions() {
     foreach ($this->defineMapping() as $key => $value) {
       $default = !empty($value['#multiple']) ? [] : '';
       $options['mapping']['contains'][$key] = [
-        'default' => isset($value['#default_value']) ? $value['#default_value'] : $default,
+        'default' => $value['#default_value'] ?? $default,
       ];
       if (!empty($value['#toggle'])) {
         $options['mapping']['contains']["toggle_$key"] = [
diff --git a/core/modules/views/src/Plugin/views/style/StylePluginBase.php b/core/modules/views/src/Plugin/views/style/StylePluginBase.php
index b91ce83f1bb4..faacdf8e51a2 100644
--- a/core/modules/views/src/Plugin/views/style/StylePluginBase.php
+++ b/core/modules/views/src/Plugin/views/style/StylePluginBase.php
@@ -230,7 +230,7 @@ public function getRowClass($row_index) {
   public function tokenizeValue($value, $row_index) {
     if (strpos($value, '{{') !== FALSE) {
       // Row tokens might be empty, for example for node row style.
-      $tokens = isset($this->rowTokens[$row_index]) ? $this->rowTokens[$row_index] : [];
+      $tokens = $this->rowTokens[$row_index] ?? [];
       if (!empty($this->view->build_info['substitutions'])) {
         $tokens += $this->view->build_info['substitutions'];
       }
@@ -498,7 +498,7 @@ public function renderGroupingSets($sets) {
     $output = [];
     $theme_functions = $this->view->buildThemeFunctions($this->groupingTheme);
     foreach ($sets as $set) {
-      $level = isset($set['level']) ? $set['level'] : 0;
+      $level = $set['level'] ?? 0;
 
       $row = reset($set['rows']);
       // Render as a grouping set.
@@ -591,8 +591,8 @@ public function renderGrouping($records, $groupings = [], $group_rendered = NULL
         $set = &$sets;
         foreach ($groupings as $level => $info) {
           $field = $info['field'];
-          $rendered = isset($info['rendered']) ? $info['rendered'] : $group_rendered;
-          $rendered_strip = isset($info['rendered_strip']) ? $info['rendered_strip'] : FALSE;
+          $rendered = $info['rendered'] ?? $group_rendered;
+          $rendered_strip = $info['rendered_strip'] ?? FALSE;
           $grouping = '';
           $group_content = '';
           // Group on the rendered version of the field, not the raw.  That way,
diff --git a/core/modules/views/src/Plugin/views/style/Table.php b/core/modules/views/src/Plugin/views/style/Table.php
index f6e88034e76d..5a508b779902 100644
--- a/core/modules/views/src/Plugin/views/style/Table.php
+++ b/core/modules/views/src/Plugin/views/style/Table.php
@@ -348,7 +348,7 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) {
         '#title_display' => 'invisible',
         '#type' => 'textfield',
         '#size' => 10,
-        '#default_value' => isset($this->options['info'][$field]['separator']) ? $this->options['info'][$field]['separator'] : '',
+        '#default_value' => $this->options['info'][$field]['separator'] ?? '',
         '#states' => [
           'visible' => [
             $column_selector => ['value' => $field],
@@ -359,7 +359,7 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) {
         '#title' => $this->t('Hide empty column for @field', ['@field' => $field]),
         '#title_display' => 'invisible',
         '#type' => 'checkbox',
-        '#default_value' => isset($this->options['info'][$field]['empty_column']) ? $this->options['info'][$field]['empty_column'] : FALSE,
+        '#default_value' => $this->options['info'][$field]['empty_column'] ?? FALSE,
         '#states' => [
           'visible' => [
             $column_selector => ['value' => $field],
@@ -370,7 +370,7 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) {
         '#title' => $this->t('Responsive setting for @field', ['@field' => $field]),
         '#title_display' => 'invisible',
         '#type' => 'select',
-        '#default_value' => isset($this->options['info'][$field]['responsive']) ? $this->options['info'][$field]['responsive'] : '',
+        '#default_value' => $this->options['info'][$field]['responsive'] ?? '',
         '#options' => ['' => $this->t('High'), RESPONSIVE_PRIORITY_MEDIUM => $this->t('Medium'), RESPONSIVE_PRIORITY_LOW => $this->t('Low')],
         '#states' => [
           'visible' => [
diff --git a/core/modules/views/src/Plugin/views/wizard/WizardPluginBase.php b/core/modules/views/src/Plugin/views/wizard/WizardPluginBase.php
index d1188ce411e6..335ac065e005 100644
--- a/core/modules/views/src/Plugin/views/wizard/WizardPluginBase.php
+++ b/core/modules/views/src/Plugin/views/wizard/WizardPluginBase.php
@@ -871,8 +871,8 @@ protected function defaultDisplayOptions() {
       'table' => $default_table,
       'field' => $default_field,
       'id' => $default_field,
-      'entity_type' => isset($data[$default_field]['entity type']) ? $data[$default_field]['entity type'] : NULL,
-      'entity_field' => isset($data[$default_field]['entity field']) ? $data[$default_field]['entity field'] : NULL,
+      'entity_type' => $data[$default_field]['entity type'] ?? NULL,
+      'entity_field' => $data[$default_field]['entity field'] ?? NULL,
       'plugin_id' => $data[$default_field]['field']['id'],
     ];
 
@@ -965,8 +965,8 @@ protected function defaultDisplayFiltersUser(array $form, FormStateInterface $fo
           'table' => $table,
           'field' => $bundle_key,
           'value' => $value,
-          'entity_type' => isset($table_data['table']['entity type']) ? $table_data['table']['entity type'] : NULL,
-          'entity_field' => isset($table_data[$bundle_key]['entity field']) ? $table_data[$bundle_key]['entity field'] : NULL,
+          'entity_type' => $table_data['table']['entity type'] ?? NULL,
+          'entity_field' => $table_data[$bundle_key]['entity field'] ?? NULL,
           'plugin_id' => $handler,
         ];
       }
@@ -1045,8 +1045,8 @@ protected function defaultDisplaySortsUser($form, FormStateInterface $form_state
           'table' => $table,
           'field' => $column,
           'order' => $sort,
-          'entity_type' => isset($data['table']['entity type']) ? $data['table']['entity type'] : NULL,
-          'entity_field' => isset($data[$column]['entity field']) ? $data[$column]['entity field'] : NULL,
+          'entity_type' => $data['table']['entity type'] ?? NULL,
+          'entity_field' => $data[$column]['entity field'] ?? NULL,
           'plugin_id' => $data[$column]['sort']['id'],
        ];
       }
@@ -1254,7 +1254,7 @@ protected function retrieveValidatedView(array $form, FormStateInterface $form_s
     // @todo Figure out why all this hashing is done. Wouldn't it be easier to
     //   store a single entry and that's it?
     $key = hash('sha256', serialize($form_state->getValues()));
-    $view = (isset($this->validated_views[$key]) ? $this->validated_views[$key] : NULL);
+    $view = ($this->validated_views[$key] ?? NULL);
     if ($unset) {
       unset($this->validated_views[$key]);
     }
diff --git a/core/modules/views/src/ViewExecutable.php b/core/modules/views/src/ViewExecutable.php
index 5cd0938bad89..adf8ade188cc 100644
--- a/core/modules/views/src/ViewExecutable.php
+++ b/core/modules/views/src/ViewExecutable.php
@@ -1082,7 +1082,7 @@ protected function _buildArguments() {
 
       $argument->setRelationship();
 
-      $arg = isset($this->args[$position]) ? $this->args[$position] : NULL;
+      $arg = $this->args[$position] ?? NULL;
       $argument->position = $position;
 
       if (isset($arg) || $argument->hasDefaultArgument()) {
@@ -1703,7 +1703,7 @@ public function postExecute() {
       $old_view = array_pop($this->old_view);
     }
 
-    views_set_current_view(isset($old_view) ? $old_view : FALSE);
+    views_set_current_view($old_view ?? FALSE);
   }
 
   /**
@@ -2291,7 +2291,7 @@ public function getHandler($display_id, $type, $id) {
     // Get the existing configuration
     $fields = $this->displayHandlers->get($display_id)->getOption($types[$type]['plural']);
 
-    return isset($fields[$id]) ? $fields[$id] : NULL;
+    return $fields[$id] ?? NULL;
   }
 
   /**
diff --git a/core/modules/views/tests/src/Unit/Controller/ViewAjaxControllerTest.php b/core/modules/views/tests/src/Unit/Controller/ViewAjaxControllerTest.php
index 859243f6873b..8964cecc0c97 100644
--- a/core/modules/views/tests/src/Unit/Controller/ViewAjaxControllerTest.php
+++ b/core/modules/views/tests/src/Unit/Controller/ViewAjaxControllerTest.php
@@ -77,7 +77,7 @@ protected function setUp(): void {
       ->willReturnCallback(function (array &$elements) {
         $elements['#attached'] = [];
 
-        return isset($elements['#markup']) ? $elements['#markup'] : '';
+        return $elements['#markup'] ?? '';
       });
     $this->renderer->expects($this->any())
       ->method('executeInRenderContext')
diff --git a/core/modules/views/tests/src/Unit/Plugin/field/FieldPluginBaseTest.php b/core/modules/views/tests/src/Unit/Plugin/field/FieldPluginBaseTest.php
index 15c4e5b4d98b..8517215b572f 100644
--- a/core/modules/views/tests/src/Unit/Plugin/field/FieldPluginBaseTest.php
+++ b/core/modules/views/tests/src/Unit/Plugin/field/FieldPluginBaseTest.php
@@ -324,7 +324,7 @@ public function testRenderAsLinkWithPathAndOptions($path, $alter, $link_html, $f
       'path' => $path,
     ];
 
-    $final_html = isset($final_html) ? $final_html : $link_html;
+    $final_html = $final_html ?? $link_html;
 
     $this->setUpUrlIntegrationServices();
     $this->setupDisplayWithEmptyArgumentsAndFields();
@@ -398,7 +398,7 @@ public function testRenderAsLinkWithUrlAndOptions(Url $url, $alter, Url $expecte
       'url' => $url,
     ];
 
-    $final_html = isset($final_html) ? $final_html : $link_html;
+    $final_html = $final_html ?? $link_html;
 
     $this->setUpUrlIntegrationServices();
     $this->setupDisplayWithEmptyArgumentsAndFields();
diff --git a/core/modules/views_ui/src/ViewUI.php b/core/modules/views_ui/src/ViewUI.php
index 01c26ac2d6e9..3dbe2b33fe90 100644
--- a/core/modules/views_ui/src/ViewUI.php
+++ b/core/modules/views_ui/src/ViewUI.php
@@ -154,7 +154,7 @@ public function get($property_name, $langcode = NULL) {
       return $this->storage->get($property_name, $langcode);
     }
 
-    return isset($this->{$property_name}) ? $this->{$property_name} : NULL;
+    return $this->{$property_name} ?? NULL;
   }
 
   /**
diff --git a/core/modules/views_ui/views_ui.theme.inc b/core/modules/views_ui/views_ui.theme.inc
index 153d3d3544e2..88ab2d0c2b1e 100644
--- a/core/modules/views_ui/views_ui.theme.inc
+++ b/core/modules/views_ui/views_ui.theme.inc
@@ -85,8 +85,8 @@ function template_preprocess_views_ui_display_tab_bucket(&$variables) {
     $variables['attributes']['title'][] = t('Overridden');
   }
 
-  $variables['name'] = isset($element['#name']) ? $element['#name'] : NULL;
-  $variables['overridden'] = isset($element['#overridden']) ? $element['#overridden'] : NULL;
+  $variables['name'] = $element['#name'] ?? NULL;
+  $variables['overridden'] = $element['#overridden'] ?? NULL;
   $variables['content'] = $element['#children'];
   $variables['title'] = $element['#title'];
   $variables['actions'] = !empty($element['#actions']) ? $element['#actions'] : [];
diff --git a/core/modules/workspaces/tests/src/Kernel/WorkspaceTestTrait.php b/core/modules/workspaces/tests/src/Kernel/WorkspaceTestTrait.php
index 09061d4c91f9..6f6d723cd653 100644
--- a/core/modules/workspaces/tests/src/Kernel/WorkspaceTestTrait.php
+++ b/core/modules/workspaces/tests/src/Kernel/WorkspaceTestTrait.php
@@ -100,7 +100,7 @@ protected function assertWorkspaceAssociation(array $expected, $entity_type_id)
     $workspace_association = \Drupal::service('workspaces.association');
     foreach ($expected as $workspace_id => $expected_tracked_revision_ids) {
       $tracked_entities = $workspace_association->getTrackedEntities($workspace_id, $entity_type_id);
-      $tracked_revision_ids = isset($tracked_entities[$entity_type_id]) ? $tracked_entities[$entity_type_id] : [];
+      $tracked_revision_ids = $tracked_entities[$entity_type_id] ?? [];
       $this->assertEquals($expected_tracked_revision_ids, array_keys($tracked_revision_ids));
     }
   }
diff --git a/core/scripts/run-tests.sh b/core/scripts/run-tests.sh
index 542006552675..edb6cab39de0 100755
--- a/core/scripts/run-tests.sh
+++ b/core/scripts/run-tests.sh
@@ -500,7 +500,7 @@ function simpletest_script_init() {
     $parsed_url = parse_url($args['url']);
     $host = $parsed_url['host'] . (isset($parsed_url['port']) ? ':' . $parsed_url['port'] : '');
     $path = isset($parsed_url['path']) ? rtrim(rtrim($parsed_url['path']), '/') : '';
-    $port = (isset($parsed_url['port']) ? $parsed_url['port'] : $port);
+    $port = $parsed_url['port'] ?? $port;
     if ($path == '/') {
       $path = '';
     }
diff --git a/core/tests/Drupal/KernelTests/AssertContentTrait.php b/core/tests/Drupal/KernelTests/AssertContentTrait.php
index 58eabfc38890..a76d357ea4a3 100644
--- a/core/tests/Drupal/KernelTests/AssertContentTrait.php
+++ b/core/tests/Drupal/KernelTests/AssertContentTrait.php
@@ -143,7 +143,7 @@ protected function parse() {
    *   The current URL.
    */
   protected function getUrl() {
-    return isset($this->url) ? $this->url : 'no-url';
+    return $this->url ?? 'no-url';
   }
 
   /**
diff --git a/core/tests/Drupal/Tests/Component/FileCache/StaticFileCacheBackend.php b/core/tests/Drupal/Tests/Component/FileCache/StaticFileCacheBackend.php
index 328fd5288366..32fa21526114 100644
--- a/core/tests/Drupal/Tests/Component/FileCache/StaticFileCacheBackend.php
+++ b/core/tests/Drupal/Tests/Component/FileCache/StaticFileCacheBackend.php
@@ -30,7 +30,7 @@ class StaticFileCacheBackend implements FileCacheBackendInterface {
    *   (optional) Configuration used to configure this object.
    */
   public function __construct($configuration) {
-    $this->bin = isset($configuration['bin']) ? $configuration['bin'] : 'file_cache';
+    $this->bin = $configuration['bin'] ?? 'file_cache';
   }
 
   /**
diff --git a/core/tests/Drupal/Tests/Component/Gettext/PoHeaderTest.php b/core/tests/Drupal/Tests/Component/Gettext/PoHeaderTest.php
index caae2d827938..84c909e1a3b5 100644
--- a/core/tests/Drupal/Tests/Component/Gettext/PoHeaderTest.php
+++ b/core/tests/Drupal/Tests/Component/Gettext/PoHeaderTest.php
@@ -32,7 +32,7 @@ public function testPluralsFormula($plural, $expected) {
     $parsed = $p->parsePluralForms($plural);
     list($nplurals, $new_plural) = $parsed;
     foreach ($expected as $number => $plural_form) {
-      $result = isset($new_plural[$number]) ? $new_plural[$number] : $new_plural['default'];
+      $result = $new_plural[$number] ?? $new_plural['default'];
       $this->assertEquals($result, $plural_form, 'Difference found at ' . $number . ': ' . $plural_form . ' versus ' . $result);
     }
   }
diff --git a/core/tests/Drupal/Tests/Component/Graph/GraphTest.php b/core/tests/Drupal/Tests/Component/Graph/GraphTest.php
index 9448e6cdc1bf..aacd9b59203a 100644
--- a/core/tests/Drupal/Tests/Component/Graph/GraphTest.php
+++ b/core/tests/Drupal/Tests/Component/Graph/GraphTest.php
@@ -112,7 +112,7 @@ protected function assertPaths($graph, $expected_paths) {
     foreach ($expected_paths as $vertex => $paths) {
       // Build an array with keys = $paths and values = TRUE.
       $expected = array_fill_keys($paths, TRUE);
-      $result = isset($graph[$vertex]['paths']) ? $graph[$vertex]['paths'] : [];
+      $result = $graph[$vertex]['paths'] ?? [];
       $this->assertEquals($expected, $result, sprintf('Expected paths for vertex %s: %s, got %s', $vertex, $this->displayArray($expected, TRUE), $this->displayArray($result, TRUE)));
     }
   }
@@ -130,7 +130,7 @@ protected function assertReversePaths($graph, $expected_reverse_paths) {
     foreach ($expected_reverse_paths as $vertex => $paths) {
       // Build an array with keys = $paths and values = TRUE.
       $expected = array_fill_keys($paths, TRUE);
-      $result = isset($graph[$vertex]['reverse_paths']) ? $graph[$vertex]['reverse_paths'] : [];
+      $result = $graph[$vertex]['reverse_paths'] ?? [];
       $this->assertEquals($expected, $result, sprintf('Expected reverse paths for vertex %s: %s, got %s', $vertex, $this->displayArray($expected, TRUE), $this->displayArray($result, TRUE)));
     }
   }
diff --git a/core/tests/Drupal/Tests/Core/Asset/LibraryDiscoveryParserTest.php b/core/tests/Drupal/Tests/Core/Asset/LibraryDiscoveryParserTest.php
index da914e766615..e355bc053d23 100644
--- a/core/tests/Drupal/Tests/Core/Asset/LibraryDiscoveryParserTest.php
+++ b/core/tests/Drupal/Tests/Core/Asset/LibraryDiscoveryParserTest.php
@@ -851,7 +851,7 @@ class TestLibraryDiscoveryParser extends LibraryDiscoveryParser {
   protected $validUris;
 
   protected function fileValidUri($source) {
-    return isset($this->validUris[$source]) ? $this->validUris[$source] : FALSE;
+    return $this->validUris[$source] ?? FALSE;
   }
 
   public function setFileValidUri($source, $valid) {
diff --git a/core/tests/Drupal/Tests/Core/Entity/Sql/DefaultTableMappingTest.php b/core/tests/Drupal/Tests/Core/Entity/Sql/DefaultTableMappingTest.php
index 5753f1a7d702..cd1be3f9fcae 100644
--- a/core/tests/Drupal/Tests/Core/Entity/Sql/DefaultTableMappingTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/Sql/DefaultTableMappingTest.php
@@ -369,17 +369,17 @@ public function testGetFieldTableName($table_names, $expected) {
     $this->entityType
       ->expects($this->any())
       ->method('getBaseTable')
-      ->willReturn(isset($table_names['base']) ? $table_names['base'] : 'entity_test');
+      ->willReturn($table_names['base'] ?? 'entity_test');
 
     $this->entityType
       ->expects($this->any())
       ->method('getDataTable')
-      ->willReturn(isset($table_names['data']) ? $table_names['data'] : FALSE);
+      ->willReturn($table_names['data'] ?? FALSE);
 
     $this->entityType
       ->expects($this->any())
       ->method('getRevisionTable')
-      ->willReturn(isset($table_names['revision']) ? $table_names['revision'] : FALSE);
+      ->willReturn($table_names['revision'] ?? FALSE);
 
     $this->entityType
       ->expects($this->any())
diff --git a/core/tests/Drupal/Tests/Core/Menu/LocalActionManagerTest.php b/core/tests/Drupal/Tests/Core/Menu/LocalActionManagerTest.php
index 545c0e12105d..4bba2d2326f2 100644
--- a/core/tests/Drupal/Tests/Core/Menu/LocalActionManagerTest.php
+++ b/core/tests/Drupal/Tests/Core/Menu/LocalActionManagerTest.php
@@ -168,7 +168,7 @@ public function testGetActionsForRoute($route_appears, array $plugin_definitions
         ->will($this->returnValue($plugin_definition['route_name']));
       $plugin->expects($this->any())
         ->method('getRouteParameters')
-        ->will($this->returnValue(isset($plugin_definition['route_parameters']) ? $plugin_definition['route_parameters'] : []));
+        ->will($this->returnValue($plugin_definition['route_parameters'] ?? []));
       $plugin->expects($this->any())
         ->method('getTitle')
         ->will($this->returnValue($plugin_definition['title']));
diff --git a/core/tests/Drupal/Tests/Core/Menu/LocalTaskManagerTest.php b/core/tests/Drupal/Tests/Core/Menu/LocalTaskManagerTest.php
index cfba3cb61a72..ae72ea1c8de9 100644
--- a/core/tests/Drupal/Tests/Core/Menu/LocalTaskManagerTest.php
+++ b/core/tests/Drupal/Tests/Core/Menu/LocalTaskManagerTest.php
@@ -452,10 +452,10 @@ protected function setupFactoryAndLocalTaskPlugins(array $definitions, $active_p
       $mock->getRouteParameters(Argument::cetera())->willReturn([]);
       $mock->getOptions(Argument::cetera())->willReturn([]);
       $mock->getActive()->willReturn($plugin_id === $active_plugin_id);
-      $mock->getWeight()->willReturn(isset($info['weight']) ? $info['weight'] : 0);
-      $mock->getCacheContexts()->willReturn(isset($info['cache_contexts']) ? $info['cache_contexts'] : []);
-      $mock->getCacheTags()->willReturn(isset($info['cache_tags']) ? $info['cache_tags'] : []);
-      $mock->getCacheMaxAge()->willReturn(isset($info['cache_max_age']) ? $info['cache_max_age'] : Cache::PERMANENT);
+      $mock->getWeight()->willReturn($info['weight'] ?? 0);
+      $mock->getCacheContexts()->willReturn($info['cache_contexts'] ?? []);
+      $mock->getCacheTags()->willReturn($info['cache_tags'] ?? []);
+      $mock->getCacheMaxAge()->willReturn($info['cache_max_age'] ?? Cache::PERMANENT);
 
       $access_manager_map[] = [$info['route_name'], [], $this->account, TRUE, $info['access']];
 
diff --git a/core/tests/Drupal/Tests/Core/Render/RendererTest.php b/core/tests/Drupal/Tests/Core/Render/RendererTest.php
index 44ccb5b73c21..8938dd44e641 100644
--- a/core/tests/Drupal/Tests/Core/Render/RendererTest.php
+++ b/core/tests/Drupal/Tests/Core/Render/RendererTest.php
@@ -298,7 +298,7 @@ public function providerTestRenderBasic() {
           if ($theme == 'container') {
             return '<div' . (string) (new Attribute($vars['#attributes'])) . '>' . $vars['#children'] . "</div>\n";
           }
-          $attributes = new Attribute(['href' => $vars['#url']] + (isset($vars['#attributes']) ? $vars['#attributes'] : []));
+          $attributes = new Attribute(['href' => $vars['#url']] + ($vars['#attributes'] ?? []));
           return '<a' . (string) $attributes . '>' . $vars['#title'] . '</a>';
         });
     };
diff --git a/core/themes/claro/claro.theme b/core/themes/claro/claro.theme
index ba41e6d7c86c..4004b7623cb3 100644
--- a/core/themes/claro/claro.theme
+++ b/core/themes/claro/claro.theme
@@ -348,9 +348,7 @@ function claro_preprocess_details(&$variables) {
     // Mark the details required if needed. If the file widget allows uploading
     // multiple files, the required state is checked by checking the state of
     // the first child.
-    $variables['required'] = isset($element[0]['#required']) ?
-      $element[0]['#required'] :
-      !empty($element['#required']);
+    $variables['required'] = $element[0]['#required'] ?? !empty($element['#required']);
 
     // If the error is the same as the one in the multiple field widget element,
     // we have to avoid displaying it twice. Seven and Stark have this issue
diff --git a/core/themes/claro/src/ClaroPreRender.php b/core/themes/claro/src/ClaroPreRender.php
index 40885064e95b..82f73ac9fa3b 100644
--- a/core/themes/claro/src/ClaroPreRender.php
+++ b/core/themes/claro/src/ClaroPreRender.php
@@ -85,7 +85,7 @@ public static function verticalTabs($element) {
 
         foreach ($children_keys as $child_key) {
           $last_group_with_child_key = $group_key;
-          $type = isset($element['group']['#groups'][$group_key][$child_key]['#type']) ? $element['group']['#groups'][$group_key][$child_key]['#type'] : NULL;
+          $type = $element['group']['#groups'][$group_key][$child_key]['#type'] ?? NULL;
           if ($type === 'details') {
             // Add BEM class to specify the details element is in a vertical
             // tabs group.
-- 
GitLab


From e125ce28f59bc3c801e85cddce797b415053b8f7 Mon Sep 17 00:00:00 2001
From: Lee Rowlands <lee.rowlands@previousnext.com.au>
Date: Mon, 15 Nov 2021 12:35:55 +1000
Subject: [PATCH 30/69] Issue #3222769 by bbrala, alexpott, longwave,
 Matroskeen: [November 8, 2021] Replace all list (array destructuring)
 assignment to the array syntax

(cherry picked from commit 6d39cdeeb47c2179a8fcabcb2b41e71f89f2996e)
---
 composer/Plugin/Scaffold/Interpolator.php     |  2 +-
 core/includes/batch.inc                       |  8 ++---
 core/includes/bootstrap.inc                   |  2 +-
 core/includes/errors.inc                      |  2 +-
 core/includes/install.inc                     |  2 +-
 core/includes/theme.inc                       |  2 +-
 core/includes/update.inc                      |  2 +-
 .../Annotation/Doctrine/DocParser.php         |  4 +--
 .../Component/Diff/Engine/DiffEngine.php      |  4 +--
 .../Drupal/Component/Diff/WordLevelDiff.php   |  4 +--
 .../lib/Drupal/Component/Gettext/PoHeader.php |  2 +-
 .../DerivativeDiscoveryDecorator.php          |  2 +-
 .../Drupal/Component/Plugin/PluginBase.php    |  4 +--
 .../Drupal/Component/Utility/UrlHelper.php    |  4 +--
 .../Ajax/AjaxResponseAttachmentsProcessor.php |  2 +-
 core/lib/Drupal/Core/Asset/AssetResolver.php  | 10 +++----
 .../Core/Asset/LibraryDependencyResolver.php  |  2 +-
 .../Core/Asset/LibraryDiscoveryCollector.php  |  4 +--
 .../Cache/Context/CacheContextsManager.php    |  8 ++---
 .../lib/Drupal/Core/Command/DbDumpCommand.php |  2 +-
 .../Drupal/Core/Config/ConfigInstaller.php    |  6 ++--
 core/lib/Drupal/Core/Config/ConfigManager.php |  4 +--
 .../Core/Controller/ControllerResolver.php    |  4 +--
 .../Core/Database/Driver/pgsql/Schema.php     |  2 +-
 .../Core/Database/Driver/pgsql/Select.php     |  2 +-
 .../Core/Database/Driver/sqlite/Schema.php    |  2 +-
 .../Core/Datetime/Element/DateElementBase.php |  2 +-
 .../DependencyInjection/YamlFileLoader.php    |  2 +-
 .../Entity/Enhancer/EntityRouteEnhancer.php   |  2 +-
 .../Drupal/Core/Entity/EntityAccessCheck.php  |  2 +-
 .../Core/Entity/EntityBundleAccessCheck.php   |  2 +-
 .../Entity/EntityConstraintViolationList.php  |  2 +-
 .../Core/Entity/EntityCreateAccessCheck.php   |  2 +-
 .../Core/Entity/EntityDisplayRepository.php   |  2 +-
 .../Core/Entity/EntityResolverManager.php     | 10 +++----
 .../Core/Entity/HtmlEntityFormController.php  |  2 +-
 .../Core/Entity/Query/Sql/QueryAggregate.php  |  2 +-
 .../Drupal/Core/Entity/Query/Sql/Tables.php   |  2 +-
 .../Sql/SqlContentEntityStorageSchema.php     |  2 +-
 .../ConfigImportSubscriber.php                |  2 +-
 .../ResponseGeneratorSubscriber.php           |  2 +-
 core/lib/Drupal/Core/Extension/Dependency.php |  2 +-
 .../Core/Layout/LayoutPluginManager.php       |  2 +-
 .../lib/Drupal/Core/Mail/MailFormatHelper.php |  4 +--
 .../Core/Menu/Form/MenuLinkDefaultForm.php    |  2 +-
 .../Core/Menu/MenuParentFormSelector.php      |  2 +-
 .../Plugin/Context/LazyContextRepository.php  |  2 +-
 .../HtmlResponseAttachmentsProcessor.php      |  4 +--
 .../Core/Render/MainContent/HtmlRenderer.php  |  2 +-
 .../Core/Security/DoTrustedCallbackTrait.php  |  4 +--
 .../Drupal/Core/StreamWrapper/LocalStream.php |  4 +--
 .../Drupal/Core/Template/TwigNodeTrans.php    |  4 +--
 core/lib/Drupal/Core/Test/TestDiscovery.php   |  2 +-
 core/lib/Drupal/Core/Theme/Registry.php       |  4 +--
 .../lib/Drupal/Core/Update/UpdateRegistry.php |  4 +--
 core/lib/Drupal/Core/Url.php                  |  2 +-
 core/modules/big_pipe/src/Render/BigPipe.php  |  2 +-
 .../Plugin/migrate/process/BlockPluginId.php  |  4 +--
 .../Plugin/migrate/process/BlockRegion.php    |  2 +-
 .../Plugin/migrate/process/BlockSettings.php  |  4 +--
 .../src/Plugin/migrate/process/BlockTheme.php |  2 +-
 .../migrate/process/BlockVisibility.php       |  2 +-
 .../block/src/Plugin/migrate/source/Block.php |  2 +-
 .../block/tests/src/Functional/BlockTest.php  |  2 +-
 .../src/Plugin/CKEditorPlugin/Internal.php    |  2 +-
 .../src/Plugin/CKEditorPlugin/StylesCombo.php |  2 +-
 .../src/Functional/CKEditorLoadingTest.php    |  6 ++--
 core/modules/color/color.module               |  6 ++--
 .../views/filter/ModerationStateFilter.php    |  4 +--
 .../ContentModerationRouteSubscriber.php      |  2 +-
 ...ontentTranslationFieldSyncRevisionTest.php |  2 +-
 core/modules/contextual/contextual.module     |  2 +-
 .../src/Functional/DateTimeFieldTest.php      |  2 +-
 .../src/Functional/DateRangeFieldTest.php     |  2 +-
 .../src/Functional/EditorLoadingTest.php      | 12 ++++----
 .../Functional/EditorUploadImageScaleTest.php | 24 +++++++--------
 core/modules/field/field.module               |  2 +-
 .../process/d6/FieldInstanceDefaults.php      |  2 +-
 .../d6/FieldInstanceOptionTranslation.php     |  2 +-
 .../process/d6/FieldInstanceSettings.php      |  2 +-
 .../d6/FieldInstanceWidgetSettings.php        |  2 +-
 .../process/d6/FieldOptionTranslation.php     |  2 +-
 .../migrate/process/d6/FieldSettings.php      |  2 +-
 .../process/d7/FieldInstanceDefaults.php      |  2 +-
 .../d7/FieldInstanceOptionTranslation.php     |  2 +-
 .../process/d7/FieldInstanceSettings.php      |  2 +-
 .../process/d7/FieldOptionTranslation.php     |  2 +-
 .../Kernel/Boolean/BooleanFormatterTest.php   |  2 +-
 .../Migrate/d7/MigrateFieldInstanceTest.php   |  2 +-
 .../Timestamp/TimestampFormatterTest.php      |  2 +-
 .../src/Form/EntityDisplayFormBase.php        |  2 +-
 .../field_ui/src/Form/FieldStorageAddForm.php |  2 +-
 core/modules/file/file.module                 |  4 +--
 core/modules/file/file.views.inc              |  2 +-
 .../FieldFormatter/FileMediaFormatterBase.php |  2 +-
 .../src/Plugin/migrate/process/d6/FileUri.php |  2 +-
 .../src/Functional/FileFieldValidateTest.php  |  2 +-
 .../src/Functional/SaveUploadFormTest.php     |  2 +-
 .../tests/src/Functional/SaveUploadTest.php   |  2 +-
 .../file/tests/src/Kernel/UsageTest.php       |  6 ++--
 core/modules/filter/filter.module             |  2 +-
 .../Functional/FilterDefaultFormatTest.php    |  2 +-
 .../src/Functional/FilterFormatAccessTest.php |  2 +-
 .../help_topics/src/HelpTopicDiscovery.php    |  2 +-
 core/modules/image/image.views.inc            |  2 +-
 .../PathProcessorImageStyles.php              |  2 +-
 .../src/Plugin/Field/FieldType/ImageItem.php  |  2 +-
 .../Plugin/ImageEffect/CropImageEffect.php    |  2 +-
 .../ImageEffect/ScaleAndCropImageEffect.php   |  2 +-
 .../src/Functional/ImageFieldDisplayTest.php  |  2 +-
 .../src/Access/TemporaryQueryGuard.php        |  2 +-
 .../ResourceObjectNormalizationCacher.php     |  2 +-
 .../src/Revisions/VersionNegotiator.php       |  2 +-
 .../tests/src/Functional/ResourceTestBase.php |  2 +-
 .../JsonApiDocumentTopLevelNormalizerTest.php | 30 +++++++++----------
 .../ResourceResponseValidatorTest.php         |  2 +-
 .../LanguageNegotiationUrl.php                |  2 +-
 .../ContentTranslationEnabledSetting.php      |  2 +-
 .../src/Functional/LanguageSwitchingTest.php  |  4 +--
 .../Unit/ContentLanguageSettingsUnitTest.php  |  2 +-
 .../Entity/LayoutBuilderEntityViewDisplay.php |  4 +--
 .../src/Plugin/Block/ExtraFieldBlock.php      |  2 +-
 .../src/Plugin/Block/FieldBlock.php           |  2 +-
 .../SectionStorage/DefaultsSectionStorage.php |  2 +-
 .../OverridesSectionStorage.php               |  2 +-
 .../src/QuickEditIntegration.php              |  4 +--
 .../Plugin/Field/FieldWidget/LinkWidget.php   |  2 +-
 .../tests/src/Functional/LinkFieldUITest.php  |  2 +-
 .../Plugin/QueueWorker/LocaleTranslation.php  |  2 +-
 core/modules/locale/src/PoDatabaseWriter.php  |  2 +-
 .../media/src/OEmbed/ResourceFetcher.php      |  2 +-
 .../src/Form/MenuLinkContentForm.php          |  2 +-
 core/modules/menu_ui/menu_ui.module           |  2 +-
 .../MenuSettingsConstraintValidator.php       |  2 +-
 .../menu_ui/tests/src/Traits/MenuUiTrait.php  |  2 +-
 .../src/EntityFieldDefinitionTrait.php        |  2 +-
 .../src/Plugin/migrate/process/Download.php   |  2 +-
 .../src/Plugin/migrate/process/FileCopy.php   |  2 +-
 .../src/Plugin/migrate/process/Route.php      |  2 +-
 .../tests/src/Kernel/QueryBatchTest.php       |  2 +-
 .../tests/src/Kernel/process/FileCopyTest.php |  4 +--
 .../src/Unit/MigrationPluginManagerTest.php   |  2 +-
 .../src/Form/MigrateUpgradeFormBase.php       |  2 +-
 .../MigrateUpgradeFormStepsTest.php           |  2 +-
 .../NodeTranslationExceptionSubscriber.php    |  2 +-
 .../node/src/Plugin/Search/NodeSearch.php     |  2 +-
 .../tests/src/Functional/PageCacheTest.php    |  4 +--
 .../quickedit/src/QuickEditController.php     |  2 +-
 .../migrate/process/ImageStyleMappings.php    |  2 +-
 .../EntityResource/EntityResourceTestBase.php |  2 +-
 core/modules/search/src/SearchIndex.php       |  2 +-
 core/modules/search/src/SearchQuery.php       |  4 +--
 core/modules/system/system.admin.inc          |  2 +-
 core/modules/system/system.module             |  2 +-
 .../Form/FormTestTableSelectColspanForm.php   |  2 +-
 .../src/Form/FormTestTableSelectFormBase.php  |  2 +-
 .../src/Functional/Ajax/FrameworkTest.php     |  2 +-
 .../Entity/EntityCacheTagsTestBase.php        |  4 +--
 .../Form/ElementsTableSelectTest.php          | 12 ++++----
 .../src/Functional/Menu/LocalActionTest.php   |  2 +-
 .../src/Functional/Menu/LocalTasksTest.php    |  2 +-
 .../Module/InstallUninstallTest.php           |  2 +-
 .../Functional/System/AdminMetaTagTest.php    |  2 +-
 .../System/ResponseGeneratorTest.php          |  2 +-
 .../tests/src/Kernel/Common/UrlTest.php       |  2 +-
 .../system/tests/src/Kernel/Mail/MailTest.php |  4 +--
 .../tests/src/Unit/Menu/MenuLinkTreeTest.php  |  2 +-
 .../tests/src/Functional/TermTest.php         |  2 +-
 .../src/Controller/ToolbarController.php      |  2 +-
 core/modules/toolbar/toolbar.module           |  4 +--
 .../update/src/ProjectSecurityRequirement.php |  2 +-
 core/modules/user/src/AccountForm.php         |  2 +-
 .../modules/user/src/Event/UserFloodEvent.php |  2 +-
 .../d6/ProfileFieldOptionTranslation.php      |  2 +-
 .../tests/src/Kernel/UserValidationTest.php   |  2 +-
 .../src/EventSubscriber/RouteSubscriber.php   |  6 ++--
 .../views/src/Plugin/Block/ViewsBlockBase.php |  2 +-
 .../src/Plugin/Derivative/ViewsLocalTask.php  |  4 +--
 .../src/Plugin/Derivative/ViewsMenuLink.php   |  2 +-
 .../ViewsSelection.php                        |  4 +--
 .../views/src/Plugin/views/area/View.php      |  4 +--
 .../views/src/Plugin/views/display/Page.php   |  2 +-
 .../src/Plugin/views/field/EntityField.php    |  4 +--
 .../views/relationship/GroupwiseMax.php       |  6 ++--
 .../Plugin/views/wizard/WizardPluginBase.php  |  4 +--
 core/modules/views/src/Views.php              |  2 +-
 .../Plugin/NumericFormatPluralTest.php        |  2 +-
 ...sEntitySchemaSubscriberIntegrationTest.php | 30 +++++++++----------
 .../views/tests/src/Kernel/ModuleTest.php     |  2 +-
 .../Controller/ViewAjaxControllerTest.php     | 12 ++++----
 .../EventSubscriber/RouteSubscriberTest.php   |  4 +--
 .../Plugin/display/PathPluginBaseTest.php     | 28 ++++++++---------
 .../tests/src/Unit/ViewExecutableTest.php     | 24 +++++++--------
 core/modules/views/views.api.php              |  4 +--
 core/modules/views/views.views.inc            |  2 +-
 .../views_ui/src/Form/Ajax/ConfigHandler.php  |  2 +-
 core/modules/views_ui/src/ViewUI.php          |  6 ++--
 .../src/WorkflowAccessControlHandler.php      |  2 +-
 .../workspaces/src/EntityQuery/Tables.php     |  2 +-
 .../workspaces/src/Form/WorkspaceForm.php     |  2 +-
 .../demo_umami_content/src/InstallHelper.php  |  2 +-
 core/scripts/run-tests.sh                     | 10 +++----
 .../Core/Asset/AttachedAssetsTest.php         |  4 +--
 .../KernelTests/Core/Database/SelectTest.php  |  2 +-
 .../Core/Entity/EntityQueryTest.php           |  2 +-
 .../Core/Entity/EntitySchemaTest.php          |  4 +--
 core/tests/Drupal/Tests/BrowserTestBase.php   |  2 +-
 .../Tests/Component/Gettext/PoHeaderTest.php  |  2 +-
 .../Core/Cache/CacheableMetadataTest.php      |  2 +-
 .../Core/Extension/ExtensionListTest.php      |  6 ++--
 .../Core/Extension/InfoParserUnitTest.php     |  2 +-
 .../Field/BaseFieldDefinitionTestBase.php     |  2 +-
 .../Tests/Core/Mail/MailFormatHelperTest.php  |  2 +-
 .../Core/Render/RendererRecursionTest.php     |  6 ++--
 .../DrupalStandardsListenerTrait.php          |  2 +-
 .../tests/Drupal/Tests/XdebugRequestTrait.php |  2 +-
 216 files changed, 367 insertions(+), 367 deletions(-)

diff --git a/composer/Plugin/Scaffold/Interpolator.php b/composer/Plugin/Scaffold/Interpolator.php
index c9f6a4fedb57..251415ee5e36 100644
--- a/composer/Plugin/Scaffold/Interpolator.php
+++ b/composer/Plugin/Scaffold/Interpolator.php
@@ -148,7 +148,7 @@ protected function findTokens($message) {
     }
     $tokens = [];
     foreach ($matches as $matchSet) {
-      list($sourceText, $key) = $matchSet;
+      [$sourceText, $key] = $matchSet;
       $tokens[$sourceText] = $key;
     }
     return $tokens;
diff --git a/core/includes/batch.inc b/core/includes/batch.inc
index ce812f155b09..2dc34b33d4fe 100644
--- a/core/includes/batch.inc
+++ b/core/includes/batch.inc
@@ -134,7 +134,7 @@ function _batch_needs_update($new_value = NULL) {
  */
 function _batch_do() {
   // Perform actual processing.
-  list($percentage, $message, $label) = _batch_process();
+  [$percentage, $message, $label] = _batch_process();
 
   return new JsonResponse(['status' => TRUE, 'percentage' => $percentage, 'message' => $message, 'label' => $label]);
 }
@@ -179,11 +179,11 @@ function _batch_progress_page() {
     // Just use the content of the response.
     $fallback = $response->getContent();
 
-    list($fallback) = explode('<!--partial-->', $fallback);
+    [$fallback] = explode('<!--partial-->', $fallback);
     print $fallback;
 
     // Perform actual processing.
-    list($percentage, $message, $label) = _batch_process($batch);
+    [$percentage, $message, $label] = _batch_process($batch);
     if ($percentage == 100) {
       $new_op = 'finished';
     }
@@ -283,7 +283,7 @@ function _batch_process() {
     $finished = 1;
 
     if ($item = $queue->claimItem()) {
-      list($callback, $args) = $item->data;
+      [$callback, $args] = $item->data;
 
       // Build the 'context' array and execute the function call.
       $batch_context = [
diff --git a/core/includes/bootstrap.inc b/core/includes/bootstrap.inc
index 12464555f759..2a28d04e0873 100644
--- a/core/includes/bootstrap.inc
+++ b/core/includes/bootstrap.inc
@@ -418,7 +418,7 @@ function drupal_valid_test_ua($new_prefix = NULL) {
   $http_user_agent = $_SERVER['HTTP_USER_AGENT'] ?? NULL;
   $user_agent = $_COOKIE['SIMPLETEST_USER_AGENT'] ?? $http_user_agent;
   if (isset($user_agent) && preg_match("/^simple(\w+\d+):(.+):(.+):(.+)$/", $user_agent, $matches)) {
-    list(, $prefix, $time, $salt, $hmac) = $matches;
+    [, $prefix, $time, $salt, $hmac] = $matches;
     $check_string = $prefix . ':' . $time . ':' . $salt;
     // Read the hash salt prepared by drupal_generate_test_ua().
     // This function is called before settings.php is read and Drupal's error
diff --git a/core/includes/errors.inc b/core/includes/errors.inc
index 69543cf0af89..79328b3e5c58 100644
--- a/core/includes/errors.inc
+++ b/core/includes/errors.inc
@@ -58,7 +58,7 @@ function drupal_error_levels() {
 function _drupal_error_handler_real($error_level, $message, $filename, $line) {
   if ($error_level & error_reporting()) {
     $types = drupal_error_levels();
-    list($severity_msg, $severity_level) = $types[$error_level];
+    [$severity_msg, $severity_level] = $types[$error_level];
     $backtrace = debug_backtrace();
     $caller = Error::getLastCaller($backtrace);
 
diff --git a/core/includes/install.inc b/core/includes/install.inc
index c24c16533342..dcb7ffa6911f 100644
--- a/core/includes/install.inc
+++ b/core/includes/install.inc
@@ -282,7 +282,7 @@ function drupal_rewrite_settings($settings = [], $settings_file = NULL) {
     $state = 'default';
     foreach (token_get_all($contents) as $token) {
       if (is_array($token)) {
-        list($type, $value) = $token;
+        [$type, $value] = $token;
       }
       else {
         $type = -1;
diff --git a/core/includes/theme.inc b/core/includes/theme.inc
index 7476d323c3b2..ff7052d4a8d8 100644
--- a/core/includes/theme.inc
+++ b/core/includes/theme.inc
@@ -153,7 +153,7 @@ function drupal_find_theme_functions($cache, $prefixes) {
       // intermediary suggestion.
       $pattern = $info['pattern'] ?? ($hook . '__');
       // Grep only the functions which are within the prefix group.
-      list($first_prefix,) = explode('_', $prefix, 2);
+      [$first_prefix] = explode('_', $prefix, 2);
       if (!isset($info['base hook']) && !empty($pattern) && isset($grouped_functions[$first_prefix])) {
         $matches = preg_grep('/^' . $prefix . '_' . $pattern . '/', $grouped_functions[$first_prefix]);
         if ($matches) {
diff --git a/core/includes/update.inc b/core/includes/update.inc
index e3644d86744c..7aed4b1a492d 100644
--- a/core/includes/update.inc
+++ b/core/includes/update.inc
@@ -286,7 +286,7 @@ function update_invoke_post_update($function, &$context) {
     return;
   }
 
-  list($module, $name) = explode('_post_update_', $function, 2);
+  [$module, $name] = explode('_post_update_', $function, 2);
   module_load_include('php', $module, $module . '.post_update');
   if (function_exists($function)) {
     try {
diff --git a/core/lib/Drupal/Component/Annotation/Doctrine/DocParser.php b/core/lib/Drupal/Component/Annotation/Doctrine/DocParser.php
index 04b81a0c1642..ccc44feca843 100644
--- a/core/lib/Drupal/Component/Annotation/Doctrine/DocParser.php
+++ b/core/lib/Drupal/Component/Annotation/Doctrine/DocParser.php
@@ -897,7 +897,7 @@ private function Constant()
         $identifier = $this->Identifier();
 
         if ( ! defined($identifier) && false !== strpos($identifier, '::') && '\\' !== $identifier[0]) {
-            list($className, $const) = explode('::', $identifier);
+            [$className, $const] = explode('::', $identifier);
 
             $alias = (false === $pos = strpos($className, '\\')) ? $className : substr($className, 0, $pos);
             $found = false;
@@ -1099,7 +1099,7 @@ private function Arrayx()
         $this->match(DocLexer::T_CLOSE_CURLY_BRACES);
 
         foreach ($values as $value) {
-            list ($key, $val) = $value;
+             [$key, $val] = $value;
 
             if ($key !== null) {
                 $array[$key] = $val;
diff --git a/core/lib/Drupal/Component/Diff/Engine/DiffEngine.php b/core/lib/Drupal/Component/Diff/Engine/DiffEngine.php
index bd3cc10a6216..f8ec05fbbbcb 100644
--- a/core/lib/Drupal/Component/Diff/Engine/DiffEngine.php
+++ b/core/lib/Drupal/Component/Diff/Engine/DiffEngine.php
@@ -165,7 +165,7 @@ protected function _diag($xoff, $xlim, $yoff, $ylim, $nchunks) {
       // Things seems faster (I'm not sure I understand why)
       // when the shortest sequence in X.
       $flip = TRUE;
-      list($xoff, $xlim, $yoff, $ylim) = [$yoff, $ylim, $xoff, $xlim];
+      [$xoff, $xlim, $yoff, $ylim] = [$yoff, $ylim, $xoff, $xlim];
     }
 
     if ($flip) {
@@ -302,7 +302,7 @@ protected function _compareseq($xoff, $xlim, $yoff, $ylim) {
       //$nchunks = sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5);
       //$nchunks = max(2, min(8, (int)$nchunks));
       $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
-      list($lcs, $seps) = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
+      [$lcs, $seps] = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
     }
 
     if ($lcs == 0) {
diff --git a/core/lib/Drupal/Component/Diff/WordLevelDiff.php b/core/lib/Drupal/Component/Diff/WordLevelDiff.php
index 66c6e1a90f2c..da6c9b6d5b57 100644
--- a/core/lib/Drupal/Component/Diff/WordLevelDiff.php
+++ b/core/lib/Drupal/Component/Diff/WordLevelDiff.php
@@ -14,8 +14,8 @@ class WordLevelDiff extends MappedDiff {
   const MAX_LINE_LENGTH = 10000;
 
   public function __construct($orig_lines, $closing_lines) {
-    list($orig_words, $orig_stripped) = $this->_split($orig_lines);
-    list($closing_words, $closing_stripped) = $this->_split($closing_lines);
+    [$orig_words, $orig_stripped] = $this->_split($orig_lines);
+    [$closing_words, $closing_stripped] = $this->_split($closing_lines);
 
     parent::__construct($orig_words, $closing_words, $orig_stripped, $closing_stripped);
   }
diff --git a/core/lib/Drupal/Component/Gettext/PoHeader.php b/core/lib/Drupal/Component/Gettext/PoHeader.php
index bdd0d20a5156..8bc912d3bd99 100644
--- a/core/lib/Drupal/Component/Gettext/PoHeader.php
+++ b/core/lib/Drupal/Component/Gettext/PoHeader.php
@@ -254,7 +254,7 @@ private function parseHeader($header) {
     $lines = array_map('trim', explode("\n", $header));
     foreach ($lines as $line) {
       if ($line) {
-        list($tag, $contents) = explode(":", $line, 2);
+        [$tag, $contents] = explode(":", $line, 2);
         $header_parsed[trim($tag)] = trim($contents);
       }
     }
diff --git a/core/lib/Drupal/Component/Plugin/Discovery/DerivativeDiscoveryDecorator.php b/core/lib/Drupal/Component/Plugin/Discovery/DerivativeDiscoveryDecorator.php
index 6b47af01717b..7f629199b224 100644
--- a/core/lib/Drupal/Component/Plugin/Discovery/DerivativeDiscoveryDecorator.php
+++ b/core/lib/Drupal/Component/Plugin/Discovery/DerivativeDiscoveryDecorator.php
@@ -55,7 +55,7 @@ public function getDefinition($plugin_id, $exception_on_invalid = TRUE) {
     // $base_plugin_id.
     $plugin_definition = $this->decorated->getDefinition($plugin_id, FALSE);
 
-    list($base_plugin_id, $derivative_id) = $this->decodePluginId($plugin_id);
+    [$base_plugin_id, $derivative_id] = $this->decodePluginId($plugin_id);
     $base_plugin_definition = $this->decorated->getDefinition($base_plugin_id, $exception_on_invalid);
     if ($base_plugin_definition) {
       $deriver = $this->getDeriver($base_plugin_id, $base_plugin_definition);
diff --git a/core/lib/Drupal/Component/Plugin/PluginBase.php b/core/lib/Drupal/Component/Plugin/PluginBase.php
index 7bdc4a5fde35..67691784b3ca 100644
--- a/core/lib/Drupal/Component/Plugin/PluginBase.php
+++ b/core/lib/Drupal/Component/Plugin/PluginBase.php
@@ -69,7 +69,7 @@ public function getPluginId() {
   public function getBaseId() {
     $plugin_id = $this->getPluginId();
     if (strpos($plugin_id, static::DERIVATIVE_SEPARATOR)) {
-      list($plugin_id) = explode(static::DERIVATIVE_SEPARATOR, $plugin_id, 2);
+      [$plugin_id] = explode(static::DERIVATIVE_SEPARATOR, $plugin_id, 2);
     }
     return $plugin_id;
   }
@@ -81,7 +81,7 @@ public function getDerivativeId() {
     $plugin_id = $this->getPluginId();
     $derivative_id = NULL;
     if (strpos($plugin_id, static::DERIVATIVE_SEPARATOR)) {
-      list(, $derivative_id) = explode(static::DERIVATIVE_SEPARATOR, $plugin_id, 2);
+      [, $derivative_id] = explode(static::DERIVATIVE_SEPARATOR, $plugin_id, 2);
     }
     return $derivative_id;
   }
diff --git a/core/lib/Drupal/Component/Utility/UrlHelper.php b/core/lib/Drupal/Component/Utility/UrlHelper.php
index 137b4118ce03..b23a21351847 100644
--- a/core/lib/Drupal/Component/Utility/UrlHelper.php
+++ b/core/lib/Drupal/Component/Utility/UrlHelper.php
@@ -147,14 +147,14 @@ public static function parse($url) {
     if ($scheme_delimiter_position !== FALSE && ($query_delimiter_position === FALSE || $scheme_delimiter_position < $query_delimiter_position)) {
       // Split off the fragment, if any.
       if (strpos($url, '#') !== FALSE) {
-        list($url, $options['fragment']) = explode('#', $url, 2);
+        [$url, $options['fragment']] = explode('#', $url, 2);
       }
 
       // Split off everything before the query string into 'path'.
       $parts = explode('?', $url, 2);
 
       // Don't support URLs without a path, like 'http://'.
-      list(, $path) = explode('://', $parts[0], 2);
+      [, $path] = explode('://', $parts[0], 2);
       if ($path != '') {
         $options['path'] = $parts[0];
       }
diff --git a/core/lib/Drupal/Core/Ajax/AjaxResponseAttachmentsProcessor.php b/core/lib/Drupal/Core/Ajax/AjaxResponseAttachmentsProcessor.php
index 55a3b4374c0a..600a6dbd7163 100644
--- a/core/lib/Drupal/Core/Ajax/AjaxResponseAttachmentsProcessor.php
+++ b/core/lib/Drupal/Core/Ajax/AjaxResponseAttachmentsProcessor.php
@@ -142,7 +142,7 @@ protected function buildAttachmentsCommands(AjaxResponse $response, Request $req
       ->setAlreadyLoadedLibraries(isset($ajax_page_state['libraries']) ? explode(',', $ajax_page_state['libraries']) : [])
       ->setSettings($attachments['drupalSettings'] ?? []);
     $css_assets = $this->assetResolver->getCssAssets($assets, $optimize_css);
-    list($js_assets_header, $js_assets_footer) = $this->assetResolver->getJsAssets($assets, $optimize_js);
+    [$js_assets_header, $js_assets_footer] = $this->assetResolver->getJsAssets($assets, $optimize_js);
 
     // First, AttachedAssets::setLibraries() ensures duplicate libraries are
     // removed: it converts it to a set of libraries if necessary. Second,
diff --git a/core/lib/Drupal/Core/Asset/AssetResolver.php b/core/lib/Drupal/Core/Asset/AssetResolver.php
index c52ee7ffad55..35d28bbe8ce9 100644
--- a/core/lib/Drupal/Core/Asset/AssetResolver.php
+++ b/core/lib/Drupal/Core/Asset/AssetResolver.php
@@ -130,7 +130,7 @@ public function getCssAssets(AttachedAssetsInterface $assets, $optimize) {
     ];
 
     foreach ($libraries_to_load as $library) {
-      list($extension, $name) = explode('/', $library, 2);
+      [$extension, $name] = explode('/', $library, 2);
       $definition = $this->libraryDiscovery->getLibraryByName($extension, $name);
       if (isset($definition['css'])) {
         foreach ($definition['css'] as $options) {
@@ -196,7 +196,7 @@ protected function getJsSettingsAssets(AttachedAssetsInterface $assets) {
     $settings = [];
 
     foreach ($this->getLibrariesToLoad($assets) as $library) {
-      list($extension, $name) = explode('/', $library, 2);
+      [$extension, $name] = explode('/', $library, 2);
       $definition = $this->libraryDiscovery->getLibraryByName($extension, $name);
       if (isset($definition['drupalSettings'])) {
         $settings = NestedArray::mergeDeepArray([$settings, $definition['drupalSettings']], TRUE);
@@ -218,7 +218,7 @@ public function getJsAssets(AttachedAssetsInterface $assets, $optimize) {
     $cid = 'js:' . $theme_info->getName() . ':' . $this->languageManager->getCurrentLanguage()->getId() . ':' . Crypt::hashBase64(serialize($libraries_to_load)) . (int) (count($assets->getSettings()) > 0) . (int) $optimize;
 
     if ($cached = $this->cache->get($cid)) {
-      list($js_assets_header, $js_assets_footer, $settings, $settings_in_header) = $cached->data;
+      [$js_assets_header, $js_assets_footer, $settings, $settings_in_header] = $cached->data;
     }
     else {
       $javascript = [];
@@ -236,7 +236,7 @@ public function getJsAssets(AttachedAssetsInterface $assets, $optimize) {
       // Collect all libraries that contain JS assets and are in the header.
       $header_js_libraries = [];
       foreach ($libraries_to_load as $library) {
-        list($extension, $name) = explode('/', $library, 2);
+        [$extension, $name] = explode('/', $library, 2);
         $definition = $this->libraryDiscovery->getLibraryByName($extension, $name);
         if (isset($definition['js']) && !empty($definition['header'])) {
           $header_js_libraries[] = $library;
@@ -248,7 +248,7 @@ public function getJsAssets(AttachedAssetsInterface $assets, $optimize) {
       $header_js_libraries = $this->libraryDependencyResolver->getLibrariesWithDependencies($header_js_libraries);
 
       foreach ($libraries_to_load as $library) {
-        list($extension, $name) = explode('/', $library, 2);
+        [$extension, $name] = explode('/', $library, 2);
         $definition = $this->libraryDiscovery->getLibraryByName($extension, $name);
         if (isset($definition['js'])) {
           foreach ($definition['js'] as $options) {
diff --git a/core/lib/Drupal/Core/Asset/LibraryDependencyResolver.php b/core/lib/Drupal/Core/Asset/LibraryDependencyResolver.php
index 6b94e3178e9a..4c31c1b124ba 100644
--- a/core/lib/Drupal/Core/Asset/LibraryDependencyResolver.php
+++ b/core/lib/Drupal/Core/Asset/LibraryDependencyResolver.php
@@ -64,7 +64,7 @@ public function getLibrariesWithDependencies(array $libraries) {
   protected function doGetDependencies(array $libraries_with_unresolved_dependencies, array $final_libraries = []) {
     foreach ($libraries_with_unresolved_dependencies as $library) {
       if (!isset($final_libraries[$library])) {
-        list($extension, $name) = explode('/', $library, 2);
+        [$extension, $name] = explode('/', $library, 2);
         $definition = $this->libraryDiscovery->getLibraryByName($extension, $name);
         if (!empty($definition['dependencies'])) {
           $final_libraries = $this->doGetDependencies($definition['dependencies'], $final_libraries);
diff --git a/core/lib/Drupal/Core/Asset/LibraryDiscoveryCollector.php b/core/lib/Drupal/Core/Asset/LibraryDiscoveryCollector.php
index d72c58477390..3634892de9ed 100644
--- a/core/lib/Drupal/Core/Asset/LibraryDiscoveryCollector.php
+++ b/core/lib/Drupal/Core/Asset/LibraryDiscoveryCollector.php
@@ -96,7 +96,7 @@ protected function getLibraryDefinitions($extension) {
         else {
           // Otherwise replace with existing library definition if it exists.
           // Throw an exception if it doesn't.
-          list($replacement_extension, $replacement_name) = explode('/', $definition['override']);
+          [$replacement_extension, $replacement_name] = explode('/', $definition['override']);
           $replacement_definition = $this->get($replacement_extension);
           if (isset($replacement_definition[$replacement_name])) {
             $libraries[$name] = $replacement_definition[$replacement_name];
@@ -145,7 +145,7 @@ protected function applyLibrariesExtend($extension, $library_name, $library_defi
           // Only string library names are allowed.
           throw new InvalidLibrariesExtendSpecificationException('The libraries-extend specification for each library must be a list of strings.');
         }
-        list($new_extension, $new_library_name) = explode('/', $library_extend_name, 2);
+        [$new_extension, $new_library_name] = explode('/', $library_extend_name, 2);
         $new_libraries = $this->get($new_extension);
         if (isset($new_libraries[$new_library_name])) {
           $library_definition = NestedArray::mergeDeep($library_definition, $new_libraries[$new_library_name]);
diff --git a/core/lib/Drupal/Core/Cache/Context/CacheContextsManager.php b/core/lib/Drupal/Core/Cache/Context/CacheContextsManager.php
index 377ba7bd5a68..cd88b24bf729 100644
--- a/core/lib/Drupal/Core/Cache/Context/CacheContextsManager.php
+++ b/core/lib/Drupal/Core/Cache/Context/CacheContextsManager.php
@@ -106,7 +106,7 @@ public function convertTokensToKeys(array $context_tokens) {
     // Iterate over cache contexts that have been optimized away and get their
     // cacheability metadata.
     foreach (static::parseTokens(array_diff($context_tokens, $optimized_tokens)) as $context_token) {
-      list($context_id, $parameter) = $context_token;
+      [$context_id, $parameter] = $context_token;
       $context = $this->getService($context_id);
       $cacheable_metadata = $cacheable_metadata->merge($context->getCacheableMetadata($parameter));
     }
@@ -114,7 +114,7 @@ public function convertTokensToKeys(array $context_tokens) {
     sort($optimized_tokens);
     $keys = [];
     foreach (array_combine($optimized_tokens, static::parseTokens($optimized_tokens)) as $context_token => $context) {
-      list($context_id, $parameter) = $context;
+      [$context_id, $parameter] = $context;
       $keys[] = '[' . $context_token . ']=' . $this->getService($context_id)->getContext($parameter);
     }
 
@@ -164,7 +164,7 @@ public function optimizeTokens(array $context_tokens) {
       $parameter = NULL;
       $context_id = $context_token;
       if (strpos($context_token, ':') !== FALSE) {
-        list($context_id, $parameter) = explode(':', $context_token);
+        [$context_id, $parameter] = explode(':', $context_token);
       }
 
       // Context tokens without:
@@ -236,7 +236,7 @@ public static function parseTokens(array $context_tokens) {
       $context_id = $context;
       $parameter = NULL;
       if (strpos($context, ':') !== FALSE) {
-        list($context_id, $parameter) = explode(':', $context, 2);
+        [$context_id, $parameter] = explode(':', $context, 2);
       }
       $contexts_with_parameters[] = [$context_id, $parameter];
     }
diff --git a/core/lib/Drupal/Core/Command/DbDumpCommand.php b/core/lib/Drupal/Core/Command/DbDumpCommand.php
index bb345e4d2659..a36366cc2eb9 100644
--- a/core/lib/Drupal/Core/Command/DbDumpCommand.php
+++ b/core/lib/Drupal/Core/Command/DbDumpCommand.php
@@ -279,7 +279,7 @@ protected function getTableCollation(Connection $connection, $table, &$definitio
 
     // Map the collation to a character set. For example, 'utf8mb4_general_ci'
     // (MySQL 5) or 'utf8mb4_0900_ai_ci' (MySQL 8) will be mapped to 'utf8mb4'.
-    list($charset,) = explode('_', $data['Collation'], 2);
+    [$charset] = explode('_', $data['Collation'], 2);
 
     // Set `mysql_character_set`. This will be ignored by other backends.
     $definition['mysql_character_set'] = $charset;
diff --git a/core/lib/Drupal/Core/Config/ConfigInstaller.php b/core/lib/Drupal/Core/Config/ConfigInstaller.php
index 16472b65ed10..107ca8a0716e 100644
--- a/core/lib/Drupal/Core/Config/ConfigInstaller.php
+++ b/core/lib/Drupal/Core/Config/ConfigInstaller.php
@@ -525,7 +525,7 @@ public function checkConfigurationToInstall($type, $name) {
     $profile_storages = $this->getProfileStorages($name);
 
     // Check the dependencies of configuration provided by the module.
-    list($invalid_default_config, $missing_dependencies) = $this->findDefaultConfigWithUnmetDependencies($storage, $enabled_extensions, $profile_storages);
+    [$invalid_default_config, $missing_dependencies] = $this->findDefaultConfigWithUnmetDependencies($storage, $enabled_extensions, $profile_storages);
     if (!empty($invalid_default_config)) {
       throw UnmetDependenciesException::create($name, array_unique($missing_dependencies, SORT_REGULAR));
     }
@@ -593,7 +593,7 @@ protected function findDefaultConfigWithUnmetDependencies(StorageInterface $stor
   protected function validateDependencies($config_name, array $data, array $enabled_extensions, array $all_config) {
     if (!isset($data['dependencies'])) {
       // Simple config or a config entity without dependencies.
-      list($provider) = explode('.', $config_name, 2);
+      [$provider] = explode('.', $config_name, 2);
       return in_array($provider, $enabled_extensions, TRUE);
     }
 
@@ -619,7 +619,7 @@ protected function validateDependencies($config_name, array $data, array $enable
   protected function getMissingDependencies($config_name, array $data, array $enabled_extensions, array $all_config) {
     $missing = [];
     if (isset($data['dependencies'])) {
-      list($provider) = explode('.', $config_name, 2);
+      [$provider] = explode('.', $config_name, 2);
       $all_dependencies = $data['dependencies'];
 
       // Ensure enforced dependencies are included.
diff --git a/core/lib/Drupal/Core/Config/ConfigManager.php b/core/lib/Drupal/Core/Config/ConfigManager.php
index 1aca27fa55f0..db67c29959ba 100644
--- a/core/lib/Drupal/Core/Config/ConfigManager.php
+++ b/core/lib/Drupal/Core/Config/ConfigManager.php
@@ -466,7 +466,7 @@ protected function callOnDependencyRemoval(ConfigEntityInterface $entity, array
           }
           else {
             // Ignore the bundle.
-            list($entity_type_id,, $uuid) = explode(':', $name);
+            [$entity_type_id,, $uuid] = explode(':', $name);
             return $this->entityRepository->loadEntityByConfigTarget($entity_type_id, $uuid);
           }
         }, $affected_dependencies[$type]);
@@ -513,7 +513,7 @@ public function findMissingContentDependencies() {
     }
     foreach (array_unique($content_dependencies) as $content_dependency) {
       // Format of the dependency is entity_type:bundle:uuid.
-      list($entity_type, $bundle, $uuid) = explode(':', $content_dependency, 3);
+      [$entity_type, $bundle, $uuid] = explode(':', $content_dependency, 3);
       if (!$this->entityRepository->loadEntityByUuid($entity_type, $uuid)) {
         $missing_dependencies[$uuid] = [
           'entity_type' => $entity_type,
diff --git a/core/lib/Drupal/Core/Controller/ControllerResolver.php b/core/lib/Drupal/Core/Controller/ControllerResolver.php
index 36312c1a1211..ec64c1d89b03 100644
--- a/core/lib/Drupal/Core/Controller/ControllerResolver.php
+++ b/core/lib/Drupal/Core/Controller/ControllerResolver.php
@@ -104,11 +104,11 @@ protected function createController($controller) {
     // Controller in the service:method notation.
     $count = substr_count($controller, ':');
     if ($count == 1) {
-      list($class_or_service, $method) = explode(':', $controller, 2);
+      [$class_or_service, $method] = explode(':', $controller, 2);
     }
     // Controller in the class::method notation.
     elseif (strpos($controller, '::') !== FALSE) {
-      list($class_or_service, $method) = explode('::', $controller, 2);
+      [$class_or_service, $method] = explode('::', $controller, 2);
     }
     else {
       throw new \LogicException(sprintf('Unable to parse the controller name "%s".', $controller));
diff --git a/core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php b/core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php
index afb7f604fbde..59795d39210c 100644
--- a/core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php
+++ b/core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php
@@ -566,7 +566,7 @@ public function renameTable($table, $new_name) {
 
     // Get the schema and tablename for the old table.
     $old_full_name = str_replace('"', '', $this->connection->prefixTables('{' . $table . '}'));
-    list($old_schema, $old_table_name) = strpos($old_full_name, '.') ? explode('.', $old_full_name) : ['public', $old_full_name];
+    [$old_schema, $old_table_name] = strpos($old_full_name, '.') ? explode('.', $old_full_name) : ['public', $old_full_name];
 
     // Index names and constraint names are global in PostgreSQL, so we need to
     // rename them when renaming the table.
diff --git a/core/lib/Drupal/Core/Database/Driver/pgsql/Select.php b/core/lib/Drupal/Core/Database/Driver/pgsql/Select.php
index b5d22d42c9ea..2a9bc4a58726 100644
--- a/core/lib/Drupal/Core/Database/Driver/pgsql/Select.php
+++ b/core/lib/Drupal/Core/Database/Driver/pgsql/Select.php
@@ -63,7 +63,7 @@ public function orderBy($field, $direction = 'ASC') {
 
     // If there is a table alias specified, split it up.
     if (strpos($field, '.') !== FALSE) {
-      list($table, $table_field) = explode('.', $field);
+      [$table, $table_field] = explode('.', $field);
     }
     // Figure out if the field has already been added.
     foreach ($this->fields as $existing_field) {
diff --git a/core/lib/Drupal/Core/Database/Driver/sqlite/Schema.php b/core/lib/Drupal/Core/Database/Driver/sqlite/Schema.php
index 2949e0619d5a..1895522e810a 100644
--- a/core/lib/Drupal/Core/Database/Driver/sqlite/Schema.php
+++ b/core/lib/Drupal/Core/Database/Driver/sqlite/Schema.php
@@ -500,7 +500,7 @@ protected function introspectSchema($table) {
         $length = NULL;
       }
       if (isset($mapped_fields[$type])) {
-        list($type, $size) = explode(':', $mapped_fields[$type]);
+        [$type, $size] = explode(':', $mapped_fields[$type]);
         $schema['fields'][$row->name] = [
           'type' => $type,
           'size' => $size,
diff --git a/core/lib/Drupal/Core/Datetime/Element/DateElementBase.php b/core/lib/Drupal/Core/Datetime/Element/DateElementBase.php
index 433cdf8b1810..24f553a41fe3 100644
--- a/core/lib/Drupal/Core/Datetime/Element/DateElementBase.php
+++ b/core/lib/Drupal/Core/Datetime/Element/DateElementBase.php
@@ -33,7 +33,7 @@ abstract class DateElementBase extends FormElement {
   protected static function datetimeRangeYears($string, $date = NULL) {
     $datetime = new DrupalDateTime();
     $this_year = $datetime->format('Y');
-    list($min_year, $max_year) = explode(':', $string);
+    [$min_year, $max_year] = explode(':', $string);
 
     // Valid patterns would be -5:+5, 0:+1, 2008:2010.
     $plus_pattern = '@[\+|\-][0-9]{1,4}@';
diff --git a/core/lib/Drupal/Core/DependencyInjection/YamlFileLoader.php b/core/lib/Drupal/Core/DependencyInjection/YamlFileLoader.php
index cab99558f0aa..215babce46ff 100644
--- a/core/lib/Drupal/Core/DependencyInjection/YamlFileLoader.php
+++ b/core/lib/Drupal/Core/DependencyInjection/YamlFileLoader.php
@@ -119,7 +119,7 @@ private function parseDefinitions($content, $file)
         }
         else {
             $basename = basename($file);
-            list($provider, ) = explode('.', $basename, 2);
+            [$provider, ] = explode('.', $basename, 2);
         }
         foreach ($content['services'] as $id => $service) {
             if (is_array($service)) {
diff --git a/core/lib/Drupal/Core/Entity/Enhancer/EntityRouteEnhancer.php b/core/lib/Drupal/Core/Entity/Enhancer/EntityRouteEnhancer.php
index aa0b41a2fa9e..e895273d8893 100644
--- a/core/lib/Drupal/Core/Entity/Enhancer/EntityRouteEnhancer.php
+++ b/core/lib/Drupal/Core/Entity/Enhancer/EntityRouteEnhancer.php
@@ -105,7 +105,7 @@ protected function enhanceEntityView(array $defaults, Request $request) {
     $defaults['_controller'] = '\Drupal\Core\Entity\Controller\EntityViewController::view';
     if (strpos($defaults['_entity_view'], '.') !== FALSE) {
       // The _entity_view entry is of the form entity_type.view_mode.
-      list($entity_type, $view_mode) = explode('.', $defaults['_entity_view']);
+      [$entity_type, $view_mode] = explode('.', $defaults['_entity_view']);
       $defaults['view_mode'] = $view_mode;
     }
     else {
diff --git a/core/lib/Drupal/Core/Entity/EntityAccessCheck.php b/core/lib/Drupal/Core/Entity/EntityAccessCheck.php
index 8ca8cf66cded..9d44998f2f47 100644
--- a/core/lib/Drupal/Core/Entity/EntityAccessCheck.php
+++ b/core/lib/Drupal/Core/Entity/EntityAccessCheck.php
@@ -56,7 +56,7 @@ class EntityAccessCheck implements AccessInterface {
   public function access(Route $route, RouteMatchInterface $route_match, AccountInterface $account) {
     // Split the entity type and the operation.
     $requirement = $route->getRequirement('_entity_access');
-    list($entity_type, $operation) = explode('.', $requirement);
+    [$entity_type, $operation] = explode('.', $requirement);
     // If $entity_type parameter is a valid entity, call its own access check.
     $parameters = $route_match->getParameters();
     if ($parameters->has($entity_type)) {
diff --git a/core/lib/Drupal/Core/Entity/EntityBundleAccessCheck.php b/core/lib/Drupal/Core/Entity/EntityBundleAccessCheck.php
index 8f1928567798..f43f7bb80620 100644
--- a/core/lib/Drupal/Core/Entity/EntityBundleAccessCheck.php
+++ b/core/lib/Drupal/Core/Entity/EntityBundleAccessCheck.php
@@ -42,7 +42,7 @@ class EntityBundleAccessCheck implements AccessInterface {
   public function access(Route $route, RouteMatchInterface $route_match, AccountInterface $account) {
     @trigger_error('The ' . __NAMESPACE__ . '\EntityBundleAccessCheck is deprecated in drupal:9.2.0 and is removed from drupal:10.0.0. Specify the list of bundles in the entity parameter, under "bundle" key, as a sequence, instead. See https://www.drupal.org/node/3155569', E_USER_DEPRECATED);
     if ($route->hasRequirement('_entity_bundles')) {
-      list($entity_type, $bundle_definition) = explode(':', $route->getRequirement('_entity_bundles'));
+      [$entity_type, $bundle_definition] = explode(':', $route->getRequirement('_entity_bundles'));
       $bundles = explode('|', $bundle_definition);
       $parameters = $route_match->getParameters();
       if ($parameters->has($entity_type)) {
diff --git a/core/lib/Drupal/Core/Entity/EntityConstraintViolationList.php b/core/lib/Drupal/Core/Entity/EntityConstraintViolationList.php
index 6081a8de1683..aaa26ecfc708 100644
--- a/core/lib/Drupal/Core/Entity/EntityConstraintViolationList.php
+++ b/core/lib/Drupal/Core/Entity/EntityConstraintViolationList.php
@@ -64,7 +64,7 @@ protected function groupViolationOffsets() {
       foreach ($this as $offset => $violation) {
         if ($path = $violation->getPropertyPath()) {
           // An example of $path might be 'title.0.value'.
-          list($field_name) = explode('.', $path, 2);
+          [$field_name] = explode('.', $path, 2);
           if ($this->entity->hasField($field_name)) {
             $this->violationOffsetsByField[$field_name][$offset] = $offset;
           }
diff --git a/core/lib/Drupal/Core/Entity/EntityCreateAccessCheck.php b/core/lib/Drupal/Core/Entity/EntityCreateAccessCheck.php
index 233285e09042..25566ba4bf64 100644
--- a/core/lib/Drupal/Core/Entity/EntityCreateAccessCheck.php
+++ b/core/lib/Drupal/Core/Entity/EntityCreateAccessCheck.php
@@ -51,7 +51,7 @@ public function __construct(EntityTypeManagerInterface $entity_type_manager) {
    *   The access result.
    */
   public function access(Route $route, RouteMatchInterface $route_match, AccountInterface $account) {
-    list($entity_type, $bundle) = explode(':', $route->getRequirement($this->requirementsKey) . ':');
+    [$entity_type, $bundle] = explode(':', $route->getRequirement($this->requirementsKey) . ':');
 
     // The bundle argument can contain request argument placeholders like
     // {name}, loop over the raw variables and attempt to replace them in the
diff --git a/core/lib/Drupal/Core/Entity/EntityDisplayRepository.php b/core/lib/Drupal/Core/Entity/EntityDisplayRepository.php
index 972a883840a9..571c978753ae 100644
--- a/core/lib/Drupal/Core/Entity/EntityDisplayRepository.php
+++ b/core/lib/Drupal/Core/Entity/EntityDisplayRepository.php
@@ -112,7 +112,7 @@ protected function getAllDisplayModesByEntityType($display_type) {
       else {
         $this->displayModeInfo[$display_type] = [];
         foreach ($this->entityTypeManager->getStorage($entity_type_id)->loadMultiple() as $display_mode) {
-          list($display_mode_entity_type, $display_mode_name) = explode('.', $display_mode->id(), 2);
+          [$display_mode_entity_type, $display_mode_name] = explode('.', $display_mode->id(), 2);
           $this->displayModeInfo[$display_type][$display_mode_entity_type][$display_mode_name] = $display_mode->toArray();
         }
         $this->moduleHandler->alter($key, $this->displayModeInfo[$display_type]);
diff --git a/core/lib/Drupal/Core/Entity/EntityResolverManager.php b/core/lib/Drupal/Core/Entity/EntityResolverManager.php
index 25cb70c33505..23fcebdf80e0 100644
--- a/core/lib/Drupal/Core/Entity/EntityResolverManager.php
+++ b/core/lib/Drupal/Core/Entity/EntityResolverManager.php
@@ -95,7 +95,7 @@ protected function getControllerClass(array $defaults) {
       // service. This is dangerous as the controller could depend on services
       // that could not exist at this point. There is however no other way to
       // do it, as the container does not allow static introspection.
-      list($class_or_service, $method) = explode(':', $controller, 2);
+      [$class_or_service, $method] = explode(':', $controller, 2);
       return [$this->classResolver->getInstanceFromDefinition($class_or_service), $method];
     }
     elseif (strpos($controller, '::') !== FALSE) {
@@ -124,7 +124,7 @@ protected function setParametersFromReflection($controller, Route $route) {
     $result = FALSE;
 
     if (is_array($controller)) {
-      list($instance, $method) = $controller;
+      [$instance, $method] = $controller;
       $reflection = new \ReflectionMethod($instance, $method);
     }
     else {
@@ -166,10 +166,10 @@ protected function setParametersFromReflection($controller, Route $route) {
    */
   protected function setParametersFromEntityInformation(Route $route) {
     if ($entity_view = $route->getDefault('_entity_view')) {
-      list($entity_type) = explode('.', $entity_view, 2);
+      [$entity_type] = explode('.', $entity_view, 2);
     }
     elseif ($entity_form = $route->getDefault('_entity_form')) {
-      list($entity_type) = explode('.', $entity_form, 2);
+      [$entity_type] = explode('.', $entity_form, 2);
     }
 
     // Do not add parameter information if the route does not declare a
@@ -183,7 +183,7 @@ protected function setParametersFromEntityInformation(Route $route) {
       foreach ($parameter_definitions as $info) {
         if (isset($info['type']) && (strpos($info['type'], 'entity:') === 0)) {
           // The parameter types are in the form 'entity:$entity_type'.
-          list(, $parameter_entity_type) = explode(':', $info['type'], 2);
+          [, $parameter_entity_type] = explode(':', $info['type'], 2);
           if ($parameter_entity_type == $entity_type) {
             return;
           }
diff --git a/core/lib/Drupal/Core/Entity/HtmlEntityFormController.php b/core/lib/Drupal/Core/Entity/HtmlEntityFormController.php
index f431bc17c0a5..fd4db8439e60 100644
--- a/core/lib/Drupal/Core/Entity/HtmlEntityFormController.php
+++ b/core/lib/Drupal/Core/Entity/HtmlEntityFormController.php
@@ -64,7 +64,7 @@ protected function getFormArgument(RouteMatchInterface $route_match) {
   protected function getFormObject(RouteMatchInterface $route_match, $form_arg) {
     // If no operation is provided, use 'default'.
     $form_arg .= '.default';
-    list ($entity_type_id, $operation) = explode('.', $form_arg);
+    [$entity_type_id, $operation] = explode('.', $form_arg);
 
     $form_object = $this->entityTypeManager->getFormObject($entity_type_id, $operation);
 
diff --git a/core/lib/Drupal/Core/Entity/Query/Sql/QueryAggregate.php b/core/lib/Drupal/Core/Entity/Query/Sql/QueryAggregate.php
index 2e2d7a01c1a2..03e00ef45102 100644
--- a/core/lib/Drupal/Core/Entity/Query/Sql/QueryAggregate.php
+++ b/core/lib/Drupal/Core/Entity/Query/Sql/QueryAggregate.php
@@ -104,7 +104,7 @@ protected function addGroupBy() {
       $field = $group_by['field'];
       $sql_field = $this->getSqlField($field, $group_by['langcode']);
       $this->sqlGroupBy[$sql_field] = $sql_field;
-      list($table, $real_sql_field) = explode('.', $sql_field);
+      [$table, $real_sql_field] = explode('.', $sql_field);
       $this->sqlFields[$sql_field] = [$table, $real_sql_field, $this->createSqlAlias($field, $real_sql_field)];
     }
 
diff --git a/core/lib/Drupal/Core/Entity/Query/Sql/Tables.php b/core/lib/Drupal/Core/Entity/Query/Sql/Tables.php
index 5eb10f86a2bb..43b7be38a3ad 100644
--- a/core/lib/Drupal/Core/Entity/Query/Sql/Tables.php
+++ b/core/lib/Drupal/Core/Entity/Query/Sql/Tables.php
@@ -284,7 +284,7 @@ public function addField($field, $type, $langcode) {
         // Relationship specifier can also contain the entity type ID, i.e.
         // entity:node, entity:user or entity:taxonomy.
         if (strpos($relationship_specifier, ':') !== FALSE) {
-          list($relationship_specifier, $entity_type_id) = explode(':', $relationship_specifier, 2);
+          [$relationship_specifier, $entity_type_id] = explode(':', $relationship_specifier, 2);
         }
         // Check for a valid relationship.
         if (isset($propertyDefinitions[$relationship_specifier]) && $propertyDefinitions[$relationship_specifier] instanceof DataReferenceDefinitionInterface) {
diff --git a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php
index 9f53bd7c6726..1390593498af 100644
--- a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php
+++ b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php
@@ -1144,7 +1144,7 @@ protected function getFieldSchemaData($field_name, array $field_schema, array $c
         // Allow for indexes and unique keys to specified as an array of column
         // name and length.
         if (is_array($column)) {
-          list($column_name, $length) = $column;
+          [$column_name, $length] = $column;
           $data[$real_key][] = [$column_mapping[$column_name], $length];
         }
         else {
diff --git a/core/lib/Drupal/Core/EventSubscriber/ConfigImportSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/ConfigImportSubscriber.php
index 906dab45deb9..99b933754d0f 100644
--- a/core/lib/Drupal/Core/EventSubscriber/ConfigImportSubscriber.php
+++ b/core/lib/Drupal/Core/EventSubscriber/ConfigImportSubscriber.php
@@ -227,7 +227,7 @@ protected function validateDependencies(ConfigImporter $config_importer) {
     foreach ($config_importer->getStorageComparer()->getSourceStorage()->listAll() as $name) {
       // Ensure that the config owner is installed. This checks all
       // configuration including configuration entities.
-      list($owner,) = explode('.', $name, 2);
+      [$owner] = explode('.', $name, 2);
       if ($owner !== 'core') {
         $message = FALSE;
         if (!isset($core_extension['module'][$owner]) && isset($module_data[$owner])) {
diff --git a/core/lib/Drupal/Core/EventSubscriber/ResponseGeneratorSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/ResponseGeneratorSubscriber.php
index bf45269588ab..2b5c1461a99b 100644
--- a/core/lib/Drupal/Core/EventSubscriber/ResponseGeneratorSubscriber.php
+++ b/core/lib/Drupal/Core/EventSubscriber/ResponseGeneratorSubscriber.php
@@ -25,7 +25,7 @@ public function onRespond(ResponseEvent $event) {
     $response = $event->getResponse();
 
     // Set the generator in the HTTP header.
-    list($version) = explode('.', \Drupal::VERSION, 2);
+    [$version] = explode('.', \Drupal::VERSION, 2);
     $response->headers->set('X-Generator', 'Drupal ' . $version . ' (https://www.drupal.org)');
   }
 
diff --git a/core/lib/Drupal/Core/Extension/Dependency.php b/core/lib/Drupal/Core/Extension/Dependency.php
index da36f612a8e9..42caa67df35d 100644
--- a/core/lib/Drupal/Core/Extension/Dependency.php
+++ b/core/lib/Drupal/Core/Extension/Dependency.php
@@ -124,7 +124,7 @@ public function isCompatible($version) {
    */
   public static function createFromString($dependency) {
     if (strpos($dependency, ':') !== FALSE) {
-      list($project, $dependency) = explode(':', $dependency);
+      [$project, $dependency] = explode(':', $dependency);
     }
     else {
       $project = '';
diff --git a/core/lib/Drupal/Core/Layout/LayoutPluginManager.php b/core/lib/Drupal/Core/Layout/LayoutPluginManager.php
index 12d740350918..4d211aaefdba 100644
--- a/core/lib/Drupal/Core/Layout/LayoutPluginManager.php
+++ b/core/lib/Drupal/Core/Layout/LayoutPluginManager.php
@@ -117,7 +117,7 @@ public function processDefinition(&$definition, $plugin_id) {
     // Add a dependency on the provider of the library.
     if ($library = $definition->getLibrary()) {
       $config_dependencies = $definition->getConfigDependencies();
-      list($library_provider) = explode('/', $library, 2);
+      [$library_provider] = explode('/', $library, 2);
       if ($this->moduleHandler->moduleExists($library_provider)) {
         $config_dependencies['module'][] = $library_provider;
       }
diff --git a/core/lib/Drupal/Core/Mail/MailFormatHelper.php b/core/lib/Drupal/Core/Mail/MailFormatHelper.php
index 12b956ceac2f..42468cbbf8b3 100644
--- a/core/lib/Drupal/Core/Mail/MailFormatHelper.php
+++ b/core/lib/Drupal/Core/Mail/MailFormatHelper.php
@@ -153,7 +153,7 @@ public static function htmlToText($string, $allowed_tags = NULL) {
 
       // Process HTML tags (but don't output any literally).
       if ($tag) {
-        list($tagname) = explode(' ', strtolower($value), 2);
+        [$tagname] = explode(' ', strtolower($value), 2);
         switch ($tagname) {
           // List counters.
           case 'ul':
@@ -334,7 +334,7 @@ protected static function htmlToMailUrls($match = NULL, $reset = FALSE) {
         static::$regexp = '@^' . preg_quote($base_path, '@') . '@';
       }
       if ($match) {
-        list(, , $url, $label) = $match;
+        [, , $url, $label] = $match;
         // Ensure all URLs are absolute.
         static::$urls[] = strpos($url, '://') ? $url : preg_replace(static::$regexp, $base_url . '/', $url);
         return $label . ' [' . count(static::$urls) . ']';
diff --git a/core/lib/Drupal/Core/Menu/Form/MenuLinkDefaultForm.php b/core/lib/Drupal/Core/Menu/Form/MenuLinkDefaultForm.php
index 98969910bd7d..36b91f6b3c20 100644
--- a/core/lib/Drupal/Core/Menu/Form/MenuLinkDefaultForm.php
+++ b/core/lib/Drupal/Core/Menu/Form/MenuLinkDefaultForm.php
@@ -158,7 +158,7 @@ public function extractFormValues(array &$form, FormStateInterface $form_state)
     $new_definition['enabled'] = $form_state->getValue('enabled') ? 1 : 0;
     $new_definition['weight'] = (int) $form_state->getValue('weight');
     $new_definition['expanded'] = $form_state->getValue('expanded') ? 1 : 0;
-    list($menu_name, $parent) = explode(':', $form_state->getValue('menu_parent'), 2);
+    [$menu_name, $parent] = explode(':', $form_state->getValue('menu_parent'), 2);
     if (!empty($menu_name)) {
       $new_definition['menu_name'] = $menu_name;
     }
diff --git a/core/lib/Drupal/Core/Menu/MenuParentFormSelector.php b/core/lib/Drupal/Core/Menu/MenuParentFormSelector.php
index dce990323615..ecae57c7cd36 100644
--- a/core/lib/Drupal/Core/Menu/MenuParentFormSelector.php
+++ b/core/lib/Drupal/Core/Menu/MenuParentFormSelector.php
@@ -88,7 +88,7 @@ public function parentSelectElement($menu_parent, $id = '', array $menus = NULL)
       if (!isset($options[$menu_parent])) {
         // The requested menu parent cannot be found in the menu anymore. Try
         // setting it to the top level in the current menu.
-        list($menu_name, $parent) = explode(':', $menu_parent, 2);
+        [$menu_name, $parent] = explode(':', $menu_parent, 2);
         $menu_parent = $menu_name . ':';
       }
       if (isset($options[$menu_parent])) {
diff --git a/core/lib/Drupal/Core/Plugin/Context/LazyContextRepository.php b/core/lib/Drupal/Core/Plugin/Context/LazyContextRepository.php
index d805354af624..68c7d6ffaa9e 100644
--- a/core/lib/Drupal/Core/Plugin/Context/LazyContextRepository.php
+++ b/core/lib/Drupal/Core/Plugin/Context/LazyContextRepository.php
@@ -63,7 +63,7 @@ public function getRuntimeContexts(array $context_ids) {
       // @todo Convert to an assert once https://www.drupal.org/node/2408013 is
       //   in.
       if ($id[0] === '@' && strpos($id, ':') !== FALSE) {
-        list($service_id, $unqualified_context_id) = explode(':', $id, 2);
+        [$service_id, $unqualified_context_id] = explode(':', $id, 2);
         // Remove the leading '@'.
         $service_id = substr($service_id, 1);
       }
diff --git a/core/lib/Drupal/Core/Render/HtmlResponseAttachmentsProcessor.php b/core/lib/Drupal/Core/Render/HtmlResponseAttachmentsProcessor.php
index 950eb68ae685..7df92bdb6db6 100644
--- a/core/lib/Drupal/Core/Render/HtmlResponseAttachmentsProcessor.php
+++ b/core/lib/Drupal/Core/Render/HtmlResponseAttachmentsProcessor.php
@@ -316,7 +316,7 @@ protected function processAssetLibraries(AttachedAssetsInterface $assets, array
     if (isset($placeholders['scripts']) || isset($placeholders['scripts_bottom'])) {
       // Optimize JS if necessary, but only during normal site operation.
       $optimize_js = !defined('MAINTENANCE_MODE') && !\Drupal::state()->get('system.maintenance_mode') && $this->config->get('js.preprocess');
-      list($js_assets_header, $js_assets_footer) = $this->assetResolver->getJsAssets($assets, $optimize_js);
+      [$js_assets_header, $js_assets_footer] = $this->assetResolver->getJsAssets($assets, $optimize_js);
       $variables['scripts'] = $this->jsCollectionRenderer->render($js_assets_header);
       $variables['scripts_bottom'] = $this->jsCollectionRenderer->render($js_assets_footer);
     }
@@ -393,7 +393,7 @@ protected function setHeaders(HtmlResponse $response, array $headers) {
   protected function processHtmlHead(array $html_head) {
     $head = [];
     foreach ($html_head as $item) {
-      list($data, $key) = $item;
+      [$data, $key] = $item;
       if (!isset($data['#type'])) {
         $data['#type'] = 'html_tag';
       }
diff --git a/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php b/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php
index fe1890f57ddd..09d946d22f6d 100644
--- a/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php
+++ b/core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php
@@ -129,7 +129,7 @@ public function __construct(TitleResolverInterface $title_resolver, PluginManage
    * The entire HTML: takes a #type 'page' and wraps it in a #type 'html'.
    */
   public function renderResponse(array $main_content, Request $request, RouteMatchInterface $route_match) {
-    list($page, $title) = $this->prepare($main_content, $request, $route_match);
+    [$page, $title] = $this->prepare($main_content, $request, $route_match);
 
     if (!isset($page['#type']) || $page['#type'] !== 'page') {
       throw new \LogicException('Must be #type page');
diff --git a/core/lib/Drupal/Core/Security/DoTrustedCallbackTrait.php b/core/lib/Drupal/Core/Security/DoTrustedCallbackTrait.php
index 5b37ea9bd44e..31900041ca44 100644
--- a/core/lib/Drupal/Core/Security/DoTrustedCallbackTrait.php
+++ b/core/lib/Drupal/Core/Security/DoTrustedCallbackTrait.php
@@ -53,10 +53,10 @@ public function doTrustedCallback(callable $callback, array $args, $message, $er
     $safe_callback = FALSE;
 
     if (is_array($callback)) {
-      list($object_or_classname, $method_name) = $callback;
+      [$object_or_classname, $method_name] = $callback;
     }
     elseif (is_string($callback) && strpos($callback, '::') !== FALSE) {
-      list($object_or_classname, $method_name) = explode('::', $callback, 2);
+      [$object_or_classname, $method_name] = explode('::', $callback, 2);
     }
 
     if (isset($method_name)) {
diff --git a/core/lib/Drupal/Core/StreamWrapper/LocalStream.php b/core/lib/Drupal/Core/StreamWrapper/LocalStream.php
index 5778e6f98989..b4430966847d 100644
--- a/core/lib/Drupal/Core/StreamWrapper/LocalStream.php
+++ b/core/lib/Drupal/Core/StreamWrapper/LocalStream.php
@@ -87,7 +87,7 @@ protected function getTarget($uri = NULL) {
       $uri = $this->uri;
     }
 
-    list(, $target) = explode('://', $uri, 2);
+    [, $target] = explode('://', $uri, 2);
 
     // Remove erroneous leading or trailing, forward-slashes and backslashes.
     return trim($target, '\/');
@@ -315,7 +315,7 @@ public function rename($from_uri, $to_uri) {
    * {@inheritdoc}
    */
   public function dirname($uri = NULL) {
-    list($scheme) = explode('://', $uri, 2);
+    [$scheme] = explode('://', $uri, 2);
     $target = $this->getTarget($uri);
     $dirname = dirname($target);
 
diff --git a/core/lib/Drupal/Core/Template/TwigNodeTrans.php b/core/lib/Drupal/Core/Template/TwigNodeTrans.php
index e581fa9c2bbc..135593793597 100644
--- a/core/lib/Drupal/Core/Template/TwigNodeTrans.php
+++ b/core/lib/Drupal/Core/Template/TwigNodeTrans.php
@@ -50,11 +50,11 @@ public function __construct(Node $body, Node $plural = NULL, AbstractExpression
   public function compile(Compiler $compiler) {
     $compiler->addDebugInfo($this);
 
-    list($singular, $tokens) = $this->compileString($this->getNode('body'));
+    [$singular, $tokens] = $this->compileString($this->getNode('body'));
     $plural = NULL;
 
     if ($this->hasNode('plural')) {
-      list($plural, $pluralTokens) = $this->compileString($this->getNode('plural'));
+      [$plural, $pluralTokens] = $this->compileString($this->getNode('plural'));
       $tokens = array_merge($tokens, $pluralTokens);
     }
 
diff --git a/core/lib/Drupal/Core/Test/TestDiscovery.php b/core/lib/Drupal/Core/Test/TestDiscovery.php
index cdcc1eeda7f8..1b12a47c7c65 100644
--- a/core/lib/Drupal/Core/Test/TestDiscovery.php
+++ b/core/lib/Drupal/Core/Test/TestDiscovery.php
@@ -439,7 +439,7 @@ public static function parseTestClassAnnotations(\ReflectionClass $class) {
     // @see https://www.drupal.org/node/1273478
     if (isset($annotations['requires'])) {
       foreach ($annotations['requires'] as $i => $value) {
-        list($type, $value) = explode(' ', $value, 2);
+        [$type, $value] = explode(' ', $value, 2);
         if ($type === 'module') {
           $annotations['requires']['module'][$value] = $value;
           unset($annotations['requires'][$i]);
diff --git a/core/lib/Drupal/Core/Theme/Registry.php b/core/lib/Drupal/Core/Theme/Registry.php
index 2a4e8d95f131..98d596a7804e 100644
--- a/core/lib/Drupal/Core/Theme/Registry.php
+++ b/core/lib/Drupal/Core/Theme/Registry.php
@@ -724,7 +724,7 @@ protected function postProcessExtension(array &$cache, ActiveTheme $theme) {
     // have matching hooks in the registry.
     foreach ($prefixes as $prefix) {
       // Grep only the functions which are within the prefix group.
-      list($first_prefix,) = explode('_', $prefix, 2);
+      [$first_prefix] = explode('_', $prefix, 2);
       if (!isset($grouped_functions[$first_prefix])) {
         continue;
       }
@@ -836,7 +836,7 @@ public function getPrefixGroupedUserFunctions($prefixes = []) {
     $grouped_functions = [];
     // Splitting user defined functions into groups by the first prefix.
     foreach ($theme_functions as $function) {
-      list($first_prefix,) = explode('_', $function, 2);
+      [$first_prefix] = explode('_', $function, 2);
       $grouped_functions[$first_prefix][] = $function;
     }
 
diff --git a/core/lib/Drupal/Core/Update/UpdateRegistry.php b/core/lib/Drupal/Core/Update/UpdateRegistry.php
index 8b3f03ea24ef..5d55e89466a3 100644
--- a/core/lib/Drupal/Core/Update/UpdateRegistry.php
+++ b/core/lib/Drupal/Core/Update/UpdateRegistry.php
@@ -205,7 +205,7 @@ public function getPendingUpdateInformation() {
 
     $ret = [];
     foreach ($functions as $function) {
-      list($module, $update) = explode("_{$this->updateType}_", $function);
+      [$module, $update] = explode("_{$this->updateType}_", $function);
       // The description for an update comes from its Doxygen.
       $func = new \ReflectionFunction($function);
       $description = trim(str_replace(["\n", '*', '/'], '', $func->getDocComment()), ' ');
@@ -247,7 +247,7 @@ public function getModuleUpdateFunctions($module_name) {
     $all_functions = $this->getAvailableUpdateFunctions();
 
     return array_filter($all_functions, function ($function_name) use ($module_name) {
-      list($function_module_name,) = explode("_{$this->updateType}_", $function_name);
+      [$function_module_name] = explode("_{$this->updateType}_", $function_name);
       return $function_module_name === $module_name;
     });
   }
diff --git a/core/lib/Drupal/Core/Url.php b/core/lib/Drupal/Core/Url.php
index 776a8f778ad8..226ab436e022 100644
--- a/core/lib/Drupal/Core/Url.php
+++ b/core/lib/Drupal/Core/Url.php
@@ -349,7 +349,7 @@ public static function fromUri($uri, $options = []) {
    *   Thrown if the entity URI is invalid.
    */
   protected static function fromEntityUri(array $uri_parts, array $options, $uri) {
-    list($entity_type_id, $entity_id) = explode('/', $uri_parts['path'], 2);
+    [$entity_type_id, $entity_id] = explode('/', $uri_parts['path'], 2);
     if ($uri_parts['scheme'] != 'entity' || $entity_id === '') {
       throw new \InvalidArgumentException("The entity URI '$uri' is invalid. You must specify the entity id in the URL. e.g., entity:node/1 for loading the canonical path to node entity with id 1.");
     }
diff --git a/core/modules/big_pipe/src/Render/BigPipe.php b/core/modules/big_pipe/src/Render/BigPipe.php
index 53e4424984c0..133c86534eb5 100644
--- a/core/modules/big_pipe/src/Render/BigPipe.php
+++ b/core/modules/big_pipe/src/Render/BigPipe.php
@@ -330,7 +330,7 @@ protected function sendPreBody($pre_body, array $no_js_placeholders, AttachedAss
     // Extract the scripts_bottom markup: the no-JS BigPipe placeholders that we
     // will render may attach additional asset libraries, and if so, it will be
     // necessary to re-render scripts_bottom.
-    list($pre_scripts_bottom, $scripts_bottom, $post_scripts_bottom) = explode('<drupal-big-pipe-scripts-bottom-marker>', $pre_body, 3);
+    [$pre_scripts_bottom, $scripts_bottom, $post_scripts_bottom] = explode('<drupal-big-pipe-scripts-bottom-marker>', $pre_body, 3);
     $cumulative_assets_initial = clone $cumulative_assets;
 
     $this->sendNoJsPlaceholders($pre_scripts_bottom . $post_scripts_bottom, $no_js_placeholders, $cumulative_assets);
diff --git a/core/modules/block/src/Plugin/migrate/process/BlockPluginId.php b/core/modules/block/src/Plugin/migrate/process/BlockPluginId.php
index bfe4612b8b15..1e471a2cf72b 100644
--- a/core/modules/block/src/Plugin/migrate/process/BlockPluginId.php
+++ b/core/modules/block/src/Plugin/migrate/process/BlockPluginId.php
@@ -73,10 +73,10 @@ public static function create(ContainerInterface $container, array $configuratio
    */
   public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
     if (is_array($value)) {
-      list($module, $delta) = $value;
+      [$module, $delta] = $value;
       switch ($module) {
         case 'aggregator':
-          list($type, $id) = explode('-', $delta);
+          [$type, $id] = explode('-', $delta);
           if ($type == 'feed') {
             return 'aggregator_feed_block';
           }
diff --git a/core/modules/block/src/Plugin/migrate/process/BlockRegion.php b/core/modules/block/src/Plugin/migrate/process/BlockRegion.php
index 0eb984fd20c6..cd79f051bcbe 100644
--- a/core/modules/block/src/Plugin/migrate/process/BlockRegion.php
+++ b/core/modules/block/src/Plugin/migrate/process/BlockRegion.php
@@ -56,7 +56,7 @@ public static function create(ContainerInterface $container, array $configuratio
   public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
     // Set the destination region, based on the source region and theme as well
     // as the current destination default theme.
-    list($source_theme, $destination_theme, $region) = $value;
+    [$source_theme, $destination_theme, $region] = $value;
 
     // Theme is the same on both source and destination, so ensure that the
     // region exists in the destination theme.
diff --git a/core/modules/block/src/Plugin/migrate/process/BlockSettings.php b/core/modules/block/src/Plugin/migrate/process/BlockSettings.php
index 5083f629d997..09c30b1f2cbe 100644
--- a/core/modules/block/src/Plugin/migrate/process/BlockSettings.php
+++ b/core/modules/block/src/Plugin/migrate/process/BlockSettings.php
@@ -22,7 +22,7 @@ class BlockSettings extends ProcessPluginBase {
    * Set the block configuration.
    */
   public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
-    list($plugin, $delta, $old_settings, $title) = $value;
+    [$plugin, $delta, $old_settings, $title] = $value;
     $settings = [];
     $settings['label'] = $title;
     if ($title && $title !== '<none>') {
@@ -33,7 +33,7 @@ public function transform($value, MigrateExecutableInterface $migrate_executable
     }
     switch ($plugin) {
       case 'aggregator_feed_block':
-        list(, $id) = explode('-', $delta);
+        [, $id] = explode('-', $delta);
         $settings['block_count'] = $old_settings['aggregator']['item_count'];
         $settings['feed'] = $id;
         break;
diff --git a/core/modules/block/src/Plugin/migrate/process/BlockTheme.php b/core/modules/block/src/Plugin/migrate/process/BlockTheme.php
index fe6ae2ce3743..408f83be67e5 100644
--- a/core/modules/block/src/Plugin/migrate/process/BlockTheme.php
+++ b/core/modules/block/src/Plugin/migrate/process/BlockTheme.php
@@ -71,7 +71,7 @@ public static function create(ContainerInterface $container, array $configuratio
    * {@inheritdoc}
    */
   public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
-    list($theme, $default_theme, $admin_theme) = $value;
+    [$theme, $default_theme, $admin_theme] = $value;
 
     // If the source theme exists on the destination, we're good.
     if (isset($this->themes[$theme])) {
diff --git a/core/modules/block/src/Plugin/migrate/process/BlockVisibility.php b/core/modules/block/src/Plugin/migrate/process/BlockVisibility.php
index 45e4d4e7fb60..4d7b19cd55f6 100644
--- a/core/modules/block/src/Plugin/migrate/process/BlockVisibility.php
+++ b/core/modules/block/src/Plugin/migrate/process/BlockVisibility.php
@@ -82,7 +82,7 @@ public static function create(ContainerInterface $container, array $configuratio
    * {@inheritdoc}
    */
   public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
-    list($old_visibility, $pages, $roles) = $value;
+    [$old_visibility, $pages, $roles] = $value;
 
     $visibility = [];
 
diff --git a/core/modules/block/src/Plugin/migrate/source/Block.php b/core/modules/block/src/Plugin/migrate/source/Block.php
index a6bc1313be20..de6060c968d5 100644
--- a/core/modules/block/src/Plugin/migrate/source/Block.php
+++ b/core/modules/block/src/Plugin/migrate/source/Block.php
@@ -135,7 +135,7 @@ public function prepareRow(Row $row) {
     $settings = [];
     switch ($module) {
       case 'aggregator':
-        list($type, $id) = explode('-', $delta);
+        [$type, $id] = explode('-', $delta);
         if ($type == 'feed') {
           $item_count = $this->select('aggregator_feed', 'af')
             ->fields('af', ['block'])
diff --git a/core/modules/block/tests/src/Functional/BlockTest.php b/core/modules/block/tests/src/Functional/BlockTest.php
index 86e705fd95ff..5beff98efcea 100644
--- a/core/modules/block/tests/src/Functional/BlockTest.php
+++ b/core/modules/block/tests/src/Functional/BlockTest.php
@@ -169,7 +169,7 @@ public function testAddBlockFromLibraryWithWeight() {
       $this->assertSession()->elementTextEquals('xpath', $xpath, 'Place block');
 
       $link = $this->getSession()->getPage()->find('xpath', $xpath);
-      list($path, $query_string) = explode('?', $link->getAttribute('href'), 2);
+      [$path, $query_string] = explode('?', $link->getAttribute('href'), 2);
       parse_str($query_string, $query_parts);
       $this->assertEquals($weight, $query_parts['weight'], 'Found the expected weight query string.');
 
diff --git a/core/modules/ckeditor/src/Plugin/CKEditorPlugin/Internal.php b/core/modules/ckeditor/src/Plugin/CKEditorPlugin/Internal.php
index 135cdee2902f..5c2dce25b6b4 100644
--- a/core/modules/ckeditor/src/Plugin/CKEditorPlugin/Internal.php
+++ b/core/modules/ckeditor/src/Plugin/CKEditorPlugin/Internal.php
@@ -112,7 +112,7 @@ public function getConfig(Editor $editor) {
 
     // Add the allowedContent setting, which ensures CKEditor only allows tags
     // and attributes that are allowed by the text format for this text editor.
-    list($config['allowedContent'], $config['disallowedContent']) = $this->generateACFSettings($editor);
+    [$config['allowedContent'], $config['disallowedContent']] = $this->generateACFSettings($editor);
 
     // Add the format_tags setting, if its button is enabled.
     $toolbar_buttons = CKEditorPluginManager::getEnabledButtons($editor);
diff --git a/core/modules/ckeditor/src/Plugin/CKEditorPlugin/StylesCombo.php b/core/modules/ckeditor/src/Plugin/CKEditorPlugin/StylesCombo.php
index c6d4df3a4d83..e35c5ac1f51d 100644
--- a/core/modules/ckeditor/src/Plugin/CKEditorPlugin/StylesCombo.php
+++ b/core/modules/ckeditor/src/Plugin/CKEditorPlugin/StylesCombo.php
@@ -146,7 +146,7 @@ protected function generateStylesSetSetting($styles) {
       }
 
       // Parse.
-      list($selector, $label) = explode('|', $style);
+      [$selector, $label] = explode('|', $style);
       $classes = explode('.', $selector);
       $element = array_shift($classes);
 
diff --git a/core/modules/ckeditor/tests/src/Functional/CKEditorLoadingTest.php b/core/modules/ckeditor/tests/src/Functional/CKEditorLoadingTest.php
index e485efe98d6a..eb56fc722017 100644
--- a/core/modules/ckeditor/tests/src/Functional/CKEditorLoadingTest.php
+++ b/core/modules/ckeditor/tests/src/Functional/CKEditorLoadingTest.php
@@ -93,7 +93,7 @@ public function testLoading() {
     // - doesn't have access to the filtered_html text format, so: no text editor.
     $this->drupalLogin($this->untrustedUser);
     $this->drupalGet('node/add/article');
-    list($settings, $editor_settings_present, $editor_js_present) = $this->getThingsToCheck();
+    [$settings, $editor_settings_present, $editor_js_present] = $this->getThingsToCheck();
     $this->assertFalse($editor_settings_present, 'No Text Editor module settings.');
     $this->assertFalse($editor_js_present, 'No Text Editor JavaScript.');
     $this->assertSession()->fieldExists('edit-body-0-value');
@@ -112,7 +112,7 @@ public function testLoading() {
     // - does have access to the filtered_html text format, so: CKEditor.
     $this->drupalLogin($this->normalUser);
     $this->drupalGet('node/add/article');
-    list($settings, $editor_settings_present, $editor_js_present) = $this->getThingsToCheck();
+    [$settings, $editor_settings_present, $editor_js_present] = $this->getThingsToCheck();
     $ckeditor_plugin = $this->container->get('plugin.manager.editor')->createInstance('ckeditor');
     $editor = Editor::load('filtered_html');
     $expected = [
@@ -149,7 +149,7 @@ public function testLoading() {
     $editor->setSettings($editor_settings);
     $editor->save();
     $this->drupalGet('node/add/article');
-    list($settings, $editor_settings_present, $editor_js_present) = $this->getThingsToCheck();
+    [$settings, $editor_settings_present, $editor_js_present] = $this->getThingsToCheck();
     $expected = [
       'formats' => [
         'filtered_html' => [
diff --git a/core/modules/color/color.module b/core/modules/color/color.module
index bc6880e2bce8..8a8aa5e1b41c 100644
--- a/core/modules/color/color.module
+++ b/core/modules/color/color.module
@@ -393,7 +393,7 @@ function color_scheme_form_submit($form, FormStateInterface $form_state) {
   if (isset($info['base_image'])) {
     // Fetch source image dimensions.
     $source = \Drupal::service('extension.list.theme')->getPath($theme) . '/' . $info['base_image'];
-    list($width, $height) = getimagesize($source);
+    [$width, $height] = getimagesize($source);
 
     // We need at least a copy of the source and a target buffer of the same
     // size (both at 32bpp).
@@ -523,7 +523,7 @@ function _color_rewrite_stylesheet($theme, &$info, &$paths, $palette, $style) {
   // Split off the "Don't touch" section of the stylesheet.
   $split = "Color Module: Don't touch";
   if (strpos($style, $split) !== FALSE) {
-    list($style, $fixed) = explode($split, $style);
+    [$style, $fixed] = explode($split, $style);
   }
 
   // Find all colors in the stylesheet and the chunks in between.
@@ -637,7 +637,7 @@ function _color_render_images($theme, &$info, &$paths, $palette) {
 
   // Cut out slices.
   foreach ($info['slices'] as $file => $coord) {
-    list($x, $y, $width, $height) = $coord;
+    [$x, $y, $width, $height] = $coord;
     /** @var \Drupal\Core\File\FileSystemInterface $file_system */
     $file_system = \Drupal::service('file_system');
     $base = $file_system->basename($file);
diff --git a/core/modules/content_moderation/src/Plugin/views/filter/ModerationStateFilter.php b/core/modules/content_moderation/src/Plugin/views/filter/ModerationStateFilter.php
index 42b91bd93cb5..0dfbe3d865d8 100644
--- a/core/modules/content_moderation/src/Plugin/views/filter/ModerationStateFilter.php
+++ b/core/modules/content_moderation/src/Plugin/views/filter/ModerationStateFilter.php
@@ -177,7 +177,7 @@ protected function opSimple() {
     // we need to create a complex WHERE condition.
     $field = $this->view->query->getConnection()->condition('OR');
     foreach ((array) $this->value as $value) {
-      list($workflow_id, $state_id) = explode('-', $value, 2);
+      [$workflow_id, $state_id] = explode('-', $value, 2);
 
       $and = $this->view->query->getConnection()->condition('AND');
       $and
@@ -247,7 +247,7 @@ public function onDependencyRemoval(array $dependencies) {
   protected function getWorkflowIds() {
     $workflow_ids = [];
     foreach ((array) $this->value as $value) {
-      list($workflow_id) = explode('-', $value, 2);
+      [$workflow_id] = explode('-', $value, 2);
       $workflow_ids[] = $workflow_id;
     }
 
diff --git a/core/modules/content_moderation/src/Routing/ContentModerationRouteSubscriber.php b/core/modules/content_moderation/src/Routing/ContentModerationRouteSubscriber.php
index 934734da3cae..53da1fe07cc6 100644
--- a/core/modules/content_moderation/src/Routing/ContentModerationRouteSubscriber.php
+++ b/core/modules/content_moderation/src/Routing/ContentModerationRouteSubscriber.php
@@ -65,7 +65,7 @@ protected function setLatestRevisionFlag(Route $route) {
       return;
     }
     // Only set the flag on entity types which are revisionable.
-    list($entity_type) = explode('.', $entity_form, 2);
+    [$entity_type] = explode('.', $entity_form, 2);
     if (!isset($this->getModeratedEntityTypes()[$entity_type]) || !$this->getModeratedEntityTypes()[$entity_type]->isRevisionable()) {
       return;
     }
diff --git a/core/modules/content_translation/tests/src/Kernel/ContentTranslationFieldSyncRevisionTest.php b/core/modules/content_translation/tests/src/Kernel/ContentTranslationFieldSyncRevisionTest.php
index d273d056f3f6..2c7f8a9a3736 100644
--- a/core/modules/content_translation/tests/src/Kernel/ContentTranslationFieldSyncRevisionTest.php
+++ b/core/modules/content_translation/tests/src/Kernel/ContentTranslationFieldSyncRevisionTest.php
@@ -482,7 +482,7 @@ protected function assertViolations(EntityConstraintViolationListInterface $viol
   protected function assertLatestRevisionFieldValues($entity_id, array $expected_values) {
     /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
     $entity = $this->storage->loadRevision($this->storage->getLatestRevisionId($entity_id));
-    @list($revision_id, $target_id_en, $target_id_it, $alt_en, $alt_it) = $expected_values;
+    @[$revision_id, $target_id_en, $target_id_it, $alt_en, $alt_it] = $expected_values;
     $this->assertEquals($revision_id, $entity->getRevisionId());
     $this->assertEquals($target_id_en, $entity->get($this->fieldName)->target_id);
     $this->assertEquals($alt_en, $entity->get($this->fieldName)->alt);
diff --git a/core/modules/contextual/contextual.module b/core/modules/contextual/contextual.module
index aaab3a6e9de5..2410f1db51e6 100644
--- a/core/modules/contextual/contextual.module
+++ b/core/modules/contextual/contextual.module
@@ -210,7 +210,7 @@ function _contextual_id_to_links($id) {
   $contextual_links = [];
   $contexts = explode('|', $id);
   foreach ($contexts as $context) {
-    list($group, $route_parameters_raw, $metadata_raw) = explode(':', $context);
+    [$group, $route_parameters_raw, $metadata_raw] = explode(':', $context);
     parse_str($route_parameters_raw, $route_parameters);
     $metadata = [];
     parse_str($metadata_raw, $metadata);
diff --git a/core/modules/datetime/tests/src/Functional/DateTimeFieldTest.php b/core/modules/datetime/tests/src/Functional/DateTimeFieldTest.php
index 469155e84959..17f70fc4b67c 100644
--- a/core/modules/datetime/tests/src/Functional/DateTimeFieldTest.php
+++ b/core/modules/datetime/tests/src/Functional/DateTimeFieldTest.php
@@ -562,7 +562,7 @@ public function testDatelistWidget() {
 
     // Test the widget for validation notifications.
     foreach ($this->datelistDataProvider($field_label) as $data) {
-      list($date_value, $expected) = $data;
+      [$date_value, $expected] = $data;
 
       // Display creation form.
       $this->drupalGet('entity_test/add');
diff --git a/core/modules/datetime_range/tests/src/Functional/DateRangeFieldTest.php b/core/modules/datetime_range/tests/src/Functional/DateRangeFieldTest.php
index 77a21941a1ea..d6c4e0cb7728 100644
--- a/core/modules/datetime_range/tests/src/Functional/DateRangeFieldTest.php
+++ b/core/modules/datetime_range/tests/src/Functional/DateRangeFieldTest.php
@@ -854,7 +854,7 @@ public function testDatelistWidget() {
 
     // Test the widget for validation notifications.
     foreach ($this->datelistDataProvider() as $data) {
-      list($start_date_value, $end_date_value, $expected) = $data;
+      [$start_date_value, $end_date_value, $expected] = $data;
 
       // Display creation form.
       $this->drupalGet('entity_test/add');
diff --git a/core/modules/editor/tests/src/Functional/EditorLoadingTest.php b/core/modules/editor/tests/src/Functional/EditorLoadingTest.php
index 10cafa12a2ba..51f7c5d81c1f 100644
--- a/core/modules/editor/tests/src/Functional/EditorLoadingTest.php
+++ b/core/modules/editor/tests/src/Functional/EditorLoadingTest.php
@@ -147,7 +147,7 @@ public function testLoading() {
     // - doesn't have access to the full_html text format, so: no text editor.
     $this->drupalLogin($this->normalUser);
     $this->drupalGet('node/add/article');
-    list(, $editor_settings_present, $editor_js_present, $body) = $this->getThingsToCheck('body');
+    [, $editor_settings_present, $editor_js_present, $body] = $this->getThingsToCheck('body');
     $this->assertFalse($editor_settings_present, 'No Text Editor module settings.');
     $this->assertFalse($editor_js_present, 'No Text Editor JavaScript.');
     $this->assertCount(1, $body, 'A body field exists.');
@@ -159,7 +159,7 @@ public function testLoading() {
     // - does have access to the full_html text format, so: Unicorn text editor.
     $this->drupalLogin($this->privilegedUser);
     $this->drupalGet('node/add/article');
-    list($settings, $editor_settings_present, $editor_js_present, $body) = $this->getThingsToCheck('body');
+    [$settings, $editor_settings_present, $editor_js_present, $body] = $this->getThingsToCheck('body');
     $expected = [
       'formats' => [
         'full_html' => [
@@ -197,7 +197,7 @@ public function testLoading() {
     // - has access to the plain_text text format, so: Unicorn text editor.
     $this->drupalLogin($this->untrustedUser);
     $this->drupalGet('node/add/article');
-    list($settings, $editor_settings_present, $editor_js_present, $body) = $this->getThingsToCheck('body');
+    [$settings, $editor_settings_present, $editor_js_present, $body] = $this->getThingsToCheck('body');
     $expected = [
       'formats' => [
         'plain_text' => [
@@ -233,7 +233,7 @@ public function testLoading() {
     // that they are not allowed to use. The editor is still loaded. CKEditor,
     // for example, supports being loaded in a disabled state.
     $this->drupalGet('node/1/edit');
-    list(, $editor_settings_present, $editor_js_present, $body) = $this->getThingsToCheck('body');
+    [, $editor_settings_present, $editor_js_present, $body] = $this->getThingsToCheck('body');
     $this->assertTrue($editor_settings_present, 'Text Editor module settings.');
     $this->assertTrue($editor_js_present, 'Text Editor JavaScript.');
     $this->assertCount(1, $body, 'A body field exists.');
@@ -273,7 +273,7 @@ public function testSupportedElementTypes() {
     // Assert the unicorn editor works with textfields.
     $this->drupalLogin($this->privilegedUser);
     $this->drupalGet('node/1/edit');
-    list(, $editor_settings_present, $editor_js_present, $field) = $this->getThingsToCheck('field-text', 'input');
+    [, $editor_settings_present, $editor_js_present, $field] = $this->getThingsToCheck('field-text', 'input');
     $this->assertTrue($editor_settings_present, "Text Editor module's JavaScript settings are on the page.");
     $this->assertTrue($editor_js_present, 'Text Editor JavaScript is present.');
     $this->assertCount(1, $field, 'A text field exists.');
@@ -292,7 +292,7 @@ public function testSupportedElementTypes() {
     ])->save();
 
     $this->drupalGet('node/1/edit');
-    list(, $editor_settings_present, $editor_js_present, $field) = $this->getThingsToCheck('field-text', 'input');
+    [, $editor_settings_present, $editor_js_present, $field] = $this->getThingsToCheck('field-text', 'input');
     $this->assertFalse($editor_settings_present, "Text Editor module's JavaScript settings are not on the page.");
     $this->assertFalse($editor_js_present, 'Text Editor JavaScript is not present.');
     $this->assertCount(1, $field, 'A text field exists.');
diff --git a/core/modules/editor/tests/src/Functional/EditorUploadImageScaleTest.php b/core/modules/editor/tests/src/Functional/EditorUploadImageScaleTest.php
index 76a398d622b3..4196769ac856 100644
--- a/core/modules/editor/tests/src/Functional/EditorUploadImageScaleTest.php
+++ b/core/modules/editor/tests/src/Functional/EditorUploadImageScaleTest.php
@@ -81,48 +81,48 @@ public function testEditorUploadImageScale() {
 
     // Case 1: no max dimensions set: uploaded image not scaled.
     $test_image = $testing_image_list[0];
-    list($image_file_width, $image_file_height) = $this->getTestImageInfo($test_image->uri);
+    [$image_file_width, $image_file_height] = $this->getTestImageInfo($test_image->uri);
     $max_width = NULL;
     $max_height = NULL;
     $this->setMaxDimensions($max_width, $max_height);
     $this->assertSavedMaxDimensions($max_width, $max_height);
-    list($uploaded_image_file_width, $uploaded_image_file_height) = $this->uploadImage($test_image->uri);
+    [$uploaded_image_file_width, $uploaded_image_file_height] = $this->uploadImage($test_image->uri);
     $this->assertEquals($image_file_width, $uploaded_image_file_width);
     $this->assertEquals($image_file_height, $uploaded_image_file_height);
     $this->assertSession()->pageTextNotContains("The image was resized to fit within the maximum allowed dimensions of {$max_width}x{$max_height} pixels.");
 
     // Case 2: max width smaller than uploaded image: image scaled down.
     $test_image = $testing_image_list[1];
-    list($image_file_width, $image_file_height) = $this->getTestImageInfo($test_image->uri);
+    [$image_file_width, $image_file_height] = $this->getTestImageInfo($test_image->uri);
     $max_width = $image_file_width - 5;
     $max_height = $image_file_height;
     $this->setMaxDimensions($max_width, $max_height);
     $this->assertSavedMaxDimensions($max_width, $max_height);
-    list($uploaded_image_file_width, $uploaded_image_file_height) = $this->uploadImage($test_image->uri);
+    [$uploaded_image_file_width, $uploaded_image_file_height] = $this->uploadImage($test_image->uri);
     $this->assertEquals($max_width, $uploaded_image_file_width);
     $this->assertEquals($uploaded_image_file_height * ($uploaded_image_file_width / $max_width), $uploaded_image_file_height);
     $this->assertSession()->pageTextContains("The image was resized to fit within the maximum allowed dimensions of {$max_width}x{$max_height} pixels.");
 
     // Case 3: max height smaller than uploaded image: image scaled down.
     $test_image = $testing_image_list[2];
-    list($image_file_width, $image_file_height) = $this->getTestImageInfo($test_image->uri);
+    [$image_file_width, $image_file_height] = $this->getTestImageInfo($test_image->uri);
     $max_width = $image_file_width;
     $max_height = $image_file_height - 5;
     $this->setMaxDimensions($max_width, $max_height);
     $this->assertSavedMaxDimensions($max_width, $max_height);
-    list($uploaded_image_file_width, $uploaded_image_file_height) = $this->uploadImage($test_image->uri);
+    [$uploaded_image_file_width, $uploaded_image_file_height] = $this->uploadImage($test_image->uri);
     $this->assertEquals($uploaded_image_file_width * ($uploaded_image_file_height / $max_height), $uploaded_image_file_width);
     $this->assertEquals($max_height, $uploaded_image_file_height);
     $this->assertSession()->pageTextContains("The image was resized to fit within the maximum allowed dimensions of {$max_width}x{$max_height} pixels.");
 
     // Case 4: max dimensions greater than uploaded image: image not scaled.
     $test_image = $testing_image_list[3];
-    list($image_file_width, $image_file_height) = $this->getTestImageInfo($test_image->uri);
+    [$image_file_width, $image_file_height] = $this->getTestImageInfo($test_image->uri);
     $max_width = $image_file_width + 5;
     $max_height = $image_file_height + 5;
     $this->setMaxDimensions($max_width, $max_height);
     $this->assertSavedMaxDimensions($max_width, $max_height);
-    list($uploaded_image_file_width, $uploaded_image_file_height) = $this->uploadImage($test_image->uri);
+    [$uploaded_image_file_width, $uploaded_image_file_height] = $this->uploadImage($test_image->uri);
     $this->assertEquals($image_file_width, $uploaded_image_file_width);
     $this->assertEquals($image_file_height, $uploaded_image_file_height);
     $this->assertSession()->pageTextNotContains("The image was resized to fit within the maximum allowed dimensions of {$max_width}x{$max_height} pixels.");
@@ -130,12 +130,12 @@ public function testEditorUploadImageScale() {
     // Case 5: only max width dimension was provided and it was smaller than
     // uploaded image: image scaled down.
     $test_image = $testing_image_list[4];
-    list($image_file_width, $image_file_height) = $this->getTestImageInfo($test_image->uri);
+    [$image_file_width, $image_file_height] = $this->getTestImageInfo($test_image->uri);
     $max_width = $image_file_width - 5;
     $max_height = NULL;
     $this->setMaxDimensions($max_width, $max_height);
     $this->assertSavedMaxDimensions($max_width, $max_height);
-    list($uploaded_image_file_width, $uploaded_image_file_height) = $this->uploadImage($test_image->uri);
+    [$uploaded_image_file_width, $uploaded_image_file_height] = $this->uploadImage($test_image->uri);
     $this->assertEquals($max_width, $uploaded_image_file_width);
     $this->assertEquals($uploaded_image_file_height * ($uploaded_image_file_width / $max_width), $uploaded_image_file_height);
     $this->assertSession()->pageTextContains("The image was resized to fit within the maximum allowed width of {$max_width} pixels.");
@@ -143,12 +143,12 @@ public function testEditorUploadImageScale() {
     // Case 6: only max height dimension was provided and it was smaller than
     // uploaded image: image scaled down.
     $test_image = $testing_image_list[5];
-    list($image_file_width, $image_file_height) = $this->getTestImageInfo($test_image->uri);
+    [$image_file_width, $image_file_height] = $this->getTestImageInfo($test_image->uri);
     $max_width = NULL;
     $max_height = $image_file_height - 5;
     $this->setMaxDimensions($max_width, $max_height);
     $this->assertSavedMaxDimensions($max_width, $max_height);
-    list($uploaded_image_file_width, $uploaded_image_file_height) = $this->uploadImage($test_image->uri);
+    [$uploaded_image_file_width, $uploaded_image_file_height] = $this->uploadImage($test_image->uri);
     $this->assertEquals($uploaded_image_file_width * ($uploaded_image_file_height / $max_height), $uploaded_image_file_width);
     $this->assertEquals($max_height, $uploaded_image_file_height);
     $this->assertSession()->pageTextContains("The image was resized to fit within the maximum allowed height of {$max_height} pixels.");
diff --git a/core/modules/field/field.module b/core/modules/field/field.module
index 3a8a8e16b1f3..423271665482 100644
--- a/core/modules/field/field.module
+++ b/core/modules/field/field.module
@@ -410,7 +410,7 @@ function field_field_config_presave(FieldConfigInterface $field) {
   // target entity type.
   $target_type = $field->getFieldStorageDefinition()->getSetting('target_type');
   $selection_manager = \Drupal::service('plugin.manager.entity_reference_selection');
-  list($current_handler) = explode(':', $field->getSetting('handler'), 2);
+  [$current_handler] = explode(':', $field->getSetting('handler'), 2);
   $field->setSetting('handler', $selection_manager->getPluginId($target_type, $current_handler));
 
   // In case we removed all the target bundles allowed by the field in
diff --git a/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceDefaults.php b/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceDefaults.php
index 383fa314ca37..99526b58009a 100644
--- a/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceDefaults.php
+++ b/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceDefaults.php
@@ -21,7 +21,7 @@ class FieldInstanceDefaults extends ProcessPluginBase {
    * Set the field instance defaults.
    */
   public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
-    list($widget_type, $widget_settings) = $value;
+    [$widget_type, $widget_settings] = $value;
     $default = [];
 
     switch ($widget_type) {
diff --git a/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceOptionTranslation.php b/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceOptionTranslation.php
index 4b612bffaa78..5e8d2322f8d4 100644
--- a/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceOptionTranslation.php
+++ b/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceOptionTranslation.php
@@ -20,7 +20,7 @@ class FieldInstanceOptionTranslation extends ProcessPluginBase {
    * {@inheritdoc}
    */
   public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
-    list($field_type, $global_settings) = $value;
+    [$field_type, $global_settings] = $value;
 
     $option_key = 0;
     $translation = '';
diff --git a/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceSettings.php b/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceSettings.php
index d0198dea2b1d..be41a4209ca5 100644
--- a/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceSettings.php
+++ b/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceSettings.php
@@ -21,7 +21,7 @@ class FieldInstanceSettings extends ProcessPluginBase {
    * Set the field instance defaults.
    */
   public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
-    list($widget_type, $widget_settings, $field_settings) = $value;
+    [$widget_type, $widget_settings, $field_settings] = $value;
     $settings = [];
     switch ($widget_type) {
       case 'number':
diff --git a/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceWidgetSettings.php b/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceWidgetSettings.php
index a64a14968903..4f79d7d2eac1 100644
--- a/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceWidgetSettings.php
+++ b/core/modules/field/src/Plugin/migrate/process/d6/FieldInstanceWidgetSettings.php
@@ -23,7 +23,7 @@ class FieldInstanceWidgetSettings extends ProcessPluginBase {
    * Get the field instance default/mapped widget settings.
    */
   public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
-    list($widget_type, $widget_settings) = $value;
+    [$widget_type, $widget_settings] = $value;
     return $this->getSettings($widget_type, $widget_settings);
   }
 
diff --git a/core/modules/field/src/Plugin/migrate/process/d6/FieldOptionTranslation.php b/core/modules/field/src/Plugin/migrate/process/d6/FieldOptionTranslation.php
index 8432c2b26256..1976becf830e 100644
--- a/core/modules/field/src/Plugin/migrate/process/d6/FieldOptionTranslation.php
+++ b/core/modules/field/src/Plugin/migrate/process/d6/FieldOptionTranslation.php
@@ -22,7 +22,7 @@ class FieldOptionTranslation extends ProcessPluginBase {
    * Get the field default/mapped settings.
    */
   public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
-    list($field_type, $global_settings) = $value;
+    [$field_type, $global_settings] = $value;
 
     $allowed_values = '';
     $i = 0;
diff --git a/core/modules/field/src/Plugin/migrate/process/d6/FieldSettings.php b/core/modules/field/src/Plugin/migrate/process/d6/FieldSettings.php
index 967b4cbd796c..8b7eb0d95192 100644
--- a/core/modules/field/src/Plugin/migrate/process/d6/FieldSettings.php
+++ b/core/modules/field/src/Plugin/migrate/process/d6/FieldSettings.php
@@ -26,7 +26,7 @@ public function transform($value, MigrateExecutableInterface $migrate_executable
     if (count($value) == 2) {
       $value[] = NULL;
     }
-    list($field_type, $global_settings, $original_field_type) = $value;
+    [$field_type, $global_settings, $original_field_type] = $value;
     return $this->getSettings($field_type, $global_settings, $original_field_type);
   }
 
diff --git a/core/modules/field/src/Plugin/migrate/process/d7/FieldInstanceDefaults.php b/core/modules/field/src/Plugin/migrate/process/d7/FieldInstanceDefaults.php
index 57c2b51c0343..fab63a67b504 100644
--- a/core/modules/field/src/Plugin/migrate/process/d7/FieldInstanceDefaults.php
+++ b/core/modules/field/src/Plugin/migrate/process/d7/FieldInstanceDefaults.php
@@ -17,7 +17,7 @@ class FieldInstanceDefaults extends ProcessPluginBase {
    * {@inheritdoc}
    */
   public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
-    list($default_value, $widget_settings) = $value;
+    [$default_value, $widget_settings] = $value;
     $widget_type = $widget_settings['type'];
     $default_value = $default_value ?: [];
 
diff --git a/core/modules/field/src/Plugin/migrate/process/d7/FieldInstanceOptionTranslation.php b/core/modules/field/src/Plugin/migrate/process/d7/FieldInstanceOptionTranslation.php
index e7082554498e..a3e2063183e6 100644
--- a/core/modules/field/src/Plugin/migrate/process/d7/FieldInstanceOptionTranslation.php
+++ b/core/modules/field/src/Plugin/migrate/process/d7/FieldInstanceOptionTranslation.php
@@ -20,7 +20,7 @@ class FieldInstanceOptionTranslation extends ProcessPluginBase {
    * {@inheritdoc}
    */
   public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
-    list($type, $data) = $value;
+    [$type, $data] = $value;
 
     $data = unserialize($data);
     $property = $row->getSourceProperty('property');
diff --git a/core/modules/field/src/Plugin/migrate/process/d7/FieldInstanceSettings.php b/core/modules/field/src/Plugin/migrate/process/d7/FieldInstanceSettings.php
index cf17e75a5cf0..5236e5507a38 100644
--- a/core/modules/field/src/Plugin/migrate/process/d7/FieldInstanceSettings.php
+++ b/core/modules/field/src/Plugin/migrate/process/d7/FieldInstanceSettings.php
@@ -19,7 +19,7 @@ class FieldInstanceSettings extends ProcessPluginBase {
    * {@inheritdoc}
    */
   public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
-    list($instance_settings, $widget_settings, $field_definition) = $value;
+    [$instance_settings, $widget_settings, $field_definition] = $value;
     $widget_type = $widget_settings['type'];
 
     $field_data = unserialize($field_definition['data']);
diff --git a/core/modules/field/src/Plugin/migrate/process/d7/FieldOptionTranslation.php b/core/modules/field/src/Plugin/migrate/process/d7/FieldOptionTranslation.php
index 3831bfcb5964..4b60335f7fb8 100644
--- a/core/modules/field/src/Plugin/migrate/process/d7/FieldOptionTranslation.php
+++ b/core/modules/field/src/Plugin/migrate/process/d7/FieldOptionTranslation.php
@@ -22,7 +22,7 @@ class FieldOptionTranslation extends ProcessPluginBase {
    * Get the field default/mapped settings.
    */
   public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
-    list($type, $data) = $value;
+    [$type, $data] = $value;
 
     $data = unserialize($data);
     $new_allowed_values = '';
diff --git a/core/modules/field/tests/src/Kernel/Boolean/BooleanFormatterTest.php b/core/modules/field/tests/src/Kernel/Boolean/BooleanFormatterTest.php
index 7e3653f75501..acebe47fdaa0 100644
--- a/core/modules/field/tests/src/Kernel/Boolean/BooleanFormatterTest.php
+++ b/core/modules/field/tests/src/Kernel/Boolean/BooleanFormatterTest.php
@@ -127,7 +127,7 @@ public function testBooleanFormatter() {
     $data[] = [1, $format, 'TRUE'];
 
     foreach ($data as $test_data) {
-      list($value, $settings, $expected) = $test_data;
+      [$value, $settings, $expected] = $test_data;
 
       $component = $this->display->getComponent($this->fieldName);
       $component['settings'] = $settings;
diff --git a/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceTest.php b/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceTest.php
index c14fb3e37c7a..31264bcde6bf 100644
--- a/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceTest.php
+++ b/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceTest.php
@@ -52,7 +52,7 @@ protected function setUp(): void {
    *   Whether or not the field is expected to be translatable.
    */
   protected function assertEntity($id, $expected_label, $expected_field_type, $is_required, $expected_translatable) {
-    list ($expected_entity_type, $expected_bundle, $expected_name) = explode('.', $id);
+    [$expected_entity_type, $expected_bundle, $expected_name] = explode('.', $id);
 
     /** @var \Drupal\field\FieldConfigInterface $field */
     $field = FieldConfig::load($id);
diff --git a/core/modules/field/tests/src/Kernel/Timestamp/TimestampFormatterTest.php b/core/modules/field/tests/src/Kernel/Timestamp/TimestampFormatterTest.php
index 8e0e64baa81d..2e5e7349aafb 100644
--- a/core/modules/field/tests/src/Kernel/Timestamp/TimestampFormatterTest.php
+++ b/core/modules/field/tests/src/Kernel/Timestamp/TimestampFormatterTest.php
@@ -119,7 +119,7 @@ public function testTimestampFormatter() {
     $data[] = ['date_format' => 'custom', 'custom_date_format' => 'e', 'timezone' => 'Asia/Tokyo'];
 
     foreach ($data as $settings) {
-      list($date_format, $custom_date_format, $timezone) = array_values($settings);
+      [$date_format, $custom_date_format, $timezone] = array_values($settings);
       if (empty($timezone)) {
         $timezone = NULL;
       }
diff --git a/core/modules/field_ui/src/Form/EntityDisplayFormBase.php b/core/modules/field_ui/src/Form/EntityDisplayFormBase.php
index 8f399144099f..6cc3f6bd0589 100644
--- a/core/modules/field_ui/src/Form/EntityDisplayFormBase.php
+++ b/core/modules/field_ui/src/Form/EntityDisplayFormBase.php
@@ -829,7 +829,7 @@ protected function getDisplays() {
     $ids = $this->configFactory()->listAll($config_prefix . '.' . $this->entity->getTargetEntityTypeId() . '.' . $this->entity->getTargetBundle() . '.');
     foreach ($ids as $id) {
       $config_id = str_replace($config_prefix . '.', '', $id);
-      list(,, $display_mode) = explode('.', $config_id);
+      [,, $display_mode] = explode('.', $config_id);
       if ($display_mode != 'default') {
         $load_ids[] = $config_id;
       }
diff --git a/core/modules/field_ui/src/Form/FieldStorageAddForm.php b/core/modules/field_ui/src/Form/FieldStorageAddForm.php
index 8a1139b0df0e..7c54ca94cc71 100644
--- a/core/modules/field_ui/src/Form/FieldStorageAddForm.php
+++ b/core/modules/field_ui/src/Form/FieldStorageAddForm.php
@@ -338,7 +338,7 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
 
       // Check if we're dealing with a preconfigured field.
       if (strpos($field_storage_values['type'], 'field_ui:') !== FALSE) {
-        list(, $field_type, $option_key) = explode(':', $field_storage_values['type'], 3);
+        [, $field_type, $option_key] = explode(':', $field_storage_values['type'], 3);
         $field_storage_values['type'] = $field_type;
 
         $field_definition = $this->fieldTypePluginManager->getDefinition($field_type);
diff --git a/core/modules/file/file.module b/core/modules/file/file.module
index d222f3560c9d..7300dd9c6767 100644
--- a/core/modules/file/file.module
+++ b/core/modules/file/file.module
@@ -416,7 +416,7 @@ function file_validate_image_resolution(FileInterface $file, $maximum_dimensions
     $scaling = FALSE;
     if ($maximum_dimensions) {
       // Check that it is smaller than the given dimensions.
-      list($width, $height) = explode('x', $maximum_dimensions);
+      [$width, $height] = explode('x', $maximum_dimensions);
       if ($image->getWidth() > $width || $image->getHeight() > $height) {
         // Try to resize the image to fit the dimensions.
         if ($image->scale($width, $height)) {
@@ -456,7 +456,7 @@ function file_validate_image_resolution(FileInterface $file, $maximum_dimensions
 
     if ($minimum_dimensions) {
       // Check that it is larger than the given dimensions.
-      list($width, $height) = explode('x', $minimum_dimensions);
+      [$width, $height] = explode('x', $minimum_dimensions);
       if ($image->getWidth() < $width || $image->getHeight() < $height) {
         if ($scaling) {
           $errors[] = t('The resized image is too small. The minimum dimensions are %dimensions pixels and after resizing, the image size will be %widthx%height pixels.',
diff --git a/core/modules/file/file.views.inc b/core/modules/file/file.views.inc
index 1238b6711272..666c7da49d83 100644
--- a/core/modules/file/file.views.inc
+++ b/core/modules/file/file.views.inc
@@ -45,7 +45,7 @@ function file_field_views_data_views_data_alter(array &$data, FieldStorageConfig
   /** @var \Drupal\Core\Entity\Sql\DefaultTableMapping $table_mapping */
   $table_mapping = $entity_type_manager->getStorage($entity_type_id)->getTableMapping();
 
-  list($label) = views_entity_field_label($entity_type_id, $field_name);
+  [$label] = views_entity_field_label($entity_type_id, $field_name);
 
   $data['file_managed'][$pseudo_field_name]['relationship'] = [
     'title' => t('@entity using @field', ['@entity' => $entity_type->getLabel(), '@field' => $label]),
diff --git a/core/modules/file/src/Plugin/Field/FieldFormatter/FileMediaFormatterBase.php b/core/modules/file/src/Plugin/Field/FieldFormatter/FileMediaFormatterBase.php
index d69ab74005ab..9fa11db2f69e 100644
--- a/core/modules/file/src/Plugin/Field/FieldFormatter/FileMediaFormatterBase.php
+++ b/core/modules/file/src/Plugin/Field/FieldFormatter/FileMediaFormatterBase.php
@@ -175,7 +175,7 @@ protected function prepareAttributes(array $additional_attributes = []) {
    *   TRUE if the MIME type applies, FALSE otherwise.
    */
   protected static function mimeTypeApplies($mime_type) {
-    list($type) = explode('/', $mime_type, 2);
+    [$type] = explode('/', $mime_type, 2);
     return $type === static::getMediaType();
   }
 
diff --git a/core/modules/file/src/Plugin/migrate/process/d6/FileUri.php b/core/modules/file/src/Plugin/migrate/process/d6/FileUri.php
index c14b5ea50aea..32c30b45bbb0 100644
--- a/core/modules/file/src/Plugin/migrate/process/d6/FileUri.php
+++ b/core/modules/file/src/Plugin/migrate/process/d6/FileUri.php
@@ -24,7 +24,7 @@ public function transform($value, MigrateExecutableInterface $migrate_executable
     if ($row->isStub()) {
       return NULL;
     }
-    list($filepath, $file_directory_path, $temp_directory_path, $is_public) = $value;
+    [$filepath, $file_directory_path, $temp_directory_path, $is_public] = $value;
 
     // Specific handling using $temp_directory_path for temporary files.
     if (substr($filepath, 0, strlen($temp_directory_path)) === $temp_directory_path) {
diff --git a/core/modules/file/tests/src/Functional/FileFieldValidateTest.php b/core/modules/file/tests/src/Functional/FileFieldValidateTest.php
index 12f0887391c9..005bc1badbba 100644
--- a/core/modules/file/tests/src/Functional/FileFieldValidateTest.php
+++ b/core/modules/file/tests/src/Functional/FileFieldValidateTest.php
@@ -132,7 +132,7 @@ public function testFileExtension() {
     $this->createFileField($field_name, 'node', $type_name);
 
     $test_file = $this->getTestFile('image');
-    list(, $test_file_extension) = explode('.', $test_file->getFilename());
+    [, $test_file_extension] = explode('.', $test_file->getFilename());
 
     // Disable extension checking.
     $this->updateFileField($field_name, $type_name, ['file_extensions' => '']);
diff --git a/core/modules/file/tests/src/Functional/SaveUploadFormTest.php b/core/modules/file/tests/src/Functional/SaveUploadFormTest.php
index 7fd93354ba18..6a112fb9ff96 100644
--- a/core/modules/file/tests/src/Functional/SaveUploadFormTest.php
+++ b/core/modules/file/tests/src/Functional/SaveUploadFormTest.php
@@ -70,7 +70,7 @@ protected function setUp(): void {
     $image_files = $this->drupalGetTestFiles('image');
     $this->image = File::create((array) current($image_files));
 
-    list(, $this->imageExtension) = explode('.', $this->image->getFilename());
+    [, $this->imageExtension] = explode('.', $this->image->getFilename());
     $this->assertFileExists($this->image->getFileUri());
 
     $this->phpfile = current($this->drupalGetTestFiles('php'));
diff --git a/core/modules/file/tests/src/Functional/SaveUploadTest.php b/core/modules/file/tests/src/Functional/SaveUploadTest.php
index a3a7760dbb0d..5fb1f1a8117d 100644
--- a/core/modules/file/tests/src/Functional/SaveUploadTest.php
+++ b/core/modules/file/tests/src/Functional/SaveUploadTest.php
@@ -67,7 +67,7 @@ protected function setUp(): void {
     $image_files = $this->drupalGetTestFiles('image');
     $this->image = File::create((array) current($image_files));
 
-    list(, $this->imageExtension) = explode('.', $this->image->getFilename());
+    [, $this->imageExtension] = explode('.', $this->image->getFilename());
     $this->assertFileExists($this->image->getFileUri());
 
     $this->phpfile = current($this->drupalGetTestFiles('php'));
diff --git a/core/modules/file/tests/src/Kernel/UsageTest.php b/core/modules/file/tests/src/Kernel/UsageTest.php
index b9a2f7134b59..1e1a43cec265 100644
--- a/core/modules/file/tests/src/Kernel/UsageTest.php
+++ b/core/modules/file/tests/src/Kernel/UsageTest.php
@@ -195,7 +195,7 @@ public function createTempFiles() {
    * Ensure that temporary files are removed by default.
    */
   public function testTempFileCleanupDefault() {
-    list($temp_old, $temp_new, $perm_old, $perm_new) = $this->createTempFiles();
+    [$temp_old, $temp_new, $perm_old, $perm_new] = $this->createTempFiles();
 
     // Run cron and then ensure that only the old, temp file was deleted.
     $this->container->get('cron')->run();
@@ -209,7 +209,7 @@ public function testTempFileCleanupDefault() {
    * Ensure that temporary files are kept as configured.
    */
   public function testTempFileNoCleanup() {
-    list($temp_old, $temp_new, $perm_old, $perm_new) = $this->createTempFiles();
+    [$temp_old, $temp_new, $perm_old, $perm_new] = $this->createTempFiles();
 
     // Set the max age to 0, meaning no temporary files will be deleted.
     $this->config('system.file')
@@ -228,7 +228,7 @@ public function testTempFileNoCleanup() {
    * Ensure that temporary files are kept as configured.
    */
   public function testTempFileCustomCleanup() {
-    list($temp_old, $temp_new, $perm_old, $perm_new) = $this->createTempFiles();
+    [$temp_old, $temp_new, $perm_old, $perm_new] = $this->createTempFiles();
 
     // Set the max age to older than default.
     $this->config('system.file')
diff --git a/core/modules/filter/filter.module b/core/modules/filter/filter.module
index 04d73fce7aaf..d068ae03acda 100644
--- a/core/modules/filter/filter.module
+++ b/core/modules/filter/filter.module
@@ -706,7 +706,7 @@ function _filter_autop($text) {
       }
       // Opening or closing tag?
       $open = ($chunk[1] != '/');
-      list($tag) = preg_split('/[ >]/', substr($chunk, 2 - $open), 2);
+      [$tag] = preg_split('/[ >]/', substr($chunk, 2 - $open), 2);
       if (!$ignore) {
         if ($open) {
           $ignore = TRUE;
diff --git a/core/modules/filter/tests/src/Functional/FilterDefaultFormatTest.php b/core/modules/filter/tests/src/Functional/FilterDefaultFormatTest.php
index 150a2a1a97cf..a2a9a415ebf3 100644
--- a/core/modules/filter/tests/src/Functional/FilterDefaultFormatTest.php
+++ b/core/modules/filter/tests/src/Functional/FilterDefaultFormatTest.php
@@ -43,7 +43,7 @@ public function testDefaultTextFormats() {
       $this->resetFilterCaches();
       $formats[] = FilterFormat::load($edit['format']);
     }
-    list($first_format, $second_format) = $formats;
+    [$first_format, $second_format] = $formats;
     $second_format_permission = $second_format->getPermissionName();
     $first_user = $this->drupalCreateUser([
       $first_format->getPermissionName(),
diff --git a/core/modules/filter/tests/src/Functional/FilterFormatAccessTest.php b/core/modules/filter/tests/src/Functional/FilterFormatAccessTest.php
index f3c513b2373e..d6a9c66e44be 100644
--- a/core/modules/filter/tests/src/Functional/FilterFormatAccessTest.php
+++ b/core/modules/filter/tests/src/Functional/FilterFormatAccessTest.php
@@ -97,7 +97,7 @@ protected function setUp(): void {
       $this->resetFilterCaches();
       $formats[] = FilterFormat::load($edit['format']);
     }
-    list($this->allowedFormat, $this->secondAllowedFormat, $this->disallowedFormat) = $formats;
+    [$this->allowedFormat, $this->secondAllowedFormat, $this->disallowedFormat] = $formats;
     $this->drupalLogout();
 
     // Create a regular user with access to two of the formats.
diff --git a/core/modules/help_topics/src/HelpTopicDiscovery.php b/core/modules/help_topics/src/HelpTopicDiscovery.php
index 37a81299472f..684453faa0af 100644
--- a/core/modules/help_topics/src/HelpTopicDiscovery.php
+++ b/core/modules/help_topics/src/HelpTopicDiscovery.php
@@ -99,7 +99,7 @@ public function findAll() {
       foreach ($files as $file => $provider) {
         $plugin_id = substr(basename($file), 0, -10);
         // The plugin ID begins with provider.
-        list($file_name_provider,) = explode('.', $plugin_id, 2);
+        [$file_name_provider] = explode('.', $plugin_id, 2);
         // Only the Help Topics module can provide help for other extensions.
         // @todo https://www.drupal.org/project/drupal/issues/3072312 Remove
         //   help_topics special case once Help Topics is stable and core
diff --git a/core/modules/image/image.views.inc b/core/modules/image/image.views.inc
index 483f989faf9f..553678ccd835 100644
--- a/core/modules/image/image.views.inc
+++ b/core/modules/image/image.views.inc
@@ -45,7 +45,7 @@ function image_field_views_data_views_data_alter(array &$data, FieldStorageConfi
   /** @var \Drupal\Core\Entity\Sql\DefaultTableMapping $table_mapping */
   $table_mapping = $entity_type_manager->getStorage($entity_type_id)->getTableMapping();
 
-  list($label) = views_entity_field_label($entity_type_id, $field_name);
+  [$label] = views_entity_field_label($entity_type_id, $field_name);
 
   $data['file_managed'][$pseudo_field_name]['relationship'] = [
     'title' => t('@entity using @field', ['@entity' => $entity_type->getLabel(), '@field' => $label]),
diff --git a/core/modules/image/src/PathProcessor/PathProcessorImageStyles.php b/core/modules/image/src/PathProcessor/PathProcessorImageStyles.php
index f40d083ac482..b154bd4df398 100644
--- a/core/modules/image/src/PathProcessor/PathProcessorImageStyles.php
+++ b/core/modules/image/src/PathProcessor/PathProcessorImageStyles.php
@@ -63,7 +63,7 @@ public function processInbound($path, Request $request) {
 
     // Get the image style, scheme and path.
     if (substr_count($rest, '/') >= 2) {
-      list($image_style, $scheme, $file) = explode('/', $rest, 3);
+      [$image_style, $scheme, $file] = explode('/', $rest, 3);
 
       // Set the file as query parameter.
       $request->query->set('file', $file);
diff --git a/core/modules/image/src/Plugin/Field/FieldType/ImageItem.php b/core/modules/image/src/Plugin/Field/FieldType/ImageItem.php
index 204a1ac5c70a..fa6ea636e290 100644
--- a/core/modules/image/src/Plugin/Field/FieldType/ImageItem.php
+++ b/core/modules/image/src/Plugin/Field/FieldType/ImageItem.php
@@ -377,7 +377,7 @@ public static function generateSampleValue(FieldDefinitionInterface $field_defin
       $file = $images[$extension][$min_resolution][$max_resolution][$image_index];
     }
 
-    list($width, $height) = getimagesize($file->getFileUri());
+    [$width, $height] = getimagesize($file->getFileUri());
     $values = [
       'target_id' => $file->id(),
       'alt' => $random->sentences(4),
diff --git a/core/modules/image/src/Plugin/ImageEffect/CropImageEffect.php b/core/modules/image/src/Plugin/ImageEffect/CropImageEffect.php
index 87536e643d35..cdacda96b7cf 100644
--- a/core/modules/image/src/Plugin/ImageEffect/CropImageEffect.php
+++ b/core/modules/image/src/Plugin/ImageEffect/CropImageEffect.php
@@ -20,7 +20,7 @@ class CropImageEffect extends ResizeImageEffect {
    * {@inheritdoc}
    */
   public function applyEffect(ImageInterface $image) {
-    list($x, $y) = explode('-', $this->configuration['anchor']);
+    [$x, $y] = explode('-', $this->configuration['anchor']);
     $x = image_filter_keyword($x, $image->getWidth(), $this->configuration['width']);
     $y = image_filter_keyword($y, $image->getHeight(), $this->configuration['height']);
     if (!$image->crop($x, $y, $this->configuration['width'], $this->configuration['height'])) {
diff --git a/core/modules/image/src/Plugin/ImageEffect/ScaleAndCropImageEffect.php b/core/modules/image/src/Plugin/ImageEffect/ScaleAndCropImageEffect.php
index 5f06674dd6e2..b496341a417c 100644
--- a/core/modules/image/src/Plugin/ImageEffect/ScaleAndCropImageEffect.php
+++ b/core/modules/image/src/Plugin/ImageEffect/ScaleAndCropImageEffect.php
@@ -23,7 +23,7 @@ public function applyEffect(ImageInterface $image) {
     $height = $this->configuration['height'];
     $scale = max($width / $image->getWidth(), $height / $image->getHeight());
 
-    list($x, $y) = explode('-', $this->configuration['anchor']);
+    [$x, $y] = explode('-', $this->configuration['anchor']);
     $x = image_filter_keyword($x, $image->getWidth() * $scale, $width);
     $y = image_filter_keyword($y, $image->getHeight() * $scale, $height);
 
diff --git a/core/modules/image/tests/src/Functional/ImageFieldDisplayTest.php b/core/modules/image/tests/src/Functional/ImageFieldDisplayTest.php
index 65ebc66f6338..4e3d31cfa749 100644
--- a/core/modules/image/tests/src/Functional/ImageFieldDisplayTest.php
+++ b/core/modules/image/tests/src/Functional/ImageFieldDisplayTest.php
@@ -239,7 +239,7 @@ public function testImageFieldSettings() {
     $renderer = $this->container->get('renderer');
     $node_storage = $this->container->get('entity_type.manager')->getStorage('node');
     $test_image = current($this->drupalGetTestFiles('image'));
-    list(, $test_image_extension) = explode('.', $test_image->filename);
+    [, $test_image_extension] = explode('.', $test_image->filename);
     $field_name = strtolower($this->randomMachineName());
     $field_settings = [
       'alt_field' => 1,
diff --git a/core/modules/jsonapi/src/Access/TemporaryQueryGuard.php b/core/modules/jsonapi/src/Access/TemporaryQueryGuard.php
index 1c5c34db1612..6225bf3aa69f 100644
--- a/core/modules/jsonapi/src/Access/TemporaryQueryGuard.php
+++ b/core/modules/jsonapi/src/Access/TemporaryQueryGuard.php
@@ -150,7 +150,7 @@ protected static function secureQuery(QueryInterface $query, $entity_type_id, ar
         // portion. JSON:API will have already validated that the property
         // exists.
         $split_specifier = explode(':', $specifier, 2);
-        list($property_name, $target_entity_type_id) = array_merge($split_specifier, count($split_specifier) === 2 ? [] : [NULL]);
+        [$property_name, $target_entity_type_id] = array_merge($split_specifier, count($split_specifier) === 2 ? [] : [NULL]);
         // The specifier is either a field property or a delta. If it is a data
         // reference or a delta, then it needs to be traversed to the next
         // specifier. However, if the specific is a simple field property, i.e.
diff --git a/core/modules/jsonapi/src/EventSubscriber/ResourceObjectNormalizationCacher.php b/core/modules/jsonapi/src/EventSubscriber/ResourceObjectNormalizationCacher.php
index 667eb83d2562..c16a23be8a9d 100644
--- a/core/modules/jsonapi/src/EventSubscriber/ResourceObjectNormalizationCacher.php
+++ b/core/modules/jsonapi/src/EventSubscriber/ResourceObjectNormalizationCacher.php
@@ -110,7 +110,7 @@ public function saveOnTerminate(ResourceObject $object, array $normalization_par
    */
   public function onTerminate(TerminateEvent $event) {
     foreach ($this->toCache as $value) {
-      list($object, $normalization_parts) = $value;
+      [$object, $normalization_parts] = $value;
       $this->set($object, $normalization_parts);
     }
   }
diff --git a/core/modules/jsonapi/src/Revisions/VersionNegotiator.php b/core/modules/jsonapi/src/Revisions/VersionNegotiator.php
index 76bd43f0f19b..857582a4119f 100644
--- a/core/modules/jsonapi/src/Revisions/VersionNegotiator.php
+++ b/core/modules/jsonapi/src/Revisions/VersionNegotiator.php
@@ -65,7 +65,7 @@ public function addVersionNegotiator(VersionNegotiatorInterface $version_negotia
    */
   public function getRevision(EntityInterface $entity, $resource_version_identifier) {
     try {
-      list($version_negotiator_name, $version_argument) = explode(VersionNegotiator::SEPARATOR, $resource_version_identifier, 2);
+      [$version_negotiator_name, $version_argument] = explode(VersionNegotiator::SEPARATOR, $resource_version_identifier, 2);
       if (!isset($this->negotiators[$version_negotiator_name])) {
         static::throwBadRequestHttpException($resource_version_identifier);
       }
diff --git a/core/modules/jsonapi/tests/src/Functional/ResourceTestBase.php b/core/modules/jsonapi/tests/src/Functional/ResourceTestBase.php
index 58838f000275..ada184a7d820 100644
--- a/core/modules/jsonapi/tests/src/Functional/ResourceTestBase.php
+++ b/core/modules/jsonapi/tests/src/Functional/ResourceTestBase.php
@@ -2284,7 +2284,7 @@ public function testPatchIndividual() {
     $this->assertResourceErrorResponse(403, "The current user is not allowed to PATCH the selected field (field_rest_test).", $url, $response, '/data/attributes/field_rest_test');
 
     // DX: 403 when sending PATCH request with updated read-only fields.
-    list($modified_entity, $original_values) = static::getModifiedEntityForPatchTesting($this->entity);
+    [$modified_entity, $original_values] = static::getModifiedEntityForPatchTesting($this->entity);
     // Send PATCH request by serializing the modified entity, assert the error
     // response, change the modified entity field that caused the error response
     // back to its original value, repeat.
diff --git a/core/modules/jsonapi/tests/src/Kernel/Normalizer/JsonApiDocumentTopLevelNormalizerTest.php b/core/modules/jsonapi/tests/src/Kernel/Normalizer/JsonApiDocumentTopLevelNormalizerTest.php
index 9fe25c95b9fc..c9154a6d445f 100644
--- a/core/modules/jsonapi/tests/src/Kernel/Normalizer/JsonApiDocumentTopLevelNormalizerTest.php
+++ b/core/modules/jsonapi/tests/src/Kernel/Normalizer/JsonApiDocumentTopLevelNormalizerTest.php
@@ -224,7 +224,7 @@ public function tearDown(): void {
    * @covers ::normalize
    */
   public function testNormalize() {
-    list($request, $resource_type) = $this->generateProphecies('node', 'article');
+    [$request, $resource_type] = $this->generateProphecies('node', 'article');
 
     $resource_object = ResourceObject::createFromEntity($resource_type, $this->node);
     $includes = $this->includeResolver->resolve($resource_object, 'uid,field_tags,field_image');
@@ -327,7 +327,7 @@ public function testNormalize() {
   public function testNormalizeRelated() {
     $this->markTestIncomplete('This fails and should be fixed by https://www.drupal.org/project/drupal/issues/2922121');
 
-    list($request, $resource_type) = $this->generateProphecies('node', 'article', 'uid');
+    [$request, $resource_type] = $this->generateProphecies('node', 'article', 'uid');
     $request->query = new ParameterBag([
       'fields' => [
         'user--user' => 'name,roles',
@@ -362,7 +362,7 @@ public function testNormalizeRelated() {
    * @covers ::normalize
    */
   public function testNormalizeUuid() {
-    list($request, $resource_type) = $this->generateProphecies('node', 'article', 'uuid');
+    [$request, $resource_type] = $this->generateProphecies('node', 'article', 'uuid');
     $resource_object = ResourceObject::createFromEntity($resource_type, $this->node);
     $include_param = 'uid,field_tags';
     $includes = $this->includeResolver->resolve($resource_object, $include_param);
@@ -452,11 +452,11 @@ public function testAliasFieldRouteException() {
     $this->assertSame('user_roles', $this->resourceTypeRepository->getByTypeName('user--user')->getPublicName('roles'));
 
     // Create the request to fetch the articles and fetch included user.
-    list($request, $resource_type) = $this->generateProphecies('node', 'article');
+    [$request, $resource_type] = $this->generateProphecies('node', 'article');
     $user = User::load($this->node->getOwnerId());
 
     $resource_object = ResourceObject::createFromEntity($resource_type, $this->node);
-    list($request, $user_resource_type) = $this->generateProphecies('user', 'user');
+    [$request, $user_resource_type] = $this->generateProphecies('user', 'user');
     $resource_object_user = LabelOnlyResourceObject::createFromEntity($user_resource_type, $user);
     $includes = $this->includeResolver->resolve($resource_object_user, 'user_roles');
 
@@ -499,7 +499,7 @@ public function testAliasFieldRouteException() {
    * @covers ::normalize
    */
   public function testNormalizeConfig() {
-    list($request, $resource_type) = $this->generateProphecies('node_type', 'node_type', 'id');
+    [$request, $resource_type] = $this->generateProphecies('node_type', 'node_type', 'id');
     $resource_object = ResourceObject::createFromEntity($resource_type, $this->nodeType);
     $document_wrapper = new JsonApiDocumentTopLevel(new ResourceObjectData([$resource_object], 1), new NullIncludedData(), new LinkCollection([]));
 
@@ -532,7 +532,7 @@ public function testNormalizeConfig() {
   public function testDenormalize() {
     $payload = '{"data":{"type":"article","attributes":{"title":"Testing article"}}}';
 
-    list($request, $resource_type) = $this->generateProphecies('node', 'article', 'id');
+    [$request, $resource_type] = $this->generateProphecies('node', 'article', 'id');
     $node = $this
       ->getNormalizer()
       ->denormalize(Json::decode($payload), NULL, 'api_json', [
@@ -598,10 +598,10 @@ public function testDenormalizeUuid() {
     ];
 
     foreach ($configurations as $configuration) {
-      list($payload_data, $expected) = $this->denormalizeUuidProviderBuilder($configuration);
+      [$payload_data, $expected] = $this->denormalizeUuidProviderBuilder($configuration);
       $payload = Json::encode($payload_data);
 
-      list($request, $resource_type) = $this->generateProphecies('node', 'article');
+      [$request, $resource_type] = $this->generateProphecies('node', 'article');
       $this->container->get('request_stack')->push($request);
       try {
         $node = $this
@@ -671,7 +671,7 @@ public function testDenormalizeInvalidTypeAndNoType() {
 
     // Test relationship member with invalid type.
     $payload = Json::encode($payload_data);
-    list($request, $resource_type) = $this->generateProphecies('node', 'article');
+    [$request, $resource_type] = $this->generateProphecies('node', 'article');
     $this->container->get('request_stack')->push($request);
     try {
       $this
@@ -690,7 +690,7 @@ public function testDenormalizeInvalidTypeAndNoType() {
     unset($payload_data['data']['relationships']['field_tags']['data'][0]['type']);
 
     $payload = Json::encode($payload_data);
-    list($request, $resource_type) = $this->generateProphecies('node', 'article');
+    [$request, $resource_type] = $this->generateProphecies('node', 'article');
     $this->container->get('request_stack')->push($request);
     try {
       $this->container->get('jsonapi_test_normalizers_kernel.jsonapi_document_toplevel')
@@ -715,9 +715,9 @@ public function testDenormalizeInvalidTypeAndNoType() {
    *   The test data.
    */
   protected function denormalizeUuidProviderBuilder(array $options) {
-    list($input, $expected) = $options;
-    list($input_tag_uuids, $input_user_uuid) = $input;
-    list($expected_tag_ids, $expected_user_id) = $expected;
+    [$input, $expected] = $options;
+    [$input_tag_uuids, $input_user_uuid] = $input;
+    [$expected_tag_ids, $expected_user_id] = $expected;
 
     $node = [
       [
@@ -773,7 +773,7 @@ protected function denormalizeUuidProviderBuilder(array $options) {
    * @dataProvider testCacheableMetadataProvider
    */
   public function testCacheableMetadata(CacheableMetadata $expected_metadata, $fields = NULL, $includes = NULL) {
-    list($request, $resource_type) = $this->generateProphecies('node', 'article');
+    [$request, $resource_type] = $this->generateProphecies('node', 'article');
     $resource_object = ResourceObject::createFromEntity($resource_type, $this->node);
     $context = [
       'resource_type' => $resource_type,
diff --git a/core/modules/jsonapi/tests/src/Unit/EventSubscriber/ResourceResponseValidatorTest.php b/core/modules/jsonapi/tests/src/Unit/EventSubscriber/ResourceResponseValidatorTest.php
index 2dcafb191df2..e6c1c566cfaa 100644
--- a/core/modules/jsonapi/tests/src/Unit/EventSubscriber/ResourceResponseValidatorTest.php
+++ b/core/modules/jsonapi/tests/src/Unit/EventSubscriber/ResourceResponseValidatorTest.php
@@ -190,7 +190,7 @@ public function validateResponseProvider() {
     ];
 
     $test_cases = array_map(function ($input) use ($defaults) {
-      list($json, $expected, $description, $route_name, $resource_type) = array_values($input + $defaults);
+      [$json, $expected, $description, $route_name, $resource_type] = array_values($input + $defaults);
       return [
         $this->createRequest($route_name, $resource_type),
         $this->createResponse($json),
diff --git a/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationUrl.php b/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationUrl.php
index 7436a3f3a010..48ee5e028b5c 100644
--- a/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationUrl.php
+++ b/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationUrl.php
@@ -164,7 +164,7 @@ public function processOutbound($path, &$options = [], Request $request = NULL,
         // In case either the original base URL or the HTTP host contains a
         // port, retain it.
         if (isset($normalized_base_url) && strpos($normalized_base_url, ':') !== FALSE) {
-          list(, $port) = explode(':', $normalized_base_url);
+          [, $port] = explode(':', $normalized_base_url);
           $options['base_url'] .= ':' . $port;
         }
         elseif (($url_scheme == 'http' && $port != 80) || ($url_scheme == 'https' && $port != 443)) {
diff --git a/core/modules/language/src/Plugin/migrate/process/ContentTranslationEnabledSetting.php b/core/modules/language/src/Plugin/migrate/process/ContentTranslationEnabledSetting.php
index 15a953897a2e..513b93343f90 100644
--- a/core/modules/language/src/Plugin/migrate/process/ContentTranslationEnabledSetting.php
+++ b/core/modules/language/src/Plugin/migrate/process/ContentTranslationEnabledSetting.php
@@ -29,7 +29,7 @@ public function transform($value, MigrateExecutableInterface $migrate_executable
       throw new MigrateException('Input should be an array');
     }
 
-    list($language_content_type, $entity_translation_entity_types, $entity_type) = $value;
+    [$language_content_type, $entity_translation_entity_types, $entity_type] = $value;
 
     switch ($language_content_type) {
       // In the case of being 0, it will be skipped. We are not actually setting
diff --git a/core/modules/language/tests/src/Functional/LanguageSwitchingTest.php b/core/modules/language/tests/src/Functional/LanguageSwitchingTest.php
index 1f5ec54495a3..98a2bd4352fb 100644
--- a/core/modules/language/tests/src/Functional/LanguageSwitchingTest.php
+++ b/core/modules/language/tests/src/Functional/LanguageSwitchingTest.php
@@ -97,7 +97,7 @@ protected function doTestLanguageBlockAuthenticated($block_label) {
     $labels = [];
     foreach ($language_switchers as $list_item) {
       $classes = explode(" ", $list_item->getAttribute('class'));
-      list($langcode) = array_intersect($classes, ['en', 'fr']);
+      [$langcode] = array_intersect($classes, ['en', 'fr']);
       $list_items[] = [
         'langcode_class' => $langcode,
         'data-drupal-link-system-path' => $list_item->getAttribute('data-drupal-link-system-path'),
@@ -156,7 +156,7 @@ protected function doTestLanguageBlockAnonymous($block_label) {
     $labels = [];
     foreach ($language_switchers as $list_item) {
       $classes = explode(" ", $list_item->getAttribute('class'));
-      list($langcode) = array_intersect($classes, ['en', 'fr']);
+      [$langcode] = array_intersect($classes, ['en', 'fr']);
       if (in_array('is-active', $classes)) {
         $links['active'][] = $langcode;
       }
diff --git a/core/modules/language/tests/src/Unit/ContentLanguageSettingsUnitTest.php b/core/modules/language/tests/src/Unit/ContentLanguageSettingsUnitTest.php
index 8d8b6711bd62..31a2c1c48acb 100644
--- a/core/modules/language/tests/src/Unit/ContentLanguageSettingsUnitTest.php
+++ b/core/modules/language/tests/src/Unit/ContentLanguageSettingsUnitTest.php
@@ -240,7 +240,7 @@ public function providerIsDefaultConfiguration() {
    * @dataProvider providerLoadByEntityTypeBundle
    */
   public function testLoadByEntityTypeBundle($config_id, ContentLanguageSettings $existing_config = NULL, $expected_langcode, $expected_language_alterable) {
-    list($type, $bundle) = explode('.', $config_id);
+    [$type, $bundle] = explode('.', $config_id);
 
     $nullConfig = new ContentLanguageSettings([
       'target_entity_type_id' => $type,
diff --git a/core/modules/layout_builder/src/Entity/LayoutBuilderEntityViewDisplay.php b/core/modules/layout_builder/src/Entity/LayoutBuilderEntityViewDisplay.php
index c0794f9e2707..70e86f699913 100644
--- a/core/modules/layout_builder/src/Entity/LayoutBuilderEntityViewDisplay.php
+++ b/core/modules/layout_builder/src/Entity/LayoutBuilderEntityViewDisplay.php
@@ -504,7 +504,7 @@ private function getQuickEditSectionComponent() {
       // Builder component. It follows the structure prescribed by the
       // documentation of hook_quickedit_render_field().
       if (count($parts) === 6 && $parts[0] === 'layout_builder') {
-        list(, $delta, $component_uuid, $entity_id) = QuickEditIntegration::deconstructViewModeId($original_mode);
+        [, $delta, $component_uuid, $entity_id] = QuickEditIntegration::deconstructViewModeId($original_mode);
         $entity = $this->entityTypeManager()->getStorage($this->getTargetEntityTypeId())->load($entity_id);
         $sections = $this->getEntitySections($entity);
         if (isset($sections[$delta])) {
@@ -539,7 +539,7 @@ private function getSectionComponentForFieldName($field_name) {
         if ($plugin instanceof DerivativeInspectionInterface && in_array($plugin->getBaseId(), ['field_block', 'extra_field_block'], TRUE)) {
           // FieldBlock derivative IDs are in the format
           // [entity_type]:[bundle]:[field].
-          list(, , $field_block_field_name) = explode(PluginBase::DERIVATIVE_SEPARATOR, $plugin->getDerivativeId());
+          [, , $field_block_field_name] = explode(PluginBase::DERIVATIVE_SEPARATOR, $plugin->getDerivativeId());
           if ($field_block_field_name === $field_name) {
             return $component;
           }
diff --git a/core/modules/layout_builder/src/Plugin/Block/ExtraFieldBlock.php b/core/modules/layout_builder/src/Plugin/Block/ExtraFieldBlock.php
index 56875deb35f1..35c9ee905d89 100644
--- a/core/modules/layout_builder/src/Plugin/Block/ExtraFieldBlock.php
+++ b/core/modules/layout_builder/src/Plugin/Block/ExtraFieldBlock.php
@@ -72,7 +72,7 @@ public function __construct(array $configuration, $plugin_id, $plugin_definition
     $this->entityTypeManager = $entity_type_manager;
     $this->entityFieldManager = $entity_field_manager;
     // Get field name from the plugin ID.
-    list (, , , $field_name) = explode(static::DERIVATIVE_SEPARATOR, $plugin_id, 4);
+    [, , , $field_name] = explode(static::DERIVATIVE_SEPARATOR, $plugin_id, 4);
     assert(!empty($field_name));
     $this->fieldName = $field_name;
 
diff --git a/core/modules/layout_builder/src/Plugin/Block/FieldBlock.php b/core/modules/layout_builder/src/Plugin/Block/FieldBlock.php
index 80d9b97315bf..b3b7b919ae2e 100644
--- a/core/modules/layout_builder/src/Plugin/Block/FieldBlock.php
+++ b/core/modules/layout_builder/src/Plugin/Block/FieldBlock.php
@@ -118,7 +118,7 @@ public function __construct(array $configuration, $plugin_id, $plugin_definition
     $this->logger = $logger;
 
     // Get the entity type and field name from the plugin ID.
-    list (, $entity_type_id, $bundle, $field_name) = explode(static::DERIVATIVE_SEPARATOR, $plugin_id, 4);
+    [, $entity_type_id, $bundle, $field_name] = explode(static::DERIVATIVE_SEPARATOR, $plugin_id, 4);
     $this->entityTypeId = $entity_type_id;
     $this->bundle = $bundle;
     $this->fieldName = $field_name;
diff --git a/core/modules/layout_builder/src/Plugin/SectionStorage/DefaultsSectionStorage.php b/core/modules/layout_builder/src/Plugin/SectionStorage/DefaultsSectionStorage.php
index 140a91213cc6..dc0f35707b41 100644
--- a/core/modules/layout_builder/src/Plugin/SectionStorage/DefaultsSectionStorage.php
+++ b/core/modules/layout_builder/src/Plugin/SectionStorage/DefaultsSectionStorage.php
@@ -261,7 +261,7 @@ private function extractEntityFromRoute($value, array $defaults) {
     }
 
     if (is_string($value) && strpos($value, '.') !== FALSE) {
-      list($entity_type_id, $bundle, $view_mode) = explode('.', $value, 3);
+      [$entity_type_id, $bundle, $view_mode] = explode('.', $value, 3);
     }
     elseif (!empty($defaults['entity_type_id']) && !empty($defaults['bundle']) && !empty($defaults['view_mode_name'])) {
       $entity_type_id = $defaults['entity_type_id'];
diff --git a/core/modules/layout_builder/src/Plugin/SectionStorage/OverridesSectionStorage.php b/core/modules/layout_builder/src/Plugin/SectionStorage/OverridesSectionStorage.php
index d6c0729643a7..219a3c6a0a84 100644
--- a/core/modules/layout_builder/src/Plugin/SectionStorage/OverridesSectionStorage.php
+++ b/core/modules/layout_builder/src/Plugin/SectionStorage/OverridesSectionStorage.php
@@ -195,7 +195,7 @@ public function deriveContextsFromRoute($value, $definition, $name, array $defau
    */
   private function extractEntityFromRoute($value, array $defaults) {
     if (strpos($value, '.') !== FALSE) {
-      list($entity_type_id, $entity_id) = explode('.', $value, 2);
+      [$entity_type_id, $entity_id] = explode('.', $value, 2);
     }
     elseif (isset($defaults['entity_type_id']) && !empty($defaults[$defaults['entity_type_id']])) {
       $entity_type_id = $defaults['entity_type_id'];
diff --git a/core/modules/layout_builder/src/QuickEditIntegration.php b/core/modules/layout_builder/src/QuickEditIntegration.php
index 9ee5045fbda9..c087f90971f5 100644
--- a/core/modules/layout_builder/src/QuickEditIntegration.php
+++ b/core/modules/layout_builder/src/QuickEditIntegration.php
@@ -219,7 +219,7 @@ private static function getViewModeId(EntityInterface $entity, EntityViewDisplay
    * @see \Drupal\layout_builder\QuickEditIntegration::getViewModeId()
    */
   public static function deconstructViewModeId($quick_edit_view_mode_id) {
-    list(, $entity_view_mode_id, $delta, $component_uuid, $entity_id) = explode('-', $quick_edit_view_mode_id, 7);
+    [, $entity_view_mode_id, $delta, $component_uuid, $entity_id] = explode('-', $quick_edit_view_mode_id, 7);
     return [
       $entity_view_mode_id,
       // @todo Explicitly cast delta to an integer, remove this in
@@ -247,7 +247,7 @@ public static function deconstructViewModeId($quick_edit_view_mode_id) {
    *   The re-rendered field.
    */
   public function quickEditRenderField(FieldableEntityInterface $entity, $field_name, $quick_edit_view_mode_id, $langcode) {
-    list($entity_view_mode, $delta, $component_uuid) = static::deconstructViewModeId($quick_edit_view_mode_id);
+    [$entity_view_mode, $delta, $component_uuid] = static::deconstructViewModeId($quick_edit_view_mode_id);
 
     $entity_build = $this->entityTypeManager->getViewBuilder($entity->getEntityTypeId())->view($entity, $entity_view_mode, $langcode);
     $this->buildEntityView($entity_build);
diff --git a/core/modules/link/src/Plugin/Field/FieldWidget/LinkWidget.php b/core/modules/link/src/Plugin/Field/FieldWidget/LinkWidget.php
index 721841f1ae4a..8c6816d8dede 100644
--- a/core/modules/link/src/Plugin/Field/FieldWidget/LinkWidget.php
+++ b/core/modules/link/src/Plugin/Field/FieldWidget/LinkWidget.php
@@ -71,7 +71,7 @@ protected static function getUriAsDisplayableString($uri) {
       $displayable_string = $uri_reference;
     }
     elseif ($scheme === 'entity') {
-      list($entity_type, $entity_id) = explode('/', substr($uri, 7), 2);
+      [$entity_type, $entity_id] = explode('/', substr($uri, 7), 2);
       // Show the 'entity:' URI as the entity autocomplete would.
       // @todo Support entity types other than 'node'. Will be fixed in
       //   https://www.drupal.org/node/2423093.
diff --git a/core/modules/link/tests/src/Functional/LinkFieldUITest.php b/core/modules/link/tests/src/Functional/LinkFieldUITest.php
index 4b485c2955d6..7045a04fa3d7 100644
--- a/core/modules/link/tests/src/Functional/LinkFieldUITest.php
+++ b/core/modules/link/tests/src/Functional/LinkFieldUITest.php
@@ -74,7 +74,7 @@ protected function setUp(): void {
    */
   public function testFieldUI() {
     foreach ($this->providerTestFieldUI() as $item) {
-      list($cardinality, $link_type, $title, $label, $field_name, $default_uri) = $item;
+      [$cardinality, $link_type, $title, $label, $field_name, $default_uri] = $item;
       $this->runFieldUIItem($cardinality, $link_type, $title, $label, $field_name, $default_uri);
     }
   }
diff --git a/core/modules/locale/src/Plugin/QueueWorker/LocaleTranslation.php b/core/modules/locale/src/Plugin/QueueWorker/LocaleTranslation.php
index 2d07fab3d6a5..0d73a2995c0f 100644
--- a/core/modules/locale/src/Plugin/QueueWorker/LocaleTranslation.php
+++ b/core/modules/locale/src/Plugin/QueueWorker/LocaleTranslation.php
@@ -80,7 +80,7 @@ public static function create(ContainerInterface $container, array $configuratio
    */
   public function processItem($data) {
     $this->moduleHandler->loadInclude('locale', 'batch.inc');
-    list($function, $args) = $data;
+    [$function, $args] = $data;
 
     // We execute batch operation functions here to check, download and import
     // the translation files. Batch functions use a context variable as last
diff --git a/core/modules/locale/src/PoDatabaseWriter.php b/core/modules/locale/src/PoDatabaseWriter.php
index aab9c72c1a3c..6763a79e675c 100644
--- a/core/modules/locale/src/PoDatabaseWriter.php
+++ b/core/modules/locale/src/PoDatabaseWriter.php
@@ -177,7 +177,7 @@ public function setHeader(PoHeader $header) {
       // Get and store the plural formula if available.
       $plural = $header->getPluralForms();
       if (isset($plural) && $p = $header->parsePluralForms($plural)) {
-        list($nplurals, $formula) = $p;
+        [$nplurals, $formula] = $p;
         \Drupal::service('locale.plural.formula')->setPluralFormula($langcode, $nplurals, $formula);
       }
     }
diff --git a/core/modules/media/src/OEmbed/ResourceFetcher.php b/core/modules/media/src/OEmbed/ResourceFetcher.php
index 05a6b2d0adc5..39e7dd147f67 100644
--- a/core/modules/media/src/OEmbed/ResourceFetcher.php
+++ b/core/modules/media/src/OEmbed/ResourceFetcher.php
@@ -74,7 +74,7 @@ public function fetchResource($url) {
       throw new ResourceException('Could not retrieve the oEmbed resource.', $url, [], $e);
     }
 
-    list($format) = $response->getHeader('Content-Type');
+    [$format] = $response->getHeader('Content-Type');
     $content = (string) $response->getBody();
 
     if (strstr($format, 'text/xml') || strstr($format, 'application/xml')) {
diff --git a/core/modules/menu_link_content/src/Form/MenuLinkContentForm.php b/core/modules/menu_link_content/src/Form/MenuLinkContentForm.php
index a7525c0ddc3d..6bffb46a373f 100644
--- a/core/modules/menu_link_content/src/Form/MenuLinkContentForm.php
+++ b/core/modules/menu_link_content/src/Form/MenuLinkContentForm.php
@@ -111,7 +111,7 @@ public function buildEntity(array $form, FormStateInterface $form_state) {
     /** @var \Drupal\menu_link_content\MenuLinkContentInterface $entity */
     $entity = parent::buildEntity($form, $form_state);
 
-    list($menu_name, $parent) = explode(':', $form_state->getValue('menu_parent'), 2);
+    [$menu_name, $parent] = explode(':', $form_state->getValue('menu_parent'), 2);
 
     $entity->parent->value = $parent;
     $entity->menu_name->value = $menu_name;
diff --git a/core/modules/menu_ui/menu_ui.module b/core/modules/menu_ui/menu_ui.module
index aaa740624153..ad49bf10f701 100644
--- a/core/modules/menu_ui/menu_ui.module
+++ b/core/modules/menu_ui/menu_ui.module
@@ -331,7 +331,7 @@ function menu_ui_form_node_form_submit($form, FormStateInterface $form_state) {
       // Decompose the selected menu parent option into 'menu_name' and 'parent',
       // if the form used the default parent selection widget.
       if (!empty($values['menu_parent'])) {
-        list($menu_name, $parent) = explode(':', $values['menu_parent'], 2);
+        [$menu_name, $parent] = explode(':', $values['menu_parent'], 2);
         $values['menu_name'] = $menu_name;
         $values['parent'] = $parent;
       }
diff --git a/core/modules/menu_ui/src/Plugin/Validation/Constraint/MenuSettingsConstraintValidator.php b/core/modules/menu_ui/src/Plugin/Validation/Constraint/MenuSettingsConstraintValidator.php
index 3fa8f2695cbb..2f6d6f85341a 100644
--- a/core/modules/menu_ui/src/Plugin/Validation/Constraint/MenuSettingsConstraintValidator.php
+++ b/core/modules/menu_ui/src/Plugin/Validation/Constraint/MenuSettingsConstraintValidator.php
@@ -25,7 +25,7 @@ public function validate($entity, Constraint $constraint) {
       }
 
       if (trim($values['title']) && !empty($values['menu_parent'])) {
-        list($menu_name, $parent) = explode(':', $values['menu_parent'], 2);
+        [$menu_name, $parent] = explode(':', $values['menu_parent'], 2);
         $values['menu_name'] = $menu_name;
         $values['parent'] = $parent;
       }
diff --git a/core/modules/menu_ui/tests/src/Traits/MenuUiTrait.php b/core/modules/menu_ui/tests/src/Traits/MenuUiTrait.php
index c4718235102d..0d0d14bf0d75 100644
--- a/core/modules/menu_ui/tests/src/Traits/MenuUiTrait.php
+++ b/core/modules/menu_ui/tests/src/Traits/MenuUiTrait.php
@@ -28,7 +28,7 @@ protected function assertMenuLink(array $expected_item, $menu_plugin_id) {
 
     // Pull the path from the menu link content.
     if (strpos($menu_plugin_id, 'menu_link_content') === 0) {
-      list(, $uuid) = explode(':', $menu_plugin_id, 2);
+      [, $uuid] = explode(':', $menu_plugin_id, 2);
       /** @var \Drupal\menu_link_content\Entity\MenuLinkContent $entity */
       $entity = \Drupal::service('entity.repository')
         ->loadEntityByUuid('menu_link_content', $uuid);
diff --git a/core/modules/migrate/src/EntityFieldDefinitionTrait.php b/core/modules/migrate/src/EntityFieldDefinitionTrait.php
index bc8af81909b9..37446d23b809 100644
--- a/core/modules/migrate/src/EntityFieldDefinitionTrait.php
+++ b/core/modules/migrate/src/EntityFieldDefinitionTrait.php
@@ -48,7 +48,7 @@ protected function getDefinitionFromEntity($key) {
   protected static function getEntityTypeId($plugin_id) {
     $entity_type_id = NULL;
     if (strpos($plugin_id, static::DERIVATIVE_SEPARATOR)) {
-      list(, $entity_type_id) = explode(static::DERIVATIVE_SEPARATOR, $plugin_id, 2);
+      [, $entity_type_id] = explode(static::DERIVATIVE_SEPARATOR, $plugin_id, 2);
     }
     return $entity_type_id;
   }
diff --git a/core/modules/migrate/src/Plugin/migrate/process/Download.php b/core/modules/migrate/src/Plugin/migrate/process/Download.php
index aedb204d410a..a2832b66e8a7 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/Download.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/Download.php
@@ -117,7 +117,7 @@ public function transform($value, MigrateExecutableInterface $migrate_executable
     if ($row->isStub()) {
       return NULL;
     }
-    list($source, $destination) = $value;
+    [$source, $destination] = $value;
 
     // Modify the destination filename if necessary.
     $final_destination = $this->fileSystem->getDestinationFilename($destination, $this->configuration['file_exists']);
diff --git a/core/modules/migrate/src/Plugin/migrate/process/FileCopy.php b/core/modules/migrate/src/Plugin/migrate/process/FileCopy.php
index 65b5c8ec7735..f4d006c09190 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/FileCopy.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/FileCopy.php
@@ -123,7 +123,7 @@ public function transform($value, MigrateExecutableInterface $migrate_executable
     if ($row->isStub()) {
       return NULL;
     }
-    list($source, $destination) = $value;
+    [$source, $destination] = $value;
 
     // If the source path or URI represents a remote resource, delegate to the
     // download plugin.
diff --git a/core/modules/migrate/src/Plugin/migrate/process/Route.php b/core/modules/migrate/src/Plugin/migrate/process/Route.php
index ebb9a4d6fddd..63c10200727f 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/Route.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/Route.php
@@ -97,7 +97,7 @@ public function transform($value, MigrateExecutableInterface $migrate_executable
       $options = [];
     }
     else {
-      list($link_path, $options) = $value;
+      [$link_path, $options] = $value;
     }
 
     $extracted = $this->pathValidator->getUrlIfValidWithoutAccessCheck($link_path);
diff --git a/core/modules/migrate/tests/src/Kernel/QueryBatchTest.php b/core/modules/migrate/tests/src/Kernel/QueryBatchTest.php
index 86dd2059dc88..7844e4144dc3 100644
--- a/core/modules/migrate/tests/src/Kernel/QueryBatchTest.php
+++ b/core/modules/migrate/tests/src/Kernel/QueryBatchTest.php
@@ -100,7 +100,7 @@ public function queryDataProvider() {
     $tests = [];
     $data_set = 0;
     foreach ($test_parameters as $data) {
-      list($num_rows, $batch_size) = $data;
+      [$num_rows, $batch_size] = $data;
       for ($i = 0; $i < $num_rows; $i++) {
         $tests[$data_set]['source_data'][$table][] = [
           'id' => $i,
diff --git a/core/modules/migrate/tests/src/Kernel/process/FileCopyTest.php b/core/modules/migrate/tests/src/Kernel/process/FileCopyTest.php
index 1d94110e6e96..ae52f6c6fe7a 100644
--- a/core/modules/migrate/tests/src/Kernel/process/FileCopyTest.php
+++ b/core/modules/migrate/tests/src/Kernel/process/FileCopyTest.php
@@ -65,7 +65,7 @@ public function testSuccessfulCopies() {
       ],
     ];
     foreach ($data_sets as $data) {
-      list($source_path, $destination_path) = $data;
+      [$source_path, $destination_path] = $data;
       $actual_destination = $this->doTransform($source_path, $destination_path);
       $this->assertFileExists($destination_path);
       // Make sure we didn't accidentally do a move.
@@ -149,7 +149,7 @@ public function testSuccessfulMoves() {
       ],
     ];
     foreach ($data_sets as $data) {
-      list($source_path, $destination_path) = $data;
+      [$source_path, $destination_path] = $data;
       $actual_destination = $this->doTransform($source_path, $destination_path, ['move' => TRUE]);
       $this->assertFileExists($destination_path);
       $this->assertFileDoesNotExist($source_path);
diff --git a/core/modules/migrate/tests/src/Unit/MigrationPluginManagerTest.php b/core/modules/migrate/tests/src/Unit/MigrationPluginManagerTest.php
index c148213e5c3a..a6ff0931ea56 100644
--- a/core/modules/migrate/tests/src/Unit/MigrationPluginManagerTest.php
+++ b/core/modules/migrate/tests/src/Unit/MigrationPluginManagerTest.php
@@ -58,7 +58,7 @@ public function testDependencyBuilding($migrations_data, $result_ids) {
         $requirements = array_combine($requirements, $requirements);
 
         $this->assertCount(1, $migration->set);
-        list($set_prop, $set_requirements) = reset($migration->set);
+        [$set_prop, $set_requirements] = reset($migration->set);
         $this->assertEquals('requirements', $set_prop);
         $this->assertEquals($requirements, $set_requirements);
       }
diff --git a/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeFormBase.php b/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeFormBase.php
index 30c1091b1008..989b7ee630c0 100644
--- a/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeFormBase.php
+++ b/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeFormBase.php
@@ -68,7 +68,7 @@ public static function create(ContainerInterface $container) {
    */
   public function buildForm(array $form, FormStateInterface $form_state) {
     // Get the current major version.
-    list($this->destinationSiteVersion) = explode('.', \Drupal::VERSION, 2);
+    [$this->destinationSiteVersion] = explode('.', \Drupal::VERSION, 2);
     $form = [];
     $form['actions']['#type'] = 'actions';
     $form['actions']['submit'] = [
diff --git a/core/modules/migrate_drupal_ui/tests/src/Functional/MigrateUpgradeFormStepsTest.php b/core/modules/migrate_drupal_ui/tests/src/Functional/MigrateUpgradeFormStepsTest.php
index 2ce1446efbd1..1d86b61ef8b3 100644
--- a/core/modules/migrate_drupal_ui/tests/src/Functional/MigrateUpgradeFormStepsTest.php
+++ b/core/modules/migrate_drupal_ui/tests/src/Functional/MigrateUpgradeFormStepsTest.php
@@ -63,7 +63,7 @@ public function testMigrateUpgradeReviewPage() {
     // form.
     $session = $this->assertSession();
     // Get the current major version.
-    list($destination_site_version) = explode('.', \Drupal::VERSION, 2);
+    [$destination_site_version] = explode('.', \Drupal::VERSION, 2);
     $expected['initial'] = "Upgrade a site by importing its files and the data from its database into a clean and empty new install of Drupal $destination_site_version.";
     $expected['incremental'] = "An upgrade has already been performed on this site.";
 
diff --git a/core/modules/node/src/EventSubscriber/NodeTranslationExceptionSubscriber.php b/core/modules/node/src/EventSubscriber/NodeTranslationExceptionSubscriber.php
index 7d93e7201a58..35203168a544 100644
--- a/core/modules/node/src/EventSubscriber/NodeTranslationExceptionSubscriber.php
+++ b/core/modules/node/src/EventSubscriber/NodeTranslationExceptionSubscriber.php
@@ -104,7 +104,7 @@ public function onException(ExceptionEvent $event) {
         $old_nid = $parameters['node'];
         $collection = $this->keyValue->get('node_translation_redirect');
         if ($old_nid && $value = $collection->get($old_nid)) {
-          list($nid, $langcode) = $value;
+          [$nid, $langcode] = $value;
           $language = $this->languageManager->getLanguage($langcode);
           $url = $this->urlGenerator->generateFromRoute('entity.node.canonical', ['node' => $nid], ['language' => $language]);
           $response = new RedirectResponse($url, 301);
diff --git a/core/modules/node/src/Plugin/Search/NodeSearch.php b/core/modules/node/src/Plugin/Search/NodeSearch.php
index 5412541a49b7..0342c5f01d29 100644
--- a/core/modules/node/src/Plugin/Search/NodeSearch.php
+++ b/core/modules/node/src/Plugin/Search/NodeSearch.php
@@ -757,7 +757,7 @@ protected function parseAdvancedDefaults($f, $keys) {
 
     // Split out the advanced search parameters.
     foreach ($f as $advanced) {
-      list($key, $value) = explode(':', $advanced, 2);
+      [$key, $value] = explode(':', $advanced, 2);
       if (!isset($defaults[$key])) {
         $defaults[$key] = [];
       }
diff --git a/core/modules/page_cache/tests/src/Functional/PageCacheTest.php b/core/modules/page_cache/tests/src/Functional/PageCacheTest.php
index 731ba0404589..d96ff7601229 100644
--- a/core/modules/page_cache/tests/src/Functional/PageCacheTest.php
+++ b/core/modules/page_cache/tests/src/Functional/PageCacheTest.php
@@ -610,7 +610,7 @@ public function testNoUrlNormalization() {
       ],
     ];
 
-    foreach ($tests as list($url_raw, $url_normalized)) {
+    foreach ($tests as [$url_raw, $url_normalized]) {
       // Initialize cache on raw URL.
       $headers = $this->getHeaders($url_raw);
       $this->assertEquals('MISS', $headers['X-Drupal-Cache']);
@@ -651,7 +651,7 @@ protected function getHeaders($url) {
     $headers = [];
     foreach (explode("\n", $output) as $header) {
       if (strpos($header, ':')) {
-        list($key, $value) = explode(':', $header, 2);
+        [$key, $value] = explode(':', $header, 2);
         $headers[trim($key)] = trim($value);
       }
     }
diff --git a/core/modules/quickedit/src/QuickEditController.php b/core/modules/quickedit/src/QuickEditController.php
index 455b7bfa6ca3..6a2a794ea2af 100644
--- a/core/modules/quickedit/src/QuickEditController.php
+++ b/core/modules/quickedit/src/QuickEditController.php
@@ -126,7 +126,7 @@ public function metadata(Request $request) {
 
     $metadata = [];
     foreach ($fields as $field) {
-      list($entity_type, $entity_id, $field_name, $langcode, $view_mode) = explode('/', $field);
+      [$entity_type, $entity_id, $field_name, $langcode, $view_mode] = explode('/', $field);
 
       // Load the entity.
       if (!$entity_type || !$this->entityTypeManager()->getDefinition($entity_type)) {
diff --git a/core/modules/responsive_image/src/Plugin/migrate/process/ImageStyleMappings.php b/core/modules/responsive_image/src/Plugin/migrate/process/ImageStyleMappings.php
index 5e6848380dda..30f40bae9889 100644
--- a/core/modules/responsive_image/src/Plugin/migrate/process/ImageStyleMappings.php
+++ b/core/modules/responsive_image/src/Plugin/migrate/process/ImageStyleMappings.php
@@ -24,7 +24,7 @@ public function transform($value, MigrateExecutableInterface $migrate_executable
       throw new MigrateException('Input should be an array');
     }
 
-    list($mappings, $breakpoint_group) = $value;
+    [$mappings, $breakpoint_group] = $value;
 
     $new_value = [];
     foreach ($mappings as $mapping_id => $mapping) {
diff --git a/core/modules/rest/tests/src/Functional/EntityResource/EntityResourceTestBase.php b/core/modules/rest/tests/src/Functional/EntityResource/EntityResourceTestBase.php
index e3df96112dc1..40c401bdf802 100644
--- a/core/modules/rest/tests/src/Functional/EntityResource/EntityResourceTestBase.php
+++ b/core/modules/rest/tests/src/Functional/EntityResource/EntityResourceTestBase.php
@@ -999,7 +999,7 @@ public function testPatch() {
 
     // DX: 403 when sending PATCH request with updated read-only fields.
     $this->assertPatchProtectedFieldNamesStructure();
-    list($modified_entity, $original_values) = static::getModifiedEntityForPatchTesting($this->entity);
+    [$modified_entity, $original_values] = static::getModifiedEntityForPatchTesting($this->entity);
     // Send PATCH request by serializing the modified entity, assert the error
     // response, change the modified entity field that caused the error response
     // back to its original value, repeat.
diff --git a/core/modules/search/src/SearchIndex.php b/core/modules/search/src/SearchIndex.php
index df6005685c8b..1334992e452a 100644
--- a/core/modules/search/src/SearchIndex.php
+++ b/core/modules/search/src/SearchIndex.php
@@ -117,7 +117,7 @@ public function index($type, $sid, $langcode, $text, $update_weights = TRUE) {
     foreach ($split as $value) {
       if ($tag) {
         // Increase or decrease score per word based on tag.
-        list($tagname) = explode(' ', $value, 2);
+        [$tagname] = explode(' ', $value, 2);
         $tagname = mb_strtolower($tagname);
         // Closing or opening tag?
         if ($tagname[0] == '/') {
diff --git a/core/modules/search/src/SearchQuery.php b/core/modules/search/src/SearchQuery.php
index 92a1e10a74b3..6869da434f71 100644
--- a/core/modules/search/src/SearchQuery.php
+++ b/core/modules/search/src/SearchQuery.php
@@ -316,7 +316,7 @@ protected function parseSearchExpression() {
         $has_new_scores = FALSE;
         $queryor = $this->connection->condition('OR');
         foreach ($key as $or) {
-          list($num_new_scores) = $this->parseWord($or);
+          [$num_new_scores] = $this->parseWord($or);
           $has_new_scores |= $num_new_scores;
           $queryor->condition('d.data', "% $or %", 'LIKE');
         }
@@ -329,7 +329,7 @@ protected function parseSearchExpression() {
       // Single ANDed term.
       else {
         $has_and = TRUE;
-        list($num_new_scores, $num_valid_words) = $this->parseWord($key);
+        [$num_new_scores, $num_valid_words] = $this->parseWord($key);
         $this->conditions->condition('d.data', "% $key %", 'LIKE');
         if (!$num_valid_words) {
           $this->simple = FALSE;
diff --git a/core/modules/system/system.admin.inc b/core/modules/system/system.admin.inc
index 65fb20a62b06..2c166df999e4 100644
--- a/core/modules/system/system.admin.inc
+++ b/core/modules/system/system.admin.inc
@@ -88,7 +88,7 @@ function template_preprocess_system_admin_index(&$variables) {
   $stripe = 0;
   // Iterate over all modules.
   foreach ($variables['menu_items'] as $module => $block) {
-    list($description, $items) = $block;
+    [$description, $items] = $block;
     $position = ++$stripe % 2 ? 'left' : 'right';
     // Output links.
     if (count($items)) {
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index 1295b6d18b3f..522159f005a9 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -605,7 +605,7 @@ function system_page_attachments(array &$page) {
   }
 
   // Get the major Drupal version.
-  list($version,) = explode('.', \Drupal::VERSION);
+  [$version] = explode('.', \Drupal::VERSION);
 
   // Attach default meta tags.
   $meta_default = [
diff --git a/core/modules/system/tests/modules/form_test/src/Form/FormTestTableSelectColspanForm.php b/core/modules/system/tests/modules/form_test/src/Form/FormTestTableSelectColspanForm.php
index becce376f282..3d0277cd76fc 100644
--- a/core/modules/system/tests/modules/form_test/src/Form/FormTestTableSelectColspanForm.php
+++ b/core/modules/system/tests/modules/form_test/src/Form/FormTestTableSelectColspanForm.php
@@ -22,7 +22,7 @@ public function getFormId() {
    * {@inheritdoc}
    */
   public function buildForm(array $form, FormStateInterface $form_state) {
-    list($header, $options) = _form_test_tableselect_get_data();
+    [$header, $options] = _form_test_tableselect_get_data();
 
     // Change the data so that the third column has colspan=2.
     $header['three'] = ['data' => 'Three', 'colspan' => 2];
diff --git a/core/modules/system/tests/modules/form_test/src/Form/FormTestTableSelectFormBase.php b/core/modules/system/tests/modules/form_test/src/Form/FormTestTableSelectFormBase.php
index af41782cb3e1..356b1d8ab6be 100644
--- a/core/modules/system/tests/modules/form_test/src/Form/FormTestTableSelectFormBase.php
+++ b/core/modules/system/tests/modules/form_test/src/Form/FormTestTableSelectFormBase.php
@@ -26,7 +26,7 @@ abstract class FormTestTableSelectFormBase extends FormBase {
    *   A form with a tableselect element and a submit button.
    */
   public function tableselectFormBuilder($form, FormStateInterface $form_state, $element_properties) {
-    list($header, $options) = _form_test_tableselect_get_data();
+    [$header, $options] = _form_test_tableselect_get_data();
 
     $form['tableselect'] = $element_properties;
 
diff --git a/core/modules/system/tests/src/Functional/Ajax/FrameworkTest.php b/core/modules/system/tests/src/Functional/Ajax/FrameworkTest.php
index e8fde75693f5..402ac866622e 100644
--- a/core/modules/system/tests/src/Functional/Ajax/FrameworkTest.php
+++ b/core/modules/system/tests/src/Functional/Ajax/FrameworkTest.php
@@ -58,7 +58,7 @@ public function testOrder() {
     $build['#attached']['library'][] = 'ajax_test/order-header-js-command';
     $build['#attached']['library'][] = 'ajax_test/order-footer-js-command';
     $assets = AttachedAssets::createFromRenderArray($build);
-    list($js_assets_header, $js_assets_footer) = $asset_resolver->getJsAssets($assets, FALSE);
+    [$js_assets_header, $js_assets_footer] = $asset_resolver->getJsAssets($assets, FALSE);
     $js_header_render_array = $js_collection_renderer->render($js_assets_header);
     $js_footer_render_array = $js_collection_renderer->render($js_assets_footer);
     $expected_commands[2] = new PrependCommand('head', $js_header_render_array);
diff --git a/core/modules/system/tests/src/Functional/Entity/EntityCacheTagsTestBase.php b/core/modules/system/tests/src/Functional/Entity/EntityCacheTagsTestBase.php
index e5b8dc2494a4..9c17f03c7ca8 100644
--- a/core/modules/system/tests/src/Functional/Entity/EntityCacheTagsTestBase.php
+++ b/core/modules/system/tests/src/Functional/Entity/EntityCacheTagsTestBase.php
@@ -91,10 +91,10 @@ protected function setUp() {
     }
 
     // Create a referencing and a non-referencing entity.
-    list(
+    [
       $this->referencingEntity,
       $this->nonReferencingEntity,
-    ) = $this->createReferenceTestEntities($this->entity);
+    ] = $this->createReferenceTestEntities($this->entity);
   }
 
   /**
diff --git a/core/modules/system/tests/src/Functional/Form/ElementsTableSelectTest.php b/core/modules/system/tests/src/Functional/Form/ElementsTableSelectTest.php
index 7643dda23b27..76be86fcac4a 100644
--- a/core/modules/system/tests/src/Functional/Form/ElementsTableSelectTest.php
+++ b/core/modules/system/tests/src/Functional/Form/ElementsTableSelectTest.php
@@ -156,7 +156,7 @@ public function testAdvancedSelect() {
    */
   public function testMultipleTrueOptionchecker() {
 
-    list($header, $options) = _form_test_tableselect_get_data();
+    [$header, $options] = _form_test_tableselect_get_data();
 
     $form['tableselect'] = [
       '#type' => 'tableselect',
@@ -165,11 +165,11 @@ public function testMultipleTrueOptionchecker() {
     ];
 
     // Test with a valid value.
-    list(, , $errors) = $this->formSubmitHelper($form, ['tableselect' => ['row1' => 'row1']]);
+    [, , $errors] = $this->formSubmitHelper($form, ['tableselect' => ['row1' => 'row1']]);
     $this->assertFalse(isset($errors['tableselect']), 'Option checker allows valid values for checkboxes.');
 
     // Test with an invalid value.
-    list(, , $errors) = $this->formSubmitHelper($form, ['tableselect' => ['non_existing_value' => 'non_existing_value']]);
+    [, , $errors] = $this->formSubmitHelper($form, ['tableselect' => ['non_existing_value' => 'non_existing_value']]);
     $this->assertTrue(isset($errors['tableselect']), 'Option checker disallows invalid values for checkboxes.');
 
   }
@@ -180,7 +180,7 @@ public function testMultipleTrueOptionchecker() {
    */
   public function testMultipleFalseOptionchecker() {
 
-    list($header, $options) = _form_test_tableselect_get_data();
+    [$header, $options] = _form_test_tableselect_get_data();
 
     $form['tableselect'] = [
       '#type' => 'tableselect',
@@ -190,11 +190,11 @@ public function testMultipleFalseOptionchecker() {
     ];
 
     // Test with a valid value.
-    list(, , $errors) = $this->formSubmitHelper($form, ['tableselect' => 'row1']);
+    [, , $errors] = $this->formSubmitHelper($form, ['tableselect' => 'row1']);
     $this->assertFalse(isset($errors['tableselect']), 'Option checker allows valid values for radio buttons.');
 
     // Test with an invalid value.
-    list(, , $errors) = $this->formSubmitHelper($form, ['tableselect' => 'non_existing_value']);
+    [, , $errors] = $this->formSubmitHelper($form, ['tableselect' => 'non_existing_value']);
     $this->assertTrue(isset($errors['tableselect']), 'Option checker disallows invalid values for radio buttons.');
   }
 
diff --git a/core/modules/system/tests/src/Functional/Menu/LocalActionTest.php b/core/modules/system/tests/src/Functional/Menu/LocalActionTest.php
index bf313a301893..fcea5966ad92 100644
--- a/core/modules/system/tests/src/Functional/Menu/LocalActionTest.php
+++ b/core/modules/system/tests/src/Functional/Menu/LocalActionTest.php
@@ -78,7 +78,7 @@ protected function assertLocalAction(array $actions) {
     $index = 0;
     foreach ($actions as $action) {
       /** @var \Drupal\Core\Url $url */
-      list($url, $title) = $action;
+      [$url, $title] = $action;
       // SimpleXML gives us the unescaped text, not the actual escaped markup,
       // so use a pattern instead to check the raw content.
       // This behavior is a bug in libxml, see
diff --git a/core/modules/system/tests/src/Functional/Menu/LocalTasksTest.php b/core/modules/system/tests/src/Functional/Menu/LocalTasksTest.php
index 0c4524dfde4f..7c74f5aaedf8 100644
--- a/core/modules/system/tests/src/Functional/Menu/LocalTasksTest.php
+++ b/core/modules/system/tests/src/Functional/Menu/LocalTasksTest.php
@@ -58,7 +58,7 @@ protected function assertLocalTasks(array $routes, $level = 0) {
     ]);
     $this->assertGreaterThan(0, count($elements), 'Local tasks found.');
     foreach ($routes as $index => $route_info) {
-      list($route_name, $route_parameters) = $route_info;
+      [$route_name, $route_parameters] = $route_info;
       $expected = Url::fromRoute($route_name, $route_parameters)->toString();
       $this->assertEquals($expected, $elements[$index]->getAttribute('href'), "Task " . ($index + 1) . "number href " . $elements[$index]->getAttribute('href') . " equals $expected.");
     }
diff --git a/core/modules/system/tests/src/Functional/Module/InstallUninstallTest.php b/core/modules/system/tests/src/Functional/Module/InstallUninstallTest.php
index 04ea17f6d171..9b6a3cb856f3 100644
--- a/core/modules/system/tests/src/Functional/Module/InstallUninstallTest.php
+++ b/core/modules/system/tests/src/Functional/Module/InstallUninstallTest.php
@@ -293,7 +293,7 @@ protected function assertInstallModuleUpdates($module) {
     $all_update_functions = $post_update_registry->getPendingUpdateFunctions();
     $empty_result = TRUE;
     foreach ($all_update_functions as $function) {
-      list($function_module,) = explode('_post_update_', $function);
+      [$function_module] = explode('_post_update_', $function);
       if ($module === $function_module) {
         $empty_result = FALSE;
         break;
diff --git a/core/modules/system/tests/src/Functional/System/AdminMetaTagTest.php b/core/modules/system/tests/src/Functional/System/AdminMetaTagTest.php
index 187a82c9857f..bcce6148bf90 100644
--- a/core/modules/system/tests/src/Functional/System/AdminMetaTagTest.php
+++ b/core/modules/system/tests/src/Functional/System/AdminMetaTagTest.php
@@ -20,7 +20,7 @@ class AdminMetaTagTest extends BrowserTestBase {
    * Verify that the meta tag HTML is generated correctly.
    */
   public function testMetaTag() {
-    list($version,) = explode('.', \Drupal::VERSION);
+    [$version] = explode('.', \Drupal::VERSION);
     $string = '<meta name="Generator" content="Drupal ' . $version . ' (https://www.drupal.org)" />';
     $this->drupalGet('node');
     $this->assertSession()->responseContains($string);
diff --git a/core/modules/system/tests/src/Functional/System/ResponseGeneratorTest.php b/core/modules/system/tests/src/Functional/System/ResponseGeneratorTest.php
index db6039fed133..38d842dddf30 100644
--- a/core/modules/system/tests/src/Functional/System/ResponseGeneratorTest.php
+++ b/core/modules/system/tests/src/Functional/System/ResponseGeneratorTest.php
@@ -42,7 +42,7 @@ public function testGeneratorHeaderAdded() {
 
     $node = $this->drupalCreateNode();
 
-    list($version) = explode('.', \Drupal::VERSION, 2);
+    [$version] = explode('.', \Drupal::VERSION, 2);
     $expectedGeneratorHeader = 'Drupal ' . $version . ' (https://www.drupal.org)';
 
     // Check to see if the header is added when viewing a normal content page
diff --git a/core/modules/system/tests/src/Kernel/Common/UrlTest.php b/core/modules/system/tests/src/Kernel/Common/UrlTest.php
index 295fb1ecaae3..447d056e3a01 100644
--- a/core/modules/system/tests/src/Kernel/Common/UrlTest.php
+++ b/core/modules/system/tests/src/Kernel/Common/UrlTest.php
@@ -59,7 +59,7 @@ public function testLinkBubbleableMetadata() {
     ];
 
     foreach ($cases as $case) {
-      list($title, $uri, $options, $expected_cacheability, $expected_attachments) = $case;
+      [$title, $uri, $options, $expected_cacheability, $expected_attachments] = $case;
       $expected_cacheability['contexts'] = Cache::mergeContexts($expected_cacheability['contexts'], ['languages:language_interface', 'theme', 'user.permissions']);
       $link = [
         '#type' => 'link',
diff --git a/core/modules/system/tests/src/Kernel/Mail/MailTest.php b/core/modules/system/tests/src/Kernel/Mail/MailTest.php
index c6c254569480..1eed7c500777 100644
--- a/core/modules/system/tests/src/Kernel/Mail/MailTest.php
+++ b/core/modules/system/tests/src/Kernel/Mail/MailTest.php
@@ -305,7 +305,7 @@ public function testRenderedElementsUseAbsolutePaths() {
 
     // Test images.
     foreach ($path_pairs as $test_type => $paths) {
-      list($input_path, $expected_path) = $paths;
+      [$input_path, $expected_path] = $paths;
 
       // Reset the state variable that holds sent messages.
       \Drupal::state()->set('system.test_mail_collector', []);
@@ -336,7 +336,7 @@ public function testRenderedElementsUseAbsolutePaths() {
     ];
 
     foreach ($path_pairs as $paths) {
-      list($input_path, $expected_path) = $paths;
+      [$input_path, $expected_path] = $paths;
 
       // Reset the state variable that holds sent messages.
       \Drupal::state()->set('system.test_mail_collector', []);
diff --git a/core/modules/system/tests/src/Unit/Menu/MenuLinkTreeTest.php b/core/modules/system/tests/src/Unit/Menu/MenuLinkTreeTest.php
index a3275470d4a0..fce63ffde228 100644
--- a/core/modules/system/tests/src/Unit/Menu/MenuLinkTreeTest.php
+++ b/core/modules/system/tests/src/Unit/Menu/MenuLinkTreeTest.php
@@ -193,7 +193,7 @@ public function providerTestBuildCacheability() {
     ];
 
     for ($i = 0; $i < count($access_scenarios); $i++) {
-      list($access, $access_cache_contexts) = $access_scenarios[$i];
+      [$access, $access_cache_contexts] = $access_scenarios[$i];
 
       for ($j = 0; $j < count($links_scenarios); $j++) {
         $links = $links_scenarios[$j];
diff --git a/core/modules/taxonomy/tests/src/Functional/TermTest.php b/core/modules/taxonomy/tests/src/Functional/TermTest.php
index e41a918cfe02..99d4a1e74957 100644
--- a/core/modules/taxonomy/tests/src/Functional/TermTest.php
+++ b/core/modules/taxonomy/tests/src/Functional/TermTest.php
@@ -443,7 +443,7 @@ public function testTermReorder() {
     // Fetch the created terms in the default alphabetical order, i.e. term1
     // precedes term2 alphabetically, and term2 precedes term3.
     $taxonomy_storage->resetCache();
-    list($term1, $term2, $term3) = $taxonomy_storage->loadTree($this->vocabulary->id(), 0, NULL, TRUE);
+    [$term1, $term2, $term3] = $taxonomy_storage->loadTree($this->vocabulary->id(), 0, NULL, TRUE);
 
     $this->drupalGet('admin/structure/taxonomy/manage/' . $this->vocabulary->id() . '/overview');
 
diff --git a/core/modules/toolbar/src/Controller/ToolbarController.php b/core/modules/toolbar/src/Controller/ToolbarController.php
index c94e35b307b0..75986f901b0f 100644
--- a/core/modules/toolbar/src/Controller/ToolbarController.php
+++ b/core/modules/toolbar/src/Controller/ToolbarController.php
@@ -21,7 +21,7 @@ class ToolbarController extends ControllerBase implements TrustedCallbackInterfa
    * @return \Drupal\Core\Ajax\AjaxResponse
    */
   public function subtreesAjax() {
-    list($subtrees, $cacheability) = toolbar_get_rendered_subtrees();
+    [$subtrees, $cacheability] = toolbar_get_rendered_subtrees();
     $response = new AjaxResponse();
     $response->addCommand(new SetSubtreesCommand($subtrees));
 
diff --git a/core/modules/toolbar/toolbar.module b/core/modules/toolbar/toolbar.module
index 5451dcb75156..a1def5da6892 100644
--- a/core/modules/toolbar/toolbar.module
+++ b/core/modules/toolbar/toolbar.module
@@ -164,7 +164,7 @@ function toolbar_toolbar() {
   // toolbar_subtrees route. We provide the JavaScript requesting that JSONP
   // script here with the hash parameter that is needed for that route.
   // @see toolbar_subtrees_jsonp()
-  list($hash, $hash_cacheability) = _toolbar_get_subtrees_hash();
+  [$hash, $hash_cacheability] = _toolbar_get_subtrees_hash();
   $subtrees_attached['drupalSettings']['toolbar'] = [
     'subtreesHash' => $hash,
   ];
@@ -286,7 +286,7 @@ function toolbar_get_rendered_subtrees() {
  *   The hash of the admin_menu subtrees.
  */
 function _toolbar_get_subtrees_hash() {
-  list($subtrees, $cacheability) = toolbar_get_rendered_subtrees();
+  [$subtrees, $cacheability] = toolbar_get_rendered_subtrees();
   $hash = Crypt::hashBase64(serialize($subtrees));
   return [$hash, $cacheability];
 }
diff --git a/core/modules/update/src/ProjectSecurityRequirement.php b/core/modules/update/src/ProjectSecurityRequirement.php
index b14acf5af741..440be9222fd4 100644
--- a/core/modules/update/src/ProjectSecurityRequirement.php
+++ b/core/modules/update/src/ProjectSecurityRequirement.php
@@ -97,7 +97,7 @@ public static function createFromProjectDataAndSecurityCoverageInfo(array $proje
       return new static();
     }
     if (isset($project_data['existing_version'])) {
-      list($major, $minor) = explode('.', $project_data['existing_version']);
+      [$major, $minor] = explode('.', $project_data['existing_version']);
       $existing_version = "$major.$minor";
       $next_version = "$major." . ((int) $minor + 1);
       return new static($project_data['title'], $security_coverage_info, $existing_version, $next_version);
diff --git a/core/modules/user/src/AccountForm.php b/core/modules/user/src/AccountForm.php
index 7f51ad6fc43f..34e5d401a4bc 100644
--- a/core/modules/user/src/AccountForm.php
+++ b/core/modules/user/src/AccountForm.php
@@ -418,7 +418,7 @@ protected function flagViolations(EntityConstraintViolationListInterface $violat
       'preferred_admin_langcode',
     ];
     foreach ($violations->getByFields($field_names) as $violation) {
-      list($field_name) = explode('.', $violation->getPropertyPath(), 2);
+      [$field_name] = explode('.', $violation->getPropertyPath(), 2);
       $form_state->setErrorByName($field_name, $violation->getMessage());
     }
     parent::flagViolations($violations, $form, $form_state);
diff --git a/core/modules/user/src/Event/UserFloodEvent.php b/core/modules/user/src/Event/UserFloodEvent.php
index c45bf80adc33..c62cb3da57a3 100644
--- a/core/modules/user/src/Event/UserFloodEvent.php
+++ b/core/modules/user/src/Event/UserFloodEvent.php
@@ -74,7 +74,7 @@ public function __construct($name, $threshold, $window, $identifier) {
       return;
     }
     if (strpos($identifier, '-') !== FALSE) {
-      list($uid, $ip) = explode('-', $identifier);
+      [$uid, $ip] = explode('-', $identifier);
       $this->uid = $uid;
       $this->ip = $ip;
       return;
diff --git a/core/modules/user/src/Plugin/migrate/process/d6/ProfileFieldOptionTranslation.php b/core/modules/user/src/Plugin/migrate/process/d6/ProfileFieldOptionTranslation.php
index fb9874339302..7087dc4e80b8 100644
--- a/core/modules/user/src/Plugin/migrate/process/d6/ProfileFieldOptionTranslation.php
+++ b/core/modules/user/src/Plugin/migrate/process/d6/ProfileFieldOptionTranslation.php
@@ -20,7 +20,7 @@ class ProfileFieldOptionTranslation extends ProcessPluginBase {
    * {@inheritdoc}
    */
   public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
-    list($field_type, $translation) = $value;
+    [$field_type, $translation] = $value;
 
     $new_value = NULL;
     if (isset($translation)) {
diff --git a/core/modules/user/tests/src/Kernel/UserValidationTest.php b/core/modules/user/tests/src/Kernel/UserValidationTest.php
index 89ede173b211..73886da53eae 100644
--- a/core/modules/user/tests/src/Kernel/UserValidationTest.php
+++ b/core/modules/user/tests/src/Kernel/UserValidationTest.php
@@ -69,7 +69,7 @@ public function testUsernames() {
     ];
     // cSpell:enable
     foreach ($test_cases as $name => $test_case) {
-      list($description, $test) = $test_case;
+      [$description, $test] = $test_case;
       $result = user_validate_name($name);
       $this->$test($result, $description . ' (' . $name . ')');
     }
diff --git a/core/modules/views/src/EventSubscriber/RouteSubscriber.php b/core/modules/views/src/EventSubscriber/RouteSubscriber.php
index 2f5b52c8eea0..50a3ca11d7ce 100644
--- a/core/modules/views/src/EventSubscriber/RouteSubscriber.php
+++ b/core/modules/views/src/EventSubscriber/RouteSubscriber.php
@@ -94,7 +94,7 @@ protected function getViewsDisplayIDsWithRoute() {
       // @todo Convert this method to some service.
       $views = $this->getApplicableViews();
       foreach ($views as $data) {
-        list($view_id, $display_id) = $data;
+        [$view_id, $display_id] = $data;
         $this->viewsDisplayPairs[] = $view_id . '.' . $display_id;
       }
       $this->viewsDisplayPairs = array_combine($this->viewsDisplayPairs, $this->viewsDisplayPairs);
@@ -111,7 +111,7 @@ protected function getViewsDisplayIDsWithRoute() {
   public function routes() {
     $collection = new RouteCollection();
     foreach ($this->getViewsDisplayIDsWithRoute() as $pair) {
-      list($view_id, $display_id) = explode('.', $pair);
+      [$view_id, $display_id] = explode('.', $pair);
       $view = $this->viewStorage->load($view_id);
       // @todo This should have an executable factory injected.
       if (($view = $view->getExecutable()) && $view instanceof ViewExecutable) {
@@ -133,7 +133,7 @@ public function routes() {
    */
   protected function alterRoutes(RouteCollection $collection) {
     foreach ($this->getViewsDisplayIDsWithRoute() as $pair) {
-      list($view_id, $display_id) = explode('.', $pair);
+      [$view_id, $display_id] = explode('.', $pair);
       $view = $this->viewStorage->load($view_id);
       // @todo This should have an executable factory injected.
       if (($view = $view->getExecutable()) && $view instanceof ViewExecutable) {
diff --git a/core/modules/views/src/Plugin/Block/ViewsBlockBase.php b/core/modules/views/src/Plugin/Block/ViewsBlockBase.php
index ac041a2e04a0..3cd675153413 100644
--- a/core/modules/views/src/Plugin/Block/ViewsBlockBase.php
+++ b/core/modules/views/src/Plugin/Block/ViewsBlockBase.php
@@ -64,7 +64,7 @@ abstract class ViewsBlockBase extends BlockBase implements ContainerFactoryPlugi
   public function __construct(array $configuration, $plugin_id, $plugin_definition, ViewExecutableFactory $executable_factory, EntityStorageInterface $storage, AccountInterface $user) {
     $this->pluginId = $plugin_id;
     $delta = $this->getDerivativeId();
-    list($name, $this->displayID) = explode('-', $delta, 2);
+    [$name, $this->displayID] = explode('-', $delta, 2);
     // Load the view.
     $view = $storage->load($name);
     $this->view = $executable_factory->get($view);
diff --git a/core/modules/views/src/Plugin/Derivative/ViewsLocalTask.php b/core/modules/views/src/Plugin/Derivative/ViewsLocalTask.php
index 358620440f79..72347530181f 100644
--- a/core/modules/views/src/Plugin/Derivative/ViewsLocalTask.php
+++ b/core/modules/views/src/Plugin/Derivative/ViewsLocalTask.php
@@ -72,7 +72,7 @@ public function getDerivativeDefinitions($base_plugin_definition) {
     $view_route_names = $this->state->get('views.view_route_names');
     foreach ($this->getApplicableMenuViews() as $pair) {
       /** @var \Drupal\views\ViewExecutable $executable */
-      list($view_id, $display_id) = $pair;
+      [$view_id, $display_id] = $pair;
       $executable = $this->viewStorage->load($view_id)->getExecutable();
 
       $executable->setDisplay($display_id);
@@ -109,7 +109,7 @@ public function alterLocalTasks(&$local_tasks) {
     $view_route_names = $this->state->get('views.view_route_names');
 
     foreach ($this->getApplicableMenuViews() as $pair) {
-      list($view_id, $display_id) = $pair;
+      [$view_id, $display_id] = $pair;
       /** @var \Drupal\views\ViewExecutable $executable */
       $executable = $this->viewStorage->load($view_id)->getExecutable();
 
diff --git a/core/modules/views/src/Plugin/Derivative/ViewsMenuLink.php b/core/modules/views/src/Plugin/Derivative/ViewsMenuLink.php
index c73846514b0c..7ddca09b3e81 100644
--- a/core/modules/views/src/Plugin/Derivative/ViewsMenuLink.php
+++ b/core/modules/views/src/Plugin/Derivative/ViewsMenuLink.php
@@ -50,7 +50,7 @@ public function getDerivativeDefinitions($base_plugin_definition) {
     $views = Views::getApplicableViews('uses_menu_links');
 
     foreach ($views as $data) {
-      list($view_id, $display_id) = $data;
+      [$view_id, $display_id] = $data;
       /** @var \Drupal\views\ViewExecutable $executable */
       $executable = $this->viewStorage->load($view_id)->getExecutable();
       $executable->initDisplay();
diff --git a/core/modules/views/src/Plugin/EntityReferenceSelection/ViewsSelection.php b/core/modules/views/src/Plugin/EntityReferenceSelection/ViewsSelection.php
index dff33a3e0dc0..cf80704f6b3f 100644
--- a/core/modules/views/src/Plugin/EntityReferenceSelection/ViewsSelection.php
+++ b/core/modules/views/src/Plugin/EntityReferenceSelection/ViewsSelection.php
@@ -134,7 +134,7 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
 
     $options = [];
     foreach ($displays as $data) {
-      list($view_id, $display_id) = $data;
+      [$view_id, $display_id] = $data;
       $view = $view_storage->load($view_id);
       if (in_array($view->get('base_table'), [$entity_type->getBaseTable(), $entity_type->getDataTable()])) {
         $display = $view->get('display');
@@ -318,7 +318,7 @@ public function validateReferenceableEntities(array $ids) {
   public static function settingsFormValidate($element, FormStateInterface $form_state, $form) {
     // Split view name and display name from the 'view_and_display' value.
     if (!empty($element['view_and_display']['#value'])) {
-      list($view, $display) = explode(':', $element['view_and_display']['#value']);
+      [$view, $display] = explode(':', $element['view_and_display']['#value']);
     }
     else {
       $form_state->setError($element, t('The views entity selection mode requires a view.'));
diff --git a/core/modules/views/src/Plugin/views/area/View.php b/core/modules/views/src/Plugin/views/area/View.php
index 932e7a6a2595..0f2d5bc91e7b 100644
--- a/core/modules/views/src/Plugin/views/area/View.php
+++ b/core/modules/views/src/Plugin/views/area/View.php
@@ -102,7 +102,7 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) {
    */
   public function render($empty = FALSE) {
     if (!empty($this->options['view_to_insert'])) {
-      list($view_name, $display_id) = explode(':', $this->options['view_to_insert']);
+      [$view_name, $display_id] = explode(':', $this->options['view_to_insert']);
 
       $view = $this->viewStorage->load($view_name)->getExecutable();
 
@@ -152,7 +152,7 @@ public function isEmpty() {
   public function calculateDependencies() {
     $dependencies = parent::calculateDependencies();
 
-    list($view_id) = explode(':', $this->options['view_to_insert'], 2);
+    [$view_id] = explode(':', $this->options['view_to_insert'], 2);
     // Don't call the current view, as it would result into an infinite recursion.
     if ($view_id && $this->view->storage->id() != $view_id) {
       $view = $this->viewStorage->load($view_id);
diff --git a/core/modules/views/src/Plugin/views/display/Page.php b/core/modules/views/src/Plugin/views/display/Page.php
index e2104da8a751..68fe5c4ee226 100644
--- a/core/modules/views/src/Plugin/views/display/Page.php
+++ b/core/modules/views/src/Plugin/views/display/Page.php
@@ -488,7 +488,7 @@ public function submitOptionsForm(&$form, FormStateInterface $form_state) {
     switch ($form_state->get('section')) {
       case 'menu':
         $menu = $form_state->getValue('menu');
-        list($menu['menu_name'], $menu['parent']) = explode(':', $menu['parent'], 2);
+        [$menu['menu_name'], $menu['parent']] = explode(':', $menu['parent'], 2);
         $this->setOption('menu', $menu);
         // send ajax form to options page if we use it.
         if ($form_state->getValue(['menu', 'type']) == 'default tab') {
diff --git a/core/modules/views/src/Plugin/views/field/EntityField.php b/core/modules/views/src/Plugin/views/field/EntityField.php
index 61db27cd1033..7d38ab2ae839 100644
--- a/core/modules/views/src/Plugin/views/field/EntityField.php
+++ b/core/modules/views/src/Plugin/views/field/EntityField.php
@@ -541,7 +541,7 @@ public function multiple_options_form(&$form, FormStateInterface $form_state) {
 
     // Make the string translatable by keeping it as a whole rather than
     // translating prefix and suffix separately.
-    list($prefix, $suffix) = explode('@count', $this->t('Display @count value(s)'));
+    [$prefix, $suffix] = explode('@count', $this->t('Display @count value(s)'));
 
     if ($field->getCardinality() == FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED) {
       $type = 'textfield';
@@ -600,7 +600,7 @@ public function multiple_options_form(&$form, FormStateInterface $form_state) {
       '#fieldset' => 'multiple_field_settings',
     ];
 
-    list($prefix, $suffix) = explode('@count', $this->t('starting from @count'));
+    [$prefix, $suffix] = explode('@count', $this->t('starting from @count'));
     $form['delta_offset'] = [
       '#type' => 'textfield',
       '#size' => 5,
diff --git a/core/modules/views/src/Plugin/views/relationship/GroupwiseMax.php b/core/modules/views/src/Plugin/views/relationship/GroupwiseMax.php
index 34e1b086ec4c..3632b95cb3e0 100644
--- a/core/modules/views/src/Plugin/views/relationship/GroupwiseMax.php
+++ b/core/modules/views/src/Plugin/views/relationship/GroupwiseMax.php
@@ -196,7 +196,7 @@ protected function leftQuery($options) {
       // select field. See https://www.drupal.org/node/844910.
       // We work around this further down.
       $sort = $options['subquery_sort'];
-      list($sort_table, $sort_field) = explode('.', $sort);
+      [$sort_table, $sort_field] = explode('.', $sort);
       $sort_options = ['order' => $options['subquery_order']];
       $temp_view->addHandler('default', 'sort', $sort_table, $sort_field, $sort_options);
     }
@@ -215,7 +215,7 @@ protected function leftQuery($options) {
     $relationship_id = NULL;
     // Add the used relationship for the subjoin, if defined.
     if (isset($this->definition['relationship'])) {
-      list($relationship_table, $relationship_field) = explode(':', $this->definition['relationship']);
+      [$relationship_table, $relationship_field] = explode(':', $this->definition['relationship']);
       $relationship_id = $temp_view->addHandler('default', 'relationship', $relationship_table, $relationship_field);
     }
     $temp_item_options = ['relationship' => $relationship_id];
@@ -269,7 +269,7 @@ protected function leftQuery($options) {
     foreach ($orders as $order_key => $order) {
       // But if we're using a whole view, we don't know what we have!
       if ($options['subquery_view']) {
-        list($sort_table, $sort_field) = explode('.', $order_key);
+        [$sort_table, $sort_field] = explode('.', $order_key);
       }
       $orders[$sort_table . $this->subquery_namespace . '.' . $sort_field] = $order;
       unset($orders[$order_key]);
diff --git a/core/modules/views/src/Plugin/views/wizard/WizardPluginBase.php b/core/modules/views/src/Plugin/views/wizard/WizardPluginBase.php
index 335ac065e005..0488df1c0434 100644
--- a/core/modules/views/src/Plugin/views/wizard/WizardPluginBase.php
+++ b/core/modules/views/src/Plugin/views/wizard/WizardPluginBase.php
@@ -1022,7 +1022,7 @@ protected function defaultDisplaySortsUser($form, FormStateInterface $form_state
     // Don't add a sort if there is no form value or the user set the sort to
     // 'none'.
     if (($sort_type = $form_state->getValue(['show', 'sort'])) && $sort_type != 'none') {
-      list($column, $sort) = explode(':', $sort_type);
+      [$column, $sort] = explode(':', $sort_type);
       // Column either be a column-name or the table-column-name.
       $column = explode('-', $column);
       if (count($column) > 1) {
@@ -1096,7 +1096,7 @@ protected function pageDisplayOptions(array $form, FormStateInterface $form_stat
     if (!empty($page['link'])) {
       $display_options['menu']['type'] = 'normal';
       $display_options['menu']['title'] = $page['link_properties']['title'];
-      list($display_options['menu']['menu_name'], $display_options['menu']['parent']) = explode(':', $page['link_properties']['parent'], 2);
+      [$display_options['menu']['menu_name'], $display_options['menu']['parent']] = explode(':', $page['link_properties']['parent'], 2);
     }
     return $display_options;
   }
diff --git a/core/modules/views/src/Views.php b/core/modules/views/src/Views.php
index 114b72748cd9..03218ac94e90 100644
--- a/core/modules/views/src/Views.php
+++ b/core/modules/views/src/Views.php
@@ -327,7 +327,7 @@ public static function getViewsAsOptions($views_only = FALSE, $filter = 'all', $
     else {
       // Append a ':' to the $exclude_view string so we always have more than one
       // item to explode.
-      list($exclude_view_name, $exclude_view_display) = explode(':', "$exclude_view:");
+      [$exclude_view_name, $exclude_view_display] = explode(':', "$exclude_view:");
     }
 
     $options = [];
diff --git a/core/modules/views/tests/src/Functional/Plugin/NumericFormatPluralTest.php b/core/modules/views/tests/src/Functional/Plugin/NumericFormatPluralTest.php
index 3392e2853533..5785730c22d4 100644
--- a/core/modules/views/tests/src/Functional/Plugin/NumericFormatPluralTest.php
+++ b/core/modules/views/tests/src/Functional/Plugin/NumericFormatPluralTest.php
@@ -91,7 +91,7 @@ public function testNumericFormatPlural() {
     $this->submitForm($edit, 'Add language');
     $formula = 'nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);';
     $header = new PoHeader();
-    list($nplurals, $formula) = $header->parsePluralForms($formula);
+    [$nplurals, $formula] = $header->parsePluralForms($formula);
     \Drupal::service('locale.plural.formula')->setPluralFormula('sl', $nplurals, $formula);
 
     // Change the view to Slovenian.
diff --git a/core/modules/views/tests/src/Kernel/EventSubscriber/ViewsEntitySchemaSubscriberIntegrationTest.php b/core/modules/views/tests/src/Kernel/EventSubscriber/ViewsEntitySchemaSubscriberIntegrationTest.php
index 2ae071a4e8dc..9c25d3aead6d 100644
--- a/core/modules/views/tests/src/Kernel/EventSubscriber/ViewsEntitySchemaSubscriberIntegrationTest.php
+++ b/core/modules/views/tests/src/Kernel/EventSubscriber/ViewsEntitySchemaSubscriberIntegrationTest.php
@@ -327,14 +327,14 @@ public function testVariousTableUpdates() {
 
     // base <-> base + translation
     $this->updateEntityTypeToTranslatable(TRUE);
-    list($view, $display) = $this->getUpdatedViewAndDisplay();
+    [$view, $display] = $this->getUpdatedViewAndDisplay();
 
     $this->assertEquals('entity_test_update', $view->get('base_table'));
     $this->assertEquals('entity_test_update', $display['display_options']['fields']['id']['table']);
     $this->assertEquals('entity_test_update_data', $display['display_options']['fields']['name']['table']);
 
     $this->updateEntityTypeToNotTranslatable(TRUE);
-    list($view, $display) = $this->getUpdatedViewAndDisplay();
+    [$view, $display] = $this->getUpdatedViewAndDisplay();
 
     $this->assertEquals('entity_test_update', $view->get('base_table'));
     $this->assertEquals('entity_test_update', $display['display_options']['fields']['id']['table']);
@@ -344,21 +344,21 @@ public function testVariousTableUpdates() {
 
     // base + translation <-> base + translation + revision
     $this->updateEntityTypeToTranslatable(TRUE);
-    list($view, $display) = $this->getUpdatedViewAndDisplay();
+    [$view, $display] = $this->getUpdatedViewAndDisplay();
 
     $this->assertEquals('entity_test_update', $view->get('base_table'));
     $this->assertEquals('entity_test_update', $display['display_options']['fields']['id']['table']);
     $this->assertEquals('entity_test_update_data', $display['display_options']['fields']['name']['table']);
 
     $this->updateEntityTypeToRevisionable(TRUE);
-    list($view, $display) = $this->getUpdatedViewAndDisplay();
+    [$view, $display] = $this->getUpdatedViewAndDisplay();
 
     $this->assertEquals('entity_test_update', $view->get('base_table'));
     $this->assertEquals('entity_test_update', $display['display_options']['fields']['id']['table']);
     $this->assertEquals('entity_test_update_data', $display['display_options']['fields']['name']['table']);
 
     $this->updateEntityTypeToNotRevisionable(TRUE);
-    list($view, $display) = $this->getUpdatedViewAndDisplay();
+    [$view, $display] = $this->getUpdatedViewAndDisplay();
 
     $this->assertEquals('entity_test_update', $view->get('base_table'));
     $this->assertEquals('entity_test_update', $display['display_options']['fields']['id']['table']);
@@ -368,21 +368,21 @@ public function testVariousTableUpdates() {
 
     // base + revision <-> base + translation + revision
     $this->updateEntityTypeToRevisionable();
-    list($view, $display) = $this->getUpdatedViewAndDisplay();
+    [$view, $display] = $this->getUpdatedViewAndDisplay();
 
     $this->assertEquals('entity_test_update', $view->get('base_table'));
     $this->assertEquals('entity_test_update', $display['display_options']['fields']['id']['table']);
     $this->assertEquals('entity_test_update', $display['display_options']['fields']['name']['table']);
 
     $this->updateEntityTypeToTranslatable(TRUE);
-    list($view, $display) = $this->getUpdatedViewAndDisplay();
+    [$view, $display] = $this->getUpdatedViewAndDisplay();
 
     $this->assertEquals('entity_test_update', $view->get('base_table'));
     $this->assertEquals('entity_test_update', $display['display_options']['fields']['id']['table']);
     $this->assertEquals('entity_test_update_data', $display['display_options']['fields']['name']['table']);
 
     $this->updateEntityTypeToNotTranslatable(TRUE);
-    list($view, $display) = $this->getUpdatedViewAndDisplay();
+    [$view, $display] = $this->getUpdatedViewAndDisplay();
 
     $this->assertEquals('entity_test_update', $view->get('base_table'));
     $this->assertEquals('entity_test_update', $display['display_options']['fields']['id']['table']);
@@ -392,14 +392,14 @@ public function testVariousTableUpdates() {
 
     // base <-> base + revision
     $this->updateEntityTypeToRevisionable(TRUE);
-    list($view, $display) = $this->getUpdatedViewAndDisplay();
+    [$view, $display] = $this->getUpdatedViewAndDisplay();
 
     $this->assertEquals('entity_test_update', $view->get('base_table'));
     $this->assertEquals('entity_test_update', $display['display_options']['fields']['id']['table']);
     $this->assertEquals('entity_test_update', $display['display_options']['fields']['name']['table']);
 
     $this->updateEntityTypeToNotRevisionable(TRUE);
-    list($view, $display) = $this->getUpdatedViewAndDisplay();
+    [$view, $display] = $this->getUpdatedViewAndDisplay();
 
     $this->assertEquals('entity_test_update', $view->get('base_table'));
     $this->assertEquals('entity_test_update', $display['display_options']['fields']['id']['table']);
@@ -410,7 +410,7 @@ public function testVariousTableUpdates() {
     // base <-> base + translation + revision
     $this->updateEntityTypeToRevisionable(TRUE);
     $this->updateEntityTypeToTranslatable(TRUE);
-    list($view, $display) = $this->getUpdatedViewAndDisplay();
+    [$view, $display] = $this->getUpdatedViewAndDisplay();
 
     $this->assertEquals('entity_test_update', $view->get('base_table'));
     $this->assertEquals('entity_test_update', $display['display_options']['fields']['id']['table']);
@@ -418,7 +418,7 @@ public function testVariousTableUpdates() {
 
     $this->updateEntityTypeToNotRevisionable(TRUE);
     $this->updateEntityTypeToNotTranslatable(TRUE);
-    list($view, $display) = $this->getUpdatedViewAndDisplay();
+    [$view, $display] = $this->getUpdatedViewAndDisplay();
 
     $this->assertEquals('entity_test_update', $view->get('base_table'));
     $this->assertEquals('entity_test_update', $display['display_options']['fields']['id']['table']);
@@ -439,21 +439,21 @@ public function testVariousTableUpdatesForRevisionView() {
     // base + revision <-> base + translation + revision
     $this->updateEntityTypeToRevisionable(TRUE);
 
-    list($view, $display) = $this->getUpdatedViewAndDisplay(TRUE);
+    [$view, $display] = $this->getUpdatedViewAndDisplay(TRUE);
 
     $this->assertEquals('entity_test_update_revision', $view->get('base_table'));
     $this->assertEquals('entity_test_update_revision', $display['display_options']['fields']['id']['table']);
     $this->assertEquals('entity_test_update_revision', $display['display_options']['fields']['name']['table']);
 
     $this->updateEntityTypeToTranslatable(TRUE);
-    list($view, $display) = $this->getUpdatedViewAndDisplay(TRUE);
+    [$view, $display] = $this->getUpdatedViewAndDisplay(TRUE);
 
     $this->assertEquals('entity_test_update_revision', $view->get('base_table'));
     $this->assertEquals('entity_test_update_revision', $display['display_options']['fields']['id']['table']);
     $this->assertEquals('entity_test_update_revision_data', $display['display_options']['fields']['name']['table']);
 
     $this->updateEntityTypeToNotTranslatable(TRUE);
-    list($view, $display) = $this->getUpdatedViewAndDisplay(TRUE);
+    [$view, $display] = $this->getUpdatedViewAndDisplay(TRUE);
 
     $this->assertEquals('entity_test_update_revision', $view->get('base_table'));
     $this->assertEquals('entity_test_update_revision', $display['display_options']['fields']['id']['table']);
diff --git a/core/modules/views/tests/src/Kernel/ModuleTest.php b/core/modules/views/tests/src/Kernel/ModuleTest.php
index 8060460627b9..55fe86c00225 100644
--- a/core/modules/views/tests/src/Kernel/ModuleTest.php
+++ b/core/modules/views/tests/src/Kernel/ModuleTest.php
@@ -229,7 +229,7 @@ public function testViewsPluginList() {
     $plugin_list = Views::pluginList();
     // Only plugins used by 'test_view' should be in the plugin list.
     foreach (['display:default', 'pager:none'] as $key) {
-      list($plugin_type, $plugin_id) = explode(':', $key);
+      [$plugin_type, $plugin_id] = explode(':', $key);
       $plugin_def = $this->container->get("plugin.manager.views.$plugin_type")->getDefinition($plugin_id);
 
       $this->assertTrue(isset($plugin_list[$key]), new FormattableMarkup('The expected @key plugin list key was found.', ['@key' => $key]));
diff --git a/core/modules/views/tests/src/Unit/Controller/ViewAjaxControllerTest.php b/core/modules/views/tests/src/Unit/Controller/ViewAjaxControllerTest.php
index 8964cecc0c97..f0e3ba9ce91e 100644
--- a/core/modules/views/tests/src/Unit/Controller/ViewAjaxControllerTest.php
+++ b/core/modules/views/tests/src/Unit/Controller/ViewAjaxControllerTest.php
@@ -188,7 +188,7 @@ public function testAjaxView() {
     $request->request->set('ajax_page_state', 'drupal.settings[]');
     $request->request->set('type', 'article');
 
-    list($view, $executable) = $this->setupValidMocks();
+    [$view, $executable] = $this->setupValidMocks();
 
     $this->redirectDestination->expects($this->atLeastOnce())
       ->method('set')
@@ -217,7 +217,7 @@ public function testAjaxViewViewPathNoSlash() {
     $request->request->set('ajax_page_state', 'drupal.settings[]');
     $request->request->set('type', 'article');
 
-    list($view, $executable) = $this->setupValidMocks();
+    [$view, $executable] = $this->setupValidMocks();
 
     $this->redirectDestination->expects($this->atLeastOnce())
       ->method('set')
@@ -261,7 +261,7 @@ public function testAjaxViewWithArguments() {
     $request->request->set('view_display_id', 'page_1');
     $request->request->set('view_args', 'arg1/arg2');
 
-    list($view, $executable) = $this->setupValidMocks();
+    [$view, $executable] = $this->setupValidMocks();
     $executable->expects($this->once())
       ->method('preview')
       ->with('page_1', ['arg1', 'arg2']);
@@ -282,7 +282,7 @@ public function testAjaxViewWithEmptyArguments() {
     // Simulate a request that has a second, empty argument.
     $request->request->set('view_args', 'arg1/');
 
-    list($view, $executable) = $this->setupValidMocks();
+    [$view, $executable] = $this->setupValidMocks();
     $executable->expects($this->once())
       ->method('preview')
       ->with('page_1', $this->identicalTo(['arg1', NULL]));
@@ -302,7 +302,7 @@ public function testAjaxViewWithHtmlEntityArguments() {
     $request->request->set('view_display_id', 'page_1');
     $request->request->set('view_args', 'arg1 &amp; arg2/arg3');
 
-    list($view, $executable) = $this->setupValidMocks();
+    [$view, $executable] = $this->setupValidMocks();
     $executable->expects($this->once())
       ->method('preview')
       ->with('page_1', ['arg1 & arg2', 'arg3']);
@@ -324,7 +324,7 @@ public function testAjaxViewWithPager() {
     $request->request->set('view_dom_id', $dom_id);
     $request->request->set('pager_element', '0');
 
-    list($view, $executable) = $this->setupValidMocks();
+    [$view, $executable] = $this->setupValidMocks();
 
     $display_handler = $this->getMockBuilder('Drupal\views\Plugin\views\display\DisplayPluginBase')
       ->disableOriginalConstructor()
diff --git a/core/modules/views/tests/src/Unit/EventSubscriber/RouteSubscriberTest.php b/core/modules/views/tests/src/Unit/EventSubscriber/RouteSubscriberTest.php
index ec59ed0b0079..8a466182444c 100644
--- a/core/modules/views/tests/src/Unit/EventSubscriber/RouteSubscriberTest.php
+++ b/core/modules/views/tests/src/Unit/EventSubscriber/RouteSubscriberTest.php
@@ -65,7 +65,7 @@ protected function setUp(): void {
    * @covers ::routeRebuildFinished
    */
   public function testRouteRebuildFinished() {
-    list($display_1, $display_2) = $this->setupMocks();
+    [$display_1, $display_2] = $this->setupMocks();
 
     $display_1->expects($this->once())
       ->method('collectRoutes')
@@ -96,7 +96,7 @@ public function testOnAlterRoutes() {
 
     $route_event = new RouteBuildEvent($collection, 'views');
 
-    list($display_1, $display_2) = $this->setupMocks();
+    [$display_1, $display_2] = $this->setupMocks();
 
     // The page_1 display overrides an existing route, so the dynamicRoutes
     // should only call the second display.
diff --git a/core/modules/views/tests/src/Unit/Plugin/display/PathPluginBaseTest.php b/core/modules/views/tests/src/Unit/Plugin/display/PathPluginBaseTest.php
index 7429aefb8a6c..6c67ab2e3fc4 100644
--- a/core/modules/views/tests/src/Unit/Plugin/display/PathPluginBaseTest.php
+++ b/core/modules/views/tests/src/Unit/Plugin/display/PathPluginBaseTest.php
@@ -89,7 +89,7 @@ public function setupContainer() {
    * @see \Drupal\views\Plugin\views\display\PathPluginBase::collectRoutes()
    */
   public function testCollectRoutes() {
-    list($view) = $this->setupViewExecutableAccessPlugin();
+    [$view] = $this->setupViewExecutableAccessPlugin();
 
     $display = [];
     $display['display_plugin'] = 'page';
@@ -117,7 +117,7 @@ public function testCollectRoutes() {
    * @see \Drupal\views\Plugin\views\display\PathPluginBase::collectRoutes()
    */
   public function testCollectRoutesWithDisplayReturnResponse() {
-    list($view) = $this->setupViewExecutableAccessPlugin();
+    [$view] = $this->setupViewExecutableAccessPlugin();
 
     $display = [];
     $display['display_plugin'] = 'page';
@@ -144,7 +144,7 @@ public function testCollectRoutesWithDisplayReturnResponse() {
    * @see \Drupal\views\Plugin\views\display\PathPluginBase::collectRoutes()
    */
   public function testCollectRoutesWithArguments() {
-    list($view) = $this->setupViewExecutableAccessPlugin();
+    [$view] = $this->setupViewExecutableAccessPlugin();
 
     $display = [];
     $display['display_plugin'] = 'page';
@@ -172,7 +172,7 @@ public function testCollectRoutesWithArguments() {
    * @see \Drupal\views\Plugin\views\display\PathPluginBase::collectRoutes()
    */
   public function testCollectRoutesWithArgumentsNotSpecifiedInPath() {
-    list($view) = $this->setupViewExecutableAccessPlugin();
+    [$view] = $this->setupViewExecutableAccessPlugin();
 
     $display = [];
     $display['display_plugin'] = 'page';
@@ -201,7 +201,7 @@ public function testCollectRoutesWithArgumentsNotSpecifiedInPath() {
    * Tests the collect routes method with an alternative route name in the UI.
    */
   public function testCollectRoutesWithSpecialRouteName() {
-    list($view) = $this->setupViewExecutableAccessPlugin();
+    [$view] = $this->setupViewExecutableAccessPlugin();
 
     $display = [];
     $display['display_plugin'] = 'page';
@@ -232,7 +232,7 @@ public function testAlterRoute() {
     $route_2 = new Route('test_route/example', ['_controller' => 'Drupal\Tests\Core\Controller\TestController::content']);
     $collection->add('test_route_2', $route_2);
 
-    list($view) = $this->setupViewExecutableAccessPlugin();
+    [$view] = $this->setupViewExecutableAccessPlugin();
 
     $display = [];
     $display['display_plugin'] = 'page';
@@ -269,7 +269,7 @@ public function testAlterPostRestRoute() {
     $route->setMethods(['POST']);
     $collection->add('test_route', $route);
 
-    list($view) = $this->setupViewExecutableAccessPlugin();
+    [$view] = $this->setupViewExecutableAccessPlugin();
 
     $display = [];
     $display['display_plugin'] = 'page';
@@ -308,7 +308,7 @@ public function testGetRestRoute() {
     $route->setRequirement('_format', 'json');
     $collection->add('test_route', $route);
 
-    list($view) = $this->setupViewExecutableAccessPlugin();
+    [$view] = $this->setupViewExecutableAccessPlugin();
 
     $display = [];
     $display['display_plugin'] = 'page';
@@ -346,7 +346,7 @@ public function testAlterRouteWithAlterCallback() {
     $route_2 = new Route('test_route/example', ['_controller' => 'Drupal\Tests\Core\Controller\TestController::content']);
     $collection->add('test_route_2', $route_2);
 
-    list($view) = $this->setupViewExecutableAccessPlugin();
+    [$view] = $this->setupViewExecutableAccessPlugin();
 
     $display = [];
     $display['display_plugin'] = 'page';
@@ -381,7 +381,7 @@ public function testAlterRouteWithAlterCallback() {
    */
   public function testCollectRoutesWithNamedParameters() {
     /** @var \Drupal\views\ViewExecutable|\PHPUnit\Framework\MockObject\MockObject $view */
-    list($view) = $this->setupViewExecutableAccessPlugin();
+    [$view] = $this->setupViewExecutableAccessPlugin();
 
     $view->argument = [];
     $view->argument['nid'] = $this->getMockBuilder('Drupal\views\Plugin\views\argument\ArgumentPluginBase')
@@ -416,7 +416,7 @@ public function testAlterRoutesWithParameters() {
     $collection = new RouteCollection();
     $collection->add('test_route', new Route('test_route/{parameter}', ['_controller' => 'Drupal\Tests\Core\Controller\TestController::content']));
 
-    list($view) = $this->setupViewExecutableAccessPlugin();
+    [$view] = $this->setupViewExecutableAccessPlugin();
 
     // Manually set up an argument handler.
     $argument = $this->getMockBuilder('Drupal\views\Plugin\views\argument\ArgumentPluginBase')
@@ -453,7 +453,7 @@ public function testAlterRoutesWithParametersAndUpcasting() {
     $collection = new RouteCollection();
     $collection->add('test_route', new Route('test_route/{parameter}', ['_controller' => 'Drupal\Tests\Core\Controller\TestController::content'], [], ['parameters' => ['taxonomy_term' => 'entity:entity_test']]));
 
-    list($view) = $this->setupViewExecutableAccessPlugin();
+    [$view] = $this->setupViewExecutableAccessPlugin();
 
     // Manually set up an argument handler.
     $argument = $this->getMockBuilder('Drupal\views\Plugin\views\argument\ArgumentPluginBase')
@@ -491,7 +491,7 @@ public function testAlterRoutesWithOptionalParameters() {
     $collection = new RouteCollection();
     $collection->add('test_route', new Route('test_route/{parameter}', ['_controller' => 'Drupal\Tests\Core\Controller\TestController::content']));
 
-    list($view) = $this->setupViewExecutableAccessPlugin();
+    [$view] = $this->setupViewExecutableAccessPlugin();
 
     $display = [];
     $display['display_plugin'] = 'page';
@@ -523,7 +523,7 @@ public function testAlterRoutesWithOptionalParameters() {
    * Tests the getRouteName method.
    */
   public function testGetRouteName() {
-    list($view) = $this->setupViewExecutableAccessPlugin();
+    [$view] = $this->setupViewExecutableAccessPlugin();
 
     $display = [];
     $display['display_plugin'] = 'page';
diff --git a/core/modules/views/tests/src/Unit/ViewExecutableTest.php b/core/modules/views/tests/src/Unit/ViewExecutableTest.php
index f24c0d1428a7..8654aaeffcb2 100644
--- a/core/modules/views/tests/src/Unit/ViewExecutableTest.php
+++ b/core/modules/views/tests/src/Unit/ViewExecutableTest.php
@@ -300,7 +300,7 @@ public function testGetUrlWithPlaceholdersAndWithoutArgsAndExceptionValue() {
   public function testBuildThemeFunctions() {
     /** @var \Drupal\views\ViewExecutable|\PHPUnit\Framework\MockObject\MockObject $view */
     /** @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit\Framework\MockObject\MockObject $display */
-    list($view, $display) = $this->setupBaseViewAndDisplay();
+    [$view, $display] = $this->setupBaseViewAndDisplay();
 
     unset($view->display_handler);
     $expected = [
@@ -361,7 +361,7 @@ public function testGenerateHandlerId() {
   public function testAddHandler($option, $handler_type) {
     /** @var \Drupal\views\ViewExecutable|\PHPUnit\Framework\MockObject\MockObject $view */
     /** @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit\Framework\MockObject\MockObject $display */
-    list($view, $display) = $this->setupBaseViewAndDisplay();
+    [$view, $display] = $this->setupBaseViewAndDisplay();
 
     $views_data = [];
     $views_data['test_field'] = [
@@ -403,7 +403,7 @@ public function testAddHandler($option, $handler_type) {
   public function testAddHandlerWithEntityField($option, $handler_type) {
     /** @var \Drupal\views\ViewExecutable|\PHPUnit\Framework\MockObject\MockObject $view */
     /** @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit\Framework\MockObject\MockObject $display */
-    list($view, $display) = $this->setupBaseViewAndDisplay();
+    [$view, $display] = $this->setupBaseViewAndDisplay();
 
     $views_data = [];
     $views_data['table']['entity type'] = 'test_entity_type';
@@ -467,7 +467,7 @@ public function addHandlerProvider() {
   public function testAttachDisplays($display_enabled, $access_granted, $expected_to_be_attached) {
     /** @var \Drupal\views\ViewExecutable|\PHPUnit\Framework\MockObject\MockObject $view */
     /** @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit\Framework\MockObject\MockObject $display */
-    list($view, $display) = $this->setupBaseViewAndDisplay();
+    [$view, $display] = $this->setupBaseViewAndDisplay();
 
     $display->expects($this->atLeastOnce())
       ->method('acceptAttachments')
@@ -583,7 +583,7 @@ protected function setupBaseViewAndDisplay() {
   public function testSetItemsPerPageBeforePreRender() {
     /** @var \Drupal\views\ViewExecutable|\PHPUnit\Framework\MockObject\MockObject $view */
     /** @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit\Framework\MockObject\MockObject $display */
-    list($view, $display) = $this->setupBaseViewAndDisplay();
+    [$view, $display] = $this->setupBaseViewAndDisplay();
 
     $view->setItemsPerPage(12);
     $this->assertEquals(12, $view->getItemsPerPage());
@@ -597,7 +597,7 @@ public function testSetItemsPerPageBeforePreRender() {
   public function testSetItemsPerPageDuringPreRender() {
     /** @var \Drupal\views\ViewExecutable|\PHPUnit\Framework\MockObject\MockObject $view */
     /** @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit\Framework\MockObject\MockObject $display */
-    list($view, $display) = $this->setupBaseViewAndDisplay();
+    [$view, $display] = $this->setupBaseViewAndDisplay();
 
     $elements = &$view->element;
     $elements['#cache'] += ['keys' => []];
@@ -615,7 +615,7 @@ public function testSetItemsPerPageDuringPreRender() {
   public function testSetOffsetBeforePreRender() {
     /** @var \Drupal\views\ViewExecutable|\PHPUnit\Framework\MockObject\MockObject $view */
     /** @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit\Framework\MockObject\MockObject $display */
-    list($view, $display) = $this->setupBaseViewAndDisplay();
+    [$view, $display] = $this->setupBaseViewAndDisplay();
 
     $view->setOffset(12);
     $this->assertEquals(12, $view->getOffset());
@@ -629,7 +629,7 @@ public function testSetOffsetBeforePreRender() {
   public function testSetOffsetDuringPreRender() {
     /** @var \Drupal\views\ViewExecutable|\PHPUnit\Framework\MockObject\MockObject $view */
     /** @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit\Framework\MockObject\MockObject $display */
-    list($view, $display) = $this->setupBaseViewAndDisplay();
+    [$view, $display] = $this->setupBaseViewAndDisplay();
 
     $elements = &$view->element;
     $elements['#cache'] += ['keys' => []];
@@ -647,7 +647,7 @@ public function testSetOffsetDuringPreRender() {
   public function testSetCurrentPageBeforePreRender() {
     /** @var \Drupal\views\ViewExecutable|\PHPUnit\Framework\MockObject\MockObject $view */
     /** @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit\Framework\MockObject\MockObject $display */
-    list($view, $display) = $this->setupBaseViewAndDisplay();
+    [$view, $display] = $this->setupBaseViewAndDisplay();
 
     $view->setCurrentPage(12);
     $this->assertEquals(12, $view->getCurrentPage());
@@ -661,7 +661,7 @@ public function testSetCurrentPageBeforePreRender() {
   public function testSetCurrentPageDuringPreRender() {
     /** @var \Drupal\views\ViewExecutable|\PHPUnit\Framework\MockObject\MockObject $view */
     /** @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit\Framework\MockObject\MockObject $display */
-    list($view, $display) = $this->setupBaseViewAndDisplay();
+    [$view, $display] = $this->setupBaseViewAndDisplay();
 
     $elements = &$view->element;
     $elements['#cache'] += ['keys' => []];
@@ -678,7 +678,7 @@ public function testSetCurrentPageDuringPreRender() {
   public function testCacheIsIgnoredDuringPreview() {
     /** @var \Drupal\views\ViewExecutable|\PHPUnit\Framework\MockObject\MockObject $view */
     /** @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit\Framework\MockObject\MockObject $display */
-    list($view, $display) = $this->setupBaseViewAndDisplay();
+    [$view, $display] = $this->setupBaseViewAndDisplay();
 
     // Pager needs to be set to avoid false test failures.
     $view->pager = $this->getMockBuilder(NonePager::class)
@@ -713,7 +713,7 @@ public function testCacheIsIgnoredDuringPreview() {
   public function testExecuteReturn($display_enabled, $expected_result) {
     /** @var \Drupal\views\ViewExecutable|\PHPUnit\Framework\MockObject\MockObject $view */
     /** @var \Drupal\views\Plugin\views\display\DisplayPluginBase|\PHPUnit\Framework\MockObject\MockObject $display */
-    list($view, $display) = $this->setupBaseViewAndDisplay();
+    [$view, $display] = $this->setupBaseViewAndDisplay();
 
     $display->expects($this->any())
       ->method('isEnabled')
diff --git a/core/modules/views/views.api.php b/core/modules/views/views.api.php
index 18a607073326..8e8d89d08e4d 100644
--- a/core/modules/views/views.api.php
+++ b/core/modules/views/views.api.php
@@ -559,7 +559,7 @@ function hook_field_views_data_alter(array &$data, \Drupal\field\FieldStorageCon
   $pseudo_field_name = 'reverse_' . $field_name . '_' . $entity_type_id;
   $table_mapping = \Drupal::entityTypeManager()->getStorage($entity_type_id)->getTableMapping();
 
-  list($label) = views_entity_field_label($entity_type_id, $field_name);
+  [$label] = views_entity_field_label($entity_type_id, $field_name);
 
   $data['file_managed'][$pseudo_field_name]['relationship'] = [
     'title' => t('@entity using @field', ['@entity' => $entity_type->getLabel(), '@field' => $label]),
@@ -614,7 +614,7 @@ function hook_field_views_data_views_data_alter(array &$data, \Drupal\field\Fiel
   $entity_type_id = $field->entity_type;
   $entity_type = \Drupal::entityTypeManager()->getDefinition($entity_type_id);
   $pseudo_field_name = 'reverse_' . $field_name . '_' . $entity_type_id;
-  list($label) = views_entity_field_label($entity_type_id, $field_name);
+  [$label] = views_entity_field_label($entity_type_id, $field_name);
   $table_mapping = \Drupal::entityTypeManager()->getStorage($entity_type_id)->getTableMapping();
 
   // Views data for this field is in $data[$data_key].
diff --git a/core/modules/views/views.views.inc b/core/modules/views/views.views.inc
index 7c236e68c4cb..de7977332108 100644
--- a/core/modules/views/views.views.inc
+++ b/core/modules/views/views.views.inc
@@ -507,7 +507,7 @@ function views_field_default_views_data(FieldStorageConfigInterface $field_stora
   // Determine the label to use for the field. We don't have a label available
   // at the field level, so we just go through all fields and take the one
   // which is used the most frequently.
-  list($label, $all_labels) = views_entity_field_label($entity_type_id, $field_name);
+  [$label, $all_labels] = views_entity_field_label($entity_type_id, $field_name);
 
   // Expose data for the field as a whole.
   foreach ($field_tables as $type => $table_info) {
diff --git a/core/modules/views_ui/src/Form/Ajax/ConfigHandler.php b/core/modules/views_ui/src/Form/Ajax/ConfigHandler.php
index 20f61fe773b5..3a7336ce847f 100644
--- a/core/modules/views_ui/src/Form/Ajax/ConfigHandler.php
+++ b/core/modules/views_ui/src/Form/Ajax/ConfigHandler.php
@@ -266,7 +266,7 @@ public function remove(&$form, FormStateInterface $form_state) {
     $type = $form_state->get('type');
     $id = $form_state->get('id');
     // Store the item back on the view
-    list($was_defaulted, $is_defaulted) = $view->getOverrideValues($form, $form_state);
+    [$was_defaulted, $is_defaulted] = $view->getOverrideValues($form, $form_state);
     $executable = $view->getExecutable();
     // If the display selection was changed toggle the override value.
     if ($was_defaulted != $is_defaulted) {
diff --git a/core/modules/views_ui/src/ViewUI.php b/core/modules/views_ui/src/ViewUI.php
index 3dbe2b33fe90..0dfaec0f44b8 100644
--- a/core/modules/views_ui/src/ViewUI.php
+++ b/core/modules/views_ui/src/ViewUI.php
@@ -215,7 +215,7 @@ public function standardSubmit($form, FormStateInterface $form_state) {
     // Determine whether the values the user entered are intended to apply to
     // the current display or the default display.
 
-    list($was_defaulted, $is_defaulted, $revert) = $this->getOverrideValues($form, $form_state);
+    [$was_defaulted, $is_defaulted, $revert] = $this->getOverrideValues($form, $form_state);
 
     // Based on the user's choice in the display dropdown, determine which display
     // these changes apply to.
@@ -429,7 +429,7 @@ public function submitItemAdd($form, FormStateInterface $form_state) {
     $display_id = $form_state->get('display_id');
 
     // Handle the override select.
-    list($was_defaulted, $is_defaulted) = $this->getOverrideValues($form, $form_state);
+    [$was_defaulted, $is_defaulted] = $this->getOverrideValues($form, $form_state);
     if ($was_defaulted && !$is_defaulted) {
       // We were using the default display's values, but we're now overriding
       // the default display and saving values specific to this display.
@@ -450,7 +450,7 @@ public function submitItemAdd($form, FormStateInterface $form_state) {
     if (!$form_state->isValueEmpty('name') && is_array($form_state->getValue('name'))) {
       // Loop through each of the items that were checked and add them to the view.
       foreach (array_keys(array_filter($form_state->getValue('name'))) as $field) {
-        list($table, $field) = explode('.', $field, 2);
+        [$table, $field] = explode('.', $field, 2);
 
         if ($cut = strpos($field, '$')) {
           $field = substr($field, 0, $cut);
diff --git a/core/modules/workflows/src/WorkflowAccessControlHandler.php b/core/modules/workflows/src/WorkflowAccessControlHandler.php
index 1e0456cf6dfa..63ad30f6d831 100644
--- a/core/modules/workflows/src/WorkflowAccessControlHandler.php
+++ b/core/modules/workflows/src/WorkflowAccessControlHandler.php
@@ -55,7 +55,7 @@ protected function checkAccess(EntityInterface $entity, $operation, AccountInter
     /** @var \Drupal\workflows\Entity\Workflow $entity */
     $workflow_type = $entity->getTypePlugin();
     if (strpos($operation, 'delete-state') === 0) {
-      list(, $state_id) = explode(':', $operation, 2);
+      [, $state_id] = explode(':', $operation, 2);
       // Deleting a state is editing a workflow, but also we should forbid
       // access if there is only one state.
       return AccessResult::allowedIf(count($entity->getTypePlugin()->getStates()) > 1)
diff --git a/core/modules/workspaces/src/EntityQuery/Tables.php b/core/modules/workspaces/src/EntityQuery/Tables.php
index 28b16d4a9f88..66600211b2aa 100644
--- a/core/modules/workspaces/src/EntityQuery/Tables.php
+++ b/core/modules/workspaces/src/EntityQuery/Tables.php
@@ -94,7 +94,7 @@ protected function addJoin($type, $table, $join_condition, $langcode, $delta = N
       // to also look for a possible workspace-specific revision using COALESCE.
       $condition_parts = explode(' = ', $join_condition);
       $condition_parts_1 = str_replace(['[', ']'], '', $condition_parts[1]);
-      list($base_table, $id_field) = explode('.', $condition_parts_1);
+      [$base_table, $id_field] = explode('.', $condition_parts_1);
 
       if (isset($this->baseTablesEntityType[$base_table])) {
         $entity_type_id = $this->baseTablesEntityType[$base_table];
diff --git a/core/modules/workspaces/src/Form/WorkspaceForm.php b/core/modules/workspaces/src/Form/WorkspaceForm.php
index fe022162d7f6..13a5b60ffd7d 100644
--- a/core/modules/workspaces/src/Form/WorkspaceForm.php
+++ b/core/modules/workspaces/src/Form/WorkspaceForm.php
@@ -114,7 +114,7 @@ protected function flagViolations(EntityConstraintViolationListInterface $violat
       'id',
     ];
     foreach ($violations->getByFields($field_names) as $violation) {
-      list($field_name) = explode('.', $violation->getPropertyPath(), 2);
+      [$field_name] = explode('.', $violation->getPropertyPath(), 2);
       $form_state->setErrorByName($field_name, $violation->getMessage());
     }
     parent::flagViolations($violations, $form, $form_state);
diff --git a/core/profiles/demo_umami/modules/demo_umami_content/src/InstallHelper.php b/core/profiles/demo_umami/modules/demo_umami_content/src/InstallHelper.php
index e689d8549c6f..f1d17a6cb42f 100644
--- a/core/profiles/demo_umami/modules/demo_umami_content/src/InstallHelper.php
+++ b/core/profiles/demo_umami/modules/demo_umami_content/src/InstallHelper.php
@@ -727,7 +727,7 @@ protected function importContentFromFile($entity_type, $bundle_machine_name) {
     $filename = $entity_type . '/' . $bundle_machine_name . '.csv';
 
     // Read all multilingual content from the file.
-    list($all_content, $translated_languages) = $this->readMultilingualContent($filename);
+    [$all_content, $translated_languages] = $this->readMultilingualContent($filename);
 
     // English is no longer needed in the list of languages to translate.
     $key = array_search('en', $translated_languages);
diff --git a/core/scripts/run-tests.sh b/core/scripts/run-tests.sh
index edb6cab39de0..17ec49b9a484 100755
--- a/core/scripts/run-tests.sh
+++ b/core/scripts/run-tests.sh
@@ -41,7 +41,7 @@
 const SIMPLETEST_SCRIPT_EXIT_EXCEPTION = 2;
 
 // Set defaults and get overrides.
-list($args, $count) = simpletest_script_parse_args();
+[$args, $count] = simpletest_script_parse_args();
 
 if ($args['help'] || $count == 0) {
   simpletest_script_help();
@@ -467,7 +467,7 @@ function simpletest_script_init() {
   elseif ($sudo = getenv('SUDO_COMMAND')) {
     // 'SUDO_COMMAND' is an environment variable set by the sudo program.
     // Extract only the PHP interpreter, not the rest of the command.
-    list($php) = explode(' ', $sudo, 2);
+    [$php] = explode(' ', $sudo, 2);
   }
   else {
     simpletest_script_print_error('Unable to automatically determine the path to the PHP interpreter. Supply the --php command line argument.');
@@ -824,7 +824,7 @@ function simpletest_script_run_one_test($test_id, $test_class) {
     // tests and that none ran.
     $status = SIMPLETEST_SCRIPT_EXIT_SUCCESS;
     if (strpos($test_class, '::') > 0) {
-      list($class_name, $method) = explode('::', $test_class, 2);
+      [$class_name, $method] = explode('::', $test_class, 2);
       $methods = [$method];
     }
     else {
@@ -1048,7 +1048,7 @@ function simpletest_script_get_test_list() {
     if ($args['class']) {
       $test_list = [];
       foreach ($args['test_names'] as $test_class) {
-        list($class_name) = explode('::', $test_class, 2);
+        [$class_name] = explode('::', $test_class, 2);
         if (class_exists($class_name)) {
           $test_list[] = $test_class;
         }
@@ -1264,7 +1264,7 @@ function simpletest_script_reporter_write_xml_results() {
       $case = $dom_document->createElement('testcase');
       $case->setAttribute('classname', $test_class);
       if (strpos($result->function, '->') !== FALSE) {
-        list($class, $name) = explode('->', $result->function, 2);
+        [$class, $name] = explode('->', $result->function, 2);
       }
       else {
         $name = $result->function;
diff --git a/core/tests/Drupal/KernelTests/Core/Asset/AttachedAssetsTest.php b/core/tests/Drupal/KernelTests/Core/Asset/AttachedAssetsTest.php
index 221de328ca7e..54700f93f05e 100644
--- a/core/tests/Drupal/KernelTests/Core/Asset/AttachedAssetsTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Asset/AttachedAssetsTest.php
@@ -64,7 +64,7 @@ protected function setUp(): void {
   public function testDefault() {
     $assets = new AttachedAssets();
     $this->assertEquals([], $this->assetResolver->getCssAssets($assets, FALSE), 'Default CSS is empty.');
-    list($js_assets_header, $js_assets_footer) = $this->assetResolver->getJsAssets($assets, FALSE);
+    [$js_assets_header, $js_assets_footer] = $this->assetResolver->getJsAssets($assets, FALSE);
     $this->assertEquals([], $js_assets_header, 'Default header JavaScript is empty.');
     $this->assertEquals([], $js_assets_footer, 'Default footer JavaScript is empty.');
   }
@@ -181,7 +181,7 @@ public function testAggregation() {
 
     $this->assertCount(1, $this->assetResolver->getCssAssets($assets, TRUE), 'There is a sole aggregated CSS asset.');
 
-    list($header_js, $footer_js) = $this->assetResolver->getJsAssets($assets, TRUE);
+    [$header_js, $footer_js] = $this->assetResolver->getJsAssets($assets, TRUE);
     $this->assertEquals([], \Drupal::service('asset.js.collection_renderer')->render($header_js), 'There are 0 JavaScript assets in the header.');
     $rendered_footer_js = \Drupal::service('asset.js.collection_renderer')->render($footer_js);
     $this->assertCount(2, $rendered_footer_js, 'There are 2 JavaScript assets in the footer.');
diff --git a/core/tests/Drupal/KernelTests/Core/Database/SelectTest.php b/core/tests/Drupal/KernelTests/Core/Database/SelectTest.php
index c255d8885b96..89e98bf4a204 100644
--- a/core/tests/Drupal/KernelTests/Core/Database/SelectTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Database/SelectTest.php
@@ -65,7 +65,7 @@ public function testVulnerableComment() {
 
     $connection = Database::getConnection();
     foreach ($this->makeCommentsProvider() as $test_set) {
-      list($expected, $comments) = $test_set;
+      [$expected, $comments] = $test_set;
       $this->assertEquals($expected, $connection->makeComment($comments));
     }
   }
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityQueryTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityQueryTest.php
index ffbf5a59d31e..176413cf6988 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/EntityQueryTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityQueryTest.php
@@ -140,7 +140,7 @@ protected function setUp(): void {
       foreach (array_reverse(str_split(decbin($i))) as $key => $bit) {
         if ($bit) {
           // @todo https://www.drupal.org/project/drupal/issues/3001920 Doing
-          //   list($field_name, $langcode, $values) = $units[$key]; causes
+          //   [$field_name, $langcode, $values] = $units[$key]; causes
           //   problems in PHP 7.3. Revert to better variable names once
           //   https://bugs.php.net/bug.php?id=76937 is fixed.
           $entity->getTranslation($units[$key][1])->{$units[$key][0]}[] = $units[$key][2];
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntitySchemaTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntitySchemaTest.php
index 7a81c54d7903..f4c5844e039f 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/EntitySchemaTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/EntitySchemaTest.php
@@ -337,7 +337,7 @@ public function testCleanUpStorageDefinition() {
     $entity_type_id_count = 0;
 
     foreach (array_keys($schema) as $storage_definition_name) {
-      list($entity_type_id, ,) = explode('.', $storage_definition_name);
+      [$entity_type_id] = explode('.', $storage_definition_name);
       if (in_array($entity_type_id, $entity_type_ids)) {
         $entity_type_id_count++;
       }
@@ -358,7 +358,7 @@ public function testCleanUpStorageDefinition() {
     $entity_type_id_count = 0;
 
     foreach (array_keys($schema) as $storage_definition_name) {
-      list($entity_type_id, ,) = explode('.', $storage_definition_name);
+      [$entity_type_id] = explode('.', $storage_definition_name);
       if (in_array($entity_type_id, $entity_type_ids)) {
         $entity_type_id_count++;
       }
diff --git a/core/tests/Drupal/Tests/BrowserTestBase.php b/core/tests/Drupal/Tests/BrowserTestBase.php
index 9e5376eb4a53..d4703ed2c9c2 100644
--- a/core/tests/Drupal/Tests/BrowserTestBase.php
+++ b/core/tests/Drupal/Tests/BrowserTestBase.php
@@ -718,7 +718,7 @@ protected function translatePostValues(array $values) {
     // string and convert the resulting key/value pairs back into a flat array.
     $query = http_build_query($values);
     foreach (explode('&', $query) as $item) {
-      list($key, $value) = explode('=', $item);
+      [$key, $value] = explode('=', $item);
       $edit[urldecode($key)] = urldecode($value);
     }
     return $edit;
diff --git a/core/tests/Drupal/Tests/Component/Gettext/PoHeaderTest.php b/core/tests/Drupal/Tests/Component/Gettext/PoHeaderTest.php
index 84c909e1a3b5..0d000d59d633 100644
--- a/core/tests/Drupal/Tests/Component/Gettext/PoHeaderTest.php
+++ b/core/tests/Drupal/Tests/Component/Gettext/PoHeaderTest.php
@@ -30,7 +30,7 @@ class PoHeaderTest extends TestCase {
   public function testPluralsFormula($plural, $expected) {
     $p = new PoHeader();
     $parsed = $p->parsePluralForms($plural);
-    list($nplurals, $new_plural) = $parsed;
+    [$nplurals, $new_plural] = $parsed;
     foreach ($expected as $number => $plural_form) {
       $result = $new_plural[$number] ?? $new_plural['default'];
       $this->assertEquals($result, $plural_form, 'Difference found at ' . $number . ': ' . $plural_form . ' versus ' . $result);
diff --git a/core/tests/Drupal/Tests/Core/Cache/CacheableMetadataTest.php b/core/tests/Drupal/Tests/Core/Cache/CacheableMetadataTest.php
index c04bed5b902e..2d939a75ab85 100644
--- a/core/tests/Drupal/Tests/Core/Cache/CacheableMetadataTest.php
+++ b/core/tests/Drupal/Tests/Core/Cache/CacheableMetadataTest.php
@@ -96,7 +96,7 @@ public function testAddCacheTags() {
     ];
 
     foreach ($add_expected as $row => $data) {
-      list($add, $expected) = $data;
+      [$add, $expected] = $data;
       $metadata->addCacheTags($add);
       $this->assertEquals($expected, $metadata->getCacheTags(), sprintf("Dataset in %d row failed on validation.", $row + 1));
     }
diff --git a/core/tests/Drupal/Tests/Core/Extension/ExtensionListTest.php b/core/tests/Drupal/Tests/Core/Extension/ExtensionListTest.php
index 8da6fa436026..929ad62b1df7 100644
--- a/core/tests/Drupal/Tests/Core/Extension/ExtensionListTest.php
+++ b/core/tests/Drupal/Tests/Core/Extension/ExtensionListTest.php
@@ -25,7 +25,7 @@ class ExtensionListTest extends UnitTestCase {
    * @covers ::getName
    */
   public function testGetNameWithNonExistingExtension() {
-    list($cache, $info_parser, $module_handler, $state) = $this->getMocks();
+    [$cache, $info_parser, $module_handler, $state] = $this->getMocks();
     $test_extension_list = new TestExtension($this->randomMachineName(), 'test_extension', $cache->reveal(), $info_parser->reveal(), $module_handler->reveal(), $state->reveal(), 'testing');
 
     $extension_discovery = $this->prophesize(ExtensionDiscovery::class);
@@ -49,7 +49,7 @@ public function testGetName() {
    * @covers ::get
    */
   public function testGetWithNonExistingExtension() {
-    list($cache, $info_parser, $module_handler, $state) = $this->getMocks();
+    [$cache, $info_parser, $module_handler, $state] = $this->getMocks();
     $test_extension_list = new TestExtension($this->randomMachineName(), 'test_extension', $cache->reveal(), $info_parser->reveal(), $module_handler->reveal(), $state->reveal(), 'testing');
 
     $extension_discovery = $this->prophesize(ExtensionDiscovery::class);
@@ -292,7 +292,7 @@ protected function setupTestExtensionList(array $extension_names = ['test_name']
       touch("vfs://drupal_root/example/$extension_name/$extension_name.info.yml", 123456789);
     }
 
-    list($cache, $info_parser, $module_handler, $state) = $this->getMocks();
+    [$cache, $info_parser, $module_handler, $state] = $this->getMocks();
     $info_parser->parse(Argument::any())->will(function ($args) {
       return Yaml::decode(file_get_contents('vfs://drupal_root/' . $args[0]));
     });
diff --git a/core/tests/Drupal/Tests/Core/Extension/InfoParserUnitTest.php b/core/tests/Drupal/Tests/Core/Extension/InfoParserUnitTest.php
index cfd3439baa5f..ae0f753ef7ec 100644
--- a/core/tests/Drupal/Tests/Core/Extension/InfoParserUnitTest.php
+++ b/core/tests/Drupal/Tests/Core/Extension/InfoParserUnitTest.php
@@ -587,7 +587,7 @@ public function testCoreIncompatibility($test_case, $constraint, $expected) {
    * Data provider for testCoreIncompatibility().
    */
   public function providerCoreIncompatibility() {
-    list($major, $minor) = explode('.', \Drupal::VERSION);
+    [$major, $minor] = explode('.', \Drupal::VERSION);
 
     $next_minor = $minor + 1;
     $next_major = $major + 1;
diff --git a/core/tests/Drupal/Tests/Core/Field/BaseFieldDefinitionTestBase.php b/core/tests/Drupal/Tests/Core/Field/BaseFieldDefinitionTestBase.php
index 2588c2ebf268..980e715323ba 100644
--- a/core/tests/Drupal/Tests/Core/Field/BaseFieldDefinitionTestBase.php
+++ b/core/tests/Drupal/Tests/Core/Field/BaseFieldDefinitionTestBase.php
@@ -27,7 +27,7 @@ protected function setUp() {
     parent::setUp();
 
     // getModuleAndPath() returns an array of the module name and directory.
-    list($module_name, $module_dir) = $this->getModuleAndPath();
+    [$module_name, $module_dir] = $this->getModuleAndPath();
 
     $namespaces = new \ArrayObject();
     $namespaces["Drupal\\$module_name"] = $module_dir . '/src';
diff --git a/core/tests/Drupal/Tests/Core/Mail/MailFormatHelperTest.php b/core/tests/Drupal/Tests/Core/Mail/MailFormatHelperTest.php
index c2075afb04e4..84a3981e0a8e 100644
--- a/core/tests/Drupal/Tests/Core/Mail/MailFormatHelperTest.php
+++ b/core/tests/Drupal/Tests/Core/Mail/MailFormatHelperTest.php
@@ -23,7 +23,7 @@ public function testWrapMail() {
     $headers_in_body .= 'Content-Description: ' . $this->randomMachineName(64);
     $body = $this->randomMachineName(76) . ' ' . $this->randomMachineName(6);
     $wrapped_text = MailFormatHelper::wrapMail($headers_in_body . $delimiter . $body);
-    list($processed_headers, $processed_body) = explode($delimiter, $wrapped_text);
+    [$processed_headers, $processed_body] = explode($delimiter, $wrapped_text);
 
     // Check that the body headers were not wrapped even though some exceeded
     // 77 characters.
diff --git a/core/tests/Drupal/Tests/Core/Render/RendererRecursionTest.php b/core/tests/Drupal/Tests/Core/Render/RendererRecursionTest.php
index f0d693ba0d81..69fa66bdd4d7 100644
--- a/core/tests/Drupal/Tests/Core/Render/RendererRecursionTest.php
+++ b/core/tests/Drupal/Tests/Core/Render/RendererRecursionTest.php
@@ -33,7 +33,7 @@ protected function setUpRenderRecursionComplexElements() {
    * @covers ::doRender
    */
   public function testRenderRecursionWithNestedRenderRoot() {
-    list($complex_child_markup, $parent_markup, $complex_child_template) = $this->setUpRenderRecursionComplexElements();
+    [$complex_child_markup, $parent_markup, $complex_child_template] = $this->setUpRenderRecursionComplexElements();
     $renderer = $this->renderer;
     $this->setUpRequest();
 
@@ -65,7 +65,7 @@ public function testRenderRecursionWithNestedRenderRoot() {
    * @covers ::doRender
    */
   public function testRenderRecursionWithNestedRender() {
-    list($complex_child_markup, $parent_markup, $complex_child_template) = $this->setUpRenderRecursionComplexElements();
+    [$complex_child_markup, $parent_markup, $complex_child_template] = $this->setUpRenderRecursionComplexElements();
     $renderer = $this->renderer;
     $this->setUpRequest();
 
@@ -99,7 +99,7 @@ public function testRenderRecursionWithNestedRender() {
    * @covers ::renderPlain
    */
   public function testRenderRecursionWithNestedRenderPlain() {
-    list($complex_child_markup, $parent_markup, $complex_child_template) = $this->setUpRenderRecursionComplexElements();
+    [$complex_child_markup, $parent_markup, $complex_child_template] = $this->setUpRenderRecursionComplexElements();
     $renderer = $this->renderer;
     $this->setUpRequest();
 
diff --git a/core/tests/Drupal/Tests/Listeners/DrupalStandardsListenerTrait.php b/core/tests/Drupal/Tests/Listeners/DrupalStandardsListenerTrait.php
index 34f305e36596..aac9b3056b6f 100644
--- a/core/tests/Drupal/Tests/Listeners/DrupalStandardsListenerTrait.php
+++ b/core/tests/Drupal/Tests/Listeners/DrupalStandardsListenerTrait.php
@@ -102,7 +102,7 @@ private function checkValidCoversForTest(TestCase $test) {
         $class = $covers;
         $method = '';
         if (strpos($covers, '::') !== FALSE) {
-          list($class, $method) = explode('::', $covers);
+          [$class, $method] = explode('::', $covers);
         }
         // Check for the existence of the class if it's specified by @covers.
         if (!empty($class)) {
diff --git a/core/tests/Drupal/Tests/XdebugRequestTrait.php b/core/tests/Drupal/Tests/XdebugRequestTrait.php
index 5da86a51bde0..48c19a6c7c26 100644
--- a/core/tests/Drupal/Tests/XdebugRequestTrait.php
+++ b/core/tests/Drupal/Tests/XdebugRequestTrait.php
@@ -35,7 +35,7 @@ protected function extractCookiesFromRequest(Request $request) {
       // $_SERVER['XDEBUG_CONFIG'] has the form "key1=value1 key2=value2 ...".
       $pairs = explode(' ', $server->get('XDEBUG_CONFIG'));
       foreach ($pairs as $pair) {
-        list($key, $value) = explode('=', $pair);
+        [$key, $value] = explode('=', $pair);
         // Account for key-value pairs being separated by multiple spaces.
         if (trim($key, ' ') == 'idekey') {
           $cookies['XDEBUG_SESSION'][] = trim($value, ' ');
-- 
GitLab


From 6af996bb19005fb623c6e10779547f2e73438b5a Mon Sep 17 00:00:00 2001
From: Lee Rowlands <lee.rowlands@previousnext.com.au>
Date: Mon, 15 Nov 2021 12:46:09 +1000
Subject: [PATCH 31/69] Issue #3231781 by longwave, mondrake, Feuerwagen,
 larowlan, TR, nlisgo, xxAlHixx, DuaelFr, GoZ, benjy, no_angel, Mac_Weber:
 [D9.3 beta - w/c Nov 8, 2021] Remove remaining uses of t() in tests

(cherry picked from commit a83a7a78366f8494d924de8ceddd86706d94ca3d)
---
 .../src/Functional/ItemCacheTagsTest.php      |  4 +-
 .../tests/src/Kernel/ItemWithoutFeedTest.php  |  2 +-
 .../tests/src/Kernel/BlockInterfaceTest.php   |  4 +-
 .../tests/src/Functional/CommentPagerTest.php |  7 +-
 .../CommentStatusFieldAccessTest.php          |  2 +-
 .../src/Functional/Views/NodeCommentsTest.php |  2 +-
 .../tests/src/Functional/Views/WizardTest.php |  2 +-
 .../src/Functional/ConfigEntityListTest.php   | 10 +--
 .../src/Functional/ContactPersonalTest.php    | 12 +--
 .../ContentTranslationWorkflowsTest.php       |  2 +-
 .../dblog/tests/src/Functional/DbLogTest.php  |  4 +-
 .../tests/src/Functional/NestedFormTest.php   |  2 +-
 .../Functional/ManageFieldsFunctionalTest.php |  9 +--
 .../ManageDisplayTest.php                     |  2 +-
 .../tests/src/Kernel/EntityDisplayTest.php    |  2 +-
 .../tests/src/Functional/FilePrivateTest.php  |  4 +-
 .../FileManagedFileElementTest.php            |  2 +-
 .../Functional/FilterHtmlImageSecureTest.php  |  6 +-
 .../forum/tests/src/Functional/ForumTest.php  | 13 ++--
 .../src/Functional/ForumUninstallTest.php     |  2 +-
 .../src/Functional/ImageFieldDisplayTest.php  |  2 +-
 .../ImageFieldValidateTest.php                |  2 +-
 .../tests/src/Functional/ActionTest.php       |  2 +-
 .../tests/src/Functional/ShortcutTest.php     |  2 +-
 .../ConfigurableLanguageManagerTest.php       |  2 +-
 .../src/Functional/LanguageBreadcrumbTest.php |  2 +-
 .../Functional/LocaleUpdateInterfaceTest.php  |  8 +-
 .../tests/src/Kernel/MediaSourceTest.php      |  2 +-
 .../MenuLinkContentDeleteFormTest.php         |  2 +-
 .../Functional/MenuLinkContentFormTest.php    |  4 +-
 .../MenuUiContentModerationTest.php           | 12 +--
 .../src/Unit/source/d6/Drupal6SqlBaseTest.php | 20 ++---
 .../src/Functional/SourceProviderTest.php     | 10 +--
 .../Functional/NodeAccessBaseTableTest.php    |  2 +-
 .../src/Functional/NodeAccessPagerTest.php    |  2 +-
 .../NodeEntityViewModeAlterTest.php           |  4 +-
 .../src/Functional/NodeRSSContentTest.php     |  2 +-
 .../src/Functional/NodeTranslationUITest.php  |  2 +-
 .../Functional/Views/FilterNodeAccessTest.php |  2 +-
 .../src/Functional/PathTaxonomyTermTest.php   |  2 +-
 .../QuickEditCustomPipelineTest.php           |  2 +-
 .../QuickEditEndPointAccessTest.php           |  2 +-
 .../QuickEditImageControllerTest.php          |  8 +-
 .../LayoutBuilderQuickEditTest.php            |  2 +-
 .../QuickEditFileTest.php                     |  2 +-
 .../QuickEditImageTest.php                    |  2 +-
 .../QuickEditIntegrationTest.php              |  2 +-
 .../QuickEditLoadingTest.php                  |  2 +-
 .../src/Functional/ShortcutCacheTagsTest.php  |  2 +-
 .../Functional/StatisticsTokenReplaceTest.php |  2 +-
 .../Database/SelectTableSortDefaultTest.php   | 16 ++--
 .../Form/ElementsTableSelectTest.php          |  2 +-
 .../tests/src/Functional/Form/FormTest.php    |  8 +-
 .../Form/LanguageSelectElementTest.php        |  2 +-
 .../src/Functional/Menu/BreadcrumbTest.php    | 34 ++++----
 .../Functional/System/SiteMaintenanceTest.php | 18 +++--
 .../tests/src/Kernel/Action/ActionTest.php    |  2 +-
 .../src/Kernel/Form/ProgrammaticTest.php      |  2 +-
 .../Functional/VocabularyPermissionsTest.php  |  5 +-
 .../Functional/VocabularyTranslationTest.php  |  4 +-
 .../src/Functional/TrackerNodeAccessTest.php  |  6 +-
 .../tests/src/Functional/UserAdminTest.php    |  2 +-
 .../tests/src/Functional/UserCreateTest.php   |  2 +-
 .../src/Functional/UserPasswordResetTest.php  |  2 +-
 .../src/Functional/UserTokenReplaceTest.php   |  2 +-
 .../RegistrationWithUserFieldsTest.php        |  2 +-
 .../Views/HandlerFieldPermissionTest.php      |  8 +-
 .../src/Functional/Handler/HandlerTest.php    | 78 +++++++------------
 .../src/Functional/ViewsFormMultipleTest.php  |  4 +-
 .../ExposedFilterAJAXTest.php                 |  2 +-
 .../src/Kernel/Handler/FieldBooleanTest.php   |  2 +-
 .../src/Kernel/Handler/FieldDateTest.php      | 27 ++-----
 .../views/tests/src/Kernel/ModuleTest.php     |  5 +-
 .../Kernel/Plugin/BlockDependenciesTest.php   |  2 +-
 .../Kernel/Plugin/ExposedFormRenderTest.php   |  2 +-
 .../tests/src/Functional/HandlerTest.php      |  6 +-
 .../Ajax/MultiFormTest.php                    |  3 +-
 .../Core/Entity/ConfigEntityQueryTest.php     |  4 +-
 .../Core/Messenger/MessengerTest.php          |  2 +-
 .../Core/Plugin/ContextPluginTest.php         |  2 +-
 80 files changed, 201 insertions(+), 260 deletions(-)

diff --git a/core/modules/aggregator/tests/src/Functional/ItemCacheTagsTest.php b/core/modules/aggregator/tests/src/Functional/ItemCacheTagsTest.php
index c7bce98ff211..93b6e8e48d90 100644
--- a/core/modules/aggregator/tests/src/Functional/ItemCacheTagsTest.php
+++ b/core/modules/aggregator/tests/src/Functional/ItemCacheTagsTest.php
@@ -56,7 +56,7 @@ protected function createEntity() {
     // Create a "Llama" aggregator feed item.
     $item = Item::create([
       'fid' => $feed->id(),
-      'title' => t('Llama'),
+      'title' => 'Llama',
       'path' => 'https://www.drupal.org/',
     ]);
     $item->save();
@@ -77,7 +77,7 @@ public function testEntityCreation() {
     // Now create a feed item in that feed.
     Item::create([
       'fid' => $this->entity->getFeedId(),
-      'title' => t('Llama 2'),
+      'title' => 'Llama 2',
       'path' => 'https://groups.drupal.org/',
     ])->save();
 
diff --git a/core/modules/aggregator/tests/src/Kernel/ItemWithoutFeedTest.php b/core/modules/aggregator/tests/src/Kernel/ItemWithoutFeedTest.php
index f4a5e8f3f34d..8a604eeb701c 100644
--- a/core/modules/aggregator/tests/src/Kernel/ItemWithoutFeedTest.php
+++ b/core/modules/aggregator/tests/src/Kernel/ItemWithoutFeedTest.php
@@ -31,7 +31,7 @@ protected function setUp(): void {
    */
   public function testEntityCreation() {
     $entity = Item::create([
-      'title' => t('Llama 2'),
+      'title' => 'Llama 2',
       'path' => 'https://groups.drupal.org/',
     ]);
     $violations = $entity->validate();
diff --git a/core/modules/block/tests/src/Kernel/BlockInterfaceTest.php b/core/modules/block/tests/src/Kernel/BlockInterfaceTest.php
index 49772173409c..d47ac18cff82 100644
--- a/core/modules/block/tests/src/Kernel/BlockInterfaceTest.php
+++ b/core/modules/block/tests/src/Kernel/BlockInterfaceTest.php
@@ -59,7 +59,7 @@ public function testBlockInterface() {
       ],
       'admin_label' => [
         '#type' => 'item',
-        '#title' => t('Block description'),
+        '#title' => 'Block description',
         '#plain_text' => $definition['admin_label'],
       ],
       'label' => [
@@ -78,7 +78,7 @@ public function testBlockInterface() {
       'context_mapping' => [],
       'display_message' => [
         '#type' => 'textfield',
-        '#title' => t('Display message'),
+        '#title' => 'Display message',
         '#default_value' => 'My custom display message.',
       ],
     ];
diff --git a/core/modules/comment/tests/src/Functional/CommentPagerTest.php b/core/modules/comment/tests/src/Functional/CommentPagerTest.php
index 6e3d1b853378..ef4fe3c018fe 100644
--- a/core/modules/comment/tests/src/Functional/CommentPagerTest.php
+++ b/core/modules/comment/tests/src/Functional/CommentPagerTest.php
@@ -370,11 +370,8 @@ public function testTwoPagers() {
       // Set comments to one per page so that we are able to test paging without
       // needing to insert large numbers of comments.
       $this->setCommentsPerPage(1, $field_name);
-      for ($i = 0; $i < 3; $i++) {
-        $comment = t('Comment @count on field @field', [
-          '@count' => $i + 1,
-          '@field' => $field_name,
-        ]);
+      for ($i = 1; $i <= 4; $i++) {
+        $comment = "Comment $i on field $field_name";
         $comments[] = $this->postComment($node, $comment, $comment, TRUE, $field_name);
       }
     }
diff --git a/core/modules/comment/tests/src/Functional/CommentStatusFieldAccessTest.php b/core/modules/comment/tests/src/Functional/CommentStatusFieldAccessTest.php
index 9a34ac30387b..cddb174fed9e 100644
--- a/core/modules/comment/tests/src/Functional/CommentStatusFieldAccessTest.php
+++ b/core/modules/comment/tests/src/Functional/CommentStatusFieldAccessTest.php
@@ -57,7 +57,7 @@ protected function setUp(): void {
     parent::setUp();
     $node_type = NodeType::create([
       'type' => 'article',
-      'name' => t('Article'),
+      'name' => 'Article',
     ]);
     $node_type->save();
     $this->nodeAuthor = $this->drupalCreateUser([
diff --git a/core/modules/comment/tests/src/Functional/Views/NodeCommentsTest.php b/core/modules/comment/tests/src/Functional/Views/NodeCommentsTest.php
index 3c68670db755..685fbf220334 100644
--- a/core/modules/comment/tests/src/Functional/Views/NodeCommentsTest.php
+++ b/core/modules/comment/tests/src/Functional/Views/NodeCommentsTest.php
@@ -51,7 +51,7 @@ public function testCommentCount() {
     $this->assertCount(1, $comment_count_without_comment);
 
     // Create a content type with no comment field, and add a node.
-    $this->drupalCreateContentType(['type' => 'no_comment', 'name' => t('No comment page')]);
+    $this->drupalCreateContentType(['type' => 'no_comment', 'name' => 'No comment page']);
     $this->nodeUserPosted = $this->drupalCreateNode(['type' => 'no_comment']);
     $this->drupalGet('test-comment-count');
 
diff --git a/core/modules/comment/tests/src/Functional/Views/WizardTest.php b/core/modules/comment/tests/src/Functional/Views/WizardTest.php
index 0103c3d12362..ecabc08b96b1 100644
--- a/core/modules/comment/tests/src/Functional/Views/WizardTest.php
+++ b/core/modules/comment/tests/src/Functional/Views/WizardTest.php
@@ -33,7 +33,7 @@ class WizardTest extends WizardTestBase {
    */
   protected function setUp($import_test_views = TRUE): void {
     parent::setUp($import_test_views);
-    $this->drupalCreateContentType(['type' => 'page', 'name' => t('Basic page')]);
+    $this->drupalCreateContentType(['type' => 'page', 'name' => 'Basic page']);
     // Add comment field to page node type.
     $this->addDefaultCommentField('node', 'page');
   }
diff --git a/core/modules/config/tests/src/Functional/ConfigEntityListTest.php b/core/modules/config/tests/src/Functional/ConfigEntityListTest.php
index aa58a411ec67..e80cf5b4df31 100644
--- a/core/modules/config/tests/src/Functional/ConfigEntityListTest.php
+++ b/core/modules/config/tests/src/Functional/ConfigEntityListTest.php
@@ -59,17 +59,17 @@ public function testList() {
     // Test getOperations() method.
     $expected_operations = [
       'edit' => [
-        'title' => t('Edit'),
+        'title' => 'Edit',
         'weight' => 10,
         'url' => $entity->toUrl()->setOption('query', $this->getRedirectDestination()->getAsArray()),
       ],
       'disable' => [
-        'title' => t('Disable'),
+        'title' => 'Disable',
         'weight' => 40,
         'url' => $entity->toUrl('disable')->setOption('query', $this->getRedirectDestination()->getAsArray()),
       ],
       'delete' => [
-        'title' => t('Delete'),
+        'title' => 'Delete',
         'weight' => 100,
         'url' => $entity->toUrl('delete-form')->setOption('query', $this->getRedirectDestination()->getAsArray()),
       ],
@@ -134,12 +134,12 @@ public function testList() {
     // Test getOperations() method.
     $expected_operations = [
       'edit' => [
-        'title' => t('Edit'),
+        'title' => 'Edit',
         'weight' => 10,
         'url' => $entity->toUrl()->setOption('query', $this->getRedirectDestination()->getAsArray()),
       ],
       'delete' => [
-        'title' => t('Delete'),
+        'title' => 'Delete',
         'weight' => 100,
         'url' => $entity->toUrl('delete-form')->setOption('query', $this->getRedirectDestination()->getAsArray()),
       ],
diff --git a/core/modules/contact/tests/src/Functional/ContactPersonalTest.php b/core/modules/contact/tests/src/Functional/ContactPersonalTest.php
index 820201eea234..e28c8aae9b15 100644
--- a/core/modules/contact/tests/src/Functional/ContactPersonalTest.php
+++ b/core/modules/contact/tests/src/Functional/ContactPersonalTest.php
@@ -3,7 +3,6 @@
 namespace Drupal\Tests\contact\Functional;
 
 use Drupal\Component\Render\FormattableMarkup;
-use Drupal\Component\Render\PlainTextOutput;
 use Drupal\Component\Utility\Html;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\Core\Test\AssertMailTrait;
@@ -93,14 +92,9 @@ public function testSendPersonalContactMessage() {
     $this->assertEquals($this->config('system.site')->get('mail'), $mail['from']);
     $this->assertEquals($this->webUser->getEmail(), $mail['reply-to']);
     $this->assertEquals('user_mail', $mail['key']);
-    $variables = [
-      '@site-name' => $this->config('system.site')->get('name'),
-      '@subject' => $message['subject[0][value]'],
-      '@recipient-name' => $this->contactUser->getDisplayName(),
-    ];
-    $subject = PlainTextOutput::renderFromHtml(t('[@site-name] @subject', $variables));
+    $subject = '[' . $this->config('system.site')->get('name') . '] ' . $message['subject[0][value]'];
     $this->assertEquals($subject, $mail['subject'], 'Subject is in sent message.');
-    $this->assertStringContainsString('Hello ' . $variables['@recipient-name'], $mail['body'], 'Recipient name is in sent message.');
+    $this->assertStringContainsString('Hello ' . $this->contactUser->getDisplayName(), $mail['body'], 'Recipient name is in sent message.');
     $this->assertStringContainsString($this->webUser->getDisplayName(), $mail['body'], 'Sender name is in sent message.');
     $this->assertStringContainsString($message['message[0][value]'], $mail['body'], 'Message body is in sent message.');
 
@@ -128,7 +122,7 @@ public function testSendPersonalContactMessage() {
     $message = $this->submitPersonalContact($this->contactUser, $message);
 
     // Assert mail content.
-    $this->assertMailString('body', 'Hello ' . $variables['@recipient-name'], 1);
+    $this->assertMailString('body', 'Hello ' . $this->contactUser->getDisplayName(), 1);
     $this->assertMailString('body', $this->webUser->getDisplayName(), 1);
     $this->assertMailString('body', Html::Escape($message['message[0][value]']), 1);
   }
diff --git a/core/modules/content_translation/tests/src/Functional/ContentTranslationWorkflowsTest.php b/core/modules/content_translation/tests/src/Functional/ContentTranslationWorkflowsTest.php
index a57864d83556..9360122fb2bd 100644
--- a/core/modules/content_translation/tests/src/Functional/ContentTranslationWorkflowsTest.php
+++ b/core/modules/content_translation/tests/src/Functional/ContentTranslationWorkflowsTest.php
@@ -225,7 +225,7 @@ public function testWorkflows() {
     $this->doTestWorkflows($this->administrator, $expected_status);
 
     // Check that translation permissions allow the associated operations.
-    $ops = ['create' => t('Add'), 'update' => t('Edit'), 'delete' => t('Delete')];
+    $ops = ['create' => 'Add', 'update' => 'Edit', 'delete' => 'Delete'];
     $translations_url = $this->entity->toUrl('drupal:content-translation-overview');
     foreach ($ops as $current_op => $item) {
       $user = $this->drupalCreateUser([
diff --git a/core/modules/dblog/tests/src/Functional/DbLogTest.php b/core/modules/dblog/tests/src/Functional/DbLogTest.php
index 2965cd96f4d2..4b7ef3c2266f 100644
--- a/core/modules/dblog/tests/src/Functional/DbLogTest.php
+++ b/core/modules/dblog/tests/src/Functional/DbLogTest.php
@@ -377,8 +377,8 @@ private function verifyBreadcrumbs() {
   private function verifyEvents() {
     // Invoke events.
     $this->doUser();
-    $this->drupalCreateContentType(['type' => 'article', 'name' => t('Article')]);
-    $this->drupalCreateContentType(['type' => 'page', 'name' => t('Basic page')]);
+    $this->drupalCreateContentType(['type' => 'article', 'name' => 'Article']);
+    $this->drupalCreateContentType(['type' => 'page', 'name' => 'Basic page']);
     $this->doNode('article');
     $this->doNode('page');
     $this->doNode('forum');
diff --git a/core/modules/field/tests/src/Functional/NestedFormTest.php b/core/modules/field/tests/src/Functional/NestedFormTest.php
index 4dd8993d5cbe..7621b07e3a33 100644
--- a/core/modules/field/tests/src/Functional/NestedFormTest.php
+++ b/core/modules/field/tests/src/Functional/NestedFormTest.php
@@ -204,7 +204,7 @@ public function testNestedEntityFormEntityLevelValidation() {
     // Submit the form and check that the entities are updated accordingly.
     $assert_session->hiddenFieldExists('entity_2[changed]')
       ->setValue(REQUEST_TIME - 86400);
-    $page->pressButton(t('Save'));
+    $page->pressButton('Save');
 
     $elements = $this->cssSelect('.entity-2.error');
     $this->assertCount(1, $elements, 'The whole nested entity form has been correctly flagged with an error class.');
diff --git a/core/modules/field_ui/tests/src/Functional/ManageFieldsFunctionalTest.php b/core/modules/field_ui/tests/src/Functional/ManageFieldsFunctionalTest.php
index 85b056e6575b..1d54d2847135 100644
--- a/core/modules/field_ui/tests/src/Functional/ManageFieldsFunctionalTest.php
+++ b/core/modules/field_ui/tests/src/Functional/ManageFieldsFunctionalTest.php
@@ -166,12 +166,7 @@ public function manageFieldsPage($type = '') {
     $type = empty($type) ? $this->contentType : $type;
     $this->drupalGet('admin/structure/types/manage/' . $type . '/fields');
     // Check all table columns.
-    $table_headers = [
-      t('Label'),
-      t('Machine name'),
-      t('Field type'),
-      t('Operations'),
-    ];
+    $table_headers = ['Label', 'Machine name', 'Field type', 'Operations'];
     foreach ($table_headers as $table_header) {
       // We check that the label appear in the table headings.
       $this->assertSession()->responseContains($table_header . '</th>');
@@ -688,7 +683,7 @@ public function testHiddenFields() {
       'field_name' => $field_name,
       'bundle' => $this->contentType,
       'entity_type' => 'node',
-      'label' => t('Hidden field'),
+      'label' => 'Hidden field',
     ];
     FieldConfig::create($field)->save();
     \Drupal::service('entity_display.repository')
diff --git a/core/modules/field_ui/tests/src/FunctionalJavascript/ManageDisplayTest.php b/core/modules/field_ui/tests/src/FunctionalJavascript/ManageDisplayTest.php
index dbd1b0881698..c0ee1aff261e 100644
--- a/core/modules/field_ui/tests/src/FunctionalJavascript/ManageDisplayTest.php
+++ b/core/modules/field_ui/tests/src/FunctionalJavascript/ManageDisplayTest.php
@@ -454,7 +454,7 @@ public function fieldUIAddNewField($bundle_path, $field_name, $label = NULL, $fi
     $field_field_name->setValue($field_name);
     $assert_session->assertWaitOnAjaxRequest();
 
-    $page->findButton(t('Save and continue'))->click();
+    $page->findButton('Save and continue')->click();
 
     $assert_session->pageTextContains("These settings apply to the $label field everywhere it is used.");
     $breadcrumb_link = $page->findLink($label);
diff --git a/core/modules/field_ui/tests/src/Kernel/EntityDisplayTest.php b/core/modules/field_ui/tests/src/Kernel/EntityDisplayTest.php
index 9312e7a27181..84ad60cd3c0b 100644
--- a/core/modules/field_ui/tests/src/Kernel/EntityDisplayTest.php
+++ b/core/modules/field_ui/tests/src/Kernel/EntityDisplayTest.php
@@ -629,7 +629,7 @@ public function testComponentDependencies() {
     $this->assertNull($form_display->getComponent($field_name));
     $this->assertTrue($form_display->get('hidden')[$field_name]);
     // The correct warning message has been logged.
-    $arguments = ['@display' => (string) t('Entity form display'), '@id' => $form_display->id(), '@name' => $field_name];
+    $arguments = ['@display' => 'Entity form display', '@id' => $form_display->id(), '@name' => $field_name];
     $variables = Database::getConnection()->select('watchdog', 'w')
       ->fields('w', ['variables'])
       ->condition('type', 'system')
diff --git a/core/modules/file/tests/src/Functional/FilePrivateTest.php b/core/modules/file/tests/src/Functional/FilePrivateTest.php
index 8d82b2fb34bb..c1f4b3d2367d 100644
--- a/core/modules/file/tests/src/Functional/FilePrivateTest.php
+++ b/core/modules/file/tests/src/Functional/FilePrivateTest.php
@@ -90,7 +90,7 @@ public function testPrivateFile() {
     // Can't use submitForm() to set hidden fields.
     $this->drupalGet('node/' . $new_node->id() . '/edit');
     $this->getSession()->getPage()->find('css', 'input[name="' . $field_name . '[0][fids]"]')->setValue($node_file->id());
-    $this->getSession()->getPage()->pressButton(t('Save'));
+    $this->getSession()->getPage()->pressButton('Save');
     $this->assertSession()->addressEquals('node/' . $new_node->id());
     // Make sure the submitted hidden file field is empty.
     $new_node = \Drupal::entityTypeManager()->getStorage('node')->loadUnchanged($new_node->id());
@@ -103,7 +103,7 @@ public function testPrivateFile() {
     $this->drupalGet('node/add/' . $type_name);
     $this->getSession()->getPage()->find('css', 'input[name="title[0][value]"]')->setValue($edit['title[0][value]']);
     $this->getSession()->getPage()->find('css', 'input[name="' . $field_name . '[0][fids]"]')->setValue($node_file->id());
-    $this->getSession()->getPage()->pressButton(t('Save'));
+    $this->getSession()->getPage()->pressButton('Save');
     $new_node = $this->drupalGetNodeByTitle($edit['title[0][value]']);
     $this->assertSession()->addressEquals('node/' . $new_node->id());
     // Make sure the submitted hidden file field is empty.
diff --git a/core/modules/file/tests/src/FunctionalJavascript/FileManagedFileElementTest.php b/core/modules/file/tests/src/FunctionalJavascript/FileManagedFileElementTest.php
index 18c197746d66..20dfa742fdcd 100644
--- a/core/modules/file/tests/src/FunctionalJavascript/FileManagedFileElementTest.php
+++ b/core/modules/file/tests/src/FunctionalJavascript/FileManagedFileElementTest.php
@@ -76,7 +76,7 @@ public function testManagedFile() {
           $this->submitForm([], 'Save');
 
           // Remove, then Submit.
-          $remove_button_title = $multiple ? t('Remove selected') : t('Remove');
+          $remove_button_title = $multiple ? 'Remove selected' : 'Remove';
           $this->drupalGet($path . '/' . $last_fid);
           if ($multiple) {
             $selected_checkbox = ($tree ? 'nested[file]' : 'file') . '[file_' . $last_fid . '][selected]';
diff --git a/core/modules/filter/tests/src/Functional/FilterHtmlImageSecureTest.php b/core/modules/filter/tests/src/Functional/FilterHtmlImageSecureTest.php
index 25d101977b99..3d5e5ee756a0 100644
--- a/core/modules/filter/tests/src/Functional/FilterHtmlImageSecureTest.php
+++ b/core/modules/filter/tests/src/Functional/FilterHtmlImageSecureTest.php
@@ -94,8 +94,6 @@ public function testImageSource() {
 
     $druplicon = 'core/misc/druplicon.png';
     $red_x_image = base_path() . 'core/misc/icons/e32700/error.svg';
-    $alt_text = t('Image removed.');
-    $title_text = t('This image has been removed. For security reasons, only images from the local domain are allowed.');
 
     // Put a test image in the files directory.
     $test_images = $this->getTestFiles('image');
@@ -152,8 +150,8 @@ public function testImageSource() {
         $found = TRUE;
         if ($converted == $red_x_image) {
           $this->assertEquals($red_x_image, $element->getAttribute('src'));
-          $this->assertEquals($alt_text, $element->getAttribute('alt'));
-          $this->assertEquals($title_text, $element->getAttribute('title'));
+          $this->assertEquals('Image removed.', $element->getAttribute('alt'));
+          $this->assertEquals('This image has been removed. For security reasons, only images from the local domain are allowed.', $element->getAttribute('title'));
           $this->assertEquals('16', $element->getAttribute('height'));
           $this->assertEquals('16', $element->getAttribute('width'));
         }
diff --git a/core/modules/forum/tests/src/Functional/ForumTest.php b/core/modules/forum/tests/src/Functional/ForumTest.php
index 50d5a302c137..4d1e0767eacb 100644
--- a/core/modules/forum/tests/src/Functional/ForumTest.php
+++ b/core/modules/forum/tests/src/Functional/ForumTest.php
@@ -584,14 +584,13 @@ public function createForumTopic($forum, $container = FALSE) {
     $this->drupalGet('node/add/forum', ['query' => ['forum_id' => $tid]]);
     $this->submitForm($edit, 'Save');
 
-    $type = t('Forum topic');
     if ($container) {
-      $this->assertSession()->pageTextNotContains("$type $title has been created.");
+      $this->assertSession()->pageTextNotContains("Forum topic $title has been created.");
       $this->assertSession()->pageTextContains("The item {$forum['name']} is a forum container, not a forum.");
       return;
     }
     else {
-      $this->assertSession()->pageTextContains($type . ' ' . $title . ' has been created.');
+      $this->assertSession()->pageTextContains("Forum topic $title has been created.");
       $this->assertSession()->pageTextNotContains("The item {$forum['name']} is a forum container, not a forum.");
 
       // Verify that the creation message contains a link to a node.
@@ -644,8 +643,8 @@ private function verifyForums(EntityInterface $node, $admin, $response = 200) {
     $this->assertSession()->statusCodeEquals(200);
     $this->assertSession()->titleEquals($node->label() . ' | Drupal');
     $breadcrumb_build = [
-      Link::createFromRoute(t('Home'), '<front>'),
-      Link::createFromRoute(t('Forums'), 'forum.index'),
+      Link::createFromRoute('Home', '<front>'),
+      Link::createFromRoute('Forums', 'forum.index'),
       Link::createFromRoute($this->forumContainer['name'], 'forum.page', ['taxonomy_term' => $this->forumContainer['tid']]),
       Link::createFromRoute($this->forum['name'], 'forum.page', ['taxonomy_term' => $this->forum['tid']]),
     ];
@@ -708,8 +707,8 @@ private function verifyForumView($forum, $parent = NULL) {
     $this->assertSession()->titleEquals($forum['name'] . ' | Drupal');
 
     $breadcrumb_build = [
-      Link::createFromRoute(t('Home'), '<front>'),
-      Link::createFromRoute(t('Forums'), 'forum.index'),
+      Link::createFromRoute('Home', '<front>'),
+      Link::createFromRoute('Forums', 'forum.index'),
     ];
     if (isset($parent)) {
       $breadcrumb_build[] = Link::createFromRoute($parent['name'], 'forum.page', ['taxonomy_term' => $parent['tid']]);
diff --git a/core/modules/forum/tests/src/Functional/ForumUninstallTest.php b/core/modules/forum/tests/src/Functional/ForumUninstallTest.php
index 440d3b9f94a8..30ea8c1fd07a 100644
--- a/core/modules/forum/tests/src/Functional/ForumUninstallTest.php
+++ b/core/modules/forum/tests/src/Functional/ForumUninstallTest.php
@@ -45,7 +45,7 @@ public function testForumUninstallWithField() {
 
     // Create a taxonomy term.
     $term = Term::create([
-      'name' => t('A term'),
+      'name' => 'A term',
       'langcode' => \Drupal::languageManager()->getDefaultLanguage()->getId(),
       'description' => '',
       'parent' => [0],
diff --git a/core/modules/image/tests/src/Functional/ImageFieldDisplayTest.php b/core/modules/image/tests/src/Functional/ImageFieldDisplayTest.php
index 4e3d31cfa749..551c77aa0eba 100644
--- a/core/modules/image/tests/src/Functional/ImageFieldDisplayTest.php
+++ b/core/modules/image/tests/src/Functional/ImageFieldDisplayTest.php
@@ -437,7 +437,7 @@ public function testImageFieldDefaultImage() {
     // Can't use fillField cause Mink can't fill hidden fields.
     $this->drupalGet("admin/structure/types/manage/article/fields/node.article.$field_name/storage");
     $this->getSession()->getPage()->find('css', 'input[name="settings[default_image][uuid][fids]"]')->setValue(0);
-    $this->getSession()->getPage()->pressButton(t('Save field settings'));
+    $this->getSession()->getPage()->pressButton('Save field settings');
 
     // Clear field definition cache so the new default image is detected.
     \Drupal::service('entity_field.manager')->clearCachedFieldDefinitions();
diff --git a/core/modules/image/tests/src/FunctionalJavascript/ImageFieldValidateTest.php b/core/modules/image/tests/src/FunctionalJavascript/ImageFieldValidateTest.php
index 75d1b058eea0..b0a198312f8d 100644
--- a/core/modules/image/tests/src/FunctionalJavascript/ImageFieldValidateTest.php
+++ b/core/modules/image/tests/src/FunctionalJavascript/ImageFieldValidateTest.php
@@ -56,7 +56,7 @@ public function testFriendlyAjaxValidation() {
       'entity_type' => 'node',
       'bundle' => 'article',
       'field_name' => 'field_dummy_select',
-      'label' => t('Dummy select'),
+      'label' => 'Dummy select',
     ])->save();
 
     \Drupal::entityTypeManager()
diff --git a/core/modules/jsonapi/tests/src/Functional/ActionTest.php b/core/modules/jsonapi/tests/src/Functional/ActionTest.php
index 4fcc0e9e2bb7..9450f274ec66 100644
--- a/core/modules/jsonapi/tests/src/Functional/ActionTest.php
+++ b/core/modules/jsonapi/tests/src/Functional/ActionTest.php
@@ -54,7 +54,7 @@ protected function createEntity() {
     $action = Action::create([
       'id' => 'user_add_role_action.' . RoleInterface::ANONYMOUS_ID,
       'type' => 'user',
-      'label' => t('Add the anonymous role to the selected users'),
+      'label' => 'Add the anonymous role to the selected users',
       'configuration' => [
         'rid' => RoleInterface::ANONYMOUS_ID,
       ],
diff --git a/core/modules/jsonapi/tests/src/Functional/ShortcutTest.php b/core/modules/jsonapi/tests/src/Functional/ShortcutTest.php
index 6267a483364b..c03a78ab651b 100644
--- a/core/modules/jsonapi/tests/src/Functional/ShortcutTest.php
+++ b/core/modules/jsonapi/tests/src/Functional/ShortcutTest.php
@@ -65,7 +65,7 @@ protected function setUpAuthorization($method) {
   protected function createEntity() {
     $shortcut = Shortcut::create([
       'shortcut_set' => 'default',
-      'title' => t('Comments'),
+      'title' => 'Comments',
       'weight' => -20,
       'link' => [
         'uri' => 'internal:/user/logout',
diff --git a/core/modules/language/tests/src/Functional/ConfigurableLanguageManagerTest.php b/core/modules/language/tests/src/Functional/ConfigurableLanguageManagerTest.php
index 6a8dd1571906..d6b71e3a36a5 100644
--- a/core/modules/language/tests/src/Functional/ConfigurableLanguageManagerTest.php
+++ b/core/modules/language/tests/src/Functional/ConfigurableLanguageManagerTest.php
@@ -53,7 +53,7 @@ protected function setUp(): void {
     // Create a page node type and make it translatable.
     NodeType::create([
       'type' => 'page',
-      'name' => t('Page'),
+      'name' => 'Page',
     ])->save();
 
     $config = ContentLanguageSettings::loadByEntityTypeBundle('node', 'page');
diff --git a/core/modules/language/tests/src/Functional/LanguageBreadcrumbTest.php b/core/modules/language/tests/src/Functional/LanguageBreadcrumbTest.php
index 64028cf28c95..a01d65dba157 100644
--- a/core/modules/language/tests/src/Functional/LanguageBreadcrumbTest.php
+++ b/core/modules/language/tests/src/Functional/LanguageBreadcrumbTest.php
@@ -40,7 +40,7 @@ protected function setUp(): void {
   public function testBreadCrumbs() {
     // Prepare common base breadcrumb elements.
     $home = ['' => 'Home'];
-    $admin = $home + ['admin' => t('Administration')];
+    $admin = $home + ['admin' => 'Administration'];
 
     $page = $this->getSession()->getPage();
 
diff --git a/core/modules/locale/tests/src/Functional/LocaleUpdateInterfaceTest.php b/core/modules/locale/tests/src/Functional/LocaleUpdateInterfaceTest.php
index bf19edd0961e..c1a561550d8a 100644
--- a/core/modules/locale/tests/src/Functional/LocaleUpdateInterfaceTest.php
+++ b/core/modules/locale/tests/src/Functional/LocaleUpdateInterfaceTest.php
@@ -3,7 +3,6 @@
 namespace Drupal\Tests\locale\Functional;
 
 use Drupal\Core\Url;
-use Drupal\Component\Render\FormattableMarkup;
 
 /**
  * Tests for the user interface of project interface translations.
@@ -97,12 +96,7 @@ public function testInterface() {
     $this->assertSession()->linkByHrefExists(Url::fromRoute('locale.translate_status')->toString());
     $this->drupalGet('admin/reports/translations');
     $this->assertSession()->pageTextContains('Missing translations for one project');
-    $release_details = new FormattableMarkup('@module (@version). @info', [
-      '@module' => 'Locale test translate',
-      '@version' => '1.3-dev',
-      '@info' => t('File not found at %local_path', ['%local_path' => 'core/modules/locale/tests/test.de.po']),
-    ]);
-    $this->assertSession()->responseContains($release_details->__toString());
+    $this->assertSession()->pageTextContains('Locale test translate (1.3-dev). File not found at core/modules/locale/tests/test.de.po');
 
     // Override Drupal core translation status as 'no translations found'.
     $status = locale_translation_get_status();
diff --git a/core/modules/media/tests/src/Kernel/MediaSourceTest.php b/core/modules/media/tests/src/Kernel/MediaSourceTest.php
index cf6a75cae70e..07e764544848 100644
--- a/core/modules/media/tests/src/Kernel/MediaSourceTest.php
+++ b/core/modules/media/tests/src/Kernel/MediaSourceTest.php
@@ -582,7 +582,7 @@ protected function createMediaTypeViaForm($source_plugin_id, $field_name) {
     $form_state->setValues([
       'label' => 'Test type',
       'id' => $source_plugin_id,
-      'op' => t('Save'),
+      'op' => 'Save',
     ]);
 
     /** @var \Drupal\Core\Entity\EntityFieldManagerInterface $field_manager */
diff --git a/core/modules/menu_link_content/tests/src/Functional/MenuLinkContentDeleteFormTest.php b/core/modules/menu_link_content/tests/src/Functional/MenuLinkContentDeleteFormTest.php
index 87e6c684f2f1..cd7b6aaaeb5f 100644
--- a/core/modules/menu_link_content/tests/src/Functional/MenuLinkContentDeleteFormTest.php
+++ b/core/modules/menu_link_content/tests/src/Functional/MenuLinkContentDeleteFormTest.php
@@ -41,7 +41,7 @@ public function testMenuLinkContentDeleteForm() {
     // Add new menu item.
     $this->drupalGet('admin/structure/menu/manage/admin/add');
     $this->submitForm([
-      'title[0][value]' => t('Front page'),
+      'title[0][value]' => 'Front page',
       'link[0][uri]' => '<front>',
     ], 'Save');
     $this->assertSession()->pageTextContains('The menu link has been saved.');
diff --git a/core/modules/menu_link_content/tests/src/Functional/MenuLinkContentFormTest.php b/core/modules/menu_link_content/tests/src/Functional/MenuLinkContentFormTest.php
index b57bc58d55c7..d4e47cc3a70a 100644
--- a/core/modules/menu_link_content/tests/src/Functional/MenuLinkContentFormTest.php
+++ b/core/modules/menu_link_content/tests/src/Functional/MenuLinkContentFormTest.php
@@ -89,7 +89,7 @@ public function testMenuLinkContentForm() {
     $this->assertSession()->pageTextContains('The location this menu link points to.');
 
     $this->submitForm([
-      'title[0][value]' => t('Front page'),
+      'title[0][value]' => 'Front page',
       'link[0][uri]' => '<front>',
     ], 'Save');
     $this->assertSession()->pageTextContains('The menu link has been saved.');
@@ -101,7 +101,7 @@ public function testMenuLinkContentForm() {
   public function testMenuLinkContentFormValidation() {
     $this->drupalGet('admin/structure/menu/manage/admin/add');
     $this->submitForm([
-      'title[0][value]' => t('Test page'),
+      'title[0][value]' => 'Test page',
       'link[0][uri]' => '<test>',
     ], 'Save');
     $this->assertSession()->pageTextContains('Manually entered paths should start with one of the following characters: / ? #');
diff --git a/core/modules/menu_ui/tests/src/Functional/MenuUiContentModerationTest.php b/core/modules/menu_ui/tests/src/Functional/MenuUiContentModerationTest.php
index 02d8d038f3c4..2491150a6f5a 100644
--- a/core/modules/menu_ui/tests/src/Functional/MenuUiContentModerationTest.php
+++ b/core/modules/menu_ui/tests/src/Functional/MenuUiContentModerationTest.php
@@ -74,13 +74,13 @@ public function testMenuUiWithPendingRevisions() {
     // Publish the node with no changes.
     $this->drupalGet('node/' . $node->id() . '/edit');
     $this->submitForm([], 'Save');
-    $this->assertSession()->responseContains(t('Page %label has been updated.', ['%label' => $node->toLink($node->label())->toString()]));
+    $this->assertSession()->pageTextContains("Page {$node->label()} has been updated.");
 
     // Create a pending revision with no changes.
     $edit = ['moderation_state[0][state]' => 'draft'];
     $this->drupalGet('node/' . $node->id() . '/edit');
     $this->submitForm($edit, 'Save');
-    $this->assertSession()->responseContains(t('Page %label has been updated.', ['%label' => $node->toLink($node->label())->toString()]));
+    $this->assertSession()->pageTextContains("Page {$node->label()} has been updated.");
 
     // Add a menu link and save a new default (published) revision.
     $edit = [
@@ -138,7 +138,7 @@ public function testMenuUiWithPendingRevisions() {
     ];
     $this->drupalGet('node/' . $node->id() . '/edit');
     $this->submitForm($edit, 'Save');
-    $this->assertSession()->responseContains(t('Page %label has been updated.', ['%label' => $node->toLink($node->label())->toString()]));
+    $this->assertSession()->pageTextContains("Page {$node->label()} has been updated.");
 
     // Ensure the content was not immediately published.
     $this->assertSession()->linkExists('Test menu link');
@@ -164,7 +164,7 @@ public function testMenuUiWithPendingRevisions() {
     $edit = ['moderation_state[0][state]' => 'published'];
     $this->drupalGet('node/' . $node->id() . '/edit');
     $this->submitForm($edit, 'Save');
-    $this->assertSession()->responseContains(t('Page %label has been updated.', ['%label' => $node->toLink($node->label())->toString()]));
+    $this->assertSession()->pageTextContains("Page {$node->label()} has been updated.");
 
     // Add a menu link and save and create a new non-default (draft) revision
     // and ensure it's not immediately published.
@@ -175,7 +175,7 @@ public function testMenuUiWithPendingRevisions() {
     ];
     $this->drupalGet('node/' . $node->id() . '/edit');
     $this->submitForm($edit, 'Save');
-    $this->assertSession()->responseContains(t('Page %label has been updated.', ['%label' => $node->toLink($node->label())->toString()]));
+    $this->assertSession()->pageTextContains("Page {$node->label()} has been updated.");
     $this->assertSession()->linkNotExists('Second test menu link');
 
     // Publish the content and ensure the new menu link shows up.
@@ -184,7 +184,7 @@ public function testMenuUiWithPendingRevisions() {
     ];
     $this->drupalGet('node/' . $node->id() . '/edit');
     $this->submitForm($edit, 'Save');
-    $this->assertSession()->responseContains(t('Page %label has been updated.', ['%label' => $node->toLink($node->label())->toString()]));
+    $this->assertSession()->pageTextContains("Page {$node->label()} has been updated.");
     $this->assertSession()->linkExists('Second test menu link');
   }
 
diff --git a/core/modules/migrate_drupal/tests/src/Unit/source/d6/Drupal6SqlBaseTest.php b/core/modules/migrate_drupal/tests/src/Unit/source/d6/Drupal6SqlBaseTest.php
index 4da757565387..87731aadb09d 100644
--- a/core/modules/migrate_drupal/tests/src/Unit/source/d6/Drupal6SqlBaseTest.php
+++ b/core/modules/migrate_drupal/tests/src/Unit/source/d6/Drupal6SqlBaseTest.php
@@ -146,16 +146,16 @@ class TestDrupal6SqlBase extends DrupalSqlBase {
    */
   public function fields() {
     return [
-      'filename' => t('The path of the primary file for this item.'),
-      'name' => t('The name of the item; e.g. node.'),
-      'type' => t('The type of the item, either module, theme, or theme_engine.'),
-      'owner' => t("A theme's 'parent'. Can be either a theme or an engine."),
-      'status' => t('Boolean indicating whether or not this item is enabled.'),
-      'throttle' => t('Boolean indicating whether this item is disabled when the throttle.module disables throttleable items.'),
-      'bootstrap' => t("Boolean indicating whether this module is loaded during Drupal's early bootstrapping phase (e.g. even before the page cache is consulted)."),
-      'schema_version' => t("The module's database schema version number."),
-      'weight' => t("The order in which this module's hooks should be invoked."),
-      'info' => t("A serialized array containing information from the module's .info file."),
+      'filename' => $this->t('The path of the primary file for this item.'),
+      'name' => $this->t('The name of the item; e.g. node.'),
+      'type' => $this->t('The type of the item, either module, theme, or theme_engine.'),
+      'owner' => $this->t("A theme's 'parent'. Can be either a theme or an engine."),
+      'status' => $this->t('Boolean indicating whether or not this item is enabled.'),
+      'throttle' => $this->t('Boolean indicating whether this item is disabled when the throttle.module disables throttleable items.'),
+      'bootstrap' => $this->t("Boolean indicating whether this module is loaded during Drupal's early bootstrapping phase (e.g. even before the page cache is consulted)."),
+      'schema_version' => $this->t("The module's database schema version number."),
+      'weight' => $this->t("The order in which this module's hooks should be invoked."),
+      'info' => $this->t("A serialized array containing information from the module's .info file."),
     ];
   }
 
diff --git a/core/modules/migrate_drupal_ui/tests/src/Functional/SourceProviderTest.php b/core/modules/migrate_drupal_ui/tests/src/Functional/SourceProviderTest.php
index 9fa261d2a31c..e6768723eb8a 100644
--- a/core/modules/migrate_drupal_ui/tests/src/Functional/SourceProviderTest.php
+++ b/core/modules/migrate_drupal_ui/tests/src/Functional/SourceProviderTest.php
@@ -32,8 +32,8 @@ public function testSourceProvider($path_to_database) {
     $this->submitCredentialForm();
 
     // Ensure we get errors about missing modules.
-    $session->pageTextContains(t('Resolve all issues below to continue the upgrade.'));
-    $session->pageTextContains(t('The no_source_module plugin must define the source_module property.'));
+    $session->pageTextContains('Resolve all issues below to continue the upgrade.');
+    $session->pageTextContains('The no_source_module plugin must define the source_module property.');
 
     // Uninstall the module causing the missing module error messages.
     $this->container->get('module_installer')
@@ -45,10 +45,10 @@ public function testSourceProvider($path_to_database) {
     $this->submitForm($this->edits, 'Review upgrade');
 
     // Ensure there are no errors about missing modules from the test module.
-    $session->pageTextNotContains(t('Source module not found for migration_provider_no_annotation.'));
-    $session->pageTextNotContains(t('Source module not found for migration_provider_test.'));
+    $session->pageTextNotContains('Source module not found for migration_provider_no_annotation.');
+    $session->pageTextNotContains('Source module not found for migration_provider_test.');
     // Ensure there are no errors about any other missing migration providers.
-    $session->pageTextNotContains(t('module not found'));
+    $session->pageTextNotContains('module not found');
   }
 
   /**
diff --git a/core/modules/node/tests/src/Functional/NodeAccessBaseTableTest.php b/core/modules/node/tests/src/Functional/NodeAccessBaseTableTest.php
index 7b6889d9c346..a20379f16822 100644
--- a/core/modules/node/tests/src/Functional/NodeAccessBaseTableTest.php
+++ b/core/modules/node/tests/src/Functional/NodeAccessBaseTableTest.php
@@ -108,7 +108,7 @@ public function testNodeAccessBasic() {
       $this->drupalLogin($this->webUser);
       foreach ([0 => 'Public', 1 => 'Private'] as $is_private => $type) {
         $edit = [
-          'title[0][value]' => t('@private_public Article created by @user', ['@private_public' => $type, '@user' => $this->webUser->getAccountName()]),
+          'title[0][value]' => "$type Article created by " . $this->webUser->getAccountName(),
         ];
         if ($is_private) {
           $edit['private[0][value]'] = TRUE;
diff --git a/core/modules/node/tests/src/Functional/NodeAccessPagerTest.php b/core/modules/node/tests/src/Functional/NodeAccessPagerTest.php
index c47c35dda157..9000a1f6617b 100644
--- a/core/modules/node/tests/src/Functional/NodeAccessPagerTest.php
+++ b/core/modules/node/tests/src/Functional/NodeAccessPagerTest.php
@@ -32,7 +32,7 @@ protected function setUp(): void {
     parent::setUp();
 
     node_access_rebuild();
-    $this->drupalCreateContentType(['type' => 'page', 'name' => t('Basic page')]);
+    $this->drupalCreateContentType(['type' => 'page', 'name' => 'Basic page']);
     $this->addDefaultCommentField('node', 'page');
     $this->webUser = $this->drupalCreateUser([
       'access content',
diff --git a/core/modules/node/tests/src/Functional/NodeEntityViewModeAlterTest.php b/core/modules/node/tests/src/Functional/NodeEntityViewModeAlterTest.php
index e1357d705bfa..25a2758717b2 100644
--- a/core/modules/node/tests/src/Functional/NodeEntityViewModeAlterTest.php
+++ b/core/modules/node/tests/src/Functional/NodeEntityViewModeAlterTest.php
@@ -37,8 +37,8 @@ public function testNodeViewModeChange() {
     // Create a node.
     $edit = [];
     $edit['title[0][value]'] = $this->randomMachineName(8);
-    $edit['body[0][value]'] = t('Data that should appear only in the body for the node.');
-    $edit['body[0][summary]'] = t('Extra data that should appear only in the teaser for the node.');
+    $edit['body[0][value]'] = 'Data that should appear only in the body for the node.';
+    $edit['body[0][summary]'] = 'Extra data that should appear only in the teaser for the node.';
     $this->drupalGet('node/add/page');
     $this->submitForm($edit, 'Save');
 
diff --git a/core/modules/node/tests/src/Functional/NodeRSSContentTest.php b/core/modules/node/tests/src/Functional/NodeRSSContentTest.php
index 1fd49d3eb67b..a7a1ad4e88fc 100644
--- a/core/modules/node/tests/src/Functional/NodeRSSContentTest.php
+++ b/core/modules/node/tests/src/Functional/NodeRSSContentTest.php
@@ -60,7 +60,7 @@ public function testNodeRSSContent() {
     $this->assertSession()->responseNotContains($non_rss_content);
 
     // Check that extra RSS elements and namespaces are added to RSS feed.
-    $test_element = '<testElement>' . t('Value of testElement RSS element for node @nid.', ['@nid' => $node->id()]) . '</testElement>';
+    $test_element = "<testElement>Value of testElement RSS element for node {$node->id()}.</testElement>";
     $test_ns = 'xmlns:drupaltest="http://example.com/test-namespace"';
     $this->assertSession()->responseContains($test_element);
     $this->assertSession()->responseContains($test_ns);
diff --git a/core/modules/node/tests/src/Functional/NodeTranslationUITest.php b/core/modules/node/tests/src/Functional/NodeTranslationUITest.php
index 624c70906c83..8934c958d920 100644
--- a/core/modules/node/tests/src/Functional/NodeTranslationUITest.php
+++ b/core/modules/node/tests/src/Functional/NodeTranslationUITest.php
@@ -456,7 +456,7 @@ protected function getFormSubmitSuffix(EntityInterface $entity, $langcode) {
     if (!$entity->isNew() && $entity->isTranslatable()) {
       $translations = $entity->getTranslationLanguages();
       if ((count($translations) > 1 || !isset($translations[$langcode])) && ($field = $entity->getFieldDefinition('status'))) {
-        return ' ' . ($field->isTranslatable() ? t('(this translation)') : t('(all translations)'));
+        return ' ' . ($field->isTranslatable() ? '(this translation)' : '(all translations)');
       }
     }
     return '';
diff --git a/core/modules/node/tests/src/Functional/Views/FilterNodeAccessTest.php b/core/modules/node/tests/src/Functional/Views/FilterNodeAccessTest.php
index a7b8b7f37854..30e75d63cb9a 100644
--- a/core/modules/node/tests/src/Functional/Views/FilterNodeAccessTest.php
+++ b/core/modules/node/tests/src/Functional/Views/FilterNodeAccessTest.php
@@ -68,7 +68,7 @@ protected function setUp($import_test_views = TRUE): void {
               'format' => filter_default_format(),
             ],
           ],
-          'title' => t('@private_public Article created by @user', ['@private_public' => $type, '@user' => $web_user->getAccountName()]),
+          'title' => "$type Article created by " . $web_user->getAccountName(),
           'type' => 'article',
           'uid' => $web_user->id(),
           'private' => (bool) $is_private,
diff --git a/core/modules/path/tests/src/Functional/PathTaxonomyTermTest.php b/core/modules/path/tests/src/Functional/PathTaxonomyTermTest.php
index 1a5cfb93498b..821727d1993a 100644
--- a/core/modules/path/tests/src/Functional/PathTaxonomyTermTest.php
+++ b/core/modules/path/tests/src/Functional/PathTaxonomyTermTest.php
@@ -28,7 +28,7 @@ protected function setUp(): void {
 
     // Create a Tags vocabulary for the Article node type.
     $vocabulary = Vocabulary::create([
-      'name' => t('Tags'),
+      'name' => 'Tags',
       'vid' => 'tags',
     ]);
     $vocabulary->save();
diff --git a/core/modules/quickedit/tests/src/Functional/QuickEditCustomPipelineTest.php b/core/modules/quickedit/tests/src/Functional/QuickEditCustomPipelineTest.php
index ab0b75c7ae66..e4cc514c241c 100644
--- a/core/modules/quickedit/tests/src/Functional/QuickEditCustomPipelineTest.php
+++ b/core/modules/quickedit/tests/src/Functional/QuickEditCustomPipelineTest.php
@@ -77,7 +77,7 @@ public function testCustomPipeline() {
       'body[0][summary]' => '',
       'body[0][value]' => '<p>Fine thanks.</p>',
       'body[0][format]' => 'filtered_html',
-      'op' => t('Save'),
+      'op' => 'Save',
     ];
     // Assume there is another field on this page, which doesn't use a custom
     // render pipeline, but the default one, and it uses the "full" view mode.
diff --git a/core/modules/quickedit/tests/src/Functional/QuickEditEndPointAccessTest.php b/core/modules/quickedit/tests/src/Functional/QuickEditEndPointAccessTest.php
index fcf9de0c0d41..1cb90adf40db 100644
--- a/core/modules/quickedit/tests/src/Functional/QuickEditEndPointAccessTest.php
+++ b/core/modules/quickedit/tests/src/Functional/QuickEditEndPointAccessTest.php
@@ -61,7 +61,7 @@ public function testEndPointAccess() {
     $edit['body[0][summary]'] = '';
     $edit['body[0][value]'] = '<p>Malicious content.</p>';
     $edit['body[0][format]'] = 'filtered_html';
-    $edit['op'] = t('Save');
+    $edit['op'] = 'Save';
     $this->assertAccessIsBlocked($url, $edit);
 
     $post = ['nocssjs' => 'true'];
diff --git a/core/modules/quickedit/tests/src/Functional/QuickEditImageControllerTest.php b/core/modules/quickedit/tests/src/Functional/QuickEditImageControllerTest.php
index 7642f6fcf0d0..a1e3932c6d5c 100644
--- a/core/modules/quickedit/tests/src/Functional/QuickEditImageControllerTest.php
+++ b/core/modules/quickedit/tests/src/Functional/QuickEditImageControllerTest.php
@@ -83,7 +83,7 @@ public function testAccess() {
     // Create a test Node.
     $node = $this->drupalCreateNode([
       'type' => 'article',
-      'title' => t('Test Node'),
+      'title' => 'Test Node',
     ]);
     $this->drupalGet('quickedit/image/info/node/' . $node->id() . '/' . $this->fieldName . '/' . $node->language()->getId() . '/default');
     $this->assertSession()->statusCodeEquals(403);
@@ -101,7 +101,7 @@ public function testFieldInfo() {
     // Create a test Node.
     $node = $this->drupalCreateNode([
       'type' => 'article',
-      'title' => t('Test Node'),
+      'title' => 'Test Node',
     ]);
     $json = $this->drupalGet('quickedit/image/info/node/' . $node->id() . '/' . $this->fieldName . '/' . $node->language()->getId() . '/default', ['query' => ['_format' => 'json']]);
     $info = Json::decode($json);
@@ -118,7 +118,7 @@ public function testValidImageUpload() {
     // Create a test Node.
     $node = $this->drupalCreateNode([
       'type' => 'article',
-      'title' => t('Test Node'),
+      'title' => 'Test Node',
     ]);
 
     // We want a test image that is a valid size.
@@ -145,7 +145,7 @@ public function testInvalidUpload() {
     // Create a test Node.
     $node = $this->drupalCreateNode([
       'type' => 'article',
-      'title' => t('Test Node'),
+      'title' => 'Test Node',
     ]);
 
     // We want a test image that will fail validation.
diff --git a/core/modules/quickedit/tests/src/FunctionalJavascript/LayoutBuilderQuickEditTest.php b/core/modules/quickedit/tests/src/FunctionalJavascript/LayoutBuilderQuickEditTest.php
index 2d48df5b66c2..daa5a192c4d9 100644
--- a/core/modules/quickedit/tests/src/FunctionalJavascript/LayoutBuilderQuickEditTest.php
+++ b/core/modules/quickedit/tests/src/FunctionalJavascript/LayoutBuilderQuickEditTest.php
@@ -70,7 +70,7 @@ protected function setUp(): void {
     $this->drupalCreateContentType(['type' => 'article', 'name' => 'Article']);
     $this->article = $this->drupalCreateNode([
       'type' => 'article',
-      'title' => t('My Test Node'),
+      'title' => 'My Test Node',
       'body' => [
         'value' => 'Hello Layout Builder!',
         'format' => 'plain_text',
diff --git a/core/modules/quickedit/tests/src/FunctionalJavascript/QuickEditFileTest.php b/core/modules/quickedit/tests/src/FunctionalJavascript/QuickEditFileTest.php
index f6a12e36073c..53fad46e43be 100644
--- a/core/modules/quickedit/tests/src/FunctionalJavascript/QuickEditFileTest.php
+++ b/core/modules/quickedit/tests/src/FunctionalJavascript/QuickEditFileTest.php
@@ -70,7 +70,7 @@ public function testRemove() {
     // Create test node.
     $node = $this->drupalCreateNode([
       'type' => 'article',
-      'title' => t('My Test Node'),
+      'title' => 'My Test Node',
       'field_file' => [
         'target_id' => $file->id(),
       ],
diff --git a/core/modules/quickedit/tests/src/FunctionalJavascript/QuickEditImageTest.php b/core/modules/quickedit/tests/src/FunctionalJavascript/QuickEditImageTest.php
index 198ddf52dda4..7ed590965248 100644
--- a/core/modules/quickedit/tests/src/FunctionalJavascript/QuickEditImageTest.php
+++ b/core/modules/quickedit/tests/src/FunctionalJavascript/QuickEditImageTest.php
@@ -104,7 +104,7 @@ public function testImageInPlaceEditor($admin_permission = FALSE) {
     $image = $image_factory->get($valid_images[0]->uri);
     $node = $this->drupalCreateNode([
       'type' => 'article',
-      'title' => t('Test Node'),
+      'title' => 'Test Node',
       $field_name => [
         'target_id' => $file->id(),
         'alt' => 'Hello world',
diff --git a/core/modules/quickedit/tests/src/FunctionalJavascript/QuickEditIntegrationTest.php b/core/modules/quickedit/tests/src/FunctionalJavascript/QuickEditIntegrationTest.php
index 3669dfa9256e..2ee31915478c 100644
--- a/core/modules/quickedit/tests/src/FunctionalJavascript/QuickEditIntegrationTest.php
+++ b/core/modules/quickedit/tests/src/FunctionalJavascript/QuickEditIntegrationTest.php
@@ -127,7 +127,7 @@ public function testArticleNode() {
 
     $node = $this->drupalCreateNode([
       'type' => 'article',
-      'title' => t('My Test Node'),
+      'title' => 'My Test Node',
       'body' => [
         'value' => '<p>Hello world!</p><p>I do not know what to say…</p><p>I wish I were eloquent.</p>',
         'format' => 'some_format',
diff --git a/core/modules/quickedit/tests/src/FunctionalJavascript/QuickEditLoadingTest.php b/core/modules/quickedit/tests/src/FunctionalJavascript/QuickEditLoadingTest.php
index 86e95b75e67d..18e59f1b46e7 100644
--- a/core/modules/quickedit/tests/src/FunctionalJavascript/QuickEditLoadingTest.php
+++ b/core/modules/quickedit/tests/src/FunctionalJavascript/QuickEditLoadingTest.php
@@ -354,7 +354,7 @@ public function testImageField() {
     FieldConfig::create([
       'field_name' => 'field_image',
       'field_type' => 'image',
-      'label' => t('Image'),
+      'label' => 'Image',
       'entity_type' => 'node',
       'bundle' => 'article',
     ])->save();
diff --git a/core/modules/shortcut/tests/src/Functional/ShortcutCacheTagsTest.php b/core/modules/shortcut/tests/src/Functional/ShortcutCacheTagsTest.php
index b6e924bd3edf..bcafe2c4b23d 100644
--- a/core/modules/shortcut/tests/src/Functional/ShortcutCacheTagsTest.php
+++ b/core/modules/shortcut/tests/src/Functional/ShortcutCacheTagsTest.php
@@ -54,7 +54,7 @@ protected function createEntity() {
     // Create a "Llama" shortcut.
     $shortcut = Shortcut::create([
       'shortcut_set' => 'default',
-      'title' => t('Llama'),
+      'title' => 'Llama',
       'weight' => 0,
       'link' => [['uri' => 'internal:/admin']],
     ]);
diff --git a/core/modules/statistics/tests/src/Functional/StatisticsTokenReplaceTest.php b/core/modules/statistics/tests/src/Functional/StatisticsTokenReplaceTest.php
index 160650bc6144..879f16cc90bc 100644
--- a/core/modules/statistics/tests/src/Functional/StatisticsTokenReplaceTest.php
+++ b/core/modules/statistics/tests/src/Functional/StatisticsTokenReplaceTest.php
@@ -36,7 +36,7 @@ public function testStatisticsTokenReplacement() {
     $tests = [];
     $tests['[node:total-count]'] = 0;
     $tests['[node:day-count]'] = 0;
-    $tests['[node:last-view]'] = t('never');
+    $tests['[node:last-view]'] = 'never';
     $tests['[node:last-view:short]'] = $date_formatter->format($request_time, 'short');
 
     foreach ($tests as $input => $expected) {
diff --git a/core/modules/system/tests/src/Functional/Database/SelectTableSortDefaultTest.php b/core/modules/system/tests/src/Functional/Database/SelectTableSortDefaultTest.php
index f38ea7a2fca1..6d20a2e4cb12 100644
--- a/core/modules/system/tests/src/Functional/Database/SelectTableSortDefaultTest.php
+++ b/core/modules/system/tests/src/Functional/Database/SelectTableSortDefaultTest.php
@@ -24,10 +24,10 @@ class SelectTableSortDefaultTest extends DatabaseTestBase {
    */
   public function testTableSortQuery() {
     $sorts = [
-      ['field' => t('Task ID'), 'sort' => 'desc', 'first' => 'perform at superbowl', 'last' => 'eat'],
-      ['field' => t('Task ID'), 'sort' => 'asc', 'first' => 'eat', 'last' => 'perform at superbowl'],
-      ['field' => t('Task'), 'sort' => 'asc', 'first' => 'code', 'last' => 'sleep'],
-      ['field' => t('Task'), 'sort' => 'desc', 'first' => 'sleep', 'last' => 'code'],
+      ['field' => 'Task ID', 'sort' => 'desc', 'first' => 'perform at superbowl', 'last' => 'eat'],
+      ['field' => 'Task ID', 'sort' => 'asc', 'first' => 'eat', 'last' => 'perform at superbowl'],
+      ['field' => 'Task', 'sort' => 'asc', 'first' => 'code', 'last' => 'sleep'],
+      ['field' => 'Task', 'sort' => 'desc', 'first' => 'sleep', 'last' => 'code'],
       // more elements here
 
     ];
@@ -52,10 +52,10 @@ public function testTableSortQuery() {
    */
   public function testTableSortQueryFirst() {
     $sorts = [
-      ['field' => t('Task ID'), 'sort' => 'desc', 'first' => 'perform at superbowl', 'last' => 'eat'],
-      ['field' => t('Task ID'), 'sort' => 'asc', 'first' => 'eat', 'last' => 'perform at superbowl'],
-      ['field' => t('Task'), 'sort' => 'asc', 'first' => 'code', 'last' => 'sleep'],
-      ['field' => t('Task'), 'sort' => 'desc', 'first' => 'sleep', 'last' => 'code'],
+      ['field' => 'Task ID', 'sort' => 'desc', 'first' => 'perform at superbowl', 'last' => 'eat'],
+      ['field' => 'Task ID', 'sort' => 'asc', 'first' => 'eat', 'last' => 'perform at superbowl'],
+      ['field' => 'Task', 'sort' => 'asc', 'first' => 'code', 'last' => 'sleep'],
+      ['field' => 'Task', 'sort' => 'desc', 'first' => 'sleep', 'last' => 'code'],
       // more elements here
 
     ];
diff --git a/core/modules/system/tests/src/Functional/Form/ElementsTableSelectTest.php b/core/modules/system/tests/src/Functional/Form/ElementsTableSelectTest.php
index 76be86fcac4a..f20a753b719d 100644
--- a/core/modules/system/tests/src/Functional/Form/ElementsTableSelectTest.php
+++ b/core/modules/system/tests/src/Functional/Form/ElementsTableSelectTest.php
@@ -216,7 +216,7 @@ private function formSubmitHelper($form, $edit) {
     $form_id = $this->randomMachineName();
     $form_state = new FormState();
 
-    $form['op'] = ['#type' => 'submit', '#value' => t('Submit')];
+    $form['op'] = ['#type' => 'submit', '#value' => 'Submit'];
     // The form token CSRF protection should not interfere with this test, so we
     // bypass it by setting the token to FALSE.
     $form['#token'] = FALSE;
diff --git a/core/modules/system/tests/src/Functional/Form/FormTest.php b/core/modules/system/tests/src/Functional/Form/FormTest.php
index 47416c0dba35..860ff8dd0077 100644
--- a/core/modules/system/tests/src/Functional/Form/FormTest.php
+++ b/core/modules/system/tests/src/Functional/Form/FormTest.php
@@ -85,7 +85,7 @@ public function testRequiredFields() {
     $elements['textarea']['element'] = ['#title' => $this->randomMachineName(), '#type' => 'textarea'];
     $elements['textarea']['empty_values'] = $empty_strings;
 
-    $elements['radios']['element'] = ['#title' => $this->randomMachineName(), '#type' => 'radios', '#options' => ['' => t('None'), $this->randomMachineName(), $this->randomMachineName(), $this->randomMachineName()]];
+    $elements['radios']['element'] = ['#title' => $this->randomMachineName(), '#type' => 'radios', '#options' => ['' => 'None', $this->randomMachineName(), $this->randomMachineName(), $this->randomMachineName()]];
     $elements['radios']['empty_values'] = $empty_arrays;
 
     $elements['checkbox']['element'] = ['#title' => $this->randomMachineName(), '#type' => 'checkbox', '#required' => TRUE];
@@ -94,7 +94,7 @@ public function testRequiredFields() {
     $elements['checkboxes']['element'] = ['#title' => $this->randomMachineName(), '#type' => 'checkboxes', '#options' => [$this->randomMachineName(), $this->randomMachineName(), $this->randomMachineName()]];
     $elements['checkboxes']['empty_values'] = $empty_arrays;
 
-    $elements['select']['element'] = ['#title' => $this->randomMachineName(), '#type' => 'select', '#options' => ['' => t('None'), $this->randomMachineName(), $this->randomMachineName(), $this->randomMachineName()]];
+    $elements['select']['element'] = ['#title' => $this->randomMachineName(), '#type' => 'select', '#options' => ['' => 'None', $this->randomMachineName(), $this->randomMachineName(), $this->randomMachineName()]];
     $elements['select']['empty_values'] = $empty_strings;
 
     $elements['file']['element'] = ['#title' => $this->randomMachineName(), '#type' => 'file'];
@@ -109,7 +109,7 @@ public function testRequiredFields() {
           $form_id = $this->randomMachineName();
           $form = [];
           $form_state = new FormState();
-          $form['op'] = ['#type' => 'submit', '#value' => t('Submit')];
+          $form['op'] = ['#type' => 'submit', '#value' => 'Submit'];
           $element = $data['element']['#title'];
           $form[$element] = $data['element'];
           $form[$element]['#required'] = $required;
@@ -185,7 +185,7 @@ public function testRequiredCheckboxesRadio() {
         $expected[] = $form[$key]['#form_test_required_error'];
       }
       else {
-        $expected[] = t('@name field is required.', ['@name' => $form[$key]['#title']]);
+        $expected[] = $form[$key]['#title'] . ' field is required.';
       }
     }
 
diff --git a/core/modules/system/tests/src/Functional/Form/LanguageSelectElementTest.php b/core/modules/system/tests/src/Functional/Form/LanguageSelectElementTest.php
index 02331c47c7ab..fa623992416d 100644
--- a/core/modules/system/tests/src/Functional/Form/LanguageSelectElementTest.php
+++ b/core/modules/system/tests/src/Functional/Form/LanguageSelectElementTest.php
@@ -58,7 +58,7 @@ public function testLanguageSelectElementOptions() {
       /** @var \Drupal\Core\Language\LanguageManagerInterface $language_manager */
       $language_manager = $this->container->get('language_manager');
       foreach ($language_manager->getLanguages($flags) as $langcode => $language) {
-        $options[$langcode] = $language->isLocked() ? t('- @name -', ['@name' => $language->getName()]) : $language->getName();
+        $options[$langcode] = $language->isLocked() ? "- {$language->getName()} -" : $language->getName();
       }
       $this->_testLanguageSelectElementOptions($id, $options);
     }
diff --git a/core/modules/system/tests/src/Functional/Menu/BreadcrumbTest.php b/core/modules/system/tests/src/Functional/Menu/BreadcrumbTest.php
index 849399fd230b..12461125711a 100644
--- a/core/modules/system/tests/src/Functional/Menu/BreadcrumbTest.php
+++ b/core/modules/system/tests/src/Functional/Menu/BreadcrumbTest.php
@@ -68,62 +68,62 @@ protected function setUp(): void {
   public function testBreadCrumbs() {
     // Prepare common base breadcrumb elements.
     $home = ['' => 'Home'];
-    $admin = $home + ['admin' => t('Administration')];
-    $config = $admin + ['admin/config' => t('Configuration')];
+    $admin = $home + ['admin' => 'Administration'];
+    $config = $admin + ['admin/config' => 'Configuration'];
     $type = 'article';
 
     // Verify Taxonomy administration breadcrumbs.
     $trail = $admin + [
-      'admin/structure' => t('Structure'),
+      'admin/structure' => 'Structure',
     ];
     $this->assertBreadcrumb('admin/structure/taxonomy', $trail);
 
     $trail += [
-      'admin/structure/taxonomy' => t('Taxonomy'),
+      'admin/structure/taxonomy' => 'Taxonomy',
     ];
     $this->assertBreadcrumb('admin/structure/taxonomy/manage/tags', $trail);
     $trail += [
-      'admin/structure/taxonomy/manage/tags' => t('Edit Tags'),
+      'admin/structure/taxonomy/manage/tags' => 'Edit Tags',
     ];
     $this->assertBreadcrumb('admin/structure/taxonomy/manage/tags/overview', $trail);
     $this->assertBreadcrumb('admin/structure/taxonomy/manage/tags/add', $trail);
 
     // Verify Menu administration breadcrumbs.
     $trail = $admin + [
-      'admin/structure' => t('Structure'),
+      'admin/structure' => 'Structure',
     ];
     $this->assertBreadcrumb('admin/structure/menu', $trail);
 
     $trail += [
-      'admin/structure/menu' => t('Menus'),
+      'admin/structure/menu' => 'Menus',
     ];
     $this->assertBreadcrumb('admin/structure/menu/manage/tools', $trail);
 
     $trail += [
-      'admin/structure/menu/manage/tools' => t('Tools'),
+      'admin/structure/menu/manage/tools' => 'Tools',
     ];
     $this->assertBreadcrumb("admin/structure/menu/link/node.add_page/edit", $trail);
     $this->assertBreadcrumb('admin/structure/menu/manage/tools/add', $trail);
 
     // Verify Node administration breadcrumbs.
     $trail = $admin + [
-      'admin/structure' => t('Structure'),
-      'admin/structure/types' => t('Content types'),
+      'admin/structure' => 'Structure',
+      'admin/structure/types' => 'Content types',
     ];
     $this->assertBreadcrumb('admin/structure/types/add', $trail);
     $this->assertBreadcrumb("admin/structure/types/manage/$type", $trail);
     $trail += [
-      "admin/structure/types/manage/$type" => t('Article'),
+      "admin/structure/types/manage/$type" => 'Article',
     ];
     $this->assertBreadcrumb("admin/structure/types/manage/$type/fields", $trail);
     $this->assertBreadcrumb("admin/structure/types/manage/$type/display", $trail);
     $trail_teaser = $trail + [
-      "admin/structure/types/manage/$type/display" => t('Manage display'),
+      "admin/structure/types/manage/$type/display" => 'Manage display',
     ];
     $this->assertBreadcrumb("admin/structure/types/manage/$type/display/teaser", $trail_teaser);
     $this->assertBreadcrumb("admin/structure/types/manage/$type/delete", $trail);
     $trail += [
-      "admin/structure/types/manage/$type/fields" => t('Manage fields'),
+      "admin/structure/types/manage/$type/fields" => 'Manage fields',
     ];
     $this->assertBreadcrumb("admin/structure/types/manage/$type/fields/node.$type.body", $trail);
 
@@ -132,12 +132,12 @@ public function testBreadCrumbs() {
     $format = reset($filter_formats);
     $format_id = $format->id();
     $trail = $config + [
-      'admin/config/content' => t('Content authoring'),
+      'admin/config/content' => 'Content authoring',
     ];
     $this->assertBreadcrumb('admin/config/content/formats', $trail);
 
     $trail += [
-      'admin/config/content/formats' => t('Text formats and editors'),
+      'admin/config/content/formats' => 'Text formats and editors',
     ];
     $this->assertBreadcrumb('admin/config/content/formats/add', $trail);
     $this->assertBreadcrumb("admin/config/content/formats/manage/$format_id", $trail);
@@ -379,7 +379,7 @@ public function testBreadCrumbs() {
     $this->assertSession()->statusCodeNotEquals(403);
 
     // Since the Reports page is accessible, that will show.
-    $trail += ['admin/reports' => t('Reports')];
+    $trail += ['admin/reports' => 'Reports'];
     $this->assertBreadcrumb('admin/reports/dblog', $trail, 'Recent log messages');
     $this->assertSession()->statusCodeNotEquals(403);
 
@@ -395,7 +395,7 @@ public function testBreadCrumbs() {
   public function testAssertBreadcrumbTrait() {
     // Ensure the test trait works as expected using menu_test routes.
     $home = ['' => 'Home'];
-    $trail = $home + ['menu-test' => t('Menu test root')];
+    $trail = $home + ['menu-test' => 'Menu test root'];
 
     // Test a passing assertion.
     $this->assertBreadcrumb('menu-test/breadcrumb1', $trail);
diff --git a/core/modules/system/tests/src/Functional/System/SiteMaintenanceTest.php b/core/modules/system/tests/src/Functional/System/SiteMaintenanceTest.php
index 1400fb0561ee..0503da1715ec 100644
--- a/core/modules/system/tests/src/Functional/System/SiteMaintenanceTest.php
+++ b/core/modules/system/tests/src/Functional/System/SiteMaintenanceTest.php
@@ -54,12 +54,12 @@ protected function setUp(): void {
   public function testSiteMaintenance() {
 
     // Verify that permission message is displayed.
-    $permission_handler = $this->container->get('user.permissions');
-    $permissions = $permission_handler->getPermissions();
-    $permission_label = $permissions['access site in maintenance mode']['title'];
-    $permission_message = t('Visitors will only see the maintenance mode message. Only users with the "@permission-label" <a href=":permissions-url">permission</a> will be able to access the site. Authorized users can log in directly via the <a href=":user-login">user login</a> page.', ['@permission-label' => $permission_label, ':permissions-url' => Url::fromRoute('user.admin_permissions')->toString(), ':user-login' => Url::fromRoute('user.login')->toString()]);
     $this->drupalGet(Url::fromRoute('system.site_maintenance_mode'));
-    $this->assertSession()->responseContains($permission_message);
+    $this->assertSession()->pageTextContains('Visitors will only see the maintenance mode message. Only users with the "Use the site in maintenance mode" permission will be able to access the site. Authorized users can log in directly via the user login page.');
+    $this->assertSession()->linkExists('permission');
+    $this->assertSession()->linkByHrefExists(Url::fromRoute('user.admin_permissions')->toString());
+    $this->assertSession()->linkExists('user login');
+    $this->assertSession()->linkByHrefExists(Url::fromRoute('user.login')->toString());
 
     $this->drupalGet(Url::fromRoute('user.page'));
     // JS should be aggregated, so drupal.js is not in the page source.
@@ -72,7 +72,7 @@ public function testSiteMaintenance() {
     $this->drupalGet('admin/config/development/maintenance');
     $this->submitForm($edit, 'Save configuration');
 
-    $admin_message = t('Operating in maintenance mode. <a href=":url">Go online.</a>', [':url' => Url::fromRoute('system.site_maintenance_mode')->toString()]);
+    $admin_message = 'Operating in maintenance mode. Go online.';
     $user_message = 'Operating in maintenance mode.';
     $offline_message = $this->config('system.site')->get('name') . ' is currently under maintenance. We should be back shortly. Thank you for your patience.';
 
@@ -80,7 +80,9 @@ public function testSiteMaintenance() {
     // JS should not be aggregated, so drupal.js is expected in the page source.
     $links = $this->xpath('//script[contains(@src, :href)]', [':href' => '/core/misc/drupal.js']);
     $this->assertTrue(isset($links[0]), 'script /core/misc/drupal.js in page');
-    $this->assertSession()->responseContains($admin_message);
+    $this->assertSession()->pageTextContains($admin_message);
+    $this->assertSession()->linkExists('Go online.');
+    $this->assertSession()->linkByHrefExists(Url::fromRoute('system.site_maintenance_mode')->toString());
 
     // Logout and verify that offline message is displayed.
     $this->drupalLogout();
@@ -113,7 +115,7 @@ public function testSiteMaintenance() {
     $this->drupalLogout();
     $this->drupalLogin($this->adminUser);
     $this->drupalGet('admin/config/development/maintenance');
-    $this->assertSession()->responseNotContains($admin_message);
+    $this->assertSession()->pageTextNotContains($admin_message);
 
     $offline_message = 'Sorry, not online.';
     $edit = [
diff --git a/core/modules/system/tests/src/Kernel/Action/ActionTest.php b/core/modules/system/tests/src/Kernel/Action/ActionTest.php
index 47d39cdbd240..2dac37555cec 100644
--- a/core/modules/system/tests/src/Kernel/Action/ActionTest.php
+++ b/core/modules/system/tests/src/Kernel/Action/ActionTest.php
@@ -80,7 +80,7 @@ public function testDependencies() {
     $action = Action::create([
       'id' => 'user_add_role_action.' . RoleInterface::ANONYMOUS_ID,
       'type' => 'user',
-      'label' => t('Add the anonymous role to the selected users'),
+      'label' => 'Add the anonymous role to the selected users',
       'configuration' => [
         'rid' => RoleInterface::ANONYMOUS_ID,
       ],
diff --git a/core/modules/system/tests/src/Kernel/Form/ProgrammaticTest.php b/core/modules/system/tests/src/Kernel/Form/ProgrammaticTest.php
index c924b55676f2..4cb67b5425e0 100644
--- a/core/modules/system/tests/src/Kernel/Form/ProgrammaticTest.php
+++ b/core/modules/system/tests/src/Kernel/Form/ProgrammaticTest.php
@@ -76,7 +76,7 @@ protected function doSubmitForm($values, $valid_input) {
     $valid_form = empty($errors);
     $args = [
       '%values' => print_r($values, TRUE),
-      '%errors' => $valid_form ? t('None') : implode(' ', $errors),
+      '%errors' => $valid_form ? 'None' : implode(' ', $errors),
     ];
     $this->assertSame($valid_form, $valid_input, new FormattableMarkup('Input values: %values<br />Validation handler errors: %errors', $args));
 
diff --git a/core/modules/taxonomy/tests/src/Functional/VocabularyPermissionsTest.php b/core/modules/taxonomy/tests/src/Functional/VocabularyPermissionsTest.php
index c96ec87df6ed..1794ecde34cf 100644
--- a/core/modules/taxonomy/tests/src/Functional/VocabularyPermissionsTest.php
+++ b/core/modules/taxonomy/tests/src/Functional/VocabularyPermissionsTest.php
@@ -73,8 +73,9 @@ public function testTaxonomyVocabularyOverviewPermissions() {
     $this->createTerm($vocabulary1);
 
     // Assert expected help texts on first vocabulary.
-    $edit_help_text = t('You can reorganize the terms in @capital_name using their drag-and-drop handles, and group terms under a parent term by sliding them under and to the right of the parent.', ['@capital_name' => Unicode::ucfirst($vocabulary1->label())]);
-    $no_edit_help_text = t('@capital_name contains the following terms.', ['@capital_name' => Unicode::ucfirst($vocabulary1->label())]);
+    $vocabulary1_label = Unicode::ucfirst($vocabulary1->label());
+    $edit_help_text = "You can reorganize the terms in $vocabulary1_label using their drag-and-drop handles, and group terms under a parent term by sliding them under and to the right of the parent.";
+    $no_edit_help_text = "$vocabulary1_label contains the following terms.";
 
     $assert_session = $this->assertSession();
 
diff --git a/core/modules/taxonomy/tests/src/Functional/VocabularyTranslationTest.php b/core/modules/taxonomy/tests/src/Functional/VocabularyTranslationTest.php
index 9bcf06075f5e..4eb7cecce8b9 100644
--- a/core/modules/taxonomy/tests/src/Functional/VocabularyTranslationTest.php
+++ b/core/modules/taxonomy/tests/src/Functional/VocabularyTranslationTest.php
@@ -87,7 +87,7 @@ public function testVocabularyTitleLabelTranslation(): void {
     $edit['langcode'] = 'en';
     $edit['vid'] = $vid;
     $edit['default_language[content_translation]'] = TRUE;
-    $this->submitForm($edit, t('Save'));
+    $this->submitForm($edit, 'Save');
 
     $langcode = $this->additionalLangcodes[0];
     $vid_name = $edit['name'];
@@ -100,7 +100,7 @@ public function testVocabularyTitleLabelTranslation(): void {
     $this->drupalGet("admin/structure/taxonomy/manage/$vid/translate/$langcode/add");
 
     // Translate the name label.
-    $this->submitForm(["translation[config_names][taxonomy.vocabulary.$vid][name]" => $translated_vid_name], t('Save translation'));
+    $this->submitForm(["translation[config_names][taxonomy.vocabulary.$vid][name]" => $translated_vid_name], 'Save translation');
 
     // Assert that the right name label is displayed on the taxonomy term
     // overview page.
diff --git a/core/modules/tracker/tests/src/Functional/TrackerNodeAccessTest.php b/core/modules/tracker/tests/src/Functional/TrackerNodeAccessTest.php
index e3921eb0307f..e06fd4cd14c5 100644
--- a/core/modules/tracker/tests/src/Functional/TrackerNodeAccessTest.php
+++ b/core/modules/tracker/tests/src/Functional/TrackerNodeAccessTest.php
@@ -50,7 +50,7 @@ public function testTrackerNodeAccessIndexing() {
     // queries run for the anonymous user will miss it.
     $author = $this->drupalCreateUser();
     $private_node = $this->drupalCreateNode([
-      'title' => t('Private node test'),
+      'title' => 'Private node test',
       'private' => TRUE,
       'uid' => $author->id(),
     ]);
@@ -85,11 +85,11 @@ public function testTrackerNodeAccess() {
 
     // Create some nodes.
     $private_node = $this->drupalCreateNode([
-      'title' => t('Private node test'),
+      'title' => 'Private node test',
       'private' => TRUE,
     ]);
     $public_node = $this->drupalCreateNode([
-      'title' => t('Public node test'),
+      'title' => 'Public node test',
       'private' => FALSE,
     ]);
 
diff --git a/core/modules/user/tests/src/Functional/UserAdminTest.php b/core/modules/user/tests/src/Functional/UserAdminTest.php
index ae93524c788a..8fedf64f7c07 100644
--- a/core/modules/user/tests/src/Functional/UserAdminTest.php
+++ b/core/modules/user/tests/src/Functional/UserAdminTest.php
@@ -75,7 +75,7 @@ public function testUserAdmin() {
     $this->assertSession()->pageTextContains($admin_user->getAccountName());
 
     // Test for existence of edit link in table.
-    $link = $user_a->toLink(t('Edit'), 'edit-form', ['query' => ['destination' => $user_a->toUrl('collection')->toString()]])->toString();
+    $link = $user_a->toLink('Edit', 'edit-form', ['query' => ['destination' => $user_a->toUrl('collection')->toString()]])->toString();
     $this->assertSession()->responseContains($link);
 
     // Test exposed filter elements.
diff --git a/core/modules/user/tests/src/Functional/UserCreateTest.php b/core/modules/user/tests/src/Functional/UserCreateTest.php
index b87998ff83f0..dee27b7054da 100644
--- a/core/modules/user/tests/src/Functional/UserCreateTest.php
+++ b/core/modules/user/tests/src/Functional/UserCreateTest.php
@@ -61,7 +61,7 @@ public function testUserAdd() {
       'entity_type' => 'user',
       'label' => 'Picture',
       'bundle' => 'user',
-      'description' => t('Your virtual face or picture.'),
+      'description' => 'Your virtual face or picture.',
       'required' => FALSE,
       'settings' => [
         'file_extensions' => 'png gif jpg jpeg',
diff --git a/core/modules/user/tests/src/Functional/UserPasswordResetTest.php b/core/modules/user/tests/src/Functional/UserPasswordResetTest.php
index 515a149f4849..31c0db9ed3d2 100644
--- a/core/modules/user/tests/src/Functional/UserPasswordResetTest.php
+++ b/core/modules/user/tests/src/Functional/UserPasswordResetTest.php
@@ -490,7 +490,7 @@ public function testUserResetPasswordUserFloodControlIsCleared() {
   public function assertValidPasswordReset($name) {
     $this->assertSession()->pageTextContains("If $name is a valid account, an email will be sent with instructions to reset your password.");
     $this->assertMail('to', $this->account->getEmail(), 'Password e-mail sent to user.');
-    $subject = t('Replacement login information for @username at @site', ['@username' => $this->account->getAccountName(), '@site' => \Drupal::config('system.site')->get('name')]);
+    $subject = 'Replacement login information for ' . $this->account->getAccountName() . ' at Drupal';
     $this->assertMail('subject', $subject, 'Password reset e-mail subject is correct.');
   }
 
diff --git a/core/modules/user/tests/src/Functional/UserTokenReplaceTest.php b/core/modules/user/tests/src/Functional/UserTokenReplaceTest.php
index 7a3f5ca34c5a..4ea4a29c89c6 100644
--- a/core/modules/user/tests/src/Functional/UserTokenReplaceTest.php
+++ b/core/modules/user/tests/src/Functional/UserTokenReplaceTest.php
@@ -118,7 +118,7 @@ public function testUserTokenReplacement() {
     // Generate tokens for the anonymous user.
     $anonymous_user = User::load(0);
     $tests = [];
-    $tests['[user:uid]'] = t('not yet assigned');
+    $tests['[user:uid]'] = 'not yet assigned';
     $tests['[user:display-name]'] = $anonymous_user->getDisplayName();
 
     $base_bubbleable_metadata = BubbleableMetadata::createFromObject($anonymous_user);
diff --git a/core/modules/user/tests/src/FunctionalJavascript/RegistrationWithUserFieldsTest.php b/core/modules/user/tests/src/FunctionalJavascript/RegistrationWithUserFieldsTest.php
index 988a9b88be88..da488b759840 100644
--- a/core/modules/user/tests/src/FunctionalJavascript/RegistrationWithUserFieldsTest.php
+++ b/core/modules/user/tests/src/FunctionalJavascript/RegistrationWithUserFieldsTest.php
@@ -94,7 +94,7 @@ public function testRegistrationWithUserFields() {
     $this->page->fillField('edit-mail', $name . '@example.com');
 
     $this->page->pressButton('edit-submit');
-    $this->webAssert->pageTextContains(t('@name field is required.', ['@name' => $field->label()]));
+    $this->webAssert->pageTextContains($field->label() . ' field is required.');
 
     // Invalid input.
     $this->page->fillField('edit-test-user-field-0-value', '-1');
diff --git a/core/modules/user/tests/src/Kernel/Views/HandlerFieldPermissionTest.php b/core/modules/user/tests/src/Kernel/Views/HandlerFieldPermissionTest.php
index 1cfe12f8a076..37ff151b28a4 100644
--- a/core/modules/user/tests/src/Kernel/Views/HandlerFieldPermissionTest.php
+++ b/core/modules/user/tests/src/Kernel/Views/HandlerFieldPermissionTest.php
@@ -34,12 +34,12 @@ public function testFieldPermission() {
     $expected_permissions = [];
     $expected_permissions[$this->users[0]->id()] = [];
     $expected_permissions[$this->users[1]->id()] = [];
-    $expected_permissions[$this->users[2]->id()][] = t('Administer roles and permissions');
+    $expected_permissions[$this->users[2]->id()][] = 'Administer roles and permissions';
     // View user profiles comes first, because we sort by the permission
     // machine name.
-    $expected_permissions[$this->users[3]->id()][] = t('View user information');
-    $expected_permissions[$this->users[3]->id()][] = t('Administer roles and permissions');
-    $expected_permissions[$this->users[3]->id()][] = t('Administer users');
+    $expected_permissions[$this->users[3]->id()][] = 'View user information';
+    $expected_permissions[$this->users[3]->id()][] = 'Administer roles and permissions';
+    $expected_permissions[$this->users[3]->id()][] = 'Administer users';
 
     foreach ($view->result as $index => $row) {
       $uid = $view->field['uid']->getValue($row);
diff --git a/core/modules/views/tests/src/Functional/Handler/HandlerTest.php b/core/modules/views/tests/src/Functional/Handler/HandlerTest.php
index 47f8015ff5f2..2ac51567d82e 100644
--- a/core/modules/views/tests/src/Functional/Handler/HandlerTest.php
+++ b/core/modules/views/tests/src/Functional/Handler/HandlerTest.php
@@ -79,41 +79,41 @@ public function testBreakString() {
 
     // Test ors
     $handler = HandlerBase::breakString('word1 word2+word');
-    $this->assertEqualValue(['word1', 'word2', 'word'], $handler);
+    $this->assertEquals(['word1', 'word2', 'word'], $handler->value);
     $this->assertEquals('or', $handler->operator);
     $handler = HandlerBase::breakString('word1+word2+word');
-    $this->assertEqualValue(['word1', 'word2', 'word'], $handler);
+    $this->assertEquals(['word1', 'word2', 'word'], $handler->value);
     $this->assertEquals('or', $handler->operator);
     $handler = HandlerBase::breakString('word1 word2 word');
-    $this->assertEqualValue(['word1', 'word2', 'word'], $handler);
+    $this->assertEquals(['word1', 'word2', 'word'], $handler->value);
     $this->assertEquals('or', $handler->operator);
     $handler = HandlerBase::breakString('word-1+word-2+word');
-    $this->assertEqualValue(['word-1', 'word-2', 'word'], $handler);
+    $this->assertEquals(['word-1', 'word-2', 'word'], $handler->value);
     $this->assertEquals('or', $handler->operator);
     $handler = HandlerBase::breakString('wõrd1+wõrd2+wõrd');
-    $this->assertEqualValue(['wõrd1', 'wõrd2', 'wõrd'], $handler);
+    $this->assertEquals(['wõrd1', 'wõrd2', 'wõrd'], $handler->value);
     $this->assertEquals('or', $handler->operator);
 
     // Test ands.
     $handler = HandlerBase::breakString('word1,word2,word');
-    $this->assertEqualValue(['word1', 'word2', 'word'], $handler);
+    $this->assertEquals(['word1', 'word2', 'word'], $handler->value);
     $this->assertEquals('and', $handler->operator);
     $handler = HandlerBase::breakString('word1 word2,word');
-    $this->assertEqualValue(['word1 word2', 'word'], $handler);
+    $this->assertEquals(['word1 word2', 'word'], $handler->value);
     $this->assertEquals('and', $handler->operator);
     $handler = HandlerBase::breakString('word1,word2 word');
-    $this->assertEqualValue(['word1', 'word2 word'], $handler);
+    $this->assertEquals(['word1', 'word2 word'], $handler->value);
     $this->assertEquals('and', $handler->operator);
     $handler = HandlerBase::breakString('word-1,word-2,word');
-    $this->assertEqualValue(['word-1', 'word-2', 'word'], $handler);
+    $this->assertEquals(['word-1', 'word-2', 'word'], $handler->value);
     $this->assertEquals('and', $handler->operator);
     $handler = HandlerBase::breakString('wõrd1,wõrd2,wõrd');
-    $this->assertEqualValue(['wõrd1', 'wõrd2', 'wõrd'], $handler);
+    $this->assertEquals(['wõrd1', 'wõrd2', 'wõrd'], $handler->value);
     $this->assertEquals('and', $handler->operator);
 
     // Test a single word
     $handler = HandlerBase::breakString('word');
-    $this->assertEqualValue(['word'], $handler);
+    $this->assertEquals(['word'], $handler->value);
     $this->assertEquals('and', $handler->operator);
 
     $s1 = $this->randomMachineName();
@@ -124,45 +124,45 @@ public function testBreakString() {
 
     // Test "or"s.
     $handlerBase = HandlerBase::breakString("$s1 $n2+$n3");
-    $this->assertEqualValue([$s1, $n2, $n3], $handlerBase);
+    $this->assertEquals([$s1, $n2, $n3], $handlerBase->value);
     $this->assertEquals('or', $handlerBase->operator);
 
     $handlerBase = HandlerBase::breakString("$s1+$n2+$n3");
-    $this->assertEqualValue([$s1, $n2, $n3], $handlerBase);
+    $this->assertEquals([$s1, $n2, $n3], $handlerBase->value);
     $this->assertEquals('or', $handlerBase->operator);
 
     $handlerBase = HandlerBase::breakString("$s1 $n2 $n3");
-    $this->assertEqualValue([$s1, $n2, $n3], $handlerBase);
+    $this->assertEquals([$s1, $n2, $n3], $handlerBase->value);
     $this->assertEquals('or', $handlerBase->operator);
 
     $handlerBase = HandlerBase::breakString("$s1 $n2++$n3");
-    $this->assertEqualValue([$s1, $n2, $n3], $handlerBase);
+    $this->assertEquals([$s1, $n2, $n3], $handlerBase->value);
     $this->assertEquals('or', $handlerBase->operator);
 
     // Test "and"s.
     $handlerBase = HandlerBase::breakString("$s1,$n2,$n3");
-    $this->assertEqualValue([$s1, $n2, $n3], $handlerBase);
+    $this->assertEquals([$s1, $n2, $n3], $handlerBase->value);
     $this->assertEquals('and', $handlerBase->operator);
 
     $handlerBase = HandlerBase::breakString("$s1,,$n2,$n3");
-    $this->assertEqualValue([$s1, $n2, $n3], $handlerBase);
+    $this->assertEquals([$s1, $n2, $n3], $handlerBase->value);
     $this->assertEquals('and', $handlerBase->operator);
 
     // Enforce int values.
     $handlerBase = HandlerBase::breakString("$n1,$n2,$n3", TRUE);
-    $this->assertEqualValue([$n1, $n2, $n3], $handlerBase);
+    $this->assertEquals([$n1, $n2, $n3], $handlerBase->value);
     $this->assertEquals('and', $handlerBase->operator);
 
     $handlerBase = HandlerBase::breakString("$n1+$n2+$n3", TRUE);
-    $this->assertEqualValue([$n1, $n2, $n3], $handlerBase);
+    $this->assertEquals([$n1, $n2, $n3], $handlerBase->value);
     $this->assertEquals('or', $handlerBase->operator);
 
     $handlerBase = HandlerBase::breakString("$s1,$n2,$n3", TRUE);
-    $this->assertEqualValue([(int) $s1, $n2, $n3], $handlerBase);
+    $this->assertEquals([(int) $s1, $n2, $n3], $handlerBase->value);
     $this->assertEquals('and', $handlerBase->operator);
 
     $handlerBase = HandlerBase::breakString("$s1+$n2+$n3", TRUE);
-    $this->assertEqualValue([(int) $s1, $n2, $n3], $handlerBase);
+    $this->assertEquals([(int) $s1, $n2, $n3], $handlerBase->value);
     $this->assertEquals('or', $handlerBase->operator);
 
     // Generate three random decimals which can be used below;
@@ -172,28 +172,28 @@ public function testBreakString() {
 
     // Test "or"s.
     $handlerBase = HandlerBase::breakString("$s1 $d1+$d2");
-    $this->assertEqualValue([$s1, $d1, $d2], $handlerBase);
+    $this->assertEquals([$s1, $d1, $d2], $handlerBase->value);
     $this->assertEquals('or', $handlerBase->operator);
 
     $handlerBase = HandlerBase::breakString("$s1+$d1+$d3");
-    $this->assertEqualValue([$s1, $d1, $d3], $handlerBase);
+    $this->assertEquals([$s1, $d1, $d3], $handlerBase->value);
     $this->assertEquals('or', $handlerBase->operator);
 
     $handlerBase = HandlerBase::breakString("$s1 $d2 $d3");
-    $this->assertEqualValue([$s1, $d2, $d3], $handlerBase);
+    $this->assertEquals([$s1, $d2, $d3], $handlerBase->value);
     $this->assertEquals('or', $handlerBase->operator);
 
     $handlerBase = HandlerBase::breakString("$s1 $d2++$d3");
-    $this->assertEqualValue([$s1, $d2, $d3], $handlerBase);
+    $this->assertEquals([$s1, $d2, $d3], $handlerBase->value);
     $this->assertEquals('or', $handlerBase->operator);
 
     // Test "and"s.
     $handlerBase = HandlerBase::breakString("$s1,$d2,$d3");
-    $this->assertEqualValue([$s1, $d2, $d3], $handlerBase);
+    $this->assertEquals([$s1, $d2, $d3], $handlerBase->value);
     $this->assertEquals('and', $handlerBase->operator);
 
     $handlerBase = HandlerBase::breakString("$s1,,$d2,$d3");
-    $this->assertEqualValue([$s1, $d2, $d3], $handlerBase);
+    $this->assertEquals([$s1, $d2, $d3], $handlerBase->value);
     $this->assertEquals('and', $handlerBase->operator);
   }
 
@@ -223,30 +223,6 @@ public function testHandlerWeights() {
     }
   }
 
-  /**
-   * Check to see if a value is the same as the value on a certain handler.
-   *
-   * @param $expected
-   *   The expected value to check.
-   * @param \Drupal\views\Plugin\views\ViewsHandlerInterface $handler
-   *   The handler that has the $handler->value property to compare with first.
-   * @param string $message
-   *   The message to display along with the assertion.
-   * @param string $group
-   *   The type of assertion - examples are "Browser", "PHP".
-   *
-   * @return bool
-   *   TRUE if the assertion succeeded.
-   */
-  protected function assertEqualValue($expected, $handler, $message = '', $group = 'Other') {
-    if (empty($message)) {
-      $message = t('Comparing @first and @second', ['@first' => implode(',', $expected), '@second' => implode(',', $handler->value)]);
-    }
-
-    $this->assertEquals($expected, $handler->value, $message);
-    return TRUE;
-  }
-
   /**
    * Tests the relationship ui for field/filter/argument/relationship.
    */
diff --git a/core/modules/views/tests/src/Functional/ViewsFormMultipleTest.php b/core/modules/views/tests/src/Functional/ViewsFormMultipleTest.php
index 49ed139ae0f4..868de09ac6c6 100644
--- a/core/modules/views/tests/src/Functional/ViewsFormMultipleTest.php
+++ b/core/modules/views/tests/src/Functional/ViewsFormMultipleTest.php
@@ -36,8 +36,8 @@ protected function setUp($import_test_views = TRUE): void {
   protected function viewsData() {
     $data = parent::viewsData();
     $data['views_test_data']['field_form_button_test']['field'] = [
-      'title' => t('Button test'),
-      'help' => t('Adds a test form button.'),
+      'title' => 'Button test',
+      'help' => 'Adds a test form button.',
       'id' => 'field_form_button_test',
     ];
     return $data;
diff --git a/core/modules/views/tests/src/FunctionalJavascript/ExposedFilterAJAXTest.php b/core/modules/views/tests/src/FunctionalJavascript/ExposedFilterAJAXTest.php
index 8f30fb2db1ad..24873e674f5c 100644
--- a/core/modules/views/tests/src/FunctionalJavascript/ExposedFilterAJAXTest.php
+++ b/core/modules/views/tests/src/FunctionalJavascript/ExposedFilterAJAXTest.php
@@ -179,7 +179,7 @@ public function testExposedFilteringWithButtonElement() {
     $ajax_views_before = $drupal_settings['views']['ajaxViews'];
 
     // Search for "Page One".
-    $this->submitForm(['title' => 'Page One'], t('Filter'));
+    $this->submitForm(['title' => 'Page One'], 'Filter');
     $this->assertSession()->assertWaitOnAjaxRequest();
 
     // Verify that only the "Page One" Node is present.
diff --git a/core/modules/views/tests/src/Kernel/Handler/FieldBooleanTest.php b/core/modules/views/tests/src/Kernel/Handler/FieldBooleanTest.php
index 5640dbb710ec..e3bc2e71dd4b 100644
--- a/core/modules/views/tests/src/Kernel/Handler/FieldBooleanTest.php
+++ b/core/modules/views/tests/src/Kernel/Handler/FieldBooleanTest.php
@@ -70,7 +70,7 @@ public function testFieldBoolean() {
     $this->assertEquals('✔', $view->field['age']->advancedRender($view->result[1]));
 
     // Set a custom output format.
-    $view->field['age']->formats['test'] = [t('Test-True'), t('Test-False')];
+    $view->field['age']->formats['test'] = ['Test-True', 'Test-False'];
     $view->field['age']->options['type'] = 'test';
     $this->assertEquals('Test-False', $view->field['age']->advancedRender($view->result[0]));
     $this->assertEquals('Test-True', $view->field['age']->advancedRender($view->result[1]));
diff --git a/core/modules/views/tests/src/Kernel/Handler/FieldDateTest.php b/core/modules/views/tests/src/Kernel/Handler/FieldDateTest.php
index 0b3ddc4f68dd..5ce5e83c8325 100644
--- a/core/modules/views/tests/src/Kernel/Handler/FieldDateTest.php
+++ b/core/modules/views/tests/src/Kernel/Handler/FieldDateTest.php
@@ -122,10 +122,10 @@ public function testFieldDate() {
     $time_since = $date_formatter->formatTimeDiffSince($time);
     $intervals = [
       'raw time ago' => $time_since,
-      'time ago' => t('%time ago', ['%time' => $time_since]),
+      'time ago' => "$time_since ago",
       'raw time span' => $time_since,
       'inverse time span' => "-$time_since",
-      'time span' => t('%time ago', ['%time' => $time_since]),
+      'time span' => "$time_since ago",
     ];
     $this->assertRenderedDatesEqual($view, $intervals);
 
@@ -134,9 +134,7 @@ public function testFieldDate() {
     $formatted = $date_formatter->formatTimeDiffUntil($time);
     $intervals = [
       'raw time span' => "-$formatted",
-      'time span' => t('%time hence', [
-        '%time' => $formatted,
-      ]),
+      'time span' => "$formatted hence",
     ];
     $this->assertRenderedFutureDatesEqual($view, $intervals);
   }
@@ -154,20 +152,15 @@ public function testFieldDate() {
   protected function assertRenderedDatesEqual($view, $map, $timezone = NULL) {
     foreach ($map as $date_format => $expected_result) {
       $view->field['created']->options['date_format'] = $date_format;
-      $t_args = [
-        '%value' => $expected_result,
-        '%format' => $date_format,
-      ];
       if (isset($timezone)) {
-        $t_args['%timezone'] = $timezone;
-        $message = t('Value %value in %format format for timezone %timezone matches.', $t_args);
+        $message = "$date_format format for timezone $timezone matches.";
         $view->field['created']->options['timezone'] = $timezone;
       }
       else {
-        $message = t('Value %value in %format format matches.', $t_args);
+        $message = "$date_format format matches.";
       }
       $actual_result = $view->field['created']->advancedRender($view->result[0]);
-      $this->assertEquals($expected_result, $actual_result, $message);
+      $this->assertEquals($expected_result, strip_tags($actual_result), $message);
     }
   }
 
@@ -183,13 +176,7 @@ protected function assertRenderedFutureDatesEqual($view, $map) {
     foreach ($map as $format => $result) {
       $view->field['destroyed']->options['date_format'] = $format;
       $view_result = $view->field['destroyed']->advancedRender($view->result[0]);
-      $t_args = [
-        '%value' => $result,
-        '%format' => $format,
-        '%actual' => $view_result,
-      ];
-      $message = t('Value %value in %format matches %actual', $t_args);
-      $this->assertEquals($result, $view_result, $message);
+      $this->assertEquals($result, strip_tags($view_result), "$format format matches.");
     }
   }
 
diff --git a/core/modules/views/tests/src/Kernel/ModuleTest.php b/core/modules/views/tests/src/Kernel/ModuleTest.php
index 55fe86c00225..f59370d62d0f 100644
--- a/core/modules/views/tests/src/Kernel/ModuleTest.php
+++ b/core/modules/views/tests/src/Kernel/ModuleTest.php
@@ -175,7 +175,7 @@ public function testLoadFunctions() {
     $expected_opt_groups = [];
     foreach ($all_views as $view) {
       foreach ($view->get('display') as $display) {
-        $expected_opt_groups[$view->id()][$view->id() . ':' . $display['id']] = (string) t('@view : @display', ['@view' => $view->id(), '@display' => $display['id']]);
+        $expected_opt_groups[$view->id()][$view->id() . ':' . $display['id']] = $view->id() . ' : ' . $display['id'];
       }
     }
     $this->assertEquals($expected_opt_groups, Views::getViewsAsOptions(FALSE, 'all', NULL, TRUE), 'Expected option array for an option group returned.');
@@ -325,8 +325,7 @@ protected function formatViewOptions(array $views = []) {
     $expected_options = [];
     foreach ($views as $view) {
       foreach ($view->get('display') as $display) {
-        $expected_options[$view->id() . ':' . $display['id']] = (string) t('View: @view - Display: @display',
-          ['@view' => $view->id(), '@display' => $display['id']]);
+        $expected_options[$view->id() . ':' . $display['id']] = "View: {$view->id()} - Display: {$display['id']}";
       }
     }
 
diff --git a/core/modules/views/tests/src/Kernel/Plugin/BlockDependenciesTest.php b/core/modules/views/tests/src/Kernel/Plugin/BlockDependenciesTest.php
index a67b7bada52e..f658f64e7e90 100644
--- a/core/modules/views/tests/src/Kernel/Plugin/BlockDependenciesTest.php
+++ b/core/modules/views/tests/src/Kernel/Plugin/BlockDependenciesTest.php
@@ -69,7 +69,7 @@ public function testViewsBlock() {
    *   example:
    *   @code
    *     $this->createBlock('system_powered_by_block', array(
-   *       'label' => t('Hello, world!'),
+   *       'label' => 'Hello, world!',
    *     ));
    *   @endcode
    *   The following defaults are provided:
diff --git a/core/modules/views/tests/src/Kernel/Plugin/ExposedFormRenderTest.php b/core/modules/views/tests/src/Kernel/Plugin/ExposedFormRenderTest.php
index 651cb829ec4a..a581f8922cc3 100644
--- a/core/modules/views/tests/src/Kernel/Plugin/ExposedFormRenderTest.php
+++ b/core/modules/views/tests/src/Kernel/Plugin/ExposedFormRenderTest.php
@@ -49,7 +49,7 @@ public function testExposedFormRender() {
     $expected_action = $view->display_handler->getUrlInfo()->toString();
     $this->assertFieldByXPath('//form/@action', $expected_action, 'The expected value for the action attribute was found.');
     // Make sure the description is shown.
-    $result = $this->xpath('//form//div[contains(@id, :id) and normalize-space(text())=:description]', [':id' => 'edit-type--2--description', ':description' => t('Exposed description')]);
+    $result = $this->xpath('//form//div[contains(@id, "edit-type--2--description") and normalize-space(text())="Exposed description"]');
     $this->assertCount(1, $result, 'Filter description was found.');
   }
 
diff --git a/core/modules/views_ui/tests/src/Functional/HandlerTest.php b/core/modules/views_ui/tests/src/Functional/HandlerTest.php
index 3815a9ec678f..e20089a77c43 100644
--- a/core/modules/views_ui/tests/src/Functional/HandlerTest.php
+++ b/core/modules/views_ui/tests/src/Functional/HandlerTest.php
@@ -73,8 +73,8 @@ protected function schemaDefinition() {
   protected function viewsData() {
     $data = parent::viewsData();
     $data['views_test_data']['uid'] = [
-      'title' => t('UID'),
-      'help' => t('The test data UID'),
+      'title' => 'UID',
+      'help' => 'The test data UID',
       'relationship' => [
         'id' => 'standard',
         'base' => 'users_field_data',
@@ -84,7 +84,7 @@ protected function viewsData() {
 
     // Create a dummy field with no help text.
     $data['views_test_data']['no_help'] = $data['views_test_data']['name'];
-    $data['views_test_data']['no_help']['field']['title'] = t('No help');
+    $data['views_test_data']['no_help']['field']['title'] = 'No help';
     $data['views_test_data']['no_help']['field']['real field'] = 'name';
     unset($data['views_test_data']['no_help']['help']);
 
diff --git a/core/tests/Drupal/FunctionalJavascriptTests/Ajax/MultiFormTest.php b/core/tests/Drupal/FunctionalJavascriptTests/Ajax/MultiFormTest.php
index 0896f8d2aad3..fbd979c4e36b 100644
--- a/core/tests/Drupal/FunctionalJavascriptTests/Ajax/MultiFormTest.php
+++ b/core/tests/Drupal/FunctionalJavascriptTests/Ajax/MultiFormTest.php
@@ -66,7 +66,6 @@ public function testMultiForm() {
     $form_xpath = '//form[starts-with(@id, "node-page-form")]';
     $field_xpath = '//div[contains(@class, "field--name-field-ajax-test")]';
     $button_name = $field_name . '_add_more';
-    $button_value = t('Add another item');
     $button_xpath_suffix = '//input[@name="' . $button_name . '"]';
     $field_items_xpath_suffix = '//input[@type="text"]';
 
@@ -95,7 +94,7 @@ public function testMultiForm() {
     for ($i = 0; $i < 2; $i++) {
       $forms = $page->find('xpath', $form_xpath);
       foreach ($forms as $offset => $form) {
-        $button = $form->findButton($button_value);
+        $button = $form->findButton('Add another item');
         $this->assertNotNull($button, 'Add Another Item button exists');
         $button->press();
 
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/ConfigEntityQueryTest.php b/core/tests/Drupal/KernelTests/Core/Entity/ConfigEntityQueryTest.php
index 9ada56ef4538..667bae835334 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/ConfigEntityQueryTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/ConfigEntityQueryTest.php
@@ -510,8 +510,8 @@ public function testSortRange() {
    */
   public function testTableSort() {
     $header = [
-      ['data' => t('ID'), 'specifier' => 'id'],
-      ['data' => t('Number'), 'specifier' => 'number'],
+      ['data' => 'ID', 'specifier' => 'id'],
+      ['data' => 'Number', 'specifier' => 'number'],
     ];
 
     // Sort key: id
diff --git a/core/tests/Drupal/KernelTests/Core/Messenger/MessengerTest.php b/core/tests/Drupal/KernelTests/Core/Messenger/MessengerTest.php
index b81395c9d77a..7507c903b11f 100644
--- a/core/tests/Drupal/KernelTests/Core/Messenger/MessengerTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Messenger/MessengerTest.php
@@ -37,7 +37,7 @@ public function testRemoveSingleMessage() {
 
     // Set two messages.
     $this->messenger->addStatus('First message (removed).');
-    $this->messenger->addStatus(t('Second message with <em>markup!</em> (not removed).'));
+    $this->messenger->addStatus('Second message with <em>markup!</em> (not removed).');
     $messages = $this->messenger->deleteByType(MessengerInterface::TYPE_STATUS);
     // Remove the first.
     unset($messages[0]);
diff --git a/core/tests/Drupal/KernelTests/Core/Plugin/ContextPluginTest.php b/core/tests/Drupal/KernelTests/Core/Plugin/ContextPluginTest.php
index 5a8dd1fb42a7..e394a2d2da19 100644
--- a/core/tests/Drupal/KernelTests/Core/Plugin/ContextPluginTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Plugin/ContextPluginTest.php
@@ -52,7 +52,7 @@ public function testContext() {
     }
 
     // Test the getContextDefinitions() method.
-    $user_context_definition = EntityContextDefinition::fromEntityTypeId('user')->setLabel(t('User'));
+    $user_context_definition = EntityContextDefinition::fromEntityTypeId('user')->setLabel('User');
     $this->assertEquals($plugin->getContextDefinitions()['user']->getLabel(), $user_context_definition->getLabel());
 
     // Test the getContextDefinition() method for a valid context.
-- 
GitLab


From 266679c66232b33cad6c70d4cbd5a8bf8455039d Mon Sep 17 00:00:00 2001
From: Lauri Eskola <lauri.eskola@acquia.com>
Date: Mon, 15 Nov 2021 13:22:22 +0200
Subject: [PATCH 32/69] Issue #3249263 by alexpott, andypost, Wim Leers:
 CKEditor 5 needs validate the filters in the correct order - CKEditor 5 tests
 fail locally

(cherry picked from commit dc51481d8ac7c8eb95289f13a3e536ae00fd9a5a)
---
 ...mentalCompatibilityConstraintValidator.php | 30 ++++++-------
 .../src/Kernel/SmartDefaultSettingsTest.php   |  4 +-
 .../tests/src/Kernel/ValidatorsTest.php       | 43 +++++++++++++++++--
 3 files changed, 54 insertions(+), 23 deletions(-)

diff --git a/core/modules/ckeditor5/src/Plugin/Validation/Constraint/FundamentalCompatibilityConstraintValidator.php b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/FundamentalCompatibilityConstraintValidator.php
index 43de2c35c9a5..0913e8cccd21 100644
--- a/core/modules/ckeditor5/src/Plugin/Validation/Constraint/FundamentalCompatibilityConstraintValidator.php
+++ b/core/modules/ckeditor5/src/Plugin/Validation/Constraint/FundamentalCompatibilityConstraintValidator.php
@@ -84,13 +84,11 @@ private function checkNoMarkupFilters(FilterFormatInterface $text_format, Fundam
       $text_format,
       FilterInterface::TYPE_MARKUP_LANGUAGE
     );
-    if (!empty($markup_filters)) {
-      foreach ($markup_filters as $markup_filter) {
-        $this->context->buildViolation($constraint->noMarkupFiltersMessage)
-          ->setParameter('%filter_label', $markup_filter->getLabel())
-          ->setParameter('%filter_plugin_id', $markup_filter->getPluginId())
-          ->addViolation();
-      }
+    foreach ($markup_filters as $markup_filter) {
+      $this->context->buildViolation($constraint->noMarkupFiltersMessage)
+        ->setParameter('%filter_label', $markup_filter->getLabel())
+        ->setParameter('%filter_plugin_id', $markup_filter->getPluginId())
+        ->addViolation();
     }
   }
 
@@ -194,25 +192,21 @@ private function checkHtmlRestrictionsMatch(EditorInterface $text_editor, Fundam
    *   conditions to be met. Must return TRUE when it meets the conditions,
    *   FALSE otherwise.
    *
-   * @return \Drupal\filter\Plugin\FilterInterface[]
-   *   The matched filter plugins.
+   * @return iterable|\Drupal\filter\Plugin\FilterInterface[]
+   *   An iterable of matched filter plugins.
    */
-  private static function getFiltersInFormatOfType(FilterFormatInterface $text_format, int $filter_type, callable $extra_requirements = NULL): array {
+  private static function getFiltersInFormatOfType(FilterFormatInterface $text_format, int $filter_type, callable $extra_requirements = NULL): iterable {
     assert(in_array($filter_type, [
       FilterInterface::TYPE_MARKUP_LANGUAGE,
       FilterInterface::TYPE_HTML_RESTRICTOR,
       FilterInterface::TYPE_TRANSFORM_IRREVERSIBLE,
       FilterInterface::TYPE_TRANSFORM_IRREVERSIBLE,
     ]));
-    return array_filter($text_format->filters()->getAll(), function (FilterInterface $filter) use ($filter_type, $extra_requirements) {
-      if (!$filter->status) {
-        return FALSE;
+    foreach ($text_format->filters() as $id => $filter) {
+      if ($filter->status && $filter->getType() === $filter_type && ($extra_requirements === NULL || $extra_requirements($filter))) {
+        yield $id => $filter;
       }
-      if ($filter->getType() === $filter_type && ($extra_requirements === NULL || $extra_requirements($filter))) {
-        return TRUE;
-      }
-      return FALSE;
-    });
+    }
   }
 
   /**
diff --git a/core/modules/ckeditor5/tests/src/Kernel/SmartDefaultSettingsTest.php b/core/modules/ckeditor5/tests/src/Kernel/SmartDefaultSettingsTest.php
index d03e2c98f968..addcc53a3d23 100644
--- a/core/modules/ckeditor5/tests/src/Kernel/SmartDefaultSettingsTest.php
+++ b/core/modules/ckeditor5/tests/src/Kernel/SmartDefaultSettingsTest.php
@@ -517,8 +517,8 @@ public function provider() {
       'expected_superset' => '<br> <p>',
       'expected_fundamental_compatibility_violations' => [
         '' => [
-          0 => 'CKEditor 5 only works with HTML-based text formats. The "<em class="placeholder">Convert URLs into links</em>" (<em class="placeholder">filter_url</em>) filter implies this text format is not HTML anymore.',
-          1 => 'CKEditor 5 only works with HTML-based text formats. The "<em class="placeholder">Convert line breaks into HTML (i.e. &lt;code&gt;&amp;lt;br&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;)</em>" (<em class="placeholder">filter_autop</em>) filter implies this text format is not HTML anymore.',
+          0 => 'CKEditor 5 only works with HTML-based text formats. The "<em class="placeholder">Convert line breaks into HTML (i.e. &lt;code&gt;&amp;lt;br&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;)</em>" (<em class="placeholder">filter_autop</em>) filter implies this text format is not HTML anymore.',
+          1 => 'CKEditor 5 only works with HTML-based text formats. The "<em class="placeholder">Convert URLs into links</em>" (<em class="placeholder">filter_url</em>) filter implies this text format is not HTML anymore.',
         ],
       ],
       'expected_messages' => [
diff --git a/core/modules/ckeditor5/tests/src/Kernel/ValidatorsTest.php b/core/modules/ckeditor5/tests/src/Kernel/ValidatorsTest.php
index 151cfbd9d8c5..2cb9442e70d3 100644
--- a/core/modules/ckeditor5/tests/src/Kernel/ValidatorsTest.php
+++ b/core/modules/ckeditor5/tests/src/Kernel/ValidatorsTest.php
@@ -416,7 +416,7 @@ public function providerPair(): array {
           'id' => 'filter_url',
           'provider' => 'filter',
           'status' => TRUE,
-          'weight' => 0,
+          'weight' => -10,
           'settings' => [
             'filter_url_length' => 72,
           ],
@@ -429,6 +429,43 @@ public function providerPair(): array {
         ],
       ],
     ];
+    $data['INVALID: non-HTML format: filter_autop + filter_url (different order)'] = [
+      'settings' => [
+        'toolbar' => [
+          'items' => [
+            'bold',
+          ],
+        ],
+        'plugins' => [],
+      ],
+      'image_upload' => [
+        'status' => FALSE,
+      ],
+      'filters' => [
+        'filter_autop' => [
+          'id' => 'filter_autop',
+          'provider' => 'filter',
+          'status' => TRUE,
+          'weight' => 0,
+          'settings' => [],
+        ],
+        'filter_url' => [
+          'id' => 'filter_url',
+          'provider' => 'filter',
+          'status' => TRUE,
+          'weight' => 10,
+          'settings' => [
+            'filter_url_length' => 72,
+          ],
+        ],
+      ],
+      'violations' => [
+        '' => [
+          'CKEditor 5 only works with HTML-based text formats. The "<em class="placeholder">Convert line breaks into HTML (i.e. &lt;code&gt;&amp;lt;br&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;)</em>" (<em class="placeholder">filter_autop</em>) filter implies this text format is not HTML anymore.',
+          'CKEditor 5 only works with HTML-based text formats. The "<em class="placeholder">Convert URLs into links</em>" (<em class="placeholder">filter_url</em>) filter implies this text format is not HTML anymore.',
+        ],
+      ],
+    ];
     $data['INVALID: forbidden tags'] = [
       'settings' => [
         'toolbar' => [
@@ -456,7 +493,7 @@ public function providerPair(): array {
         '' => 'CKEditor 5 needs at least the &lt;p&gt; and &lt;br&gt; tags to be allowed to be able to function. They are forbidden by the "<em class="placeholder">Tag and attribute restricting filter</em>" (<em class="placeholder">filter_test_restrict_tags_and_attributes</em>) filter.',
       ],
     ];
-    $restricted_html_format_filters = Yaml::parseFile('profiles/standard/config/install/filter.format.restricted_html.yml')['filters'];
+    $restricted_html_format_filters = Yaml::parseFile(__DIR__ . '/../../../../../profiles/standard/config/install/filter.format.restricted_html.yml')['filters'];
     $data['INVALID: the default restricted_html text format'] = [
       'settings' => [
         'toolbar' => [
@@ -470,8 +507,8 @@ public function providerPair(): array {
       'filters' => $restricted_html_format_filters,
       'violations' => [
         '' => [
-          'CKEditor 5 only works with HTML-based text formats. The "<em class="placeholder">Convert URLs into links</em>" (<em class="placeholder">filter_url</em>) filter implies this text format is not HTML anymore.',
           'CKEditor 5 only works with HTML-based text formats. The "<em class="placeholder">Convert line breaks into HTML (i.e. &lt;code&gt;&amp;lt;br&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;)</em>" (<em class="placeholder">filter_autop</em>) filter implies this text format is not HTML anymore.',
+          'CKEditor 5 only works with HTML-based text formats. The "<em class="placeholder">Convert URLs into links</em>" (<em class="placeholder">filter_url</em>) filter implies this text format is not HTML anymore.',
         ],
       ],
     ];
-- 
GitLab


From 910dedc31b736b83dc900f055611ad232be2802f Mon Sep 17 00:00:00 2001
From: Lee Rowlands <lee.rowlands@previousnext.com.au>
Date: Tue, 16 Nov 2021 06:33:09 +1000
Subject: [PATCH 33/69] Issue #3249233 by longwave: Update 9.3's Symfony 5
 components to 5.4

(cherry picked from commit bcf1456ce2c09f12ce8e4bd3e5d6a271188add2d)
---
 composer.json                                 |  4 +-
 composer.lock                                 | 85 ++++++++++---------
 .../Metapackage/CoreRecommended/composer.json |  6 +-
 .../Metapackage/DevDependencies/composer.json |  4 +-
 .../PinnedDevDependencies/composer.json       |  4 +-
 core/composer.json                            |  2 +-
 .../Template/ComposerProjectTemplatesTest.php |  2 +-
 7 files changed, 55 insertions(+), 52 deletions(-)

diff --git a/composer.json b/composer.json
index c137ad2ab4c9..5d938d7dd81f 100644
--- a/composer.json
+++ b/composer.json
@@ -25,8 +25,8 @@
         "phpunit/phpunit": "^8.5.14 || ^9",
         "phpspec/prophecy": "^1.12",
         "symfony/css-selector": "^4.4",
-        "symfony/phpunit-bridge": "^5.3.0",
-        "symfony/var-dumper": "^5.3.0",
+        "symfony/phpunit-bridge": "^5.4@beta",
+        "symfony/var-dumper": "^5.4@beta",
         "symfony/error-handler": "^4.4",
         "justinrainbow/json-schema": "^5.2",
         "symfony/filesystem": "^4.4",
diff --git a/composer.lock b/composer.lock
index 74c5c365ef38..cb861893d50e 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "8d45389b3d0ae61b9494521b92723562",
+    "content-hash": "ecbf82b278efeb981800307d22242bf8",
     "packages": [
         {
             "name": "asm89/stack-cors",
@@ -535,7 +535,7 @@
             "dist": {
                 "type": "path",
                 "url": "core",
-                "reference": "1349b63771ae6c0b66e9d870c692bf7f51024171"
+                "reference": "60f96b86b97f28bf6a18f9a7e392f56caea5eba3"
             },
             "require": {
                 "asm89/stack-cors": "^1.1",
@@ -570,7 +570,7 @@
                 "symfony/event-dispatcher": "^4.4",
                 "symfony/http-foundation": "^4.4.7",
                 "symfony/http-kernel": "^4.4",
-                "symfony/mime": "^5.3.0",
+                "symfony/mime": "^5.4@beta",
                 "symfony/polyfill-iconv": "^1.0",
                 "symfony/polyfill-php80": "^1.16",
                 "symfony/process": "^4.4",
@@ -1425,16 +1425,16 @@
         },
         {
             "name": "laminas/laminas-stdlib",
-            "version": "3.6.0",
+            "version": "3.6.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/laminas/laminas-stdlib.git",
-                "reference": "c53d8537f108fac3fae652677a19735db730ba46"
+                "reference": "db581851a092246ad99e12d4fddf105184924c71"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/c53d8537f108fac3fae652677a19735db730ba46",
-                "reference": "c53d8537f108fac3fae652677a19735db730ba46",
+                "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/db581851a092246ad99e12d4fddf105184924c71",
+                "reference": "db581851a092246ad99e12d4fddf105184924c71",
                 "shasum": ""
             },
             "require": {
@@ -1480,7 +1480,7 @@
                     "type": "community_bridge"
                 }
             ],
-            "time": "2021-09-02T16:11:32+00:00"
+            "time": "2021-11-10T11:33:52+00:00"
         },
         {
             "name": "masterminds/html5",
@@ -2999,16 +2999,16 @@
         },
         {
             "name": "symfony/mime",
-            "version": "v5.3.8",
+            "version": "v5.4.0-BETA1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/mime.git",
-                "reference": "a756033d0a7e53db389618653ae991eba5a19a11"
+                "reference": "d75d8cd9aa5ad257ed1b958f042c7a2d7cf505d5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/mime/zipball/a756033d0a7e53db389618653ae991eba5a19a11",
-                "reference": "a756033d0a7e53db389618653ae991eba5a19a11",
+                "url": "https://api.github.com/repos/symfony/mime/zipball/d75d8cd9aa5ad257ed1b958f042c7a2d7cf505d5",
+                "reference": "d75d8cd9aa5ad257ed1b958f042c7a2d7cf505d5",
                 "shasum": ""
             },
             "require": {
@@ -3027,10 +3027,10 @@
             "require-dev": {
                 "egulias/email-validator": "^2.1.10|^3.1",
                 "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
-                "symfony/dependency-injection": "^4.4|^5.0",
-                "symfony/property-access": "^4.4|^5.1",
-                "symfony/property-info": "^4.4|^5.1",
-                "symfony/serializer": "^5.2"
+                "symfony/dependency-injection": "^4.4|^5.0|^6.0",
+                "symfony/property-access": "^4.4|^5.1|^6.0",
+                "symfony/property-info": "^4.4|^5.1|^6.0",
+                "symfony/serializer": "^5.2|^6.0"
             },
             "type": "library",
             "autoload": {
@@ -3062,7 +3062,7 @@
                 "mime-type"
             ],
             "support": {
-                "source": "https://github.com/symfony/mime/tree/v5.3.8"
+                "source": "https://github.com/symfony/mime/tree/v5.4.0-BETA1"
             },
             "funding": [
                 {
@@ -3078,7 +3078,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-09-10T12:30:38+00:00"
+            "time": "2021-11-04T16:48:04+00:00"
         },
         {
             "name": "symfony/polyfill-ctype",
@@ -4260,16 +4260,16 @@
         },
         {
             "name": "symfony/var-dumper",
-            "version": "v5.3.10",
+            "version": "v5.4.0-BETA2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/var-dumper.git",
-                "reference": "875432adb5f5570fff21036fd22aee244636b7d1"
+                "reference": "8dcd0b137b3fb45df7df6f06f0ef6a9fad7f587d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/875432adb5f5570fff21036fd22aee244636b7d1",
-                "reference": "875432adb5f5570fff21036fd22aee244636b7d1",
+                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/8dcd0b137b3fb45df7df6f06f0ef6a9fad7f587d",
+                "reference": "8dcd0b137b3fb45df7df6f06f0ef6a9fad7f587d",
                 "shasum": ""
             },
             "require": {
@@ -4283,8 +4283,9 @@
             },
             "require-dev": {
                 "ext-iconv": "*",
-                "symfony/console": "^4.4|^5.0",
-                "symfony/process": "^4.4|^5.0",
+                "symfony/console": "^4.4|^5.0|^6.0",
+                "symfony/process": "^4.4|^5.0|^6.0",
+                "symfony/uid": "^5.1|^6.0",
                 "twig/twig": "^2.13|^3.0.4"
             },
             "suggest": {
@@ -4328,7 +4329,7 @@
                 "dump"
             ],
             "support": {
-                "source": "https://github.com/symfony/var-dumper/tree/v5.3.10"
+                "source": "https://github.com/symfony/var-dumper/tree/v5.4.0-BETA2"
             },
             "funding": [
                 {
@@ -4344,7 +4345,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-10-26T09:30:15+00:00"
+            "time": "2021-11-12T11:42:37+00:00"
         },
         {
             "name": "symfony/yaml",
@@ -6603,16 +6604,16 @@
         },
         {
             "name": "sebastian/exporter",
-            "version": "3.1.3",
+            "version": "3.1.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/exporter.git",
-                "reference": "6b853149eab67d4da22291d36f5b0631c0fd856e"
+                "reference": "0c32ea2e40dbf59de29f3b49bf375176ce7dd8db"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/6b853149eab67d4da22291d36f5b0631c0fd856e",
-                "reference": "6b853149eab67d4da22291d36f5b0631c0fd856e",
+                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/0c32ea2e40dbf59de29f3b49bf375176ce7dd8db",
+                "reference": "0c32ea2e40dbf59de29f3b49bf375176ce7dd8db",
                 "shasum": ""
             },
             "require": {
@@ -6621,7 +6622,7 @@
             },
             "require-dev": {
                 "ext-mbstring": "*",
-                "phpunit/phpunit": "^6.0"
+                "phpunit/phpunit": "^8.5"
             },
             "type": "library",
             "extra": {
@@ -6668,7 +6669,7 @@
             ],
             "support": {
                 "issues": "https://github.com/sebastianbergmann/exporter/issues",
-                "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.3"
+                "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.4"
             },
             "funding": [
                 {
@@ -6676,7 +6677,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2020-11-30T07:47:53+00:00"
+            "time": "2021-11-11T13:51:24+00:00"
         },
         {
             "name": "sebastian/global-state",
@@ -7709,16 +7710,16 @@
         },
         {
             "name": "symfony/phpunit-bridge",
-            "version": "v5.3.10",
+            "version": "v5.4.0-BETA2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/phpunit-bridge.git",
-                "reference": "325aaf6302501ed3673cffbd3ba88db5949de8ae"
+                "reference": "0f925f6512356879d79954a5442dca83658ae279"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/325aaf6302501ed3673cffbd3ba88db5949de8ae",
-                "reference": "325aaf6302501ed3673cffbd3ba88db5949de8ae",
+                "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/0f925f6512356879d79954a5442dca83658ae279",
+                "reference": "0f925f6512356879d79954a5442dca83658ae279",
                 "shasum": ""
             },
             "require": {
@@ -7729,7 +7730,7 @@
                 "phpunit/phpunit": "<7.5|9.1.2"
             },
             "require-dev": {
-                "symfony/error-handler": "^4.4|^5.0"
+                "symfony/error-handler": "^4.4|^5.0|^6.0"
             },
             "suggest": {
                 "symfony/error-handler": "For tracking deprecated interfaces usages at runtime with DebugClassLoader"
@@ -7772,7 +7773,7 @@
             "description": "Provides utilities for PHPUnit, especially user deprecation notices management",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/phpunit-bridge/tree/v5.3.10"
+                "source": "https://github.com/symfony/phpunit-bridge/tree/v5.4.0-BETA2"
             },
             "funding": [
                 {
@@ -7788,7 +7789,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-10-28T19:22:18+00:00"
+            "time": "2021-11-12T11:42:37+00:00"
         },
         {
             "name": "theseer/tokenizer",
@@ -7904,7 +7905,9 @@
     "stability-flags": {
         "drupal/core": 20,
         "drupal/core-project-message": 20,
-        "drupal/core-vendor-hardening": 20
+        "drupal/core-vendor-hardening": 20,
+        "symfony/phpunit-bridge": 10,
+        "symfony/var-dumper": 10
     },
     "prefer-stable": true,
     "prefer-lowest": false,
diff --git a/composer/Metapackage/CoreRecommended/composer.json b/composer/Metapackage/CoreRecommended/composer.json
index 0dc75a816089..743923090dd0 100644
--- a/composer/Metapackage/CoreRecommended/composer.json
+++ b/composer/Metapackage/CoreRecommended/composer.json
@@ -20,7 +20,7 @@
         "laminas/laminas-diactoros": "2.8.0",
         "laminas/laminas-escaper": "2.9.0",
         "laminas/laminas-feed": "2.15.0",
-        "laminas/laminas-stdlib": "3.6.0",
+        "laminas/laminas-stdlib": "3.6.1",
         "masterminds/html5": "2.7.5",
         "pear/archive_tar": "1.4.14",
         "pear/console_getopt": "v1.4.3",
@@ -44,7 +44,7 @@
         "symfony/http-client-contracts": "v2.4.0",
         "symfony/http-foundation": "v4.4.33",
         "symfony/http-kernel": "v4.4.33",
-        "symfony/mime": "v5.3.8",
+        "symfony/mime": "v5.4.0-BETA1",
         "symfony/polyfill-ctype": "v1.23.0",
         "symfony/polyfill-iconv": "v1.23.0",
         "symfony/polyfill-intl-idn": "v1.23.0",
@@ -59,7 +59,7 @@
         "symfony/translation": "v4.4.32",
         "symfony/translation-contracts": "v2.4.0",
         "symfony/validator": "v4.4.33",
-        "symfony/var-dumper": "v5.3.10",
+        "symfony/var-dumper": "v5.4.0-BETA2",
         "symfony/yaml": "v4.4.29",
         "twig/twig": "v2.14.7",
         "typo3/phar-stream-wrapper": "v3.1.7"
diff --git a/composer/Metapackage/DevDependencies/composer.json b/composer/Metapackage/DevDependencies/composer.json
index 32b5862971c2..49f481167a66 100644
--- a/composer/Metapackage/DevDependencies/composer.json
+++ b/composer/Metapackage/DevDependencies/composer.json
@@ -25,7 +25,7 @@
         "symfony/filesystem": "^4.4",
         "symfony/finder": "^4.4",
         "symfony/lock": "^4.4",
-        "symfony/phpunit-bridge": "^5.3.0",
-        "symfony/var-dumper": "^5.3.0"
+        "symfony/phpunit-bridge": "^5.4@beta",
+        "symfony/var-dumper": "^5.4@beta"
     }
 }
diff --git a/composer/Metapackage/PinnedDevDependencies/composer.json b/composer/Metapackage/PinnedDevDependencies/composer.json
index 26eb7a5f52c7..a3e1ab67fcfe 100644
--- a/composer/Metapackage/PinnedDevDependencies/composer.json
+++ b/composer/Metapackage/PinnedDevDependencies/composer.json
@@ -40,7 +40,7 @@
         "sebastian/comparator": "3.0.3",
         "sebastian/diff": "3.0.3",
         "sebastian/environment": "4.2.4",
-        "sebastian/exporter": "3.1.3",
+        "sebastian/exporter": "3.1.4",
         "sebastian/global-state": "3.0.1",
         "sebastian/object-enumerator": "3.0.4",
         "sebastian/object-reflector": "1.1.2",
@@ -58,7 +58,7 @@
         "symfony/filesystem": "v4.4.27",
         "symfony/finder": "v4.4.30",
         "symfony/lock": "v4.4.33",
-        "symfony/phpunit-bridge": "v5.3.10",
+        "symfony/phpunit-bridge": "v5.4.0-BETA2",
         "theseer/tokenizer": "1.2.1",
         "webmozart/assert": "1.10.0"
     }
diff --git a/core/composer.json b/core/composer.json
index 2566db7afb71..d83b166ca13d 100644
--- a/core/composer.json
+++ b/core/composer.json
@@ -23,7 +23,7 @@
         "symfony/event-dispatcher": "^4.4",
         "symfony/http-foundation": "^4.4.7",
         "symfony/http-kernel": "^4.4",
-        "symfony/mime": "^5.3.0",
+        "symfony/mime": "^5.4@beta",
         "symfony/routing": "^4.4",
         "symfony/serializer": "^4.4",
         "symfony/translation": "^4.4",
diff --git a/core/tests/Drupal/BuildTests/Composer/Template/ComposerProjectTemplatesTest.php b/core/tests/Drupal/BuildTests/Composer/Template/ComposerProjectTemplatesTest.php
index 5b341db41319..53a5c2308c3c 100644
--- a/core/tests/Drupal/BuildTests/Composer/Template/ComposerProjectTemplatesTest.php
+++ b/core/tests/Drupal/BuildTests/Composer/Template/ComposerProjectTemplatesTest.php
@@ -32,7 +32,7 @@ class ComposerProjectTemplatesTest extends BuildTestBase {
    *
    * @see https://getcomposer.org/doc/04-schema.md#minimum-stability
    */
-  protected const MINIMUM_STABILITY = 'stable';
+  protected const MINIMUM_STABILITY = 'beta';
 
   /**
    * The order of stability strings from least stable to most stable.
-- 
GitLab


From 4657f6618673cabb4a80d28da7ab38159c74e7f8 Mon Sep 17 00:00:00 2001
From: Lee Rowlands <lee.rowlands@previousnext.com.au>
Date: Tue, 16 Nov 2021 06:41:08 +1000
Subject: [PATCH 34/69] Issue #3249240 by alexpott, andypost, Wim Leers:
 HTMLRestrictionsUtilities:: providedElementsAttributes() causes deprecations
 on PHP 8.1

(cherry picked from commit 65aaec60ce16057d03a605efa38c4d78b895b1a9)
---
 .../src/HTMLRestrictionsUtilities.php         | 53 +++++++++++++++----
 .../src/Plugin/CKEditor5PluginManager.php     |  5 +-
 2 files changed, 43 insertions(+), 15 deletions(-)

diff --git a/core/modules/ckeditor5/src/HTMLRestrictionsUtilities.php b/core/modules/ckeditor5/src/HTMLRestrictionsUtilities.php
index dee7d24c5005..2e683cde4cdc 100644
--- a/core/modules/ckeditor5/src/HTMLRestrictionsUtilities.php
+++ b/core/modules/ckeditor5/src/HTMLRestrictionsUtilities.php
@@ -13,6 +13,8 @@
  * Utilities for interacting with HTML restrictions.
  *
  * @internal
+ *
+ * @see \Drupal\filter\Plugin\FilterInterface::getHTMLRestrictions()
  */
 final class HTMLRestrictionsUtilities {
 
@@ -29,10 +31,13 @@ final class HTMLRestrictionsUtilities {
    * Formats HTML elements for display.
    *
    * @param array $elements
-   *   List of elements to format.
+   *   List of elements to format. The structure is the same as the allowed tags
+   *   array documented in FilterInterface::getHTMLRestrictions().
    *
-   * @return string
+   * @return string[]
    *   A formatted list; a string representation of the given HTML elements.
+   *
+   * @see \Drupal\filter\Plugin\FilterInterface::getHTMLRestrictions()
    */
   public static function toReadableElements(array $elements): array {
     $readable = [];
@@ -77,10 +82,14 @@ public static function allowedElementsStringToPluginElementsArray(string $elemen
    *   A string of HTML tags, potentially with attributes.
    *
    * @return array
-   *   An elements array in the structure expected by filter_html.
+   *   An elements array. The structure is the same as the allowed tags array
+   *   documented in FilterInterface::getHTMLRestrictions().
    *
-   * @see \Drupal\ckeditor5\Plugin\CKEditor5PluginManager::WILDCARD_ELEMENT_METHODS
+   * @see \Drupal\ckeditor5\HTMLRestrictionsUtilities::WILDCARD_ELEMENT_METHODS
    *   Each key in this array represents a valid wildcard tag.
+   *
+   * @see \Drupal\filter\Plugin\Filter\FilterHtml
+   * @see \Drupal\filter\Plugin\FilterInterface::getHTMLRestrictions()
    */
   public static function allowedElementsStringToHtmlFilterArray(string $elements_string): array {
     preg_match('/<(\$[A-Z,a-z]*)/', $elements_string, $wildcard_matches);
@@ -105,7 +114,7 @@ public static function allowedElementsStringToHtmlFilterArray(string $elements_s
       if ($node->hasAttributes()) {
         foreach ($node->attributes as $attribute_name => $attribute) {
           $value = empty($attribute->value) ? TRUE : explode(' ', $attribute->value);
-          self::providedElementsAttributes($elements, $tag, $attribute_name, $value);
+          self::addAllowedAttributeToElements($elements, $tag, $attribute_name, $value);
         }
       }
       else {
@@ -121,10 +130,13 @@ public static function allowedElementsStringToHtmlFilterArray(string $elements_s
    * Cleans unwanted artifacts from "allowed HTML" arrays.
    *
    * @param array $elements
-   *   An array of allowed elements, structured as expected by filter_html.
+   *   An array of allowed elements. The structure is the same as the allowed
+   *   tags array documented in FilterInterface::getHTMLRestrictions().
    *
    * @return array
    *   The array without unwanted artifacts.
+   *
+   * @see \Drupal\filter\Plugin\FilterInterface::getHTMLRestrictions()
    */
   public static function cleanAllowedHtmlArray(array $elements): array {
     // When recursively merging elements arrays, unkeyed boolean values can
@@ -141,21 +153,35 @@ public static function cleanAllowedHtmlArray(array $elements): array {
    * Adds allowed attributes to the elements array.
    *
    * @param array $elements
-   *   The elements array.
+   *   The elements array. The structure is the same as the allowed tags array
+   *   documented in FilterInterface::getHTMLRestrictions().
    * @param string $tag
    *   The tag having its attributes configured.
    * @param string $attribute
    *   The attribute being configured.
-   * @param array|bool $value
+   * @param array|true $value
    *   The attribute config value.
+   *
+   * @see \Drupal\filter\Plugin\FilterInterface::getHTMLRestrictions()
    */
-  public static function providedElementsAttributes(array &$elements, string $tag, string $attribute, $value): void {
-    $attribute_already_allows_all = isset($elements[$tag][$attribute]) && $elements[$tag][$attribute] === TRUE;
+  public static function addAllowedAttributeToElements(array &$elements, string $tag, string $attribute, $value): void {
+    if (isset($elements[$tag][$attribute]) && $elements[$tag][$attribute] === TRUE) {
+      // There's nothing to change as the tag/attribute combination is already
+      // set to allow all.
+      return;
+    }
+
+    if (isset($elements[$tag]) && $elements[$tag] === FALSE) {
+      // If the tag is already allowed with no attributes then the value will be
+      // FALSE. We need to convert the value to an empty array so that attribute
+      // configuration can be added.
+      $elements[$tag] = [];
+    }
 
     if ($value === TRUE) {
       $elements[$tag][$attribute] = TRUE;
     }
-    elseif (!$attribute_already_allows_all) {
+    else {
       foreach ($value as $attribute_value) {
         $elements[$tag][$attribute][$attribute_value] = TRUE;
       }
@@ -165,6 +191,9 @@ public static function providedElementsAttributes(array &$elements, string $tag,
   /**
    * Compares two HTML restrictions.
    *
+   * The structure of the arrays is the same as the allowed tags array
+   * documented in FilterInterface::getHTMLRestrictions().
+   *
    * @param array $elements_array_1
    *   The array to compare from.
    * @param array $elements_array_2
@@ -173,6 +202,8 @@ public static function providedElementsAttributes(array &$elements, string $tag,
    * @return array
    *   Returns an array with all the values in $elements_array_1 that are not
    *   present in $elements_array_1, including values that are FALSE
+   *
+   * @see \Drupal\filter\Plugin\FilterInterface::getHTMLRestrictions()
    */
   public static function diffAllowedElements(array $elements_array_1, array $elements_array_2): array {
     return array_filter(
diff --git a/core/modules/ckeditor5/src/Plugin/CKEditor5PluginManager.php b/core/modules/ckeditor5/src/Plugin/CKEditor5PluginManager.php
index 71ca1e66d050..8a7053f33e80 100644
--- a/core/modules/ckeditor5/src/Plugin/CKEditor5PluginManager.php
+++ b/core/modules/ckeditor5/src/Plugin/CKEditor5PluginManager.php
@@ -326,10 +326,7 @@ public function getProvidedElements(array $plugin_ids = [], EditorInterface $edi
               if (is_array($attribute_value)) {
                 $attribute_value = array_keys($attribute_value);
               }
-              $element_already_allows_all_values = isset($elements[$wildcard_tag][$attribute_name]) && $elements[$wildcard_tag][$attribute_name] === TRUE;
-              if (!$element_already_allows_all_values) {
-                HTMLRestrictionsUtilities::providedElementsAttributes($elements, $wildcard_tag, $attribute_name, $attribute_value);
-              }
+              HTMLRestrictionsUtilities::addAllowedAttributeToElements($elements, $wildcard_tag, $attribute_name, $attribute_value);
             }
           }
         }
-- 
GitLab


From 93f041695535117bc0d90a45347bbf476d962e38 Mon Sep 17 00:00:00 2001
From: Alex Pott <alex.a.pott@googlemail.com>
Date: Tue, 16 Nov 2021 08:24:01 +0000
Subject: [PATCH 35/69] Issue #2707163 by quietone, chishah92, jhodgdon,
 AndrewHD, xjm, dww, jdelvillar01, alexpott: core/USAGE.TXT -- API section
 talks only about hooks and functions

(cherry picked from commit c304842b8eab423c5ffad9d82c0082049514df3a)
---
 core/USAGE.txt | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/core/USAGE.txt b/core/USAGE.txt
index e9efa61aa1f3..9b772874f35d 100644
--- a/core/USAGE.txt
+++ b/core/USAGE.txt
@@ -68,12 +68,9 @@ DEVELOPING FOR DRUPAL
 ---------------------
 
 Drupal contains an extensive API that allows you to add to and modify the
-functionality of your site. The API consists of "hooks", which allow modules to
-react to system events and customize Drupal's behavior, and functions that
-standardize common operations such as database queries and form generation. The
-flexible hook architecture means that you should never need to directly modify
-the files that come with Drupal core to achieve the functionality you want;
-instead, functionality modifications take the form of modules.
+functionality of your site. This means that you should never need to directly
+modify the files that come with Drupal core to achieve the behavior you want;
+instead, modifications take the form of modules.
 
 When you need new functionality for your Drupal site, search for existing
 contributed modules. If you find a module that matches except for a bug or an
@@ -82,6 +79,8 @@ back to the project in the form of a "patch". Create new custom modules only
 when nothing existing comes close to what you need.
 
 More about developing:
+ * Extending and altering Drupal
+   https://api.drupal.org/api/drupal/core%21core.api.php/group/extending
  * Search for existing contributed modules:
    https://www.drupal.org/project/project_module
  * Contribute a patch:
@@ -91,6 +90,6 @@ More about developing:
  * Follow programming best practices:
    https://www.drupal.org/docs/develop/standards
  * Refer to the API documentation:
-   https://api.drupal.org/api/drupal/9
+   https://api.drupal.org
  * Learn from documented Drupal API examples:
    https://www.drupal.org/project/examples
-- 
GitLab


From 71b896597a21db4bd68d7e8a4f2793475cc7847a Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Tue, 16 Nov 2021 12:07:58 +0000
Subject: [PATCH 36/69] Issue #3248801 by daffie, rakesh.gectcr, bbrala,
 longwave: [Symfony 6] The
 Drupal\Tests\jsonapi\Functional\JsonApiFunctionalTest fails with Symfony 5

(cherry picked from commit 5281af2829ef92fd3409d7326a662ca5ca3f3bde)
---
 .../jsonapi/tests/src/Functional/JsonApiFunctionalTest.php    | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/core/modules/jsonapi/tests/src/Functional/JsonApiFunctionalTest.php b/core/modules/jsonapi/tests/src/Functional/JsonApiFunctionalTest.php
index 9f012309e5ac..272fbdf395c4 100644
--- a/core/modules/jsonapi/tests/src/Functional/JsonApiFunctionalTest.php
+++ b/core/modules/jsonapi/tests/src/Functional/JsonApiFunctionalTest.php
@@ -660,7 +660,7 @@ public function testWrite() {
     $created_response = Json::decode($response->getBody()->__toString());
     $this->assertEquals(422, $response->getStatusCode());
     $this->assertNotEmpty($created_response['errors']);
-    $this->assertEquals('Unprocessable Entity', $created_response['errors'][0]['title']);
+    $this->assertStringStartsWith('Unprocessable', $created_response['errors'][0]['title']);
     // 6.2 Relationships are not included in "data".
     $malformed_body = $body;
     unset($malformed_body['data']['relationships']);
@@ -849,7 +849,7 @@ public function testWrite() {
     $this->assertEquals(422, $response->getStatusCode());
     $this->assertCount(2, $updated_response['errors']);
     for ($i = 0; $i < 2; $i++) {
-      $this->assertEquals("Unprocessable Entity", $updated_response['errors'][$i]['title']);
+      $this->assertStringStartsWith('Unprocessable', $updated_response['errors'][$i]['title']);
       $this->assertEquals(422, $updated_response['errors'][$i]['status']);
     }
     $this->assertEquals("title: This value should not be null.", $updated_response['errors'][0]['detail']);
-- 
GitLab


From 5939914c8e2951ba889774efca5de4da3e6e57cd Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Tue, 16 Nov 2021 12:45:10 +0000
Subject: [PATCH 37/69] Issue #3248809 by daffie, larowlan: [Symfony 6] The
 Drupal\Tests\file\Kernel\FileItemValidationTest fails with Symfony 5

(cherry picked from commit f4d355a22cdc3a1ad519929c4f29b4aa0c6c9785)
---
 core/lib/Drupal/Core/Validation/DrupalTranslator.php | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/core/lib/Drupal/Core/Validation/DrupalTranslator.php b/core/lib/Drupal/Core/Validation/DrupalTranslator.php
index 6ac4169877e4..88c78e94c3dd 100644
--- a/core/lib/Drupal/Core/Validation/DrupalTranslator.php
+++ b/core/lib/Drupal/Core/Validation/DrupalTranslator.php
@@ -33,9 +33,8 @@ public function trans($id, array $parameters = [], $domain = NULL, $locale = NUL
     // Symfony violation messages may separate singular and plural versions
     // with "|".
     $ids = explode('|', $id);
-    if (count($ids) > 1) {
-      $number = $parameters['%count%'] ?? 1;
-      return \Drupal::translation()->formatPlural($number, $ids[0], $ids[1], $this->processParameters($parameters), $this->getOptions($domain, $locale));
+    if ((count($ids) > 1) && isset($parameters['%count%'])) {
+      return \Drupal::translation()->formatPlural($parameters['%count%'], $ids[0], $ids[1], $this->processParameters($parameters), $this->getOptions($domain, $locale));
     }
 
     return new TranslatableMarkup($id, $this->processParameters($parameters), $this->getOptions($domain, $locale));
-- 
GitLab


From 72459cd0a269191cd119ca5922509132be45a9e0 Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Tue, 16 Nov 2021 12:47:21 +0000
Subject: [PATCH 38/69] Issue #3248013 by daffie, longwave: [Symfony6] The
 Drupal\Tests\views\Unit\Plugin\argument_default\QueryParameterTest fails for
 Symfony 5.4

(cherry picked from commit 94b94e7ef9a782a923d118342736b815e1847a24)
---
 .../views/src/Plugin/views/argument_default/QueryParameter.php  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/core/modules/views/src/Plugin/views/argument_default/QueryParameter.php b/core/modules/views/src/Plugin/views/argument_default/QueryParameter.php
index 1b45615fd83f..b864b603ea9d 100644
--- a/core/modules/views/src/Plugin/views/argument_default/QueryParameter.php
+++ b/core/modules/views/src/Plugin/views/argument_default/QueryParameter.php
@@ -66,7 +66,7 @@ public function getArgument() {
     $current_request = $this->view->getRequest();
 
     if ($current_request->query->has($this->options['query_param'])) {
-      $param = $current_request->query->get($this->options['query_param']);
+      $param = $current_request->query->all()[$this->options['query_param']];
       if (is_array($param)) {
         $conjunction = ($this->options['multiple'] == 'and') ? ',' : '+';
         $param = implode($conjunction, $param);
-- 
GitLab


From 5cf24e8a92a474c3ebbd9b9831e71cc4b90631ff Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Tue, 16 Nov 2021 13:35:50 +0000
Subject: [PATCH 39/69] Issue #3248816 by bsuttis, danflanagan8, quietone:
 ResponsiveImageFieldUiTest.php should be moved to tests directory

(cherry picked from commit 3795c75c97c5fa6e0e224bed62267bbaa887e759)
---
 .../FunctionalJavascript/ResponsiveImageFieldUiTest.php    | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
 rename core/modules/responsive_image/{ => tests}/src/FunctionalJavascript/ResponsiveImageFieldUiTest.php (97%)

diff --git a/core/modules/responsive_image/src/FunctionalJavascript/ResponsiveImageFieldUiTest.php b/core/modules/responsive_image/tests/src/FunctionalJavascript/ResponsiveImageFieldUiTest.php
similarity index 97%
rename from core/modules/responsive_image/src/FunctionalJavascript/ResponsiveImageFieldUiTest.php
rename to core/modules/responsive_image/tests/src/FunctionalJavascript/ResponsiveImageFieldUiTest.php
index 26571f556e98..7ecfd5fbec38 100644
--- a/core/modules/responsive_image/src/FunctionalJavascript/ResponsiveImageFieldUiTest.php
+++ b/core/modules/responsive_image/tests/src/FunctionalJavascript/ResponsiveImageFieldUiTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Drupal\responsive_image\Tests;
+namespace Drupal\Tests\responsive_image\FunctionalJavascript;
 
 use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
 use Drupal\responsive_image\Entity\ResponsiveImageStyle;
@@ -12,6 +12,11 @@
  */
 class ResponsiveImageFieldUiTest extends WebDriverTestBase {
 
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'stark';
+
   /**
    * Modules to install.
    *
-- 
GitLab


From 580535ba56dae3bf36360192fe4cb04d46c1165d Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Tue, 16 Nov 2021 14:22:30 +0000
Subject: [PATCH 40/69] Issue #3248810 by daffie: [Symfony 6] The
 Drupal\Tests\jsonapi\Kernel\EventSubscriber\ResourceObjectNormalizerCacherTest
 fails with Symfony 5

(cherry picked from commit b9fd8ef3d5f50f6afe51488adb0c81a5b6b9f4a4)
---
 .../ResourceObjectNormalizerCacherTest.php            | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/core/modules/jsonapi/tests/src/Kernel/EventSubscriber/ResourceObjectNormalizerCacherTest.php b/core/modules/jsonapi/tests/src/Kernel/EventSubscriber/ResourceObjectNormalizerCacherTest.php
index e715edc47e19..2d213e970f54 100644
--- a/core/modules/jsonapi/tests/src/Kernel/EventSubscriber/ResourceObjectNormalizerCacherTest.php
+++ b/core/modules/jsonapi/tests/src/Kernel/EventSubscriber/ResourceObjectNormalizerCacherTest.php
@@ -9,7 +9,10 @@
 use Drupal\jsonapi\Normalizer\Value\CacheableNormalization;
 use Drupal\KernelTests\KernelTestBase;
 use Drupal\user\Entity\User;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\Response;
 use Symfony\Component\HttpKernel\Event\TerminateEvent;
+use Symfony\Component\HttpKernel\HttpKernelInterface;
 
 /**
  * @coversDefaultClass \Drupal\jsonapi\EventSubscriber\ResourceObjectNormalizationCacher
@@ -92,8 +95,12 @@ public function testLinkNormalizationCacheability() {
       ResourceObjectNormalizationCacher::RESOURCE_CACHE_SUBSET_FIELDS => [],
     ];
     $this->cacher->saveOnTerminate($resource_object, $normalization_parts);
-    $event = $this->prophesize(TerminateEvent::class);
-    $this->cacher->onTerminate($event->reveal());
+
+    $http_kernel = $this->prophesize(HttpKernelInterface::class);
+    $request = $this->prophesize(Request::class);
+    $response = $this->prophesize(Response::class);
+    $event = new TerminateEvent($http_kernel->reveal(), $request->reveal(), $response->reveal());
+    $this->cacher->onTerminate($event);
     $this->assertNotFalse((bool) $this->cacher->get($resource_object));
     Cache::invalidateTags([$cache_tag_to_invalidate]);
     $this->assertFalse((bool) $this->cacher->get($resource_object));
-- 
GitLab


From 92e176d42b14e9a2d086c8563322f928b0a34505 Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Tue, 16 Nov 2021 16:16:57 +0000
Subject: [PATCH 41/69] Issue #3056409 by rkostov, larowlan, maximpodorov:
 BlockRepository::contextHandler is created dynamically

(cherry picked from commit 0e61d2181dcb11ec8dcd36e863c9fb2d487478ee)
---
 core/modules/block/src/BlockRepository.php | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/core/modules/block/src/BlockRepository.php b/core/modules/block/src/BlockRepository.php
index 2f27df3d196f..146155717a7b 100644
--- a/core/modules/block/src/BlockRepository.php
+++ b/core/modules/block/src/BlockRepository.php
@@ -26,6 +26,13 @@ class BlockRepository implements BlockRepositoryInterface {
    */
   protected $themeManager;
 
+  /**
+   * The context handler.
+   *
+   * @var \Drupal\Core\Plugin\Context\ContextHandlerInterface
+   */
+  protected $contextHandler;
+
   /**
    * Constructs a new BlockRepository.
    *
-- 
GitLab


From 9de422eaf3080ba78acd93050ececb36f86109fe Mon Sep 17 00:00:00 2001
From: xjm <xjm@65776.no-reply.drupal.org>
Date: Wed, 17 Nov 2021 15:05:52 -0600
Subject: [PATCH 42/69] SA-CORE-2021-011 by jbogdanski, Wim Leers, xjm,
 greggles, lauriii, tedbow

(cherry picked from commit efe095eeba08904148c8b9a184e5b891a870f570)
---
 core/assets/vendor/ckeditor/CHANGES.md        |   72 +
 core/assets/vendor/ckeditor/SECURITY.md       |   10 +
 core/assets/vendor/ckeditor/ckeditor.js       | 1828 +++++++++--------
 core/assets/vendor/ckeditor/lang/af.js        |    2 +-
 core/assets/vendor/ckeditor/lang/ar.js        |    2 +-
 core/assets/vendor/ckeditor/lang/az.js        |    2 +-
 core/assets/vendor/ckeditor/lang/bg.js        |    2 +-
 core/assets/vendor/ckeditor/lang/bn.js        |    2 +-
 core/assets/vendor/ckeditor/lang/bs.js        |    2 +-
 core/assets/vendor/ckeditor/lang/ca.js        |    2 +-
 core/assets/vendor/ckeditor/lang/cs.js        |    2 +-
 core/assets/vendor/ckeditor/lang/cy.js        |    2 +-
 core/assets/vendor/ckeditor/lang/da.js        |    2 +-
 core/assets/vendor/ckeditor/lang/de-ch.js     |    2 +-
 core/assets/vendor/ckeditor/lang/de.js        |    2 +-
 core/assets/vendor/ckeditor/lang/el.js        |    2 +-
 core/assets/vendor/ckeditor/lang/en-au.js     |    2 +-
 core/assets/vendor/ckeditor/lang/en-ca.js     |    2 +-
 core/assets/vendor/ckeditor/lang/en-gb.js     |    2 +-
 core/assets/vendor/ckeditor/lang/en.js        |    2 +-
 core/assets/vendor/ckeditor/lang/eo.js        |    2 +-
 core/assets/vendor/ckeditor/lang/es-mx.js     |    2 +-
 core/assets/vendor/ckeditor/lang/es.js        |    2 +-
 core/assets/vendor/ckeditor/lang/et.js        |    2 +-
 core/assets/vendor/ckeditor/lang/eu.js        |    2 +-
 core/assets/vendor/ckeditor/lang/fa.js        |    2 +-
 core/assets/vendor/ckeditor/lang/fi.js        |    2 +-
 core/assets/vendor/ckeditor/lang/fo.js        |    2 +-
 core/assets/vendor/ckeditor/lang/fr-ca.js     |    2 +-
 core/assets/vendor/ckeditor/lang/fr.js        |    2 +-
 core/assets/vendor/ckeditor/lang/gl.js        |    2 +-
 core/assets/vendor/ckeditor/lang/gu.js        |    2 +-
 core/assets/vendor/ckeditor/lang/he.js        |    2 +-
 core/assets/vendor/ckeditor/lang/hi.js        |    2 +-
 core/assets/vendor/ckeditor/lang/hr.js        |    2 +-
 core/assets/vendor/ckeditor/lang/hu.js        |    2 +-
 core/assets/vendor/ckeditor/lang/id.js        |    2 +-
 core/assets/vendor/ckeditor/lang/is.js        |    2 +-
 core/assets/vendor/ckeditor/lang/it.js        |    2 +-
 core/assets/vendor/ckeditor/lang/ja.js        |    2 +-
 core/assets/vendor/ckeditor/lang/ka.js        |    2 +-
 core/assets/vendor/ckeditor/lang/km.js        |    2 +-
 core/assets/vendor/ckeditor/lang/ko.js        |    2 +-
 core/assets/vendor/ckeditor/lang/ku.js        |    2 +-
 core/assets/vendor/ckeditor/lang/lt.js        |    2 +-
 core/assets/vendor/ckeditor/lang/lv.js        |    2 +-
 core/assets/vendor/ckeditor/lang/mk.js        |    2 +-
 core/assets/vendor/ckeditor/lang/mn.js        |    2 +-
 core/assets/vendor/ckeditor/lang/ms.js        |    2 +-
 core/assets/vendor/ckeditor/lang/nb.js        |    2 +-
 core/assets/vendor/ckeditor/lang/nl.js        |    2 +-
 core/assets/vendor/ckeditor/lang/no.js        |    2 +-
 core/assets/vendor/ckeditor/lang/oc.js        |    2 +-
 core/assets/vendor/ckeditor/lang/pl.js        |    2 +-
 core/assets/vendor/ckeditor/lang/pt-br.js     |    2 +-
 core/assets/vendor/ckeditor/lang/pt.js        |    2 +-
 core/assets/vendor/ckeditor/lang/ro.js        |    2 +-
 core/assets/vendor/ckeditor/lang/ru.js        |    2 +-
 core/assets/vendor/ckeditor/lang/si.js        |    2 +-
 core/assets/vendor/ckeditor/lang/sk.js        |    2 +-
 core/assets/vendor/ckeditor/lang/sl.js        |    2 +-
 core/assets/vendor/ckeditor/lang/sq.js        |    2 +-
 core/assets/vendor/ckeditor/lang/sr-latn.js   |    2 +-
 core/assets/vendor/ckeditor/lang/sr.js        |    2 +-
 core/assets/vendor/ckeditor/lang/sv.js        |    2 +-
 core/assets/vendor/ckeditor/lang/th.js        |    2 +-
 core/assets/vendor/ckeditor/lang/tr.js        |    2 +-
 core/assets/vendor/ckeditor/lang/tt.js        |    2 +-
 core/assets/vendor/ckeditor/lang/ug.js        |    2 +-
 core/assets/vendor/ckeditor/lang/uk.js        |    2 +-
 core/assets/vendor/ckeditor/lang/vi.js        |    2 +-
 core/assets/vendor/ckeditor/lang/zh-cn.js     |    2 +-
 core/assets/vendor/ckeditor/lang/zh.js        |    2 +-
 .../plugins/a11yhelp/dialogs/lang/ar.js       |   14 +-
 .../plugins/a11yhelp/dialogs/lang/bg.js       |    4 +-
 .../plugins/a11yhelp/dialogs/lang/en-gb.js    |   14 +-
 .../plugins/a11yhelp/dialogs/lang/en.js       |   14 +-
 .../plugins/a11yhelp/dialogs/lang/fo.js       |   14 +-
 .../plugins/a11yhelp/dialogs/lang/gu.js       |   14 +-
 .../plugins/a11yhelp/dialogs/lang/hi.js       |   14 +-
 .../plugins/a11yhelp/dialogs/lang/km.js       |   14 +-
 .../plugins/a11yhelp/dialogs/lang/lt.js       |   14 +-
 .../plugins/a11yhelp/dialogs/lang/mk.js       |    4 +-
 .../plugins/a11yhelp/dialogs/lang/mn.js       |   14 +-
 .../plugins/a11yhelp/dialogs/lang/th.js       |   14 +-
 .../plugins/a11yhelp/dialogs/lang/tt.js       |   14 +-
 .../plugins/specialchar/dialogs/lang/id.js    |   18 +-
 .../ckeditor/skins/moono-lisa/dialog.css      |    2 +-
 .../ckeditor/skins/moono-lisa/dialog_ie.css   |    2 +-
 .../ckeditor/skins/moono-lisa/dialog_ie8.css  |    2 +-
 .../skins/moono-lisa/dialog_iequirks.css      |    2 +-
 .../ckeditor/skins/moono-lisa/editor.css      |    2 +-
 .../skins/moono-lisa/editor_gecko.css         |    2 +-
 .../ckeditor/skins/moono-lisa/editor_ie.css   |    2 +-
 .../ckeditor/skins/moono-lisa/editor_ie8.css  |    2 +-
 .../skins/moono-lisa/editor_iequirks.css      |    2 +-
 core/core.libraries.yml                       |    4 +-
 97 files changed, 1174 insertions(+), 1078 deletions(-)
 create mode 100644 core/assets/vendor/ckeditor/SECURITY.md

diff --git a/core/assets/vendor/ckeditor/CHANGES.md b/core/assets/vendor/ckeditor/CHANGES.md
index 9a9f7b490290..74ebc5b3d3f7 100644
--- a/core/assets/vendor/ckeditor/CHANGES.md
+++ b/core/assets/vendor/ckeditor/CHANGES.md
@@ -1,6 +1,78 @@
 CKEditor 4 Changelog
 ====================
 
+## CKEditor 4.17.1
+
+Fixed issues:
+
+* [#4979](https://github.com/ckeditor/ckeditor4/issues/3757): Added cache key in [#4761](https://github.com/ckeditor/ckeditor4/issues/4761) started to breaking relative links for external CSS resources. The fix had been reverted and will be corrected in the upcoming release.
+
+## CKEditor 4.17
+
+**Security Updates:**
+
+* Fixed XSS vulnerability in the core module reported by [William Bowling](https://github.com/wbowling).
+
+	Issue summary: The vulnerability allowed to inject malformed comments HTML bypassing content sanitization, which could result in executing JavaScript code. See [security advisory](https://github.com/ckeditor/ckeditor4/security/advisories/GHSA-7h26-63m7-qhf2) for more details.
+
+* Fixed XSS vulnerability in the core module reported by [Maurice Dauer](https://twitter.com/laytonctf).
+
+	Issue summary: The vulnerability allowed to inject malformed HTML bypassing content sanitization, which could result in executing JavaScript code. See [security advisory](https://github.com/ckeditor/ckeditor4/security/advisories/GHSA-pvmx-g8h5-cprj) for more details.
+
+You can read more details in the relevant security advisory and [contact us](security@cksource.com) if you have more questions.
+
+**An upgrade is highly recommended!**
+
+**Highlights:**
+
+Adobe [ended support of Flash Player](https://www.adobe.com/products/flashplayer/end-of-life.html) on December 31, 2020 and blocked Flash content from running in Flash Player beginning January 12, 2021.
+We have decided to deprecate and remove the [Flash](https://ckeditor.com/cke4/addon/flash) plugin from CKEditor 4 to help protect users' systems and discourage using insecure software.
+
+New Features:
+
+* [#3433](https://github.com/ckeditor/ckeditor4/issues/3433): Marked required fields in dialogs with asterisk (`*`) symbol.
+* [#4374](https://github.com/ckeditor/ckeditor4/issues/4374): Integrated the [Maximize](https://ckeditor.com/cke4/addon/maximize) plugin with browser's History API.
+* [#4461](https://github.com/ckeditor/ckeditor4/issues/4461): Introduced the possibility to delay editor initialization while it is in a detached DOM element.
+* [#4462](https://github.com/ckeditor/ckeditor4/issues/4462): Introduced support for reattaching editor container element to DOM.
+* [#4612](https://github.com/ckeditor/ckeditor4/issues/4612): Allow pasting images as Base64 from [clipboard](https://ckeditor.com/cke4/addon/clipboard) in all browsers except IE.
+* [#4681](https://github.com/ckeditor/ckeditor4/issues/4681): Allow drag and drop images as Base64.
+* [#4750](https://github.com/ckeditor/ckeditor4/issues/4750): Added notification for pasting and dropping unsupported file types into the editor.
+* [#4807](https://github.com/ckeditor/ckeditor4/issues/4807): [Chrome] Improved the performance of pasting large images. Thanks to [FlowIT-JIT](https://github.com/FlowIT-JIT)!
+* [#4850](https://github.com/ckeditor/ckeditor4/issues/4850): Added support for loading [content templates](https://ckeditor.com/cke4/addon/templates) from HTML files. Thanks to [Fynn96](https://github.com/Fynn96)!
+* [#4874](https://github.com/ckeditor/ckeditor4/issues/4874): Added the [`config.clipboard_handleImages`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-clipboard_handleImages) configuration option for enabling and disabling built-in support for pasting and dropping images in the [Clipboard](https://ckeditor.com/cke4/addon/clipboard) plugin. Thanks to [FlowIT-JIT](https://github.com/FlowIT-JIT)!
+* [#4026](https://github.com/ckeditor/ckeditor4/issues/4026): [Preview](https://ckeditor.com/cke4/addon/preview) plugin now uses the [`editor#title`](http://localhost/ckeditor4-docs/build/docs/ckeditor4/latest/api/CKEDITOR_editor.html#property-title) property for the title of the preview window. Thanks to [Ely](https://github.com/Elyasin)!
+* [#4467](https://github.com/ckeditor/ckeditor4/issues/4467): Added support for inserting content next to a block [widgets](https://ckeditor.com/cke4/addon/widget) using keyboard navigation. Thanks to [bunglegrind](https://github.com/bunglegrind)!
+
+Fixed Issues:
+
+* [#3757](https://github.com/ckeditor/ckeditor4/issues/3757): [Firefox] Fixed: images pasted from [clipboard](https://ckeditor.com/cke4/addon/clipboard) are not inserted as Base64-encoded images.
+* [#3876](https://github.com/ckeditor/ckeditor4/issues/3876): Fixed: The [Print](https://ckeditor.com/cke4/addon/print) plugin incorrectly prints links and images.
+* [#4444](https://github.com/ckeditor/ckeditor4/issues/4444): [Firefox] Fixed: Print preview is incorrectly loaded from CDN.
+* [#4596](https://github.com/ckeditor/ckeditor4/issues/4596): Fixed: Incorrect handling of HSL/HSLA values in [`CKEDITOR.tools.color`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_color.html).
+* [#4597](https://github.com/ckeditor/ckeditor4/issues/4597): Fixed: Incorrect color conversion for HSL/HSLA values in [`CKEDITOR.tools.color`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_color.html).
+* [#4604](https://github.com/ckeditor/ckeditor4/issues/4604): Fixed: [`CKEDITOR.plugins.clipboard.dataTransfer#getTypes()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_plugins_clipboard_dataTransfer.html#method-getTypes) returns no types.
+* [#4761](https://github.com/ckeditor/ckeditor4/issues/4761): Fixed: Not all resources loaded by the editor respect the cache key.
+* [#4783](https://github.com/ckeditor/ckeditor4/issues/4783): Fixed: The [Accessibility Help](https://ckeditor.com/cke4/addon/a11yhelp) dialog does not contain info about focus being moved back to the editing area upon activating a toolbar button.
+* [#4790](https://github.com/ckeditor/ckeditor4/issues/4790): Fixed: Printing page is invoked before the printed page is fully loaded.
+* [#4874](https://github.com/ckeditor/ckeditor4/issues/4874): Fixed: Built-in support for pasting and dropping images in the [Clipboard](https://ckeditor.com/cke4/addon/clipboard) plugin restricts third party plugins from handling image pasting. Thanks to [FlowIT-JIT](https://github.com/FlowIT-JIT)!
+* [#4888](https://github.com/ckeditor/ckeditor4/issues/4888): Fixed: The [`CKEDITOR.dialog#setState()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dialog.html#method-setState) method throws error when there is no "OK" button in the dialog.
+* [#4858](https://github.com/ckeditor/ckeditor4/issues/4858): Fixed: The [Autolink](https://ckeditor.com/cke4/addon/autolink) plugin incorrectly escapes the `&` characters when pasting links into the editor.
+* [#4892](https://github.com/ckeditor/ckeditor4/issues/4892): Fixed: Focus of buttons in dialogs is not visible enough in High Contrast mode.
+* [#3858](https://github.com/ckeditor/ckeditor4/issues/3858): Fixed: Pasting content in `ENTER_BR` [enter mode](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-enterMode) crashes the editor.
+* [#4891](https://github.com/ckeditor/ckeditor4/issues/4891): Fixed: The [Autogrow](https://ckeditor.com/cke4/addon/autogrow) plugin applies fixed width to the editor.
+
+API Changes:
+
+* [#4462](https://github.com/ckeditor/ckeditor4/issues/4462): [`CKEDITOR.editor#getSelection()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#method-getSelection) now returns `null` if the editor is in recreating state.
+* [#4583](https://github.com/ckeditor/ckeditor4/issues/4583): Added support for new, comma-less color syntax to [`CKEDITOR.tools.color`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_color.html).
+* [#4604](https://github.com/ckeditor/ckeditor4/issues/4604): Added the [`CKEDITOR.plugins.clipboard.dataTransfer#isFileTransfer()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_plugins_clipboard_dataTransfer.html#method-isFileTransfer) method.
+* [#4790](https://github.com/ckeditor/ckeditor4/issues/4790): Added `callback` parameter to [`CKEDITOR.plugins.preview#createPreview()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_plugins_preview.html#method-createPreview) method.
+
+Other Changes:
+
+* [#4866](https://github.com/ckeditor/ckeditor4/issues/#4866): The [Flash](https://ckeditor.com/cke4/addon/flash) plugin is now deprecated and has been removed from CKEditor 4.
+* [#4901](https://github.com/ckeditor/ckeditor4/issues/4901): Redesigned buttons placement in the [Content templates](https://ckeditor.com/cke4/addon/templates) dialog to make it more UX friendly. Thanks to [Fynn96](https://github.com/Fynn96)!
+
 ## CKEditor 4.16.2
 
 **Security Updates:**
diff --git a/core/assets/vendor/ckeditor/SECURITY.md b/core/assets/vendor/ckeditor/SECURITY.md
new file mode 100644
index 000000000000..6e04d5a186ca
--- /dev/null
+++ b/core/assets/vendor/ckeditor/SECURITY.md
@@ -0,0 +1,10 @@
+# Reporting a security issues
+
+If you believe you have found a security issue in the CKEditor 4 software, please contact us immediately.
+
+When reporting a potential security problem, please bear this in mind:
+
+*   Make sure to provide as many details as possible about the vulnerability.
+*   Please do not disclose publicly any security issues until we fix them and publish security releases.
+
+Contact the security team at security@cksource.com. As soon as we receive the security report, we will work promptly to confirm the issue and then to provide a security fix.
diff --git a/core/assets/vendor/ckeditor/ckeditor.js b/core/assets/vendor/ckeditor/ckeditor.js
index 16aec92b1465..7c4d6fd9695f 100644
--- a/core/assets/vendor/ckeditor/ckeditor.js
+++ b/core/assets/vendor/ckeditor/ckeditor.js
@@ -2,14 +2,14 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-(function(){window.CKEDITOR&&window.CKEDITOR.dom||(window.CKEDITOR||(window.CKEDITOR=function(){var b=/(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i,h={timestamp:"L7CE",version:"4.16.2",revision:"4e64f6721",rnd:Math.floor(900*Math.random())+100,_:{pending:[],basePathSrcPattern:b},status:"unloaded",basePath:function(){var a=window.CKEDITOR_BASEPATH||"";if(!a)for(var e=document.getElementsByTagName("script"),f=0;f<e.length;f++){var l=e[f].src.match(b);if(l){a=l[1];break}}-1==a.indexOf(":/")&&"//"!=a.slice(0,
+(function(){window.CKEDITOR&&window.CKEDITOR.dom||(window.CKEDITOR||(window.CKEDITOR=function(){var b=/(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i,h={timestamp:"LAHG",version:"4.17.1",revision:"f6dd30807a",rnd:Math.floor(900*Math.random())+100,_:{pending:[],basePathSrcPattern:b},status:"unloaded",basePath:function(){var a=window.CKEDITOR_BASEPATH||"";if(!a)for(var e=document.getElementsByTagName("script"),f=0;f<e.length;f++){var m=e[f].src.match(b);if(m){a=m[1];break}}-1==a.indexOf(":/")&&"//"!=a.slice(0,
 2)&&(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("?")?"\x26":"?")+"t\x3d"+this.timestamp);return a},
 domReady:function(){function a(){try{document.addEventListener?(document.removeEventListener("DOMContentLoaded",a,!1),window.removeEventListener("load",a,!1),b()):document.attachEvent&&"complete"===document.readyState&&(document.detachEvent("onreadystatechange",a),window.detachEvent("onload",a),b())}catch(e){}}function b(){for(var a;a=e.shift();)a()}var e=[];return function(b){function c(){try{document.documentElement.doScroll("left")}catch(g){setTimeout(c,1);return}a()}e.push(b);"complete"===document.readyState&&
 setTimeout(a,1);if(1==e.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(d){}document.documentElement.doScroll&&b&&c()}}}()},f=window.CKEDITOR_GETURL;if(f){var e=h.getUrl;h.getUrl=function(a){return f.call(h,a)||e.call(h,a)}}return h}()),function(){var b={};CKEDITOR.event||(CKEDITOR.event=
 function(){},CKEDITOR.event.implementOn=function(b){var f=CKEDITOR.event.prototype,e;for(e in f)null==b[e]&&(b[e]=f[e])},CKEDITOR.event.prototype=function(){function h(a){var b=f(this);return b[a]||(b[a]=new e(a))}var f=function(a){a=a.getPrivate&&a.getPrivate()||a._||(a._={});return a.events||(a.events={})},e=function(a){this.name=a;this.listeners=[]};e.prototype={getListenerIndex:function(a){for(var b=0,e=this.listeners;b<e.length;b++)if(e[b].fn==a)return b;return-1}};return{define:function(a,b){var e=
-h.call(this,a);CKEDITOR.tools.extend(e,b,!0)},on:function(a,e,f,l,c){function d(n,c,d,y){n={name:a,sender:this,editor:n,data:c,listenerData:l,stop:d,cancel:y,removeListener:g};return!1===e.call(f,n)?b:n.data}function g(){n.removeListener(a,e)}var n=this,y=h.call(this,a);if(0>y.getListenerIndex(e)){y=y.listeners;f||(f=this);isNaN(c)&&(c=10);d.fn=e;d.priority=c;for(var w=y.length-1;0<=w;w--)if(y[w].priority<=c)return y.splice(w+1,0,d),{removeListener:g};y.unshift(d)}return{removeListener:g}},once:function(){var a=
-Array.prototype.slice.call(arguments),b=a[1];a[1]=function(a){a.removeListener();return b.apply(this,arguments)};return this.on.apply(this,a)},capture:function(){CKEDITOR.event.useCapture=1;var a=this.on.apply(this,arguments);CKEDITOR.event.useCapture=0;return a},fire:function(){var a=0,e=function(){a=1},h=0,l=function(){h=1};return function(c,d,g){var n=f(this)[c];c=a;var y=h;a=h=0;if(n){var w=n.listeners;if(w.length)for(var w=w.slice(0),p,t=0;t<w.length;t++){if(n.errorProof)try{p=w[t].call(this,
-g,d,e,l)}catch(r){}else p=w[t].call(this,g,d,e,l);p===b?h=1:"undefined"!=typeof p&&(d=p);if(a||h)break}}d=h?!1:"undefined"==typeof d?!0:d;a=c;h=y;return d}}(),fireOnce:function(a,b,e){b=this.fire(a,b,e);delete f(this)[a];return b},removeListener:function(a,b){var e=f(this)[a];if(e){var l=e.getListenerIndex(b);0<=l&&e.listeners.splice(l,1)}},removeAllListeners:function(){var a=f(this),b;for(b in a)delete a[b]},hasListeners:function(a){return(a=f(this)[a])&&0<a.listeners.length}}}())}(),CKEDITOR.editor||
+h.call(this,a);CKEDITOR.tools.extend(e,b,!0)},on:function(a,e,f,m,c){function d(n,c,d,y){n={name:a,sender:this,editor:n,data:c,listenerData:m,stop:d,cancel:y,removeListener:g};return!1===e.call(f,n)?b:n.data}function g(){n.removeListener(a,e)}var n=this,y=h.call(this,a);if(0>y.getListenerIndex(e)){y=y.listeners;f||(f=this);isNaN(c)&&(c=10);d.fn=e;d.priority=c;for(var v=y.length-1;0<=v;v--)if(y[v].priority<=c)return y.splice(v+1,0,d),{removeListener:g};y.unshift(d)}return{removeListener:g}},once:function(){var a=
+Array.prototype.slice.call(arguments),b=a[1];a[1]=function(a){a.removeListener();return b.apply(this,arguments)};return this.on.apply(this,a)},capture:function(){CKEDITOR.event.useCapture=1;var a=this.on.apply(this,arguments);CKEDITOR.event.useCapture=0;return a},fire:function(){var a=0,e=function(){a=1},h=0,m=function(){h=1};return function(c,d,g){var n=f(this)[c];c=a;var y=h;a=h=0;if(n){var v=n.listeners;if(v.length)for(var v=v.slice(0),p,q=0;q<v.length;q++){if(n.errorProof)try{p=v[q].call(this,
+g,d,e,m)}catch(r){}else p=v[q].call(this,g,d,e,m);p===b?h=1:"undefined"!=typeof p&&(d=p);if(a||h)break}}d=h?!1:"undefined"==typeof d?!0:d;a=c;h=y;return d}}(),fireOnce:function(a,b,e){b=this.fire(a,b,e);delete f(this)[a];return b},removeListener:function(a,b){var e=f(this)[a];if(e){var m=e.getListenerIndex(b);0<=m&&e.listeners.splice(m,1)}},removeAllListeners:function(){var a=f(this),b;for(b in a)delete a[b]},hasListeners:function(a){return(a=f(this)[a])&&0<a.listeners.length}}}())}(),CKEDITOR.editor||
 (CKEDITOR.editor=function(){CKEDITOR._.pending.push([this,arguments]);CKEDITOR.event.call(this)},CKEDITOR.editor.prototype.fire=function(b,h){b in{instanceReady:1,loaded:1}&&(this[b]=!0);return CKEDITOR.event.prototype.fire.call(this,b,h,this)},CKEDITOR.editor.prototype.fireOnce=function(b,h){b in{instanceReady:1,loaded:1}&&(this[b]=!0);return CKEDITOR.event.prototype.fireOnce.call(this,b,h,this)},CKEDITOR.event.implementOn(CKEDITOR.editor.prototype)),CKEDITOR.env||(CKEDITOR.env=function(){var b=
 navigator.userAgent.toLowerCase(),h=b.match(/edge[ \/](\d+.?\d*)/),f=-1<b.indexOf("trident/"),f=!(!h&&!f),f={ie:f,edge:!!h,webkit:!f&&-1<b.indexOf(" applewebkit/"),air:-1<b.indexOf(" adobeair/"),mac:-1<b.indexOf("macintosh"),quirks:"BackCompat"==document.compatMode&&(!document.documentMode||10>document.documentMode),mobile:-1<b.indexOf("mobile"),iOS:/(ipad|iphone|ipod)/.test(b),isCustomDomain:function(){if(!this.ie)return!1;var a=document.domain,b=window.location.hostname;return a!=b&&a!="["+b+"]"},
 secure:"https:"==location.protocol};f.gecko="Gecko"==navigator.product&&!f.webkit&&!f.ie;f.webkit&&(-1<b.indexOf("chrome")?f.chrome=!0:f.safari=!0);var e=0;f.ie&&(e=h?parseFloat(h[1]):f.quirks||!document.documentMode?parseFloat(b.match(/msie (\d+)/)[1]):document.documentMode,f.ie9Compat=9==e,f.ie8Compat=8==e,f.ie7Compat=7==e,f.ie6Compat=7>e||f.quirks);f.gecko&&(h=b.match(/rv:([\d\.]+)/))&&(h=h[1].split("."),e=1E4*h[0]+100*(h[1]||0)+1*(h[2]||0));f.air&&(e=parseFloat(b.match(/ adobeair\/(\d+)/)[1]));
@@ -18,16 +18,16 @@ f.iOS&&(f.cssClass+=" cke_browser_ios");f.hidpi&&(f.cssClass+=" cke_hidpi");retu
 function(b){(this._.pending||(this._.pending=[])).push(b)};(function(){CKEDITOR.domReady(function(){var b=CKEDITOR.loadFullCore,h=CKEDITOR.loadFullCoreTimeout;b&&(CKEDITOR.status="basic_ready",b&&b._load?b():h&&setTimeout(function(){CKEDITOR.loadFullCore&&CKEDITOR.loadFullCore()},1E3*h))})})();CKEDITOR.status="basic_loaded"}(),"use strict",CKEDITOR.VERBOSITY_WARN=1,CKEDITOR.VERBOSITY_ERROR=2,CKEDITOR.verbosity=CKEDITOR.VERBOSITY_WARN|CKEDITOR.VERBOSITY_ERROR,CKEDITOR.warn=function(b,h){CKEDITOR.verbosity&
 CKEDITOR.VERBOSITY_WARN&&CKEDITOR.fire("log",{type:"warn",errorCode:b,additionalData:h})},CKEDITOR.error=function(b,h){CKEDITOR.verbosity&CKEDITOR.VERBOSITY_ERROR&&CKEDITOR.fire("log",{type:"error",errorCode:b,additionalData:h})},CKEDITOR.on("log",function(b){if(window.console&&window.console.log){var h=console[b.data.type]?b.data.type:"log",f=b.data.errorCode;if(b=b.data.additionalData)console[h]("[CKEDITOR] Error code: "+f+".",b);else console[h]("[CKEDITOR] Error code: "+f+".");console[h]("[CKEDITOR] For more information about this error go to https://ckeditor.com/docs/ckeditor4/latest/guide/dev_errors.html#"+
 f)}},null,null,999),CKEDITOR.dom={},function(){function b(n,g,c){this._minInterval=n;this._context=c;this._lastOutput=this._scheduledTimer=0;this._output=CKEDITOR.tools.bind(g,c||{});var a=this;this.input=function(){function n(){a._lastOutput=(new Date).getTime();a._scheduledTimer=0;a._call()}if(!a._scheduledTimer||!1!==a._reschedule()){var g=(new Date).getTime()-a._lastOutput;g<a._minInterval?a._scheduledTimer=setTimeout(n,a._minInterval-g):n()}}}function h(n,g,c){b.call(this,n,g,c);this._args=[];
-var a=this;this.input=CKEDITOR.tools.override(this.input,function(n){return function(){a._args=Array.prototype.slice.call(arguments);n.call(this)}})}var f=[],e=CKEDITOR.env.gecko?"-moz-":CKEDITOR.env.webkit?"-webkit-":CKEDITOR.env.ie?"-ms-":"",a=/&/g,m=/>/g,k=/</g,l=/"/g,c=/&(lt|gt|amp|quot|nbsp|shy|#\d{1,5});/g,d={lt:"\x3c",gt:"\x3e",amp:"\x26",quot:'"',nbsp:" ",shy:"­"},g=function(n,g){return"#"==g[0]?String.fromCharCode(parseInt(g.slice(1),10)):d[g]};CKEDITOR.on("reset",function(){f=[]});CKEDITOR.tools=
+var a=this;this.input=CKEDITOR.tools.override(this.input,function(n){return function(){a._args=Array.prototype.slice.call(arguments);n.call(this)}})}var f=[],e=CKEDITOR.env.gecko?"-moz-":CKEDITOR.env.webkit?"-webkit-":CKEDITOR.env.ie?"-ms-":"",a=/&/g,k=/>/g,l=/</g,m=/"/g,c=/&(lt|gt|amp|quot|nbsp|shy|#\d{1,5});/g,d={lt:"\x3c",gt:"\x3e",amp:"\x26",quot:'"',nbsp:" ",shy:"­"},g=function(n,g){return"#"==g[0]?String.fromCharCode(parseInt(g.slice(1),10)):d[g]};CKEDITOR.on("reset",function(){f=[]});CKEDITOR.tools=
 {arrayCompare:function(n,g){if(!n&&!g)return!0;if(!n||!g||n.length!=g.length)return!1;for(var c=0;c<n.length;c++)if(n[c]!=g[c])return!1;return!0},getIndex:function(n,g){for(var c=0;c<n.length;++c)if(g(n[c]))return c;return-1},clone:function(n){var g;if(n&&n instanceof Array){g=[];for(var c=0;c<n.length;c++)g[c]=CKEDITOR.tools.clone(n[c]);return g}if(null===n||"object"!=typeof n||n instanceof String||n instanceof Number||n instanceof Boolean||n instanceof Date||n instanceof RegExp||n.nodeType||n.window===
 n)return n;g=new n.constructor;for(c in n)g[c]=CKEDITOR.tools.clone(n[c]);return g},capitalize:function(n,g){return n.charAt(0).toUpperCase()+(g?n.slice(1):n.slice(1).toLowerCase())},extend:function(n){var g=arguments.length,c,a;"boolean"==typeof(c=arguments[g-1])?g--:"boolean"==typeof(c=arguments[g-2])&&(a=arguments[g-1],g-=2);for(var d=1;d<g;d++){var b=arguments[d]||{};CKEDITOR.tools.array.forEach(CKEDITOR.tools.object.keys(b),function(g){if(!0===c||null==n[g])if(!a||g in a)n[g]=b[g]})}return n},
 prototypedCopy:function(n){var g=function(){};g.prototype=n;return new g},copy:function(n){var g={},c;for(c in n)g[c]=n[c];return g},isArray:function(n){return"[object Array]"==Object.prototype.toString.call(n)},isEmpty:function(n){for(var g in n)if(n.hasOwnProperty(g))return!1;return!0},cssVendorPrefix:function(n,g,c){if(c)return e+n+":"+g+";"+n+":"+g;c={};c[n]=g;c[e+n]=g;return c},cssStyleToDomStyle:function(){var n=document.createElement("div").style,g="undefined"!=typeof n.cssFloat?"cssFloat":
-"undefined"!=typeof n.styleFloat?"styleFloat":"float";return function(n){return"float"==n?g:n.replace(/-./g,function(n){return n.substr(1).toUpperCase()})}}(),buildStyleHtml:function(n){n=[].concat(n);for(var g,c=[],a=0;a<n.length;a++)if(g=n[a])/@import|[{}]/.test(g)?c.push("\x3cstyle\x3e"+g+"\x3c/style\x3e"):c.push('\x3clink type\x3d"text/css" rel\x3dstylesheet href\x3d"'+g+'"\x3e');return c.join("")},htmlEncode:function(n){return void 0===n||null===n?"":String(n).replace(a,"\x26amp;").replace(m,
-"\x26gt;").replace(k,"\x26lt;")},htmlDecode:function(n){return n.replace(c,g)},htmlEncodeAttr:function(n){return CKEDITOR.tools.htmlEncode(n).replace(l,"\x26quot;")},htmlDecodeAttr:function(n){return CKEDITOR.tools.htmlDecode(n)},transformPlainTextToHtml:function(n,g){var c=g==CKEDITOR.ENTER_BR,a=this.htmlEncode(n.replace(/\r\n/g,"\n")),a=a.replace(/\t/g,"\x26nbsp;\x26nbsp; \x26nbsp;"),d=g==CKEDITOR.ENTER_P?"p":"div";if(!c){var b=/\n{2}/g;if(b.test(a))var e="\x3c"+d+"\x3e",l="\x3c/"+d+"\x3e",a=e+
-a.replace(b,function(){return l+e})+l}a=a.replace(/\n/g,"\x3cbr\x3e");c||(a=a.replace(new RegExp("\x3cbr\x3e(?\x3d\x3c/"+d+"\x3e)"),function(n){return CKEDITOR.tools.repeat(n,2)}));a=a.replace(/^ | $/g,"\x26nbsp;");return a=a.replace(/(>|\s) /g,function(n,g){return g+"\x26nbsp;"}).replace(/ (?=<)/g,"\x26nbsp;")},getNextNumber:function(){var n=0;return function(){return++n}}(),getNextId:function(){return"cke_"+this.getNextNumber()},getUniqueId:function(){for(var n="e",g=0;8>g;g++)n+=Math.floor(65536*
-(1+Math.random())).toString(16).substring(1);return n},override:function(n,g){var c=g(n);c.prototype=n.prototype;return c},setTimeout:function(n,g,c,a,d){d||(d=window);c||(c=d);return d.setTimeout(function(){a?n.apply(c,[].concat(a)):n.apply(c)},g||0)},throttle:function(n,g,c){return new this.buffers.throttle(n,g,c)},trim:function(){var n=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(g){return g.replace(n,"")}}(),ltrim:function(){var g=/^[ \t\n\r]+/g;return function(c){return c.replace(g,"")}}(),
+"undefined"!=typeof n.styleFloat?"styleFloat":"float";return function(n){return"float"==n?g:n.replace(/-./g,function(n){return n.substr(1).toUpperCase()})}}(),buildStyleHtml:function(n){n=[].concat(n);for(var g,c=[],a=0;a<n.length;a++)if(g=n[a])/@import|[{}]/.test(g)?c.push("\x3cstyle\x3e"+g+"\x3c/style\x3e"):c.push('\x3clink type\x3d"text/css" rel\x3dstylesheet href\x3d"'+g+'"\x3e');return c.join("")},htmlEncode:function(n){return void 0===n||null===n?"":String(n).replace(a,"\x26amp;").replace(k,
+"\x26gt;").replace(l,"\x26lt;")},htmlDecode:function(n){return n.replace(c,g)},htmlEncodeAttr:function(n){return CKEDITOR.tools.htmlEncode(n).replace(m,"\x26quot;")},htmlDecodeAttr:function(n){return CKEDITOR.tools.htmlDecode(n)},transformPlainTextToHtml:function(n,g){var c=g==CKEDITOR.ENTER_BR,a=this.htmlEncode(n.replace(/\r\n/g,"\n")),a=a.replace(/\t/g,"\x26nbsp;\x26nbsp; \x26nbsp;"),d=g==CKEDITOR.ENTER_P?"p":"div";if(!c){var b=/\n{2}/g;if(b.test(a))var e="\x3c"+d+"\x3e",m="\x3c/"+d+"\x3e",a=e+
+a.replace(b,function(){return m+e})+m}a=a.replace(/\n/g,"\x3cbr\x3e");c||(a=a.replace(new RegExp("\x3cbr\x3e(?\x3d\x3c/"+d+"\x3e)"),function(n){return CKEDITOR.tools.repeat(n,2)}));a=a.replace(/^ | $/g,"\x26nbsp;");return a=a.replace(/(>|\s) /g,function(n,g){return g+"\x26nbsp;"}).replace(/ (?=<)/g,"\x26nbsp;")},getNextNumber:function(){var n=0;return function(){return++n}}(),getNextId:function(){return"cke_"+this.getNextNumber()},getUniqueId:function(){for(var n="e",g=0;8>g;g++)n+=Math.floor(65536*
+(1+Math.random())).toString(16).substring(1);return n},override:function(n,g){var c=g(n);c.prototype=n.prototype;return c},setTimeout:function(n,g,c,a,d){d||(d=window);c||(c=d);return d.setTimeout(function(){a?n.apply(c,[].concat(a)):n.apply(c)},g||0)},throttle:function(n,g,c){return new this.buffers.throttle(n,g,c)},trim:function(){var n=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(g){return g.replace(n,"")}}(),ltrim:function(){var n=/^[ \t\n\r]+/g;return function(g){return g.replace(n,"")}}(),
 rtrim:function(){var g=/[ \t\n\r]+$/g;return function(c){return c.replace(g,"")}}(),indexOf:function(g,c){if("function"==typeof c)for(var a=0,d=g.length;a<d;a++){if(c(g[a]))return a}else{if(g.indexOf)return g.indexOf(c);a=0;for(d=g.length;a<d;a++)if(g[a]===c)return a}return-1},search:function(g,c){var a=CKEDITOR.tools.indexOf(g,c);return 0<=a?g[a]:null},bind:function(g,c){var a=Array.prototype.slice.call(arguments,2);return function(){return g.apply(c,a.concat(Array.prototype.slice.call(arguments)))}},
-createClass:function(g){var c=g.$,a=g.base,d=g.privates||g._,b=g.proto;g=g.statics;!c&&(c=function(){a&&this.base.apply(this,arguments)});if(d)var e=c,c=function(){var g=this._||(this._={}),n;for(n in d){var c=d[n];g[n]="function"==typeof c?CKEDITOR.tools.bind(c,this):c}e.apply(this,arguments)};a&&(c.prototype=this.prototypedCopy(a.prototype),c.prototype.constructor=c,c.base=a,c.baseProto=a.prototype,c.prototype.base=function u(){this.base=a.prototype.base;a.apply(this,arguments);this.base=u});b&&
+createClass:function(g){var c=g.$,a=g.base,d=g.privates||g._,b=g.proto;g=g.statics;!c&&(c=function(){a&&this.base.apply(this,arguments)});if(d)var e=c,c=function(){var g=this._||(this._={}),n;for(n in d){var c=d[n];g[n]="function"==typeof c?CKEDITOR.tools.bind(c,this):c}e.apply(this,arguments)};a&&(c.prototype=this.prototypedCopy(a.prototype),c.prototype.constructor=c,c.base=a,c.baseProto=a.prototype,c.prototype.base=function t(){this.base=a.prototype.base;a.apply(this,arguments);this.base=t});b&&
 this.extend(c.prototype,b,!0);g&&this.extend(c,g,!0);return c},addFunction:function(g,c){return f.push(function(){return g.apply(c||this,arguments)})-1},removeFunction:function(g){f[g]=null},callFunction:function(g){var c=f[g];return c&&c.apply(window,Array.prototype.slice.call(arguments,1))},cssLength:function(){var g=/^-?\d+\.?\d*px$/,c;return function(a){c=CKEDITOR.tools.trim(a+"")+"px";return g.test(c)?c:a||""}}(),convertToPx:function(){var g;return function(c){g||(g=CKEDITOR.dom.element.createFromHtml('\x3cdiv style\x3d"position:absolute;left:-9999px;top:-9999px;margin:0px;padding:0px;border:0px;"\x3e\x3c/div\x3e',
 CKEDITOR.document),CKEDITOR.document.getBody().append(g));if(!/%$/.test(c)){var a=0>parseFloat(c);a&&(c=c.replace("-",""));g.setStyle("width",c);c=g.$.clientWidth;return a?-c:c}return c}}(),repeat:function(g,c){return Array(c+1).join(g)},tryThese:function(){for(var g,c=0,a=arguments.length;c<a;c++){var d=arguments[c];try{g=d();break}catch(b){}}return g},genKey:function(){return Array.prototype.slice.call(arguments).join("-")},defer:function(g){return function(){var c=arguments,a=this;window.setTimeout(function(){g.apply(a,
 c)},0)}},normalizeCssText:function(g,c){var a=[],d,b=CKEDITOR.tools.parseCssText(g,!0,c);for(d in b)a.push(d+":"+b[d]);a.sort();return a.length?a.join(";")+";":""},convertRgbToHex:function(g){return g.replace(/(?:rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\))/gi,function(g,c,n,a){g=[c,n,a];for(c=0;3>c;c++)g[c]=("0"+parseInt(g[c],10).toString(16)).slice(-2);return"#"+g.join("")})},normalizeHex:function(g){return g.replace(/#(([0-9a-f]{3}){1,2})($|;|\s+)/gi,function(g,c,n,a){g=c.toLowerCase();3==g.length&&
@@ -35,12 +35,12 @@ c)},0)}},normalizeCssText:function(g,c){var a=[],d,b=CKEDITOR.tools.parseCssText
 n.toLowerCase(),"font-family"==n&&(a=a.replace(/\s*,\s*/g,",")),a=CKEDITOR.tools.trim(a));d[n]=a});return d},writeCssText:function(g,c){var a,d=[];for(a in g)d.push(a+":"+g[a]);c&&d.sort();return d.join("; ")},objectCompare:function(g,c,a){var d;if(!g&&!c)return!0;if(!g||!c)return!1;for(d in g)if(g[d]!=c[d])return!1;if(!a)for(d in c)if(g[d]!=c[d])return!1;return!0},objectKeys:function(g){return CKEDITOR.tools.object.keys(g)},convertArrayToObject:function(g,c){var a={};1==arguments.length&&(c=!0);
 for(var d=0,b=g.length;d<b;++d)a[g[d]]=c;return a},getStyledSpans:function(g,c){var a=CKEDITOR.env.ie&&8==CKEDITOR.env.version?g.toUpperCase():g,a=c.find("span[style*\x3d"+a+"]").toArray();return CKEDITOR.tools.array.filter(a,function(c){return!!c.getStyle(g)})},fixDomain:function(){for(var g;;)try{g=window.parent.document.domain;break}catch(c){g=g?g.replace(/.+?(?:\.|$)/,""):document.domain;if(!g)break;document.domain=g}return!!g},eventsBuffer:function(g,c,a){return new this.buffers.event(g,c,a)},
 enableHtml5Elements:function(g,c){for(var a="abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup main mark meter nav output progress section summary time video".split(" "),d=a.length,b;d--;)b=g.createElement(a[d]),c&&g.appendChild(b)},checkIfAnyArrayItemMatches:function(g,c){for(var a=0,d=g.length;a<d;++a)if(g[a].match(c))return!0;return!1},checkIfAnyObjectPropertyMatches:function(g,c){for(var a in g)if(a.match(c))return!0;return!1},keystrokeToString:function(g,
-c){var a=this.keystrokeToArray(g,c);a.display=a.display.join("+");a.aria=a.aria.join("+");return a},keystrokeToArray:function(g,c){var a=c&16711680,d=c&65535,b=CKEDITOR.env.mac,e=[],l=[];a&CKEDITOR.CTRL&&(e.push(b?"⌘":g[17]),l.push(b?g[224]:g[17]));a&CKEDITOR.ALT&&(e.push(b?"⌥":g[18]),l.push(g[18]));a&CKEDITOR.SHIFT&&(e.push(b?"⇧":g[16]),l.push(g[16]));d&&(g[d]?(e.push(g[d]),l.push(g[d])):(e.push(String.fromCharCode(d)),l.push(String.fromCharCode(d))));return{display:e,aria:l}},transparentImageData:"data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw\x3d\x3d",
+c){var a=this.keystrokeToArray(g,c);a.display=a.display.join("+");a.aria=a.aria.join("+");return a},keystrokeToArray:function(g,c){var a=c&16711680,d=c&65535,b=CKEDITOR.env.mac,e=[],m=[];a&CKEDITOR.CTRL&&(e.push(b?"⌘":g[17]),m.push(b?g[224]:g[17]));a&CKEDITOR.ALT&&(e.push(b?"⌥":g[18]),m.push(g[18]));a&CKEDITOR.SHIFT&&(e.push(b?"⇧":g[16]),m.push(g[16]));d&&(g[d]?(e.push(g[d]),m.push(g[d])):(e.push(String.fromCharCode(d)),m.push(String.fromCharCode(d))));return{display:e,aria:m}},transparentImageData:"data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw\x3d\x3d",
 getCookie:function(g){g=g.toLowerCase();for(var c=document.cookie.split(";"),a,d,b=0;b<c.length;b++)if(a=c[b].split("\x3d"),d=decodeURIComponent(CKEDITOR.tools.trim(a[0]).toLowerCase()),d===g)return decodeURIComponent(1<a.length?a[1]:"");return null},setCookie:function(g,c){document.cookie=encodeURIComponent(g)+"\x3d"+encodeURIComponent(c)+";path\x3d/"},getCsrfToken:function(){var g=CKEDITOR.tools.getCookie("ckCsrfToken");if(!g||40!=g.length){var g=[],c="";if(window.crypto&&window.crypto.getRandomValues)g=
 new Uint8Array(40),window.crypto.getRandomValues(g);else for(var a=0;40>a;a++)g.push(Math.floor(256*Math.random()));for(a=0;a<g.length;a++)var d="abcdefghijklmnopqrstuvwxyz0123456789".charAt(g[a]%36),c=c+(.5<Math.random()?d.toUpperCase():d);g=c;CKEDITOR.tools.setCookie("ckCsrfToken",g)}return g},escapeCss:function(g){if(g)if(window.CSS&&CSS.escape)g=CSS.escape(g);else{g=String(g);for(var c=g.length,a=-1,d,b="",e=g.charCodeAt(0);++a<c;)d=g.charCodeAt(a),b=0==d?b+"�":127==d||1<=d&&31>=d||0==a&&48<=
 d&&57>=d||1==a&&48<=d&&57>=d&&45==e?b+("\\"+d.toString(16)+" "):0==a&&1==c&&45==d?b+("\\"+g.charAt(a)):128<=d||45==d||95==d||48<=d&&57>=d||65<=d&&90>=d||97<=d&&122>=d?b+g.charAt(a):b+("\\"+g.charAt(a));g=b}else g="";return g},getMouseButton:function(g){return(g=g&&g.data?g.data.$:g)?CKEDITOR.tools.normalizeMouseButton(g.button):!1},normalizeMouseButton:function(g,c){if(!CKEDITOR.env.ie||9<=CKEDITOR.env.version&&!CKEDITOR.env.ie6Compat)return g;for(var a=[[CKEDITOR.MOUSE_BUTTON_LEFT,1],[CKEDITOR.MOUSE_BUTTON_MIDDLE,
-4],[CKEDITOR.MOUSE_BUTTON_RIGHT,2]],d=0;d<a.length;d++){var b=a[d];if(b[0]===g&&c)return b[1];if(!c&&b[1]===g)return b[0]}},convertHexStringToBytes:function(g){var c=[],a=g.length/2,d;for(d=0;d<a;d++)c.push(parseInt(g.substr(2*d,2),16));return c},convertBytesToBase64:function(g){var c="",a=g.length,d;for(d=0;d<a;d+=3){var b=g.slice(d,d+3),e=b.length,l=[],f;if(3>e)for(f=e;3>f;f++)b[f]=0;l[0]=(b[0]&252)>>2;l[1]=(b[0]&3)<<4|b[1]>>4;l[2]=(b[1]&15)<<2|(b[2]&192)>>6;l[3]=b[2]&63;for(f=0;4>f;f++)c=f<=e?
-c+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(l[f]):c+"\x3d"}return c},style:{parse:{_borderStyle:"none hidden dotted dashed solid double groove ridge inset outset".split(" "),_widthRegExp:/^(thin|medium|thick|[\+-]?\d+(\.\d+)?[a-z%]+|[\+-]?0+(\.0+)?|\.\d+[a-z%]+)$/,_rgbaRegExp:/rgba?\(\s*\d+%?\s*,\s*\d+%?\s*,\s*\d+%?\s*(?:,\s*[0-9.]+\s*)?\)/gi,_hslaRegExp:/hsla?\(\s*[0-9.]+\s*,\s*\d+%\s*,\s*\d+%\s*(?:,\s*[0-9.]+\s*)?\)/gi,background:function(g){var c={},a=this._findColor(g);
+4],[CKEDITOR.MOUSE_BUTTON_RIGHT,2]],d=0;d<a.length;d++){var b=a[d];if(b[0]===g&&c)return b[1];if(!c&&b[1]===g)return b[0]}},convertHexStringToBytes:function(g){var c=[],a=g.length/2,d;for(d=0;d<a;d++)c.push(parseInt(g.substr(2*d,2),16));return c},convertBytesToBase64:function(g){var c="",a=g.length,d;for(d=0;d<a;d+=3){var b=g.slice(d,d+3),e=b.length,m=[],f;if(3>e)for(f=e;3>f;f++)b[f]=0;m[0]=(b[0]&252)>>2;m[1]=(b[0]&3)<<4|b[1]>>4;m[2]=(b[1]&15)<<2|(b[2]&192)>>6;m[3]=b[2]&63;for(f=0;4>f;f++)c=f<=e?
+c+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(m[f]):c+"\x3d"}return c},style:{parse:{_borderStyle:"none hidden dotted dashed solid double groove ridge inset outset".split(" "),_widthRegExp:/^(thin|medium|thick|[\+-]?\d+(\.\d+)?[a-z%]+|[\+-]?0+(\.0+)?|\.\d+[a-z%]+)$/,_rgbaRegExp:/rgba?\(\s*\d+%?\s*,\s*\d+%?\s*,\s*\d+%?\s*(?:,\s*[0-9.]+\s*)?\)/gi,_hslaRegExp:/hsla?\(\s*[0-9.]+\s*,\s*\d+%\s*,\s*\d+%\s*(?:,\s*[0-9.]+\s*)?\)/gi,background:function(g){var c={},a=this._findColor(g);
 a.length&&(c.color=a[0],CKEDITOR.tools.array.forEach(a,function(c){g=g.replace(c,"")}));if(g=CKEDITOR.tools.trim(g))c.unprocessed=g;return c},margin:function(g){return CKEDITOR.tools.style.parse.sideShorthand(g,function(g){return g.match(/(?:\-?[\.\d]+(?:%|\w*)|auto|inherit|initial|unset|revert)/g)||["0px"]})},sideShorthand:function(g,c){function a(g){d.top=b[g[0]];d.right=b[g[1]];d.bottom=b[g[2]];d.left=b[g[3]]}var d={},b=c?c(g):g.split(/\s+/);switch(b.length){case 1:a([0,0,0,0]);break;case 2:a([0,
 1,0,1]);break;case 3:a([0,1,2,1]);break;case 4:a([0,1,2,3])}return d},border:function(g){return CKEDITOR.tools.style.border.fromCssRule(g)},_findColor:function(g){var c=[],a=CKEDITOR.tools.array,c=c.concat(g.match(this._rgbaRegExp)||[]),c=c.concat(g.match(this._hslaRegExp)||[]);return c=c.concat(a.filter(g.split(/\s+/),function(g){return g.match(/^\#[a-f0-9]{3}(?:[a-f0-9]{3})?$/gi)?!0:g.toLowerCase()in CKEDITOR.tools.style.parse._colors}))}}},array:{filter:function(g,c,a){var d=[];this.forEach(g,
 function(b,e){c.call(a,b,e,g)&&d.push(b)});return d},find:function(g,c,a){for(var d=g.length,b=0;b<d;){if(c.call(a,g[b],b,g))return g[b];b++}},forEach:function(g,c,a){var d=g.length,b;for(b=0;b<d;b++)c.call(a,g[b],b,g)},map:function(g,c,a){for(var d=[],b=0;b<g.length;b++)d.push(c.call(a,g[b],b,g));return d},reduce:function(g,c,a,d){for(var b=0;b<g.length;b++)a=c.call(d,a,g[b],b,g);return a},every:function(g,c,a){if(!g.length)return!0;c=this.filter(g,c,a);return g.length===c.length},some:function(g,
@@ -50,53 +50,53 @@ merge:function(g,c){var a=CKEDITOR.tools,d=a.clone(g),b=a.clone(c);a.array.forEa
 b.x;"x"in d&&"y"in d&&(d.y+=b.y,d.x+=b.x);d.right=d.left+d.width;d.bottom=d.top+d.height;return d}};b.prototype={reset:function(){this._lastOutput=0;this._clearTimer()},_reschedule:function(){return!1},_call:function(){this._output()},_clearTimer:function(){this._scheduledTimer&&clearTimeout(this._scheduledTimer);this._scheduledTimer=0}};h.prototype=CKEDITOR.tools.prototypedCopy(b.prototype);h.prototype._reschedule=function(){this._scheduledTimer&&this._clearTimer()};h.prototype._call=function(){this._output.apply(this._context,
 this._args)};CKEDITOR.tools.buffers={};CKEDITOR.tools.buffers.event=b;CKEDITOR.tools.buffers.throttle=h;CKEDITOR.tools.style.border=CKEDITOR.tools.createClass({$:function(g){g=g||{};this.width=g.width;this.style=g.style;this.color=g.color;this._.normalize()},_:{normalizeMap:{color:[[/windowtext/g,"black"]]},normalize:function(){for(var g in this._.normalizeMap){var c=this[g];c&&(this[g]=CKEDITOR.tools.array.reduce(this._.normalizeMap[g],function(g,c){return g.replace(c[0],c[1])},c))}}},proto:{toString:function(){return CKEDITOR.tools.array.filter([this.width,
 this.style,this.color],function(g){return!!g}).join(" ")}},statics:{fromCssRule:function(g){var c={},a=g.split(/\s+/g);g=CKEDITOR.tools.style.parse._findColor(g);g.length&&(c.color=g[0]);CKEDITOR.tools.array.forEach(a,function(g){c.style||-1===CKEDITOR.tools.indexOf(CKEDITOR.tools.style.parse._borderStyle,g)?!c.width&&CKEDITOR.tools.style.parse._widthRegExp.test(g)&&(c.width=g):c.style=g});return new CKEDITOR.tools.style.border(c)},splitCssValues:function(g,c){c=c||{};var a=CKEDITOR.tools.array.reduce(["width",
-"style","color"],function(a,d){var b=g["border-"+d]||c[d];a[d]=b?CKEDITOR.tools.style.parse.sideShorthand(b):null;return a},{});return CKEDITOR.tools.array.reduce(["top","right","bottom","left"],function(c,d){var b={},e;for(e in a){var l=g["border-"+d+"-"+e];b[e]=l?l:a[e]&&a[e][d]}c["border-"+d]=new CKEDITOR.tools.style.border(b);return c},{})}}});CKEDITOR.tools.array.indexOf=CKEDITOR.tools.indexOf;CKEDITOR.tools.array.isArray=CKEDITOR.tools.isArray;CKEDITOR.MOUSE_BUTTON_LEFT=0;CKEDITOR.MOUSE_BUTTON_MIDDLE=
-1;CKEDITOR.MOUSE_BUTTON_RIGHT=2}(),CKEDITOR.dtd=function(){var b=CKEDITOR.tools.extend,h=function(c,g){for(var a=CKEDITOR.tools.clone(c),b=1;b<arguments.length;b++){g=arguments[b];for(var e in g)delete a[e]}return a},f={},e={},a={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,main:1,menu:1,nav:1,ol:1,p:1,pre:1,section:1,table:1,ul:1},m={command:1,link:1,meta:1,noscript:1,script:1,style:1},k={},
-l={"#":1},c={center:1,dir:1,noframes:1};b(f,{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},l,{acronym:1,applet:1,basefont:1,big:1,font:1,isindex:1,strike:1,style:1,tt:1});b(e,a,f,c);h=
-{a:h(f,{a:1,button:1}),abbr:f,address:e,area:k,article:e,aside:e,audio:b({source:1,track:1},e),b:f,base:k,bdi:f,bdo:f,blockquote:e,body:e,br:k,button:h(f,{a:1,button:1}),canvas:f,caption:e,cite:f,code:f,col:k,colgroup:{col:1},command:k,datalist:b({option:1},f),dd:e,del:f,details:b({summary:1},e),dfn:f,div:e,dl:{dt:1,dd:1},dt:e,em:f,embed:k,fieldset:b({legend:1},e),figcaption:e,figure:b({figcaption:1},e),footer:e,form:e,h1:f,h2:f,h3:f,h4:f,h5:f,h6:f,head:b({title:1,base:1},m),header:e,hgroup:{h1:1,
-h2:1,h3:1,h4:1,h5:1,h6:1},hr:k,html:b({head:1,body:1},e,m),i:f,iframe:l,img:k,input:k,ins:f,kbd:f,keygen:k,label:f,legend:f,li:e,link:k,main:e,map:e,mark:f,menu:b({li:1},e),meta:k,meter:h(f,{meter:1}),nav:e,noscript:b({link:1,meta:1,style:1},f),object:b({param:1},f),ol:{li:1},optgroup:{option:1},option:l,output:f,p:f,param:k,pre:f,progress:h(f,{progress:1}),q:f,rp:f,rt:f,ruby:b({rp:1,rt:1},f),s:f,samp:f,script:l,section:e,select:{optgroup:1,option:1},small:f,source:k,span:f,strong:f,style:l,sub:f,
-summary:b({h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},f),sup:f,table:{caption:1,colgroup:1,thead:1,tfoot:1,tbody:1,tr:1},tbody:{tr:1},td:e,textarea:l,tfoot:{tr:1},th:e,thead:{tr:1},time:h(f,{time:1}),title:l,tr:{th:1,td:1},track:k,u:f,ul:{li:1},"var":f,video:b({source:1,track:1},e),wbr:k,acronym:f,applet:b({param:1},e),basefont:k,big:f,center:e,dialog:k,dir:{li:1},font:f,isindex:k,noframes:e,strike:f,tt:f};b(h,{$block:b({audio:1,dd:1,dt:1,figcaption:1,li:1,video:1},a,c),$blockLimit:{article:1,aside:1,audio:1,
+"style","color"],function(a,d){var b=g["border-"+d]||c[d];a[d]=b?CKEDITOR.tools.style.parse.sideShorthand(b):null;return a},{});return CKEDITOR.tools.array.reduce(["top","right","bottom","left"],function(c,d){var b={},e;for(e in a){var m=g["border-"+d+"-"+e];b[e]=m?m:a[e]&&a[e][d]}c["border-"+d]=new CKEDITOR.tools.style.border(b);return c},{})}}});CKEDITOR.tools.array.indexOf=CKEDITOR.tools.indexOf;CKEDITOR.tools.array.isArray=CKEDITOR.tools.isArray;CKEDITOR.MOUSE_BUTTON_LEFT=0;CKEDITOR.MOUSE_BUTTON_MIDDLE=
+1;CKEDITOR.MOUSE_BUTTON_RIGHT=2}(),CKEDITOR.dtd=function(){var b=CKEDITOR.tools.extend,h=function(c,g){for(var a=CKEDITOR.tools.clone(c),b=1;b<arguments.length;b++){g=arguments[b];for(var e in g)delete a[e]}return a},f={},e={},a={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,main:1,menu:1,nav:1,ol:1,p:1,pre:1,section:1,table:1,ul:1},k={command:1,link:1,meta:1,noscript:1,script:1,style:1},l={},
+m={"#":1},c={center:1,dir:1,noframes:1};b(f,{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},m,{acronym:1,applet:1,basefont:1,big:1,font:1,isindex:1,strike:1,style:1,tt:1});b(e,a,f,c);h=
+{a:h(f,{a:1,button:1}),abbr:f,address:e,area:l,article:e,aside:e,audio:b({source:1,track:1},e),b:f,base:l,bdi:f,bdo:f,blockquote:e,body:e,br:l,button:h(f,{a:1,button:1}),canvas:f,caption:e,cite:f,code:f,col:l,colgroup:{col:1},command:l,datalist:b({option:1},f),dd:e,del:f,details:b({summary:1},e),dfn:f,div:e,dl:{dt:1,dd:1},dt:e,em:f,embed:l,fieldset:b({legend:1},e),figcaption:e,figure:b({figcaption:1},e),footer:e,form:e,h1:f,h2:f,h3:f,h4:f,h5:f,h6:f,head:b({title:1,base:1},k),header:e,hgroup:{h1:1,
+h2:1,h3:1,h4:1,h5:1,h6:1},hr:l,html:b({head:1,body:1},e,k),i:f,iframe:m,img:l,input:l,ins:f,kbd:f,keygen:l,label:f,legend:f,li:e,link:l,main:e,map:e,mark:f,menu:b({li:1},e),meta:l,meter:h(f,{meter:1}),nav:e,noscript:b({link:1,meta:1,style:1},f),object:b({param:1},f),ol:{li:1},optgroup:{option:1},option:m,output:f,p:f,param:l,pre:f,progress:h(f,{progress:1}),q:f,rp:f,rt:f,ruby:b({rp:1,rt:1},f),s:f,samp:f,script:m,section:e,select:{optgroup:1,option:1},small:f,source:l,span:f,strong:f,style:m,sub:f,
+summary:b({h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},f),sup:f,table:{caption:1,colgroup:1,thead:1,tfoot:1,tbody:1,tr:1},tbody:{tr:1},td:e,textarea:m,tfoot:{tr:1},th:e,thead:{tr:1},time:h(f,{time:1}),title:m,tr:{th:1,td:1},track:l,u:f,ul:{li:1},"var":f,video:b({source:1,track:1},e),wbr:l,acronym:f,applet:b({param:1},e),basefont:l,big:f,center:e,dialog:l,dir:{li:1},font:f,isindex:l,noframes:e,strike:f,tt:f};b(h,{$block:b({audio:1,dd:1,dt:1,figcaption:1,li:1,video:1},a,c),$blockLimit:{article:1,aside:1,audio:1,
 body:1,caption:1,details:1,dir:1,div:1,dl:1,fieldset:1,figcaption:1,figure:1,footer:1,form:1,header:1,hgroup:1,main: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,figcaption:1,footer:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,header:1,hgroup:1,main: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:f,$list:{dl:1,ol:1,ul:1},$listItem:{dd:1,dt:1,li:1},$nonBodyContent:b({body:1,head:1,html:1},h.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 h}(),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+=CKEDITOR.CTRL;this.$.shiftKey&&(b+=CKEDITOR.SHIFT);this.$.altKey&&(b+=CKEDITOR.ALT);return b},preventDefault:function(b){var h=this.$;h.preventDefault?h.preventDefault():h.returnValue=!1;b&&this.stopPropagation()},stopPropagation:function(){var b=this.$;b.stopPropagation?b.stopPropagation():
 b.cancelBubble=!0},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){b&&(this.$=b)},CKEDITOR.dom.domObject.prototype=function(){var b=function(b,f){return function(e){"undefined"!=typeof CKEDITOR&&b.fire(f,new CKEDITOR.dom.event(e))}};return{getPrivate:function(){var b;(b=this.getCustomData("_"))||this.setCustomData("_",b={});return b},on:function(h){var f=this.getCustomData("_cke_nativeListeners");f||(f={},this.setCustomData("_cke_nativeListeners",f));f[h]||(f=f[h]=
-b(this,h),this.$.addEventListener?this.$.addEventListener(h,f,!!CKEDITOR.event.useCapture):this.$.attachEvent&&this.$.attachEvent("on"+h,f));return CKEDITOR.event.prototype.on.apply(this,arguments)},removeListener:function(b){CKEDITOR.event.prototype.removeListener.apply(this,arguments);if(!this.hasListeners(b)){var f=this.getCustomData("_cke_nativeListeners"),e=f&&f[b];e&&(this.$.removeEventListener?this.$.removeEventListener(b,e,!1):this.$.detachEvent&&this.$.detachEvent("on"+b,e),delete f[b])}},
-removeAllListeners:function(){try{var b=this.getCustomData("_cke_nativeListeners"),f;for(f in b){var e=b[f];this.$.detachEvent?this.$.detachEvent("on"+f,e):this.$.removeEventListener&&this.$.removeEventListener(f,e,!1);delete b[f]}}catch(a){if(!CKEDITOR.env.edge||-2146828218!==a.number)throw a;}CKEDITOR.event.prototype.removeAllListeners.call(this)}}}(),function(b){var h={};CKEDITOR.on("reset",function(){h={}});b.equals=function(b){try{return b&&b.$===this.$}catch(e){return!1}};b.setCustomData=function(b,
-e){var a=this.getUniqueId();(h[a]||(h[a]={}))[b]=e;return this};b.getCustomData=function(b){var e=this.$["data-cke-expando"];return(e=e&&h[e])&&b in e?e[b]:null};b.removeCustomData=function(b){var e=this.$["data-cke-expando"],e=e&&h[e],a,m;e&&(a=e[b],m=b in e,delete e[b]);return m?a:null};b.clearCustomData=function(){this.removeAllListeners();var b=this.getUniqueId();b&&delete h[b]};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,h){b.append(this,h);return b},clone:function(b,h){function f(a){a["data-cke-expando"]&&(a["data-cke-expando"]=!1);if(a.nodeType==CKEDITOR.NODE_ELEMENT||a.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT)if(h||
-a.nodeType!=CKEDITOR.NODE_ELEMENT||a.removeAttribute("id",!1),b){a=a.childNodes;for(var e=0;e<a.length;e++)f(a[e])}}function e(a){if(a.type==CKEDITOR.NODE_ELEMENT||a.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT){if(a.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var f=a.getName();":"==f[0]&&a.renameNode(f.substring(1))}if(b)for(f=0;f<a.getChildCount();f++)e(a.getChild(f))}}var a=this.$.cloneNode(b);f(a);a=new CKEDITOR.dom.node(a);CKEDITOR.env.ie&&9>CKEDITOR.env.version&&(this.type==CKEDITOR.NODE_ELEMENT||this.type==
-CKEDITOR.NODE_DOCUMENT_FRAGMENT)&&e(a);return 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 h=[],f=this.getDocument().$.documentElement,e=this;e&&e!=f;){var a=e.getParent();
-a&&h.unshift(this.getIndex.call(e,b));e=a}return h},getDocument:function(){return new CKEDITOR.dom.document(this.$.ownerDocument||this.$.parentNode.ownerDocument)},getIndex:function(b){function h(a,b){var e=b?a.getNext():a.getPrevious();return e&&e.type==CKEDITOR.NODE_TEXT?e.isEmpty()?h(e,b):e:null}var f=this,e=-1,a;if(!this.getParent()||b&&f.type==CKEDITOR.NODE_TEXT&&f.isEmpty()&&!h(f)&&!h(f,!0))return-1;do if(!b||f.equals(this)||f.type!=CKEDITOR.NODE_TEXT||!a&&!f.isEmpty())e++,a=f.type==CKEDITOR.NODE_TEXT;
-while(f=f.getPrevious());return e},getNextSourceNode:function(b,h,f){if(f&&!f.call){var e=f;f=function(a){return!a.equals(e)}}b=!b&&this.getFirst&&this.getFirst();var a;if(!b){if(this.type==CKEDITOR.NODE_ELEMENT&&f&&!1===f(this,!0))return null;b=this.getNext()}for(;!b&&(a=(a||this).getParent());){if(f&&!1===f(a,!0))return null;b=a.getNext()}return!b||f&&!1===f(b)?null:h&&h!=b.type?b.getNextSourceNode(!1,h,f):b},getPreviousSourceNode:function(b,h,f){if(f&&!f.call){var e=f;f=function(a){return!a.equals(e)}}b=
-!b&&this.getLast&&this.getLast();var a;if(!b){if(this.type==CKEDITOR.NODE_ELEMENT&&f&&!1===f(this,!0))return null;b=this.getPrevious()}for(;!b&&(a=(a||this).getParent());){if(f&&!1===f(a,!0))return null;b=a.getPrevious()}return!b||f&&!1===f(b)?null:h&&b.type!=h?b.getPreviousSourceNode(!1,h,f):b},getPrevious:function(b){var h=this.$,f;do f=(h=h.previousSibling)&&10!=h.nodeType&&new CKEDITOR.dom.node(h);while(f&&b&&!b(f));return f},getNext:function(b){var h=this.$,f;do f=(h=h.nextSibling)&&new CKEDITOR.dom.node(h);
-while(f&&b&&!b(f));return f},getParent:function(b){var h=this.$.parentNode;return h&&(h.nodeType==CKEDITOR.NODE_ELEMENT||b&&h.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT)?new CKEDITOR.dom.node(h):null},getParents:function(b){var h=this,f=[];do f[b?"push":"unshift"](h);while(h=h.getParent());return f},getCommonAncestor:function(b){if(b.equals(this))return this;if(b.contains&&b.contains(this))return b;var h=this.contains?this:this.getParent();do if(h.contains(b))return h;while(h=h.getParent());return null},
-getPosition:function(b){var h=this.$,f=b.$;if(h.compareDocumentPosition)return h.compareDocumentPosition(f);if(h==f)return CKEDITOR.POSITION_IDENTICAL;if(this.type==CKEDITOR.NODE_ELEMENT&&b.type==CKEDITOR.NODE_ELEMENT){if(h.contains){if(h.contains(f))return CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING;if(f.contains(h))return CKEDITOR.POSITION_IS_CONTAINED+CKEDITOR.POSITION_FOLLOWING}if("sourceIndex"in h)return 0>h.sourceIndex||0>f.sourceIndex?CKEDITOR.POSITION_DISCONNECTED:h.sourceIndex<
-f.sourceIndex?CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_FOLLOWING}h=this.getAddress();b=b.getAddress();for(var f=Math.min(h.length,b.length),e=0;e<f;e++)if(h[e]!=b[e])return h[e]<b[e]?CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_FOLLOWING;return h.length<b.length?CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_IS_CONTAINED+CKEDITOR.POSITION_FOLLOWING},getAscendant:function(b,h){var f=this.$,e,a;h||(f=f.parentNode);"function"==typeof b?(a=!0,e=b):(a=!1,e=function(a){a=
-"string"==typeof a.nodeName?a.nodeName.toLowerCase():"";return"string"==typeof b?a==b:a in b});for(;f;){if(e(a?new CKEDITOR.dom.node(f):f))return new CKEDITOR.dom.node(f);try{f=f.parentNode}catch(m){f=null}}return null},hasAscendant:function(b,h){var f=this.$;h||(f=f.parentNode);for(;f;){if(f.nodeName&&f.nodeName.toLowerCase()==b)return!0;f=f.parentNode}return!1},move:function(b,h){b.append(this.remove(),h)},remove:function(b){var h=this.$,f=h.parentNode;if(f){if(b)for(;b=h.firstChild;)f.insertBefore(h.removeChild(b),
-h);f.removeChild(h)}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 h=CKEDITOR.tools.ltrim(b.getText()),f=b.getLength();if(h)h.length<f&&(b.split(f-h.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 h=CKEDITOR.tools.rtrim(b.getText()),
-f=b.getLength();if(h)h.length<f&&(b.split(h.length),this.$.lastChild.parentNode.removeChild(this.$.lastChild));else{b.remove();continue}}break}CKEDITOR.env.needsBrFiller&&(b=this.$.lastChild)&&1==b.type&&"br"==b.nodeName.toLowerCase()&&b.parentNode.removeChild(b)},isReadOnly:function(b){var h=this;this.type!=CKEDITOR.NODE_ELEMENT&&(h=this.getParent());CKEDITOR.env.edge&&h&&h.is("textarea","input")&&(b=!0);if(!b&&h&&"undefined"!=typeof h.$.isContentEditable)return!(h.$.isContentEditable||h.data("cke-editable"));
-for(;h;){if(h.data("cke-editable"))return!1;if(h.hasAttribute("contenteditable"))return"false"==h.getAttribute("contenteditable");h=h.getParent()}return!0}}),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,h="CSS1Compat"==b.compatMode;return{width:(h?b.documentElement.clientWidth:b.body.clientWidth)||
-0,height:(h?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=
+CKEDITOR.EVENT_PHASE_AT_TARGET=2,CKEDITOR.EVENT_PHASE_BUBBLING=3,CKEDITOR.HISTORY_NATIVE=1,CKEDITOR.HISTORY_HASH=2,CKEDITOR.HISTORY_OFF=0,CKEDITOR.dom.domObject=function(b){b&&(this.$=b)},CKEDITOR.dom.domObject.prototype=function(){var b=function(b,f){return function(e){"undefined"!=typeof CKEDITOR&&b.fire(f,new CKEDITOR.dom.event(e))}};return{getPrivate:function(){var b;(b=this.getCustomData("_"))||this.setCustomData("_",b={});return b},on:function(h){var f=this.getCustomData("_cke_nativeListeners");
+f||(f={},this.setCustomData("_cke_nativeListeners",f));f[h]||(f=f[h]=b(this,h),this.$.addEventListener?this.$.addEventListener(h,f,!!CKEDITOR.event.useCapture):this.$.attachEvent&&this.$.attachEvent("on"+h,f));return CKEDITOR.event.prototype.on.apply(this,arguments)},removeListener:function(b){CKEDITOR.event.prototype.removeListener.apply(this,arguments);if(!this.hasListeners(b)){var f=this.getCustomData("_cke_nativeListeners"),e=f&&f[b];e&&(this.$.removeEventListener?this.$.removeEventListener(b,
+e,!1):this.$.detachEvent&&this.$.detachEvent("on"+b,e),delete f[b])}},removeAllListeners:function(){try{var b=this.getCustomData("_cke_nativeListeners"),f;for(f in b){var e=b[f];this.$.detachEvent?this.$.detachEvent("on"+f,e):this.$.removeEventListener&&this.$.removeEventListener(f,e,!1);delete b[f]}}catch(a){if(!CKEDITOR.env.edge||-2146828218!==a.number)throw a;}CKEDITOR.event.prototype.removeAllListeners.call(this)}}}(),function(b){var h={};CKEDITOR.on("reset",function(){h={}});b.equals=function(b){try{return b&&
+b.$===this.$}catch(e){return!1}};b.setCustomData=function(b,e){var a=this.getUniqueId();(h[a]||(h[a]={}))[b]=e;return this};b.getCustomData=function(b){var e=this.$["data-cke-expando"];return(e=e&&h[e])&&b in e?e[b]:null};b.removeCustomData=function(b){var e=this.$["data-cke-expando"],e=e&&h[e],a,k;e&&(a=e[b],k=b in e,delete e[b]);return k?a:null};b.clearCustomData=function(){this.removeAllListeners();var b=this.getUniqueId();b&&delete h[b]};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,h){b.append(this,h);return b},clone:function(b,h){function f(a){a["data-cke-expando"]&&(a["data-cke-expando"]=!1);if(a.nodeType==CKEDITOR.NODE_ELEMENT||
+a.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT)if(h||a.nodeType!=CKEDITOR.NODE_ELEMENT||a.removeAttribute("id",!1),b){a=a.childNodes;for(var e=0;e<a.length;e++)f(a[e])}}function e(a){if(a.type==CKEDITOR.NODE_ELEMENT||a.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT){if(a.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var f=a.getName();":"==f[0]&&a.renameNode(f.substring(1))}if(b)for(f=0;f<a.getChildCount();f++)e(a.getChild(f))}}var a=this.$.cloneNode(b);f(a);a=new CKEDITOR.dom.node(a);CKEDITOR.env.ie&&9>CKEDITOR.env.version&&
+(this.type==CKEDITOR.NODE_ELEMENT||this.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)&&e(a);return 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 h=[],f=this.getDocument().$.documentElement,
+e=this;e&&e!=f;){var a=e.getParent();a&&h.unshift(this.getIndex.call(e,b));e=a}return h},getDocument:function(){return new CKEDITOR.dom.document(this.$.ownerDocument||this.$.parentNode.ownerDocument)},getIndex:function(b){function h(a,b){var e=b?a.getNext():a.getPrevious();return e&&e.type==CKEDITOR.NODE_TEXT?e.isEmpty()?h(e,b):e:null}var f=this,e=-1,a;if(!this.getParent()||b&&f.type==CKEDITOR.NODE_TEXT&&f.isEmpty()&&!h(f)&&!h(f,!0))return-1;do if(!b||f.equals(this)||f.type!=CKEDITOR.NODE_TEXT||!a&&
+!f.isEmpty())e++,a=f.type==CKEDITOR.NODE_TEXT;while(f=f.getPrevious());return e},getNextSourceNode:function(b,h,f){if(f&&!f.call){var e=f;f=function(a){return!a.equals(e)}}b=!b&&this.getFirst&&this.getFirst();var a;if(!b){if(this.type==CKEDITOR.NODE_ELEMENT&&f&&!1===f(this,!0))return null;b=this.getNext()}for(;!b&&(a=(a||this).getParent());){if(f&&!1===f(a,!0))return null;b=a.getNext()}return!b||f&&!1===f(b)?null:h&&h!=b.type?b.getNextSourceNode(!1,h,f):b},getPreviousSourceNode:function(b,h,f){if(f&&
+!f.call){var e=f;f=function(a){return!a.equals(e)}}b=!b&&this.getLast&&this.getLast();var a;if(!b){if(this.type==CKEDITOR.NODE_ELEMENT&&f&&!1===f(this,!0))return null;b=this.getPrevious()}for(;!b&&(a=(a||this).getParent());){if(f&&!1===f(a,!0))return null;b=a.getPrevious()}return!b||f&&!1===f(b)?null:h&&b.type!=h?b.getPreviousSourceNode(!1,h,f):b},getPrevious:function(b){var h=this.$,f;do f=(h=h.previousSibling)&&10!=h.nodeType&&new CKEDITOR.dom.node(h);while(f&&b&&!b(f));return f},getNext:function(b){var h=
+this.$,f;do f=(h=h.nextSibling)&&new CKEDITOR.dom.node(h);while(f&&b&&!b(f));return f},getParent:function(b){var h=this.$.parentNode;return h&&(h.nodeType==CKEDITOR.NODE_ELEMENT||b&&h.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT)?new CKEDITOR.dom.node(h):null},getParents:function(b){var h=this,f=[];do f[b?"push":"unshift"](h);while(h=h.getParent());return f},getCommonAncestor:function(b){if(b.equals(this))return this;if(b.contains&&b.contains(this))return b;var h=this.contains?this:this.getParent();
+do if(h.contains(b))return h;while(h=h.getParent());return null},getPosition:function(b){var h=this.$,f=b.$;if(h.compareDocumentPosition)return h.compareDocumentPosition(f);if(h==f)return CKEDITOR.POSITION_IDENTICAL;if(this.type==CKEDITOR.NODE_ELEMENT&&b.type==CKEDITOR.NODE_ELEMENT){if(h.contains){if(h.contains(f))return CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING;if(f.contains(h))return CKEDITOR.POSITION_IS_CONTAINED+CKEDITOR.POSITION_FOLLOWING}if("sourceIndex"in h)return 0>h.sourceIndex||
+0>f.sourceIndex?CKEDITOR.POSITION_DISCONNECTED:h.sourceIndex<f.sourceIndex?CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_FOLLOWING}h=this.getAddress();b=b.getAddress();for(var f=Math.min(h.length,b.length),e=0;e<f;e++)if(h[e]!=b[e])return h[e]<b[e]?CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_FOLLOWING;return h.length<b.length?CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_IS_CONTAINED+CKEDITOR.POSITION_FOLLOWING},getAscendant:function(b,h){var f=this.$,e,a;h||(f=f.parentNode);
+"function"==typeof b?(a=!0,e=b):(a=!1,e=function(a){a="string"==typeof a.nodeName?a.nodeName.toLowerCase():"";return"string"==typeof b?a==b:a in b});for(;f;){if(e(a?new CKEDITOR.dom.node(f):f))return new CKEDITOR.dom.node(f);try{f=f.parentNode}catch(k){f=null}}return null},hasAscendant:function(b,h){var f=this.$;h||(f=f.parentNode);for(;f;){if(f.nodeName&&f.nodeName.toLowerCase()==b)return!0;f=f.parentNode}return!1},move:function(b,h){b.append(this.remove(),h)},remove:function(b){var h=this.$,f=h.parentNode;
+if(f){if(b)for(;b=h.firstChild;)f.insertBefore(h.removeChild(b),h);f.removeChild(h)}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 h=CKEDITOR.tools.ltrim(b.getText()),f=b.getLength();if(h)h.length<f&&(b.split(f-h.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 h=CKEDITOR.tools.rtrim(b.getText()),f=b.getLength();if(h)h.length<f&&(b.split(h.length),this.$.lastChild.parentNode.removeChild(this.$.lastChild));else{b.remove();continue}}break}CKEDITOR.env.needsBrFiller&&(b=this.$.lastChild)&&1==b.type&&"br"==b.nodeName.toLowerCase()&&b.parentNode.removeChild(b)},isReadOnly:function(b){var h=this;this.type!=CKEDITOR.NODE_ELEMENT&&(h=this.getParent());CKEDITOR.env.edge&&h&&h.is("textarea","input")&&(b=!0);if(!b&&h&&"undefined"!=typeof h.$.isContentEditable)return!(h.$.isContentEditable||
+h.data("cke-editable"));for(;h;){if(h.data("cke-editable"))return!1;if(h.hasAttribute("contenteditable"))return"false"==h.getAttribute("contenteditable");h=h.getParent()}return!0}}),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,h="CSS1Compat"==b.compatMode;return{width:(h?b.documentElement.clientWidth:
+b.body.clientWidth)||0,height:(h?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 h=new CKEDITOR.dom.element("link");h.setAttributes({rel:"stylesheet",type:"text/css",href:b});this.getHead().append(h)}},appendStyleText:function(b){if(this.$.createStyleSheet){var h=this.$.createStyleSheet("");h.cssText=b}else{var f=new CKEDITOR.dom.element("style",this);f.append(new CKEDITOR.dom.text(b,
 this));this.getHead().append(f)}return h||f.$.sheet},createElement:function(b,h){var f=new CKEDITOR.dom.element(b,this);h&&(h.attributes&&f.setAttributes(h.attributes),h.styles&&f.setStyles(h.styles));return f},createText:function(b){return new CKEDITOR.dom.text(b,this)},focus:function(){this.getWindow().focus()},getActive:function(){var b;try{b=this.$.activeElement}catch(h){return null}return new CKEDITOR.dom.element(b)},getById:function(b){return(b=this.$.getElementById(b))?new CKEDITOR.dom.element(b):
-null},getByAddress:function(b,h){for(var f=this.$.documentElement,e=0;f&&e<b.length;e++){var a=b[e];if(h)for(var m=-1,k=0;k<f.childNodes.length;k++){var l=f.childNodes[k];if(!0!==h||3!=l.nodeType||!l.previousSibling||3!=l.previousSibling.nodeType)if(m++,m==a){f=l;break}}else f=f.childNodes[a]}return f?new CKEDITOR.dom.node(f):null},getElementsByTag:function(b,h){CKEDITOR.env.ie&&8>=document.documentMode||!h||(b=h+":"+b);return new CKEDITOR.dom.nodeList(this.$.getElementsByTagName(b))},getHead:function(){var b=
+null},getByAddress:function(b,h){for(var f=this.$.documentElement,e=0;f&&e<b.length;e++){var a=b[e];if(h)for(var k=-1,l=0;l<f.childNodes.length;l++){var m=f.childNodes[l];if(!0!==h||3!=m.nodeType||!m.previousSibling||3!=m.previousSibling.nodeType)if(k++,k==a){f=m;break}}else f=f.childNodes[a]}return f?new CKEDITOR.dom.node(f):null},getElementsByTag:function(b,h){CKEDITOR.env.ie&&8>=document.documentMode||!h||(b=h+":"+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"),!0)},getBody:function(){return new CKEDITOR.dom.element(this.$.body)},getDocumentElement:function(){return new CKEDITOR.dom.element(this.$.documentElement)},getWindow:function(){return new CKEDITOR.dom.window(this.$.parentWindow||this.$.defaultView)},write:function(b){this.$.open("text/html","replace");CKEDITOR.env.ie&&(b=b.replace(/(?:^\s*<!DOCTYPE[^>]*?>)|^/i,
 '$\x26\n\x3cscript data-cke-temp\x3d"1"\x3e('+CKEDITOR.tools.fixDomain+")();\x3c/script\x3e"));this.$.write(b);this.$.close()},find:function(b){return new CKEDITOR.dom.nodeList(this.$.querySelectorAll(b))},findOne:function(b){return(b=this.$.querySelector(b))?new CKEDITOR.dom.element(b):null},_getHtml5ShivFrag:function(){var b=this.getCustomData("html5ShivFrag");b||(b=this.$.createDocumentFragment(),CKEDITOR.tools.enableHtml5Elements(b,!0),this.setCustomData("html5ShivFrag",b));return b}}),CKEDITOR.dom.nodeList=
 function(b){this.$=b},CKEDITOR.dom.nodeList.prototype={count:function(){return this.$.length},getItem:function(b){return 0>b||b>=this.$.length?null:(b=this.$[b])?new CKEDITOR.dom.node(b):null},toArray:function(){return CKEDITOR.tools.array.map(this.$,function(b){return new CKEDITOR.dom.node(b)})}},CKEDITOR.dom.element=function(b,h){"string"==typeof b&&(b=(h?h.$:document).createElement(b));CKEDITOR.dom.domObject.call(this,b)},CKEDITOR.dom.element.get=function(b){return(b="string"==typeof b?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,h){var f=new CKEDITOR.dom.element("div",h);f.setHtml(b);return f.getFirst().remove()},CKEDITOR.dom.element.setMarker=function(b,h,f,e){var a=h.getCustomData("list_marker_id")||h.setCustomData("list_marker_id",CKEDITOR.tools.getNextNumber()).getCustomData("list_marker_id"),m=h.getCustomData("list_marker_names")||h.setCustomData("list_marker_names",
-{}).getCustomData("list_marker_names");b[a]=h;m[f]=1;return h.setCustomData(f,e)},CKEDITOR.dom.element.clearAllMarkers=function(b){for(var h in b)CKEDITOR.dom.element.clearMarkers(b,b[h],1)},CKEDITOR.dom.element.clearMarkers=function(b,h,f){var e=h.getCustomData("list_marker_names"),a=h.getCustomData("list_marker_id"),m;for(m in e)h.removeCustomData(m);h.removeCustomData("list_marker_names");f&&(h.removeCustomData("list_marker_id"),delete b[a])},function(){function b(a,c){return-1<(" "+a+" ").replace(m,
-" ").indexOf(" "+c+" ")}function h(a){var c=!0;a.$.id||(a.$.id="cke_tmp_"+CKEDITOR.tools.getNextNumber(),c=!1);return function(){c||a.removeAttribute("id")}}function f(a,c){var d=CKEDITOR.tools.escapeCss(a.$.id);return"#"+d+" "+c.split(/,\s*/).join(", #"+d+" ")}function e(a){for(var c=0,d=0,g=k[a].length;d<g;d++)c+=parseFloat(this.getComputedStyle(k[a][d])||0,10)||0;return c}var a=document.createElement("_").classList,a="undefined"!==typeof a&&null!==String(a.add).match(/\[Native code\]/gi),m=/[\n\t\r]/g;
+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,h){var f=new CKEDITOR.dom.element("div",h);f.setHtml(b);return f.getFirst().remove()},CKEDITOR.dom.element.setMarker=function(b,h,f,e){var a=h.getCustomData("list_marker_id")||h.setCustomData("list_marker_id",CKEDITOR.tools.getNextNumber()).getCustomData("list_marker_id"),k=h.getCustomData("list_marker_names")||h.setCustomData("list_marker_names",
+{}).getCustomData("list_marker_names");b[a]=h;k[f]=1;return h.setCustomData(f,e)},CKEDITOR.dom.element.clearAllMarkers=function(b){for(var h in b)CKEDITOR.dom.element.clearMarkers(b,b[h],1)},CKEDITOR.dom.element.clearMarkers=function(b,h,f){var e=h.getCustomData("list_marker_names"),a=h.getCustomData("list_marker_id"),k;for(k in e)h.removeCustomData(k);h.removeCustomData("list_marker_names");f&&(h.removeCustomData("list_marker_id"),delete b[a])},function(){function b(a,c){return-1<(" "+a+" ").replace(k,
+" ").indexOf(" "+c+" ")}function h(a){var c=!0;a.$.id||(a.$.id="cke_tmp_"+CKEDITOR.tools.getNextNumber(),c=!1);return function(){c||a.removeAttribute("id")}}function f(a,c){var d=CKEDITOR.tools.escapeCss(a.$.id);return"#"+d+" "+c.split(/,\s*/).join(", #"+d+" ")}function e(a){for(var c=0,d=0,g=l[a].length;d<g;d++)c+=parseFloat(this.getComputedStyle(l[a][d])||0,10)||0;return c}var a=document.createElement("_").classList,a="undefined"!==typeof a&&null!==String(a.add).match(/\[Native code\]/gi),k=/[\n\t\r]/g;
 CKEDITOR.tools.extend(CKEDITOR.dom.element.prototype,{type:CKEDITOR.NODE_ELEMENT,addClass:a?function(a){this.$.classList.add(a);return this}:function(a){var c=this.$.className;c&&(b(c,a)||(c+=" "+a));this.$.className=c||a;return this},removeClass:a?function(a){var c=this.$;c.classList.remove(a);c.className||c.removeAttribute("class");return this}:function(a){var c=this.getAttribute("class");c&&b(c,a)&&((c=c.replace(new RegExp("(?:^|\\s+)"+a+"(?\x3d\\s|$)"),"").replace(/^\s+/,""))?this.setAttribute("class",
 c):this.removeAttribute("class"));return this},hasClass:function(a){return b(this.$.className,a)},append:function(a,c){"string"==typeof a&&(a=this.getDocument().createElement(a));c?this.$.insertBefore(a.$,this.$.firstChild):this.$.appendChild(a.$);return a},appendHtml:function(a){if(this.$.childNodes.length){var c=new CKEDITOR.dom.element("div",this.getDocument());c.setHtml(a);c.moveChildren(this)}else this.setHtml(a)},appendText:function(a){null!=this.$.text&&CKEDITOR.env.ie&&9>CKEDITOR.env.version?
 this.$.text+=a:this.append(new CKEDITOR.dom.text(a))},appendBogus:function(a){if(a||CKEDITOR.env.needsBrFiller){for(a=this.getLast();a&&a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.rtrim(a.getText());)a=a.getPrevious();a&&a.is&&a.is("br")||(a=this.getDocument().createElement("br"),CKEDITOR.env.gecko&&a.setAttribute("type","_moz"),this.append(a))}},breakParent:function(a,c){var d=new CKEDITOR.dom.range(this.getDocument());d.setStartAfter(this);d.setEndAfter(a);var g=d.extractContents(!1,c||!1),b;d.insertNode(this.remove());
 if(CKEDITOR.env.ie&&!CKEDITOR.env.edge){for(d=new CKEDITOR.dom.element("div");b=g.getFirst();)b.$.style.backgroundColor&&(b.$.style.backgroundColor=b.$.style.backgroundColor),d.append(b);d.insertAfter(this);d.remove(!0)}else g.insertAfterNode(this)},contains:document.compareDocumentPosition?function(a){return!!(this.$.compareDocumentPosition(a.$)&16)}:function(a){var c=this.$;return a.type!=CKEDITOR.NODE_ELEMENT?c.contains(a.getParent().$):c!=a.$&&c.contains(a.$)},focus:function(){function a(){try{this.$.focus()}catch(c){}}
 return function(c){c?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(!0));return a.innerHTML},getClientRect:function(a){var c=CKEDITOR.tools.extend({},this.$.getBoundingClientRect());!c.width&&(c.width=c.right-c.left);!c.height&&
 (c.height=c.bottom-c.top);return a?CKEDITOR.tools.getAbsoluteRectPosition(this.getWindow(),c):c},setHtml:CKEDITOR.env.ie&&9>CKEDITOR.env.version?function(a){try{var c=this.$;if(this.getParent())return c.innerHTML=a;var d=this.getDocument()._getHtml5ShivFrag();d.appendChild(c);c.innerHTML=a;d.removeChild(c);return a}catch(g){this.$.innerHTML="";c=new CKEDITOR.dom.element("body",this.getDocument());c.$.innerHTML=a;for(c=c.getChildren();c.count();)this.append(c.getItem(0));return a}}:function(a){return this.$.innerHTML=
-a},setText:function(){var a=document.createElement("p");a.innerHTML="x";a=a.textContent;return function(c){this.$[a?"textContent":"innerText"]=c}}(),getAttribute:function(){var a=function(c){return this.$.getAttribute(c,2)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(c){switch(c){case "class":c="className";break;case "http-equiv":c="httpEquiv";break;case "name":return this.$.name;case "tabindex":return c=this.$.getAttribute(c,2),0!==c&&0===this.$.tabIndex&&(c=null),
-c;case "checked":return c=this.$.attributes.getNamedItem(c),(c.specified?c.nodeValue:this.$.checked)?"checked":null;case "hspace":case "value":return this.$[c];case "style":return this.$.style.cssText;case "contenteditable":case "contentEditable":return this.$.attributes.getNamedItem("contentEditable").specified?this.$.getAttribute("contentEditable"):null}return this.$.getAttribute(c,2)}:a}(),getAttributes:function(a){var c={},d=this.$.attributes,g;a=CKEDITOR.tools.isArray(a)?a:[];for(g=0;g<d.length;g++)-1===
+a},setText:function(){var a=document.createElement("p");a.innerHTML="x";a=a.textContent;return function(c){this.$[a?"textContent":"innerText"]=c}}(),getAttribute:function(){var a=function(a){return this.$.getAttribute(a,2)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(a){switch(a){case "class":a="className";break;case "http-equiv":a="httpEquiv";break;case "name":return this.$.name;case "tabindex":return a=this.$.getAttribute(a,2),0!==a&&0===this.$.tabIndex&&(a=null),
+a;case "checked":return a=this.$.attributes.getNamedItem(a),(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}(),getAttributes:function(a){var c={},d=this.$.attributes,g;a=CKEDITOR.tools.isArray(a)?a:[];for(g=0;g<d.length;g++)-1===
 CKEDITOR.tools.indexOf(a,d[g].name)&&(c[d[g].name]=d[g].value);return c},getChildren:function(){return new CKEDITOR.dom.nodeList(this.$.childNodes)},getClientSize:function(){return{width:this.$.clientWidth,height:this.$.clientHeight}},getComputedStyle:document.defaultView&&document.defaultView.getComputedStyle?function(a){var c=this.getWindow().$.getComputedStyle(this.$,null);return c?c.getPropertyValue(a):""}:function(a){return this.$.currentStyle[CKEDITOR.tools.cssStyleToDomStyle(a)]},getDtd:function(){var a=
 CKEDITOR.dtd[this.getName()];this.getDtd=function(){return a};return a},getElementsByTag:CKEDITOR.dom.document.prototype.getElementsByTag,getTabIndex:function(){var a=this.$.tabIndex;return 0!==a||CKEDITOR.dtd.$tabIndex[this.getName()]||0===parseInt(this.getAttribute("tabindex"),10)?a:-1},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&&8>=document.documentMode){var c=this.$.scopeName;"HTML"!=c&&(a=c.toLowerCase()+":"+a)}this.getName=function(){return a};return this.getName()},getValue:function(){return this.$.value},getFirst:function(a){var c=this.$.firstChild;(c=c&&new CKEDITOR.dom.node(c))&&a&&!a(c)&&(c=c.getNext(a));return c},getLast:function(a){var c=this.$.lastChild;(c=c&&new CKEDITOR.dom.node(c))&&a&&!a(c)&&(c=c.getPrevious(a));return c},getStyle:function(a){return this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]},
@@ -112,41 +112,41 @@ arguments)}catch(g){}else a.apply(this,arguments);return this}:a}(),setAttribute
 0;c<a.length;c++)this.removeAttribute(a[c]);else for(c in a=a||this.getAttributes(),a)a.hasOwnProperty(c)&&this.removeAttribute(c)},removeStyle:function(a){var c=this.$.style;if(c.removeProperty||"border"!=a&&"margin"!=a&&"padding"!=a)c.removeProperty?c.removeProperty(a):c.removeAttribute(CKEDITOR.tools.cssStyleToDomStyle(a)),this.$.style.cssText||this.removeAttribute("style");else{var d=["top","left","right","bottom"],g;"border"==a&&(g=["color","style","width"]);for(var c=[],b=0;b<d.length;b++)if(g)for(var e=
 0;e<g.length;e++)c.push([a,d[b],g[e]].join("-"));else c.push([a,d[b]].join("-"));for(a=0;a<c.length;a++)this.removeStyle(c[a])}},setStyle:function(a,c){this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]=c;return this},setStyles:function(a){for(var c in a)this.setStyle(c,a[c]);return this},setOpacity:function(a){CKEDITOR.env.ie&&9>CKEDITOR.env.version?(a=Math.round(100*a),this.setStyle("filter",100<=a?"":"progid:DXImageTransform.Microsoft.Alpha(opacity\x3d"+a+")")):this.setStyle("opacity",a)},unselectable:function(){this.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select",
 "none"));if(CKEDITOR.env.ie){this.setAttribute("unselectable","on");for(var a,c=this.getElementsByTag("*"),d=0,g=c.count();d<g;d++)a=c.getItem(d),a.setAttribute("unselectable","on")}},getPositionedAncestor:function(){for(var a=this;"html"!=a.getName();){if("static"!=a.getComputedStyle("position"))return a;a=a.getParent()}return null},getDocumentPosition:function(a){var c=0,d=0,g=this.getDocument(),b=g.getBody(),e="BackCompat"==g.$.compatMode;if(document.documentElement.getBoundingClientRect&&(CKEDITOR.env.ie?
-8!==CKEDITOR.env.version:1)){var f=this.$.getBoundingClientRect(),m=g.$.documentElement,h=m.clientTop||b.$.clientTop||0,r=m.clientLeft||b.$.clientLeft||0,k=!0;CKEDITOR.env.ie&&(k=g.getDocumentElement().contains(this),g=g.getBody().contains(this),k=e&&g||!e&&k);k&&(CKEDITOR.env.webkit||CKEDITOR.env.ie&&12<=CKEDITOR.env.version?(c=b.$.scrollLeft||m.scrollLeft,d=b.$.scrollTop||m.scrollTop):(d=e?b.$:m,c=d.scrollLeft,d=d.scrollTop),c=f.left+c-r,d=f.top+d-h)}else for(h=this,r=null;h&&"body"!=h.getName()&&
+8!==CKEDITOR.env.version:1)){var f=this.$.getBoundingClientRect(),k=g.$.documentElement,h=k.clientTop||b.$.clientTop||0,r=k.clientLeft||b.$.clientLeft||0,l=!0;CKEDITOR.env.ie&&(l=g.getDocumentElement().contains(this),g=g.getBody().contains(this),l=e&&g||!e&&l);l&&(CKEDITOR.env.webkit||CKEDITOR.env.ie&&12<=CKEDITOR.env.version?(c=b.$.scrollLeft||k.scrollLeft,d=b.$.scrollTop||k.scrollTop):(d=e?b.$:k,c=d.scrollLeft,d=d.scrollTop),c=f.left+c-r,d=f.top+d-h)}else for(h=this,r=null;h&&"body"!=h.getName()&&
 "html"!=h.getName();){c+=h.$.offsetLeft-h.$.scrollLeft;d+=h.$.offsetTop-h.$.scrollTop;h.equals(this)||(c+=h.$.clientLeft||0,d+=h.$.clientTop||0);for(;r&&!r.equals(h);)c-=r.$.scrollLeft,d-=r.$.scrollTop,r=r.getParent();r=h;h=(f=h.$.offsetParent)?new CKEDITOR.dom.element(f):null}a&&(f=this.getWindow(),h=a.getWindow(),!f.equals(h)&&f.$.frameElement&&(a=(new CKEDITOR.dom.element(f.$.frameElement)).getDocumentPosition(a),c+=a.x,d+=a.y));document.documentElement.getBoundingClientRect||!CKEDITOR.env.gecko||
-e||(c+=this.$.clientLeft?1:0,d+=this.$.clientTop?1:0);return{x:c,y:d}},scrollIntoView:function(a){var c=this.getParent();if(c){do if((c.$.clientWidth&&c.$.clientWidth<c.$.scrollWidth||c.$.clientHeight&&c.$.clientHeight<c.$.scrollHeight)&&!c.is("body")&&this.scrollIntoParent(c,a,1),c.is("html")){var d=c.getWindow();try{var g=d.$.frameElement;g&&(c=new CKEDITOR.dom.element(g))}catch(b){}}while(c=c.getParent())}},scrollIntoParent:function(a,c,d){var g,b,e,f;function h(g,c){/body|html/.test(a.getName())?
-a.getWindow().$.scrollBy(g,c):(a.$.scrollLeft+=g,a.$.scrollTop+=c)}function m(g,a){var c={x:0,y:0};if(!g.is(k?"body":"html")){var d=g.$.getBoundingClientRect();c.x=d.left;c.y=d.top}d=g.getWindow();d.equals(a)||(d=m(CKEDITOR.dom.element.get(d.$.frameElement),a),c.x+=d.x,c.y+=d.y);return c}function r(g,a){return parseInt(g.getComputedStyle("margin-"+a)||0,10)||0}!a&&(a=this.getWindow());e=a.getDocument();var k="BackCompat"==e.$.compatMode;a instanceof CKEDITOR.dom.window&&(a=k?e.getBody():e.getDocumentElement());
-CKEDITOR.env.webkit&&(e=this.getEditor(!1))&&(e._.previousScrollTop=null);e=a.getWindow();b=m(this,e);var u=m(a,e),z=this.$.offsetHeight;g=this.$.offsetWidth;var q=a.$.clientHeight,v=a.$.clientWidth;e=b.x-r(this,"left")-u.x||0;f=b.y-r(this,"top")-u.y||0;g=b.x+g+r(this,"right")-(u.x+v)||0;b=b.y+z+r(this,"bottom")-(u.y+q)||0;(0>f||0<b)&&h(0,!0===c?f:!1===c?b:0>f?f:b);d&&(0>e||0<g)&&h(0>e?e:g,0)},setState:function(a,c,d){c=c||"cke";switch(a){case CKEDITOR.TRISTATE_ON:this.addClass(c+"_on");this.removeClass(c+
+e||(c+=this.$.clientLeft?1:0,d+=this.$.clientTop?1:0);return{x:c,y:d}},scrollIntoView:function(a){var c=this.getParent();if(c){do if((c.$.clientWidth&&c.$.clientWidth<c.$.scrollWidth||c.$.clientHeight&&c.$.clientHeight<c.$.scrollHeight)&&!c.is("body")&&this.scrollIntoParent(c,a,1),c.is("html")){var d=c.getWindow();try{var g=d.$.frameElement;g&&(c=new CKEDITOR.dom.element(g))}catch(b){}}while(c=c.getParent())}},scrollIntoParent:function(a,c,d){var g,b,e,f;function k(g,c){/body|html/.test(a.getName())?
+a.getWindow().$.scrollBy(g,c):(a.$.scrollLeft+=g,a.$.scrollTop+=c)}function h(a,g){var c={x:0,y:0};if(!a.is(l?"body":"html")){var d=a.$.getBoundingClientRect();c.x=d.left;c.y=d.top}d=a.getWindow();d.equals(g)||(d=h(CKEDITOR.dom.element.get(d.$.frameElement),g),c.x+=d.x,c.y+=d.y);return c}function r(a,g){return parseInt(a.getComputedStyle("margin-"+g)||0,10)||0}!a&&(a=this.getWindow());e=a.getDocument();var l="BackCompat"==e.$.compatMode;a instanceof CKEDITOR.dom.window&&(a=l?e.getBody():e.getDocumentElement());
+CKEDITOR.env.webkit&&(e=this.getEditor(!1))&&(e._.previousScrollTop=null);e=a.getWindow();b=h(this,e);var t=h(a,e),z=this.$.offsetHeight;g=this.$.offsetWidth;var u=a.$.clientHeight,w=a.$.clientWidth;e=b.x-r(this,"left")-t.x||0;f=b.y-r(this,"top")-t.y||0;g=b.x+g+r(this,"right")-(t.x+w)||0;b=b.y+z+r(this,"bottom")-(t.y+u)||0;(0>f||0<b)&&k(0,!0===c?f:!1===c?b:0>f?f:b);d&&(0>e||0<g)&&k(0>e?e:g,0)},setState:function(a,c,d){c=c||"cke";switch(a){case CKEDITOR.TRISTATE_ON:this.addClass(c+"_on");this.removeClass(c+
 "_off");this.removeClass(c+"_disabled");d&&this.setAttribute("aria-pressed",!0);d&&this.removeAttribute("aria-disabled");break;case CKEDITOR.TRISTATE_DISABLED:this.addClass(c+"_disabled");this.removeClass(c+"_off");this.removeClass(c+"_on");d&&this.setAttribute("aria-disabled",!0);d&&this.removeAttribute("aria-pressed");break;default:this.addClass(c+"_off"),this.removeClass(c+"_on"),this.removeClass(c+"_disabled"),d&&this.removeAttribute("aria-pressed"),d&&this.removeAttribute("aria-disabled")}},
 getFrameDocument:function(){var a=this.$;try{a.contentWindow.document}catch(c){a.src=a.src}return a&&new CKEDITOR.dom.document(a.contentWindow.document)},copyAttributes:function(a,c){var d=this.$.attributes;c=c||{};for(var g=0;g<d.length;g++){var b=d[g],e=b.nodeName.toLowerCase(),f;if(!(e in c))if("checked"==e&&(f=this.getAttribute(e)))a.setAttribute(e,f);else if(!CKEDITOR.env.ie||this.hasAttribute(e))f=this.getAttribute(e),null===f&&(f=b.nodeValue),a.setAttribute(e,f)}""!==this.$.style.cssText&&
 (a.$.style.cssText=this.$.style.cssText)},renameNode:function(a){if(this.getName()!=a){var c=this.getDocument();a=new CKEDITOR.dom.element(a,c);this.copyAttributes(a);this.moveChildren(a);this.getParent(!0)&&this.$.parentNode.replaceChild(a.$,this.$);a.$["data-cke-expando"]=this.$["data-cke-expando"];this.$=a.$;delete this.getName}},getChild:function(){function a(c,d){var g=c.childNodes;if(0<=d&&d<g.length)return g[d]}return function(c){var d=this.$;if(c.slice)for(c=c.slice();0<c.length&&d;)d=a(d,
 c.shift());else d=a(d,c);return d?new CKEDITOR.dom.node(d):null}}(),getChildCount:function(){return this.$.childNodes.length},disableContextMenu:function(){function a(c){return c.type==CKEDITOR.NODE_ELEMENT&&c.hasClass("cke_enable_context_menu")}this.on("contextmenu",function(c){c.data.getTarget().getAscendant(a,!0)||c.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,c){a="data-"+a;if(void 0===c)return this.getAttribute(a);!1===c?this.removeAttribute(a):this.setAttribute(a,c);return null},getEditor:function(a){var c=CKEDITOR.instances,d,g,b;a=a||void 0===a;for(d in c)if(g=c[d],g.element.equals(this)&&g.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO||!a&&(b=g.editable())&&(b.equals(this)||b.contains(this)))return g;return null},find:function(a){var c=h(this);a=new CKEDITOR.dom.nodeList(this.$.querySelectorAll(f(this,
 a)));c();return a},findOne:function(a){var c=h(this);a=this.$.querySelector(f(this,a));c();return a?new CKEDITOR.dom.element(a):null},forEach:function(a,c,d){if(!(d||c&&this.type!=c))var g=a(this);if(!1!==g){d=this.getChildren();for(var b=0;b<d.count();b++)g=d.getItem(b),g.type==CKEDITOR.NODE_ELEMENT?g.forEach(a,c):c&&g.type!=c||a(g)}},fireEventHandler:function(a,c){var d="on"+a,g=this.$;if(CKEDITOR.env.ie&&9>CKEDITOR.env.version){var b=g.ownerDocument.createEventObject(),e;for(e in c)b[e]=c[e];g.fireEvent(d,
-b)}else g[g[a]?a:d](c)},isDetached:function(){var a=this.getDocument(),c=a.getDocumentElement();return c.equals(this)||c.contains(this)?!CKEDITOR.env.ie||8<CKEDITOR.env.version&&!CKEDITOR.env.quirks?!a.$.defaultView:!1:!0}});var k={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,d){"number"==typeof c&&(!d||CKEDITOR.env.ie&&CKEDITOR.env.quirks||
+b)}else g[g[a]?a:d](c)},isDetached:function(){var a=this.getDocument(),c=a.getDocumentElement();return c.equals(this)||c.contains(this)?!CKEDITOR.env.ie||8<CKEDITOR.env.version&&!CKEDITOR.env.quirks?!a.$.defaultView:!1:!0}});var l={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,d){"number"==typeof c&&(!d||CKEDITOR.env.ie&&CKEDITOR.env.quirks||
 (c-=e.call(this,a)),this.setStyle(a,c+"px"))};CKEDITOR.dom.element.prototype.getSize=function(a,c){var d=Math.max(this.$["offset"+CKEDITOR.tools.capitalize(a)],this.$["client"+CKEDITOR.tools.capitalize(a)])||0;c&&(d-=e.call(this,a));return d}}(),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)},getHtml:function(){var b=new CKEDITOR.dom.element("div");this.clone(1,1).appendTo(b);return b.getHtml().replace(/\s*data-cke-expando=".*?"/g,"")}},!0,{append:1,appendBogus:1,clone:1,getFirst:1,getHtml: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}),CKEDITOR.tools.extend(CKEDITOR.dom.documentFragment.prototype,
-CKEDITOR.dom.document.prototype,!0,{find:1,findOne:1}),function(){function b(a,g){var c=this.range;if(this._.end)return null;if(!this._.start){this._.start=1;if(c.collapsed)return this.end(),null;c.optimize()}var d,b=c.startContainer;d=c.endContainer;var e=c.startOffset,n=c.endOffset,f,h=this.guard,m=this.type,k=a?"getPreviousSourceNode":"getNextSourceNode";if(!a&&!this._.guardLTR){var l=d.type==CKEDITOR.NODE_ELEMENT?d:d.getParent(),A=d.type==CKEDITOR.NODE_ELEMENT?d.getChild(n):d.getNext();this._.guardLTR=
-function(a,g){return(!g||!l.equals(a))&&(!A||!a.equals(A))&&(a.type!=CKEDITOR.NODE_ELEMENT||!g||!a.equals(c.root))}}if(a&&!this._.guardRTL){var E=b.type==CKEDITOR.NODE_ELEMENT?b:b.getParent(),F=b.type==CKEDITOR.NODE_ELEMENT?e?b.getChild(e-1):null:b.getPrevious();this._.guardRTL=function(a,g){return(!g||!E.equals(a))&&(!F||!a.equals(F))&&(a.type!=CKEDITOR.NODE_ELEMENT||!g||!a.equals(c.root))}}var K=a?this._.guardRTL:this._.guardLTR;f=h?function(a,g){return!1===K(a,g)?!1:h(a,g)}:K;this.current?d=this.current[k](!1,
-m,f):(a?d.type==CKEDITOR.NODE_ELEMENT&&(d=0<n?d.getChild(n-1):!1===f(d,!0)?null:d.getPreviousSourceNode(!0,m,f)):(d=b,d.type==CKEDITOR.NODE_ELEMENT&&((d=d.getChild(e))||(d=!1===f(b,!0)?null:b.getNextSourceNode(!0,m,f)))),d&&!1===f(d)&&(d=null));for(;d&&!this._.end;){this.current=d;if(!this.evaluator||!1!==this.evaluator(d)){if(!g)return d}else if(g&&this.evaluator)return!1;d=d[k](!1,m,f)}this.end();return this.current=null}function h(a){for(var g,c=null;g=b.call(this,a);)c=g;return c}CKEDITOR.dom.walker=
+CKEDITOR.dom.document.prototype,!0,{find:1,findOne:1}),function(){function b(a,g){var c=this.range;if(this._.end)return null;if(!this._.start){this._.start=1;if(c.collapsed)return this.end(),null;c.optimize()}var d,b=c.startContainer;d=c.endContainer;var e=c.startOffset,n=c.endOffset,f,k=this.guard,h=this.type,l=a?"getPreviousSourceNode":"getNextSourceNode";if(!a&&!this._.guardLTR){var m=d.type==CKEDITOR.NODE_ELEMENT?d:d.getParent(),A=d.type==CKEDITOR.NODE_ELEMENT?d.getChild(n):d.getNext();this._.guardLTR=
+function(a,g){return(!g||!m.equals(a))&&(!A||!a.equals(A))&&(a.type!=CKEDITOR.NODE_ELEMENT||!g||!a.equals(c.root))}}if(a&&!this._.guardRTL){var E=b.type==CKEDITOR.NODE_ELEMENT?b:b.getParent(),F=b.type==CKEDITOR.NODE_ELEMENT?e?b.getChild(e-1):null:b.getPrevious();this._.guardRTL=function(a,g){return(!g||!E.equals(a))&&(!F||!a.equals(F))&&(a.type!=CKEDITOR.NODE_ELEMENT||!g||!a.equals(c.root))}}var K=a?this._.guardRTL:this._.guardLTR;f=k?function(a,g){return!1===K(a,g)?!1:k(a,g)}:K;this.current?d=this.current[l](!1,
+h,f):(a?d.type==CKEDITOR.NODE_ELEMENT&&(d=0<n?d.getChild(n-1):!1===f(d,!0)?null:d.getPreviousSourceNode(!0,h,f)):(d=b,d.type==CKEDITOR.NODE_ELEMENT&&((d=d.getChild(e))||(d=!1===f(b,!0)?null:b.getNextSourceNode(!0,h,f)))),d&&!1===f(d)&&(d=null));for(;d&&!this._.end;){this.current=d;if(!this.evaluator||!1!==this.evaluator(d)){if(!g)return d}else if(g&&this.evaluator)return!1;d=d[l](!1,h,f)}this.end();return this.current=null}function h(a){for(var g,c=null;g=b.call(this,a);)c=g;return c}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!1!==b.call(this,0,1)},checkBackward:function(){return!1!==b.call(this,1,1)},lastForward:function(){return h.call(this)},lastBackward:function(){return h.call(this,1)},reset:function(){delete this.current;this._={}}}});var f={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},e={absolute:1,fixed:1};CKEDITOR.dom.element.prototype.isBlockBoundary=function(a){return"none"!=this.getComputedStyle("float")||this.getComputedStyle("position")in e||!f[this.getComputedStyle("display")]?!!(this.is(CKEDITOR.dtd.$block)||a&&this.is(a)):!0};CKEDITOR.dom.walker.blockBoundary=function(a){return function(g){return!(g.type==CKEDITOR.NODE_ELEMENT&&g.isBlockBoundary(a))}};CKEDITOR.dom.walker.listItemBoundary=
 function(){return this.blockBoundary({br:1})};CKEDITOR.dom.walker.bookmark=function(a,g){function c(a){return a&&a.getName&&"span"==a.getName()&&a.data("cke-bookmark")}return function(d){var b,e;b=d&&d.type!=CKEDITOR.NODE_ELEMENT&&(e=d.getParent())&&c(e);b=a?b:b||c(d);return!!(g^b)}};CKEDITOR.dom.walker.whitespaces=function(a){return function(g){var c;g&&g.type==CKEDITOR.NODE_TEXT&&(c=!CKEDITOR.tools.trim(g.getText())||CKEDITOR.env.webkit&&g.getText()==CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE);
-return!!(a^c)}};CKEDITOR.dom.walker.invisible=function(a){var g=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.env.webkit?1:0;return function(d){g(d)?d=1:(d.type==CKEDITOR.NODE_TEXT&&(d=d.getParent()),d=d.$.offsetWidth<=c);return!!(a^d)}};CKEDITOR.dom.walker.nodeType=function(a,g){return function(c){return!!(g^c.type==a)}};CKEDITOR.dom.walker.bogus=function(g){function c(a){return!m(a)&&!k(a)}return function(d){var b=CKEDITOR.env.needsBrFiller?d.is&&d.is("br"):d.getText&&a.test(d.getText());b&&(b=d.getParent(),
-d=d.getNext(c),b=b.isBlockBoundary()&&(!d||d.type==CKEDITOR.NODE_ELEMENT&&d.isBlockBoundary()));return!!(g^b)}};CKEDITOR.dom.walker.temp=function(a){return function(g){g.type!=CKEDITOR.NODE_ELEMENT&&(g=g.getParent());g=g&&g.hasAttribute("data-cke-temp");return!!(a^g)}};var a=/^[\t\r\n ]*(?:&nbsp;|\xa0)$/,m=CKEDITOR.dom.walker.whitespaces(),k=CKEDITOR.dom.walker.bookmark(),l=CKEDITOR.dom.walker.temp(),c=function(a){return k(a)||m(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.is(CKEDITOR.dtd.$inline)&&!a.is(CKEDITOR.dtd.$empty)};
-CKEDITOR.dom.walker.ignored=function(a){return function(g){g=m(g)||k(g)||l(g);return!!(a^g)}};var d=CKEDITOR.dom.walker.ignored();CKEDITOR.dom.walker.empty=function(a){return function(g){for(var c=0,b=g.getChildCount();c<b;++c)if(!d(g.getChild(c)))return!!a;return!a}};var g=CKEDITOR.dom.walker.empty(),n=CKEDITOR.dom.walker.validEmptyBlockContainers=CKEDITOR.tools.extend(function(a){var g={},c;for(c in a)CKEDITOR.dtd[c]["#"]&&(g[c]=1);return g}(CKEDITOR.dtd.$block),{caption:1,td:1,th:1});CKEDITOR.dom.walker.editable=
+return!!(a^c)}};CKEDITOR.dom.walker.invisible=function(a){var g=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.env.webkit?1:0;return function(d){g(d)?d=1:(d.type==CKEDITOR.NODE_TEXT&&(d=d.getParent()),d=d.$.offsetWidth<=c);return!!(a^d)}};CKEDITOR.dom.walker.nodeType=function(a,g){return function(c){return!!(g^c.type==a)}};CKEDITOR.dom.walker.bogus=function(g){function c(a){return!k(a)&&!l(a)}return function(d){var b=CKEDITOR.env.needsBrFiller?d.is&&d.is("br"):d.getText&&a.test(d.getText());b&&(b=d.getParent(),
+d=d.getNext(c),b=b.isBlockBoundary()&&(!d||d.type==CKEDITOR.NODE_ELEMENT&&d.isBlockBoundary()));return!!(g^b)}};CKEDITOR.dom.walker.temp=function(a){return function(g){g.type!=CKEDITOR.NODE_ELEMENT&&(g=g.getParent());g=g&&g.hasAttribute("data-cke-temp");return!!(a^g)}};var a=/^[\t\r\n ]*(?:&nbsp;|\xa0)$/,k=CKEDITOR.dom.walker.whitespaces(),l=CKEDITOR.dom.walker.bookmark(),m=CKEDITOR.dom.walker.temp(),c=function(a){return l(a)||k(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.is(CKEDITOR.dtd.$inline)&&!a.is(CKEDITOR.dtd.$empty)};
+CKEDITOR.dom.walker.ignored=function(a){return function(g){g=k(g)||l(g)||m(g);return!!(a^g)}};var d=CKEDITOR.dom.walker.ignored();CKEDITOR.dom.walker.empty=function(a){return function(g){for(var c=0,b=g.getChildCount();c<b;++c)if(!d(g.getChild(c)))return!!a;return!a}};var g=CKEDITOR.dom.walker.empty(),n=CKEDITOR.dom.walker.validEmptyBlockContainers=CKEDITOR.tools.extend(function(a){var g={},c;for(c in a)CKEDITOR.dtd[c]["#"]&&(g[c]=1);return g}(CKEDITOR.dtd.$block),{caption:1,td:1,th:1});CKEDITOR.dom.walker.editable=
 function(a){return function(c){c=d(c)?!1:c.type==CKEDITOR.NODE_TEXT||c.type==CKEDITOR.NODE_ELEMENT&&(c.is(CKEDITOR.dtd.$inline)||c.is("hr")||"false"==c.getAttribute("contenteditable")||!CKEDITOR.env.needsBrFiller&&c.is(n)&&g(c))?!0:!1;return!!(a^c)}};CKEDITOR.dom.element.prototype.getBogus=function(){var g=this;do g=g.getPreviousSourceNode();while(c(g));return g&&(CKEDITOR.env.needsBrFiller?g.is&&g.is("br"):g.getText&&a.test(g.getText()))?g:!1}}(),CKEDITOR.dom.range=function(b){this.endOffset=this.endContainer=
-this.startOffset=this.startContainer=null;this.collapsed=!0;var h=b instanceof CKEDITOR.dom.document;this.document=h?b:b.getDocument();this.root=h?b.getBody():b},function(){function b(a){a.collapsed=a.startContainer&&a.endContainer&&a.startContainer.equals(a.endContainer)&&a.startOffset==a.endOffset}function h(a,c,d,b,e){function f(a,g,c,d){var b=c?a.getPrevious():a.getNext();if(d&&k)return b;q||d?g.append(a.clone(!0,e),c):(a.remove(),l&&g.append(a,c));return b}function h(){var a,g,c,d=Math.min(I.length,
-M.length);for(a=0;a<d;a++)if(g=I[a],c=M[a],!g.equals(c))return a;return a-1}function m(){var c=Q-1,d=K&&L&&!v.equals(B);c<H-1||c<G-1||d?(d?a.moveToPosition(B,CKEDITOR.POSITION_BEFORE_START):G==c+1&&F?a.moveToPosition(M[c],CKEDITOR.POSITION_BEFORE_END):a.moveToPosition(M[c+1],CKEDITOR.POSITION_BEFORE_START),b&&(c=I[c+1])&&c.type==CKEDITOR.NODE_ELEMENT&&(d=CKEDITOR.dom.element.createFromHtml('\x3cspan data-cke-bookmark\x3d"1" style\x3d"display:none"\x3e\x26nbsp;\x3c/span\x3e',a.document),d.insertAfter(c),
-c.mergeSiblings(!1),a.moveToBookmark({startNode:d}))):a.collapse(!0)}a.optimizeBookmark();var k=0===c,l=1==c,q=2==c;c=q||l;var v=a.startContainer,B=a.endContainer,D=a.startOffset,A=a.endOffset,E,F,K,L,C,O;if(q&&B.type==CKEDITOR.NODE_TEXT&&(v.equals(B)||v.type===CKEDITOR.NODE_ELEMENT&&v.getFirst().equals(B)))d.append(a.document.createText(B.substring(D,A)));else{B.type==CKEDITOR.NODE_TEXT?q?O=!0:B=B.split(A):0<B.getChildCount()?A>=B.getChildCount()?(B=B.getChild(A-1),F=!0):B=B.getChild(A):L=F=!0;v.type==
-CKEDITOR.NODE_TEXT?q?C=!0:v.split(D):0<v.getChildCount()?0===D?(v=v.getChild(D),E=!0):v=v.getChild(D-1):K=E=!0;for(var I=v.getParents(),M=B.getParents(),Q=h(),H=I.length-1,G=M.length-1,P=d,Y,T,X,da=-1,J=Q;J<=H;J++){T=I[J];X=T.getNext();for(J!=H||T.equals(M[J])&&H<G?c&&(Y=P.append(T.clone(0,e))):E?f(T,P,!1,K):C&&P.append(a.document.createText(T.substring(D)));X;){if(X.equals(M[J])){da=J;break}X=f(X,P)}P=Y}P=d;for(J=Q;J<=G;J++)if(d=M[J],X=d.getPrevious(),d.equals(I[J]))c&&(P=P.getChild(0));else{J!=
-G||d.equals(I[J])&&G<H?c&&(Y=P.append(d.clone(0,e))):F?f(d,P,!1,L):O&&P.append(a.document.createText(d.substring(0,A)));if(J>da)for(;X;)X=f(X,P,!0);P=Y}q||m()}}function f(){var a=!1,c=CKEDITOR.dom.walker.whitespaces(),d=CKEDITOR.dom.walker.bookmark(!0),b=CKEDITOR.dom.walker.bogus();return function(e){return d(e)||c(e)?!0:b(e)&&!a?a=!0:e.type==CKEDITOR.NODE_TEXT&&(e.hasAscendant("pre")||CKEDITOR.tools.trim(e.getText()).length)||e.type==CKEDITOR.NODE_ELEMENT&&!e.is(m)?!1:!0}}function e(a){var c=CKEDITOR.dom.walker.whitespaces(),
-d=CKEDITOR.dom.walker.bookmark(1);return function(b){return d(b)||c(b)?!0:!a&&k(b)||b.type==CKEDITOR.NODE_ELEMENT&&b.is(CKEDITOR.dtd.$removeEmpty)}}function a(a){return function(){var b;return this[a?"getPreviousNode":"getNextNode"](function(a){!b&&d(a)&&(b=a);return c(a)&&!(k(a)&&a.equals(b))})}}var m={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},k=CKEDITOR.dom.walker.bogus(),
-l=/^[\t\r\n ]*(?:&nbsp;|\xa0)$/,c=CKEDITOR.dom.walker.editable(),d=CKEDITOR.dom.walker.ignored(!0);CKEDITOR.dom.range.prototype={clone:function(){var a=new CKEDITOR.dom.range(this.root);a._setStartContainer(this.startContainer);a.startOffset=this.startOffset;a._setEndContainer(this.endContainer);a.endOffset=this.endOffset;a.collapsed=this.collapsed;return a},collapse:function(a){a?(this._setEndContainer(this.startContainer),this.endOffset=this.startOffset):(this._setStartContainer(this.endContainer),
+this.startOffset=this.startContainer=null;this.collapsed=!0;var h=b instanceof CKEDITOR.dom.document;this.document=h?b:b.getDocument();this.root=h?b.getBody():b},function(){function b(a){a.collapsed=a.startContainer&&a.endContainer&&a.startContainer.equals(a.endContainer)&&a.startOffset==a.endOffset}function h(a,c,d,b,e){function f(a,g,c,d){var b=c?a.getPrevious():a.getNext();if(d&&l)return b;u||d?g.append(a.clone(!0,e),c):(a.remove(),m&&g.append(a,c));return b}function k(){var a,g,c,d=Math.min(I.length,
+L.length);for(a=0;a<d;a++)if(g=I[a],c=L[a],!g.equals(c))return a;return a-1}function h(){var c=R-1,d=K&&M&&!w.equals(B);c<H-1||c<G-1||d?(d?a.moveToPosition(B,CKEDITOR.POSITION_BEFORE_START):G==c+1&&F?a.moveToPosition(L[c],CKEDITOR.POSITION_BEFORE_END):a.moveToPosition(L[c+1],CKEDITOR.POSITION_BEFORE_START),b&&(c=I[c+1])&&c.type==CKEDITOR.NODE_ELEMENT&&(d=CKEDITOR.dom.element.createFromHtml('\x3cspan data-cke-bookmark\x3d"1" style\x3d"display:none"\x3e\x26nbsp;\x3c/span\x3e',a.document),d.insertAfter(c),
+c.mergeSiblings(!1),a.moveToBookmark({startNode:d}))):a.collapse(!0)}a.optimizeBookmark();var l=0===c,m=1==c,u=2==c;c=u||m;var w=a.startContainer,B=a.endContainer,C=a.startOffset,A=a.endOffset,E,F,K,M,D,N;if(u&&B.type==CKEDITOR.NODE_TEXT&&(w.equals(B)||w.type===CKEDITOR.NODE_ELEMENT&&w.getFirst().equals(B)))d.append(a.document.createText(B.substring(C,A)));else{B.type==CKEDITOR.NODE_TEXT?u?N=!0:B=B.split(A):0<B.getChildCount()?A>=B.getChildCount()?(B=B.getChild(A-1),F=!0):B=B.getChild(A):M=F=!0;w.type==
+CKEDITOR.NODE_TEXT?u?D=!0:w.split(C):0<w.getChildCount()?0===C?(w=w.getChild(C),E=!0):w=w.getChild(C-1):K=E=!0;for(var I=w.getParents(),L=B.getParents(),R=k(),H=I.length-1,G=L.length-1,O=d,Y,S,X,ca=-1,J=R;J<=H;J++){S=I[J];X=S.getNext();for(J!=H||S.equals(L[J])&&H<G?c&&(Y=O.append(S.clone(0,e))):E?f(S,O,!1,K):D&&O.append(a.document.createText(S.substring(C)));X;){if(X.equals(L[J])){ca=J;break}X=f(X,O)}O=Y}O=d;for(J=R;J<=G;J++)if(d=L[J],X=d.getPrevious(),d.equals(I[J]))c&&(O=O.getChild(0));else{J!=
+G||d.equals(I[J])&&G<H?c&&(Y=O.append(d.clone(0,e))):F?f(d,O,!1,M):N&&O.append(a.document.createText(d.substring(0,A)));if(J>ca)for(;X;)X=f(X,O,!0);O=Y}u||h()}}function f(){var a=!1,c=CKEDITOR.dom.walker.whitespaces(),d=CKEDITOR.dom.walker.bookmark(!0),b=CKEDITOR.dom.walker.bogus();return function(e){return d(e)||c(e)?!0:b(e)&&!a?a=!0:e.type==CKEDITOR.NODE_TEXT&&(e.hasAscendant("pre")||CKEDITOR.tools.trim(e.getText()).length)||e.type==CKEDITOR.NODE_ELEMENT&&!e.is(k)?!1:!0}}function e(a){var c=CKEDITOR.dom.walker.whitespaces(),
+d=CKEDITOR.dom.walker.bookmark(1);return function(b){return d(b)||c(b)?!0:!a&&l(b)||b.type==CKEDITOR.NODE_ELEMENT&&b.is(CKEDITOR.dtd.$removeEmpty)}}function a(a){return function(){var b;return this[a?"getPreviousNode":"getNextNode"](function(a){!b&&d(a)&&(b=a);return c(a)&&!(l(a)&&a.equals(b))})}}var k={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},l=CKEDITOR.dom.walker.bogus(),
+m=/^[\t\r\n ]*(?:&nbsp;|\xa0)$/,c=CKEDITOR.dom.walker.editable(),d=CKEDITOR.dom.walker.ignored(!0);CKEDITOR.dom.range.prototype={clone:function(){var a=new CKEDITOR.dom.range(this.root);a._setStartContainer(this.startContainer);a.startOffset=this.startOffset;a._setEndContainer(this.endContainer);a.endOffset=this.endOffset;a.collapsed=this.collapsed;return a},collapse:function(a){a?(this._setEndContainer(this.startContainer),this.endOffset=this.startOffset):(this._setStartContainer(this.endContainer),
 this.startOffset=this.endOffset);this.collapsed=!0},cloneContents:function(a){var c=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||h(this,2,c,!1,"undefined"==typeof a?!0:a);return c},deleteContents:function(a){this.collapsed||h(this,0,null,a)},extractContents:function(a,c){var d=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||h(this,1,d,a,"undefined"==typeof c?!0:c);return d},equals:function(a){return this.startOffset===a.startOffset&&this.endOffset===a.endOffset&&
-this.startContainer.equals(a.startContainer)&&this.endContainer.equals(a.endContainer)},createBookmark:function(a){function c(a){return a.getAscendant(function(a){var g;if(g=a.data&&a.data("cke-temp"))g=-1===CKEDITOR.tools.array.indexOf(["cke_copybin","cke_pastebin"],a.getAttribute("id"));return g},!0)}var d=this.startContainer,b=this.endContainer,e=this.collapsed,f,h,m,k;f=this.document.createElement("span");f.data("cke-bookmark",1);f.setStyle("display","none");f.setHtml("\x26nbsp;");a&&(m="cke_bm_"+
-CKEDITOR.tools.getNextNumber(),f.setAttribute("id",m+(e?"C":"S")));e||(h=f.clone(),h.setHtml("\x26nbsp;"),a&&h.setAttribute("id",m+"E"),k=this.clone(),c(b)&&(b=c(b),k.moveToPosition(b,CKEDITOR.POSITION_AFTER_END)),k.collapse(),k.insertNode(h));k=this.clone();c(d)&&(b=c(d),k.moveToPosition(b,CKEDITOR.POSITION_BEFORE_START));k.collapse(!0);k.insertNode(f);h?(this.setStartAfter(f),this.setEndBefore(h)):this.moveToPosition(f,CKEDITOR.POSITION_AFTER_END);return{startNode:a?m+(e?"C":"S"):f,endNode:a?m+
-"E":h,serializable:a,collapsed:e}},createBookmark2:function(){function a(g){var c=g.container,b=g.offset,e;e=c;var n=b;e=e.type!=CKEDITOR.NODE_ELEMENT||0===n||n==e.getChildCount()?0:e.getChild(n-1).type==CKEDITOR.NODE_TEXT&&e.getChild(n).type==CKEDITOR.NODE_TEXT;e&&(c=c.getChild(b-1),b=c.getLength());if(c.type==CKEDITOR.NODE_ELEMENT&&0<b){a:{for(e=c;b--;)if(n=e.getChild(b).getIndex(!0),0<=n){b=n;break a}b=-1}b+=1}if(c.type==CKEDITOR.NODE_TEXT){e=c;for(n=0;(e=e.getPrevious())&&e.type==CKEDITOR.NODE_TEXT;)n+=
+this.startContainer.equals(a.startContainer)&&this.endContainer.equals(a.endContainer)},createBookmark:function(a){function c(a){return a.getAscendant(function(a){var g;if(g=a.data&&a.data("cke-temp"))g=-1===CKEDITOR.tools.array.indexOf(["cke_copybin","cke_pastebin"],a.getAttribute("id"));return g},!0)}var d=this.startContainer,b=this.endContainer,e=this.collapsed,f,k,h,l;f=this.document.createElement("span");f.data("cke-bookmark",1);f.setStyle("display","none");f.setHtml("\x26nbsp;");a&&(h="cke_bm_"+
+CKEDITOR.tools.getNextNumber(),f.setAttribute("id",h+(e?"C":"S")));e||(k=f.clone(),k.setHtml("\x26nbsp;"),a&&k.setAttribute("id",h+"E"),l=this.clone(),c(b)&&(b=c(b),l.moveToPosition(b,CKEDITOR.POSITION_AFTER_END)),l.collapse(),l.insertNode(k));l=this.clone();c(d)&&(b=c(d),l.moveToPosition(b,CKEDITOR.POSITION_BEFORE_START));l.collapse(!0);l.insertNode(f);k?(this.setStartAfter(f),this.setEndBefore(k)):this.moveToPosition(f,CKEDITOR.POSITION_AFTER_END);return{startNode:a?h+(e?"C":"S"):f,endNode:a?h+
+"E":k,serializable:a,collapsed:e}},createBookmark2:function(){function a(g){var c=g.container,b=g.offset,e;e=c;var n=b;e=e.type!=CKEDITOR.NODE_ELEMENT||0===n||n==e.getChildCount()?0:e.getChild(n-1).type==CKEDITOR.NODE_TEXT&&e.getChild(n).type==CKEDITOR.NODE_TEXT;e&&(c=c.getChild(b-1),b=c.getLength());if(c.type==CKEDITOR.NODE_ELEMENT&&0<b){a:{for(e=c;b--;)if(n=e.getChild(b).getIndex(!0),0<=n){b=n;break a}b=-1}b+=1}if(c.type==CKEDITOR.NODE_TEXT){e=c;for(n=0;(e=e.getPrevious())&&e.type==CKEDITOR.NODE_TEXT;)n+=
 e.getText().replace(CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE,"").length;e=n;c.isEmpty()?(n=c.getPrevious(d),e?(b=e,c=n?n.getNext():c.getParent().getFirst()):(c=c.getParent(),b=n?n.getIndex(!0)+1:0)):b+=e}g.container=c;g.offset=b}function c(a,g){var d=g.getCustomData("cke-fillingChar");if(d){var b=a.container;d.equals(b)&&(a.offset-=CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE.length,0>=a.offset&&(a.offset=b.getIndex(),a.container=b.getParent()))}}var d=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_TEXT,
 !0);return function(d){var b=this.collapsed,e={container:this.startContainer,offset:this.startOffset},f={container:this.endContainer,offset:this.endOffset};d&&(a(e),c(e,this.root),b||(a(f),c(f,this.root)));return{start:e.container.getAddress(d),end:b?null:f.container.getAddress(d),startOffset:e.offset,endOffset:f.offset,normalized:d,collapsed:b,is2:!0}}}(),moveToBookmark:function(a){if(a.is2){var c=this.document.getByAddress(a.start,a.normalized),d=a.startOffset,b=a.end&&this.document.getByAddress(a.end,
 a.normalized);a=a.endOffset;this.setStart(c,d);b?this.setEnd(b,a):this.collapse(!0)}else c=(d=a.serializable)?this.document.getById(a.startNode):a.startNode,a=d?this.document.getById(a.endNode):a.endNode,this.setStartBefore(c),c.remove(),a?(this.setEndBefore(a),a.remove()):this.collapse(!0)},getBoundaryNodes:function(){var a=this.startContainer,c=this.endContainer,d=this.startOffset,b=this.endOffset,e;if(a.type==CKEDITOR.NODE_ELEMENT)if(e=a.getChildCount(),e>d)a=a.getChild(d);else if(1>e)a=a.getPreviousSourceNode();
@@ -154,32 +154,32 @@ else{for(a=a.$;a.lastChild;)a=a.lastChild;a=new CKEDITOR.dom.node(a);a=a.getNext
 this.startOffset==this.endOffset-1?d.getChild(this.startOffset):d:d.getCommonAncestor(b);return c&&!d.is?d.getParent():d},optimize:function(){var a=this.startContainer,c=this.startOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(c?c>=a.getLength()&&this.setStartAfter(a):this.setStartBefore(a));a=this.endContainer;c=this.endOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(c?c>=a.getLength()&&this.setEndAfter(a):this.setEndBefore(a))},optimizeBookmark:function(){var a=this.startContainer,c=this.endContainer;a.is&&a.is("span")&&
 a.data("cke-bookmark")&&this.setStartAt(a,CKEDITOR.POSITION_BEFORE_START);c&&c.is&&c.is("span")&&c.data("cke-bookmark")&&this.setEndAt(c,CKEDITOR.POSITION_AFTER_END)},trim:function(a,c){var d=this.startContainer,b=this.startOffset,e=this.collapsed;if((!a||e)&&d&&d.type==CKEDITOR.NODE_TEXT){if(b)if(b>=d.getLength())b=d.getIndex()+1,d=d.getParent();else{var f=d.split(b),b=d.getIndex()+1,d=d.getParent();this.startContainer.equals(this.endContainer)?this.setEnd(f,this.endOffset-this.startOffset):d.equals(this.endContainer)&&
 (this.endOffset+=1)}else b=d.getIndex(),d=d.getParent();this.setStart(d,b);if(e){this.collapse(!0);return}}d=this.endContainer;b=this.endOffset;c||e||!d||d.type!=CKEDITOR.NODE_TEXT||(b?(b>=d.getLength()||d.split(b),b=d.getIndex()+1):b=d.getIndex(),d=d.getParent(),this.setEnd(d,b))},enlarge:function(a,c){function d(a){return a&&a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("contenteditable")?null:a}var b=new RegExp(/[^\s\ufeff]/);switch(a){case CKEDITOR.ENLARGE_INLINE:var e=1;case CKEDITOR.ENLARGE_ELEMENT:var f=
-function(a,g){var c=new CKEDITOR.dom.range(m);c.setStart(a,g);c.setEndAt(m,CKEDITOR.POSITION_BEFORE_END);var c=new CKEDITOR.dom.walker(c),d;for(c.guard=function(a){return!(a.type==CKEDITOR.NODE_ELEMENT&&a.isBlockBoundary())};d=c.next();){if(d.type!=CKEDITOR.NODE_TEXT)return!1;E=d!=a?d.getText():d.substring(g);if(b.test(E))return!1}return!0};if(this.collapsed)break;var h=this.getCommonAncestor(),m=this.root,k,l,q,v,B,D=!1,A,E;A=this.startContainer;var F=this.startOffset;A.type==CKEDITOR.NODE_TEXT?
-(F&&(A=!CKEDITOR.tools.trim(A.substring(0,F)).length&&A,D=!!A),A&&((v=A.getPrevious())||(q=A.getParent()))):(F&&(v=A.getChild(F-1)||A.getLast()),v||(q=A));for(q=d(q);q||v;){if(q&&!v){!B&&q.equals(h)&&(B=!0);if(e?q.isBlockBoundary():!m.contains(q))break;D&&"inline"==q.getComputedStyle("display")||(D=!1,B?k=q:this.setStartBefore(q));v=q.getPrevious()}for(;v;)if(A=!1,v.type==CKEDITOR.NODE_COMMENT)v=v.getPrevious();else{if(v.type==CKEDITOR.NODE_TEXT)E=v.getText(),b.test(E)&&(v=null),A=/[\s\ufeff]$/.test(E);
-else if((v.$.offsetWidth>(CKEDITOR.env.webkit?1:0)||c&&v.is("br"))&&!v.data("cke-bookmark"))if(D&&CKEDITOR.dtd.$removeEmpty[v.getName()]){E=v.getText();if(b.test(E))v=null;else for(var F=v.$.getElementsByTagName("*"),K=0,L;L=F[K++];)if(!CKEDITOR.dtd.$removeEmpty[L.nodeName.toLowerCase()]){v=null;break}v&&(A=!!E.length)}else v=null;A&&(D?B?k=q:q&&this.setStartBefore(q):D=!0);if(v){A=v.getPrevious();if(!q&&!A){q=v;v=null;break}v=A}else q=null}q&&(q=d(q.getParent()))}A=this.endContainer;F=this.endOffset;
-q=v=null;B=D=!1;A.type==CKEDITOR.NODE_TEXT?CKEDITOR.tools.trim(A.substring(F)).length?D=!0:(D=!A.getLength(),F==A.getLength()?(v=A.getNext())||(q=A.getParent()):f(A,F)&&(q=A.getParent())):(v=A.getChild(F))||(q=A);for(;q||v;){if(q&&!v){!B&&q.equals(h)&&(B=!0);if(e?q.isBlockBoundary():!m.contains(q))break;D&&"inline"==q.getComputedStyle("display")||(D=!1,B?l=q:q&&this.setEndAfter(q));v=q.getNext()}for(;v;){A=!1;if(v.type==CKEDITOR.NODE_TEXT)E=v.getText(),f(v,0)||(v=null),A=/^[\s\ufeff]/.test(E);else if(v.type==
-CKEDITOR.NODE_ELEMENT){if((0<v.$.offsetWidth||c&&v.is("br"))&&!v.data("cke-bookmark"))if(D&&CKEDITOR.dtd.$removeEmpty[v.getName()]){E=v.getText();if(b.test(E))v=null;else for(F=v.$.getElementsByTagName("*"),K=0;L=F[K++];)if(!CKEDITOR.dtd.$removeEmpty[L.nodeName.toLowerCase()]){v=null;break}v&&(A=!!E.length)}else v=null}else A=1;A&&D&&(B?l=q:this.setEndAfter(q));if(v){A=v.getNext();if(!q&&!A){q=v;v=null;break}v=A}else q=null}q&&(q=d(q.getParent()))}k&&l&&(h=k.contains(l)?l:k,this.setStartBefore(h),
-this.setEndAfter(h));break;case CKEDITOR.ENLARGE_BLOCK_CONTENTS:case CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:q=new CKEDITOR.dom.range(this.root);m=this.root;q.setStartAt(m,CKEDITOR.POSITION_AFTER_START);q.setEnd(this.startContainer,this.startOffset);q=new CKEDITOR.dom.walker(q);var C,O,I=CKEDITOR.dom.walker.blockBoundary(a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?{br:1}:null),M=null,Q=function(a){if(a.type==CKEDITOR.NODE_ELEMENT&&"false"==a.getAttribute("contenteditable"))if(M){if(M.equals(a)){M=null;return}}else M=
-a;else if(M)return;var g=I(a);g||(C=a);return g},e=function(a){var g=Q(a);!g&&a.is&&a.is("br")&&(O=a);return g};q.guard=Q;q=q.lastBackward();C=C||m;this.setStartAt(C,!C.is("br")&&(!q&&this.checkStartOfBlock()||q&&C.contains(q))?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_AFTER_END);if(a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS){q=this.clone();q=new CKEDITOR.dom.walker(q);var H=CKEDITOR.dom.walker.whitespaces(),G=CKEDITOR.dom.walker.bookmark();q.evaluator=function(a){return!H(a)&&!G(a)};if((q=q.previous())&&
-q.type==CKEDITOR.NODE_ELEMENT&&q.is("br"))break}q=this.clone();q.collapse();q.setEndAt(m,CKEDITOR.POSITION_BEFORE_END);q=new CKEDITOR.dom.walker(q);q.guard=a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?e:Q;C=M=O=null;q=q.lastForward();C=C||m;this.setEndAt(C,!q&&this.checkEndOfBlock()||q&&C.contains(q)?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_BEFORE_START);O&&this.setEndAfter(O)}},shrink:function(a,c,d){var b="boolean"===typeof d?d:d&&"boolean"===typeof d.shrinkOnBlockBoundary?d.shrinkOnBlockBoundary:
-!0,e=d&&d.skipBogus;if(!this.collapsed){a=a||CKEDITOR.SHRINK_TEXT;var f=this.clone(),h=this.startContainer,m=this.endContainer,k=this.startOffset,l=this.endOffset,q=d=1;h&&h.type==CKEDITOR.NODE_TEXT&&(k?k>=h.getLength()?f.setStartAfter(h):(f.setStartBefore(h),d=0):f.setStartBefore(h));m&&m.type==CKEDITOR.NODE_TEXT&&(l?l>=m.getLength()?f.setEndAfter(m):(f.setEndAfter(m),q=0):f.setEndBefore(m));var f=new CKEDITOR.dom.walker(f),v=CKEDITOR.dom.walker.bookmark(),B=CKEDITOR.dom.walker.bogus();f.evaluator=
-function(c){return c.type==(a==CKEDITOR.SHRINK_ELEMENT?CKEDITOR.NODE_ELEMENT:CKEDITOR.NODE_TEXT)};var D;f.guard=function(c,d){if(e&&B(c)||v(c))return!0;if(a==CKEDITOR.SHRINK_ELEMENT&&c.type==CKEDITOR.NODE_TEXT||d&&c.equals(D)||!1===b&&c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary()||c.type==CKEDITOR.NODE_ELEMENT&&c.hasAttribute("contenteditable"))return!1;d||c.type!=CKEDITOR.NODE_ELEMENT||(D=c);return!0};d&&(h=f[a==CKEDITOR.SHRINK_ELEMENT?"lastForward":"next"]())&&this.setStartAt(h,c?CKEDITOR.POSITION_AFTER_START:
-CKEDITOR.POSITION_BEFORE_START);q&&(f.reset(),(f=f[a==CKEDITOR.SHRINK_ELEMENT?"lastBackward":"previous"]())&&this.setEndAt(f,c?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_END));return!(!d&&!q)}},insertNode:function(a){this.optimizeBookmark();this.trim(!1,!0);var c=this.startContainer,d=c.getChild(this.startOffset);d?a.insertBefore(d):c.append(a);a.getParent()&&a.getParent().equals(this.endContainer)&&this.endOffset++;this.setStartBefore(a)},moveToPosition:function(a,c){this.setStartAt(a,
+function(a,g){var c=new CKEDITOR.dom.range(h);c.setStart(a,g);c.setEndAt(h,CKEDITOR.POSITION_BEFORE_END);var c=new CKEDITOR.dom.walker(c),d;for(c.guard=function(a){return!(a.type==CKEDITOR.NODE_ELEMENT&&a.isBlockBoundary())};d=c.next();){if(d.type!=CKEDITOR.NODE_TEXT)return!1;E=d!=a?d.getText():d.substring(g);if(b.test(E))return!1}return!0};if(this.collapsed)break;var k=this.getCommonAncestor(),h=this.root,l,m,u,w,B,C=!1,A,E;A=this.startContainer;var F=this.startOffset;A.type==CKEDITOR.NODE_TEXT?
+(F&&(A=!CKEDITOR.tools.trim(A.substring(0,F)).length&&A,C=!!A),A&&((w=A.getPrevious())||(u=A.getParent()))):(F&&(w=A.getChild(F-1)||A.getLast()),w||(u=A));for(u=d(u);u||w;){if(u&&!w){!B&&u.equals(k)&&(B=!0);if(e?u.isBlockBoundary():!h.contains(u))break;C&&"inline"==u.getComputedStyle("display")||(C=!1,B?l=u:this.setStartBefore(u));w=u.getPrevious()}for(;w;)if(A=!1,w.type==CKEDITOR.NODE_COMMENT)w=w.getPrevious();else{if(w.type==CKEDITOR.NODE_TEXT)E=w.getText(),b.test(E)&&(w=null),A=/[\s\ufeff]$/.test(E);
+else if((w.$.offsetWidth>(CKEDITOR.env.webkit?1:0)||c&&w.is("br"))&&!w.data("cke-bookmark"))if(C&&CKEDITOR.dtd.$removeEmpty[w.getName()]){E=w.getText();if(b.test(E))w=null;else for(var F=w.$.getElementsByTagName("*"),K=0,M;M=F[K++];)if(!CKEDITOR.dtd.$removeEmpty[M.nodeName.toLowerCase()]){w=null;break}w&&(A=!!E.length)}else w=null;A&&(C?B?l=u:u&&this.setStartBefore(u):C=!0);if(w){A=w.getPrevious();if(!u&&!A){u=w;w=null;break}w=A}else u=null}u&&(u=d(u.getParent()))}A=this.endContainer;F=this.endOffset;
+u=w=null;B=C=!1;A.type==CKEDITOR.NODE_TEXT?CKEDITOR.tools.trim(A.substring(F)).length?C=!0:(C=!A.getLength(),F==A.getLength()?(w=A.getNext())||(u=A.getParent()):f(A,F)&&(u=A.getParent())):(w=A.getChild(F))||(u=A);for(;u||w;){if(u&&!w){!B&&u.equals(k)&&(B=!0);if(e?u.isBlockBoundary():!h.contains(u))break;C&&"inline"==u.getComputedStyle("display")||(C=!1,B?m=u:u&&this.setEndAfter(u));w=u.getNext()}for(;w;){A=!1;if(w.type==CKEDITOR.NODE_TEXT)E=w.getText(),f(w,0)||(w=null),A=/^[\s\ufeff]/.test(E);else if(w.type==
+CKEDITOR.NODE_ELEMENT){if((0<w.$.offsetWidth||c&&w.is("br"))&&!w.data("cke-bookmark"))if(C&&CKEDITOR.dtd.$removeEmpty[w.getName()]){E=w.getText();if(b.test(E))w=null;else for(F=w.$.getElementsByTagName("*"),K=0;M=F[K++];)if(!CKEDITOR.dtd.$removeEmpty[M.nodeName.toLowerCase()]){w=null;break}w&&(A=!!E.length)}else w=null}else A=1;A&&C&&(B?m=u:this.setEndAfter(u));if(w){A=w.getNext();if(!u&&!A){u=w;w=null;break}w=A}else u=null}u&&(u=d(u.getParent()))}l&&m&&(k=l.contains(m)?m:l,this.setStartBefore(k),
+this.setEndAfter(k));break;case CKEDITOR.ENLARGE_BLOCK_CONTENTS:case CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:u=new CKEDITOR.dom.range(this.root);h=this.root;u.setStartAt(h,CKEDITOR.POSITION_AFTER_START);u.setEnd(this.startContainer,this.startOffset);u=new CKEDITOR.dom.walker(u);var D,N,I=CKEDITOR.dom.walker.blockBoundary(a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?{br:1}:null),L=null,R=function(a){if(a.type==CKEDITOR.NODE_ELEMENT&&"false"==a.getAttribute("contenteditable"))if(L){if(L.equals(a)){L=null;return}}else L=
+a;else if(L)return;var g=I(a);g||(D=a);return g},e=function(a){var g=R(a);!g&&a.is&&a.is("br")&&(N=a);return g};u.guard=R;u=u.lastBackward();D=D||h;this.setStartAt(D,!D.is("br")&&(!u&&this.checkStartOfBlock()||u&&D.contains(u))?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_AFTER_END);if(a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS){u=this.clone();u=new CKEDITOR.dom.walker(u);var H=CKEDITOR.dom.walker.whitespaces(),G=CKEDITOR.dom.walker.bookmark();u.evaluator=function(a){return!H(a)&&!G(a)};if((u=u.previous())&&
+u.type==CKEDITOR.NODE_ELEMENT&&u.is("br"))break}u=this.clone();u.collapse();u.setEndAt(h,CKEDITOR.POSITION_BEFORE_END);u=new CKEDITOR.dom.walker(u);u.guard=a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?e:R;D=L=N=null;u=u.lastForward();D=D||h;this.setEndAt(D,!u&&this.checkEndOfBlock()||u&&D.contains(u)?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_BEFORE_START);N&&this.setEndAfter(N)}},shrink:function(a,c,d){var b="boolean"===typeof d?d:d&&"boolean"===typeof d.shrinkOnBlockBoundary?d.shrinkOnBlockBoundary:
+!0,e=d&&d.skipBogus;if(!this.collapsed){a=a||CKEDITOR.SHRINK_TEXT;var f=this.clone(),k=this.startContainer,h=this.endContainer,l=this.startOffset,m=this.endOffset,u=d=1;k&&k.type==CKEDITOR.NODE_TEXT&&(l?l>=k.getLength()?f.setStartAfter(k):(f.setStartBefore(k),d=0):f.setStartBefore(k));h&&h.type==CKEDITOR.NODE_TEXT&&(m?m>=h.getLength()?f.setEndAfter(h):(f.setEndAfter(h),u=0):f.setEndBefore(h));var f=new CKEDITOR.dom.walker(f),w=CKEDITOR.dom.walker.bookmark(),B=CKEDITOR.dom.walker.bogus();f.evaluator=
+function(c){return c.type==(a==CKEDITOR.SHRINK_ELEMENT?CKEDITOR.NODE_ELEMENT:CKEDITOR.NODE_TEXT)};var C;f.guard=function(c,d){if(e&&B(c)||w(c))return!0;if(a==CKEDITOR.SHRINK_ELEMENT&&c.type==CKEDITOR.NODE_TEXT||d&&c.equals(C)||!1===b&&c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary()||c.type==CKEDITOR.NODE_ELEMENT&&c.hasAttribute("contenteditable"))return!1;d||c.type!=CKEDITOR.NODE_ELEMENT||(C=c);return!0};d&&(k=f[a==CKEDITOR.SHRINK_ELEMENT?"lastForward":"next"]())&&this.setStartAt(k,c?CKEDITOR.POSITION_AFTER_START:
+CKEDITOR.POSITION_BEFORE_START);u&&(f.reset(),(f=f[a==CKEDITOR.SHRINK_ELEMENT?"lastBackward":"previous"]())&&this.setEndAt(f,c?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_END));return!(!d&&!u)}},insertNode:function(a){this.optimizeBookmark();this.trim(!1,!0);var c=this.startContainer,d=c.getChild(this.startOffset);d?a.insertBefore(d):c.append(a);a.getParent()&&a.getParent().equals(this.endContainer)&&this.endOffset++;this.setStartBefore(a)},moveToPosition:function(a,c){this.setStartAt(a,
 c);this.collapse(!0)},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,c){a.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[a.getName()]&&(c=a.getIndex(),a=a.getParent());this._setStartContainer(a);this.startOffset=c;this.endContainer||(this._setEndContainer(a),this.endOffset=c);b(this)},setEnd:function(a,
 c){a.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[a.getName()]&&(c=a.getIndex()+1,a=a.getParent());this._setEndContainer(a);this.endOffset=c;this.startContainer||(this._setStartContainer(a),this.startOffset=c);b(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,
 c){switch(c){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)}b(this)},setEndAt:function(a,c){switch(c){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)}b(this)},fixBlock:function(a,c){var d=this.createBookmark(),b=this.document.createElement(c);this.collapse(a);this.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);this.extractContents().appendTo(b);b.trim();this.insertNode(b);var e=b.getBogus();e&&e.remove();b.appendBogus();this.moveToBookmark(d);return b},splitBlock:function(a,c){var d=
-new CKEDITOR.dom.elementPath(this.startContainer,this.root),b=new CKEDITOR.dom.elementPath(this.endContainer,this.root),e=d.block,f=b.block,h=null;if(!d.blockLimit.equals(b.blockLimit))return null;"br"!=a&&(e||(e=this.fixBlock(!0,a),f=(new CKEDITOR.dom.elementPath(this.endContainer,this.root)).block),f||(f=this.fixBlock(!1,a)));d=e&&this.checkStartOfBlock();b=f&&this.checkEndOfBlock();this.deleteContents();e&&e.equals(f)&&(b?(h=new CKEDITOR.dom.elementPath(this.startContainer,this.root),this.moveToPosition(f,
-CKEDITOR.POSITION_AFTER_END),f=null):d?(h=new CKEDITOR.dom.elementPath(this.startContainer,this.root),this.moveToPosition(e,CKEDITOR.POSITION_BEFORE_START),e=null):(f=this.splitElement(e,c||!1),e.is("ul","ol")||e.appendBogus()));return{previousBlock:e,nextBlock:f,wasStartOfBlock:d,wasEndOfBlock:b,elementPath:h}},splitElement:function(a,c){if(!this.collapsed)return null;this.setEndAt(a,CKEDITOR.POSITION_BEFORE_END);var d=this.extractContents(!1,c||!1),b=a.clone(!1,c||!1);d.appendTo(b);b.insertAfter(a);
+new CKEDITOR.dom.elementPath(this.startContainer,this.root),b=new CKEDITOR.dom.elementPath(this.endContainer,this.root),e=d.block,f=b.block,k=null;if(!d.blockLimit.equals(b.blockLimit))return null;"br"!=a&&(e||(e=this.fixBlock(!0,a),f=(new CKEDITOR.dom.elementPath(this.endContainer,this.root)).block),f||(f=this.fixBlock(!1,a)));d=e&&this.checkStartOfBlock();b=f&&this.checkEndOfBlock();this.deleteContents();e&&e.equals(f)&&(b?(k=new CKEDITOR.dom.elementPath(this.startContainer,this.root),this.moveToPosition(f,
+CKEDITOR.POSITION_AFTER_END),f=null):d?(k=new CKEDITOR.dom.elementPath(this.startContainer,this.root),this.moveToPosition(e,CKEDITOR.POSITION_BEFORE_START),e=null):(f=this.splitElement(e,c||!1),e.is("ul","ol")||e.appendBogus()));return{previousBlock:e,nextBlock:f,wasStartOfBlock:d,wasEndOfBlock:b,elementPath:k}},splitElement:function(a,c){if(!this.collapsed)return null;this.setEndAt(a,CKEDITOR.POSITION_BEFORE_END);var d=this.extractContents(!1,c||!1),b=a.clone(!1,c||!1);d.appendTo(b);b.insertAfter(a);
 this.moveToPosition(a,CKEDITOR.POSITION_AFTER_END);return b},removeEmptyBlocksAtEnd:function(){function a(g){return function(a){return c(a)||d(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.isEmptyInlineRemoveable()||g.is("table")&&a.is("caption")?!1:!0}}var c=CKEDITOR.dom.walker.whitespaces(),d=CKEDITOR.dom.walker.bookmark(!1);return function(c){for(var d=this.createBookmark(),b=this[c?"endPath":"startPath"](),e=b.block||b.blockLimit,f;e&&!e.equals(b.root)&&!e.getFirst(a(e));)f=e.getParent(),this[c?"setEndAt":
 "setStartAt"](e,CKEDITOR.POSITION_AFTER_END),e.remove(1),e=f;this.moveToBookmark(d)}}(),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,c){var d=c==CKEDITOR.START,b=this.clone();b.collapse(d);b[d?"setStartAt":"setEndAt"](a,d?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END);b=new CKEDITOR.dom.walker(b);b.evaluator=e(d);return b[d?
-"checkBackward":"checkForward"]()},checkStartOfBlock:function(a){var c=this.startContainer,d=this.startOffset;CKEDITOR.env.ie&&d&&c.type==CKEDITOR.NODE_TEXT&&(c=CKEDITOR.tools.ltrim(c.substring(0,d)),l.test(c)&&this.trim(0,1));a||this.trim();a=new CKEDITOR.dom.elementPath(this.startContainer,this.root);c=this.clone();c.collapse(!0);c.setStartAt(a.block||a.blockLimit,CKEDITOR.POSITION_AFTER_START);a=new CKEDITOR.dom.walker(c);a.evaluator=f();return a.checkBackward()},checkEndOfBlock:function(a){var c=
-this.endContainer,d=this.endOffset;CKEDITOR.env.ie&&c.type==CKEDITOR.NODE_TEXT&&(c=CKEDITOR.tools.rtrim(c.substring(d)),l.test(c)&&this.trim(1,0));a||this.trim();a=new CKEDITOR.dom.elementPath(this.endContainer,this.root);c=this.clone();c.collapse(!1);c.setEndAt(a.block||a.blockLimit,CKEDITOR.POSITION_BEFORE_END);a=new CKEDITOR.dom.walker(c);a.evaluator=f();return a.checkForward()},getPreviousNode:function(a,c,d){var b=this.clone();b.collapse(1);b.setStartAt(d||this.root,CKEDITOR.POSITION_AFTER_START);
+"checkBackward":"checkForward"]()},checkStartOfBlock:function(a){var c=this.startContainer,d=this.startOffset;CKEDITOR.env.ie&&d&&c.type==CKEDITOR.NODE_TEXT&&(c=CKEDITOR.tools.ltrim(c.substring(0,d)),m.test(c)&&this.trim(0,1));a||this.trim();a=new CKEDITOR.dom.elementPath(this.startContainer,this.root);c=this.clone();c.collapse(!0);c.setStartAt(a.block||a.blockLimit,CKEDITOR.POSITION_AFTER_START);a=new CKEDITOR.dom.walker(c);a.evaluator=f();return a.checkBackward()},checkEndOfBlock:function(a){var c=
+this.endContainer,d=this.endOffset;CKEDITOR.env.ie&&c.type==CKEDITOR.NODE_TEXT&&(c=CKEDITOR.tools.rtrim(c.substring(d)),m.test(c)&&this.trim(1,0));a||this.trim();a=new CKEDITOR.dom.elementPath(this.endContainer,this.root);c=this.clone();c.collapse(!1);c.setEndAt(a.block||a.blockLimit,CKEDITOR.POSITION_BEFORE_END);a=new CKEDITOR.dom.walker(c);a.evaluator=f();return a.checkForward()},getPreviousNode:function(a,c,d){var b=this.clone();b.collapse(1);b.setStartAt(d||this.root,CKEDITOR.POSITION_AFTER_START);
 d=new CKEDITOR.dom.walker(b);d.evaluator=a;d.guard=c;return d.previous()},getNextNode:function(a,c,d){var b=this.clone();b.collapse();b.setEndAt(d||this.root,CKEDITOR.POSITION_BEFORE_END);d=new CKEDITOR.dom.walker(b);d.evaluator=a;d.guard=c;return d.next()},checkReadOnly:function(){function a(c,g){for(;c;){if(c.type==CKEDITOR.NODE_ELEMENT){if("false"==c.getAttribute("contentEditable")&&!c.data("cke-editable"))return 0;if(c.is("html")||"true"==c.getAttribute("contentEditable")&&(c.contains(g)||c.equals(g)))break}c=
-c.getParent()}return 1}return function(){var c=this.startContainer,d=this.endContainer;return!(a(c,d)&&a(d,c))}}(),moveToElementEditablePosition:function(a,c){if(a.type==CKEDITOR.NODE_ELEMENT&&!a.isEditable(!1))return this.moveToPosition(a,c?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START),!0;for(var b=0;a;){if(a.type==CKEDITOR.NODE_TEXT){c&&this.endContainer&&this.checkEndOfBlock()&&l.test(a.getText())?this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START):this.moveToPosition(a,c?CKEDITOR.POSITION_AFTER_END:
-CKEDITOR.POSITION_BEFORE_START);b=1;break}if(a.type==CKEDITOR.NODE_ELEMENT)if(a.isEditable())this.moveToPosition(a,c?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_START),b=1;else if(c&&a.is("br")&&this.endContainer&&this.checkEndOfBlock())this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START);else if("false"==a.getAttribute("contenteditable")&&a.is(CKEDITOR.dtd.$block))return this.setStartBefore(a),this.setEndAfter(a),!0;var e=a,f=b,h=void 0;e.type==CKEDITOR.NODE_ELEMENT&&e.isEditable(!1)&&
-(h=e[c?"getLast":"getFirst"](d));f||h||(h=e[c?"getPrevious":"getNext"](d));a=h}return!!b},moveToClosestEditablePosition:function(a,c){var d,b=0,e,f,h=[CKEDITOR.POSITION_AFTER_END,CKEDITOR.POSITION_BEFORE_START];a?(d=new CKEDITOR.dom.range(this.root),d.moveToPosition(a,h[c?0:1])):d=this.clone();if(a&&!a.is(CKEDITOR.dtd.$block))b=1;else if(e=d[c?"getNextEditableNode":"getPreviousEditableNode"]())b=1,(f=e.type==CKEDITOR.NODE_ELEMENT)&&e.is(CKEDITOR.dtd.$block)&&"false"==e.getAttribute("contenteditable")?
-(d.setStartAt(e,CKEDITOR.POSITION_BEFORE_START),d.setEndAt(e,CKEDITOR.POSITION_AFTER_END)):!CKEDITOR.env.needsBrFiller&&f&&e.is(CKEDITOR.dom.walker.validEmptyBlockContainers)?(d.setEnd(e,0),d.collapse()):d.moveToPosition(e,h[c?1:0]);b&&this.moveToRange(d);return!!b},moveToElementEditStart:function(a){return this.moveToElementEditablePosition(a)},moveToElementEditEnd:function(a){return this.moveToElementEditablePosition(a,!0)},getEnclosedNode:function(){var a=this.clone();a.optimize();if(a.startContainer.type!=
+c.getParent()}return 1}return function(){var c=this.startContainer,d=this.endContainer;return!(a(c,d)&&a(d,c))}}(),moveToElementEditablePosition:function(a,c){if(a.type==CKEDITOR.NODE_ELEMENT&&!a.isEditable(!1))return this.moveToPosition(a,c?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START),!0;for(var b=0;a;){if(a.type==CKEDITOR.NODE_TEXT){c&&this.endContainer&&this.checkEndOfBlock()&&m.test(a.getText())?this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START):this.moveToPosition(a,c?CKEDITOR.POSITION_AFTER_END:
+CKEDITOR.POSITION_BEFORE_START);b=1;break}if(a.type==CKEDITOR.NODE_ELEMENT)if(a.isEditable())this.moveToPosition(a,c?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_START),b=1;else if(c&&a.is("br")&&this.endContainer&&this.checkEndOfBlock())this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START);else if("false"==a.getAttribute("contenteditable")&&a.is(CKEDITOR.dtd.$block))return this.setStartBefore(a),this.setEndAfter(a),!0;var e=a,f=b,k=void 0;e.type==CKEDITOR.NODE_ELEMENT&&e.isEditable(!1)&&
+(k=e[c?"getLast":"getFirst"](d));f||k||(k=e[c?"getPrevious":"getNext"](d));a=k}return!!b},moveToClosestEditablePosition:function(a,c){var d,b=0,e,f,k=[CKEDITOR.POSITION_AFTER_END,CKEDITOR.POSITION_BEFORE_START];a?(d=new CKEDITOR.dom.range(this.root),d.moveToPosition(a,k[c?0:1])):d=this.clone();if(a&&!a.is(CKEDITOR.dtd.$block))b=1;else if(e=d[c?"getNextEditableNode":"getPreviousEditableNode"]())b=1,(f=e.type==CKEDITOR.NODE_ELEMENT)&&e.is(CKEDITOR.dtd.$block)&&"false"==e.getAttribute("contenteditable")?
+(d.setStartAt(e,CKEDITOR.POSITION_BEFORE_START),d.setEndAt(e,CKEDITOR.POSITION_AFTER_END)):!CKEDITOR.env.needsBrFiller&&f&&e.is(CKEDITOR.dom.walker.validEmptyBlockContainers)?(d.setEnd(e,0),d.collapse()):d.moveToPosition(e,k[c?1:0]);b&&this.moveToRange(d);return!!b},moveToElementEditStart:function(a){return this.moveToElementEditablePosition(a)},moveToElementEditEnd:function(a){return this.moveToElementEditablePosition(a,!0)},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),c=CKEDITOR.dom.walker.bookmark(!1,!0),d=CKEDITOR.dom.walker.whitespaces(!0);a.evaluator=function(a){return d(a)&&c(a)};var b=a.next();a.reset();return b&&b.equals(a.previous())?b: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},getNextEditableNode:a(),getPreviousEditableNode:a(1),_getTableElement:function(a){a=a||{td:1,th:1,tr:1,tbody:1,thead:1,tfoot:1,table:1};var c=this.getTouchedStartNode(),d=this.getTouchedEndNode(),b=c.getAscendant("table",!0),d=d.getAscendant("table",!0);return b&&!this.root.contains(b)?null:this.getEnclosedNode()?this.getEnclosedNode().getAscendant(a,!0):b&&d&&(b.equals(d)||b.contains(d)||d.contains(b))?c.getAscendant(a,!0):null},scrollIntoView:function(){var a=
 new CKEDITOR.dom.element.createFromHtml("\x3cspan\x3e\x26nbsp;\x3c/span\x3e",this.document),c,d,b,e=this.clone();e.optimize();(b=e.startContainer.type==CKEDITOR.NODE_TEXT)?(d=e.startContainer.getText(),c=e.startContainer.split(e.startOffset),a.insertAfter(e.startContainer)):e.insertNode(a);a.scrollIntoView();b&&(e.startContainer.setText(d),c.remove());a.remove()},getClientRects:function(){function a(c,d){var g=CKEDITOR.tools.array.map(c,function(a){return a}),b=new CKEDITOR.dom.range(d.root),e,f,
@@ -189,636 +189,645 @@ function(c,e){var f=CKEDITOR.tools.objectCompare(a[b],c);f||(f=CKEDITOR.tools.ob
 1),e.insertAfter(g)),d.setStart(e.$,0),d.setEnd(e.$,0),a=d.getClientRects(),e.remove()):g.startContainer instanceof CKEDITOR.dom.text&&(""===g.startContainer.getText()?(g.startContainer.setText("​"),a=d.getClientRects(),g.startContainer.setText("")):a=[b(g.createBookmark())]):a=[b(g.createBookmark())];return a}function d(a,c,g){a=CKEDITOR.tools.extend({},a);c&&(a=CKEDITOR.tools.getAbsoluteRectPosition(g.document.getWindow(),a));!a.width&&(a.width=a.right-a.left);!a.height&&(a.height=a.bottom-a.top);
 return a}function b(a){var c=a.startNode;a=a.endNode;var d;c.setText("​");c.removeStyle("display");a?(a.setText("​"),a.removeStyle("display"),d=[c.getClientRect(),a.getClientRect()],a.remove()):d=[c.getClientRect(),c.getClientRect()];c.remove();return{right:Math.max(d[0].right,d[1].right),bottom:Math.max(d[0].bottom,d[1].bottom),left:Math.min(d[0].left,d[1].left),top:Math.min(d[0].top,d[1].top),width:Math.abs(d[0].left-d[1].left),height:Math.max(d[0].bottom,d[1].bottom)-Math.min(d[0].top,d[1].top)}}
 return void 0!==this.document.getSelection?function(b){var e=this.root.getDocument().$.createRange(),f;e.setStart(this.startContainer.$,this.startOffset);e.setEnd(this.endContainer.$,this.endOffset);f=e.getClientRects();f=a(f,this);f.length||(f=c(f,e,this));return CKEDITOR.tools.array.map(f,function(a){return d(a,b,this)},this)}:function(a){return[d(b(this.createBookmark()),a,this)]}}(),_setStartContainer:function(a){this.startContainer=a},_setEndContainer:function(a){this.endContainer=a},_find:function(a,
-c){var d=this.getCommonAncestor(),b=this.getBoundaryNodes(),e=[],f,h,m,k;if(d&&d.find)for(h=d.find(a),f=0;f<h.count();f++)if(d=h.getItem(f),c||!d.isReadOnly())m=d.getPosition(b.startNode)&CKEDITOR.POSITION_FOLLOWING||b.startNode.equals(d),k=d.getPosition(b.endNode)&CKEDITOR.POSITION_PRECEDING+CKEDITOR.POSITION_IS_CONTAINED||b.endNode.equals(d),m&&k&&e.push(d);return e}};CKEDITOR.dom.range.mergeRanges=function(a){return CKEDITOR.tools.array.reduce(a,function(a,c){var d=a[a.length-1],g=!1;c=c.clone();
+c){var d=this.getCommonAncestor(),b=this.getBoundaryNodes(),e=[],f,k,h,l;if(d&&d.find)for(k=d.find(a),f=0;f<k.count();f++)if(d=k.getItem(f),c||!d.isReadOnly())h=d.getPosition(b.startNode)&CKEDITOR.POSITION_FOLLOWING||b.startNode.equals(d),l=d.getPosition(b.endNode)&CKEDITOR.POSITION_PRECEDING+CKEDITOR.POSITION_IS_CONTAINED||b.endNode.equals(d),h&&l&&e.push(d);return e}};CKEDITOR.dom.range.mergeRanges=function(a){return CKEDITOR.tools.array.reduce(a,function(a,c){var d=a[a.length-1],g=!1;c=c.clone();
 c.enlarge(CKEDITOR.ENLARGE_ELEMENT);if(d){var b=new CKEDITOR.dom.range(c.root),g=new CKEDITOR.dom.walker(b),e=CKEDITOR.dom.walker.whitespaces();b.setStart(d.endContainer,d.endOffset);b.setEnd(c.startContainer,c.startOffset);for(b=g.next();e(b)||c.endContainer.equals(b);)b=g.next();g=!b}g?d.setEnd(c.endContainer,c.endOffset):a.push(c);return a},[])}}(),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,"use strict",function(){function b(a){1>arguments.length||(this.range=a,this.forceBrBreak=0,this.enlargeBr=1,this.enforceRealBlocks=0,this._||(this._={}))}function h(a){var c=[];a.forEach(function(a){if("true"==a.getAttribute("contenteditable"))return c.push(a),!1},CKEDITOR.NODE_ELEMENT,!0);return c}function f(a,c,b,e){a:{null==
-e&&(e=h(b));for(var m;m=e.shift();)if(m.getDtd().p){e={element:m,remaining:e};break a}e=null}if(!e)return 0;if((m=CKEDITOR.filter.instances[e.element.data("cke-filter")])&&!m.check(c))return f(a,c,b,e.remaining);c=new CKEDITOR.dom.range(e.element);c.selectNodeContents(e.element);c=c.createIterator();c.enlargeBr=a.enlargeBr;c.enforceRealBlocks=a.enforceRealBlocks;c.activeFilter=c.filter=m;a._.nestedEditable={element:e.element,container:b,remaining:e.remaining,iterator:c};return 1}function e(a,c,b){if(!c)return!1;
-a=a.clone();a.collapse(!b);return a.checkBoundaryOfElement(c,b?CKEDITOR.START:CKEDITOR.END)}var a=/^[\r\n\t ]+$/,m=CKEDITOR.dom.walker.bookmark(!1,!0),k=CKEDITOR.dom.walker.whitespaces(!0),l=function(a){return m(a)&&k(a)},c={dd:1,dt:1,li:1};b.prototype={getNextParagraph:function(d){var g,b,h,k,p;d=d||"p";if(this._.nestedEditable){if(g=this._.nestedEditable.iterator.getNextParagraph(d))return this.activeFilter=this._.nestedEditable.iterator.activeFilter,g;this.activeFilter=this.filter;if(f(this,d,
-this._.nestedEditable.container,this._.nestedEditable.remaining))return this.activeFilter=this._.nestedEditable.iterator.activeFilter,this._.nestedEditable.iterator.getNextParagraph(d);this._.nestedEditable=null}if(!this.range.root.getDtd()[d])return null;if(!this._.started){var t=this.range.clone();b=t.startPath();var r=t.endPath(),x=!t.collapsed&&e(t,b.block),u=!t.collapsed&&e(t,r.block,1);t.shrink(CKEDITOR.SHRINK_ELEMENT,!0);x&&t.setStartAt(b.block,CKEDITOR.POSITION_BEFORE_END);u&&t.setEndAt(r.block,
-CKEDITOR.POSITION_AFTER_START);b=t.endContainer.hasAscendant("pre",!0)||t.startContainer.hasAscendant("pre",!0);t.enlarge(this.forceBrBreak&&!b||!this.enlargeBr?CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:CKEDITOR.ENLARGE_BLOCK_CONTENTS);t.collapsed||(b=new CKEDITOR.dom.walker(t.clone()),r=CKEDITOR.dom.walker.bookmark(!0,!0),b.evaluator=r,this._.nextNode=b.next(),b=new CKEDITOR.dom.walker(t.clone()),b.evaluator=r,b=b.previous(),this._.lastNode=b.getNextSourceNode(!0,null,t.root),this._.lastNode&&this._.lastNode.type==
-CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(this._.lastNode.getText())&&this._.lastNode.getParent().isBlockBoundary()&&(r=this.range.clone(),r.moveToPosition(this._.lastNode,CKEDITOR.POSITION_AFTER_END),r.checkEndOfBlock()&&(r=new CKEDITOR.dom.elementPath(r.endContainer,r.root),this._.lastNode=(r.block||r.blockLimit).getNextSourceNode(!0))),this._.lastNode&&t.root.contains(this._.lastNode)||(this._.lastNode=this._.docEndMarker=t.document.createText(""),this._.lastNode.insertAfter(b)),t=null);this._.started=
-1;b=t}r=this._.nextNode;t=this._.lastNode;for(this._.nextNode=null;r;){var x=0,u=r.hasAscendant("pre"),z=r.type!=CKEDITOR.NODE_ELEMENT,q=0;if(z)r.type==CKEDITOR.NODE_TEXT&&a.test(r.getText())&&(z=0);else{var v=r.getName();if(CKEDITOR.dtd.$block[v]&&"false"==r.getAttribute("contenteditable")){g=r;f(this,d,g);break}else if(r.isBlockBoundary(this.forceBrBreak&&!u&&{br:1})){if("br"==v)z=1;else if(!b&&!r.getChildCount()&&"hr"!=v){g=r;h=r.equals(t);break}b&&(b.setEndAt(r,CKEDITOR.POSITION_BEFORE_START),
-"br"!=v&&(this._.nextNode=r));x=1}else{if(r.getFirst()){b||(b=this.range.clone(),b.setStartAt(r,CKEDITOR.POSITION_BEFORE_START));r=r.getFirst();continue}z=1}}z&&!b&&(b=this.range.clone(),b.setStartAt(r,CKEDITOR.POSITION_BEFORE_START));h=(!x||z)&&r.equals(t);if(b&&!x)for(;!r.getNext(l)&&!h;){v=r.getParent();if(v.isBlockBoundary(this.forceBrBreak&&!u&&{br:1})){x=1;z=0;h||v.equals(t);b.setEndAt(v,CKEDITOR.POSITION_BEFORE_END);break}r=v;z=1;h=r.equals(t);q=1}z&&b.setEndAt(r,CKEDITOR.POSITION_AFTER_END);
-r=this._getNextSourceNode(r,q,t);if((h=!r)||x&&b)break}if(!g){if(!b)return this._.docEndMarker&&this._.docEndMarker.remove(),this._.nextNode=null;g=new CKEDITOR.dom.elementPath(b.startContainer,b.root);r=g.blockLimit;x={div:1,th:1,td:1};g=g.block;!g&&r&&!this.enforceRealBlocks&&x[r.getName()]&&b.checkStartOfBlock()&&b.checkEndOfBlock()&&!r.equals(b.root)?g=r:!g||this.enforceRealBlocks&&g.is(c)?(g=this.range.document.createElement(d),b.extractContents().appendTo(g),g.trim(),b.insertNode(g),k=p=!0):
-"li"!=g.getName()?b.checkStartOfBlock()&&b.checkEndOfBlock()||(g=g.clone(!1),b.extractContents().appendTo(g),g.trim(),p=b.splitBlock(),k=!p.wasStartOfBlock,p=!p.wasEndOfBlock,b.insertNode(g)):h||(this._.nextNode=g.equals(t)?null:this._getNextSourceNode(b.getBoundaryNodes().endNode,1,t))}k&&(k=g.getPrevious())&&k.type==CKEDITOR.NODE_ELEMENT&&("br"==k.getName()?k.remove():k.getLast()&&"br"==k.getLast().$.nodeName.toLowerCase()&&k.getLast().remove());p&&(k=g.getLast())&&k.type==CKEDITOR.NODE_ELEMENT&&
-"br"==k.getName()&&(!CKEDITOR.env.needsBrFiller||k.getPrevious(m)||k.getNext(m))&&k.remove();this._.nextNode||(this._.nextNode=h||g.equals(t)||!t?null:this._getNextSourceNode(g,1,t));return g},_getNextSourceNode:function(a,c,b){function e(a){return!(a.equals(b)||a.equals(f))}var f=this.range.root;for(a=a.getNextSourceNode(c,null,e);!m(a);)a=a.getNextSourceNode(c,null,e);return a}};CKEDITOR.dom.range.prototype.createIterator=function(){return new b(this)}}(),CKEDITOR.command=function(b,h){this.uiItems=
+e&&(e=h(b));for(var k;k=e.shift();)if(k.getDtd().p){e={element:k,remaining:e};break a}e=null}if(!e)return 0;if((k=CKEDITOR.filter.instances[e.element.data("cke-filter")])&&!k.check(c))return f(a,c,b,e.remaining);c=new CKEDITOR.dom.range(e.element);c.selectNodeContents(e.element);c=c.createIterator();c.enlargeBr=a.enlargeBr;c.enforceRealBlocks=a.enforceRealBlocks;c.activeFilter=c.filter=k;a._.nestedEditable={element:e.element,container:b,remaining:e.remaining,iterator:c};return 1}function e(a,c,b){if(!c)return!1;
+a=a.clone();a.collapse(!b);return a.checkBoundaryOfElement(c,b?CKEDITOR.START:CKEDITOR.END)}var a=/^[\r\n\t ]+$/,k=CKEDITOR.dom.walker.bookmark(!1,!0),l=CKEDITOR.dom.walker.whitespaces(!0),m=function(a){return k(a)&&l(a)},c={dd:1,dt:1,li:1};b.prototype={getNextParagraph:function(d){var g,b,h,l,p;d=d||"p";if(this._.nestedEditable){if(g=this._.nestedEditable.iterator.getNextParagraph(d))return this.activeFilter=this._.nestedEditable.iterator.activeFilter,g;this.activeFilter=this.filter;if(f(this,d,
+this._.nestedEditable.container,this._.nestedEditable.remaining))return this.activeFilter=this._.nestedEditable.iterator.activeFilter,this._.nestedEditable.iterator.getNextParagraph(d);this._.nestedEditable=null}if(!this.range.root.getDtd()[d])return null;if(!this._.started){var q=this.range.clone();b=q.startPath();var r=q.endPath(),x=!q.collapsed&&e(q,b.block),t=!q.collapsed&&e(q,r.block,1);q.shrink(CKEDITOR.SHRINK_ELEMENT,!0);x&&q.setStartAt(b.block,CKEDITOR.POSITION_BEFORE_END);t&&q.setEndAt(r.block,
+CKEDITOR.POSITION_AFTER_START);b=q.endContainer.hasAscendant("pre",!0)||q.startContainer.hasAscendant("pre",!0);q.enlarge(this.forceBrBreak&&!b||!this.enlargeBr?CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:CKEDITOR.ENLARGE_BLOCK_CONTENTS);q.collapsed||(b=new CKEDITOR.dom.walker(q.clone()),r=CKEDITOR.dom.walker.bookmark(!0,!0),b.evaluator=r,this._.nextNode=b.next(),b=new CKEDITOR.dom.walker(q.clone()),b.evaluator=r,b=b.previous(),this._.lastNode=b.getNextSourceNode(!0,null,q.root),this._.lastNode&&this._.lastNode.type==
+CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(this._.lastNode.getText())&&this._.lastNode.getParent().isBlockBoundary()&&(r=this.range.clone(),r.moveToPosition(this._.lastNode,CKEDITOR.POSITION_AFTER_END),r.checkEndOfBlock()&&(r=new CKEDITOR.dom.elementPath(r.endContainer,r.root),this._.lastNode=(r.block||r.blockLimit).getNextSourceNode(!0))),this._.lastNode&&q.root.contains(this._.lastNode)||(this._.lastNode=this._.docEndMarker=q.document.createText(""),this._.lastNode.insertAfter(b)),q=null);this._.started=
+1;b=q}r=this._.nextNode;q=this._.lastNode;for(this._.nextNode=null;r;){var x=0,t=r.hasAscendant("pre"),z=r.type!=CKEDITOR.NODE_ELEMENT,u=0;if(z)r.type==CKEDITOR.NODE_TEXT&&a.test(r.getText())&&(z=0);else{var w=r.getName();if(CKEDITOR.dtd.$block[w]&&"false"==r.getAttribute("contenteditable")){g=r;f(this,d,g);break}else if(r.isBlockBoundary(this.forceBrBreak&&!t&&{br:1})){if("br"==w)z=1;else if(!b&&!r.getChildCount()&&"hr"!=w){g=r;h=r.equals(q);break}b&&(b.setEndAt(r,CKEDITOR.POSITION_BEFORE_START),
+"br"!=w&&(this._.nextNode=r));x=1}else{if(r.getFirst()){b||(b=this.range.clone(),b.setStartAt(r,CKEDITOR.POSITION_BEFORE_START));r=r.getFirst();continue}z=1}}z&&!b&&(b=this.range.clone(),b.setStartAt(r,CKEDITOR.POSITION_BEFORE_START));h=(!x||z)&&r.equals(q);if(b&&!x)for(;!r.getNext(m)&&!h;){w=r.getParent();if(w.isBlockBoundary(this.forceBrBreak&&!t&&{br:1})){x=1;z=0;h||w.equals(q);b.setEndAt(w,CKEDITOR.POSITION_BEFORE_END);break}r=w;z=1;h=r.equals(q);u=1}z&&b.setEndAt(r,CKEDITOR.POSITION_AFTER_END);
+r=this._getNextSourceNode(r,u,q);if((h=!r)||x&&b)break}if(!g){if(!b)return this._.docEndMarker&&this._.docEndMarker.remove(),this._.nextNode=null;g=new CKEDITOR.dom.elementPath(b.startContainer,b.root);r=g.blockLimit;x={div:1,th:1,td:1};g=g.block;!g&&r&&!this.enforceRealBlocks&&x[r.getName()]&&b.checkStartOfBlock()&&b.checkEndOfBlock()&&!r.equals(b.root)?g=r:!g||this.enforceRealBlocks&&g.is(c)?(g=this.range.document.createElement(d),b.extractContents().appendTo(g),g.trim(),b.insertNode(g),l=p=!0):
+"li"!=g.getName()?b.checkStartOfBlock()&&b.checkEndOfBlock()||(g=g.clone(!1),b.extractContents().appendTo(g),g.trim(),p=b.splitBlock(),l=!p.wasStartOfBlock,p=!p.wasEndOfBlock,b.insertNode(g)):h||(this._.nextNode=g.equals(q)?null:this._getNextSourceNode(b.getBoundaryNodes().endNode,1,q))}l&&(l=g.getPrevious())&&l.type==CKEDITOR.NODE_ELEMENT&&("br"==l.getName()?l.remove():l.getLast()&&"br"==l.getLast().$.nodeName.toLowerCase()&&l.getLast().remove());p&&(l=g.getLast())&&l.type==CKEDITOR.NODE_ELEMENT&&
+"br"==l.getName()&&(!CKEDITOR.env.needsBrFiller||l.getPrevious(k)||l.getNext(k))&&l.remove();this._.nextNode||(this._.nextNode=h||g.equals(q)||!q?null:this._getNextSourceNode(g,1,q));return g},_getNextSourceNode:function(a,c,b){function e(a){return!(a.equals(b)||a.equals(f))}var f=this.range.root;for(a=a.getNextSourceNode(c,null,e);!k(a);)a=a.getNextSourceNode(c,null,e);return a}};CKEDITOR.dom.range.prototype.createIterator=function(){return new b(this)}}(),CKEDITOR.command=function(b,h){this.uiItems=
 [];this.exec=function(e){if(this.state==CKEDITOR.TRISTATE_DISABLED||!this.checkAllowed())return!1;this.editorFocus&&b.focus();return!1===this.fire("exec")?!0:!1!==h.exec.call(this,b,e)};this.refresh=function(b,a){if(!this.readOnly&&b.readOnly)return!0;if(this.context&&!a.isContextFor(this.context)||!this.checkAllowed(!0))return this.disable(),!0;this.startDisabled||this.enable();this.modes&&!this.modes[b.mode]&&this.disable();return!1===this.fire("refresh",{editor:b,path:a})?!0:h.refresh&&!1!==h.refresh.apply(this,
 arguments)};var f;this.checkAllowed=function(e){return e||"boolean"!=typeof f?f=b.activeFilter.checkFeature(this):f};CKEDITOR.tools.extend(this,h,{modes:{wysiwyg:1},editorFocus:1,contextSensitive:!!h.context,state:CKEDITOR.TRISTATE_DISABLED});CKEDITOR.event.call(this)},CKEDITOR.command.prototype={enable:function(){this.state==CKEDITOR.TRISTATE_DISABLED&&this.checkAllowed()&&this.setState(this.preserveState&&"undefined"!=typeof this.previousState?this.previousState:CKEDITOR.TRISTATE_OFF)},disable:function(){this.setState(CKEDITOR.TRISTATE_DISABLED)},
 setState:function(b){if(this.state==b||b!=CKEDITOR.TRISTATE_DISABLED&&!this.checkAllowed())return!1;this.previousState=this.state;this.state=b;this.fire("state");return!0},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:"\x3c!DOCTYPE html\x3e",bodyId:"",bodyClass:"",fullPage:!1,height:200,contentsCss:CKEDITOR.getUrl("contents.css"),extraPlugins:"",removePlugins:"",protectedSource:[],tabIndex:0,width:"",baseFloatZIndex:1E4,blockedKeystrokes:[CKEDITOR.CTRL+66,CKEDITOR.CTRL+73,CKEDITOR.CTRL+85]},function(){function b(a,c,d,b,g){var e,f;a=[];for(e in c){f=c[e];f="boolean"==typeof f?
-{}:"function"==typeof f?{match:f}:K(f);"$"!=e.charAt(0)&&(f.elements=e);d&&(f.featureName=d.toLowerCase());var h=f;h.elements=k(h.elements,/\s+/)||null;h.propertiesOnly=h.propertiesOnly||!0===h.elements;var m=/\s*,\s*/,n=void 0;for(n in O){h[n]=k(h[n],m)||null;var r=h,v=I[n],l=k(h[I[n]],m),G=h[n],H=[],t=!0,y=void 0;l?t=!1:l={};for(y in G)"!"==y.charAt(0)&&(y=y.slice(1),H.push(y),l[y]=!0,t=!1);for(;y=H.pop();)G[y]=G["!"+y],delete G["!"+y];r[v]=(t?!1:l)||null}h.match=h.match||null;b.push(f);a.push(f)}c=
-g.elements;g=g.generic;var u;d=0;for(b=a.length;d<b;++d){e=K(a[d]);f=!0===e.classes||!0===e.styles||!0===e.attributes;h=e;n=v=m=void 0;for(m in O)h[m]=x(h[m]);r=!0;for(n in I){m=I[n];v=h[m];l=[];G=void 0;for(G in v)-1<G.indexOf("*")?l.push(new RegExp("^"+G.replace(/\*/g,".*")+"$")):l.push(G);v=l;v.length&&(h[m]=v,r=!1)}h.nothingRequired=r;h.noProperties=!(h.attributes||h.classes||h.styles);if(!0===e.elements||null===e.elements)g[f?"unshift":"push"](e);else for(u in h=e.elements,delete e.elements,
-h)if(c[u])c[u][f?"unshift":"push"](e);else c[u]=[e]}}function h(a,c,d,b){if(!a.match||a.match(c))if(b||l(a,c))if(a.propertiesOnly||(d.valid=!0),d.allAttributes||(d.allAttributes=f(a.attributes,c.attributes,d.validAttributes)),d.allStyles||(d.allStyles=f(a.styles,c.styles,d.validStyles)),!d.allClasses){a=a.classes;c=c.classes;b=d.validClasses;if(a)if(!0===a)a=!0;else{for(var g=0,e=c.length,h;g<e;++g)h=c[g],b[h]||(b[h]=a(h));a=!1}else a=!1;d.allClasses=a}}function f(a,c,d){if(!a)return!1;if(!0===a)return!0;
-for(var b in c)d[b]||(d[b]=a(b));return!1}function e(c,d,b){if(!c.match||c.match(d)){if(c.noProperties)return!1;b.hadInvalidAttribute=a(c.attributes,d.attributes)||b.hadInvalidAttribute;b.hadInvalidStyle=a(c.styles,d.styles)||b.hadInvalidStyle;c=c.classes;d=d.classes;if(c){for(var g=!1,e=!0===c,f=d.length;f--;)if(e||c(d[f]))d.splice(f,1),g=!0;c=g}else c=!1;b.hadInvalidClass=c||b.hadInvalidClass}}function a(a,c){if(!a)return!1;var d=!1,b=!0===a,g;for(g in c)if(b||a(g))delete c[g],d=!0;return d}function m(a,
-c,d){if(a.disabled||a.customConfig&&!d||!c)return!1;a._.cachedChecks={};return!0}function k(a,c){if(!a)return!1;if(!0===a)return a;if("string"==typeof a)return a=L(a),"*"==a?!0:CKEDITOR.tools.convertArrayToObject(a.split(c));if(CKEDITOR.tools.isArray(a))return a.length?CKEDITOR.tools.convertArrayToObject(a):!1;var d={},b=0,g;for(g in a)d[g]=a[g],b++;return b?d:!1}function l(a,d){if(a.nothingRequired)return!0;var b,g,e,f;if(e=a.requiredClasses)for(f=d.classes,b=0;b<e.length;++b)if(g=e[b],"string"==
-typeof g){if(-1==CKEDITOR.tools.indexOf(f,g))return!1}else if(!CKEDITOR.tools.checkIfAnyArrayItemMatches(f,g))return!1;return c(d.styles,a.requiredStyles)&&c(d.attributes,a.requiredAttributes)}function c(a,c){if(!c)return!0;for(var d=0,b;d<c.length;++d)if(b=c[d],"string"==typeof b){if(!(b in a))return!1}else if(!CKEDITOR.tools.checkIfAnyObjectPropertyMatches(a,b))return!1;return!0}function d(a){if(!a)return{};a=a.split(/\s*,\s*/).sort();for(var c={};a.length;)c[a.shift()]="cke-test";return c}function g(a){var c,
-d,b,g,e={},f=1;for(a=L(a);c=a.match(M);)(d=c[2])?(b=n(d,"styles"),g=n(d,"attrs"),d=n(d,"classes")):b=g=d=null,e["$"+f++]={elements:c[1],classes:d,styles:b,attributes:g},a=a.slice(c[0].length);return e}function n(a,c){var d=a.match(Q[c]);return d?L(d[1]):null}function y(a){var c=a.styleBackup=a.attributes.style,d=a.classBackup=a.attributes["class"];a.styles||(a.styles=CKEDITOR.tools.parseCssText(c||"",1));a.classes||(a.classes=d?d.split(/\s+/):[])}function w(a,c,d,b){var g=0,f;b.toHtml&&(c.name=c.name.replace(H,
-"$1"));if(b.doCallbacks&&a.elementCallbacks){a:{f=a.elementCallbacks;for(var m=0,n=f.length,k;m<n;++m)if(k=f[m](c)){f=k;break a}f=void 0}if(f)return f}if(b.doTransform&&(f=a._.transformations[c.name])){y(c);for(m=0;m<f.length;++m)v(a,c,f[m]);t(c)}if(b.doFilter){a:{m=c.name;n=a._;a=n.allowedRules.elements[m];f=n.allowedRules.generic;m=n.disallowedRules.elements[m];n=n.disallowedRules.generic;k=b.skipRequired;var l={valid:!1,validAttributes:{},validClasses:{},validStyles:{},allAttributes:!1,allClasses:!1,
-allStyles:!1,hadInvalidAttribute:!1,hadInvalidClass:!1,hadInvalidStyle:!1},u,x;if(a||f){y(c);if(m)for(u=0,x=m.length;u<x;++u)if(!1===e(m[u],c,l)){a=null;break a}if(n)for(u=0,x=n.length;u<x;++u)e(n[u],c,l);if(a)for(u=0,x=a.length;u<x;++u)h(a[u],c,l,k);if(f)for(u=0,x=f.length;u<x;++u)h(f[u],c,l,k);a=l}else a=null}if(!a||!a.valid)return d.push(c),1;x=a.validAttributes;var B=a.validStyles;f=a.validClasses;var m=c.attributes,F=c.styles,n=c.classes;k=c.classBackup;var N=c.styleBackup,R,L,q=[],l=[],A=/^data-cke-/;
-u=!1;delete m.style;delete m["class"];delete c.classBackup;delete c.styleBackup;if(!a.allAttributes)for(R in m)x[R]||(A.test(R)?R==(L=R.replace(/^data-cke-saved-/,""))||x[L]||(delete m[R],u=!0):(delete m[R],u=!0));if(!a.allStyles||a.hadInvalidStyle){for(R in F)a.allStyles||B[R]?q.push(R+":"+F[R]):u=!0;q.length&&(m.style=q.sort().join("; "))}else N&&(m.style=N);if(!a.allClasses||a.hadInvalidClass){for(R=0;R<n.length;++R)(a.allClasses||f[n[R]])&&l.push(n[R]);l.length&&(m["class"]=l.sort().join(" "));
-k&&l.length<k.split(/\s+/).length&&(u=!0)}else k&&(m["class"]=k);u&&(g=1);if(!b.skipFinalValidation&&!r(c))return d.push(c),1}b.toHtml&&(c.name=c.name.replace(G,"cke:$1"));return g}function p(a){var c=[],d;for(d in a)-1<d.indexOf("*")&&c.push(d.replace(/\*/g,".*"));return c.length?new RegExp("^(?:"+c.join("|")+")$"):null}function t(a){var c=a.attributes,d;delete c.style;delete c["class"];if(d=CKEDITOR.tools.writeCssText(a.styles,!0))c.style=d;a.classes.length&&(c["class"]=a.classes.sort().join(" "))}
-function r(a){switch(a.name){case "a":if(!(a.children.length||a.attributes.name||a.attributes.id))return!1;break;case "img":if(!a.attributes.src)return!1}return!0}function x(a){if(!a)return!1;if(!0===a)return!0;var c=p(a);return function(d){return d in a||c&&d.match(c)}}function u(){return new CKEDITOR.htmlParser.element("br")}function z(a){return a.type==CKEDITOR.NODE_ELEMENT&&("br"==a.name||F.$block[a.name])}function q(a,c,d){var b=a.name;if(F.$empty[b]||!a.children.length)"hr"==b&&"br"==c?a.replaceWith(u()):
-(a.parent&&d.push({check:"it",el:a.parent}),a.remove());else if(F.$block[b]||"tr"==b)if("br"==c)a.previous&&!z(a.previous)&&(c=u(),c.insertBefore(a)),a.next&&!z(a.next)&&(c=u(),c.insertAfter(a)),a.replaceWithChildren();else{var b=a.children,g;b:{g=F[c];for(var e=0,f=b.length,h;e<f;++e)if(h=b[e],h.type==CKEDITOR.NODE_ELEMENT&&!g[h.name]){g=!1;break b}g=!0}if(g)a.name=c,a.attributes={},d.push({check:"parent-down",el:a});else{g=a.parent;for(var e=g.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||"body"==g.name,
-m,n,f=b.length;0<f;)h=b[--f],e&&(h.type==CKEDITOR.NODE_TEXT||h.type==CKEDITOR.NODE_ELEMENT&&F.$inline[h.name])?(m||(m=new CKEDITOR.htmlParser.element(c),m.insertAfter(a),d.push({check:"parent-down",el:m})),m.add(h,0)):(m=null,n=F[g.name]||F.span,h.insertAfter(a),g.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||h.type!=CKEDITOR.NODE_ELEMENT||n[h.name]||d.push({check:"el-up",el:h}));a.remove()}}else b in{style:1,script:1}?a.remove():(a.parent&&d.push({check:"it",el:a.parent}),a.replaceWithChildren())}function v(a,
-c,d){var b,g;for(b=0;b<d.length;++b)if(g=d[b],!(g.check&&!a.check(g.check,!1)||g.left&&!g.left(c))){g.right(c,P);break}}function B(a,c){var d=c.getDefinition(),b=d.attributes,g=d.styles,e,f,h,m;if(a.name!=d.element)return!1;for(e in b)if("class"==e)for(d=b[e].split(/\s+/),h=a.classes.join("|");m=d.pop();){if(-1==h.indexOf(m))return!1}else if(a.attributes[e]!=b[e])return!1;for(f in g)if(a.styles[f]!=g[f])return!1;return!0}function D(a,c){var d,b;"string"==typeof a?d=a:a instanceof CKEDITOR.style?b=
-a:(d=a[0],b=a[1]);return[{element:d,left:b,right:function(a,d){d.transform(a,c)}}]}function A(a){return function(c){return B(c,a)}}function E(a){return function(c,d){d[a](c)}}var F=CKEDITOR.dtd,K=CKEDITOR.tools.copy,L=CKEDITOR.tools.trim,C=["","p","br","div"];CKEDITOR.FILTER_SKIP_TREE=2;CKEDITOR.filter=function(a,c){this.allowedContent=[];this.disallowedContent=[];this.elementCallbacks=null;this.disabled=!1;this.editor=null;this.id=CKEDITOR.tools.getNextNumber();this._={allowedRules:{elements:{},
-generic:[]},disallowedRules:{elements:{},generic:[]},transformations:{},cachedTests:{},cachedChecks:{}};CKEDITOR.filter.instances[this.id]=this;var d=this.editor=a instanceof CKEDITOR.editor?a:null;if(d&&!c){this.customConfig=!0;var b=d.config.allowedContent;!0===b?this.disabled=!0:(b||(this.customConfig=!1),this.allow(b,"config",1),this.allow(d.config.extraAllowedContent,"extra",1),this.allow(C[d.enterMode]+" "+C[d.shiftEnterMode],"default",1),this.disallow(d.config.disallowedContent))}else this.customConfig=
-!1,this.allow(c||a,"default",1)};CKEDITOR.filter.instances={};CKEDITOR.filter.prototype={allow:function(a,c,d){if(!m(this,a,d))return!1;var e,f;if("string"==typeof a)a=g(a);else if(a instanceof CKEDITOR.style){if(a.toAllowedContentRules)return this.allow(a.toAllowedContentRules(this.editor),c,d);e=a.getDefinition();a={};d=e.attributes;a[e.element]=e={styles:e.styles,requiredStyles:e.styles&&CKEDITOR.tools.object.keys(e.styles)};d&&(d=K(d),e.classes=d["class"]?d["class"].split(/\s+/):null,e.requiredClasses=
-e.classes,delete d["class"],e.attributes=d,e.requiredAttributes=d&&CKEDITOR.tools.object.keys(d))}else if(CKEDITOR.tools.isArray(a)){for(e=0;e<a.length;++e)f=this.allow(a[e],c,d);return f}b(this,a,c,this.allowedContent,this._.allowedRules);return!0},applyTo:function(a,c,d,b){if(this.disabled)return!1;var g=this,e=[],f=this.editor&&this.editor.config.protectedSource,h,m=!1,n={doFilter:!d,doTransform:!0,doCallbacks:!0,toHtml:c};a.forEach(function(a){if(a.type==CKEDITOR.NODE_ELEMENT){if("off"==a.attributes["data-cke-filter"])return!1;
-if(!c||"span"!=a.name||!~CKEDITOR.tools.object.keys(a.attributes).join("|").indexOf("data-cke-"))if(h=w(g,a,e,n),h&1)m=!0;else if(h&2)return!1}else if(a.type==CKEDITOR.NODE_COMMENT&&a.value.match(/^\{cke_protected\}(?!\{C\})/)){var d;a:{var b=decodeURIComponent(a.value.replace(/^\{cke_protected\}/,""));d=[];var k,r,v;if(f)for(r=0;r<f.length;++r)if((v=b.match(f[r]))&&v[0].length==b.length){d=!0;break a}b=CKEDITOR.htmlParser.fragment.fromHtml(b);1==b.children.length&&(k=b.children[0]).type==CKEDITOR.NODE_ELEMENT&&
-w(g,k,d,n);d=!d.length}d||e.push(a)}},null,!0);e.length&&(m=!0);var k;a=[];b=C[b||(this.editor?this.editor.enterMode:CKEDITOR.ENTER_P)];for(var v;d=e.pop();)d.type==CKEDITOR.NODE_ELEMENT?q(d,b,a):d.remove();for(;k=a.pop();)if(d=k.el,d.parent)switch(v=F[d.parent.name]||F.span,k.check){case "it":F.$removeEmpty[d.name]&&!d.children.length?q(d,b,a):r(d)||q(d,b,a);break;case "el-up":d.parent.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||v[d.name]||q(d,b,a);break;case "parent-down":d.parent.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||
-v[d.name]||q(d.parent,b,a)}return m},checkFeature:function(a){if(this.disabled||!a)return!0;a.toFeature&&(a=a.toFeature(this.editor));return!a.requiredContent||this.check(a.requiredContent)},disable:function(){this.disabled=!0},disallow:function(a){if(!m(this,a,!0))return!1;"string"==typeof a&&(a=g(a));b(this,a,null,this.disallowedContent,this._.disallowedRules);return!0},addContentForms:function(a){if(!this.disabled&&a){var c,d,b=[],g;for(c=0;c<a.length&&!g;++c)d=a[c],("string"==typeof d||d instanceof
-CKEDITOR.style)&&this.check(d)&&(g=d);if(g){for(c=0;c<a.length;++c)b.push(D(a[c],g));this.addTransformations(b)}}},addElementCallback:function(a){this.elementCallbacks||(this.elementCallbacks=[]);this.elementCallbacks.push(a)},addFeature:function(a){if(this.disabled||!a)return!0;a.toFeature&&(a=a.toFeature(this.editor));this.allow(a.allowedContent,a.name);this.addTransformations(a.contentTransformations);this.addContentForms(a.contentForms);return a.requiredContent&&(this.customConfig||this.disallowedContent.length)?
-this.check(a.requiredContent):!0},addTransformations:function(a){var c,d;if(!this.disabled&&a){var b=this._.transformations,g;for(g=0;g<a.length;++g){c=a[g];var e=void 0,f=void 0,h=void 0,m=void 0,n=void 0,k=void 0;d=[];for(f=0;f<c.length;++f)h=c[f],"string"==typeof h?(h=h.split(/\s*:\s*/),m=h[0],n=null,k=h[1]):(m=h.check,n=h.left,k=h.right),e||(e=h,e=e.element?e.element:m?m.match(/^([a-z0-9]+)/i)[0]:e.left.getDefinition().element),n instanceof CKEDITOR.style&&(n=A(n)),d.push({check:m==e?null:m,left:n,
-right:"string"==typeof k?E(k):k});c=e;b[c]||(b[c]=[]);b[c].push(d)}}},check:function(a,c,b){if(this.disabled)return!0;if(CKEDITOR.tools.isArray(a)){for(var e=a.length;e--;)if(this.check(a[e],c,b))return!0;return!1}var f,h;if("string"==typeof a){h=a+"\x3c"+(!1===c?"0":"1")+(b?"1":"0")+"\x3e";if(h in this._.cachedChecks)return this._.cachedChecks[h];f=g(a).$1;var m=f.styles,e=f.classes;f.name=f.elements;f.classes=e=e?e.split(/\s*,\s*/):[];f.styles=d(m);f.attributes=d(f.attributes);f.children=[];e.length&&
-(f.attributes["class"]=e.join(" "));m&&(f.attributes.style=CKEDITOR.tools.writeCssText(f.styles))}else f=a.getDefinition(),m=f.styles,e=f.attributes||{},m&&!CKEDITOR.tools.isEmpty(m)?(m=K(m),e.style=CKEDITOR.tools.writeCssText(m,!0)):m={},f={name:f.element,attributes:e,classes:e["class"]?e["class"].split(/\s+/):[],styles:m,children:[]};var m=CKEDITOR.tools.clone(f),n=[],k;if(!1!==c&&(k=this._.transformations[f.name])){for(e=0;e<k.length;++e)v(this,f,k[e]);t(f)}w(this,m,n,{doFilter:!0,doTransform:!1!==
-c,skipRequired:!b,skipFinalValidation:!b});0<n.length?b=!1:((c=f.attributes["class"])&&(f.attributes["class"]=f.attributes["class"].split(" ").sort().join(" ")),b=CKEDITOR.tools.objectCompare(f.attributes,m.attributes,!0),c&&(f.attributes["class"]=c));"string"==typeof a&&(this._.cachedChecks[h]=b);return b},getAllowedEnterMode:function(){var a=["p","div","br"],c={p:CKEDITOR.ENTER_P,div:CKEDITOR.ENTER_DIV,br:CKEDITOR.ENTER_BR};return function(d,b){var g=a.slice(),e;if(this.check(C[d]))return d;for(b||
-(g=g.reverse());e=g.pop();)if(this.check(e))return c[e];return CKEDITOR.ENTER_BR}}(),clone:function(){var a=new CKEDITOR.filter,c=CKEDITOR.tools.clone;a.allowedContent=c(this.allowedContent);a._.allowedRules=c(this._.allowedRules);a.disallowedContent=c(this.disallowedContent);a._.disallowedRules=c(this._.disallowedRules);a._.transformations=c(this._.transformations);a.disabled=this.disabled;a.editor=this.editor;return a},destroy:function(){delete CKEDITOR.filter.instances[this.id];delete this._;delete this.allowedContent;
-delete this.disallowedContent}};var O={styles:1,attributes:1,classes:1},I={styles:"requiredStyles",attributes:"requiredAttributes",classes:"requiredClasses"},M=/^([a-z0-9\-*\s]+)((?:\s*\{[!\w\-,\s\*]+\}\s*|\s*\[[!\w\-,\s\*]+\]\s*|\s*\([!\w\-,\s\*]+\)\s*){0,3})(?:;\s*|$)/i,Q={styles:/{([^}]+)}/,attrs:/\[([^\]]+)\]/,classes:/\(([^\)]+)\)/},H=/^cke:(object|embed|param)$/,G=/^(object|embed|param)$/,P;P=CKEDITOR.filter.transformationsTools={sizeToStyle:function(a){this.lengthToStyle(a,"width");this.lengthToStyle(a,
-"height")},sizeToAttribute:function(a){this.lengthToAttribute(a,"width");this.lengthToAttribute(a,"height")},lengthToStyle:function(a,c,d){d=d||c;if(!(d in a.styles)){var b=a.attributes[c];b&&(/^\d+$/.test(b)&&(b+="px"),a.styles[d]=b)}delete a.attributes[c]},lengthToAttribute:function(a,c,d){d=d||c;if(!(d in a.attributes)){var b=a.styles[c],g=b&&b.match(/^(\d+)(?:\.\d*)?px$/);g?a.attributes[d]=g[1]:"cke-test"==b&&(a.attributes[d]="cke-test")}delete a.styles[c]},alignmentToStyle:function(a){if(!("float"in
+{}:"function"==typeof f?{match:f}:K(f);"$"!=e.charAt(0)&&(f.elements=e);d&&(f.featureName=d.toLowerCase());var k=f;k.elements=l(k.elements,/\s+/)||null;k.propertiesOnly=k.propertiesOnly||!0===k.elements;var h=/\s*,\s*/,n=void 0;for(n in N){k[n]=l(k[n],h)||null;var w=k,r=I[n],m=l(k[I[n]],h),G=k[n],H=[],Q=!0,q=void 0;m?Q=!1:m={};for(q in G)"!"==q.charAt(0)&&(q=q.slice(1),H.push(q),m[q]=!0,Q=!1);for(;q=H.pop();)G[q]=G["!"+q],delete G["!"+q];w[r]=(Q?!1:m)||null}k.match=k.match||null;b.push(f);a.push(f)}c=
+g.elements;g=g.generic;var t;d=0;for(b=a.length;d<b;++d){e=K(a[d]);f=!0===e.classes||!0===e.styles||!0===e.attributes;k=e;n=r=h=void 0;for(h in N)k[h]=x(k[h]);w=!0;for(n in I){h=I[n];r=k[h];m=[];G=void 0;for(G in r)-1<G.indexOf("*")?m.push(new RegExp("^"+G.replace(/\*/g,".*")+"$")):m.push(G);r=m;r.length&&(k[h]=r,w=!1)}k.nothingRequired=w;k.noProperties=!(k.attributes||k.classes||k.styles);if(!0===e.elements||null===e.elements)g[f?"unshift":"push"](e);else for(t in k=e.elements,delete e.elements,
+k)if(c[t])c[t][f?"unshift":"push"](e);else c[t]=[e]}}function h(a,c,d,g){if(!a.match||a.match(c))if(g||m(a,c))if(a.propertiesOnly||(d.valid=!0),d.allAttributes||(d.allAttributes=f(a.attributes,c.attributes,d.validAttributes)),d.allStyles||(d.allStyles=f(a.styles,c.styles,d.validStyles)),!d.allClasses){a=a.classes;c=c.classes;g=d.validClasses;if(a)if(!0===a)a=!0;else{for(var b=0,e=c.length,k;b<e;++b)k=c[b],g[k]||(g[k]=a(k));a=!1}else a=!1;d.allClasses=a}}function f(a,c,d){if(!a)return!1;if(!0===a)return!0;
+for(var g in c)d[g]||(d[g]=a(g));return!1}function e(c,d,g){if(!c.match||c.match(d)){if(c.noProperties)return!1;g.hadInvalidAttribute=a(c.attributes,d.attributes)||g.hadInvalidAttribute;g.hadInvalidStyle=a(c.styles,d.styles)||g.hadInvalidStyle;c=c.classes;d=d.classes;if(c){for(var b=!1,e=!0===c,f=d.length;f--;)if(e||c(d[f]))d.splice(f,1),b=!0;c=b}else c=!1;g.hadInvalidClass=c||g.hadInvalidClass}}function a(a,c){if(!a)return!1;var d=!1,g=!0===a,b;for(b in c)if(g||a(b))delete c[b],d=!0;return d}function k(a,
+c,d){if(a.disabled||a.customConfig&&!d||!c)return!1;a._.cachedChecks={};return!0}function l(a,c){if(!a)return!1;if(!0===a)return a;if("string"==typeof a)return a=M(a),"*"==a?!0:CKEDITOR.tools.convertArrayToObject(a.split(c));if(CKEDITOR.tools.isArray(a))return a.length?CKEDITOR.tools.convertArrayToObject(a):!1;var d={},g=0,b;for(b in a)d[b]=a[b],g++;return g?d:!1}function m(a,d){if(a.nothingRequired)return!0;var g,b,e,f;if(e=a.requiredClasses)for(f=d.classes,g=0;g<e.length;++g)if(b=e[g],"string"==
+typeof b){if(-1==CKEDITOR.tools.indexOf(f,b))return!1}else if(!CKEDITOR.tools.checkIfAnyArrayItemMatches(f,b))return!1;return c(d.styles,a.requiredStyles)&&c(d.attributes,a.requiredAttributes)}function c(a,c){if(!c)return!0;for(var d=0,g;d<c.length;++d)if(g=c[d],"string"==typeof g){if(!(g in a))return!1}else if(!CKEDITOR.tools.checkIfAnyObjectPropertyMatches(a,g))return!1;return!0}function d(a){if(!a)return{};a=a.split(/\s*,\s*/).sort();for(var c={};a.length;)c[a.shift()]="cke-test";return c}function g(a){var c,
+d,g,b,e={},f=1;for(a=M(a);c=a.match(L);)(d=c[2])?(g=n(d,"styles"),b=n(d,"attrs"),d=n(d,"classes")):g=b=d=null,e["$"+f++]={elements:c[1],classes:d,styles:g,attributes:b},a=a.slice(c[0].length);return e}function n(a,c){var d=a.match(R[c]);return d?M(d[1]):null}function y(a){var c=a.styleBackup=a.attributes.style,d=a.classBackup=a.attributes["class"];a.styles||(a.styles=CKEDITOR.tools.parseCssText(c||"",1));a.classes||(a.classes=d?d.split(/\s+/):[])}function v(a,c,d,g){var b=0,f;g.toHtml&&(c.name=c.name.replace(H,
+"$1"));if(g.doCallbacks&&a.elementCallbacks){a:{f=a.elementCallbacks;for(var k=0,n=f.length,l;k<n;++k)if(l=f[k](c)){f=l;break a}f=void 0}if(f)return f}if(g.doTransform&&(f=a._.transformations[c.name])){y(c);for(k=0;k<f.length;++k)w(a,c,f[k]);q(c)}if(g.doFilter){a:{k=c.name;n=a._;a=n.allowedRules.elements[k];f=n.allowedRules.generic;k=n.disallowedRules.elements[k];n=n.disallowedRules.generic;l=g.skipRequired;var m={valid:!1,validAttributes:{},validClasses:{},validStyles:{},allAttributes:!1,allClasses:!1,
+allStyles:!1,hadInvalidAttribute:!1,hadInvalidClass:!1,hadInvalidStyle:!1},t,B;if(a||f){y(c);if(k)for(t=0,B=k.length;t<B;++t)if(!1===e(k[t],c,m)){a=null;break a}if(n)for(t=0,B=n.length;t<B;++t)e(n[t],c,m);if(a)for(t=0,B=a.length;t<B;++t)h(a[t],c,m,l);if(f)for(t=0,B=f.length;t<B;++t)h(f[t],c,m,l);a=m}else a=null}if(!a||!a.valid)return d.push(c),1;B=a.validAttributes;var x=a.validStyles;f=a.validClasses;var k=c.attributes,u=c.styles,n=c.classes;l=c.classBackup;var F=c.styleBackup,Q,M,A=[],m=[],C=/^data-cke-/;
+t=!1;delete k.style;delete k["class"];delete c.classBackup;delete c.styleBackup;if(!a.allAttributes)for(Q in k)B[Q]||(C.test(Q)?Q==(M=Q.replace(/^data-cke-saved-/,""))||B[M]||(delete k[Q],t=!0):(delete k[Q],t=!0));if(!a.allStyles||a.hadInvalidStyle){for(Q in u)a.allStyles||x[Q]?A.push(Q+":"+u[Q]):t=!0;A.length&&(k.style=A.sort().join("; "))}else F&&(k.style=F);if(!a.allClasses||a.hadInvalidClass){for(Q=0;Q<n.length;++Q)(a.allClasses||f[n[Q]])&&m.push(n[Q]);m.length&&(k["class"]=m.sort().join(" "));
+l&&m.length<l.split(/\s+/).length&&(t=!0)}else l&&(k["class"]=l);t&&(b=1);if(!g.skipFinalValidation&&!r(c))return d.push(c),1}g.toHtml&&(c.name=c.name.replace(G,"cke:$1"));return b}function p(a){var c=[],d;for(d in a)-1<d.indexOf("*")&&c.push(d.replace(/\*/g,".*"));return c.length?new RegExp("^(?:"+c.join("|")+")$"):null}function q(a){var c=a.attributes,d;delete c.style;delete c["class"];if(d=CKEDITOR.tools.writeCssText(a.styles,!0))c.style=d;a.classes.length&&(c["class"]=a.classes.sort().join(" "))}
+function r(a){switch(a.name){case "a":if(!(a.children.length||a.attributes.name||a.attributes.id))return!1;break;case "img":if(!a.attributes.src)return!1}return!0}function x(a){if(!a)return!1;if(!0===a)return!0;var c=p(a);return function(d){return d in a||c&&d.match(c)}}function t(){return new CKEDITOR.htmlParser.element("br")}function z(a){return a.type==CKEDITOR.NODE_ELEMENT&&("br"==a.name||F.$block[a.name])}function u(a,c,d){var g=a.name;if(F.$empty[g]||!a.children.length)"hr"==g&&"br"==c?a.replaceWith(t()):
+(a.parent&&d.push({check:"it",el:a.parent}),a.remove());else if(F.$block[g]||"tr"==g)if("br"==c)a.previous&&!z(a.previous)&&(c=t(),c.insertBefore(a)),a.next&&!z(a.next)&&(c=t(),c.insertAfter(a)),a.replaceWithChildren();else{var g=a.children,b;b:{b=F[c];for(var e=0,f=g.length,k;e<f;++e)if(k=g[e],k.type==CKEDITOR.NODE_ELEMENT&&!b[k.name]){b=!1;break b}b=!0}if(b)a.name=c,a.attributes={},d.push({check:"parent-down",el:a});else{b=a.parent;for(var e=b.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||"body"==b.name,
+h,n,f=g.length;0<f;)k=g[--f],e&&(k.type==CKEDITOR.NODE_TEXT||k.type==CKEDITOR.NODE_ELEMENT&&F.$inline[k.name])?(h||(h=new CKEDITOR.htmlParser.element(c),h.insertAfter(a),d.push({check:"parent-down",el:h})),h.add(k,0)):(h=null,n=F[b.name]||F.span,k.insertAfter(a),b.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||k.type!=CKEDITOR.NODE_ELEMENT||n[k.name]||d.push({check:"el-up",el:k}));a.remove()}}else g in{style:1,script:1}?a.remove():(a.parent&&d.push({check:"it",el:a.parent}),a.replaceWithChildren())}function w(a,
+c,d){var g,b;for(g=0;g<d.length;++g)if(b=d[g],!(b.check&&!a.check(b.check,!1)||b.left&&!b.left(c))){b.right(c,O);break}}function B(a,c){var d=c.getDefinition(),g=d.attributes,b=d.styles,e,f,k,h;if(a.name!=d.element)return!1;for(e in g)if("class"==e)for(d=g[e].split(/\s+/),k=a.classes.join("|");h=d.pop();){if(-1==k.indexOf(h))return!1}else if(a.attributes[e]!=g[e])return!1;for(f in b)if(a.styles[f]!=b[f])return!1;return!0}function C(a,c){var d,g;"string"==typeof a?d=a:a instanceof CKEDITOR.style?g=
+a:(d=a[0],g=a[1]);return[{element:d,left:g,right:function(a,d){d.transform(a,c)}}]}function A(a){return function(c){return B(c,a)}}function E(a){return function(c,d){d[a](c)}}var F=CKEDITOR.dtd,K=CKEDITOR.tools.copy,M=CKEDITOR.tools.trim,D=["","p","br","div"];CKEDITOR.FILTER_SKIP_TREE=2;CKEDITOR.filter=function(a,c){this.allowedContent=[];this.disallowedContent=[];this.elementCallbacks=null;this.disabled=!1;this.editor=null;this.id=CKEDITOR.tools.getNextNumber();this._={allowedRules:{elements:{},
+generic:[]},disallowedRules:{elements:{},generic:[]},transformations:{},cachedTests:{},cachedChecks:{}};CKEDITOR.filter.instances[this.id]=this;var d=this.editor=a instanceof CKEDITOR.editor?a:null;if(d&&!c){this.customConfig=!0;var g=d.config.allowedContent;!0===g?this.disabled=!0:(g||(this.customConfig=!1),this.allow(g,"config",1),this.allow(d.config.extraAllowedContent,"extra",1),this.allow(D[d.enterMode]+" "+D[d.shiftEnterMode],"default",1),this.disallow(d.config.disallowedContent))}else this.customConfig=
+!1,this.allow(c||a,"default",1)};CKEDITOR.filter.instances={};CKEDITOR.filter.prototype={allow:function(a,c,d){if(!k(this,a,d))return!1;var e,f;if("string"==typeof a)a=g(a);else if(a instanceof CKEDITOR.style){if(a.toAllowedContentRules)return this.allow(a.toAllowedContentRules(this.editor),c,d);e=a.getDefinition();a={};d=e.attributes;a[e.element]=e={styles:e.styles,requiredStyles:e.styles&&CKEDITOR.tools.object.keys(e.styles)};d&&(d=K(d),e.classes=d["class"]?d["class"].split(/\s+/):null,e.requiredClasses=
+e.classes,delete d["class"],e.attributes=d,e.requiredAttributes=d&&CKEDITOR.tools.object.keys(d))}else if(CKEDITOR.tools.isArray(a)){for(e=0;e<a.length;++e)f=this.allow(a[e],c,d);return f}b(this,a,c,this.allowedContent,this._.allowedRules);return!0},applyTo:function(a,c,d,g){if(this.disabled)return!1;var b=this,e=[],f=this.editor&&this.editor.config.protectedSource,k,h=!1,n={doFilter:!d,doTransform:!0,doCallbacks:!0,toHtml:c};a.forEach(function(a){if(a.type==CKEDITOR.NODE_ELEMENT){if("off"==a.attributes["data-cke-filter"])return!1;
+if(!c||"span"!=a.name||!~CKEDITOR.tools.object.keys(a.attributes).join("|").indexOf("data-cke-"))if(k=v(b,a,e,n),k&1)h=!0;else if(k&2)return!1}else if(a.type==CKEDITOR.NODE_COMMENT&&a.value.match(/^\{cke_protected\}(?!\{C\})/)){var d;a:{var g=decodeURIComponent(a.value.replace(/^\{cke_protected\}/,""));d=[];var l,w,r;if(f)for(w=0;w<f.length;++w)if((r=g.match(f[w]))&&r[0].length==g.length){d=!0;break a}g=CKEDITOR.htmlParser.fragment.fromHtml(g);1==g.children.length&&(l=g.children[0]).type==CKEDITOR.NODE_ELEMENT&&
+v(b,l,d,n);d=!d.length}d||e.push(a)}},null,!0);e.length&&(h=!0);var l;a=[];g=D[g||(this.editor?this.editor.enterMode:CKEDITOR.ENTER_P)];for(var w;d=e.pop();)d.type==CKEDITOR.NODE_ELEMENT?u(d,g,a):d.remove();for(;l=a.pop();)if(d=l.el,d.parent)switch(w=F[d.parent.name]||F.span,l.check){case "it":F.$removeEmpty[d.name]&&!d.children.length?u(d,g,a):r(d)||u(d,g,a);break;case "el-up":d.parent.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||w[d.name]||u(d,g,a);break;case "parent-down":d.parent.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||
+w[d.name]||u(d.parent,g,a)}return h},checkFeature:function(a){if(this.disabled||!a)return!0;a.toFeature&&(a=a.toFeature(this.editor));return!a.requiredContent||this.check(a.requiredContent)},disable:function(){this.disabled=!0},disallow:function(a){if(!k(this,a,!0))return!1;"string"==typeof a&&(a=g(a));b(this,a,null,this.disallowedContent,this._.disallowedRules);return!0},addContentForms:function(a){if(!this.disabled&&a){var c,d,g=[],b;for(c=0;c<a.length&&!b;++c)d=a[c],("string"==typeof d||d instanceof
+CKEDITOR.style)&&this.check(d)&&(b=d);if(b){for(c=0;c<a.length;++c)g.push(C(a[c],b));this.addTransformations(g)}}},addElementCallback:function(a){this.elementCallbacks||(this.elementCallbacks=[]);this.elementCallbacks.push(a)},addFeature:function(a){if(this.disabled||!a)return!0;a.toFeature&&(a=a.toFeature(this.editor));this.allow(a.allowedContent,a.name);this.addTransformations(a.contentTransformations);this.addContentForms(a.contentForms);return a.requiredContent&&(this.customConfig||this.disallowedContent.length)?
+this.check(a.requiredContent):!0},addTransformations:function(a){var c,d;if(!this.disabled&&a){var g=this._.transformations,b;for(b=0;b<a.length;++b){c=a[b];var e=void 0,f=void 0,k=void 0,h=void 0,n=void 0,l=void 0;d=[];for(f=0;f<c.length;++f)k=c[f],"string"==typeof k?(k=k.split(/\s*:\s*/),h=k[0],n=null,l=k[1]):(h=k.check,n=k.left,l=k.right),e||(e=k,e=e.element?e.element:h?h.match(/^([a-z0-9]+)/i)[0]:e.left.getDefinition().element),n instanceof CKEDITOR.style&&(n=A(n)),d.push({check:h==e?null:h,left:n,
+right:"string"==typeof l?E(l):l});c=e;g[c]||(g[c]=[]);g[c].push(d)}}},check:function(a,c,b){if(this.disabled)return!0;if(CKEDITOR.tools.isArray(a)){for(var e=a.length;e--;)if(this.check(a[e],c,b))return!0;return!1}var f,k;if("string"==typeof a){k=a+"\x3c"+(!1===c?"0":"1")+(b?"1":"0")+"\x3e";if(k in this._.cachedChecks)return this._.cachedChecks[k];f=g(a).$1;var h=f.styles,e=f.classes;f.name=f.elements;f.classes=e=e?e.split(/\s*,\s*/):[];f.styles=d(h);f.attributes=d(f.attributes);f.children=[];e.length&&
+(f.attributes["class"]=e.join(" "));h&&(f.attributes.style=CKEDITOR.tools.writeCssText(f.styles))}else f=a.getDefinition(),h=f.styles,e=f.attributes||{},h&&!CKEDITOR.tools.isEmpty(h)?(h=K(h),e.style=CKEDITOR.tools.writeCssText(h,!0)):h={},f={name:f.element,attributes:e,classes:e["class"]?e["class"].split(/\s+/):[],styles:h,children:[]};var h=CKEDITOR.tools.clone(f),n=[],l;if(!1!==c&&(l=this._.transformations[f.name])){for(e=0;e<l.length;++e)w(this,f,l[e]);q(f)}v(this,h,n,{doFilter:!0,doTransform:!1!==
+c,skipRequired:!b,skipFinalValidation:!b});0<n.length?b=!1:((c=f.attributes["class"])&&(f.attributes["class"]=f.attributes["class"].split(" ").sort().join(" ")),b=CKEDITOR.tools.objectCompare(f.attributes,h.attributes,!0),c&&(f.attributes["class"]=c));"string"==typeof a&&(this._.cachedChecks[k]=b);return b},getAllowedEnterMode:function(){var a=["p","div","br"],c={p:CKEDITOR.ENTER_P,div:CKEDITOR.ENTER_DIV,br:CKEDITOR.ENTER_BR};return function(d,g){var b=a.slice(),e;if(this.check(D[d]))return d;for(g||
+(b=b.reverse());e=b.pop();)if(this.check(e))return c[e];return CKEDITOR.ENTER_BR}}(),clone:function(){var a=new CKEDITOR.filter,c=CKEDITOR.tools.clone;a.allowedContent=c(this.allowedContent);a._.allowedRules=c(this._.allowedRules);a.disallowedContent=c(this.disallowedContent);a._.disallowedRules=c(this._.disallowedRules);a._.transformations=c(this._.transformations);a.disabled=this.disabled;a.editor=this.editor;return a},destroy:function(){delete CKEDITOR.filter.instances[this.id];delete this._;delete this.allowedContent;
+delete this.disallowedContent}};var N={styles:1,attributes:1,classes:1},I={styles:"requiredStyles",attributes:"requiredAttributes",classes:"requiredClasses"},L=/^([a-z0-9\-*\s]+)((?:\s*\{[!\w\-,\s\*]+\}\s*|\s*\[[!\w\-,\s\*]+\]\s*|\s*\([!\w\-,\s\*]+\)\s*){0,3})(?:;\s*|$)/i,R={styles:/{([^}]+)}/,attrs:/\[([^\]]+)\]/,classes:/\(([^\)]+)\)/},H=/^cke:(object|embed|param)$/,G=/^(object|embed|param)$/,O;O=CKEDITOR.filter.transformationsTools={sizeToStyle:function(a){this.lengthToStyle(a,"width");this.lengthToStyle(a,
+"height")},sizeToAttribute:function(a){this.lengthToAttribute(a,"width");this.lengthToAttribute(a,"height")},lengthToStyle:function(a,c,d){d=d||c;if(!(d in a.styles)){var g=a.attributes[c];g&&(/^\d+$/.test(g)&&(g+="px"),a.styles[d]=g)}delete a.attributes[c]},lengthToAttribute:function(a,c,d){d=d||c;if(!(d in a.attributes)){var g=a.styles[c],b=g&&g.match(/^(\d+)(?:\.\d*)?px$/);b?a.attributes[d]=b[1]:"cke-test"==g&&(a.attributes[d]="cke-test")}delete a.styles[c]},alignmentToStyle:function(a){if(!("float"in
 a.styles)){var c=a.attributes.align;if("left"==c||"right"==c)a.styles["float"]=c}delete a.attributes.align},alignmentToAttribute:function(a){if(!("align"in a.attributes)){var c=a.styles["float"];if("left"==c||"right"==c)a.attributes.align=c}delete a.styles["float"]},splitBorderShorthand:function(a){if(a.styles.border){var c=CKEDITOR.tools.style.parse.border(a.styles.border);c.color&&(a.styles["border-color"]=c.color);c.style&&(a.styles["border-style"]=c.style);c.width&&(a.styles["border-width"]=c.width);
-delete a.styles.border}},listTypeToStyle:function(a){if(a.attributes.type)switch(a.attributes.type){case "a":a.styles["list-style-type"]="lower-alpha";break;case "A":a.styles["list-style-type"]="upper-alpha";break;case "i":a.styles["list-style-type"]="lower-roman";break;case "I":a.styles["list-style-type"]="upper-roman";break;case "1":a.styles["list-style-type"]="decimal";break;default:a.styles["list-style-type"]=a.attributes.type}},splitMarginShorthand:function(a){function c(b){a.styles["margin-top"]=
-d[b[0]];a.styles["margin-right"]=d[b[1]];a.styles["margin-bottom"]=d[b[2]];a.styles["margin-left"]=d[b[3]]}if(a.styles.margin){var d=a.styles.margin.match(/(auto|0|(?:\-?[\.\d]+(?:\w+|%)))/g)||["0px"];switch(d.length){case 1:c([0,0,0,0]);break;case 2:c([0,1,0,1]);break;case 3:c([0,1,2,1]);break;case 4:c([0,1,2,3])}delete a.styles.margin}},matchesStyle:B,transform:function(a,c){if("string"==typeof c)a.name=c;else{var d=c.getDefinition(),b=d.styles,g=d.attributes,e,f,h,m;a.name=d.element;for(e in g)if("class"==
-e)for(d=a.classes.join("|"),h=g[e].split(/\s+/);m=h.pop();)-1==d.indexOf(m)&&a.classes.push(m);else a.attributes[e]=g[e];for(f in b)a.styles[f]=b[f]}}}}(),function(){CKEDITOR.focusManager=function(b){if(b.focusManager)return b.focusManager;this.hasFocus=!1;this.currentActive=null;this._={editor:b};return this};CKEDITOR.focusManager._={blurDelay:200};CKEDITOR.focusManager.prototype={focus:function(b){this._.timer&&clearTimeout(this._.timer);b&&(this.currentActive=b);this.hasFocus||this._.locked||((b=
+delete a.styles.border}},listTypeToStyle:function(a){if(a.attributes.type)switch(a.attributes.type){case "a":a.styles["list-style-type"]="lower-alpha";break;case "A":a.styles["list-style-type"]="upper-alpha";break;case "i":a.styles["list-style-type"]="lower-roman";break;case "I":a.styles["list-style-type"]="upper-roman";break;case "1":a.styles["list-style-type"]="decimal";break;default:a.styles["list-style-type"]=a.attributes.type}},splitMarginShorthand:function(a){function c(g){a.styles["margin-top"]=
+d[g[0]];a.styles["margin-right"]=d[g[1]];a.styles["margin-bottom"]=d[g[2]];a.styles["margin-left"]=d[g[3]]}if(a.styles.margin){var d=a.styles.margin.match(/(auto|0|(?:\-?[\.\d]+(?:\w+|%)))/g)||["0px"];switch(d.length){case 1:c([0,0,0,0]);break;case 2:c([0,1,0,1]);break;case 3:c([0,1,2,1]);break;case 4:c([0,1,2,3])}delete a.styles.margin}},matchesStyle:B,transform:function(a,c){if("string"==typeof c)a.name=c;else{var d=c.getDefinition(),g=d.styles,b=d.attributes,e,f,k,h;a.name=d.element;for(e in b)if("class"==
+e)for(d=a.classes.join("|"),k=b[e].split(/\s+/);h=k.pop();)-1==d.indexOf(h)&&a.classes.push(h);else a.attributes[e]=b[e];for(f in g)a.styles[f]=g[f]}}}}(),function(){CKEDITOR.focusManager=function(b){if(b.focusManager)return b.focusManager;this.hasFocus=!1;this.currentActive=null;this._={editor:b};return this};CKEDITOR.focusManager._={blurDelay:200};CKEDITOR.focusManager.prototype={focus:function(b){this._.timer&&clearTimeout(this._.timer);b&&(this.currentActive=b);this.hasFocus||this._.locked||((b=
 CKEDITOR.currentInstance)&&b.focusManager.blur(1),this.hasFocus=!0,(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 h(){if(this.hasFocus){this.hasFocus=!1;var b=this._.editor.container;b&&b.removeClass("cke_focus");this._.editor.fire("blur")}}if(!this._.locked){this._.timer&&clearTimeout(this._.timer);var f=CKEDITOR.focusManager._.blurDelay;b||!f?h.call(this):this._.timer=
 CKEDITOR.tools.setTimeout(function(){delete this._.timer;h.call(this)},f,this)}},add:function(b,h){var f=b.getCustomData("focusmanager");if(!f||f!=this){f&&f.remove(b);var f="focus",e="blur";h&&(CKEDITOR.env.ie?(f="focusin",e="focusout"):CKEDITOR.event.useCapture=1);var a={blur:function(){b.equals(this.currentActive)&&this.blur()},focus:function(){this.focus(b)}};b.on(f,a.focus,this);b.on(e,a.blur,this);h&&(CKEDITOR.event.useCapture=0);b.setCustomData("focusmanager",this);b.setCustomData("focusmanager_handlers",
 a)}},remove:function(b){b.removeCustomData("focusmanager");var h=b.removeCustomData("focusmanager_handlers");b.removeListener("blur",h.blur);b.removeListener("focus",h.focus)}}}(),CKEDITOR.keystrokeHandler=function(b){if(b.keystrokeHandler)return b.keystrokeHandler;this.keystrokes={};this.blockedKeystrokes={};this._={editor:b};return this},function(){var b,h=function(e){e=e.data;var a=e.getKeystroke(),f=this.keystrokes[a],h=this._.editor;b=!1===h.fire("key",{keyCode:a,domEvent:e});b||(f&&(b=!1!==
 h.execCommand(f,{from:"keystrokeHandler"})),b||(b=!!this.blockedKeystrokes[a]));b&&e.preventDefault(!0);return!b},f=function(e){b&&(b=!1,e.data.preventDefault(!0))};CKEDITOR.keystrokeHandler.prototype={attach:function(b){b.on("keydown",h,this);if(CKEDITOR.env.gecko&&CKEDITOR.env.mac)b.on("keypress",f,this)}}}(),function(){CKEDITOR.lang={languages:{af:1,ar:1,az:1,bg:1,bn:1,bs:1,ca:1,cs:1,cy:1,da:1,de:1,"de-ch":1,el:1,"en-au":1,"en-ca":1,"en-gb":1,en:1,eo:1,es:1,"es-mx":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,id:1,is:1,it:1,ja:1,ka:1,km:1,ko:1,ku:1,lt:1,lv:1,mk:1,mn:1,ms:1,nb:1,nl:1,no:1,oc:1,pl:1,"pt-br":1,pt:1,ro:1,ru:1,si:1,sk:1,sl:1,sq:1,"sr-latn":1,sr:1,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,"zh-cn":1,zh:1},rtl:{ar:1,fa:1,he:1,ku:1,ug:1},load:function(b,h,f){b&&CKEDITOR.lang.languages[b]||(b=this.detect(h,b));var e=this;h=function(){e[b].dir=e.rtl[b]?"rtl":"ltr";f(b,e[b])};this[b]?h():CKEDITOR.scriptLoader.load(CKEDITOR.getUrl("lang/"+b+".js"),h,this)},detect:function(b,
-h){var f=this.languages;h=h||navigator.userLanguage||navigator.language||b;var e=h.toLowerCase().match(/([a-z]+)(?:-([a-z]+))?/),a=e[1],e=e[2];f[a+"-"+e]?a=a+"-"+e:f[a]||(a=null);CKEDITOR.lang.detect=a?function(){return a}:function(a){return a};return a||b}}}(),CKEDITOR.scriptLoader=function(){var b={},h={};return{load:function(f,e,a,m){var k="string"==typeof f;k&&(f=[f]);a||(a=CKEDITOR);var l=f.length,c=l,d=[],g=[],n=function(c){e&&(k?e.call(a,c):e.call(a,d,g))};if(0===c)n(!0);else{var y=function(a,
-b){(b?d:g).push(a);0>=--c&&(m&&CKEDITOR.document.getDocumentElement().removeStyle("cursor"),n(b))},w=function(a,c){b[a]=1;var d=h[a];delete h[a];for(var g=0;g<d.length;g++)d[g](a,c)},p=function(a){if(b[a])y(a,!0);else{var c=h[a]||(h[a]=[]);c.push(y);if(!(1<c.length)){var d=new CKEDITOR.dom.element("script");d.setAttributes({type:"text/javascript",src:a});e&&(CKEDITOR.env.ie&&(8>=CKEDITOR.env.version||CKEDITOR.env.ie9Compat)?d.$.onreadystatechange=function(){if("loaded"==d.$.readyState||"complete"==
-d.$.readyState)d.$.onreadystatechange=null,w(a,!0)}:(d.$.onload=function(){setTimeout(function(){d.$.onload=null;d.$.onerror=null;w(a,!0)},0)},d.$.onerror=function(){d.$.onload=null;d.$.onerror=null;w(a,!1)}));d.appendTo(CKEDITOR.document.getHead())}}};m&&CKEDITOR.document.getDocumentElement().setStyle("cursor","wait");for(var t=0;t<l;t++)p(f[t])}},queue:function(){function b(){var a;(a=e[0])&&this.load(a.scriptUrl,a.callback,CKEDITOR,0)}var e=[];return function(a,h){var k=this;e.push({scriptUrl:a,
-callback:function(){h&&h.apply(this,arguments);e.shift();b.call(k)}});1==e.length&&b.call(this)}}()}}(),CKEDITOR.resourceManager=function(b,h){this.basePath=b;this.fileName=h;this.registered={};this.loaded={};this.externals={};this._={waitingList:{}}},CKEDITOR.resourceManager.prototype={add:function(b,h){if(this.registered[b])throw Error('[CKEDITOR.resourceManager.add] The resource name "'+b+'" is already registered.');var f=this.registered[b]=h||{};f.name=b;f.path=this.getPath(b);CKEDITOR.fire(b+
+h){var f=this.languages;h=h||navigator.userLanguage||navigator.language||b;var e=h.toLowerCase().match(/([a-z]+)(?:-([a-z]+))?/),a=e[1],e=e[2];f[a+"-"+e]?a=a+"-"+e:f[a]||(a=null);CKEDITOR.lang.detect=a?function(){return a}:function(a){return a};return a||b}}}(),CKEDITOR.scriptLoader=function(){var b={},h={};return{load:function(f,e,a,k){var l="string"==typeof f;l&&(f=[f]);a||(a=CKEDITOR);var m=f.length,c=m,d=[],g=[],n=function(c){e&&(l?e.call(a,c):e.call(a,d,g))};if(0===c)n(!0);else{var y=function(a,
+b){(b?d:g).push(a);0>=--c&&(k&&CKEDITOR.document.getDocumentElement().removeStyle("cursor"),n(b))},v=function(a,c){b[a]=1;var d=h[a];delete h[a];for(var g=0;g<d.length;g++)d[g](a,c)},p=function(a){if(b[a])y(a,!0);else{var c=h[a]||(h[a]=[]);c.push(y);if(!(1<c.length)){var d=new CKEDITOR.dom.element("script");d.setAttributes({type:"text/javascript",src:a});e&&(CKEDITOR.env.ie&&(8>=CKEDITOR.env.version||CKEDITOR.env.ie9Compat)?d.$.onreadystatechange=function(){if("loaded"==d.$.readyState||"complete"==
+d.$.readyState)d.$.onreadystatechange=null,v(a,!0)}:(d.$.onload=function(){setTimeout(function(){d.$.onload=null;d.$.onerror=null;v(a,!0)},0)},d.$.onerror=function(){d.$.onload=null;d.$.onerror=null;v(a,!1)}));d.appendTo(CKEDITOR.document.getHead())}}};k&&CKEDITOR.document.getDocumentElement().setStyle("cursor","wait");for(var q=0;q<m;q++)p(f[q])}},queue:function(){function b(){var a;(a=e[0])&&this.load(a.scriptUrl,a.callback,CKEDITOR,0)}var e=[];return function(a,k){var h=this;e.push({scriptUrl:a,
+callback:function(){k&&k.apply(this,arguments);e.shift();b.call(h)}});1==e.length&&b.call(this)}}()}}(),CKEDITOR.resourceManager=function(b,h){this.basePath=b;this.fileName=h;this.registered={};this.loaded={};this.externals={};this._={waitingList:{}}},CKEDITOR.resourceManager.prototype={add:function(b,h){if(this.registered[b])throw Error('[CKEDITOR.resourceManager.add] The resource name "'+b+'" is already registered.');var f=this.registered[b]=h||{};f.name=b;f.path=this.getPath(b);CKEDITOR.fire(b+
 CKEDITOR.tools.capitalize(this.fileName)+"Ready",f);return this.get(b)},get:function(b){return this.registered[b]||null},getPath:function(b){var h=this.externals[b];return CKEDITOR.getUrl(h&&h.dir||this.basePath+b+"/")},getFilePath:function(b){var h=this.externals[b];return CKEDITOR.getUrl(this.getPath(b)+(h?h.file:this.fileName+".js"))},addExternal:function(b,h,f){f||(h=h.replace(/[^\/]+$/,function(a){f=a;return""}));f=f||this.fileName+".js";b=b.split(",");for(var e=0;e<b.length;e++)this.externals[b[e]]=
-{dir:h,file:f}},load:function(b,h,f){CKEDITOR.tools.isArray(b)||(b=b?[b]:[]);for(var e=this.loaded,a=this.registered,m=[],k={},l={},c=0;c<b.length;c++){var d=b[c];if(d)if(e[d]||a[d])l[d]=this.get(d);else{var g=this.getFilePath(d);m.push(g);g in k||(k[g]=[]);k[g].push(d)}}CKEDITOR.scriptLoader.load(m,function(a,c){if(c.length)throw Error('[CKEDITOR.resourceManager.load] Resource name "'+k[c[0]].join(",")+'" was not found at "'+c[0]+'".');for(var d=0;d<a.length;d++)for(var b=k[a[d]],g=0;g<b.length;g++){var m=
-b[g];l[m]=this.get(m);e[m]=1}h.call(f,l)},this)}},CKEDITOR.plugins=new CKEDITOR.resourceManager("plugins/","plugin"),CKEDITOR.plugins.load=CKEDITOR.tools.override(CKEDITOR.plugins.load,function(b){var h={};return function(f,e,a){var m={},k=function(f){b.call(this,f,function(c){CKEDITOR.tools.extend(m,c);var d=[],b;for(b in c){var f=c[b],l=f&&f.requires;if(!h[b]){if(f.icons)for(var w=f.icons.split(","),p=w.length;p--;)CKEDITOR.skin.addIcon(w[p],f.path+"icons/"+(CKEDITOR.env.hidpi&&f.hidpi?"hidpi/":
-"")+w[p]+".png");f.isSupportedEnvironment=f.isSupportedEnvironment||function(){return!0};h[b]=1}if(l)for(l.split&&(l=l.split(",")),f=0;f<l.length;f++)m[l[f]]||d.push(l[f])}if(d.length)k.call(this,d);else{for(b in m)f=m[b],f.onLoad&&!f.onLoad._called&&(!1===f.onLoad()&&delete m[b],f.onLoad._called=1);e&&e.call(a||window,m)}},this)};k.call(this,f)}}),CKEDITOR.plugins.setLang=function(b,h,f){var e=this.get(b);b=e.langEntries||(e.langEntries={});e=e.lang||(e.lang=[]);e.split&&(e=e.split(","));-1==CKEDITOR.tools.indexOf(e,
+{dir:h,file:f}},load:function(b,h,f){CKEDITOR.tools.isArray(b)||(b=b?[b]:[]);for(var e=this.loaded,a=this.registered,k=[],l={},m={},c=0;c<b.length;c++){var d=b[c];if(d)if(e[d]||a[d])m[d]=this.get(d);else{var g=this.getFilePath(d);k.push(g);g in l||(l[g]=[]);l[g].push(d)}}CKEDITOR.scriptLoader.load(k,function(a,c){if(c.length)throw Error('[CKEDITOR.resourceManager.load] Resource name "'+l[c[0]].join(",")+'" was not found at "'+c[0]+'".');for(var d=0;d<a.length;d++)for(var g=l[a[d]],b=0;b<g.length;b++){var k=
+g[b];m[k]=this.get(k);e[k]=1}h.call(f,m)},this)}},CKEDITOR.plugins=new CKEDITOR.resourceManager("plugins/","plugin"),CKEDITOR.plugins.load=CKEDITOR.tools.override(CKEDITOR.plugins.load,function(b){var h={};return function(f,e,a){var k={},l=function(f){b.call(this,f,function(c){CKEDITOR.tools.extend(k,c);var d=[],g;for(g in c){var b=c[g],f=b&&b.requires;if(!h[g]){if(b.icons)for(var m=b.icons.split(","),p=m.length;p--;)CKEDITOR.skin.addIcon(m[p],b.path+"icons/"+(CKEDITOR.env.hidpi&&b.hidpi?"hidpi/":
+"")+m[p]+".png");b.isSupportedEnvironment=b.isSupportedEnvironment||function(){return!0};h[g]=1}if(f)for(f.split&&(f=f.split(",")),b=0;b<f.length;b++)k[f[b]]||d.push(f[b])}if(d.length)l.call(this,d);else{for(g in k)b=k[g],b.onLoad&&!b.onLoad._called&&(!1===b.onLoad()&&delete k[g],b.onLoad._called=1);e&&e.call(a||window,k)}},this)};l.call(this,f)}}),CKEDITOR.plugins.setLang=function(b,h,f){var e=this.get(b);b=e.langEntries||(e.langEntries={});e=e.lang||(e.lang=[]);e.split&&(e=e.split(","));-1==CKEDITOR.tools.indexOf(e,
 h)&&e.push(h);b[h]=f},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,h,f){f.name=b.toLowerCase();var e=this.items[b]={type:h,command:f.command||null,args:Array.prototype.slice.call(arguments,2)};CKEDITOR.tools.extend(e,f)},get:function(b){return this.instances[b]},create:function(b){var h=this.items[b],f=h&&this._.handlers[h.type],e=h&&h.command&&this.editor.getCommand(h.command),f=f&&
 f.create.apply(this,h.args);this.instances[b]=f;e&&e.uiItems.push(f);f&&!f.type&&(f.type=h.type);return f},addHandler:function(b,h){this._.handlers[b]=h},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(a,c,d){CKEDITOR.event.call(this);a=a&&CKEDITOR.tools.clone(a);if(void 0!==c){if(!(c instanceof CKEDITOR.dom.element))throw Error("Expect element of type CKEDITOR.dom.element.");
 if(!d)throw Error("One of the element modes must be specified.");if(CKEDITOR.env.ie&&CKEDITOR.env.quirks&&d==CKEDITOR.ELEMENT_MODE_INLINE)throw Error("Inline element mode is not supported on IE quirks.");if(!f(c,d))throw Error('The specified element mode is not supported on element: "'+c.getName()+'".');this.element=c;this.elementMode=d;this.name=this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO&&(c.getId()||c.getNameAtt())}else this.elementMode=CKEDITOR.ELEMENT_MODE_NONE;this._={};this.commands={};
-this.templates={};this.name=this.name||h();this.id=CKEDITOR.tools.getNextId();this.status="unloaded";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("readOnly",e);this.on("selectionChange",function(a){m(this,a.data.path)});this.on("activeFilterChange",function(){m(this,this.elementPath(),!0)});this.on("mode",e);CKEDITOR.dom.selection.setupEditorOptimization(this);
-this.on("instanceReady",function(){if(this.config.startupFocus){if("end"===this.config.startupFocus){var a=this.createRange();a.selectNodeContents(this.editable());a.shrink(CKEDITOR.SHRINK_ELEMENT,!0);a.collapse();this.getSelection().selectRanges([a])}this.focus()}});CKEDITOR.fire("instanceCreated",null,this);CKEDITOR.add(this);CKEDITOR.tools.setTimeout(function(){this.isDestroyed()||this.isDetached()||l(this,a)},0,this)}function h(){do var a="editor"+ ++p;while(CKEDITOR.instances[a]);return a}function f(a,
-c){return c==CKEDITOR.ELEMENT_MODE_INLINE?a.is(CKEDITOR.dtd.$editable)||a.is("textarea"):c==CKEDITOR.ELEMENT_MODE_REPLACE?!a.is(CKEDITOR.dtd.$nonBodyContent):1}function e(){var c=this.commands,d;for(d in c)a(this,c[d])}function a(a,c){c[c.startDisabled?"disable":a.readOnly&&!c.readOnly?"disable":c.modes[a.mode]?"enable":"disable"]()}function m(a,c,d){if(c){var b,g,e=a.commands;for(g in e)b=e[g],(d||b.contextSensitive)&&b.refresh(a,c)}}function k(a){var c=a.config.customConfig;if(!c)return!1;var c=
-CKEDITOR.getUrl(c),d=t[c]||(t[c]={});d.fn?(d.fn.call(a,a.config),CKEDITOR.getUrl(a.config.customConfig)!=c&&k(a)||a.fireOnce("customConfigLoaded")):CKEDITOR.scriptLoader.queue(c,function(){d.fn=d.fn||CKEDITOR.editorConfig||function(){};k(a)});return!0}function l(a,d){a.on("customConfigLoaded",function(){if(d){if(d.on)for(var b in d.on)a.on(b,d.on[b]);CKEDITOR.tools.extend(a.config,d,!0);delete a.config.on}b=a.config;a.readOnly=b.readOnly?!0:a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.element.is("textarea")?
-a.element.hasAttribute("disabled")||a.element.hasAttribute("readonly"):a.element.isReadOnly():a.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE?a.element.hasAttribute("disabled")||a.element.hasAttribute("readonly"):!1;a.blockless=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?!(a.element.is("textarea")||CKEDITOR.dtd[a.element.getName()].p):!1;a.tabIndex=b.tabIndex||a.element&&a.element.getAttribute("tabindex")||0;a.activeEnterMode=a.enterMode=a.blockless?CKEDITOR.ENTER_BR:b.enterMode;a.activeShiftEnterMode=
-a.shiftEnterMode=a.blockless?CKEDITOR.ENTER_BR:b.shiftEnterMode;b.skin&&(CKEDITOR.skinName=b.skin);a.fireOnce("configLoaded");a.dataProcessor=new CKEDITOR.htmlDataProcessor(a);a.filter=a.activeFilter=new CKEDITOR.filter(a);c(a)});d&&null!=d.customConfig&&(a.config.customConfig=d.customConfig);k(a)||a.fireOnce("customConfigLoaded")}function c(a){CKEDITOR.skin.loadPart("editor",function(){d(a)})}function d(a){CKEDITOR.lang.load(a.config.language,a.config.defaultLanguage,function(c,d){var b=a.config.title;
+this.templates={};this.name=this.name||h();this.id=CKEDITOR.tools.getNextId();this.status="unloaded";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("readOnly",e);this.on("selectionChange",function(a){k(this,a.data.path)});this.on("activeFilterChange",function(){k(this,this.elementPath(),!0)});this.on("mode",e);CKEDITOR.dom.selection.setupEditorOptimization(this);
+this.on("instanceReady",function(){if(this.config.startupFocus){if("end"===this.config.startupFocus){var a=this.createRange();a.selectNodeContents(this.editable());a.shrink(CKEDITOR.SHRINK_ELEMENT,!0);a.collapse();this.getSelection().selectRanges([a])}this.focus()}});CKEDITOR.fire("instanceCreated",null,this);CKEDITOR.add(this);CKEDITOR.tools.setTimeout(function(){this.isDestroyed()||this.isDetached()||m(this,a)},0,this)}function h(){do var a="editor"+ ++p;while(CKEDITOR.instances[a]);return a}function f(a,
+c){return c==CKEDITOR.ELEMENT_MODE_INLINE?a.is(CKEDITOR.dtd.$editable)||a.is("textarea"):c==CKEDITOR.ELEMENT_MODE_REPLACE?!a.is(CKEDITOR.dtd.$nonBodyContent):1}function e(){var c=this.commands,d;for(d in c)a(this,c[d])}function a(a,c){c[c.startDisabled?"disable":a.readOnly&&!c.readOnly?"disable":c.modes[a.mode]?"enable":"disable"]()}function k(a,c,d){if(c){var g,b,e=a.commands;for(b in e)g=e[b],(d||g.contextSensitive)&&g.refresh(a,c)}}function l(a){var c=a.config.customConfig;if(!c)return!1;var c=
+CKEDITOR.getUrl(c),d=q[c]||(q[c]={});d.fn?(d.fn.call(a,a.config),CKEDITOR.getUrl(a.config.customConfig)!=c&&l(a)||a.fireOnce("customConfigLoaded")):CKEDITOR.scriptLoader.queue(c,function(){d.fn=d.fn||CKEDITOR.editorConfig||function(){};l(a)});return!0}function m(a,d){a.on("customConfigLoaded",function(){if(d){if(d.on)for(var g in d.on)a.on(g,d.on[g]);CKEDITOR.tools.extend(a.config,d,!0);delete a.config.on}g=a.config;a.readOnly=g.readOnly?!0:a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.element.is("textarea")?
+a.element.hasAttribute("disabled")||a.element.hasAttribute("readonly"):a.element.isReadOnly():a.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE?a.element.hasAttribute("disabled")||a.element.hasAttribute("readonly"):!1;a.blockless=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?!(a.element.is("textarea")||CKEDITOR.dtd[a.element.getName()].p):!1;a.tabIndex=g.tabIndex||a.element&&a.element.getAttribute("tabindex")||0;a.activeEnterMode=a.enterMode=a.blockless?CKEDITOR.ENTER_BR:g.enterMode;a.activeShiftEnterMode=
+a.shiftEnterMode=a.blockless?CKEDITOR.ENTER_BR:g.shiftEnterMode;g.skin&&(CKEDITOR.skinName=g.skin);a.fireOnce("configLoaded");a.dataProcessor=new CKEDITOR.htmlDataProcessor(a);a.filter=a.activeFilter=new CKEDITOR.filter(a);c(a)});d&&null!=d.customConfig&&(a.config.customConfig=d.customConfig);l(a)||a.fireOnce("customConfigLoaded")}function c(a){CKEDITOR.skin.loadPart("editor",function(){d(a)})}function d(a){CKEDITOR.lang.load(a.config.language,a.config.defaultLanguage,function(c,d){var b=a.config.title;
 a.langCode=c;a.lang=CKEDITOR.tools.prototypedCopy(d);a.title="string"==typeof b||!1===b?b:[a.lang.editor,a.name].join(", ");a.config.contentsLangDirection||(a.config.contentsLangDirection=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.element.getDirection(1):a.lang.dir);a.fire("langLoaded");g(a)})}function g(a){a.getStylesSet(function(c){a.once("loaded",function(){a.fire("stylesSet",{styles:c})},null,null,1);n(a)})}function n(a){function c(a){if(!a)return"";CKEDITOR.tools.isArray(a)&&(a=a.join(","));
-return a.replace(/\s/g,"")}var d=a.config,b=c(d.plugins),g=c(d.extraPlugins),e=c(d.removePlugins);if(g)var f=new RegExp("(?:^|,)(?:"+g.replace(/,/g,"|")+")(?\x3d,|$)","g"),b=b.replace(f,""),b=b+(","+g);if(e)var h=new RegExp("(?:^|,)(?:"+e.replace(/,/g,"|")+")(?\x3d,|$)","g"),b=b.replace(h,"");CKEDITOR.env.air&&(b+=",adobeair");CKEDITOR.plugins.load(b.split(","),function(c){var b=[],g=[],e=[];a.plugins=CKEDITOR.tools.extend({},a.plugins,c);for(var f in c){var m=c[f],n=m.lang,k=null,l=m.requires,v;
-CKEDITOR.tools.isArray(l)&&(l=l.join(","));if(l&&(v=l.match(h)))for(;l=v.pop();)CKEDITOR.error("editor-plugin-required",{plugin:l.replace(",",""),requiredBy:f});n&&!a.lang[f]&&(n.split&&(n=n.split(",")),0<=CKEDITOR.tools.indexOf(n,a.langCode)?k=a.langCode:(k=a.langCode.replace(/-.*/,""),k=k!=a.langCode&&0<=CKEDITOR.tools.indexOf(n,k)?k:0<=CKEDITOR.tools.indexOf(n,"en")?"en":n[0]),m.langEntries&&m.langEntries[k]?(a.lang[f]=m.langEntries[k],k=null):e.push(CKEDITOR.getUrl(m.path+"lang/"+k+".js")));g.push(k);
-b.push(m)}CKEDITOR.scriptLoader.load(e,function(){if(!a.isDestroyed()&&!a.isDetached()){for(var c=["beforeInit","init","afterInit"],e=0;e<c.length;e++)for(var f=0;f<b.length;f++){var h=b[f];0===e&&g[f]&&h.lang&&h.langEntries&&(a.lang[h.name]=h.langEntries[g[f]]);if(h[c[e]])h[c[e]](a)}a.fireOnce("pluginsLoaded");d.keystrokes&&a.setKeystroke(a.config.keystrokes);for(f=0;f<a.config.blockedKeystrokes.length;f++)a.keystrokeHandler.blockedKeystrokes[a.config.blockedKeystrokes[f]]=1;a.status="loaded";a.fireOnce("loaded");
-CKEDITOR.fire("instanceLoaded",null,a)}})})}function y(){var a=this.element;if(a&&this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO){var c=this.getData();this.config.htmlEncodeOutput&&(c=CKEDITOR.tools.htmlEncode(c));a.is("textarea")?a.setValue(c):a.setHtml(c);return!0}return!1}function w(a,c){function d(a){var c=a.startContainer,b=a.endContainer;return c.is&&(c.is("tr")||c.is("td")&&c.equals(b)&&a.endOffset===c.getChildCount())?!0:!1}function b(a){var c=a.startContainer;return c.is("tr")?a.cloneContents():
-c.clone(!0)}for(var g=new CKEDITOR.dom.documentFragment,e,f,h,m=0;m<a.length;m++){var n=a[m],k=n.startContainer.getAscendant("tr",!0);d(n)?(e||(e=k.getAscendant("table").clone(),e.append(k.getAscendant({thead:1,tbody:1,tfoot:1}).clone()),g.append(e),e=e.findOne("thead, tbody, tfoot")),f&&f.equals(k)||(f=k,h=k.clone(),e.append(h)),h.append(b(n))):g.append(n.cloneContents())}return e?g:c.getHtmlFromRange(a[0])}b.prototype=CKEDITOR.editor.prototype;CKEDITOR.editor=b;var p=0,t={};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,
-{plugins:{detectConflict:function(a,c){for(var d=0;d<c.length;d++){var b=c[d];if(this[b])return CKEDITOR.warn("editor-plugin-conflict",{plugin:a,replacedWith:b}),!0}return!1}},addCommand:function(c,d){d.name=c.toLowerCase();var b=d instanceof CKEDITOR.command?d:new CKEDITOR.command(this,d);this.mode&&a(this,b);return this.commands[c]=b},_attachToForm:function(){function a(c){d.updateElement();d._.required&&!b.getValue()&&!1===d.fire("required")&&c.data.preventDefault()}function c(a){return!!(a&&a.call&&
-a.apply)}var d=this,b=d.element,g=new CKEDITOR.dom.element(b.$.form);b.is("textarea")&&g&&(g.on("submit",a),c(g.$.submit)&&(g.$.submit=CKEDITOR.tools.override(g.$.submit,function(c){return function(){a();c.apply?c.apply(this):c()}})),d.on("destroy",function(){g.removeListener("submit",a)}))},destroy:function(a){var c=CKEDITOR.filter.instances,d=this;this.fire("beforeDestroy");!a&&y.call(this);this.editable(null);this.filter&&delete this.filter;CKEDITOR.tools.array.forEach(CKEDITOR.tools.object.keys(c),
+return a.replace(/\s/g,"")}var d=a.config,g=c(d.plugins),b=c(d.extraPlugins),e=c(d.removePlugins);if(b)var f=new RegExp("(?:^|,)(?:"+b.replace(/,/g,"|")+")(?\x3d,|$)","g"),g=g.replace(f,""),g=g+(","+b);if(e)var k=new RegExp("(?:^|,)(?:"+e.replace(/,/g,"|")+")(?\x3d,|$)","g"),g=g.replace(k,"");CKEDITOR.env.air&&(g+=",adobeair");CKEDITOR.plugins.load(g.split(","),function(c){var g=[],b=[],e=[];a.plugins=CKEDITOR.tools.extend({},a.plugins,c);for(var f in c){var h=c[f],n=h.lang,l=null,w=h.requires,m;
+CKEDITOR.tools.isArray(w)&&(w=w.join(","));if(w&&(m=w.match(k)))for(;w=m.pop();)CKEDITOR.error("editor-plugin-required",{plugin:w.replace(",",""),requiredBy:f});n&&!a.lang[f]&&(n.split&&(n=n.split(",")),0<=CKEDITOR.tools.indexOf(n,a.langCode)?l=a.langCode:(l=a.langCode.replace(/-.*/,""),l=l!=a.langCode&&0<=CKEDITOR.tools.indexOf(n,l)?l:0<=CKEDITOR.tools.indexOf(n,"en")?"en":n[0]),h.langEntries&&h.langEntries[l]?(a.lang[f]=h.langEntries[l],l=null):e.push(CKEDITOR.getUrl(h.path+"lang/"+l+".js")));b.push(l);
+g.push(h)}CKEDITOR.scriptLoader.load(e,function(){if(!a.isDestroyed()&&!a.isDetached()){for(var c=["beforeInit","init","afterInit"],e=0;e<c.length;e++)for(var f=0;f<g.length;f++){var k=g[f];0===e&&b[f]&&k.lang&&k.langEntries&&(a.lang[k.name]=k.langEntries[b[f]]);if(k[c[e]])k[c[e]](a)}a.fireOnce("pluginsLoaded");d.keystrokes&&a.setKeystroke(a.config.keystrokes);for(f=0;f<a.config.blockedKeystrokes.length;f++)a.keystrokeHandler.blockedKeystrokes[a.config.blockedKeystrokes[f]]=1;a.status="loaded";a.fireOnce("loaded");
+CKEDITOR.fire("instanceLoaded",null,a)}})})}function y(){var a=this.element;if(a&&this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO){var c=this.getData();this.config.htmlEncodeOutput&&(c=CKEDITOR.tools.htmlEncode(c));a.is("textarea")?a.setValue(c):a.setHtml(c);return!0}return!1}function v(a,c){function d(a){var c=a.startContainer,g=a.endContainer;return c.is&&(c.is("tr")||c.is("td")&&c.equals(g)&&a.endOffset===c.getChildCount())?!0:!1}function g(a){var c=a.startContainer;return c.is("tr")?a.cloneContents():
+c.clone(!0)}for(var b=new CKEDITOR.dom.documentFragment,e,f,k,h=0;h<a.length;h++){var n=a[h],l=n.startContainer.getAscendant("tr",!0);d(n)?(e||(e=l.getAscendant("table").clone(),e.append(l.getAscendant({thead:1,tbody:1,tfoot:1}).clone()),b.append(e),e=e.findOne("thead, tbody, tfoot")),f&&f.equals(l)||(f=l,k=l.clone(),e.append(k)),k.append(g(n))):b.append(n.cloneContents())}return e?b:c.getHtmlFromRange(a[0])}b.prototype=CKEDITOR.editor.prototype;CKEDITOR.editor=b;var p=0,q={};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,
+{plugins:{detectConflict:function(a,c){for(var d=0;d<c.length;d++){var g=c[d];if(this[g])return CKEDITOR.warn("editor-plugin-conflict",{plugin:a,replacedWith:g}),!0}return!1}},addCommand:function(c,d){d.name=c.toLowerCase();var g=d instanceof CKEDITOR.command?d:new CKEDITOR.command(this,d);this.mode&&a(this,g);return this.commands[c]=g},_attachToForm:function(){function a(c){d.updateElement();d._.required&&!g.getValue()&&!1===d.fire("required")&&c.data.preventDefault()}function c(a){return!!(a&&a.call&&
+a.apply)}var d=this,g=d.element,b=new CKEDITOR.dom.element(g.$.form);g.is("textarea")&&b&&(b.on("submit",a),c(b.$.submit)&&(b.$.submit=CKEDITOR.tools.override(b.$.submit,function(c){return function(){a();c.apply?c.apply(this):c()}})),d.on("destroy",function(){b.removeListener("submit",a)}))},destroy:function(a){var c=CKEDITOR.filter.instances,d=this;this.fire("beforeDestroy");!a&&y.call(this);this.editable(null);this.filter&&delete this.filter;CKEDITOR.tools.array.forEach(CKEDITOR.tools.object.keys(c),
 function(a){a=c[a];d===a.editor&&a.destroy()});delete this.activeFilter;this.status="destroyed";this.fire("destroy");this.removeAllListeners();CKEDITOR.remove(this);CKEDITOR.fire("instanceDestroyed",null,this)},elementPath:function(a){if(!a){a=this.getSelection();if(!a)return null;a=a.getStartElement()}return a?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,c){var d=this.getCommand(a),
-b={name:a,commandData:c||{},command:d};return d&&d.state!=CKEDITOR.TRISTATE_DISABLED&&!1!==this.fire("beforeCommandExec",b)&&(b.returnValue=d.exec(b.commandData),!d.async&&!1!==this.fire("afterCommandExec",b))?b.returnValue:!1},getCommand:function(a){return this.commands[a]},getData:function(a){!a&&this.fire("beforeGetData");var c=this._.data;"string"!=typeof c&&(c=(c=this.element)&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE?c.is("textarea")?c.getValue():c.getHtml():"");c={dataValue:c};!a&&this.fire("getData",
-c);return c.dataValue},getSnapshot:function(){var a=this.fire("getSnapshot");"string"!=typeof a&&(a=(a=this.element)&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE?a.is("textarea")?a.getValue():a.getHtml():"");return a},loadSnapshot:function(a){this.fire("loadSnapshot",a)},setData:function(a,c,d){var b=!0,g=c;c&&"object"==typeof c&&(d=c.internal,g=c.callback,b=!c.noSnapshot);!d&&b&&this.fire("saveSnapshot");if(g||!d)this.once("dataReady",function(a){!d&&b&&this.fire("saveSnapshot");g&&g.call(a.editor)});
+g={name:a,commandData:c||{},command:d};return d&&d.state!=CKEDITOR.TRISTATE_DISABLED&&!1!==this.fire("beforeCommandExec",g)&&(g.returnValue=d.exec(g.commandData),!d.async&&!1!==this.fire("afterCommandExec",g))?g.returnValue:!1},getCommand:function(a){return this.commands[a]},getData:function(a){!a&&this.fire("beforeGetData");var c=this._.data;"string"!=typeof c&&(c=(c=this.element)&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE?c.is("textarea")?c.getValue():c.getHtml():"");c={dataValue:c};!a&&this.fire("getData",
+c);return c.dataValue},getSnapshot:function(){var a=this.fire("getSnapshot");"string"!=typeof a&&(a=(a=this.element)&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE?a.is("textarea")?a.getValue():a.getHtml():"");return a},loadSnapshot:function(a){this.fire("loadSnapshot",a)},setData:function(a,c,d){var g=!0,b=c;c&&"object"==typeof c&&(d=c.internal,b=c.callback,g=!c.noSnapshot);!d&&g&&this.fire("saveSnapshot");if(b||!d)this.once("dataReady",function(a){!d&&g&&this.fire("saveSnapshot");b&&b.call(a.editor)});
 a={dataValue:a};!d&&this.fire("setData",a);this._.data=a.dataValue;!d&&this.fire("afterSetData",a)},setReadOnly:function(a){a=null==a||a;this.readOnly!=a&&(this.readOnly=a,this.keystrokeHandler.blockedKeystrokes[8]=+a,this.editable().setReadOnly(a),this.fire("readOnly"))},insertHtml:function(a,c,d){this.fire("insertHtml",{dataValue:a,mode:c,range:d})},insertText:function(a){this.fire("insertText",a)},insertElement:function(a){this.fire("insertElement",a)},getSelectedHtml:function(a){var c=this.editable(),
-d=this.getSelection(),d=d&&d.getRanges();if(!c||!d||0===d.length)return null;c=w(d,c);return a?c.getHtml():c},extractSelectedHtml:function(a,c){var d=this.editable(),b=this.getSelection().getRanges(),g=new CKEDITOR.dom.documentFragment,e;if(!d||0===b.length)return null;for(e=0;e<b.length;e++)g.append(d.extractHtmlFromRange(b[e],c));c||this.getSelection().selectRanges([b[0]]);return a?g.getHtml():g},focus:function(){this.fire("beforeFocus")},checkDirty:function(){return"ready"==this.status&&this._.previousValue!==
-this.getSnapshot()},resetDirty:function(){this._.previousValue=this.getSnapshot()},updateElement:function(){return y.call(this)},setKeystroke:function(){for(var a=this.keystrokeHandler.keystrokes,c=CKEDITOR.tools.isArray(arguments[0])?arguments[0]:[[].slice.call(arguments,0)],d,b,g=c.length;g--;)d=c[g],b=0,CKEDITOR.tools.isArray(d)&&(b=d[1],d=d[0]),b?a[d]=b:delete a[d]},getCommandKeystroke:function(a,c){var d="string"===typeof a?this.getCommand(a):a,b=[];if(d){var g=CKEDITOR.tools.object.findKey(this.commands,
-d),e=this.keystrokeHandler.keystrokes;if(d.fakeKeystroke)b.push(d.fakeKeystroke);else for(var f in e)e[f]===g&&b.push(f)}return c?b:b[0]||null},addFeature:function(a){return this.filter.addFeature(a)},setActiveFilter:function(a){a||(a=this.filter);this.activeFilter!==a&&(this.activeFilter=a,this.fire("activeFilterChange"),a===this.filter?this.setActiveEnterMode(null,null):this.setActiveEnterMode(a.getAllowedEnterMode(this.enterMode),a.getAllowedEnterMode(this.shiftEnterMode,!0)))},setActiveEnterMode:function(a,
+d=this.getSelection(),d=d&&d.getRanges();if(!c||!d||0===d.length)return null;c=v(d,c);return a?c.getHtml():c},extractSelectedHtml:function(a,c){var d=this.editable(),g=this.getSelection().getRanges(),b=new CKEDITOR.dom.documentFragment,e;if(!d||0===g.length)return null;for(e=0;e<g.length;e++)b.append(d.extractHtmlFromRange(g[e],c));c||this.getSelection().selectRanges([g[0]]);return a?b.getHtml():b},focus:function(){this.fire("beforeFocus")},checkDirty:function(){return"ready"==this.status&&this._.previousValue!==
+this.getSnapshot()},resetDirty:function(){this._.previousValue=this.getSnapshot()},updateElement:function(){return y.call(this)},setKeystroke:function(){for(var a=this.keystrokeHandler.keystrokes,c=CKEDITOR.tools.isArray(arguments[0])?arguments[0]:[[].slice.call(arguments,0)],d,g,b=c.length;b--;)d=c[b],g=0,CKEDITOR.tools.isArray(d)&&(g=d[1],d=d[0]),g?a[d]=g:delete a[d]},getCommandKeystroke:function(a,c){var d="string"===typeof a?this.getCommand(a):a,g=[];if(d){var b=CKEDITOR.tools.object.findKey(this.commands,
+d),e=this.keystrokeHandler.keystrokes;if(d.fakeKeystroke)g.push(d.fakeKeystroke);else for(var f in e)e[f]===b&&g.push(f)}return c?g:g[0]||null},addFeature:function(a){return this.filter.addFeature(a)},setActiveFilter:function(a){a||(a=this.filter);this.activeFilter!==a&&(this.activeFilter=a,this.fire("activeFilterChange"),a===this.filter?this.setActiveEnterMode(null,null):this.setActiveEnterMode(a.getAllowedEnterMode(this.enterMode),a.getAllowedEnterMode(this.shiftEnterMode,!0)))},setActiveEnterMode:function(a,
 c){a=a?this.blockless?CKEDITOR.ENTER_BR:a:this.enterMode;c=c?this.blockless?CKEDITOR.ENTER_BR:c:this.shiftEnterMode;if(this.activeEnterMode!=a||this.activeShiftEnterMode!=c)this.activeEnterMode=a,this.activeShiftEnterMode=c,this.fire("activeEnterModeChange")},showNotification:function(a){alert(a)},isDetached:function(){return!!this.container&&this.container.isDetached()},isDestroyed:function(){return"destroyed"===this.status}});CKEDITOR.editor._getEditorElement=function(a){if(!CKEDITOR.env.isCompatible)return null;
-var c=CKEDITOR.dom.element.get(a);return c?c.getEditor()?(CKEDITOR.error("editor-element-conflict",{editorName:c.getEditor().name}),null):c:(CKEDITOR.error("editor-incorrect-element",{element:a}),null)}}(),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:/<(?:(?:\/([^>]+)>)|(?:!--([\S|\s]*?)--!?>)|(?:([^\/\s>]+)((?:\s+[\w\-:.]+(?:\s*=\s*?(?:(?:"[^"]*")|(?:'[^']*')|[^\s"'\/>]+))?)*)[\S\s]*?(\/?)>))/g}},
-function(){var b=/([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,h={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(f){for(var e,a,m=0,k;e=this._.htmlPartsRegex.exec(f);){a=e.index;if(a>m)if(m=f.substring(m,a),k)k.push(m);else this.onText(m);
-m=this._.htmlPartsRegex.lastIndex;if(a=e[1])if(a=a.toLowerCase(),k&&CKEDITOR.dtd.$cdata[a]&&(this.onCDATA(k.join("")),k=null),!k){this.onTagClose(a);continue}if(k)k.push(e[0]);else if(a=e[3]){if(a=a.toLowerCase(),!/="/.test(a)){var l={},c,d=e[4];e=!!e[5];if(d)for(;c=b.exec(d);){var g=c[1].toLowerCase();c=c[2]||c[3]||c[4]||"";l[g]=!c&&h[g]?g:CKEDITOR.tools.htmlDecodeAttr(c)}this.onTagOpen(a,l,e);!k&&CKEDITOR.dtd.$cdata[a]&&(k=[])}}else if(a=e[2])this.onComment(a)}if(f.length>m)this.onText(f.substring(m,
-f.length))}}}(),CKEDITOR.htmlParser.basicWriter=CKEDITOR.tools.createClass({$:function(){this._={output:[]}},proto:{openTag:function(b){this._.output.push("\x3c",b)},openTagClose:function(b,h){h?this._.output.push(" /\x3e"):this._.output.push("\x3e")},attribute:function(b,h){"string"==typeof h&&(h=CKEDITOR.tools.htmlEncodeAttr(h));this._.output.push(" ",b,'\x3d"',h,'"')},closeTag:function(b){this._.output.push("\x3c/",b,"\x3e")},text:function(b){this._.output.push(b)},comment:function(b){this._.output.push("\x3c!--",
-b,"--\x3e")},write:function(b){this._.output.push(b)},reset:function(){this._.output=[];this._.indent=!1},getHtml:function(b){var h=this._.output.join("");b&&this.reset();return h}}}),"use strict",function(){CKEDITOR.htmlParser.node=function(){};CKEDITOR.htmlParser.node.prototype={remove:function(){var b=this.parent.children,h=CKEDITOR.tools.indexOf(b,this),f=this.previous,e=this.next;f&&(f.next=e);e&&(e.previous=f);b.splice(h,1);this.parent=null},replaceWith:function(b){var h=this.parent.children,
-f=CKEDITOR.tools.indexOf(h,this),e=b.previous=this.previous,a=b.next=this.next;e&&(e.next=b);a&&(a.previous=b);h[f]=b;b.parent=this.parent;this.parent=null},insertAfter:function(b){var h=b.parent.children,f=CKEDITOR.tools.indexOf(h,b),e=b.next;h.splice(f+1,0,this);this.next=b.next;this.previous=b;b.next=this;e&&(e.previous=this);this.parent=b.parent},insertBefore:function(b){var h=b.parent.children,f=CKEDITOR.tools.indexOf(h,b);h.splice(f,0,this);this.next=b;(this.previous=b.previous)&&(b.previous.next=
-this);b.previous=this;this.parent=b.parent},getAscendant:function(b){var h="function"==typeof b?b:"string"==typeof b?function(e){return e.name==b}:function(e){return e.name in b},f=this.parent;for(;f&&f.type==CKEDITOR.NODE_ELEMENT;){if(h(f))return f;f=f.parent}return null},wrapWith:function(b){this.replaceWith(b);b.add(this);return b},getIndex:function(){return CKEDITOR.tools.indexOf(this.parent.children,this)},getFilterContext:function(b){return b||{}}}}(),"use strict",CKEDITOR.htmlParser.comment=
-function(b){this.value=b;this._={isBlockLike:!1}},CKEDITOR.htmlParser.comment.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_COMMENT,filter:function(b,h){var f=this.value;if(!(f=b.onComment(h,f,this)))return this.remove(),!1;if("string"!=typeof f)return this.replaceWith(f),!1;this.value=f;return!0},writeHtml:function(b,h){h&&this.filter(h);b.comment(this.value)}}),"use strict",function(){CKEDITOR.htmlParser.text=function(b){this.value=b;this._={isBlockLike:!1}};CKEDITOR.htmlParser.text.prototype=
-CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(b,h){if(!(this.value=b.onText(h,this.value,this)))return this.remove(),!1},writeHtml:function(b,h){h&&this.filter(h);b.text(this.value)}})}(),"use strict",function(){CKEDITOR.htmlParser.cdata=function(b){this.value=b};CKEDITOR.htmlParser.cdata.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(){},writeHtml:function(b){b.write(this.value)}})}(),"use strict",
-CKEDITOR.htmlParser.fragment=function(){this.children=[];this.parent=null;this._={isBlockLike:!0,hasInlineStarted:!1}},function(){function b(a){return a.attributes["data-cke-survive"]?!1:"a"==a.name&&a.attributes.href||CKEDITOR.dtd.$removeEmpty[a.name]}var h=CKEDITOR.tools.extend({table:1,ul:1,ol:1,dl:1},CKEDITOR.dtd.table,CKEDITOR.dtd.ul,CKEDITOR.dtd.ol,CKEDITOR.dtd.dl),f={ol:1,ul:1},e=CKEDITOR.tools.extend({},{html:1},CKEDITOR.dtd.html,CKEDITOR.dtd.body,CKEDITOR.dtd.head,{style:1,script:1}),a={ul:"li",
-ol:"li",dl:"dd",table:"tbody",tbody:"tr",thead:"tr",tfoot:"tr",tr:"td"};CKEDITOR.htmlParser.fragment.fromHtml=function(m,k,l){function c(a){var c;if(0<r.length)for(var b=0;b<r.length;b++){var g=r[b],e=g.name,f=CKEDITOR.dtd[e],h=u.name&&CKEDITOR.dtd[u.name];h&&!h[e]||a&&f&&!f[a]&&CKEDITOR.dtd[a]?e==u.name&&(n(u,u.parent,1),b--):(c||(d(),c=1),g=g.clone(),g.parent=u,u=g,r.splice(b,1),b--)}}function d(){for(;x.length;)n(x.shift(),u)}function g(a){if(a._.isBlockLike&&"pre"!=a.name&&"textarea"!=a.name){var c=
-a.children.length,d=a.children[c-1],b;d&&d.type==CKEDITOR.NODE_TEXT&&((b=CKEDITOR.tools.rtrim(d.value))?d.value=b:a.children.length=c-1)}}function n(a,c,d){c=c||u||t;var e=u;void 0===a.previous&&(y(c,a)&&(u=c,p.onTagOpen(l,{}),a.returnPoint=c=u),g(a),b(a)&&!a.children.length||c.add(a),"pre"==a.name&&(q=!1),"textarea"==a.name&&(z=!1));a.returnPoint?(u=a.returnPoint,delete a.returnPoint):u=d?c:e}function y(a,c){if((a==t||"body"==a.name)&&l&&(!a.name||CKEDITOR.dtd[a.name][l])){var d,b;return(d=c.attributes&&
-(b=c.attributes["data-cke-real-element-type"])?b:c.name)&&d in CKEDITOR.dtd.$inline&&!(d in CKEDITOR.dtd.head)&&!c.isOrphan||c.type==CKEDITOR.NODE_TEXT}}function w(a,c){return a in CKEDITOR.dtd.$listItem||a in CKEDITOR.dtd.$tableContent?a==c||"dt"==a&&"dd"==c||"dd"==a&&"dt"==c:!1}var p=new CKEDITOR.htmlParser,t=k instanceof CKEDITOR.htmlParser.element?k:"string"==typeof k?new CKEDITOR.htmlParser.element(k):new CKEDITOR.htmlParser.fragment,r=[],x=[],u=t,z="textarea"==t.name,q="pre"==t.name;p.onTagOpen=
-function(a,g,m,k){g=new CKEDITOR.htmlParser.element(a,g);g.isUnknown&&m&&(g.isEmpty=!0);g.isOptionalClose=k;if(b(g))r.push(g);else{if("pre"==a)q=!0;else{if("br"==a&&q){u.add(new CKEDITOR.htmlParser.text("\n"));return}"textarea"==a&&(z=!0)}if("br"==a)x.push(g);else{for(;!(k=(m=u.name)?CKEDITOR.dtd[m]||(u._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):e,g.isUnknown||u.isUnknown||k[a]);)if(u.isOptionalClose)p.onTagClose(m);else if(a in f&&m in f)m=u.children,(m=m[m.length-1])&&"li"==m.name||n(m=new CKEDITOR.htmlParser.element("li"),
-u),!g.returnPoint&&(g.returnPoint=u),u=m;else if(a in CKEDITOR.dtd.$listItem&&!w(a,m))p.onTagOpen("li"==a?"ul":"dl",{},0,1);else if(m in h&&!w(a,m))!g.returnPoint&&(g.returnPoint=u),u=u.parent;else if(m in CKEDITOR.dtd.$inline&&r.unshift(u),u.parent)n(u,u.parent,1);else{g.isOrphan=1;break}c(a);d();g.parent=u;g.isEmpty?n(g):u=g}}};p.onTagClose=function(a){for(var c=r.length-1;0<=c;c--)if(a==r[c].name){r.splice(c,1);return}for(var b=[],g=[],e=u;e!=t&&e.name!=a;)e._.isBlockLike||g.unshift(e),b.push(e),
-e=e.returnPoint||e.parent;if(e!=t){for(c=0;c<b.length;c++){var f=b[c];n(f,f.parent)}u=e;e._.isBlockLike&&d();n(e,e.parent);e==u&&(u=u.parent);r=r.concat(g)}"body"==a&&(l=!1)};p.onText=function(b){if(!(u._.hasInlineStarted&&!x.length||q||z)&&(b=CKEDITOR.tools.ltrim(b),0===b.length))return;var g=u.name,f=g?CKEDITOR.dtd[g]||(u._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):e;if(!z&&!f["#"]&&g in h)p.onTagOpen(a[g]||""),p.onText(b);else{d();c();q||z||(b=b.replace(/[\t\r\n ]{2,}|[\t\r\n]/g," "));b=
-new CKEDITOR.htmlParser.text(b);if(y(u,b))this.onTagOpen(l,{},0,1);u.add(b)}};p.onCDATA=function(a){u.add(new CKEDITOR.htmlParser.cdata(a))};p.onComment=function(a){d();c();u.add(new CKEDITOR.htmlParser.comment(a))};p.parse(m);for(d();u!=t;)n(u,u.parent,1);g(t);return t};CKEDITOR.htmlParser.fragment.prototype={type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,add:function(a,b){isNaN(b)&&(b=this.children.length);var e=0<b?this.children[b-1]:null;if(e){if(a._.isBlockLike&&e.type==CKEDITOR.NODE_TEXT&&(e.value=CKEDITOR.tools.rtrim(e.value),
-0===e.value.length)){this.children.pop();this.add(a);return}e.next=a}a.previous=e;a.parent=this;this.children.splice(b,0,a);this._.hasInlineStarted||(this._.hasInlineStarted=a.type==CKEDITOR.NODE_TEXT||a.type==CKEDITOR.NODE_ELEMENT&&!a._.isBlockLike)},filter:function(a,b){b=this.getFilterContext(b);a.onRoot(b,this);this.filterChildren(a,!1,b)},filterChildren:function(a,b,e){if(this.childrenFilteredBy!=a.id){e=this.getFilterContext(e);if(b&&!this.parent)a.onRoot(e,this);this.childrenFilteredBy=a.id;
-for(b=0;b<this.children.length;b++)!1===this.children[b].filter(a,e)&&b--}},writeHtml:function(a,b){b&&this.filter(b);this.writeChildrenHtml(a)},writeChildrenHtml:function(a,b,e){var c=this.getFilterContext();if(e&&!this.parent&&b)b.onRoot(c,this);b&&this.filterChildren(b,!1,c);b=0;e=this.children;for(c=e.length;b<c;b++)e[b].writeHtml(a)},forEach:function(a,b,e){if(!(e||b&&this.type!=b))var c=a(this);if(!1!==c){e=this.children;for(var d=0;d<e.length;d++)c=e[d],c.type==CKEDITOR.NODE_ELEMENT?c.forEach(a,
-b):b&&c.type!=b||a(c)}},getFilterContext:function(a){return a||{}}}}(),"use strict",function(){function b(){this.rules=[]}function h(f,e,a,h){var k,l;for(k in e)(l=f[k])||(l=f[k]=new b),l.add(e[k],a,h)}CKEDITOR.htmlParser.filter=CKEDITOR.tools.createClass({$:function(f){this.id=CKEDITOR.tools.getNextNumber();this.elementNameRules=new b;this.attributeNameRules=new b;this.elementsRules={};this.attributesRules={};this.textRules=new b;this.commentRules=new b;this.rootRules=new b;f&&this.addRules(f,10)},
-proto:{addRules:function(b,e){var a;"number"==typeof e?a=e:e&&"priority"in e&&(a=e.priority);"number"!=typeof a&&(a=10);"object"!=typeof e&&(e={});b.elementNames&&this.elementNameRules.addMany(b.elementNames,a,e);b.attributeNames&&this.attributeNameRules.addMany(b.attributeNames,a,e);b.elements&&h(this.elementsRules,b.elements,a,e);b.attributes&&h(this.attributesRules,b.attributes,a,e);b.text&&this.textRules.add(b.text,a,e);b.comment&&this.commentRules.add(b.comment,a,e);b.root&&this.rootRules.add(b.root,
-a,e)},applyTo:function(b){b.filter(this)},onElementName:function(b,e){return this.elementNameRules.execOnName(b,e)},onAttributeName:function(b,e){return this.attributeNameRules.execOnName(b,e)},onText:function(b,e,a){return this.textRules.exec(b,e,a)},onComment:function(b,e,a){return this.commentRules.exec(b,e,a)},onRoot:function(b,e){return this.rootRules.exec(b,e)},onElement:function(b,e){for(var a=[this.elementsRules["^"],this.elementsRules[e.name],this.elementsRules.$],h,k=0;3>k;k++)if(h=a[k]){h=
-h.exec(b,e,this);if(!1===h)return null;if(h&&h!=e)return this.onNode(b,h);if(e.parent&&!e.name)break}return e},onNode:function(b,e){var a=e.type;return a==CKEDITOR.NODE_ELEMENT?this.onElement(b,e):a==CKEDITOR.NODE_TEXT?new CKEDITOR.htmlParser.text(this.onText(b,e.value,e)):a==CKEDITOR.NODE_COMMENT?new CKEDITOR.htmlParser.comment(this.onComment(b,e.value,e)):null},onAttribute:function(b,e,a,h){return(a=this.attributesRules[a])?a.exec(b,h,e,this):h}}});CKEDITOR.htmlParser.filterRulesGroup=b;b.prototype=
-{add:function(b,e,a){this.rules.splice(this.findIndex(e),0,{value:b,priority:e,options:a})},addMany:function(b,e,a){for(var h=[this.findIndex(e),0],k=0,l=b.length;k<l;k++)h.push({value:b[k],priority:e,options:a});this.rules.splice.apply(this.rules,h)},findIndex:function(b){for(var e=this.rules,a=e.length-1;0<=a&&b<e[a].priority;)a--;return a+1},exec:function(b,e){var a=e instanceof CKEDITOR.htmlParser.node||e instanceof CKEDITOR.htmlParser.fragment,h=Array.prototype.slice.call(arguments,1),k=this.rules,
-l=k.length,c,d,g,n;for(n=0;n<l;n++)if(a&&(c=e.type,d=e.name),g=k[n],!(b.nonEditable&&!g.options.applyToAll||b.nestedEditable&&g.options.excludeNestedEditable)){g=g.value.apply(null,h);if(!1===g||a&&g&&(g.name!=d||g.type!=c))return g;null!=g&&(h[0]=e=g)}return e},execOnName:function(b,e){for(var a=0,h=this.rules,k=h.length,l;e&&a<k;a++)l=h[a],b.nonEditable&&!l.options.applyToAll||b.nestedEditable&&l.options.excludeNestedEditable||(e=e.replace(l.value[0],l.value[1]));return e}}}(),function(){function b(c,
-d){function b(a){return a||CKEDITOR.env.needsNbspFiller?new CKEDITOR.htmlParser.text(" "):new CKEDITOR.htmlParser.element("br",{"data-cke-bogus":1})}function g(a,c){return function(d){if(d.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var g=[],n=f(d),k,v;if(n)for(h(n,1)&&g.push(n);n;)m(n)&&(k=e(n))&&h(k)&&((v=e(k))&&!m(v)?g.push(k):(b(l).insertAfter(k),k.remove())),n=n.previous;for(n=0;n<g.length;n++)g[n].remove();if(g=!a||!1!==("function"==typeof c?c(d):c))l||CKEDITOR.env.needsBrFiller||d.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT?
-l||CKEDITOR.env.needsBrFiller||!(7<document.documentMode||d.name in CKEDITOR.dtd.tr||d.name in CKEDITOR.dtd.$listItem)?(g=f(d),g=!g||"form"==d.name&&"input"==g.name):g=!1:g=!1;g&&d.add(b(a))}}}function h(a,c){if((!l||CKEDITOR.env.needsBrFiller)&&a.type==CKEDITOR.NODE_ELEMENT&&"br"==a.name&&!a.attributes["data-cke-eol"])return!0;var d;return a.type==CKEDITOR.NODE_TEXT&&(d=a.value.match(x))&&(d.index&&((new CKEDITOR.htmlParser.text(a.value.substring(0,d.index))).insertBefore(a),a.value=d[0]),!CKEDITOR.env.needsBrFiller&&
-l&&(!c||a.parent.name in H)||!l&&((d=a.previous)&&"br"==d.name||!d||m(d)))?!0:!1}var n={elements:{}},l="html"==d,H=CKEDITOR.tools.extend({},v),r;for(r in H)"#"in z[r]||delete H[r];for(r in H)n.elements[r]=g(l,c.config.fillEmptyBlocks);n.root=g(l,!1);n.elements.br=function(c){return function(d){if(d.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var g=d.attributes;if("data-cke-bogus"in g||"data-cke-eol"in g)delete g["data-cke-bogus"];else{for(g=d.next;g&&a(g);)g=g.next;var f=e(d);!g&&m(d.parent)?k(d.parent,
-b(c)):m(g)&&f&&!m(f)&&b(c).insertBefore(g)}}}}(l);return n}function h(a,c){return a!=CKEDITOR.ENTER_BR&&!1!==c?a==CKEDITOR.ENTER_DIV?"div":"p":!1}function f(c){for(c=c.children[c.children.length-1];c&&a(c);)c=c.previous;return c}function e(c){for(c=c.previous;c&&a(c);)c=c.previous;return c}function a(a){return a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(a.value)||a.type==CKEDITOR.NODE_ELEMENT&&a.attributes["data-cke-bookmark"]}function m(a){return a&&(a.type==CKEDITOR.NODE_ELEMENT&&a.name in
-v||a.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)}function k(a,c){var d=a.children[a.children.length-1];a.children.push(c);c.parent=a;d&&(d.next=c,c.previous=d)}function l(a){a=a.attributes;"false"!=a.contenteditable&&(a["data-cke-editable"]=a.contenteditable?"true":1);a.contenteditable="false"}function c(a){a=a.attributes;switch(a["data-cke-editable"]){case "true":a.contenteditable="true";break;case "1":delete a.contenteditable}}function d(a){return a.replace(F,function(a,c,d){return"\x3c"+c+d.replace(K,
-function(a,c){return L.test(c)&&-1==d.indexOf("data-cke-saved-"+c)?" data-cke-saved-"+a+" data-cke-"+CKEDITOR.rnd+"-"+a:a})+"\x3e"})}function g(a,c){return a.replace(c,function(a,c,d){0===a.indexOf("\x3ctextarea")&&(a=c+w(d).replace(/</g,"\x26lt;").replace(/>/g,"\x26gt;")+"\x3c/textarea\x3e");return"\x3ccke:encoded\x3e"+encodeURIComponent(a)+"\x3c/cke:encoded\x3e"})}function n(a){return a.replace(I,function(a,c){return decodeURIComponent(c)})}function y(a){return a.replace(/\x3c!--(?!{cke_protected})[\s\S]+?--\x3e/g,
-function(a){return"\x3c!--"+u+"{C}"+encodeURIComponent(a).replace(/--/g,"%2D%2D")+"--\x3e"})}function w(a){return a.replace(/\x3c!--\{cke_protected\}\{C\}([\s\S]+?)--\x3e/g,function(a,c){return decodeURIComponent(c)})}function p(a,c){var d=c._.dataStore;return a.replace(/\x3c!--\{cke_protected\}([\s\S]+?)--\x3e/g,function(a,c){return decodeURIComponent(c)}).replace(/\{cke_protected_(\d+)\}/g,function(a,c){return d&&d[c]||""})}function t(a,c){var d=[],b=c.config.protectedSource,g=c._.dataStore||(c._.dataStore=
-{id:1}),e=/<\!--\{cke_temp(comment)?\}(\d*?)--\x3e/g,b=[/<script[\s\S]*?(<\/script>|$)/gi,/<noscript[\s\S]*?<\/noscript>/gi,/<meta[\s\S]*?\/?>/gi].concat(b);a=a.replace(/\x3c!--[\s\S]*?--\x3e/g,function(a){return"\x3c!--{cke_tempcomment}"+(d.push(a)-1)+"--\x3e"});for(var f=0;f<b.length;f++)a=a.replace(b[f],function(a){a=a.replace(e,function(a,c,b){return d[b]});return/cke_temp(comment)?/.test(a)?a:"\x3c!--{cke_temp}"+(d.push(a)-1)+"--\x3e"});a=a.replace(e,function(a,c,b){return"\x3c!--"+u+(c?"{C}":
-"")+encodeURIComponent(d[b]).replace(/--/g,"%2D%2D")+"--\x3e"});a=a.replace(/<\w+(?:\s+(?:(?:[^\s=>]+\s*=\s*(?:[^'"\s>]+|'[^']*'|"[^"]*"))|[^\s=\/>]+))+\s*\/?>/g,function(a){return a.replace(/\x3c!--\{cke_protected\}([^>]*)--\x3e/g,function(a,c){g[g.id]=decodeURIComponent(c);return"{cke_protected_"+g.id++ +"}"})});return a=a.replace(/<(title|iframe|textarea)([^>]*)>([\s\S]*?)<\/\1>/g,function(a,d,b,g){return"\x3c"+d+b+"\x3e"+p(w(g),c)+"\x3c/"+d+"\x3e"})}var r;CKEDITOR.htmlDataProcessor=function(a){var c,
-e,f=this;this.editor=a;this.dataFilter=c=new CKEDITOR.htmlParser.filter;this.htmlFilter=e=new CKEDITOR.htmlParser.filter;this.writer=new CKEDITOR.htmlParser.basicWriter;c.addRules(B);c.addRules(D,{applyToAll:!0});c.addRules(b(a,"data"),{applyToAll:!0});e.addRules(A);e.addRules(E,{applyToAll:!0});e.addRules(b(a,"html"),{applyToAll:!0});a.on("toHtml",function(c){c=c.data;var b=c.dataValue,e,b=r(b),b=t(b,a),b=g(b,O),b=d(b),b=g(b,C),b=b.replace(M,"$1cke:$2"),b=b.replace(H,"\x3ccke:$1$2\x3e\x3c/cke:$1\x3e"),
-b=b.replace(/(<pre\b[^>]*>)(\r\n|\n)/g,"$1$2$2"),b=b.replace(/([^a-z0-9<\-])(on\w{3,})(?!>)/gi,"$1data-cke-"+CKEDITOR.rnd+"-$2");e=c.context||a.editable().getName();var f;CKEDITOR.env.ie&&9>CKEDITOR.env.version&&"pre"==e&&(e="div",b="\x3cpre\x3e"+b+"\x3c/pre\x3e",f=1);e=a.document.createElement(e);e.setHtml("a"+b);b=e.getHtml().substr(1);b=b.replace(new RegExp("data-cke-"+CKEDITOR.rnd+"-","ig"),"");f&&(b=b.replace(/^<pre>|<\/pre>$/gi,""));b=b.replace(Q,"$1$2");b=n(b);b=w(b);e=!1===c.fixForBody?!1:
+var c=CKEDITOR.dom.element.get(a);return c?c.getEditor()?(CKEDITOR.error("editor-element-conflict",{editorName:c.getEditor().name}),null):c:(CKEDITOR.error("editor-incorrect-element",{element:a}),null)};CKEDITOR.editor.initializeDelayedEditorCreation=function(a,c,d){if(c.delayIfDetached_callback)CKEDITOR.warn("editor-delayed-creation",{method:"callback"}),c.delayIfDetached_callback(function(){CKEDITOR[d](a,c);CKEDITOR.warn("editor-delayed-creation-success",{method:"callback"})});else{var g=void 0===
+c.delayIfDetached_interval?CKEDITOR.config.delayIfDetached_interval:c.delayIfDetached_interval,b;CKEDITOR.warn("editor-delayed-creation",{method:"interval - "+g+" ms"});b=setInterval(function(){a.isDetached()||(clearInterval(b),CKEDITOR[d](a,c),CKEDITOR.warn("editor-delayed-creation-success",{method:"interval - "+g+" ms"}))},g)}};CKEDITOR.editor.shouldDelayEditorCreation=function(a,c){CKEDITOR.editor.mergeDelayedCreationConfigs(c);return c&&c.delayIfDetached&&a.isDetached()};CKEDITOR.editor.mergeDelayedCreationConfigs=
+function(a){a&&(a.delayIfDetached="boolean"===typeof a.delayIfDetached?a.delayIfDetached:CKEDITOR.config.delayIfDetached,a.delayIfDetached_interval=isNaN(a.delayIfDetached_interval)?CKEDITOR.config.delayIfDetached_interval:a.delayIfDetached_interval,a.delayIfDetached_callback=a.delayIfDetached_callback||CKEDITOR.config.delayIfDetached_callback)}}(),CKEDITOR.ELEMENT_MODE_NONE=0,CKEDITOR.ELEMENT_MODE_REPLACE=1,CKEDITOR.ELEMENT_MODE_APPENDTO=2,CKEDITOR.ELEMENT_MODE_INLINE=3,CKEDITOR.config.delayIfDetached=
+!1,CKEDITOR.config.delayIfDetached_callback=void 0,CKEDITOR.config.delayIfDetached_interval=50,CKEDITOR.htmlParser=function(){this._={htmlPartsRegex:/<(?:(?:\/([^>]+)>)|(?:!--([\S|\s]*?)--!?>)|(?:([^\/\s>]+)((?:\s+[\w\-:.]+(?:\s*=\s*?(?:(?:"[^"]*")|(?:'[^']*')|[^\s"'\/>]+))?)*)[\S\s]*?(\/?)>))/g}},function(){var b=/([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,h={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(f){for(var e,a,k=0,l;e=this._.htmlPartsRegex.exec(f);){a=e.index;if(a>k)if(k=f.substring(k,a),l)l.push(k);else this.onText(k);k=this._.htmlPartsRegex.lastIndex;if(a=e[1])if(a=a.toLowerCase(),l&&CKEDITOR.dtd.$cdata[a]&&(this.onCDATA(l.join("")),l=null),!l){this.onTagClose(a);continue}if(l)l.push(e[0]);else if(a=e[3]){if(a=
+a.toLowerCase(),!/="/.test(a)){var m={},c,d=e[4];e=!!e[5];if(d)for(;c=b.exec(d);){var g=c[1].toLowerCase();c=c[2]||c[3]||c[4]||"";m[g]=!c&&h[g]?g:CKEDITOR.tools.htmlDecodeAttr(c)}this.onTagOpen(a,m,e);!l&&CKEDITOR.dtd.$cdata[a]&&(l=[])}}else if(a=e[2])this.onComment(a)}if(f.length>k)this.onText(f.substring(k,f.length))}}}(),CKEDITOR.htmlParser.basicWriter=CKEDITOR.tools.createClass({$:function(){this._={output:[]}},proto:{openTag:function(b){this._.output.push("\x3c",b)},openTagClose:function(b,h){h?
+this._.output.push(" /\x3e"):this._.output.push("\x3e")},attribute:function(b,h){"string"==typeof h&&(h=CKEDITOR.tools.htmlEncodeAttr(h));this._.output.push(" ",b,'\x3d"',h,'"')},closeTag:function(b){this._.output.push("\x3c/",b,"\x3e")},text:function(b){this._.output.push(b)},comment:function(b){this._.output.push("\x3c!--",b,"--\x3e")},write:function(b){this._.output.push(b)},reset:function(){this._.output=[];this._.indent=!1},getHtml:function(b){var h=this._.output.join("");b&&this.reset();return h}}}),
+"use strict",function(){CKEDITOR.htmlParser.node=function(){};CKEDITOR.htmlParser.node.prototype={remove:function(){var b=this.parent.children,h=CKEDITOR.tools.indexOf(b,this),f=this.previous,e=this.next;f&&(f.next=e);e&&(e.previous=f);b.splice(h,1);this.parent=null},replaceWith:function(b){var h=this.parent.children,f=CKEDITOR.tools.indexOf(h,this),e=b.previous=this.previous,a=b.next=this.next;e&&(e.next=b);a&&(a.previous=b);h[f]=b;b.parent=this.parent;this.parent=null},insertAfter:function(b){var h=
+b.parent.children,f=CKEDITOR.tools.indexOf(h,b),e=b.next;h.splice(f+1,0,this);this.next=b.next;this.previous=b;b.next=this;e&&(e.previous=this);this.parent=b.parent},insertBefore:function(b){var h=b.parent.children,f=CKEDITOR.tools.indexOf(h,b);h.splice(f,0,this);this.next=b;(this.previous=b.previous)&&(b.previous.next=this);b.previous=this;this.parent=b.parent},getAscendant:function(b){var h="function"==typeof b?b:"string"==typeof b?function(e){return e.name==b}:function(e){return e.name in b},f=
+this.parent;for(;f&&f.type==CKEDITOR.NODE_ELEMENT;){if(h(f))return f;f=f.parent}return null},wrapWith:function(b){this.replaceWith(b);b.add(this);return b},getIndex:function(){return CKEDITOR.tools.indexOf(this.parent.children,this)},getFilterContext:function(b){return b||{}}}}(),"use strict",CKEDITOR.htmlParser.comment=function(b){this.value=b;this._={isBlockLike:!1}},CKEDITOR.htmlParser.comment.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_COMMENT,filter:function(b,
+h){var f=this.value;if(!(f=b.onComment(h,f,this)))return this.remove(),!1;if("string"!=typeof f)return this.replaceWith(f),!1;this.value=f;return!0},writeHtml:function(b,h){h&&this.filter(h);b.comment(this.value)}}),"use strict",function(){CKEDITOR.htmlParser.text=function(b){this.value=b;this._={isBlockLike:!1}};CKEDITOR.htmlParser.text.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(b,h){if(!(this.value=b.onText(h,this.value,this)))return this.remove(),
+!1},writeHtml:function(b,h){h&&this.filter(h);b.text(this.value)}})}(),"use strict",function(){CKEDITOR.htmlParser.cdata=function(b){this.value=b};CKEDITOR.htmlParser.cdata.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(b){var h=this.getAscendant("style");if(h&&h.getAscendant({math:1,svg:1})){var h=CKEDITOR.htmlParser.fragment.fromHtml(this.value),f=new CKEDITOR.htmlParser.basicWriter;b.applyTo(h);h.writeHtml(f);this.value=f.getHtml()}},writeHtml:function(b){b.write(this.value)}})}(),
+"use strict",CKEDITOR.htmlParser.fragment=function(){this.children=[];this.parent=null;this._={isBlockLike:!0,hasInlineStarted:!1}},function(){function b(a){return a.attributes["data-cke-survive"]?!1:"a"==a.name&&a.attributes.href||CKEDITOR.dtd.$removeEmpty[a.name]}var h=CKEDITOR.tools.extend({table:1,ul:1,ol:1,dl:1},CKEDITOR.dtd.table,CKEDITOR.dtd.ul,CKEDITOR.dtd.ol,CKEDITOR.dtd.dl),f={ol:1,ul:1},e=CKEDITOR.tools.extend({},{html:1},CKEDITOR.dtd.html,CKEDITOR.dtd.body,CKEDITOR.dtd.head,{style:1,script:1}),
+a={ul:"li",ol:"li",dl:"dd",table:"tbody",tbody:"tr",thead:"tr",tfoot:"tr",tr:"td"};CKEDITOR.htmlParser.fragment.fromHtml=function(k,l,m){function c(a){var c;if(0<r.length)for(var g=0;g<r.length;g++){var b=r[g],e=b.name,f=CKEDITOR.dtd[e],k=t.name&&CKEDITOR.dtd[t.name];k&&!k[e]||a&&f&&!f[a]&&CKEDITOR.dtd[a]?e==t.name&&(n(t,t.parent,1),g--):(c||(d(),c=1),b=b.clone(),b.parent=t,t=b,r.splice(g,1),g--)}}function d(){for(;x.length;)n(x.shift(),t)}function g(a){if(a._.isBlockLike&&"pre"!=a.name&&"textarea"!=
+a.name){var c=a.children.length,d=a.children[c-1],g;d&&d.type==CKEDITOR.NODE_TEXT&&((g=CKEDITOR.tools.rtrim(d.value))?d.value=g:a.children.length=c-1)}}function n(a,c,d){c=c||t||q;var e=t;void 0===a.previous&&(y(c,a)&&(t=c,p.onTagOpen(m,{}),a.returnPoint=c=t),g(a),b(a)&&!a.children.length||c.add(a),"pre"==a.name&&(u=!1),"textarea"==a.name&&(z=!1));a.returnPoint?(t=a.returnPoint,delete a.returnPoint):t=d?c:e}function y(a,c){if((a==q||"body"==a.name)&&m&&(!a.name||CKEDITOR.dtd[a.name][m])){var d,g;
+return(d=c.attributes&&(g=c.attributes["data-cke-real-element-type"])?g:c.name)&&d in CKEDITOR.dtd.$inline&&!(d in CKEDITOR.dtd.head)&&!c.isOrphan||c.type==CKEDITOR.NODE_TEXT}}function v(a,c){return a in CKEDITOR.dtd.$listItem||a in CKEDITOR.dtd.$tableContent?a==c||"dt"==a&&"dd"==c||"dd"==a&&"dt"==c:!1}var p=new CKEDITOR.htmlParser,q=l instanceof CKEDITOR.htmlParser.element?l:"string"==typeof l?new CKEDITOR.htmlParser.element(l):new CKEDITOR.htmlParser.fragment,r=[],x=[],t=q,z="textarea"==q.name,
+u="pre"==q.name;p.onTagOpen=function(a,g,k,l){g=new CKEDITOR.htmlParser.element(a,g);g.isUnknown&&k&&(g.isEmpty=!0);g.isOptionalClose=l;if(b(g))r.push(g);else{if("pre"==a)u=!0;else{if("br"==a&&u){t.add(new CKEDITOR.htmlParser.text("\n"));return}"textarea"==a&&(z=!0)}if("br"==a)x.push(g);else{for(;!(l=(k=t.name)?CKEDITOR.dtd[k]||(t._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):e,g.isUnknown||t.isUnknown||l[a]);)if(t.isOptionalClose)p.onTagClose(k);else if(a in f&&k in f)k=t.children,(k=k[k.length-
+1])&&"li"==k.name||n(k=new CKEDITOR.htmlParser.element("li"),t),!g.returnPoint&&(g.returnPoint=t),t=k;else if(a in CKEDITOR.dtd.$listItem&&!v(a,k))p.onTagOpen("li"==a?"ul":"dl",{},0,1);else if(k in h&&!v(a,k))!g.returnPoint&&(g.returnPoint=t),t=t.parent;else if(k in CKEDITOR.dtd.$inline&&r.unshift(t),t.parent)n(t,t.parent,1);else{g.isOrphan=1;break}c(a);d();g.parent=t;g.isEmpty?n(g):t=g}}};p.onTagClose=function(a){for(var c=r.length-1;0<=c;c--)if(a==r[c].name){r.splice(c,1);return}for(var g=[],b=
+[],e=t;e!=q&&e.name!=a;)e._.isBlockLike||b.unshift(e),g.push(e),e=e.returnPoint||e.parent;if(e!=q){for(c=0;c<g.length;c++){var f=g[c];n(f,f.parent)}t=e;e._.isBlockLike&&d();n(e,e.parent);e==t&&(t=t.parent);r=r.concat(b)}"body"==a&&(m=!1)};p.onText=function(g){if(!(t._.hasInlineStarted&&!x.length||u||z)&&(g=CKEDITOR.tools.ltrim(g),0===g.length))return;var b=t.name,f=b?CKEDITOR.dtd[b]||(t._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):e;if(!z&&!f["#"]&&b in h)p.onTagOpen(a[b]||""),p.onText(g);else{d();
+c();u||z||(g=g.replace(/[\t\r\n ]{2,}|[\t\r\n]/g," "));g=new CKEDITOR.htmlParser.text(g);if(y(t,g))this.onTagOpen(m,{},0,1);t.add(g)}};p.onCDATA=function(a){t.add(new CKEDITOR.htmlParser.cdata(a))};p.onComment=function(a){d();c();t.add(new CKEDITOR.htmlParser.comment(a))};p.parse(k);for(d();t!=q;)n(t,t.parent,1);g(q);return q};CKEDITOR.htmlParser.fragment.prototype={type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,add:function(a,b){isNaN(b)&&(b=this.children.length);var e=0<b?this.children[b-1]:null;if(e){if(a._.isBlockLike&&
+e.type==CKEDITOR.NODE_TEXT&&(e.value=CKEDITOR.tools.rtrim(e.value),0===e.value.length)){this.children.pop();this.add(a);return}e.next=a}a.previous=e;a.parent=this;this.children.splice(b,0,a);this._.hasInlineStarted||(this._.hasInlineStarted=a.type==CKEDITOR.NODE_TEXT||a.type==CKEDITOR.NODE_ELEMENT&&!a._.isBlockLike)},filter:function(a,b){b=this.getFilterContext(b);a.onRoot(b,this);this.filterChildren(a,!1,b)},filterChildren:function(a,b,e){if(this.childrenFilteredBy!=a.id){e=this.getFilterContext(e);
+if(b&&!this.parent)a.onRoot(e,this);this.childrenFilteredBy=a.id;for(b=0;b<this.children.length;b++)!1===this.children[b].filter(a,e)&&b--}},writeHtml:function(a,b){b&&this.filter(b);this.writeChildrenHtml(a)},writeChildrenHtml:function(a,b,e){var c=this.getFilterContext();if(e&&!this.parent&&b)b.onRoot(c,this);b&&this.filterChildren(b,!1,c);b=0;e=this.children;for(c=e.length;b<c;b++)e[b].writeHtml(a)},forEach:function(a,b,e){if(!(e||b&&this.type!=b))var c=a(this);if(!1!==c){e=this.children;for(var d=
+0;d<e.length;d++)c=e[d],c.type==CKEDITOR.NODE_ELEMENT?c.forEach(a,b):b&&c.type!=b||a(c)}},getFilterContext:function(a){return a||{}}}}(),"use strict",function(){function b(){this.rules=[]}function h(f,e,a,k){var h,m;for(h in e)(m=f[h])||(m=f[h]=new b),m.add(e[h],a,k)}CKEDITOR.htmlParser.filter=CKEDITOR.tools.createClass({$:function(f){this.id=CKEDITOR.tools.getNextNumber();this.elementNameRules=new b;this.attributeNameRules=new b;this.elementsRules={};this.attributesRules={};this.textRules=new b;
+this.commentRules=new b;this.rootRules=new b;f&&this.addRules(f,10)},proto:{addRules:function(b,e){var a;"number"==typeof e?a=e:e&&"priority"in e&&(a=e.priority);"number"!=typeof a&&(a=10);"object"!=typeof e&&(e={});b.elementNames&&this.elementNameRules.addMany(b.elementNames,a,e);b.attributeNames&&this.attributeNameRules.addMany(b.attributeNames,a,e);b.elements&&h(this.elementsRules,b.elements,a,e);b.attributes&&h(this.attributesRules,b.attributes,a,e);b.text&&this.textRules.add(b.text,a,e);b.comment&&
+this.commentRules.add(b.comment,a,e);b.root&&this.rootRules.add(b.root,a,e)},applyTo:function(b){b.filter(this)},onElementName:function(b,e){return this.elementNameRules.execOnName(b,e)},onAttributeName:function(b,e){return this.attributeNameRules.execOnName(b,e)},onText:function(b,e,a){return this.textRules.exec(b,e,a)},onComment:function(b,e,a){return this.commentRules.exec(b,e,a)},onRoot:function(b,e){return this.rootRules.exec(b,e)},onElement:function(b,e){for(var a=[this.elementsRules["^"],this.elementsRules[e.name],
+this.elementsRules.$],k,h=0;3>h;h++)if(k=a[h]){k=k.exec(b,e,this);if(!1===k)return null;if(k&&k!=e)return this.onNode(b,k);if(e.parent&&!e.name)break}return e},onNode:function(b,e){var a=e.type;return a==CKEDITOR.NODE_ELEMENT?this.onElement(b,e):a==CKEDITOR.NODE_TEXT?new CKEDITOR.htmlParser.text(this.onText(b,e.value,e)):a==CKEDITOR.NODE_COMMENT?new CKEDITOR.htmlParser.comment(this.onComment(b,e.value,e)):null},onAttribute:function(b,e,a,k){return(a=this.attributesRules[a])?a.exec(b,k,e,this):k}}});
+CKEDITOR.htmlParser.filterRulesGroup=b;b.prototype={add:function(b,e,a){this.rules.splice(this.findIndex(e),0,{value:b,priority:e,options:a})},addMany:function(b,e,a){for(var k=[this.findIndex(e),0],h=0,m=b.length;h<m;h++)k.push({value:b[h],priority:e,options:a});this.rules.splice.apply(this.rules,k)},findIndex:function(b){for(var e=this.rules,a=e.length-1;0<=a&&b<e[a].priority;)a--;return a+1},exec:function(b,e){var a=e instanceof CKEDITOR.htmlParser.node||e instanceof CKEDITOR.htmlParser.fragment,
+k=Array.prototype.slice.call(arguments,1),h=this.rules,m=h.length,c,d,g,n;for(n=0;n<m;n++)if(a&&(c=e.type,d=e.name),g=h[n],!(b.nonEditable&&!g.options.applyToAll||b.nestedEditable&&g.options.excludeNestedEditable)){g=g.value.apply(null,k);if(!1===g||a&&g&&(g.name!=d||g.type!=c))return g;null!=g&&(k[0]=e=g)}return e},execOnName:function(b,e){for(var a=0,k=this.rules,h=k.length,m;e&&a<h;a++)m=k[a],b.nonEditable&&!m.options.applyToAll||b.nestedEditable&&m.options.excludeNestedEditable||(e=e.replace(m.value[0],
+m.value[1]));return e}}}(),function(){function b(c,d){function b(a){return a||CKEDITOR.env.needsNbspFiller?new CKEDITOR.htmlParser.text(" "):new CKEDITOR.htmlParser.element("br",{"data-cke-bogus":1})}function g(a,c){return function(d){if(d.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var g=[],n=f(d),l,w;if(n)for(h(n,1)&&g.push(n);n;)k(n)&&(l=e(n))&&h(l)&&((w=e(l))&&!k(w)?g.push(l):(b(m).insertAfter(l),l.remove())),n=n.previous;for(n=0;n<g.length;n++)g[n].remove();if(g=!a||!1!==("function"==typeof c?c(d):
+c))m||CKEDITOR.env.needsBrFiller||d.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT?m||CKEDITOR.env.needsBrFiller||!(7<document.documentMode||d.name in CKEDITOR.dtd.tr||d.name in CKEDITOR.dtd.$listItem)?(g=f(d),g=!g||"form"==d.name&&"input"==g.name):g=!1:g=!1;g&&d.add(b(a))}}}function h(a,c){if((!m||CKEDITOR.env.needsBrFiller)&&a.type==CKEDITOR.NODE_ELEMENT&&"br"==a.name&&!a.attributes["data-cke-eol"])return!0;var d;return a.type==CKEDITOR.NODE_TEXT&&(d=a.value.match(x))&&(d.index&&((new CKEDITOR.htmlParser.text(a.value.substring(0,
+d.index))).insertBefore(a),a.value=d[0]),!CKEDITOR.env.needsBrFiller&&m&&(!c||a.parent.name in H)||!m&&((d=a.previous)&&"br"==d.name||!d||k(d)))?!0:!1}var n={elements:{}},m="html"==d,H=CKEDITOR.tools.extend({},w),q;for(q in H)"#"in z[q]||delete H[q];for(q in H)n.elements[q]=g(m,c.config.fillEmptyBlocks);n.root=g(m,!1);n.elements.br=function(c){return function(d){if(d.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var g=d.attributes;if("data-cke-bogus"in g||"data-cke-eol"in g)delete g["data-cke-bogus"];
+else{for(g=d.next;g&&a(g);)g=g.next;var f=e(d);!g&&k(d.parent)?l(d.parent,b(c)):k(g)&&f&&!k(f)&&b(c).insertBefore(g)}}}}(m);return n}function h(a,c){return a!=CKEDITOR.ENTER_BR&&!1!==c?a==CKEDITOR.ENTER_DIV?"div":"p":!1}function f(c){for(c=c.children[c.children.length-1];c&&a(c);)c=c.previous;return c}function e(c){for(c=c.previous;c&&a(c);)c=c.previous;return c}function a(a){return a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(a.value)||a.type==CKEDITOR.NODE_ELEMENT&&a.attributes["data-cke-bookmark"]}
+function k(a){return a&&(a.type==CKEDITOR.NODE_ELEMENT&&a.name in w||a.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)}function l(a,c){var d=a.children[a.children.length-1];a.children.push(c);c.parent=a;d&&(d.next=c,c.previous=d)}function m(a){a=a.attributes;"false"!=a.contenteditable&&(a["data-cke-editable"]=a.contenteditable?"true":1);a.contenteditable="false"}function c(a){a=a.attributes;switch(a["data-cke-editable"]){case "true":a.contenteditable="true";break;case "1":delete a.contenteditable}}function d(a){return a.replace(F,
+function(a,c,d){return"\x3c"+c+d.replace(K,function(a,c){return M.test(c)&&-1==d.indexOf("data-cke-saved-"+c)?" data-cke-saved-"+a+" data-cke-"+CKEDITOR.rnd+"-"+a:a})+"\x3e"})}function g(a,c){return a.replace(c,function(a,c,d){0===a.indexOf("\x3ctextarea")&&(a=c+v(d).replace(/</g,"\x26lt;").replace(/>/g,"\x26gt;")+"\x3c/textarea\x3e");return"\x3ccke:encoded\x3e"+encodeURIComponent(a)+"\x3c/cke:encoded\x3e"})}function n(a){return a.replace(I,function(a,c){return decodeURIComponent(c)})}function y(a){return a.replace(/\x3c!--(?!{cke_protected})[\s\S]+?--\x3e/g,
+function(a){return"\x3c!--"+t+"{C}"+encodeURIComponent(a).replace(/--/g,"%2D%2D")+"--\x3e"})}function v(a){return a.replace(/\x3c!--\{cke_protected\}\{C\}([\s\S]+?)--\x3e/g,function(a,c){return decodeURIComponent(c)})}function p(a,c){var d=c._.dataStore;return a.replace(/\x3c!--\{cke_protected\}([\s\S]+?)--\x3e/g,function(a,c){return decodeURIComponent(c)}).replace(/\{cke_protected_(\d+)\}/g,function(a,c){return d&&d[c]||""})}function q(a,c){var d=[],g=c.config.protectedSource,b=c._.dataStore||(c._.dataStore=
+{id:1}),e=/<\!--\{cke_temp(comment)?\}(\d*?)--\x3e/g,g=[/<script[\s\S]*?(<\/script>|$)/gi,/<noscript[\s\S]*?<\/noscript>/gi,/<meta[\s\S]*?\/?>/gi].concat(g);a=a.replace(/\x3c!--[\s\S]*?--\x3e/g,function(a){return"\x3c!--{cke_tempcomment}"+(d.push(a)-1)+"--\x3e"});for(var f=0;f<g.length;f++)a=a.replace(g[f],function(a){a=a.replace(e,function(a,c,g){return d[g]});return/cke_temp(comment)?/.test(a)?a:"\x3c!--{cke_temp}"+(d.push(a)-1)+"--\x3e"});a=a.replace(e,function(a,c,g){return"\x3c!--"+t+(c?"{C}":
+"")+encodeURIComponent(d[g]).replace(/--/g,"%2D%2D")+"--\x3e"});a=a.replace(/<\w+(?:\s+(?:(?:[^\s=>]+\s*=\s*(?:[^'"\s>]+|'[^']*'|"[^"]*"))|[^\s=\/>]+))+\s*\/?>/g,function(a){return a.replace(/\x3c!--\{cke_protected\}([^>]*)--\x3e/g,function(a,c){b[b.id]=decodeURIComponent(c);return"{cke_protected_"+b.id++ +"}"})});return a=a.replace(/<(title|iframe|textarea)([^>]*)>([\s\S]*?)<\/\1>/g,function(a,d,g,b){return"\x3c"+d+g+"\x3e"+p(v(b),c)+"\x3c/"+d+"\x3e"})}var r;CKEDITOR.htmlDataProcessor=function(a){var c,
+e,f=this;this.editor=a;this.dataFilter=c=new CKEDITOR.htmlParser.filter;this.htmlFilter=e=new CKEDITOR.htmlParser.filter;this.writer=new CKEDITOR.htmlParser.basicWriter;c.addRules(B);c.addRules(C,{applyToAll:!0});c.addRules(b(a,"data"),{applyToAll:!0});e.addRules(A);e.addRules(E,{applyToAll:!0});e.addRules(b(a,"html"),{applyToAll:!0});a.on("toHtml",function(c){c=c.data;var b=c.dataValue,e,b=r(b),b=q(b,a),b=g(b,N),b=d(b),b=g(b,D),b=b.replace(L,"$1cke:$2"),b=b.replace(H,"\x3ccke:$1$2\x3e\x3c/cke:$1\x3e"),
+b=b.replace(/(<pre\b[^>]*>)(\r\n|\n)/g,"$1$2$2"),b=b.replace(/([^a-z0-9<\-])(on\w{3,})(?!>)/gi,"$1data-cke-"+CKEDITOR.rnd+"-$2");e=c.context||a.editable().getName();var f;CKEDITOR.env.ie&&9>CKEDITOR.env.version&&"pre"==e&&(e="div",b="\x3cpre\x3e"+b+"\x3c/pre\x3e",f=1);e=a.document.createElement(e);e.setHtml("a"+b);b=e.getHtml().substr(1);b=b.replace(new RegExp("data-cke-"+CKEDITOR.rnd+"-","ig"),"");f&&(b=b.replace(/^<pre>|<\/pre>$/gi,""));b=b.replace(R,"$1$2");b=n(b);b=v(b);e=!1===c.fixForBody?!1:
 h(c.enterMode,a.config.autoParagraph);b=CKEDITOR.htmlParser.fragment.fromHtml(b,c.context,e);e&&(f=b,!f.children.length&&CKEDITOR.dtd[f.name][e]&&(e=new CKEDITOR.htmlParser.element(e),f.add(e)));c.dataValue=b},null,null,5);a.on("toHtml",function(c){c.data.filter.applyTo(c.data.dataValue,!0,c.data.dontFilter,c.data.enterMode)&&a.fire("dataFiltered")},null,null,6);a.on("toHtml",function(a){a.data.dataValue.filterChildren(f.dataFilter,!0)},null,null,10);a.on("toHtml",function(a){a=a.data;var c=a.dataValue,
 d=new CKEDITOR.htmlParser.basicWriter;c.writeChildrenHtml(d);c=d.getHtml(!0);a.dataValue=y(c)},null,null,15);a.on("toDataFormat",function(c){var d=c.data.dataValue;c.data.enterMode!=CKEDITOR.ENTER_BR&&(d=d.replace(/^<br *\/?>/i,""));c.data.dataValue=CKEDITOR.htmlParser.fragment.fromHtml(d,c.data.context,h(c.data.enterMode,a.config.autoParagraph))},null,null,5);a.on("toDataFormat",function(a){a.data.dataValue.filterChildren(f.htmlFilter,!0)},null,null,10);a.on("toDataFormat",function(a){a.data.filter.applyTo(a.data.dataValue,
-!1,!0)},null,null,11);a.on("toDataFormat",function(c){var d=c.data.dataValue,b=f.writer;b.reset();d.writeChildrenHtml(b);d=b.getHtml(!0);d=w(d);d=p(d,a);c.data.dataValue=d},null,null,15)};CKEDITOR.htmlDataProcessor.prototype={toHtml:function(a,c,d,b){var g=this.editor,e,f,h,m;c&&"object"==typeof c?(e=c.context,d=c.fixForBody,b=c.dontFilter,f=c.filter,h=c.enterMode,m=c.protectedWhitespaces):e=c;e||null===e||(e=g.editable().getName());return g.fire("toHtml",{dataValue:a,context:e,fixForBody:d,dontFilter:b,
-filter:f||g.filter,enterMode:h||g.enterMode,protectedWhitespaces:m}).dataValue},toDataFormat:function(a,c){var d,b,g;c&&(d=c.context,b=c.filter,g=c.enterMode);d||null===d||(d=this.editor.editable().getName());return this.editor.fire("toDataFormat",{dataValue:a,filter:b||this.editor.filter,context:d,enterMode:g||this.editor.enterMode}).dataValue},protectSource:function(a){return t(a,this.editor)},unprotectSource:function(a){return p(a,this.editor)},unprotectRealComments:function(a){return w(a)}};var x=
-/(?:&nbsp;|\xa0)$/,u="{cke_protected}",z=CKEDITOR.dtd,q="caption colgroup col thead tfoot tbody".split(" "),v=CKEDITOR.tools.extend({},z.$blockLimit,z.$block),B={elements:{input:l,textarea:l}},D={attributeNames:[[/^on/,"data-cke-pa-on"],[/^srcdoc/,"data-cke-pa-srcdoc"],[/^data-cke-expando$/,""]],elements:{iframe:function(a){if(a.attributes&&a.attributes.src){var c=a.attributes.src.toLowerCase().replace(/[^a-z]/gi,"");if(0===c.indexOf("javascript")||0===c.indexOf("data"))a.attributes["data-cke-pa-src"]=
+!1,!0)},null,null,11);a.on("toDataFormat",function(c){var d=c.data.dataValue,b=f.writer;b.reset();d.writeChildrenHtml(b);d=b.getHtml(!0);d=v(d);d=p(d,a);c.data.dataValue=d},null,null,15)};CKEDITOR.htmlDataProcessor.prototype={toHtml:function(a,c,d,b){var g=this.editor,e,f,k,h;c&&"object"==typeof c?(e=c.context,d=c.fixForBody,b=c.dontFilter,f=c.filter,k=c.enterMode,h=c.protectedWhitespaces):e=c;e||null===e||(e=g.editable().getName());return g.fire("toHtml",{dataValue:a,context:e,fixForBody:d,dontFilter:b,
+filter:f||g.filter,enterMode:k||g.enterMode,protectedWhitespaces:h}).dataValue},toDataFormat:function(a,c){var d,b,g;c&&(d=c.context,b=c.filter,g=c.enterMode);d||null===d||(d=this.editor.editable().getName());return this.editor.fire("toDataFormat",{dataValue:a,filter:b||this.editor.filter,context:d,enterMode:g||this.editor.enterMode}).dataValue},protectSource:function(a){return q(a,this.editor)},unprotectSource:function(a){return p(a,this.editor)},unprotectRealComments:function(a){return v(a)}};var x=
+/(?:&nbsp;|\xa0)$/,t="{cke_protected}",z=CKEDITOR.dtd,u="caption colgroup col thead tfoot tbody".split(" "),w=CKEDITOR.tools.extend({},z.$blockLimit,z.$block),B={elements:{input:m,textarea:m}},C={attributeNames:[[/^on/,"data-cke-pa-on"],[/^srcdoc/,"data-cke-pa-srcdoc"],[/^data-cke-expando$/,""]],elements:{iframe:function(a){if(a.attributes&&a.attributes.src){var c=a.attributes.src.toLowerCase().replace(/[^a-z]/gi,"");if(0===c.indexOf("javascript")||0===c.indexOf("data"))a.attributes["data-cke-pa-src"]=
 a.attributes.src,delete a.attributes.src}}}},A={elements:{embed:function(a){var c=a.parent;if(c&&"object"==c.name){var d=c.attributes.width,c=c.attributes.height;d&&(a.attributes.width=d);c&&(a.attributes.height=c)}},a:function(a){var c=a.attributes;if(!(a.children.length||c.name||c.id||a.attributes["data-cke-saved-name"]))return!1}}},E={elementNames:[[/^cke:/,""],[/^\?xml:namespace$/,""]],attributeNames:[[/^data-cke-(saved|pa)-/,""],[/^data-cke-.*/,""],["hidefocus",""]],elements:{$:function(a){var c=
-a.attributes;if(c){if(c["data-cke-temp"])return!1;for(var d=["name","href","src"],b,g=0;g<d.length;g++)b="data-cke-saved-"+d[g],b in c&&delete c[d[g]]}return a},table:function(a){a.children.slice(0).sort(function(a,c){var d,b;a.type==CKEDITOR.NODE_ELEMENT&&c.type==a.type&&(d=CKEDITOR.tools.indexOf(q,a.name),b=CKEDITOR.tools.indexOf(q,c.name));-1<d&&-1<b&&d!=b||(d=a.parent?a.getIndex():-1,b=c.parent?c.getIndex():-1);return d>b?1:-1})},param:function(a){a.children=[];a.isEmpty=!0;return a},span:function(a){"Apple-style-span"==
-a.attributes["class"]&&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 c=a.children[0];c&&c.value&&(c.value=CKEDITOR.tools.trim(c.value));a.attributes.type||(a.attributes.type="text/css")},title:function(a){var c=a.children[0];!c&&k(a,c=new CKEDITOR.htmlParser.text);c.value=a.attributes["data-cke-title"]||""},input:c,textarea:c},attributes:{"class":function(a){return CKEDITOR.tools.ltrim(a.replace(/(?:^|\s+)cke_[^\s]*/g,
-""))||!1}}};CKEDITOR.env.ie&&(E.attributes.style=function(a){return a.replace(/(^|;)([^\:]+)/g,function(a){return a.toLowerCase()})});var F=/<(a|area|img|input|source)\b([^>]*)>/gi,K=/([\w-:]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi,L=/^(href|src|name)$/i,C=/(?:<style(?=[ >])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi,O=/(<textarea(?=[ >])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi,I=/<cke:encoded>([^<]*)<\/cke:encoded>/gi,M=/(<\/?)((?:object|embed|param|html|body|head|title)([\s][^>]*)?>)/gi,
-Q=/(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi,H=/<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi;r=function(){function a(d){return CKEDITOR.tools.array.reduce(d.split(""),function(a,d){var b=d.toLowerCase(),g=d.toUpperCase(),e=c(b);b!==g&&(e+="|"+c(g));return a+("("+e+")")},"")}function c(a){var d;d=a.charCodeAt(0);var b=d.toString(16);d={htmlCode:"\x26#"+d+";?",hex:"\x26#x0*"+b+";?",entity:{"\x3c":"\x26lt;","\x3e":"\x26gt;",":":"\x26colon;"}[a]};for(var g in d)d[g]&&(a+="|"+d[g]);return a}var d=
-new RegExp("("+a("\x3ccke:encoded\x3e")+"(.*?)"+a("\x3c/cke:encoded\x3e")+")|("+a("\x3c")+a("/")+"?"+a("cke:encoded\x3e")+")","gi"),b=new RegExp("(("+a("{cke_protected")+")(_[0-9]*)?"+a("}")+")","gi");return function(a){return a.replace(d,"").replace(b,"")}}()}(),"use strict",CKEDITOR.htmlParser.element=function(b,h){this.name=b;this.attributes=h||{};this.children=[];var f=b||"",e=f.match(/^cke:(.*)/);e&&(f=e[1]);f=!!(CKEDITOR.dtd.$nonBodyContent[f]||CKEDITOR.dtd.$block[f]||CKEDITOR.dtd.$listItem[f]||
-CKEDITOR.dtd.$tableContent[f]||CKEDITOR.dtd.$nonEditable[f]||"br"==f);this.isEmpty=!!CKEDITOR.dtd.$empty[b];this.isUnknown=!CKEDITOR.dtd[b];this._={isBlockLike:f,hasInlineStarted:this.isEmpty||!f}},CKEDITOR.htmlParser.cssStyle=function(b){var h={};((b instanceof CKEDITOR.htmlParser.element?b.attributes.style:b)||"").replace(/&quot;/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(b,e,a){"font-family"==e&&(a=a.replace(/["']/g,""));h[e.toLowerCase()]=a});return{rules:h,populate:function(b){var e=
-this.toString();e&&(b instanceof CKEDITOR.dom.element?b.setAttribute("style",e):b instanceof CKEDITOR.htmlParser.element?b.attributes.style=e:b.style=e)},toString:function(){var b=[],e;for(e in h)h[e]&&b.push(e,":",h[e],";");return b.join("")}}},function(){function b(b){return function(a){return a.type==CKEDITOR.NODE_ELEMENT&&("string"==typeof b?a.name==b:a.name in b)}}var h=function(b,a){b=b[0];a=a[0];return b<a?-1:b>a?1:0},f=CKEDITOR.htmlParser.fragment.prototype;CKEDITOR.htmlParser.element.prototype=
-CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_ELEMENT,add:f.add,clone:function(){return new CKEDITOR.htmlParser.element(this.name,this.attributes)},filter:function(b,a){var f=this,h,l;a=f.getFilterContext(a);if(!f.parent)b.onRoot(a,f);for(;;){h=f.name;if(!(l=b.onElementName(a,h)))return this.remove(),!1;f.name=l;if(!(f=b.onElement(a,f)))return this.remove(),!1;if(f!==this)return this.replaceWith(f),!1;if(f.name==h)break;if(f.type!=CKEDITOR.NODE_ELEMENT)return this.replaceWith(f),
-!1;if(!f.name)return this.replaceWithChildren(),!1}h=f.attributes;var c,d;for(c in h){for(l=h[c];;)if(d=b.onAttributeName(a,c))if(d!=c)delete h[c],c=d;else break;else{delete h[c];break}d&&(!1===(l=b.onAttribute(a,f,d,l))?delete h[d]:h[d]=l)}f.isEmpty||this.filterChildren(b,!1,a);return!0},filterChildren:f.filterChildren,writeHtml:function(b,a){a&&this.filter(a);var f=this.name,k=[],l=this.attributes,c,d;b.openTag(f,l);for(c in l)k.push([c,l[c]]);b.sortAttributes&&k.sort(h);c=0;for(d=k.length;c<d;c++)l=
-k[c],b.attribute(l[0],l[1]);b.openTagClose(f,this.isEmpty);this.writeChildrenHtml(b);this.isEmpty||b.closeTag(f)},writeChildrenHtml:f.writeChildrenHtml,replaceWithChildren:function(){for(var b=this.children,a=b.length;a;)b[--a].insertAfter(this);this.remove()},forEach:f.forEach,getFirst:function(e){if(!e)return this.children.length?this.children[0]:null;"function"!=typeof e&&(e=b(e));for(var a=0,f=this.children.length;a<f;++a)if(e(this.children[a]))return this.children[a];return null},getHtml:function(){var b=
-new CKEDITOR.htmlParser.basicWriter;this.writeChildrenHtml(b);return b.getHtml()},setHtml:function(b){b=this.children=CKEDITOR.htmlParser.fragment.fromHtml(b).children;for(var a=0,f=b.length;a<f;++a)b[a].parent=this},getOuterHtml:function(){var b=new CKEDITOR.htmlParser.basicWriter;this.writeHtml(b);return b.getHtml()},split:function(b){for(var a=this.children.splice(b,this.children.length-b),f=this.clone(),h=0;h<a.length;++h)a[h].parent=f;f.children=a;a[0]&&(a[0].previous=null);0<b&&(this.children[b-
-1].next=null);this.parent.add(f,this.getIndex()+1);return f},find:function(b,a){void 0===a&&(a=!1);var f=[],h;for(h=0;h<this.children.length;h++){var l=this.children[h];"function"==typeof b&&b(l)?f.push(l):"string"==typeof b&&l.name===b&&f.push(l);a&&l.find&&(f=f.concat(l.find(b,a)))}return f},findOne:function(b,a){var f=null,h=CKEDITOR.tools.array.find(this.children,function(h){var c="function"===typeof b?b(h):h.name===b;if(c||!a)return c;h.children&&h.findOne&&(f=h.findOne(b,!0));return!!f});return f||
-h||null},addClass:function(b){if(!this.hasClass(b)){var a=this.attributes["class"]||"";this.attributes["class"]=a+(a?" ":"")+b}},removeClass:function(b){var a=this.attributes["class"];a&&((a=CKEDITOR.tools.trim(a.replace(new RegExp("(?:\\s+|^)"+b+"(?:\\s+|$)")," ")))?this.attributes["class"]=a:delete this.attributes["class"])},hasClass:function(b){var a=this.attributes["class"];return a?(new RegExp("(?:^|\\s)"+b+"(?\x3d\\s|$)")).test(a):!1},getFilterContext:function(b){var a=[];b||(b={nonEditable:!1,
-nestedEditable:!1});b.nonEditable||"false"!=this.attributes.contenteditable?b.nonEditable&&!b.nestedEditable&&"true"==this.attributes.contenteditable&&a.push("nestedEditable",!0):a.push("nonEditable",!0);if(a.length){b=CKEDITOR.tools.copy(b);for(var f=0;f<a.length;f+=2)b[a[f]]=a[f+1]}return b}},!0)}(),function(){var b=/{([^}]+)}/g;CKEDITOR.template=function(b){this.source="function"===typeof b?b:String(b)};CKEDITOR.template.prototype.output=function(h,f){var e=("function"===typeof this.source?this.source(h):
-this.source).replace(b,function(a,b){return void 0!==h[b]?h[b]:a});return f?f.push(e):e}}(),delete CKEDITOR.loadFullCore,CKEDITOR.instances={},CKEDITOR.document=new CKEDITOR.dom.document(document),CKEDITOR.add=function(b){function h(){CKEDITOR.currentInstance==b&&(CKEDITOR.currentInstance=null,CKEDITOR.fire("currentInstance"))}CKEDITOR.instances[b.name]=b;b.on("focus",function(){CKEDITOR.currentInstance!=b&&(CKEDITOR.currentInstance=b,CKEDITOR.fire("currentInstance"))});b.on("blur",h);b.on("destroy",
-h);CKEDITOR.fire("instance",null,b)},CKEDITOR.remove=function(b){delete CKEDITOR.instances[b.name]},function(){var b={};CKEDITOR.addTemplate=function(h,f){var e=b[h];if(e)return e;e={name:h,source:f};CKEDITOR.fire("template",e);return b[h]=new CKEDITOR.template(e.source)};CKEDITOR.getTemplate=function(h){return b[h]}}(),function(){var b=[];CKEDITOR.addCss=function(h){b.push(h)};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,h){b=CKEDITOR.editor._getEditorElement(b);if(!b)return null;var f=new CKEDITOR.editor(h,b,CKEDITOR.ELEMENT_MODE_INLINE),e=b.is("textarea")?b:null;e?(f.setData(e.getValue(),null,!0),b=CKEDITOR.dom.element.createFromHtml('\x3cdiv contenteditable\x3d"'+!!f.readOnly+'" class\x3d"cke_textarea_inline"\x3e'+e.getValue()+"\x3c/div\x3e",CKEDITOR.document),b.insertAfter(e),
-e.hide(),e.$.form&&f._attachToForm()):(h&&"undefined"!==typeof h.readOnly&&!h.readOnly&&b.setAttribute("contenteditable","true"),f.setData(b.getHtml(),null,!0));f.on("loaded",function(){f.fire("uiReady");f.editable(b);f.container=b;f.ui.contentsElement=b;f.setData(f.getData(1));f.resetDirty();f.fire("contentDom");f.mode="wysiwyg";f.fire("mode");f.status="ready";f.fireOnce("instanceReady");CKEDITOR.fire("instanceReady",null,f)},null,null,1E4);f.on("destroy",function(){var a=f.container;e&&a&&(a.clearCustomData(),
-a.remove());e&&e.show();f.element.clearCustomData();delete f.element});return f};CKEDITOR.inlineAll=function(){var b,h,f;for(f in CKEDITOR.dtd.$editable)for(var e=CKEDITOR.document.getElementsByTag(f),a=0,m=e.count();a<m;a++)b=e.getItem(a),"true"!=b.getAttribute("contenteditable")||b.getEditor()||(h={element:b,config:{}},!1!==CKEDITOR.fire("inline",h)&&CKEDITOR.inline(b,h.config))};CKEDITOR.domReady(function(){!CKEDITOR.disableAutoInline&&CKEDITOR.inlineAll()})}(),CKEDITOR.replaceClass="ckeditor",
-function(){function b(b,a,m,k){b=CKEDITOR.editor._getEditorElement(b);if(!b)return null;var l=new CKEDITOR.editor(a,b,k);k==CKEDITOR.ELEMENT_MODE_REPLACE&&(b.setStyle("visibility","hidden"),l._.required=b.hasAttribute("required"),b.removeAttribute("required"));m&&l.setData(m,null,!0);l.on("loaded",function(){l.isDestroyed()||l.isDetached()||(f(l),k==CKEDITOR.ELEMENT_MODE_REPLACE&&l.config.autoUpdateElement&&b.$.form&&l._attachToForm(),l.setMode(l.config.startupMode,function(){l.resetDirty();l.status=
-"ready";l.fireOnce("instanceReady");CKEDITOR.fire("instanceReady",null,l)}))});l.on("destroy",h);return l}function h(){var b=this.container,a=this.element;b&&(b.clearCustomData(),b.remove());a&&(a.clearCustomData(),this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE&&(a.show(),this._.required&&a.setAttribute("required","required")),delete this.element)}function f(b){var a=b.name,f=b.element,h=b.elementMode,l=b.fire("uiSpace",{space:"top",html:""}).html,c=b.fire("uiSpace",{space:"bottom",html:""}).html,
-d=new CKEDITOR.template('\x3c{outerEl} id\x3d"cke_{name}" class\x3d"{id} cke cke_reset cke_chrome cke_editor_{name} cke_{langDir} '+CKEDITOR.env.cssClass+'"  dir\x3d"{langDir}" lang\x3d"{langCode}" role\x3d"application"'+(b.title?' aria-labelledby\x3d"cke_{name}_arialbl"':"")+"\x3e"+(b.title?'\x3cspan id\x3d"cke_{name}_arialbl" class\x3d"cke_voice_label"\x3e{voiceLabel}\x3c/span\x3e':"")+'\x3c{outerEl} class\x3d"cke_inner cke_reset" role\x3d"presentation"\x3e{topHtml}\x3c{outerEl} id\x3d"{contentId}" class\x3d"cke_contents cke_reset" role\x3d"presentation"\x3e\x3c/{outerEl}\x3e{bottomHtml}\x3c/{outerEl}\x3e\x3c/{outerEl}\x3e'),
-a=CKEDITOR.dom.element.createFromHtml(d.output({id:b.id,name:a,langDir:b.lang.dir,langCode:b.langCode,voiceLabel:b.title,topHtml:l?'\x3cspan id\x3d"'+b.ui.spaceId("top")+'" class\x3d"cke_top cke_reset_all" role\x3d"presentation" style\x3d"height:auto"\x3e'+l+"\x3c/span\x3e":"",contentId:b.ui.spaceId("contents"),bottomHtml:c?'\x3cspan id\x3d"'+b.ui.spaceId("bottom")+'" class\x3d"cke_bottom cke_reset_all" role\x3d"presentation"\x3e'+c+"\x3c/span\x3e":"",outerEl:CKEDITOR.env.ie?"span":"div"}));h==CKEDITOR.ELEMENT_MODE_REPLACE?
-(f.hide(),a.insertAfter(f)):f.append(a);b.container=a;b.ui.contentsElement=b.ui.space("contents");l&&b.ui.space("top").unselectable();c&&b.ui.space("bottom").unselectable();f=b.config.width;h=b.config.height;f&&a.setStyle("width",CKEDITOR.tools.cssLength(f));h&&b.ui.space("contents").setStyle("height",CKEDITOR.tools.cssLength(h));a.disableContextMenu();CKEDITOR.env.webkit&&a.on("focus",function(){b.focus()});b.fireOnce("uiReady")}CKEDITOR.replace=function(e,a){return b(e,a,null,CKEDITOR.ELEMENT_MODE_REPLACE)};
-CKEDITOR.appendTo=function(e,a,f){return b(e,a,f,CKEDITOR.ELEMENT_MODE_APPENDTO)};CKEDITOR.replaceAll=function(){for(var b=document.getElementsByTagName("textarea"),a=0;a<b.length;a++){var f=null,h=b[a];if(h.name||h.id){if("string"==typeof arguments[0]){if(!(new RegExp("(?:^|\\s)"+arguments[0]+"(?:$|\\s)")).test(h.className))continue}else if("function"==typeof arguments[0]&&(f={},!1===arguments[0](h,f)))continue;this.replace(h,f)}}};CKEDITOR.editor.prototype.addMode=function(b,a){(this._.modes||(this._.modes=
-{}))[b]=a};CKEDITOR.editor.prototype.setMode=function(b,a){var f=this,h=this._.modes;if(b!=f.mode&&h&&h[b]){f.fire("beforeSetMode",b);if(f.mode){var l=f.checkDirty(),h=f._.previousModeData,c,d=0;f.fire("beforeModeUnload");f.editable(0);f._.previousMode=f.mode;f._.previousModeData=c=f.getData(1);"source"==f.mode&&h==c&&(f.fire("lockSnapshot",{forceUpdate:!0}),d=1);f.ui.space("contents").setHtml("");f.mode=""}else f._.previousModeData=f.getData(1);this._.modes[b](function(){f.mode=b;void 0!==l&&!l&&
-f.resetDirty();d?f.fire("unlockSnapshot"):"wysiwyg"==b&&f.fire("saveSnapshot");setTimeout(function(){f.isDestroyed()||f.isDetached()||(f.fire("mode"),a&&a.call(f))},0)})}};CKEDITOR.editor.prototype.resize=function(b,a,f,h){var l=this.container,c=this.ui.space("contents"),d=CKEDITOR.env.webkit&&this.document&&this.document.getWindow().$.frameElement;h=h?this.container.getFirst(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasClass("cke_inner")}):l;if(b||0===b)b=CKEDITOR.tools.convertToPx(CKEDITOR.tools.cssLength(b));
-h.setSize("width",b,!0);d&&(d.style.width="1%");a=CKEDITOR.tools.convertToPx(CKEDITOR.tools.cssLength(a));var g=(h.$.offsetHeight||0)-(c.$.clientHeight||0),l=Math.max(a-(f?0:g),0);a=f?a+g:a;c.setStyle("height",CKEDITOR.tools.cssLength(l));d&&(d.style.width="100%");this.fire("resize",{outerHeight:a,contentsHeight:l,outerWidth:b||h.getSize("width")})};CKEDITOR.editor.prototype.getResizable=function(b){return b?this.ui.space("contents"):this.container};CKEDITOR.domReady(function(){CKEDITOR.replaceClass&&
-CKEDITOR.replaceAll(CKEDITOR.replaceClass)})}(),CKEDITOR.config.startupMode="wysiwyg",function(){function b(a){var c=a.editor,b=a.data.path,d=b.blockLimit,g=a.data.selection,f=g.getRanges()[0],n;if(CKEDITOR.env.gecko||CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller)if(g=h(g,b))g.appendBogus(),n=CKEDITOR.env.ie&&!CKEDITOR.env.edge||CKEDITOR.env.edge&&c._.previousActive;k(c,b.block,d)&&f.collapsed&&!f.getCommonAncestor().isReadOnly()&&(b=f.clone(),b.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS),d=new CKEDITOR.dom.walker(b),
-d.guard=function(a){return!e(a)||a.type==CKEDITOR.NODE_COMMENT||a.isReadOnly()},!d.checkForward()||b.checkStartOfBlock()&&b.checkEndOfBlock())&&(c=f.fixBlock(!0,c.activeEnterMode==CKEDITOR.ENTER_DIV?"div":"p"),CKEDITOR.env.needsBrFiller||(c=c.getFirst(e))&&c.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(c.getText()).match(/^(?:&nbsp;|\xa0)$/)&&c.remove(),n=1,a.cancel());n&&f.select()}function h(a,c){if(a.isFake)return 0;var b=c.block||c.blockLimit,d=b&&b.getLast(e);if(!(!b||!b.isBlockBoundary()||
-d&&d.type==CKEDITOR.NODE_ELEMENT&&d.isBlockBoundary()||b.is("pre")||b.getBogus()))return b}function f(a){var c=a.data.getTarget();c.is("input")&&(c=c.getAttribute("type"),"submit"!=c&&"reset"!=c||a.data.preventDefault())}function e(a){return n(a)&&y(a)}function a(a,c){return function(b){var d=b.data.$.toElement||b.data.$.fromElement||b.data.$.relatedTarget;(d=d&&d.nodeType==CKEDITOR.NODE_ELEMENT?new CKEDITOR.dom.element(d):null)&&(c.equals(d)||c.contains(d))||a.call(this,b)}}function m(a){function c(a){return function(c,
-d){d&&c.type==CKEDITOR.NODE_ELEMENT&&c.is(g)&&(b=c);if(!(d||!e(c)||a&&p(c)))return!1}}var b,d=a.getRanges()[0];a=a.root;var g={table:1,ul:1,ol:1,dl:1};if(d.startPath().contains(g)){var f=d.clone();f.collapse(1);f.setStartAt(a,CKEDITOR.POSITION_AFTER_START);a=new CKEDITOR.dom.walker(f);a.guard=c();a.checkBackward();if(b)return f=d.clone(),f.collapse(),f.setEndAt(b,CKEDITOR.POSITION_AFTER_END),a=new CKEDITOR.dom.walker(f),a.guard=c(!0),b=!1,a.checkForward(),b}return null}function k(a,c,b){return!1!==
-a.config.autoParagraph&&a.activeEnterMode!=CKEDITOR.ENTER_BR&&(a.editable().equals(b)&&!c||c&&"true"==c.getAttribute("contenteditable"))}function l(a){return a.activeEnterMode!=CKEDITOR.ENTER_BR&&!1!==a.config.autoParagraph?a.activeEnterMode==CKEDITOR.ENTER_DIV?"div":"p":!1}function c(a){a&&a.isEmptyInlineRemoveable()&&a.remove()}function d(a){var c=a.editor;c.getSelection().scrollIntoView();setTimeout(function(){c.fire("saveSnapshot")},0)}function g(a,c,b){var d=a.getCommonAncestor(c);for(c=a=b?
-c:a;(a=a.getParent())&&!d.equals(a)&&1==a.getChildCount();)c=a;c.remove()}var n,y,w,p,t,r,x,u,z,q;CKEDITOR.editable=CKEDITOR.tools.createClass({base:CKEDITOR.dom.element,$:function(a,c){this.base(c.$||c);this.editor=a;this.status="unloaded";this.hasFocus=!1;this.setup()},proto:{focus:function(){var a;if(CKEDITOR.env.webkit&&!this.hasFocus&&(a=this.editor._.previousActive||this.getDocument().getActive(),this.contains(a))){a.focus();return}CKEDITOR.env.edge&&14<CKEDITOR.env.version&&!this.hasFocus&&
-this.getDocument().equals(CKEDITOR.document)&&(this.editor._.previousScrollTop=this.$.scrollTop);try{if(!CKEDITOR.env.ie||CKEDITOR.env.edge&&14<CKEDITOR.env.version||!this.getDocument().equals(CKEDITOR.document))if(CKEDITOR.env.chrome){var c=this.$.scrollTop;this.$.focus();this.$.scrollTop=c}else this.$.focus();else this.$.setActive()}catch(b){if(!CKEDITOR.env.ie)throw b;}CKEDITOR.env.safari&&!this.isInline()&&(a=CKEDITOR.document.getActive(),a.equals(this.getWindow().getFrame())||this.getWindow().focus())},
-on:function(c,b){var d=Array.prototype.slice.call(arguments,0);CKEDITOR.env.ie&&/^focus|blur$/.exec(c)&&(c="focus"==c?"focusin":"focusout",b=a(b,this),d[0]=c,d[1]=b);return CKEDITOR.dom.element.prototype.on.apply(this,d)},attachListener:function(a){!this._.listeners&&(this._.listeners=[]);var c=Array.prototype.slice.call(arguments,1),c=a.on.apply(a,c);this._.listeners.push(c);return c},clearListeners:function(){var a=this._.listeners;try{for(;a.length;)a.pop().removeListener()}catch(c){}},restoreAttrs:function(){var a=
-this._.attrChanges,c,b;for(b in a)a.hasOwnProperty(b)&&(c=a[b],null!==c?this.setAttribute(b,c):this.removeAttribute(b))},attachClass:function(a){var c=this.getCustomData("classes");this.hasClass(a)||(!c&&(c=[]),c.push(a),this.setCustomData("classes",c),this.addClass(a))},changeAttr:function(a,c){var b=this.getAttribute(a);c!==b&&(!this._.attrChanges&&(this._.attrChanges={}),a in this._.attrChanges||(this._.attrChanges[a]=b),this.setAttribute(a,c))},insertText:function(a){this.editor.focus();this.insertHtml(this.transformPlainTextToHtml(a),
-"text")},transformPlainTextToHtml:function(a){var c=this.editor.getSelection().getStartElement().hasAscendant("pre",!0)?CKEDITOR.ENTER_BR:this.editor.activeEnterMode;return CKEDITOR.tools.transformPlainTextToHtml(a,c)},insertHtml:function(a,c,b){var g=this.editor;g.focus();g.fire("saveSnapshot");b||(b=g.getSelection().getRanges()[0]);r(this,c||"html",a,b);b.select();d(this);this.editor.fire("afterInsertHtml",{})},insertHtmlIntoRange:function(a,c,b){r(this,b||"html",a,c);this.editor.fire("afterInsertHtml",
-{intoRange:c})},insertElement:function(a,c){var b=this.editor;b.focus();b.fire("saveSnapshot");var g=b.activeEnterMode,b=b.getSelection(),f=a.getName(),f=CKEDITOR.dtd.$block[f];c||(c=b.getRanges()[0]);this.insertElementIntoRange(a,c)&&(c.moveToPosition(a,CKEDITOR.POSITION_AFTER_END),f&&((f=a.getNext(function(a){return e(a)&&!p(a)}))&&f.type==CKEDITOR.NODE_ELEMENT&&f.is(CKEDITOR.dtd.$block)?f.getDtd()["#"]?c.moveToElementEditStart(f):c.moveToElementEditEnd(a):f||g==CKEDITOR.ENTER_BR||(f=c.fixBlock(!0,
-g==CKEDITOR.ENTER_DIV?"div":"p"),c.moveToElementEditStart(f))));b.selectRanges([c]);d(this)},insertElementIntoSelection:function(a){this.insertElement(a)},insertElementIntoRange:function(a,b){var d=this.editor,g=d.config.enterMode,e=a.getName(),f=CKEDITOR.dtd.$block[e];if(b.checkReadOnly())return!1;b.deleteContents(1);b.startContainer.type==CKEDITOR.NODE_ELEMENT&&(b.startContainer.is({tr:1,table:1,tbody:1,thead:1,tfoot:1})?x(b):b.startContainer.is(CKEDITOR.dtd.$list)&&u(b));var h,n;if(f)for(;(h=b.getCommonAncestor(0,
-1))&&(n=CKEDITOR.dtd[h.getName()])&&(!n||!n[e]);)if(h.getName()in CKEDITOR.dtd.span){var f=b.splitElement(h),m=b.createBookmark();c(h);c(f);b.moveToBookmark(m)}else b.checkStartOfBlock()&&b.checkEndOfBlock()?(b.setStartBefore(h),b.collapse(!0),h.remove()):b.splitBlock(g==CKEDITOR.ENTER_DIV?"div":"p",d.editable());b.insertNode(a);return!0},setData:function(a,c){c||(a=this.editor.dataProcessor.toHtml(a));this.setHtml(a);this.fixInitialSelection();"unloaded"==this.status&&(this.status="ready");this.editor.fire("dataReady")},
-getData:function(a){var c=this.getHtml();a||(c=this.editor.dataProcessor.toDataFormat(c));return c},setReadOnly:function(a){this.setAttribute("contenteditable",!a)},detach:function(){this.status="detached";this.editor.setData(this.editor.getData(),{internal:!0});this.clearListeners();try{this._.cleanCustomData()}catch(a){if(!CKEDITOR.env.ie||-2146828218!==a.number)throw a;}this.editor.fire("contentDomUnload");delete this.editor.document;delete this.editor.window;delete this.editor},isInline:function(){return this.getDocument().equals(CKEDITOR.document)},
-fixInitialSelection:function(){function a(){var c=b.getDocument().$,d=c.getSelection(),g;a:if(d.anchorNode&&d.anchorNode==b.$)g=!0;else{if(CKEDITOR.env.webkit&&(g=b.getDocument().getActive())&&g.equals(b)&&!d.anchorNode){g=!0;break a}g=void 0}g&&(g=new CKEDITOR.dom.range(b),g.moveToElementEditStart(b),c=c.createRange(),c.setStart(g.startContainer.$,g.startOffset),c.collapse(!0),d.removeAllRanges(),d.addRange(c))}function c(){var a=b.getDocument().$,d=a.selection,g=b.getDocument().getActive();"None"==
-d.type&&g.equals(b)&&(d=new CKEDITOR.dom.range(b),a=a.body.createTextRange(),d.moveToElementEditStart(b),d=d.startContainer,d.type!=CKEDITOR.NODE_ELEMENT&&(d=d.getParent()),a.moveToElementText(d.$),a.collapse(!0),a.select())}var b=this;if(CKEDITOR.env.ie&&(9>CKEDITOR.env.version||CKEDITOR.env.quirks))this.hasFocus&&(this.focus(),c());else if(this.hasFocus)this.focus(),a();else this.once("focus",function(){a()},null,null,-999)},getHtmlFromRange:function(a){if(a.collapsed)return new CKEDITOR.dom.documentFragment(a.document);
-a={doc:this.getDocument(),range:a.clone()};z.eol.detect(a,this);z.bogus.exclude(a);z.cell.shrink(a);a.fragment=a.range.cloneContents();z.tree.rebuild(a,this);z.eol.fix(a,this);return new CKEDITOR.dom.documentFragment(a.fragment.$)},extractHtmlFromRange:function(a,c){var b=q,d={range:a,doc:a.document},g=this.getHtmlFromRange(a);if(a.collapsed)return a.optimize(),g;a.enlarge(CKEDITOR.ENLARGE_INLINE,1);b.table.detectPurge(d);d.bookmark=a.createBookmark();delete d.range;var e=this.editor.createRange();
-e.moveToPosition(d.bookmark.startNode,CKEDITOR.POSITION_BEFORE_START);d.targetBookmark=e.createBookmark();b.list.detectMerge(d,this);b.table.detectRanges(d,this);b.block.detectMerge(d,this);d.tableContentsRanges?(b.table.deleteRanges(d),a.moveToBookmark(d.bookmark),d.range=a):(a.moveToBookmark(d.bookmark),d.range=a,a.extractContents(b.detectExtractMerge(d)));a.moveToBookmark(d.targetBookmark);a.optimize();b.fixUneditableRangePosition(a);b.list.merge(d,this);b.table.purge(d,this);b.block.merge(d,this);
-if(c){b=a.startPath();if(d=a.checkStartOfBlock()&&a.checkEndOfBlock()&&b.block&&!a.root.equals(b.block)){a:{var d=b.block.getElementsByTag("span"),e=0,f;if(d)for(;f=d.getItem(e++);)if(!y(f)){d=!0;break a}d=!1}d=!d}d&&(a.moveToPosition(b.block,CKEDITOR.POSITION_BEFORE_START),b.block.remove())}else b.autoParagraph(this.editor,a),w(a.startContainer)&&a.startContainer.appendBogus();a.startContainer.mergeSiblings();return g},setup:function(){var a=this.editor;this.attachListener(a,"beforeGetData",function(){var c=
-this.getData();this.is("textarea")||!1!==a.config.ignoreEmptyParagraph&&(c=c.replace(t,function(a,c){return c}));a.setData(c,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 c=a.getSelection();(c=c&&c.getNative())&&"Control"==c.type||this.focus()},
-this);this.attachListener(a,"insertHtml",function(a){this.insertHtml(a.data.dataValue,a.data.mode,a.data.range)},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");a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?this.attachClass("cke_editable_inline"):a.elementMode!=CKEDITOR.ELEMENT_MODE_REPLACE&&a.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO||
-this.attachClass("cke_editable_themed");this.attachClass("cke_contents_"+a.config.contentsLangDirection);a.keystrokeHandler.blockedKeystrokes[8]=+a.readOnly;a.keystrokeHandler.attach(this);this.on("blur",function(){this.hasFocus=!1},null,null,-1);this.on("focus",function(){this.hasFocus=!0},null,null,-1);if(CKEDITOR.env.webkit)this.on("scroll",function(){a._.previousScrollTop=a.editable().$.scrollTop},null,null,-1);if(CKEDITOR.env.edge&&14<CKEDITOR.env.version){var c=function(){var b=a.editable();
-null!=a._.previousScrollTop&&b.getDocument().equals(CKEDITOR.document)&&(b.$.scrollTop=a._.previousScrollTop,a._.previousScrollTop=null,this.removeListener("scroll",c))};this.on("scroll",c)}a.focusManager.add(this);this.equals(CKEDITOR.document.getActive())&&(this.hasFocus=!0,a.once("contentDom",function(){a.focusManager.focus(this)},this));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 h=CKEDITOR.getCss();if(h){var d=b.getHead(),k=d.getCustomData("stylesheet");k?h!=k.getText()&&(CKEDITOR.env.ie&&9>CKEDITOR.env.version?k.$.styleSheet.cssText=h:k.setText(h)):(h=b.appendStyleText(h),h=new CKEDITOR.dom.element(h.ownerNode||h.owningElement),d.setCustomData("stylesheet",h),h.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){a=a.data;var c=(new CKEDITOR.dom.elementPath(a.getTarget(),this)).contains("a");c&&2!=a.$.button&&c.isReadOnly()&&a.preventDefault()});var l={8:1,46:1};this.attachListener(a,"key",function(c){if(a.readOnly)return!0;var b=c.data.domEvent.getKey(),d;c=a.getSelection();if(0!==c.getRanges().length){if(b in l){var g,e=c.getRanges()[0],f=e.startPath(),h,k,r,b=8==b;CKEDITOR.env.ie&&
-11>CKEDITOR.env.version&&(g=c.getSelectedElement())||(g=m(c))?(a.fire("saveSnapshot"),e.moveToPosition(g,CKEDITOR.POSITION_BEFORE_START),g.remove(),e.select(),a.fire("saveSnapshot"),d=1):e.collapsed&&((h=f.block)&&(r=h[b?"getPrevious":"getNext"](n))&&r.type==CKEDITOR.NODE_ELEMENT&&r.is("table")&&e[b?"checkStartOfBlock":"checkEndOfBlock"]()?(a.fire("saveSnapshot"),e[b?"checkEndOfBlock":"checkStartOfBlock"]()&&h.remove(),e["moveToElementEdit"+(b?"End":"Start")](r),e.select(),a.fire("saveSnapshot"),
-d=1):f.blockLimit&&f.blockLimit.is("td")&&(k=f.blockLimit.getAscendant("table"))&&e.checkBoundaryOfElement(k,b?CKEDITOR.START:CKEDITOR.END)&&(r=k[b?"getPrevious":"getNext"](n))?(a.fire("saveSnapshot"),e["moveToElementEdit"+(b?"End":"Start")](r),e.checkStartOfBlock()&&e.checkEndOfBlock()?r.remove():e.select(),a.fire("saveSnapshot"),d=1):(k=f.contains(["td","th","caption"]))&&e.checkBoundaryOfElement(k,b?CKEDITOR.START:CKEDITOR.END)&&(d=1))}return!d}});a.blockless&&CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller&&
-this.attachListener(this,"keyup",function(c){c.data.getKeystroke()in l&&!this.getFirst(e)&&(this.appendBogus(),c=a.createRange(),c.moveToPosition(this,CKEDITOR.POSITION_AFTER_START),c.select())});this.attachListener(this,"dblclick",function(c){if(a.readOnly)return!1;c={element:c.data.getTarget()};a.fire("doubleclick",c)});CKEDITOR.env.ie&&this.attachListener(this,"click",f);CKEDITOR.env.ie&&!CKEDITOR.env.edge||this.attachListener(this,"mousedown",function(c){var b=c.data.getTarget();b.is("img","hr",
-"input","textarea","select")&&!b.isReadOnly()&&(a.getSelection().selectElement(b),b.is("input","textarea","select")&&c.data.preventDefault())});CKEDITOR.env.edge&&this.attachListener(this,"mouseup",function(c){(c=c.data.getTarget())&&c.is("img")&&!c.isReadOnly()&&a.getSelection().selectElement(c)});CKEDITOR.env.gecko&&this.attachListener(this,"mouseup",function(c){if(2==c.data.$.button&&(c=c.data.getTarget(),!c.getAscendant("table")&&!c.getOuterHtml().replace(t,""))){var b=a.createRange();b.moveToElementEditStart(c);
-b.select(!0)}});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()}));CKEDITOR.env.webkit&&this.attachListener(a,"key",function(c){if(a.readOnly)return!0;var b=c.data.domEvent.getKey();if(b in l&&(c=a.getSelection(),0!==c.getRanges().length)){var b=8==b,d=c.getRanges()[0];c=d.startPath();if(d.collapsed)a:{var e=
-c.block;if(e&&d[b?"checkStartOfBlock":"checkEndOfBlock"](!0)&&d.moveToClosestEditablePosition(e,!b)&&d.collapsed){if(d.startContainer.type==CKEDITOR.NODE_ELEMENT){var f=d.startContainer.getChild(d.startOffset-(b?1:0));if(f&&f.type==CKEDITOR.NODE_ELEMENT&&f.is("hr")){a.fire("saveSnapshot");f.remove();c=!0;break a}}d=d.startPath().block;if(!d||d&&d.contains(e))c=void 0;else{a.fire("saveSnapshot");var h;(h=(b?d:e).getBogus())&&h.remove();h=a.getSelection();f=h.createBookmarks();(b?e:d).moveChildren(b?
-d:e,!1);c.lastElement.mergeSiblings();g(e,d,!b);h.selectBookmarks(f);c=!0}}else c=!1}else b=d,h=c.block,d=b.endPath().block,h&&d&&!h.equals(d)?(a.fire("saveSnapshot"),(e=h.getBogus())&&e.remove(),b.enlarge(CKEDITOR.ENLARGE_INLINE),b.deleteContents(),d.getParent()&&(d.moveChildren(h,!1),c.lastElement.mergeSiblings(),g(h,d,!0)),b=a.getSelection().getRanges()[0],b.collapse(1),b.optimize(),""===b.startContainer.getHtml()&&b.startContainer.appendBogus(),b.select(),c=!0):c=!1;if(!c)return;a.getSelection().scrollIntoView();
-a.fire("saveSnapshot");return!1}},this,null,100)}},getUniqueId:function(){var a;try{this._.expandoNumber=a=CKEDITOR.dom.domObject.prototype.getUniqueId.call(this)}catch(c){a=this._&&this._.expandoNumber}return a}},_:{cleanCustomData:function(){this.removeClass("cke_editable");this.restoreAttrs();for(var a=this.removeCustomData("classes");a&&a.length;)this.removeClass(a.pop());if(!this.is("textarea")){var a=this.getDocument(),c=a.getHead();if(c.getCustomData("stylesheet")){var b=a.getCustomData("stylesheet_ref");
---b?a.setCustomData("stylesheet_ref",b):(a.removeCustomData("stylesheet_ref"),c.removeCustomData("stylesheet").remove())}}}}});CKEDITOR.editor.prototype.editable=function(a){var c=this._.editable;if(c&&a)return 0;if(!arguments.length)return c;a?c=a instanceof CKEDITOR.editable?a:new CKEDITOR.editable(this,a):(c&&c.detach(),c=null);return this._.editable=c};CKEDITOR.on("instanceLoaded",function(a){var c=a.editor;c.on("insertElement",function(a){a=a.data;a.type==CKEDITOR.NODE_ELEMENT&&(a.is("input")||
-a.is("textarea"))&&("false"!=a.getAttribute("contentEditable")&&a.data("cke-editable",a.hasAttribute("contenteditable")?"true":"1"),a.setAttribute("contentEditable",!1))});c.on("selectionChange",function(a){if(!c.readOnly){var d=c.getSelection();d&&!d.isLocked&&(d=c.checkDirty(),c.fire("lockSnapshot"),b(a),c.fire("unlockSnapshot"),!d&&c.resetDirty())}})});CKEDITOR.on("instanceCreated",function(a){var c=a.editor;c.on("mode",function(){var a=c.editable();if(a&&a.isInline()){var b=c.title;a.changeAttr("role",
-"textbox");a.changeAttr("aria-multiline","true");a.changeAttr("aria-label",b);b&&a.changeAttr("title",b);var d=c.fire("ariaEditorHelpLabel",{}).label;if(d&&(b=this.ui.space(this.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?"top":"contents"))){var g=CKEDITOR.tools.getNextId(),d=CKEDITOR.dom.element.createFromHtml('\x3cspan id\x3d"'+g+'" class\x3d"cke_voice_label"\x3e'+d+"\x3c/span\x3e");b.append(d);a.changeAttr("aria-describedby",g)}}})});CKEDITOR.addCss(".cke_editable{cursor:text}.cke_editable img,.cke_editable input,.cke_editable textarea{cursor:default}");
-n=CKEDITOR.dom.walker.whitespaces(!0);y=CKEDITOR.dom.walker.bookmark(!1,!0);w=CKEDITOR.dom.walker.empty();p=CKEDITOR.dom.walker.bogus();t=/(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>|&nbsp;|\u00A0|&#160;)?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi;r=function(){function a(c){return c.type==CKEDITOR.NODE_ELEMENT}function b(c,d){var g,e,f,h,n=[],k=d.range.startContainer;g=d.range.startPath();for(var k=m[k.getName()],l=0,r=c.getChildren(),t=r.count(),y=-1,u=-1,q=0,x=g.contains(m.$list);l<
-t;++l)g=r.getItem(l),a(g)?(f=g.getName(),x&&f in CKEDITOR.dtd.$list?n=n.concat(b(g,d)):(h=!!k[f],"br"!=f||!g.data("cke-eol")||l&&l!=t-1||(q=(e=l?n[l-1].node:r.getItem(l+1))&&(!a(e)||!e.is("br")),e=e&&a(e)&&m.$block[e.getName()]),-1!=y||h||(y=l),h||(u=l),n.push({isElement:1,isLineBreak:q,isBlock:g.isBlockBoundary(),hasBlockSibling:e,node:g,name:f,allowed:h}),e=q=0)):n.push({isElement:0,node:g,allowed:1});-1<y&&(n[y].firstNotAllowed=1);-1<u&&(n[u].lastNotAllowed=1);return n}function d(c,b){var g=[],
-e=c.getChildren(),f=e.count(),h,n=0,k=m[b],l=!c.is(m.$inline)||c.is("br");for(l&&g.push(" ");n<f;n++)h=e.getItem(n),a(h)&&!h.is(k)?g=g.concat(d(h,b)):g.push(h);l&&g.push(" ");return g}function g(c){return a(c.startContainer)&&c.startContainer.getChild(c.startOffset-1)}function f(c){return c&&a(c)&&(c.is(m.$removeEmpty)||c.is("a")&&!c.isBlockBoundary())}function h(c,b,d,g){var e=c.clone(),f,n;e.setEndAt(b,CKEDITOR.POSITION_BEFORE_END);(f=(new CKEDITOR.dom.walker(e)).next())&&a(f)&&r[f.getName()]&&
-(n=f.getPrevious())&&a(n)&&!n.getParent().equals(c.startContainer)&&d.contains(n)&&g.contains(f)&&f.isIdentical(n)&&(f.moveChildren(n),f.remove(),h(c,b,d,g))}function n(c,b){function d(c,b){if(b.isBlock&&b.isElement&&!b.node.is("br")&&a(c)&&c.is("br"))return c.remove(),1}var g=b.endContainer.getChild(b.endOffset),e=b.endContainer.getChild(b.endOffset-1);g&&d(g,c[c.length-1]);e&&d(e,c[0])&&(b.setEnd(b.endContainer,b.endOffset-1),b.collapse())}var m=CKEDITOR.dtd,r={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},y={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},u=CKEDITOR.tools.extend({},m.$inline);delete u.br;return function(r,q,H,G){var x=r.editor,p=!1,w;"unfiltered_html"==q&&(q="html",p=!0);if(!G.checkReadOnly()){var z=(new CKEDITOR.dom.elementPath(G.startContainer,G.root)).blockLimit||G.root;q={type:q,dontFilter:p,editable:r,editor:x,range:G,blockLimit:z,mergeCandidates:[],zombies:[]};var p=q.range,z=q.mergeCandidates,C="html"===q.type,J,S,W,aa,ba;"text"==q.type&&
-p.shrink(CKEDITOR.SHRINK_ELEMENT,!0,!1)&&(S=CKEDITOR.dom.element.createFromHtml("\x3cspan\x3e\x26nbsp;\x3c/span\x3e",p.document),p.insertNode(S),p.setStartAfter(S));W=new CKEDITOR.dom.elementPath(p.startContainer);q.endPath=aa=new CKEDITOR.dom.elementPath(p.endContainer);if(!p.collapsed){J=aa.block||aa.blockLimit;var ca=p.getCommonAncestor();J&&!J.equals(ca)&&!J.contains(ca)&&p.checkEndOfBlock()&&q.zombies.push(J);p.deleteContents()}for(;(ba=g(p))&&a(ba)&&ba.isBlockBoundary()&&W.contains(ba);)p.moveToPosition(ba,
-CKEDITOR.POSITION_BEFORE_END);h(p,q.blockLimit,W,aa);S&&(p.setEndBefore(S),p.collapse(),S.remove());S=p.startPath();if(J=S.contains(f,!1,1))w=p.splitElement(J),q.inlineStylesRoot=J,q.inlineStylesPeak=S.lastElement;S=p.createBookmark();C&&(c(J),c(w));(J=S.startNode.getPrevious(e))&&a(J)&&f(J)&&z.push(J);(J=S.startNode.getNext(e))&&a(J)&&f(J)&&z.push(J);for(J=S.startNode;(J=J.getParent())&&f(J);)z.push(J);p.moveToBookmark(S);w=r.getHtml();w=""===w||w.match(t);x.enterMode===CKEDITOR.ENTER_DIV&&w&&((x=
-r.getFirst())&&x.remove(),G.setStartAt(r,CKEDITOR.POSITION_AFTER_START),G.collapse(!0));if(r=H){r=q.range;if("text"==q.type&&q.inlineStylesRoot){G=q.inlineStylesPeak;x=G.getDocument().createText("{cke-peak}");for(w=q.inlineStylesRoot.getParent();!G.equals(w);)x=x.appendTo(G.clone()),G=G.getParent();H=x.getOuterHtml().split("{cke-peak}").join(H)}G=q.blockLimit.getName();if(/^\s+|\s+$/.test(H)&&"span"in CKEDITOR.dtd[G]){var Z='\x3cspan data-cke-marker\x3d"1"\x3e\x26nbsp;\x3c/span\x3e';H=Z+H+Z}H=q.editor.dataProcessor.toHtml(H,
-{context:null,fixForBody:!1,protectedWhitespaces:!!Z,dontFilter:q.dontFilter,filter:q.editor.activeFilter,enterMode:q.editor.activeEnterMode});G=r.document.createElement("body");G.setHtml(H);Z&&(G.getFirst().remove(),G.getLast().remove());if((Z=r.startPath().block)&&(1!=Z.getChildCount()||!Z.getBogus()))a:{var U;if(1==G.getChildCount()&&a(U=G.getFirst())&&U.is(y)&&!U.hasAttribute("contenteditable")){Z=U.getElementsByTag("*");r=0;for(w=Z.count();r<w;r++)if(x=Z.getItem(r),!x.is(u))break a;U.moveChildren(U.getParent(1));
-U.remove()}}q.dataWrapper=G;r=H}if(r){U=q.range;r=U.document;G=q.blockLimit;w=0;var V,Z=[],ga,N;H=S=0;var R,x=U.startContainer;ba=q.endPath.elements[0];var ea,p=ba.getPosition(x),z=!!ba.getCommonAncestor(x)&&p!=CKEDITOR.POSITION_IDENTICAL&&!(p&CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_IS_CONTAINED),x=b(q.dataWrapper,q);for(n(x,U);w<x.length;w++){p=x[w];if(C=p.isLineBreak)C=U,J=G,aa=W=void 0,p.hasBlockSibling?C=1:(W=C.startContainer.getAscendant(m.$block,1))&&W.is({div:1,p:1})?(aa=W.getPosition(J),
-aa==CKEDITOR.POSITION_IDENTICAL||aa==CKEDITOR.POSITION_CONTAINS?C=0:(J=C.splitElement(W),C.moveToPosition(J,CKEDITOR.POSITION_AFTER_START),C=1)):C=0;if(C)H=0<w;else{C=U.startPath();!p.isBlock&&k(q.editor,C.block,C.blockLimit)&&(N=l(q.editor))&&(N=r.createElement(N),N.appendBogus(),U.insertNode(N),CKEDITOR.env.needsBrFiller&&(V=N.getBogus())&&V.remove(),U.moveToPosition(N,CKEDITOR.POSITION_BEFORE_END));if((C=U.startPath().block)&&!C.equals(ga)){if(V=C.getBogus())V.remove(),Z.push(C);ga=C}p.firstNotAllowed&&
-(S=1);if(S&&p.isElement){C=U.startContainer;for(J=null;C&&!m[C.getName()][p.name];){if(C.equals(G)){C=null;break}J=C;C=C.getParent()}if(C)J&&(R=U.splitElement(J),q.zombies.push(R),q.zombies.push(J));else{J=G.getName();ea=!w;C=w==x.length-1;J=d(p.node,J);W=[];aa=J.length;for(var ca=0,ia=void 0,ha=0,fa=-1;ca<aa;ca++)ia=J[ca]," "==ia?(ha||ea&&!ca||(W.push(new CKEDITOR.dom.text(" ")),fa=W.length),ha=1):(W.push(ia),ha=0);C&&fa==W.length&&W.pop();ea=W}}if(ea){for(;C=ea.pop();)U.insertNode(C);ea=0}else U.insertNode(p.node);
-p.lastNotAllowed&&w<x.length-1&&((R=z?ba:R)&&U.setEndAt(R,CKEDITOR.POSITION_AFTER_START),S=0);U.collapse()}}1!=x.length?V=!1:(V=x[0],V=V.isElement&&"false"==V.node.getAttribute("contenteditable"));V&&(H=!0,C=x[0].node,U.setStartAt(C,CKEDITOR.POSITION_BEFORE_START),U.setEndAt(C,CKEDITOR.POSITION_AFTER_END));q.dontMoveCaret=H;q.bogusNeededBlocks=Z}V=q.range;var ja;ea=q.bogusNeededBlocks;for(ga=V.createBookmark();N=q.zombies.pop();)N.getParent()&&(R=V.clone(),R.moveToElementEditStart(N),R.removeEmptyBlocksAtEnd());
-if(ea)for(;N=ea.pop();)CKEDITOR.env.needsBrFiller?N.appendBogus():N.append(V.document.createText(" "));for(;N=q.mergeCandidates.pop();)N.mergeSiblings();CKEDITOR.env.webkit&&V.startPath()&&(N=V.startPath(),N.block?N.block.$.normalize():N.blockLimit&&N.blockLimit.$.normalize());V.moveToBookmark(ga);if(!q.dontMoveCaret){for(N=g(V);N&&a(N)&&!N.is(m.$empty);){if(N.isBlockBoundary())V.moveToPosition(N,CKEDITOR.POSITION_BEFORE_END);else{if(f(N)&&N.getHtml().match(/(\s|&nbsp;)$/g)){ja=null;break}ja=V.clone();
-ja.moveToPosition(N,CKEDITOR.POSITION_BEFORE_END)}N=N.getLast(e)}ja&&V.moveToRange(ja)}}}}();x=function(){function a(c){c=new CKEDITOR.dom.walker(c);c.guard=function(a,c){if(c)return!1;if(a.type==CKEDITOR.NODE_ELEMENT)return a.is(CKEDITOR.dtd.$tableContent)};c.evaluator=function(a){return a.type==CKEDITOR.NODE_ELEMENT};return c}function c(a,b,d){b=a.getDocument().createElement(b);a.append(b,d);return b}function b(a){var c=a.count(),d;for(c;0<c--;)d=a.getItem(c),CKEDITOR.tools.trim(d.getHtml())||(d.appendBogus(),
-CKEDITOR.env.ie&&9>CKEDITOR.env.version&&d.getChildCount()&&d.getFirst().remove())}return function(d){var g=d.startContainer,e=g.getAscendant("table",1),f=!1;b(e.getElementsByTag("td"));b(e.getElementsByTag("th"));e=d.clone();e.setStart(g,0);e=a(e).lastBackward();e||(e=d.clone(),e.setEndAt(g,CKEDITOR.POSITION_BEFORE_END),e=a(e).lastForward(),f=!0);e||(e=g);e.is("table")?(d.setStartAt(e,CKEDITOR.POSITION_BEFORE_START),d.collapse(!0),e.remove()):(e.is({tbody:1,thead:1,tfoot:1})&&(e=c(e,"tr",f)),e.is("tr")&&
-(e=c(e,e.getParent().is("thead")?"th":"td",f)),(g=e.getBogus())&&g.remove(),d.moveToPosition(e,f?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END))}}();u=function(){function a(c){c=new CKEDITOR.dom.walker(c);c.guard=function(a,c){if(c)return!1;if(a.type==CKEDITOR.NODE_ELEMENT)return a.is(CKEDITOR.dtd.$list)||a.is(CKEDITOR.dtd.$listItem)};c.evaluator=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.is(CKEDITOR.dtd.$listItem)};return c}return function(c){var b=c.startContainer,d=!1,g;g=
-c.clone();g.setStart(b,0);g=a(g).lastBackward();g||(g=c.clone(),g.setEndAt(b,CKEDITOR.POSITION_BEFORE_END),g=a(g).lastForward(),d=!0);g||(g=b);g.is(CKEDITOR.dtd.$list)?(c.setStartAt(g,CKEDITOR.POSITION_BEFORE_START),c.collapse(!0),g.remove()):((b=g.getBogus())&&b.remove(),c.moveToPosition(g,d?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END),c.select())}}();z={eol:{detect:function(a,c){var b=a.range,d=b.clone(),g=b.clone(),e=new CKEDITOR.dom.elementPath(b.startContainer,c),f=new CKEDITOR.dom.elementPath(b.endContainer,
-c);d.collapse(1);g.collapse();e.block&&d.checkBoundaryOfElement(e.block,CKEDITOR.END)&&(b.setStartAfter(e.block),a.prependEolBr=1);f.block&&g.checkBoundaryOfElement(f.block,CKEDITOR.START)&&(b.setEndBefore(f.block),a.appendEolBr=1)},fix:function(a,c){var b=c.getDocument(),d;a.appendEolBr&&(d=this.createEolBr(b),a.fragment.append(d));!a.prependEolBr||d&&!d.getPrevious()||a.fragment.append(this.createEolBr(b),1)},createEolBr:function(a){return a.createElement("br",{attributes:{"data-cke-eol":1}})}},
-bogus:{exclude:function(a){var c=a.range.getBoundaryNodes(),b=c.startNode,c=c.endNode;!c||!p(c)||b&&b.equals(c)||a.range.setEndBefore(c)}},tree:{rebuild:function(a,c){var b=a.range,d=b.getCommonAncestor(),g=new CKEDITOR.dom.elementPath(d,c),e=new CKEDITOR.dom.elementPath(b.startContainer,c),b=new CKEDITOR.dom.elementPath(b.endContainer,c),f;d.type==CKEDITOR.NODE_TEXT&&(d=d.getParent());if(g.blockLimit.is({tr:1,table:1})){var h=g.contains("table").getParent();f=function(a){return!a.equals(h)}}else if(g.block&&
-g.block.is(CKEDITOR.dtd.$listItem)&&(e=e.contains(CKEDITOR.dtd.$list),b=b.contains(CKEDITOR.dtd.$list),!e.equals(b))){var n=g.contains(CKEDITOR.dtd.$list).getParent();f=function(a){return!a.equals(n)}}f||(f=function(a){return!a.equals(g.block)&&!a.equals(g.blockLimit)});this.rebuildFragment(a,c,d,f)},rebuildFragment:function(a,c,b,d){for(var g;b&&!b.equals(c)&&d(b);)g=b.clone(0,1),a.fragment.appendTo(g),a.fragment=g,b=b.getParent()}},cell:{shrink:function(a){a=a.range;var c=a.startContainer,b=a.endContainer,
-d=a.startOffset,g=a.endOffset;c.type==CKEDITOR.NODE_ELEMENT&&c.equals(b)&&c.is("tr")&&++d==g&&a.shrink(CKEDITOR.SHRINK_TEXT)}}};q=function(){function a(c,b){var d=c.getParent();if(d.is(CKEDITOR.dtd.$inline))c[b?"insertBefore":"insertAfter"](d)}function c(b,d,g){a(d);a(g,1);for(var e;e=g.getNext();)e.insertAfter(d),d=e;w(b)&&b.remove()}function b(a,c){var d=new CKEDITOR.dom.range(a);d.setStartAfter(c.startNode);d.setEndBefore(c.endNode);return d}return{list:{detectMerge:function(a,c){var d=b(c,a.bookmark),
-g=d.startPath(),e=d.endPath(),f=g.contains(CKEDITOR.dtd.$list),h=e.contains(CKEDITOR.dtd.$list);a.mergeList=f&&h&&f.getParent().equals(h.getParent())&&!f.equals(h);a.mergeListItems=g.block&&e.block&&g.block.is(CKEDITOR.dtd.$listItem)&&e.block.is(CKEDITOR.dtd.$listItem);if(a.mergeList||a.mergeListItems)d=d.clone(),d.setStartBefore(a.bookmark.startNode),d.setEndAfter(a.bookmark.endNode),a.mergeListBookmark=d.createBookmark()},merge:function(a,b){if(a.mergeListBookmark){var d=a.mergeListBookmark.startNode,
-g=a.mergeListBookmark.endNode,e=new CKEDITOR.dom.elementPath(d,b),f=new CKEDITOR.dom.elementPath(g,b);if(a.mergeList){var h=e.contains(CKEDITOR.dtd.$list),n=f.contains(CKEDITOR.dtd.$list);h.equals(n)||(n.moveChildren(h),n.remove())}a.mergeListItems&&(e=e.contains(CKEDITOR.dtd.$listItem),f=f.contains(CKEDITOR.dtd.$listItem),e.equals(f)||c(f,d,g));d.remove();g.remove()}}},block:{detectMerge:function(a,c){if(!a.tableContentsRanges&&!a.mergeListBookmark){var b=new CKEDITOR.dom.range(c);b.setStartBefore(a.bookmark.startNode);
-b.setEndAfter(a.bookmark.endNode);a.mergeBlockBookmark=b.createBookmark()}},merge:function(a,b){if(a.mergeBlockBookmark&&!a.purgeTableBookmark){var d=a.mergeBlockBookmark.startNode,g=a.mergeBlockBookmark.endNode,e=new CKEDITOR.dom.elementPath(d,b),f=new CKEDITOR.dom.elementPath(g,b),e=e.block,f=f.block;e&&f&&!e.equals(f)&&c(f,d,g);d.remove();g.remove()}}},table:function(){function a(b){var g=[],e,f=new CKEDITOR.dom.walker(b),h=b.startPath().contains(d),n=b.endPath().contains(d),m={};f.guard=function(a,
-f){if(a.type==CKEDITOR.NODE_ELEMENT){var k="visited_"+(f?"out":"in");if(a.getCustomData(k))return;CKEDITOR.dom.element.setMarker(m,a,k,1)}if(f&&h&&a.equals(h))e=b.clone(),e.setEndAt(h,CKEDITOR.POSITION_BEFORE_END),g.push(e);else if(!f&&n&&a.equals(n))e=b.clone(),e.setStartAt(n,CKEDITOR.POSITION_AFTER_START),g.push(e);else{if(k=!f)k=a.type==CKEDITOR.NODE_ELEMENT&&a.is(d)&&(!h||c(a,h))&&(!n||c(a,n));if(!k&&(k=f))if(a.is(d))var k=h&&h.getAscendant("table",!0),l=n&&n.getAscendant("table",!0),r=a.getAscendant("table",
-!0),k=k&&k.contains(r)||l&&l.contains(r);else k=void 0;k&&(e=b.clone(),e.selectNodeContents(a),g.push(e))}};f.lastForward();CKEDITOR.dom.element.clearAllMarkers(m);return g}function c(a,b){var d=CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_IS_CONTAINED,g=a.getPosition(b);return g===CKEDITOR.POSITION_IDENTICAL?!1:0===(g&d)}var d={td:1,th:1,caption:1};return{detectPurge:function(a){var c=a.range,b=c.clone();b.enlarge(CKEDITOR.ENLARGE_ELEMENT);var b=new CKEDITOR.dom.walker(b),g=0;b.evaluator=function(a){a.type==
-CKEDITOR.NODE_ELEMENT&&a.is(d)&&++g};b.checkForward();if(1<g){var b=c.startPath().contains("table"),e=c.endPath().contains("table");b&&e&&c.checkBoundaryOfElement(b,CKEDITOR.START)&&c.checkBoundaryOfElement(e,CKEDITOR.END)&&(c=a.range.clone(),c.setStartBefore(b),c.setEndAfter(e),a.purgeTableBookmark=c.createBookmark())}},detectRanges:function(g,e){var f=b(e,g.bookmark),h=f.clone(),n,m,k=f.getCommonAncestor();k.is(CKEDITOR.dtd.$tableContent)&&!k.is(d)&&(k=k.getAscendant("table",!0));m=k;k=new CKEDITOR.dom.elementPath(f.startContainer,
-m);m=new CKEDITOR.dom.elementPath(f.endContainer,m);k=k.contains("table");m=m.contains("table");if(k||m)k&&m&&c(k,m)?(g.tableSurroundingRange=h,h.setStartAt(k,CKEDITOR.POSITION_AFTER_END),h.setEndAt(m,CKEDITOR.POSITION_BEFORE_START),h=f.clone(),h.setEndAt(k,CKEDITOR.POSITION_AFTER_END),n=f.clone(),n.setStartAt(m,CKEDITOR.POSITION_BEFORE_START),n=a(h).concat(a(n))):k?m||(g.tableSurroundingRange=h,h.setStartAt(k,CKEDITOR.POSITION_AFTER_END),f.setEndAt(k,CKEDITOR.POSITION_AFTER_END)):(g.tableSurroundingRange=
-h,h.setEndAt(m,CKEDITOR.POSITION_BEFORE_START),f.setStartAt(m,CKEDITOR.POSITION_AFTER_START)),g.tableContentsRanges=n?n:a(f)},deleteRanges:function(a){for(var c;c=a.tableContentsRanges.pop();)c.extractContents(),w(c.startContainer)&&c.startContainer.appendBogus();a.tableSurroundingRange&&a.tableSurroundingRange.extractContents()},purge:function(a){if(a.purgeTableBookmark){var c=a.doc,b=a.range.clone(),c=c.createElement("p");c.insertBefore(a.purgeTableBookmark.startNode);b.moveToBookmark(a.purgeTableBookmark);
-b.deleteContents();a.range.moveToPosition(c,CKEDITOR.POSITION_AFTER_START)}}}}(),detectExtractMerge:function(a){return!(a.range.startPath().contains(CKEDITOR.dtd.$listItem)&&a.range.endPath().contains(CKEDITOR.dtd.$listItem))},fixUneditableRangePosition:function(a){a.startContainer.getDtd()["#"]||a.moveToClosestEditablePosition(null,!0)},autoParagraph:function(a,c){var b=c.startPath(),d;k(a,b.block,b.blockLimit)&&(d=l(a))&&(d=c.document.createElement(d),d.appendBogus(),c.insertNode(d),c.moveToPosition(d,
+a.attributes;if(c){if(c["data-cke-temp"])return!1;for(var d=["name","href","src"],b,g=0;g<d.length;g++)b="data-cke-saved-"+d[g],b in c&&delete c[d[g]]}return a},table:function(a){a.children.slice(0).sort(function(a,c){var d,b;a.type==CKEDITOR.NODE_ELEMENT&&c.type==a.type&&(d=CKEDITOR.tools.indexOf(u,a.name),b=CKEDITOR.tools.indexOf(u,c.name));-1<d&&-1<b&&d!=b||(d=a.parent?a.getIndex():-1,b=c.parent?c.getIndex():-1);return d>b?1:-1})},param:function(a){a.children=[];a.isEmpty=!0;return a},span:function(a){"Apple-style-span"==
+a.attributes["class"]&&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 c=a.children[0];c&&c.value&&(c.value=CKEDITOR.tools.trim(c.value));a.attributes.type||(a.attributes.type="text/css")},title:function(a){var c=a.children[0];!c&&l(a,c=new CKEDITOR.htmlParser.text);c.value=a.attributes["data-cke-title"]||""},input:c,textarea:c},attributes:{"class":function(a){return CKEDITOR.tools.ltrim(a.replace(/(?:^|\s+)cke_[^\s]*/g,
+""))||!1}}};CKEDITOR.env.ie&&(E.attributes.style=function(a){return a.replace(/(^|;)([^\:]+)/g,function(a){return a.toLowerCase()})});var F=/<(a|area|img|input|source)\b([^>]*)>/gi,K=/([\w-:]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi,M=/^(href|src|name)$/i,D=/(?:<style(?=[ >])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi,N=/(<textarea(?=[ >])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi,I=/<cke:encoded>([^<]*)<\/cke:encoded>/gi,L=/(<\/?)((?:object|embed|param|html|body|head|title)([\s][^>]*)?>)/gi,
+R=/(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi,H=/<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi;r=function(){function a(c,d){for(var b=0;b<c.length;b++){var g=c[b];g.lastIndex=0;if(g.test(d))return!0}return!1}function c(a){return CKEDITOR.tools.array.reduce(a.split(""),function(a,c){var b=c.toLowerCase(),g=c.toUpperCase(),e=d(b);b!==g&&(e+="|"+d(g));return a+("("+e+")")},"")}function d(a){var c;c=a.charCodeAt(0);var b=c.toString(16);c={htmlCode:"\x26#"+c+";?",hex:"\x26#x0*"+b+";?",entity:{"\x3c":"\x26lt;",
+"\x3e":"\x26gt;",":":"\x26colon;"}[a]};for(var g in c)c[g]&&(a+="|"+c[g]);return a}var b=[new RegExp("("+c("\x3ccke:encoded\x3e")+"(.*?)"+c("\x3c/cke:encoded\x3e")+")|("+c("\x3c")+c("/")+"?"+c("cke:encoded\x3e")+")","gi"),new RegExp("(("+c("{cke_protected")+")(_[0-9]*)?"+c("}")+")","gi"),/<!(?:\s*-\s*){2,3}!?\s*>/g];return function(c){for(;a(b,c);)for(var d=b,g=0;g<d.length;g++)c=c.replace(d[g],"");return c}}()}(),"use strict",CKEDITOR.htmlParser.element=function(b,h){this.name=b;this.attributes=
+h||{};this.children=[];var f=b||"",e=f.match(/^cke:(.*)/);e&&(f=e[1]);f=!!(CKEDITOR.dtd.$nonBodyContent[f]||CKEDITOR.dtd.$block[f]||CKEDITOR.dtd.$listItem[f]||CKEDITOR.dtd.$tableContent[f]||CKEDITOR.dtd.$nonEditable[f]||"br"==f);this.isEmpty=!!CKEDITOR.dtd.$empty[b];this.isUnknown=!CKEDITOR.dtd[b];this._={isBlockLike:f,hasInlineStarted:this.isEmpty||!f}},CKEDITOR.htmlParser.cssStyle=function(b){var h={};((b instanceof CKEDITOR.htmlParser.element?b.attributes.style:b)||"").replace(/&quot;/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,
+function(b,e,a){"font-family"==e&&(a=a.replace(/["']/g,""));h[e.toLowerCase()]=a});return{rules:h,populate:function(b){var e=this.toString();e&&(b instanceof CKEDITOR.dom.element?b.setAttribute("style",e):b instanceof CKEDITOR.htmlParser.element?b.attributes.style=e:b.style=e)},toString:function(){var b=[],e;for(e in h)h[e]&&b.push(e,":",h[e],";");return b.join("")}}},function(){function b(b){return function(a){return a.type==CKEDITOR.NODE_ELEMENT&&("string"==typeof b?a.name==b:a.name in b)}}var h=
+function(b,a){b=b[0];a=a[0];return b<a?-1:b>a?1:0},f=CKEDITOR.htmlParser.fragment.prototype;CKEDITOR.htmlParser.element.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_ELEMENT,add:f.add,clone:function(){return new CKEDITOR.htmlParser.element(this.name,this.attributes)},filter:function(b,a){var f=this,h,m;a=f.getFilterContext(a);if(!f.parent)b.onRoot(a,f);for(;;){h=f.name;if(!(m=b.onElementName(a,h)))return this.remove(),!1;f.name=m;if(!(f=b.onElement(a,f)))return this.remove(),
+!1;if(f!==this)return this.replaceWith(f),!1;if(f.name==h)break;if(f.type!=CKEDITOR.NODE_ELEMENT)return this.replaceWith(f),!1;if(!f.name)return this.replaceWithChildren(),!1}h=f.attributes;var c,d;for(c in h){for(m=h[c];;)if(d=b.onAttributeName(a,c))if(d!=c)delete h[c],c=d;else break;else{delete h[c];break}d&&(!1===(m=b.onAttribute(a,f,d,m))?delete h[d]:h[d]=m)}f.isEmpty||this.filterChildren(b,!1,a);return!0},filterChildren:f.filterChildren,writeHtml:function(b,a){a&&this.filter(a);var f=this.name,
+l=[],m=this.attributes,c,d;b.openTag(f,m);for(c in m)l.push([c,m[c]]);b.sortAttributes&&l.sort(h);c=0;for(d=l.length;c<d;c++)m=l[c],b.attribute(m[0],m[1]);b.openTagClose(f,this.isEmpty);this.writeChildrenHtml(b);this.isEmpty||b.closeTag(f)},writeChildrenHtml:f.writeChildrenHtml,replaceWithChildren:function(){for(var b=this.children,a=b.length;a;)b[--a].insertAfter(this);this.remove()},forEach:f.forEach,getFirst:function(e){if(!e)return this.children.length?this.children[0]:null;"function"!=typeof e&&
+(e=b(e));for(var a=0,f=this.children.length;a<f;++a)if(e(this.children[a]))return this.children[a];return null},getHtml:function(){var b=new CKEDITOR.htmlParser.basicWriter;this.writeChildrenHtml(b);return b.getHtml()},setHtml:function(b){b=this.children=CKEDITOR.htmlParser.fragment.fromHtml(b).children;for(var a=0,f=b.length;a<f;++a)b[a].parent=this},getOuterHtml:function(){var b=new CKEDITOR.htmlParser.basicWriter;this.writeHtml(b);return b.getHtml()},split:function(b){for(var a=this.children.splice(b,
+this.children.length-b),f=this.clone(),h=0;h<a.length;++h)a[h].parent=f;f.children=a;a[0]&&(a[0].previous=null);0<b&&(this.children[b-1].next=null);this.parent.add(f,this.getIndex()+1);return f},find:function(b,a){void 0===a&&(a=!1);var f=[],h;for(h=0;h<this.children.length;h++){var m=this.children[h];"function"==typeof b&&b(m)?f.push(m):"string"==typeof b&&m.name===b&&f.push(m);a&&m.find&&(f=f.concat(m.find(b,a)))}return f},findOne:function(b,a){var f=null,h=CKEDITOR.tools.array.find(this.children,
+function(h){var c="function"===typeof b?b(h):h.name===b;if(c||!a)return c;h.children&&h.findOne&&(f=h.findOne(b,!0));return!!f});return f||h||null},addClass:function(b){if(!this.hasClass(b)){var a=this.attributes["class"]||"";this.attributes["class"]=a+(a?" ":"")+b}},removeClass:function(b){var a=this.attributes["class"];a&&((a=CKEDITOR.tools.trim(a.replace(new RegExp("(?:\\s+|^)"+b+"(?:\\s+|$)")," ")))?this.attributes["class"]=a:delete this.attributes["class"])},hasClass:function(b){var a=this.attributes["class"];
+return a?(new RegExp("(?:^|\\s)"+b+"(?\x3d\\s|$)")).test(a):!1},getFilterContext:function(b){var a=[];b||(b={nonEditable:!1,nestedEditable:!1});b.nonEditable||"false"!=this.attributes.contenteditable?b.nonEditable&&!b.nestedEditable&&"true"==this.attributes.contenteditable&&a.push("nestedEditable",!0):a.push("nonEditable",!0);if(a.length){b=CKEDITOR.tools.copy(b);for(var f=0;f<a.length;f+=2)b[a[f]]=a[f+1]}return b}},!0)}(),function(){var b=/{([^}]+)}/g;CKEDITOR.template=function(b){this.source="function"===
+typeof b?b:String(b)};CKEDITOR.template.prototype.output=function(h,f){var e=("function"===typeof this.source?this.source(h):this.source).replace(b,function(a,b){return void 0!==h[b]?h[b]:a});return f?f.push(e):e}}(),delete CKEDITOR.loadFullCore,CKEDITOR.instances={},CKEDITOR.document=new CKEDITOR.dom.document(document),CKEDITOR.add=function(b){function h(){CKEDITOR.currentInstance==b&&(CKEDITOR.currentInstance=null,CKEDITOR.fire("currentInstance"))}CKEDITOR.instances[b.name]=b;b.on("focus",function(){CKEDITOR.currentInstance!=
+b&&(CKEDITOR.currentInstance=b,CKEDITOR.fire("currentInstance"))});b.on("blur",h);b.on("destroy",h);CKEDITOR.fire("instance",null,b)},CKEDITOR.remove=function(b){delete CKEDITOR.instances[b.name]},function(){var b={};CKEDITOR.addTemplate=function(h,f){var e=b[h];if(e)return e;e={name:h,source:f};CKEDITOR.fire("template",e);return b[h]=new CKEDITOR.template(e.source)};CKEDITOR.getTemplate=function(h){return b[h]}}(),function(){var b=[];CKEDITOR.addCss=function(h){b.push(h)};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,h){b=CKEDITOR.editor._getEditorElement(b);if(!b)return null;if(CKEDITOR.editor.shouldDelayEditorCreation(b,h))return CKEDITOR.editor.initializeDelayedEditorCreation(b,h,"inline"),null;var f=b.is("textarea")?b:null,e=f?f.getValue():b.getHtml(),a=new CKEDITOR.editor(h,b,CKEDITOR.ELEMENT_MODE_INLINE);
+f?(a.setData(e,null,!0),b=CKEDITOR.dom.element.createFromHtml('\x3cdiv contenteditable\x3d"'+!!a.readOnly+'" class\x3d"cke_textarea_inline"\x3e'+f.getValue()+"\x3c/div\x3e",CKEDITOR.document),b.insertAfter(f),f.hide(),f.$.form&&a._attachToForm()):(h&&"undefined"!==typeof h.readOnly&&!h.readOnly&&b.setAttribute("contenteditable","true"),a.setData(e,null,!0));a.on("loaded",function(){a.fire("uiReady");a.editable(b);a.container=b;a.ui.contentsElement=b;a.setData(a.getData(1));a.resetDirty();a.fire("contentDom");
+a.mode="wysiwyg";a.fire("mode");a.status="ready";a.fireOnce("instanceReady");CKEDITOR.fire("instanceReady",null,a)},null,null,1E4);a.on("destroy",function(){var b=a.container;f&&b&&(b.clearCustomData(),b.remove());f&&f.show();a.element.clearCustomData();delete a.element});return a};CKEDITOR.inlineAll=function(){var b,h,f;for(f in CKEDITOR.dtd.$editable)for(var e=CKEDITOR.document.getElementsByTag(f),a=0,k=e.count();a<k;a++)b=e.getItem(a),"true"!=b.getAttribute("contenteditable")||b.getEditor()||(h=
+{element:b,config:{}},!1!==CKEDITOR.fire("inline",h)&&CKEDITOR.inline(b,h.config))};CKEDITOR.domReady(function(){!CKEDITOR.disableAutoInline&&CKEDITOR.inlineAll()})}(),CKEDITOR.replaceClass="ckeditor",function(){function b(b,a,k,l){b=CKEDITOR.editor._getEditorElement(b);if(!b)return null;if(CKEDITOR.editor.shouldDelayEditorCreation(b,a))return CKEDITOR.editor.initializeDelayedEditorCreation(b,a,"replace"),null;var m=new CKEDITOR.editor(a,b,l);l==CKEDITOR.ELEMENT_MODE_REPLACE&&(b.setStyle("visibility",
+"hidden"),m._.required=b.hasAttribute("required"),b.removeAttribute("required"));k&&m.setData(k,null,!0);m.on("loaded",function(){m.isDestroyed()||m.isDetached()||(f(m),l==CKEDITOR.ELEMENT_MODE_REPLACE&&m.config.autoUpdateElement&&b.$.form&&m._attachToForm(),m.setMode(m.config.startupMode,function(){m.resetDirty();m.status="ready";m.fireOnce("instanceReady");CKEDITOR.fire("instanceReady",null,m)}))});m.on("destroy",h);return m}function h(){var b=this.container,a=this.element;b&&(b.clearCustomData(),
+b.remove());a&&(a.clearCustomData(),this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE&&(a.show(),this._.required&&a.setAttribute("required","required")),delete this.element)}function f(b){var a=b.name,f=b.element,h=b.elementMode,m=b.fire("uiSpace",{space:"top",html:""}).html,c=b.fire("uiSpace",{space:"bottom",html:""}).html,d=new CKEDITOR.template('\x3c{outerEl} id\x3d"cke_{name}" class\x3d"{id} cke cke_reset cke_chrome cke_editor_{name} cke_{langDir} '+CKEDITOR.env.cssClass+'"  dir\x3d"{langDir}" lang\x3d"{langCode}" role\x3d"application"'+
+(b.title?' aria-labelledby\x3d"cke_{name}_arialbl"':"")+"\x3e"+(b.title?'\x3cspan id\x3d"cke_{name}_arialbl" class\x3d"cke_voice_label"\x3e{voiceLabel}\x3c/span\x3e':"")+'\x3c{outerEl} class\x3d"cke_inner cke_reset" role\x3d"presentation"\x3e{topHtml}\x3c{outerEl} id\x3d"{contentId}" class\x3d"cke_contents cke_reset" role\x3d"presentation"\x3e\x3c/{outerEl}\x3e{bottomHtml}\x3c/{outerEl}\x3e\x3c/{outerEl}\x3e'),a=CKEDITOR.dom.element.createFromHtml(d.output({id:b.id,name:a,langDir:b.lang.dir,langCode:b.langCode,
+voiceLabel:b.title,topHtml:m?'\x3cspan id\x3d"'+b.ui.spaceId("top")+'" class\x3d"cke_top cke_reset_all" role\x3d"presentation" style\x3d"height:auto"\x3e'+m+"\x3c/span\x3e":"",contentId:b.ui.spaceId("contents"),bottomHtml:c?'\x3cspan id\x3d"'+b.ui.spaceId("bottom")+'" class\x3d"cke_bottom cke_reset_all" role\x3d"presentation"\x3e'+c+"\x3c/span\x3e":"",outerEl:CKEDITOR.env.ie?"span":"div"}));h==CKEDITOR.ELEMENT_MODE_REPLACE?(f.hide(),a.insertAfter(f)):f.append(a);b.container=a;b.ui.contentsElement=
+b.ui.space("contents");m&&b.ui.space("top").unselectable();c&&b.ui.space("bottom").unselectable();f=b.config.width;h=b.config.height;f&&a.setStyle("width",CKEDITOR.tools.cssLength(f));h&&b.ui.space("contents").setStyle("height",CKEDITOR.tools.cssLength(h));a.disableContextMenu();CKEDITOR.env.webkit&&a.on("focus",function(){b.focus()});b.fireOnce("uiReady")}CKEDITOR.replace=function(e,a){return b(e,a,null,CKEDITOR.ELEMENT_MODE_REPLACE)};CKEDITOR.appendTo=function(e,a,f){return b(e,a,f,CKEDITOR.ELEMENT_MODE_APPENDTO)};
+CKEDITOR.replaceAll=function(){for(var b=document.getElementsByTagName("textarea"),a=0;a<b.length;a++){var f=null,h=b[a];if(h.name||h.id){if("string"==typeof arguments[0]){if(!(new RegExp("(?:^|\\s)"+arguments[0]+"(?:$|\\s)")).test(h.className))continue}else if("function"==typeof arguments[0]&&(f={},!1===arguments[0](h,f)))continue;this.replace(h,f)}}};CKEDITOR.editor.prototype.addMode=function(b,a){(this._.modes||(this._.modes={}))[b]=a};CKEDITOR.editor.prototype.setMode=function(b,a){var f=this,
+h=this._.modes;if(b!=f.mode&&h&&h[b]){f.fire("beforeSetMode",b);if(f.mode){var m=f.checkDirty(),h=f._.previousModeData,c,d=0;f.fire("beforeModeUnload");f.editable(0);f._.previousMode=f.mode;f._.previousModeData=c=f.getData(1);"source"==f.mode&&h==c&&(f.fire("lockSnapshot",{forceUpdate:!0}),d=1);f.ui.space("contents").setHtml("");f.mode=""}else f._.previousModeData=f.getData(1);this._.modes[b](function(){f.mode=b;void 0!==m&&!m&&f.resetDirty();d?f.fire("unlockSnapshot"):"wysiwyg"==b&&f.fire("saveSnapshot");
+setTimeout(function(){f.isDestroyed()||f.isDetached()||(f.fire("mode"),a&&a.call(f))},0)})}};CKEDITOR.editor.prototype.resize=function(b,a,f,h){var m=this.container,c=this.ui.space("contents"),d=CKEDITOR.env.webkit&&this.document&&this.document.getWindow().$.frameElement;h=h?this.container.getFirst(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasClass("cke_inner")}):m;if(b||0===b)b=CKEDITOR.tools.convertToPx(CKEDITOR.tools.cssLength(b));h.setSize("width",b,!0);d&&(d.style.width="1%");a=CKEDITOR.tools.convertToPx(CKEDITOR.tools.cssLength(a));
+var g=(h.$.offsetHeight||0)-(c.$.clientHeight||0),m=Math.max(a-(f?0:g),0);a=f?a+g:a;c.setStyle("height",CKEDITOR.tools.cssLength(m));d&&(d.style.width="100%");this.fire("resize",{outerHeight:a,contentsHeight:m,outerWidth:b||h.getSize("width")})};CKEDITOR.editor.prototype.getResizable=function(b){return b?this.ui.space("contents"):this.container};CKEDITOR.domReady(function(){CKEDITOR.replaceClass&&CKEDITOR.replaceAll(CKEDITOR.replaceClass)})}(),CKEDITOR.config.startupMode="wysiwyg",function(){function b(a){var c=
+a.editor,b=a.data.path,d=b.blockLimit,g=a.data.selection,f=g.getRanges()[0],k;if(CKEDITOR.env.gecko||CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller)if(g=h(g,b))g.appendBogus(),k=CKEDITOR.env.ie&&!CKEDITOR.env.edge||CKEDITOR.env.edge&&c._.previousActive;l(c,b.block,d)&&f.collapsed&&!f.getCommonAncestor().isReadOnly()&&(b=f.clone(),b.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS),d=new CKEDITOR.dom.walker(b),d.guard=function(a){return!e(a)||a.type==CKEDITOR.NODE_COMMENT||a.isReadOnly()},!d.checkForward()||b.checkStartOfBlock()&&
+b.checkEndOfBlock())&&(c=f.fixBlock(!0,c.activeEnterMode==CKEDITOR.ENTER_DIV?"div":"p"),CKEDITOR.env.needsBrFiller||(c=c.getFirst(e))&&c.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(c.getText()).match(/^(?:&nbsp;|\xa0)$/)&&c.remove(),k=1,a.cancel());k&&f.select()}function h(a,c){if(a.isFake)return 0;var b=c.block||c.blockLimit,d=b&&b.getLast(e);if(!(!b||!b.isBlockBoundary()||d&&d.type==CKEDITOR.NODE_ELEMENT&&d.isBlockBoundary()||b.is("pre")||b.getBogus()))return b}function f(a){var c=a.data.getTarget();
+c.is("input")&&(c=c.getAttribute("type"),"submit"!=c&&"reset"!=c||a.data.preventDefault())}function e(a){return n(a)&&y(a)}function a(a,c){return function(b){var d=b.data.$.toElement||b.data.$.fromElement||b.data.$.relatedTarget;(d=d&&d.nodeType==CKEDITOR.NODE_ELEMENT?new CKEDITOR.dom.element(d):null)&&(c.equals(d)||c.contains(d))||a.call(this,b)}}function k(a){function c(a){return function(c,d){d&&c.type==CKEDITOR.NODE_ELEMENT&&c.is(g)&&(b=c);if(!(d||!e(c)||a&&p(c)))return!1}}var b,d=a.getRanges()[0];
+a=a.root;var g={table:1,ul:1,ol:1,dl:1};if(d.startPath().contains(g)){var f=d.clone();f.collapse(1);f.setStartAt(a,CKEDITOR.POSITION_AFTER_START);a=new CKEDITOR.dom.walker(f);a.guard=c();a.checkBackward();if(b)return f=d.clone(),f.collapse(),f.setEndAt(b,CKEDITOR.POSITION_AFTER_END),a=new CKEDITOR.dom.walker(f),a.guard=c(!0),b=!1,a.checkForward(),b}return null}function l(a,c,b){return!1!==a.config.autoParagraph&&a.activeEnterMode!=CKEDITOR.ENTER_BR&&(a.editable().equals(b)&&!c||c&&"true"==c.getAttribute("contenteditable"))}
+function m(a){return a.activeEnterMode!=CKEDITOR.ENTER_BR&&!1!==a.config.autoParagraph?a.activeEnterMode==CKEDITOR.ENTER_DIV?"div":"p":!1}function c(a){a&&a.isEmptyInlineRemoveable()&&a.remove()}function d(a){var c=a.editor;c.getSelection().scrollIntoView();setTimeout(function(){c.fire("saveSnapshot")},0)}function g(a,c,b){var d=a.getCommonAncestor(c);for(c=a=b?c:a;(a=a.getParent())&&!d.equals(a)&&1==a.getChildCount();)c=a;c.remove()}var n,y,v,p,q,r,x,t,z,u;CKEDITOR.editable=CKEDITOR.tools.createClass({base:CKEDITOR.dom.element,
+$:function(a,c){this.base(c.$||c);this.editor=a;this.status="unloaded";this.hasFocus=!1;this.setup()},proto:{focus:function(){var a;if(CKEDITOR.env.webkit&&!this.hasFocus&&(a=this.editor._.previousActive||this.getDocument().getActive(),this.contains(a))){a.focus();return}CKEDITOR.env.edge&&14<CKEDITOR.env.version&&!this.hasFocus&&this.getDocument().equals(CKEDITOR.document)&&(this.editor._.previousScrollTop=this.$.scrollTop);try{if(!CKEDITOR.env.ie||CKEDITOR.env.edge&&14<CKEDITOR.env.version||!this.getDocument().equals(CKEDITOR.document))if(CKEDITOR.env.chrome){var c=
+this.$.scrollTop;this.$.focus();this.$.scrollTop=c}else this.$.focus();else this.$.setActive()}catch(b){if(!CKEDITOR.env.ie)throw b;}CKEDITOR.env.safari&&!this.isInline()&&(a=CKEDITOR.document.getActive(),a.equals(this.getWindow().getFrame())||this.getWindow().focus())},on:function(c,b){var d=Array.prototype.slice.call(arguments,0);CKEDITOR.env.ie&&/^focus|blur$/.exec(c)&&(c="focus"==c?"focusin":"focusout",b=a(b,this),d[0]=c,d[1]=b);return CKEDITOR.dom.element.prototype.on.apply(this,d)},attachListener:function(a){!this._.listeners&&
+(this._.listeners=[]);var c=Array.prototype.slice.call(arguments,1),c=a.on.apply(a,c);this._.listeners.push(c);return c},clearListeners:function(){var a=this._.listeners;try{for(;a.length;)a.pop().removeListener()}catch(c){}},restoreAttrs:function(){var a=this._.attrChanges,c,b;for(b in a)a.hasOwnProperty(b)&&(c=a[b],null!==c?this.setAttribute(b,c):this.removeAttribute(b))},attachClass:function(a){var c=this.getCustomData("classes");this.hasClass(a)||(!c&&(c=[]),c.push(a),this.setCustomData("classes",
+c),this.addClass(a))},changeAttr:function(a,c){var b=this.getAttribute(a);c!==b&&(!this._.attrChanges&&(this._.attrChanges={}),a in this._.attrChanges||(this._.attrChanges[a]=b),this.setAttribute(a,c))},insertText:function(a){this.editor.focus();this.insertHtml(this.transformPlainTextToHtml(a),"text")},transformPlainTextToHtml:function(a){var c=this.editor.getSelection().getStartElement().hasAscendant("pre",!0)?CKEDITOR.ENTER_BR:this.editor.activeEnterMode;return CKEDITOR.tools.transformPlainTextToHtml(a,
+c)},insertHtml:function(a,c,b){var g=this.editor;g.focus();g.fire("saveSnapshot");b||(b=g.getSelection().getRanges()[0]);r(this,c||"html",a,b);b.select();d(this);this.editor.fire("afterInsertHtml",{})},insertHtmlIntoRange:function(a,c,b){r(this,b||"html",a,c);this.editor.fire("afterInsertHtml",{intoRange:c})},insertElement:function(a,c){var b=this.editor;b.focus();b.fire("saveSnapshot");var g=b.activeEnterMode,b=b.getSelection(),f=a.getName(),f=CKEDITOR.dtd.$block[f];c||(c=b.getRanges()[0]);this.insertElementIntoRange(a,
+c)&&(c.moveToPosition(a,CKEDITOR.POSITION_AFTER_END),f&&((f=a.getNext(function(a){return e(a)&&!p(a)}))&&f.type==CKEDITOR.NODE_ELEMENT&&f.is(CKEDITOR.dtd.$block)?f.getDtd()["#"]?c.moveToElementEditStart(f):c.moveToElementEditEnd(a):f||g==CKEDITOR.ENTER_BR||(f=c.fixBlock(!0,g==CKEDITOR.ENTER_DIV?"div":"p"),c.moveToElementEditStart(f))));b.selectRanges([c]);d(this)},insertElementIntoSelection:function(a){this.insertElement(a)},insertElementIntoRange:function(a,b){var d=this.editor,g=d.config.enterMode,
+e=a.getName(),f=CKEDITOR.dtd.$block[e];if(b.checkReadOnly())return!1;b.deleteContents(1);b.startContainer.type==CKEDITOR.NODE_ELEMENT&&(b.startContainer.is({tr:1,table:1,tbody:1,thead:1,tfoot:1})?x(b):b.startContainer.is(CKEDITOR.dtd.$list)&&t(b));var h,k;if(f)for(;(h=b.getCommonAncestor(0,1))&&(k=CKEDITOR.dtd[h.getName()])&&(!k||!k[e]);)if(h.getName()in CKEDITOR.dtd.span){var f=b.splitElement(h),n=b.createBookmark();c(h);c(f);b.moveToBookmark(n)}else b.checkStartOfBlock()&&b.checkEndOfBlock()?(b.setStartBefore(h),
+b.collapse(!0),h.remove()):b.splitBlock(g==CKEDITOR.ENTER_DIV?"div":"p",d.editable());b.insertNode(a);return!0},setData:function(a,c){c||(a=this.editor.dataProcessor.toHtml(a));this.setHtml(a);this.fixInitialSelection();"unloaded"==this.status&&(this.status="ready");this.editor.fire("dataReady")},getData:function(a){var c=this.getHtml();a||(c=this.editor.dataProcessor.toDataFormat(c));return c},setReadOnly:function(a){this.setAttribute("contenteditable",!a)},detach:function(){this.status="detached";
+this.editor.setData(this.editor.getData(),{internal:!0});this.clearListeners();try{this._.cleanCustomData()}catch(a){if(!CKEDITOR.env.ie||-2146828218!==a.number)throw a;}this.editor.fire("contentDomUnload");delete this.editor.document;delete this.editor.window;delete this.editor},isInline:function(){return this.getDocument().equals(CKEDITOR.document)},fixInitialSelection:function(){function a(){var c=b.getDocument().$,d=c.getSelection(),g;a:if(d.anchorNode&&d.anchorNode==b.$)g=!0;else{if(CKEDITOR.env.webkit&&
+(g=b.getDocument().getActive())&&g.equals(b)&&!d.anchorNode){g=!0;break a}g=void 0}g&&(g=new CKEDITOR.dom.range(b),g.moveToElementEditStart(b),c=c.createRange(),c.setStart(g.startContainer.$,g.startOffset),c.collapse(!0),d.removeAllRanges(),d.addRange(c))}function c(){var a=b.getDocument().$,d=a.selection,g=b.getDocument().getActive();"None"==d.type&&g.equals(b)&&(d=new CKEDITOR.dom.range(b),a=a.body.createTextRange(),d.moveToElementEditStart(b),d=d.startContainer,d.type!=CKEDITOR.NODE_ELEMENT&&(d=
+d.getParent()),a.moveToElementText(d.$),a.collapse(!0),a.select())}var b=this;if(CKEDITOR.env.ie&&(9>CKEDITOR.env.version||CKEDITOR.env.quirks))this.hasFocus&&(this.focus(),c());else if(this.hasFocus)this.focus(),a();else this.once("focus",function(){a()},null,null,-999)},getHtmlFromRange:function(a){if(a.collapsed)return new CKEDITOR.dom.documentFragment(a.document);a={doc:this.getDocument(),range:a.clone()};z.eol.detect(a,this);z.bogus.exclude(a);z.cell.shrink(a);a.fragment=a.range.cloneContents();
+z.tree.rebuild(a,this);z.eol.fix(a,this);return new CKEDITOR.dom.documentFragment(a.fragment.$)},extractHtmlFromRange:function(a,c){var b=u,d={range:a,doc:a.document},g=this.getHtmlFromRange(a);if(a.collapsed)return a.optimize(),g;a.enlarge(CKEDITOR.ENLARGE_INLINE,1);b.table.detectPurge(d);d.bookmark=a.createBookmark();delete d.range;var e=this.editor.createRange();e.moveToPosition(d.bookmark.startNode,CKEDITOR.POSITION_BEFORE_START);d.targetBookmark=e.createBookmark();b.list.detectMerge(d,this);
+b.table.detectRanges(d,this);b.block.detectMerge(d,this);d.tableContentsRanges?(b.table.deleteRanges(d),a.moveToBookmark(d.bookmark),d.range=a):(a.moveToBookmark(d.bookmark),d.range=a,a.extractContents(b.detectExtractMerge(d)));a.moveToBookmark(d.targetBookmark);a.optimize();b.fixUneditableRangePosition(a);b.list.merge(d,this);b.table.purge(d,this);b.block.merge(d,this);if(c){b=a.startPath();if(d=a.checkStartOfBlock()&&a.checkEndOfBlock()&&b.block&&!a.root.equals(b.block)){a:{var d=b.block.getElementsByTag("span"),
+e=0,f;if(d)for(;f=d.getItem(e++);)if(!y(f)){d=!0;break a}d=!1}d=!d}d&&(a.moveToPosition(b.block,CKEDITOR.POSITION_BEFORE_START),b.block.remove())}else b.autoParagraph(this.editor,a),v(a.startContainer)&&a.startContainer.appendBogus();a.startContainer.mergeSiblings();return g},setup:function(){var a=this.editor;this.attachListener(a,"beforeGetData",function(){var c=this.getData();this.is("textarea")||!1!==a.config.ignoreEmptyParagraph&&(c=c.replace(q,function(a,c){return c}));a.setData(c,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 c=a.getSelection();(c=c&&c.getNative())&&"Control"==c.type||this.focus()},this);this.attachListener(a,"insertHtml",function(a){this.insertHtml(a.data.dataValue,a.data.mode,a.data.range)},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");a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?this.attachClass("cke_editable_inline"):a.elementMode!=CKEDITOR.ELEMENT_MODE_REPLACE&&a.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO||this.attachClass("cke_editable_themed");this.attachClass("cke_contents_"+a.config.contentsLangDirection);a.keystrokeHandler.blockedKeystrokes[8]=
++a.readOnly;a.keystrokeHandler.attach(this);this.on("blur",function(){this.hasFocus=!1},null,null,-1);this.on("focus",function(){this.hasFocus=!0},null,null,-1);if(CKEDITOR.env.webkit)this.on("scroll",function(){a._.previousScrollTop=a.editable().$.scrollTop},null,null,-1);if(CKEDITOR.env.edge&&14<CKEDITOR.env.version){var c=function(){var b=a.editable();null!=a._.previousScrollTop&&b.getDocument().equals(CKEDITOR.document)&&(b.$.scrollTop=a._.previousScrollTop,a._.previousScrollTop=null,this.removeListener("scroll",
+c))};this.on("scroll",c)}a.focusManager.add(this);this.equals(CKEDITOR.document.getActive())&&(this.hasFocus=!0,a.once("contentDom",function(){a.focusManager.focus(this)},this));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 h=CKEDITOR.getCss();
+if(h){var d=b.getHead(),l=d.getCustomData("stylesheet");l?h!=l.getText()&&(CKEDITOR.env.ie&&9>CKEDITOR.env.version?l.$.styleSheet.cssText=h:l.setText(h)):(h=b.appendStyleText(h),h=new CKEDITOR.dom.element(h.ownerNode||h.owningElement),d.setCustomData("stylesheet",h),h.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){a=a.data;var c=
+(new CKEDITOR.dom.elementPath(a.getTarget(),this)).contains("a");c&&2!=a.$.button&&c.isReadOnly()&&a.preventDefault()});var m={8:1,46:1};this.attachListener(a,"key",function(c){if(a.readOnly)return!0;var b=c.data.domEvent.getKey(),d;c=a.getSelection();if(0!==c.getRanges().length){if(b in m){var g,e=c.getRanges()[0],f=e.startPath(),h,l,q,b=8==b;CKEDITOR.env.ie&&11>CKEDITOR.env.version&&(g=c.getSelectedElement())||(g=k(c))?(a.fire("saveSnapshot"),e.moveToPosition(g,CKEDITOR.POSITION_BEFORE_START),g.remove(),
+e.select(),a.fire("saveSnapshot"),d=1):e.collapsed&&((h=f.block)&&(q=h[b?"getPrevious":"getNext"](n))&&q.type==CKEDITOR.NODE_ELEMENT&&q.is("table")&&e[b?"checkStartOfBlock":"checkEndOfBlock"]()?(a.fire("saveSnapshot"),e[b?"checkEndOfBlock":"checkStartOfBlock"]()&&h.remove(),e["moveToElementEdit"+(b?"End":"Start")](q),e.select(),a.fire("saveSnapshot"),d=1):f.blockLimit&&f.blockLimit.is("td")&&(l=f.blockLimit.getAscendant("table"))&&e.checkBoundaryOfElement(l,b?CKEDITOR.START:CKEDITOR.END)&&(q=l[b?
+"getPrevious":"getNext"](n))?(a.fire("saveSnapshot"),e["moveToElementEdit"+(b?"End":"Start")](q),e.checkStartOfBlock()&&e.checkEndOfBlock()?q.remove():e.select(),a.fire("saveSnapshot"),d=1):(l=f.contains(["td","th","caption"]))&&e.checkBoundaryOfElement(l,b?CKEDITOR.START:CKEDITOR.END)&&(d=1))}return!d}});a.blockless&&CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller&&this.attachListener(this,"keyup",function(c){c.data.getKeystroke()in m&&!this.getFirst(e)&&(this.appendBogus(),c=a.createRange(),c.moveToPosition(this,
+CKEDITOR.POSITION_AFTER_START),c.select())});this.attachListener(this,"dblclick",function(c){if(a.readOnly)return!1;c={element:c.data.getTarget()};a.fire("doubleclick",c)});CKEDITOR.env.ie&&this.attachListener(this,"click",f);CKEDITOR.env.ie&&!CKEDITOR.env.edge||this.attachListener(this,"mousedown",function(c){var b=c.data.getTarget();b.is("img","hr","input","textarea","select")&&!b.isReadOnly()&&(a.getSelection().selectElement(b),b.is("input","textarea","select")&&c.data.preventDefault())});CKEDITOR.env.edge&&
+this.attachListener(this,"mouseup",function(c){(c=c.data.getTarget())&&c.is("img")&&!c.isReadOnly()&&a.getSelection().selectElement(c)});CKEDITOR.env.gecko&&this.attachListener(this,"mouseup",function(c){if(2==c.data.$.button&&(c=c.data.getTarget(),!c.getAscendant("table")&&!c.getOuterHtml().replace(q,""))){var b=a.createRange();b.moveToElementEditStart(c);b.select(!0)}});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()}));CKEDITOR.env.webkit&&this.attachListener(a,"key",function(c){if(a.readOnly)return!0;var b=c.data.domEvent.getKey();if(b in m&&(c=a.getSelection(),0!==c.getRanges().length)){var b=8==b,d=c.getRanges()[0];c=d.startPath();if(d.collapsed)a:{var e=c.block;if(e&&d[b?"checkStartOfBlock":"checkEndOfBlock"](!0)&&d.moveToClosestEditablePosition(e,!b)&&d.collapsed){if(d.startContainer.type==CKEDITOR.NODE_ELEMENT){var f=
+d.startContainer.getChild(d.startOffset-(b?1:0));if(f&&f.type==CKEDITOR.NODE_ELEMENT&&f.is("hr")){a.fire("saveSnapshot");f.remove();c=!0;break a}}d=d.startPath().block;if(!d||d&&d.contains(e))c=void 0;else{a.fire("saveSnapshot");var h;(h=(b?d:e).getBogus())&&h.remove();h=a.getSelection();f=h.createBookmarks();(b?e:d).moveChildren(b?d:e,!1);c.lastElement.mergeSiblings();g(e,d,!b);h.selectBookmarks(f);c=!0}}else c=!1}else b=d,h=c.block,d=b.endPath().block,h&&d&&!h.equals(d)?(a.fire("saveSnapshot"),
+(e=h.getBogus())&&e.remove(),b.enlarge(CKEDITOR.ENLARGE_INLINE),b.deleteContents(),d.getParent()&&(d.moveChildren(h,!1),c.lastElement.mergeSiblings(),g(h,d,!0)),b=a.getSelection().getRanges()[0],b.collapse(1),b.optimize(),""===b.startContainer.getHtml()&&b.startContainer.appendBogus(),b.select(),c=!0):c=!1;if(!c)return;a.getSelection().scrollIntoView();a.fire("saveSnapshot");return!1}},this,null,100)}},getUniqueId:function(){var a;try{this._.expandoNumber=a=CKEDITOR.dom.domObject.prototype.getUniqueId.call(this)}catch(c){a=
+this._&&this._.expandoNumber}return a}},_:{cleanCustomData:function(){this.removeClass("cke_editable");this.restoreAttrs();for(var a=this.removeCustomData("classes");a&&a.length;)this.removeClass(a.pop());if(!this.is("textarea")){var a=this.getDocument(),c=a.getHead();if(c.getCustomData("stylesheet")){var b=a.getCustomData("stylesheet_ref");--b?a.setCustomData("stylesheet_ref",b):(a.removeCustomData("stylesheet_ref"),c.removeCustomData("stylesheet").remove())}}}}});CKEDITOR.editor.prototype.editable=
+function(a){var c=this._.editable;if(c&&a)return 0;if(!arguments.length)return c;a?c=a instanceof CKEDITOR.editable?a:new CKEDITOR.editable(this,a):(c&&c.detach(),c=null);return this._.editable=c};CKEDITOR.on("instanceLoaded",function(a){var c=a.editor;c.on("insertElement",function(a){a=a.data;a.type==CKEDITOR.NODE_ELEMENT&&(a.is("input")||a.is("textarea"))&&("false"!=a.getAttribute("contentEditable")&&a.data("cke-editable",a.hasAttribute("contenteditable")?"true":"1"),a.setAttribute("contentEditable",
+!1))});c.on("selectionChange",function(a){if(!c.readOnly){var d=c.getSelection();d&&!d.isLocked&&(d=c.checkDirty(),c.fire("lockSnapshot"),b(a),c.fire("unlockSnapshot"),!d&&c.resetDirty())}})});CKEDITOR.on("instanceCreated",function(a){var c=a.editor;c.on("mode",function(){var a=c.editable();if(a&&a.isInline()){var b=c.title;a.changeAttr("role","textbox");a.changeAttr("aria-multiline","true");a.changeAttr("aria-label",b);b&&a.changeAttr("title",b);var d=c.fire("ariaEditorHelpLabel",{}).label;if(d&&
+(b=this.ui.space(this.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?"top":"contents"))){var g=CKEDITOR.tools.getNextId(),d=CKEDITOR.dom.element.createFromHtml('\x3cspan id\x3d"'+g+'" class\x3d"cke_voice_label"\x3e'+d+"\x3c/span\x3e");b.append(d);a.changeAttr("aria-describedby",g)}}})});CKEDITOR.addCss(".cke_editable{cursor:text}.cke_editable img,.cke_editable input,.cke_editable textarea{cursor:default}");n=CKEDITOR.dom.walker.whitespaces(!0);y=CKEDITOR.dom.walker.bookmark(!1,!0);v=CKEDITOR.dom.walker.empty();
+p=CKEDITOR.dom.walker.bogus();q=/(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>|&nbsp;|\u00A0|&#160;)?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi;r=function(){function a(c){return c.type==CKEDITOR.NODE_ELEMENT}function b(c,d){var g,e,f,h,k=[],l=d.range.startContainer;g=d.range.startPath();for(var l=n[l.getName()],m=0,q=c.getChildren(),r=q.count(),y=-1,t=-1,u=0,F=g.contains(n.$list);m<r;++m)g=q.getItem(m),a(g)?(f=g.getName(),F&&f in CKEDITOR.dtd.$list?k=k.concat(b(g,d)):(h=!!l[f],
+"br"!=f||!g.data("cke-eol")||m&&m!=r-1||(u=(e=m?k[m-1].node:q.getItem(m+1))&&(!a(e)||!e.is("br")),e=e&&a(e)&&n.$block[e.getName()]),-1!=y||h||(y=m),h||(t=m),k.push({isElement:1,isLineBreak:u,isBlock:g.isBlockBoundary(),hasBlockSibling:e,node:g,name:f,allowed:h}),e=u=0)):k.push({isElement:0,node:g,allowed:1});-1<y&&(k[y].firstNotAllowed=1);-1<t&&(k[t].lastNotAllowed=1);return k}function d(c,b){var g=[],e=c.getChildren(),f=e.count(),h,k=0,l=n[b],m=!c.is(n.$inline)||c.is("br");for(m&&g.push(" ");k<f;k++)h=
+e.getItem(k),a(h)&&!h.is(l)?g=g.concat(d(h,b)):g.push(h);m&&g.push(" ");return g}function g(c){return a(c.startContainer)&&c.startContainer.getChild(c.startOffset-1)}function f(c){return c&&a(c)&&(c.is(n.$removeEmpty)||c.is("a")&&!c.isBlockBoundary())}function h(c,b,d,g){var e=c.clone(),f,k;e.setEndAt(b,CKEDITOR.POSITION_BEFORE_END);(f=(new CKEDITOR.dom.walker(e)).next())&&a(f)&&r[f.getName()]&&(k=f.getPrevious())&&a(k)&&!k.getParent().equals(c.startContainer)&&d.contains(k)&&g.contains(f)&&f.isIdentical(k)&&
+(f.moveChildren(k),f.remove(),h(c,b,d,g))}function k(c,b){function d(c,b){if(b.isBlock&&b.isElement&&!b.node.is("br")&&a(c)&&c.is("br"))return c.remove(),1}var g=b.endContainer.getChild(b.endOffset),e=b.endContainer.getChild(b.endOffset-1);g&&d(g,c[c.length-1]);e&&d(e,c[0])&&(b.setEnd(b.endContainer,b.endOffset-1),b.collapse())}var n=CKEDITOR.dtd,r={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},y={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},t=CKEDITOR.tools.extend({},
+n.$inline);delete t.br;return function(r,u,H,G){var p=r.editor,x=!1,v;"unfiltered_html"==u&&(u="html",x=!0);if(!G.checkReadOnly()){var z=(new CKEDITOR.dom.elementPath(G.startContainer,G.root)).blockLimit||G.root;u={type:u,dontFilter:x,editable:r,editor:p,range:G,blockLimit:z,mergeCandidates:[],zombies:[]};var x=u.range,z=u.mergeCandidates,D="html"===u.type,J,T,W,aa,ba;"text"==u.type&&x.shrink(CKEDITOR.SHRINK_ELEMENT,!0,!1)&&(T=CKEDITOR.dom.element.createFromHtml("\x3cspan\x3e\x26nbsp;\x3c/span\x3e",
+x.document),x.insertNode(T),x.setStartAfter(T));W=new CKEDITOR.dom.elementPath(x.startContainer);u.endPath=aa=new CKEDITOR.dom.elementPath(x.endContainer);if(!x.collapsed){J=aa.block||aa.blockLimit;var da=x.getCommonAncestor();J&&!J.equals(da)&&!J.contains(da)&&x.checkEndOfBlock()&&u.zombies.push(J);x.deleteContents()}for(;(ba=g(x))&&a(ba)&&ba.isBlockBoundary()&&W.contains(ba);)x.moveToPosition(ba,CKEDITOR.POSITION_BEFORE_END);h(x,u.blockLimit,W,aa);T&&(x.setEndBefore(T),x.collapse(),T.remove());
+T=x.startPath();if(J=T.contains(f,!1,1))v=x.splitElement(J),u.inlineStylesRoot=J,u.inlineStylesPeak=T.lastElement;T=x.createBookmark();D&&(c(J),c(v));(J=T.startNode.getPrevious(e))&&a(J)&&f(J)&&z.push(J);(J=T.startNode.getNext(e))&&a(J)&&f(J)&&z.push(J);for(J=T.startNode;(J=J.getParent())&&f(J);)z.push(J);x.moveToBookmark(T);v=r.getHtml();v=""===v||v.match(q);p.enterMode===CKEDITOR.ENTER_DIV&&v&&((p=r.getFirst())&&p.remove(),G.setStartAt(r,CKEDITOR.POSITION_AFTER_START),G.collapse(!0));if(r=H){r=
+u.range;if("text"==u.type&&u.inlineStylesRoot){G=u.inlineStylesPeak;p=G.getDocument().createText("{cke-peak}");for(v=u.inlineStylesRoot.getParent();!G.equals(v);)p=p.appendTo(G.clone()),G=G.getParent();H=p.getOuterHtml().split("{cke-peak}").join(H)}G=u.blockLimit.getName();if(/^\s+|\s+$/.test(H)&&"span"in CKEDITOR.dtd[G]){var Z='\x3cspan data-cke-marker\x3d"1"\x3e\x26nbsp;\x3c/span\x3e';H=Z+H+Z}H=u.editor.dataProcessor.toHtml(H,{context:null,fixForBody:!1,protectedWhitespaces:!!Z,dontFilter:u.dontFilter,
+filter:u.editor.activeFilter,enterMode:u.editor.activeEnterMode});G=r.document.createElement("body");G.setHtml(H);Z&&(G.getFirst().remove(),G.getLast().remove());if((Z=r.startPath().block)&&(1!=Z.getChildCount()||!Z.getBogus()))a:{var U;if(1==G.getChildCount()&&a(U=G.getFirst())&&U.is(y)&&!U.hasAttribute("contenteditable")){Z=U.getElementsByTag("*");r=0;for(v=Z.count();r<v;r++)if(p=Z.getItem(r),!p.is(t))break a;U.moveChildren(U.getParent(1));U.remove()}}u.dataWrapper=G;r=H}if(r){U=u.range;r=U.document;
+G=u.blockLimit;v=0;var V,Z=[],ha,P;H=T=0;var Q,p=U.startContainer;ba=u.endPath.elements[0];var ea,x=ba.getPosition(p),z=!!ba.getCommonAncestor(p)&&x!=CKEDITOR.POSITION_IDENTICAL&&!(x&CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_IS_CONTAINED),p=b(u.dataWrapper,u);for(u.editor.enterMode!==CKEDITOR.ENTER_BR&&k(p,U);v<p.length;v++){x=p[v];if(D=x.isLineBreak)D=U,J=G,aa=W=void 0,x.hasBlockSibling?D=1:(W=D.startContainer.getAscendant(n.$block,1))&&W.is({div:1,p:1})?(aa=W.getPosition(J),aa==CKEDITOR.POSITION_IDENTICAL||
+aa==CKEDITOR.POSITION_CONTAINS?D=0:(J=D.splitElement(W),D.moveToPosition(J,CKEDITOR.POSITION_AFTER_START),D=1)):D=0;if(D)H=0<v;else{D=U.startPath();!x.isBlock&&l(u.editor,D.block,D.blockLimit)&&(P=m(u.editor))&&(P=r.createElement(P),P.appendBogus(),U.insertNode(P),CKEDITOR.env.needsBrFiller&&(V=P.getBogus())&&V.remove(),U.moveToPosition(P,CKEDITOR.POSITION_BEFORE_END));if((D=U.startPath().block)&&!D.equals(ha)){if(V=D.getBogus())V.remove(),Z.push(D);ha=D}x.firstNotAllowed&&(T=1);if(T&&x.isElement){D=
+U.startContainer;for(J=null;D&&!n[D.getName()][x.name];){if(D.equals(G)){D=null;break}J=D;D=D.getParent()}if(D)J&&(Q=U.splitElement(J),u.zombies.push(Q),u.zombies.push(J));else{J=G.getName();ea=!v;D=v==p.length-1;J=d(x.node,J);W=[];aa=J.length;for(var da=0,ja=void 0,ga=0,fa=-1;da<aa;da++)ja=J[da]," "==ja?(ga||ea&&!da||(W.push(new CKEDITOR.dom.text(" ")),fa=W.length),ga=1):(W.push(ja),ga=0);D&&fa==W.length&&W.pop();ea=W}}if(ea){for(;D=ea.pop();)U.insertNode(D);ea=0}else U.insertNode(x.node);x.lastNotAllowed&&
+v<p.length-1&&((Q=z?ba:Q)&&U.setEndAt(Q,CKEDITOR.POSITION_AFTER_START),T=0);U.collapse()}}1!=p.length?V=!1:(V=p[0],V=V.isElement&&"false"==V.node.getAttribute("contenteditable"));V&&(H=!0,D=p[0].node,U.setStartAt(D,CKEDITOR.POSITION_BEFORE_START),U.setEndAt(D,CKEDITOR.POSITION_AFTER_END));u.dontMoveCaret=H;u.bogusNeededBlocks=Z}V=u.range;var ia;ea=u.bogusNeededBlocks;for(ha=V.createBookmark();P=u.zombies.pop();)P.getParent()&&(Q=V.clone(),Q.moveToElementEditStart(P),Q.removeEmptyBlocksAtEnd());if(ea)for(;P=
+ea.pop();)CKEDITOR.env.needsBrFiller?P.appendBogus():P.append(V.document.createText(" "));for(;P=u.mergeCandidates.pop();)P.mergeSiblings();CKEDITOR.env.webkit&&V.startPath()&&(P=V.startPath(),P.block?P.block.$.normalize():P.blockLimit&&P.blockLimit.$.normalize());V.moveToBookmark(ha);if(!u.dontMoveCaret){for(P=g(V);P&&a(P)&&!P.is(n.$empty);){if(P.isBlockBoundary())V.moveToPosition(P,CKEDITOR.POSITION_BEFORE_END);else{if(f(P)&&P.getHtml().match(/(\s|&nbsp;)$/g)){ia=null;break}ia=V.clone();ia.moveToPosition(P,
+CKEDITOR.POSITION_BEFORE_END)}P=P.getLast(e)}ia&&V.moveToRange(ia)}}}}();x=function(){function a(c){c=new CKEDITOR.dom.walker(c);c.guard=function(a,c){if(c)return!1;if(a.type==CKEDITOR.NODE_ELEMENT)return a.is(CKEDITOR.dtd.$tableContent)};c.evaluator=function(a){return a.type==CKEDITOR.NODE_ELEMENT};return c}function c(a,b,d){b=a.getDocument().createElement(b);a.append(b,d);return b}function b(a){var c=a.count(),d;for(c;0<c--;)d=a.getItem(c),CKEDITOR.tools.trim(d.getHtml())||(d.appendBogus(),CKEDITOR.env.ie&&
+9>CKEDITOR.env.version&&d.getChildCount()&&d.getFirst().remove())}return function(d){var g=d.startContainer,e=g.getAscendant("table",1),f=!1;b(e.getElementsByTag("td"));b(e.getElementsByTag("th"));e=d.clone();e.setStart(g,0);e=a(e).lastBackward();e||(e=d.clone(),e.setEndAt(g,CKEDITOR.POSITION_BEFORE_END),e=a(e).lastForward(),f=!0);e||(e=g);e.is("table")?(d.setStartAt(e,CKEDITOR.POSITION_BEFORE_START),d.collapse(!0),e.remove()):(e.is({tbody:1,thead:1,tfoot:1})&&(e=c(e,"tr",f)),e.is("tr")&&(e=c(e,e.getParent().is("thead")?
+"th":"td",f)),(g=e.getBogus())&&g.remove(),d.moveToPosition(e,f?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END))}}();t=function(){function a(c){c=new CKEDITOR.dom.walker(c);c.guard=function(a,c){if(c)return!1;if(a.type==CKEDITOR.NODE_ELEMENT)return a.is(CKEDITOR.dtd.$list)||a.is(CKEDITOR.dtd.$listItem)};c.evaluator=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.is(CKEDITOR.dtd.$listItem)};return c}return function(c){var b=c.startContainer,d=!1,g;g=c.clone();g.setStart(b,0);g=a(g).lastBackward();
+g||(g=c.clone(),g.setEndAt(b,CKEDITOR.POSITION_BEFORE_END),g=a(g).lastForward(),d=!0);g||(g=b);g.is(CKEDITOR.dtd.$list)?(c.setStartAt(g,CKEDITOR.POSITION_BEFORE_START),c.collapse(!0),g.remove()):((b=g.getBogus())&&b.remove(),c.moveToPosition(g,d?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END),c.select())}}();z={eol:{detect:function(a,c){var b=a.range,d=b.clone(),g=b.clone(),e=new CKEDITOR.dom.elementPath(b.startContainer,c),f=new CKEDITOR.dom.elementPath(b.endContainer,c);d.collapse(1);
+g.collapse();e.block&&d.checkBoundaryOfElement(e.block,CKEDITOR.END)&&(b.setStartAfter(e.block),a.prependEolBr=1);f.block&&g.checkBoundaryOfElement(f.block,CKEDITOR.START)&&(b.setEndBefore(f.block),a.appendEolBr=1)},fix:function(a,c){var b=c.getDocument(),d;a.appendEolBr&&(d=this.createEolBr(b),a.fragment.append(d));!a.prependEolBr||d&&!d.getPrevious()||a.fragment.append(this.createEolBr(b),1)},createEolBr:function(a){return a.createElement("br",{attributes:{"data-cke-eol":1}})}},bogus:{exclude:function(a){var c=
+a.range.getBoundaryNodes(),b=c.startNode,c=c.endNode;!c||!p(c)||b&&b.equals(c)||a.range.setEndBefore(c)}},tree:{rebuild:function(a,c){var b=a.range,d=b.getCommonAncestor(),g=new CKEDITOR.dom.elementPath(d,c),e=new CKEDITOR.dom.elementPath(b.startContainer,c),b=new CKEDITOR.dom.elementPath(b.endContainer,c),f;d.type==CKEDITOR.NODE_TEXT&&(d=d.getParent());if(g.blockLimit.is({tr:1,table:1})){var h=g.contains("table").getParent();f=function(a){return!a.equals(h)}}else if(g.block&&g.block.is(CKEDITOR.dtd.$listItem)&&
+(e=e.contains(CKEDITOR.dtd.$list),b=b.contains(CKEDITOR.dtd.$list),!e.equals(b))){var k=g.contains(CKEDITOR.dtd.$list).getParent();f=function(a){return!a.equals(k)}}f||(f=function(a){return!a.equals(g.block)&&!a.equals(g.blockLimit)});this.rebuildFragment(a,c,d,f)},rebuildFragment:function(a,c,b,d){for(var g;b&&!b.equals(c)&&d(b);)g=b.clone(0,1),a.fragment.appendTo(g),a.fragment=g,b=b.getParent()}},cell:{shrink:function(a){a=a.range;var c=a.startContainer,b=a.endContainer,d=a.startOffset,g=a.endOffset;
+c.type==CKEDITOR.NODE_ELEMENT&&c.equals(b)&&c.is("tr")&&++d==g&&a.shrink(CKEDITOR.SHRINK_TEXT)}}};u=function(){function a(c,b){var d=c.getParent();if(d.is(CKEDITOR.dtd.$inline))c[b?"insertBefore":"insertAfter"](d)}function c(b,d,g){a(d);a(g,1);for(var e;e=g.getNext();)e.insertAfter(d),d=e;v(b)&&b.remove()}function b(a,c){var d=new CKEDITOR.dom.range(a);d.setStartAfter(c.startNode);d.setEndBefore(c.endNode);return d}return{list:{detectMerge:function(a,c){var d=b(c,a.bookmark),g=d.startPath(),e=d.endPath(),
+f=g.contains(CKEDITOR.dtd.$list),h=e.contains(CKEDITOR.dtd.$list);a.mergeList=f&&h&&f.getParent().equals(h.getParent())&&!f.equals(h);a.mergeListItems=g.block&&e.block&&g.block.is(CKEDITOR.dtd.$listItem)&&e.block.is(CKEDITOR.dtd.$listItem);if(a.mergeList||a.mergeListItems)d=d.clone(),d.setStartBefore(a.bookmark.startNode),d.setEndAfter(a.bookmark.endNode),a.mergeListBookmark=d.createBookmark()},merge:function(a,b){if(a.mergeListBookmark){var d=a.mergeListBookmark.startNode,g=a.mergeListBookmark.endNode,
+e=new CKEDITOR.dom.elementPath(d,b),f=new CKEDITOR.dom.elementPath(g,b);if(a.mergeList){var h=e.contains(CKEDITOR.dtd.$list),k=f.contains(CKEDITOR.dtd.$list);h.equals(k)||(k.moveChildren(h),k.remove())}a.mergeListItems&&(e=e.contains(CKEDITOR.dtd.$listItem),f=f.contains(CKEDITOR.dtd.$listItem),e.equals(f)||c(f,d,g));d.remove();g.remove()}}},block:{detectMerge:function(a,c){if(!a.tableContentsRanges&&!a.mergeListBookmark){var b=new CKEDITOR.dom.range(c);b.setStartBefore(a.bookmark.startNode);b.setEndAfter(a.bookmark.endNode);
+a.mergeBlockBookmark=b.createBookmark()}},merge:function(a,b){if(a.mergeBlockBookmark&&!a.purgeTableBookmark){var d=a.mergeBlockBookmark.startNode,g=a.mergeBlockBookmark.endNode,e=new CKEDITOR.dom.elementPath(d,b),f=new CKEDITOR.dom.elementPath(g,b),e=e.block,f=f.block;e&&f&&!e.equals(f)&&c(f,d,g);d.remove();g.remove()}}},table:function(){function a(b){var g=[],e,f=new CKEDITOR.dom.walker(b),h=b.startPath().contains(d),k=b.endPath().contains(d),n={};f.guard=function(a,f){if(a.type==CKEDITOR.NODE_ELEMENT){var l=
+"visited_"+(f?"out":"in");if(a.getCustomData(l))return;CKEDITOR.dom.element.setMarker(n,a,l,1)}if(f&&h&&a.equals(h))e=b.clone(),e.setEndAt(h,CKEDITOR.POSITION_BEFORE_END),g.push(e);else if(!f&&k&&a.equals(k))e=b.clone(),e.setStartAt(k,CKEDITOR.POSITION_AFTER_START),g.push(e);else{if(l=!f)l=a.type==CKEDITOR.NODE_ELEMENT&&a.is(d)&&(!h||c(a,h))&&(!k||c(a,k));if(!l&&(l=f))if(a.is(d))var l=h&&h.getAscendant("table",!0),m=k&&k.getAscendant("table",!0),q=a.getAscendant("table",!0),l=l&&l.contains(q)||m&&
+m.contains(q);else l=void 0;l&&(e=b.clone(),e.selectNodeContents(a),g.push(e))}};f.lastForward();CKEDITOR.dom.element.clearAllMarkers(n);return g}function c(a,b){var d=CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_IS_CONTAINED,g=a.getPosition(b);return g===CKEDITOR.POSITION_IDENTICAL?!1:0===(g&d)}var d={td:1,th:1,caption:1};return{detectPurge:function(a){var c=a.range,b=c.clone();b.enlarge(CKEDITOR.ENLARGE_ELEMENT);var b=new CKEDITOR.dom.walker(b),g=0;b.evaluator=function(a){a.type==CKEDITOR.NODE_ELEMENT&&
+a.is(d)&&++g};b.checkForward();if(1<g){var b=c.startPath().contains("table"),e=c.endPath().contains("table");b&&e&&c.checkBoundaryOfElement(b,CKEDITOR.START)&&c.checkBoundaryOfElement(e,CKEDITOR.END)&&(c=a.range.clone(),c.setStartBefore(b),c.setEndAfter(e),a.purgeTableBookmark=c.createBookmark())}},detectRanges:function(g,e){var f=b(e,g.bookmark),h=f.clone(),k,n,l=f.getCommonAncestor();l.is(CKEDITOR.dtd.$tableContent)&&!l.is(d)&&(l=l.getAscendant("table",!0));n=l;l=new CKEDITOR.dom.elementPath(f.startContainer,
+n);n=new CKEDITOR.dom.elementPath(f.endContainer,n);l=l.contains("table");n=n.contains("table");if(l||n)l&&n&&c(l,n)?(g.tableSurroundingRange=h,h.setStartAt(l,CKEDITOR.POSITION_AFTER_END),h.setEndAt(n,CKEDITOR.POSITION_BEFORE_START),h=f.clone(),h.setEndAt(l,CKEDITOR.POSITION_AFTER_END),k=f.clone(),k.setStartAt(n,CKEDITOR.POSITION_BEFORE_START),k=a(h).concat(a(k))):l?n||(g.tableSurroundingRange=h,h.setStartAt(l,CKEDITOR.POSITION_AFTER_END),f.setEndAt(l,CKEDITOR.POSITION_AFTER_END)):(g.tableSurroundingRange=
+h,h.setEndAt(n,CKEDITOR.POSITION_BEFORE_START),f.setStartAt(n,CKEDITOR.POSITION_AFTER_START)),g.tableContentsRanges=k?k:a(f)},deleteRanges:function(a){for(var c;c=a.tableContentsRanges.pop();)c.extractContents(),v(c.startContainer)&&c.startContainer.appendBogus();a.tableSurroundingRange&&a.tableSurroundingRange.extractContents()},purge:function(a){if(a.purgeTableBookmark){var c=a.doc,b=a.range.clone(),c=c.createElement("p");c.insertBefore(a.purgeTableBookmark.startNode);b.moveToBookmark(a.purgeTableBookmark);
+b.deleteContents();a.range.moveToPosition(c,CKEDITOR.POSITION_AFTER_START)}}}}(),detectExtractMerge:function(a){return!(a.range.startPath().contains(CKEDITOR.dtd.$listItem)&&a.range.endPath().contains(CKEDITOR.dtd.$listItem))},fixUneditableRangePosition:function(a){a.startContainer.getDtd()["#"]||a.moveToClosestEditablePosition(null,!0)},autoParagraph:function(a,c){var b=c.startPath(),d;l(a,b.block,b.blockLimit)&&(d=m(a))&&(d=c.document.createElement(d),d.appendBogus(),c.insertNode(d),c.moveToPosition(d,
 CKEDITOR.POSITION_AFTER_START))}}}()}(),function(){function b(a){return CKEDITOR.plugins.widget&&CKEDITOR.plugins.widget.isDomWidget(a)}function h(a,c){if(0===a.length||b(a[0].getEnclosedNode()))return!1;var d,g;if((d=!c&&1===a.length)&&!(d=a[0].collapsed)){var e=a[0];d=e.startContainer.getAscendant({td:1,th:1},!0);var f=e.endContainer.getAscendant({td:1,th:1},!0);g=CKEDITOR.tools.trim;d&&d.equals(f)&&!d.findOne("td, th, tr, tbody, table")?(e=e.cloneContents(),d=e.getFirst()?g(e.getFirst().getText())!==
 g(d.getText()):!0):d=!1}if(d)return!1;for(g=0;g<a.length;g++)if(d=a[g]._getTableElement(),!d)return!1;return!0}function f(a){function c(a){a=a.find("td, th");var b=[],d;for(d=0;d<a.count();d++)b.push(a.getItem(d));return b}var b=[],d,g;for(g=0;g<a.length;g++)d=a[g]._getTableElement(),d.is&&d.is({td:1,th:1})?b.push(d):b=b.concat(c(d));return b}function e(a){a=f(a);var c="",b=[],d,g;for(g=0;g<a.length;g++)d&&!d.equals(a[g].getAscendant("tr"))?(c+=b.join("\t")+"\n",d=a[g].getAscendant("tr"),b=[]):0===
-g&&(d=a[g].getAscendant("tr")),b.push(a[g].getText());return c+=b.join("\t")}function a(a){var c=this.root.editor,b=c.getSelection(1);this.reset();q=!0;b.root.once("selectionchange",function(a){a.cancel()},null,null,0);b.selectRanges([a[0]]);b=this._.cache;b.ranges=new CKEDITOR.dom.rangeList(a);b.type=CKEDITOR.SELECTION_TEXT;b.selectedElement=a[0]._getTableElement();b.selectedText=e(a);b.nativeSel=null;this.isFake=1;this.rev=x++;c._.fakeSelection=this;q=!1;this.root.fire("selectionchange")}function m(){var a=
-this._.fakeSelection,c;if(a){c=this.getSelection(1);var d;if(!(d=!c)&&(d=!c.isHidden())){d=a;var g=c.getRanges(),e=d.getRanges(),f=g.length&&g[0]._getTableElement()&&g[0]._getTableElement().getAscendant("table",!0),n=e.length&&e[0]._getTableElement()&&e[0]._getTableElement().getAscendant("table",!0),m=1===g.length&&g[0]._getTableElement()&&g[0]._getTableElement().is("table"),k=1===e.length&&e[0]._getTableElement()&&e[0]._getTableElement().is("table");if(b(d.getSelectedElement()))d=!1;else{var l=1===
-g.length&&g[0].collapsed,e=h(g,!!CKEDITOR.env.webkit)&&h(e);f=f&&n?f.equals(n)||n.contains(f):!1;f&&(l||e)?(m&&!k&&d.selectRanges(g),d=!0):d=!1}d=!d}d&&(a.reset(),a=0)}if(!a&&(a=c||this.getSelection(1),!a||a.getType()==CKEDITOR.SELECTION_NONE))return;this.fire("selectionCheck",a);c=this.elementPath();c.compare(this._.selectionPreviousPath)||(d=this._.selectionPreviousPath&&this._.selectionPreviousPath.blockLimit.equals(c.blockLimit),!CKEDITOR.env.webkit&&!CKEDITOR.env.gecko||d||(this._.previousActive=
-this.document.getActive()),this._.selectionPreviousPath=c,this.fire("selectionChange",{selection:a,path:c}))}function k(){B=!0;v||(l.call(this),v=CKEDITOR.tools.setTimeout(l,200,this))}function l(){v=null;B&&(CKEDITOR.tools.setTimeout(m,0,this),B=!1)}function c(a){return D(a)||a.type==CKEDITOR.NODE_ELEMENT&&!a.is(CKEDITOR.dtd.$empty)?!0:!1}function d(a){function b(c,d){return c&&c.type!=CKEDITOR.NODE_TEXT?a.clone()["moveToElementEdit"+(d?"End":"Start")](c):!1}if(!(a.root instanceof CKEDITOR.editable))return!1;
-var d=a.startContainer,g=a.getPreviousNode(c,null,d),e=a.getNextNode(c,null,d);return b(g)||b(e,1)||!(g||e||d.type==CKEDITOR.NODE_ELEMENT&&d.isBlockBoundary()&&d.getBogus())?!0:!1}function g(a){n(a,!1);var c=a.getDocument().createText(u);a.setCustomData("cke-fillingChar",c);return c}function n(a,c){var b=a&&a.removeCustomData("cke-fillingChar");if(b){if(!1!==c){var d=a.getDocument().getSelection().getNative(),g=d&&"None"!=d.type&&d.getRangeAt(0),e=u.length;if(b.getLength()>e&&g&&g.intersectsNode(b.$)){var f=
-[{node:d.anchorNode,offset:d.anchorOffset},{node:d.focusNode,offset:d.focusOffset}];d.anchorNode==b.$&&d.anchorOffset>e&&(f[0].offset-=e);d.focusNode==b.$&&d.focusOffset>e&&(f[1].offset-=e)}}b.setText(y(b.getText(),1));f&&(b=a.getDocument().$,d=b.getSelection(),b=b.createRange(),b.setStart(f[0].node,f[0].offset),b.collapse(!0),d.removeAllRanges(),d.addRange(b),d.extend(f[1].node,f[1].offset))}}function y(a,c){return c?a.replace(z,function(a,c){return c?" ":""}):a.replace(u,"")}function w(a,c){var b=
+g&&(d=a[g].getAscendant("tr")),b.push(a[g].getText());return c+=b.join("\t")}function a(a){var c=this.root.editor,b=c.getSelection(1);this.reset();u=!0;b.root.once("selectionchange",function(a){a.cancel()},null,null,0);b.selectRanges([a[0]]);b=this._.cache;b.ranges=new CKEDITOR.dom.rangeList(a);b.type=CKEDITOR.SELECTION_TEXT;b.selectedElement=a[0]._getTableElement();b.selectedText=e(a);b.nativeSel=null;this.isFake=1;this.rev=x++;c._.fakeSelection=this;u=!1;this.root.fire("selectionchange")}function k(){var a=
+this._.fakeSelection,c;if(a){c=this.getSelection(1);var d;if(!(d=!c)&&(d=!c.isHidden())){d=a;var g=c.getRanges(),e=d.getRanges(),f=g.length&&g[0]._getTableElement()&&g[0]._getTableElement().getAscendant("table",!0),k=e.length&&e[0]._getTableElement()&&e[0]._getTableElement().getAscendant("table",!0),n=1===g.length&&g[0]._getTableElement()&&g[0]._getTableElement().is("table"),l=1===e.length&&e[0]._getTableElement()&&e[0]._getTableElement().is("table");if(b(d.getSelectedElement()))d=!1;else{var m=1===
+g.length&&g[0].collapsed,e=h(g,!!CKEDITOR.env.webkit)&&h(e);f=f&&k?f.equals(k)||k.contains(f):!1;f&&(m||e)?(n&&!l&&d.selectRanges(g),d=!0):d=!1}d=!d}d&&(a.reset(),a=0)}if(!a&&(a=c||this.getSelection(1),!a||a.getType()==CKEDITOR.SELECTION_NONE))return;this.fire("selectionCheck",a);c=this.elementPath();c.compare(this._.selectionPreviousPath)||(d=this._.selectionPreviousPath&&this._.selectionPreviousPath.blockLimit.equals(c.blockLimit),!CKEDITOR.env.webkit&&!CKEDITOR.env.gecko||d||(this._.previousActive=
+this.document.getActive()),this._.selectionPreviousPath=c,this.fire("selectionChange",{selection:a,path:c}))}function l(){B=!0;w||(m.call(this),w=CKEDITOR.tools.setTimeout(m,200,this))}function m(){w=null;B&&(CKEDITOR.tools.setTimeout(k,0,this),B=!1)}function c(a){return C(a)||a.type==CKEDITOR.NODE_ELEMENT&&!a.is(CKEDITOR.dtd.$empty)?!0:!1}function d(a){function b(c,d){return c&&c.type!=CKEDITOR.NODE_TEXT?a.clone()["moveToElementEdit"+(d?"End":"Start")](c):!1}if(!(a.root instanceof CKEDITOR.editable))return!1;
+var d=a.startContainer,g=a.getPreviousNode(c,null,d),e=a.getNextNode(c,null,d);return b(g)||b(e,1)||!(g||e||d.type==CKEDITOR.NODE_ELEMENT&&d.isBlockBoundary()&&d.getBogus())?!0:!1}function g(a){n(a,!1);var c=a.getDocument().createText(t);a.setCustomData("cke-fillingChar",c);return c}function n(a,c){var b=a&&a.removeCustomData("cke-fillingChar");if(b){if(!1!==c){var d=a.getDocument().getSelection().getNative(),g=d&&"None"!=d.type&&d.getRangeAt(0),e=t.length;if(b.getLength()>e&&g&&g.intersectsNode(b.$)){var f=
+[{node:d.anchorNode,offset:d.anchorOffset},{node:d.focusNode,offset:d.focusOffset}];d.anchorNode==b.$&&d.anchorOffset>e&&(f[0].offset-=e);d.focusNode==b.$&&d.focusOffset>e&&(f[1].offset-=e)}}b.setText(y(b.getText(),1));f&&(b=a.getDocument().$,d=b.getSelection(),b=b.createRange(),b.setStart(f[0].node,f[0].offset),b.collapse(!0),d.removeAllRanges(),d.addRange(b),d.extend(f[1].node,f[1].offset))}}function y(a,c){return c?a.replace(z,function(a,c){return c?" ":""}):a.replace(t,"")}function v(a,c){var b=
 c&&CKEDITOR.tools.htmlEncode(c)||"\x26nbsp;",b=CKEDITOR.dom.element.createFromHtml('\x3cdiv data-cke-hidden-sel\x3d"1" data-cke-temp\x3d"1" style\x3d"'+(CKEDITOR.env.ie&&14>CKEDITOR.env.version?"display:none":"position:fixed;top:0;left:-1000px;width:0;height:0;overflow:hidden;")+'"\x3e'+b+"\x3c/div\x3e",a.document);a.fire("lockSnapshot");a.editable().append(b);var d=a.getSelection(1),g=a.createRange(),e=d.root.on("selectionchange",function(a){a.cancel()},null,null,0);g.setStartAt(b,CKEDITOR.POSITION_AFTER_START);
 g.setEndAt(b,CKEDITOR.POSITION_BEFORE_END);d.selectRanges([g]);e.removeListener();a.fire("unlockSnapshot");a._.hiddenSelectionContainer=b}function p(a){var c={37:1,39:1,8:1,46:1};return function(b){var d=b.data.getKeystroke();if(c[d]){var g=a.getSelection(),e=g.getRanges()[0];g.isCollapsed()&&(e=e[38>d?"getPreviousEditableNode":"getNextEditableNode"]())&&e.type==CKEDITOR.NODE_ELEMENT&&"false"==e.getAttribute("contenteditable")&&(g=g.getStartElement(),!g.isBlockBoundary()||""!==(void 0===g.$.textContent?
-g.$.innerText:g.$.textContent)||8!==d&&46!==d||(g.remove(),a.fire("saveSnapshot")),a.getSelection().fake(e),b.data.preventDefault(),b.cancel())}}}function t(a){for(var c=0;c<a.length;c++){var b=a[c];b.getCommonAncestor().isReadOnly()&&a.splice(c,1);if(!b.collapsed){if(b.startContainer.isReadOnly())for(var d=b.startContainer,g;d&&!((g=d.type==CKEDITOR.NODE_ELEMENT)&&d.is("body")||!d.isReadOnly());)g&&"false"==d.getAttribute("contentEditable")&&b.setStartAfter(d),d=d.getParent();d=b.startContainer;
+g.$.innerText:g.$.textContent)||8!==d&&46!==d||(g.remove(),a.fire("saveSnapshot")),a.getSelection().fake(e),b.data.preventDefault(),b.cancel())}}}function q(a){for(var c=0;c<a.length;c++){var b=a[c];b.getCommonAncestor().isReadOnly()&&a.splice(c,1);if(!b.collapsed){if(b.startContainer.isReadOnly())for(var d=b.startContainer,g;d&&!((g=d.type==CKEDITOR.NODE_ELEMENT)&&d.is("body")||!d.isReadOnly());)g&&"false"==d.getAttribute("contentEditable")&&b.setStartAfter(d),d=d.getParent();d=b.startContainer;
 g=b.endContainer;var e=b.startOffset,f=b.endOffset,h=b.clone();d&&d.type==CKEDITOR.NODE_TEXT&&(e>=d.getLength()?h.setStartAfter(d):h.setStartBefore(d));g&&g.type==CKEDITOR.NODE_TEXT&&(f?h.setEndAfter(g):h.setEndBefore(g));d=new CKEDITOR.dom.walker(h);d.evaluator=function(d){if(d.type==CKEDITOR.NODE_ELEMENT&&d.isReadOnly()){var g=b.clone();b.setEndBefore(d);b.collapsed&&a.splice(c--,1);d.getPosition(h.endContainer)&CKEDITOR.POSITION_CONTAINS||(g.setStartAfter(d),g.collapsed||a.splice(c+1,0,g));return!0}return!1};
-d.next()}}return a}var r="function"!=typeof window.getSelection,x=1,u=CKEDITOR.tools.repeat("​",7),z=new RegExp(u+"( )?","g"),q,v,B,D=CKEDITOR.dom.walker.invisible(1),A=function(){function a(c){return function(a){var b=a.editor.createRange();b.moveToClosestEditablePosition(a.selected,c)&&a.editor.getSelection().selectRanges([b]);return!1}}function c(a){return function(c){var b=c.editor,d=b.createRange(),g;if(!b.readOnly)return(g=d.moveToClosestEditablePosition(c.selected,a))||(g=d.moveToClosestEditablePosition(c.selected,
-!a)),g&&b.getSelection().selectRanges([d]),b.fire("saveSnapshot"),c.selected.remove(),g||(d.moveToElementEditablePosition(b.editable()),b.getSelection().selectRanges([d])),b.fire("saveSnapshot"),!1}}var b=a(),d=a(1);return{37:b,38:b,39:d,40:d,8:c(),46:c(1)}}();CKEDITOR.on("instanceCreated",function(a){function c(){var a=b.getSelection();a&&a.removeAllRanges()}var b=a.editor;b.on("contentDom",function(){function a(){u=new CKEDITOR.dom.selection(b.getSelection());u.lock()}function c(){f.removeListener("mouseup",
-c);t.removeListener("mouseup",c);var a=CKEDITOR.document.$.selection,b=a.createRange();"None"!=a.type&&b.parentElement()&&b.parentElement().ownerDocument==e.$&&b.select()}function d(a){var c,b;c=(c=this.document.getActive())?"input"===c.getName()||"textarea"===c.getName():!1;c||(c=this.getSelection(1),(b=g(c))&&!b.equals(h)&&(c.selectElement(b),a.data.preventDefault()))}function g(a){a=a.getRanges()[0];return a?(a=a.startContainer.getAscendant(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("contenteditable")},
-!0))&&"false"===a.getAttribute("contenteditable")?a:null:null}var e=b.document,f=CKEDITOR.document,h=b.editable(),l=e.getBody(),t=e.getDocumentElement(),y=h.isInline(),q,u;CKEDITOR.env.gecko&&h.attachListener(h,"focus",function(a){a.removeListener();0!==q&&(a=b.getSelection().getNative())&&a.isCollapsed&&a.anchorNode==h.$&&(a=b.createRange(),a.moveToElementEditStart(h),a.select())},null,null,-2);h.attachListener(h,CKEDITOR.env.webkit||CKEDITOR.env.gecko?"focusin":"focus",function(){if(q&&(CKEDITOR.env.webkit||
-CKEDITOR.env.gecko)){q=b._.previousActive&&b._.previousActive.equals(e.getActive());var a=null!=b._.previousScrollTop&&b._.previousScrollTop!=h.$.scrollTop;CKEDITOR.env.webkit&&q&&a&&(h.$.scrollTop=b._.previousScrollTop)}b.unlockSelection(q);q=0},null,null,-1);h.attachListener(h,"mousedown",function(){q=0});if(CKEDITOR.env.ie||CKEDITOR.env.gecko||y)r?h.attachListener(h,"beforedeactivate",a,null,null,-1):h.attachListener(b,"selectionCheck",a,null,null,-1),h.attachListener(h,CKEDITOR.env.webkit||CKEDITOR.env.gecko?
-"focusout":"blur",function(){var a=u&&(u.isFake||2>u.getRanges().length);CKEDITOR.env.gecko&&!y&&a||(b.lockSelection(u),q=1)},null,null,-1),h.attachListener(h,"mousedown",function(){q=0});if(CKEDITOR.env.ie&&!y){var x;h.attachListener(h,"mousedown",function(a){2==a.data.$.button&&((a=b.document.getSelection())&&a.getType()!=CKEDITOR.SELECTION_NONE||(x=b.window.getScrollPosition()))});h.attachListener(h,"mouseup",function(a){2==a.data.$.button&&x&&(b.document.$.documentElement.scrollLeft=x.x,b.document.$.documentElement.scrollTop=
-x.y);x=null});if("BackCompat"!=e.$.compatMode){if(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat){var v,w;t.on("mousedown",function(a){function c(a){a=a.data.$;if(v){var b=l.$.createTextRange();try{b.moveToPoint(a.clientX,a.clientY)}catch(d){}v.setEndPoint(0>w.compareEndPoints("StartToStart",b)?"EndToEnd":"StartToStart",b);v.select()}}function b(){t.removeListener("mousemove",c);f.removeListener("mouseup",b);t.removeListener("mouseup",b);v.select()}a=a.data;if(a.getTarget().is("html")&&a.$.y<t.$.clientHeight&&
-a.$.x<t.$.clientWidth){v=l.$.createTextRange();try{v.moveToPoint(a.$.clientX,a.$.clientY)}catch(d){}w=v.duplicate();t.on("mousemove",c);f.on("mouseup",b);t.on("mouseup",b)}})}if(7<CKEDITOR.env.version&&11>CKEDITOR.env.version)t.on("mousedown",function(a){a.data.getTarget().is("html")&&(f.on("mouseup",c),t.on("mouseup",c))})}}h.attachListener(h,"selectionchange",m,b);h.attachListener(h,"keyup",k,b);h.attachListener(h,"touchstart",k,b);h.attachListener(h,"touchend",k,b);CKEDITOR.env.ie&&h.attachListener(h,
-"keydown",d,b);h.attachListener(h,CKEDITOR.env.webkit||CKEDITOR.env.gecko?"focusin":"focus",function(){b.forceNextSelectionCheck();b.selectionChange(1)});if(y&&(CKEDITOR.env.webkit||CKEDITOR.env.gecko)){var z;h.attachListener(h,"mousedown",function(){z=1});h.attachListener(e.getDocumentElement(),"mouseup",function(){z&&k.call(b);z=0})}else h.attachListener(CKEDITOR.env.ie?h:e.getDocumentElement(),"mouseup",k,b);CKEDITOR.env.webkit&&h.attachListener(e,"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:h.hasFocus&&
+d.next()}}return a}var r="function"!=typeof window.getSelection,x=1,t=CKEDITOR.tools.repeat("​",7),z=new RegExp(t+"( )?","g"),u,w,B,C=CKEDITOR.dom.walker.invisible(1),A=function(){function a(c){return function(a){var b=a.editor.createRange();b.moveToClosestEditablePosition(a.selected,c)&&a.editor.getSelection().selectRanges([b]);return!1}}function c(a){return function(c){var b=c.editor,d=b.createRange(),g;if(!b.readOnly)return(g=d.moveToClosestEditablePosition(c.selected,a))||(g=d.moveToClosestEditablePosition(c.selected,
+!a)),g&&b.getSelection().selectRanges([d]),b.fire("saveSnapshot"),c.selected.remove(),g||(d.moveToElementEditablePosition(b.editable()),b.getSelection().selectRanges([d])),b.fire("saveSnapshot"),!1}}var b=a(),d=a(1);return{37:b,38:b,39:d,40:d,8:c(),46:c(1)}}();CKEDITOR.on("instanceCreated",function(a){function c(){var a=b.getSelection();a&&a.removeAllRanges()}var b=a.editor;b.on("contentDom",function(){function a(){t=new CKEDITOR.dom.selection(b.getSelection());t.lock()}function c(){f.removeListener("mouseup",
+c);q.removeListener("mouseup",c);var a=CKEDITOR.document.$.selection,b=a.createRange();"None"!=a.type&&b.parentElement()&&b.parentElement().ownerDocument==e.$&&b.select()}function d(a){var c,b;c=(c=this.document.getActive())?"input"===c.getName()||"textarea"===c.getName():!1;c||(c=this.getSelection(1),(b=g(c))&&!b.equals(h)&&(c.selectElement(b),a.data.preventDefault()))}function g(a){a=a.getRanges()[0];return a?(a=a.startContainer.getAscendant(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("contenteditable")},
+!0))&&"false"===a.getAttribute("contenteditable")?a:null:null}var e=b.document,f=CKEDITOR.document,h=b.editable(),m=e.getBody(),q=e.getDocumentElement(),y=h.isInline(),u,t;CKEDITOR.env.gecko&&h.attachListener(h,"focus",function(a){a.removeListener();0!==u&&(a=b.getSelection().getNative())&&a.isCollapsed&&a.anchorNode==h.$&&(a=b.createRange(),a.moveToElementEditStart(h),a.select())},null,null,-2);h.attachListener(h,CKEDITOR.env.webkit||CKEDITOR.env.gecko?"focusin":"focus",function(){if(u&&(CKEDITOR.env.webkit||
+CKEDITOR.env.gecko)){u=b._.previousActive&&b._.previousActive.equals(e.getActive());var a=null!=b._.previousScrollTop&&b._.previousScrollTop!=h.$.scrollTop;CKEDITOR.env.webkit&&u&&a&&(h.$.scrollTop=b._.previousScrollTop)}b.unlockSelection(u);u=0},null,null,-1);h.attachListener(h,"mousedown",function(){u=0});if(CKEDITOR.env.ie||CKEDITOR.env.gecko||y)r?h.attachListener(h,"beforedeactivate",a,null,null,-1):h.attachListener(b,"selectionCheck",a,null,null,-1),h.attachListener(h,CKEDITOR.env.webkit||CKEDITOR.env.gecko?
+"focusout":"blur",function(){var a=t&&(t.isFake||2>t.getRanges().length);CKEDITOR.env.gecko&&!y&&a||(b.lockSelection(t),u=1)},null,null,-1),h.attachListener(h,"mousedown",function(){u=0});if(CKEDITOR.env.ie&&!y){var w;h.attachListener(h,"mousedown",function(a){2==a.data.$.button&&((a=b.document.getSelection())&&a.getType()!=CKEDITOR.SELECTION_NONE||(w=b.window.getScrollPosition()))});h.attachListener(h,"mouseup",function(a){2==a.data.$.button&&w&&(b.document.$.documentElement.scrollLeft=w.x,b.document.$.documentElement.scrollTop=
+w.y);w=null});if("BackCompat"!=e.$.compatMode){if(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat){var x,v;q.on("mousedown",function(a){function c(a){a=a.data.$;if(x){var b=m.$.createTextRange();try{b.moveToPoint(a.clientX,a.clientY)}catch(d){}x.setEndPoint(0>v.compareEndPoints("StartToStart",b)?"EndToEnd":"StartToStart",b);x.select()}}function b(){q.removeListener("mousemove",c);f.removeListener("mouseup",b);q.removeListener("mouseup",b);x.select()}a=a.data;if(a.getTarget().is("html")&&a.$.y<q.$.clientHeight&&
+a.$.x<q.$.clientWidth){x=m.$.createTextRange();try{x.moveToPoint(a.$.clientX,a.$.clientY)}catch(d){}v=x.duplicate();q.on("mousemove",c);f.on("mouseup",b);q.on("mouseup",b)}})}if(7<CKEDITOR.env.version&&11>CKEDITOR.env.version)q.on("mousedown",function(a){a.data.getTarget().is("html")&&(f.on("mouseup",c),q.on("mouseup",c))})}}h.attachListener(h,"selectionchange",k,b);h.attachListener(h,"keyup",l,b);h.attachListener(h,"touchstart",l,b);h.attachListener(h,"touchend",l,b);CKEDITOR.env.ie&&h.attachListener(h,
+"keydown",d,b);h.attachListener(h,CKEDITOR.env.webkit||CKEDITOR.env.gecko?"focusin":"focus",function(){b.forceNextSelectionCheck();b.selectionChange(1)});if(y&&(CKEDITOR.env.webkit||CKEDITOR.env.gecko)){var z;h.attachListener(h,"mousedown",function(){z=1});h.attachListener(e.getDocumentElement(),"mouseup",function(){z&&l.call(b);z=0})}else h.attachListener(CKEDITOR.env.ie?h:e.getDocumentElement(),"mouseup",l,b);CKEDITOR.env.webkit&&h.attachListener(e,"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:h.hasFocus&&
 n(h)}},null,null,-1);h.attachListener(h,"keydown",p(b),null,null,-1)});b.on("setData",function(){b.unlockSelection();CKEDITOR.env.webkit&&c()});b.on("contentDomUnload",function(){b.unlockSelection()});if(CKEDITOR.env.ie9Compat)b.on("beforeDestroy",c,null,null,9);b.on("dataReady",function(){delete b._.fakeSelection;delete b._.hiddenSelectionContainer;b.selectionChange(1)});b.on("loadSnapshot",function(){var a=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT),c=b.editable().getLast(a);c&&c.hasAttribute("data-cke-hidden-sel")&&
 (c.remove(),CKEDITOR.env.gecko&&(a=b.editable().getFirst(a))&&a.is("br")&&a.getAttribute("_moz_editor_bogus_node")&&a.remove())},null,null,100);b.on("key",function(a){if("wysiwyg"==b.mode){var c=b.getSelection();if(c.isFake){var d=A[a.data.keyCode];if(d)return d({editor:b,selected:c.getSelectedElement(),selection:c,keyEvent:a})}}})});if(CKEDITOR.env.webkit)CKEDITOR.on("instanceReady",function(a){var c=a.editor;c.on("selectionChange",function(){var a=c.editable(),b=a.getCustomData("cke-fillingChar");
-b&&(b.getCustomData("ready")?(n(a),a.editor.fire("selectionCheck")):b.setCustomData("ready",1))},null,null,-1);c.on("beforeSetMode",function(){n(c.editable())},null,null,-1);c.on("getSnapshot",function(a){a.data&&(a.data=y(a.data))},c,null,20);c.on("toDataFormat",function(a){a.data.dataValue=y(a.data.dataValue)},null,null,0)});CKEDITOR.editor.prototype.selectionChange=function(a){(a?m:k).call(this)};CKEDITOR.editor.prototype.getSelection=function(a){return!this._.savedSelection&&!this._.fakeSelection||
-a?(a=this.editable())&&"wysiwyg"==this.mode?new CKEDITOR.dom.selection(a):null:this._.savedSelection||this._.fakeSelection};CKEDITOR.editor.prototype.getSelectedRanges=function(a){var c=this.getSelection();return c&&c.getRanges(a)||[]};CKEDITOR.editor.prototype.lockSelection=function(a){a=a||this.getSelection(1);return a.getType()!=CKEDITOR.SELECTION_NONE?(!a.isLocked&&a.lock(),this._.savedSelection=a,!0):!1};CKEDITOR.editor.prototype.unlockSelection=function(a){var c=this._.savedSelection;return c?
-(c.unlock(a),delete this._.savedSelection,!0):!1};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;CKEDITOR.dom.selection=function(a){if(a instanceof CKEDITOR.dom.selection){var c=a;a=a.root}var b=a instanceof CKEDITOR.dom.element;this.rev=c?c.rev:x++;this.document=a instanceof CKEDITOR.dom.document?a:a.getDocument();this.root=b?a:this.document.getBody();this.isLocked=0;this._={cache:{}};if(c)return CKEDITOR.tools.extend(this._.cache,c._.cache),this.isFake=c.isFake,this.isLocked=c.isLocked,this;a=this.getNative();var d,g;if(a)if(a.getRangeAt)d=(g=a.rangeCount&&a.getRangeAt(0))&&new CKEDITOR.dom.node(g.commonAncestorContainer);
-else{try{g=a.createRange()}catch(e){}d=g&&CKEDITOR.dom.element.get(g.item&&g.item(0)||g.parentElement())}if(!d||d.type!=CKEDITOR.NODE_ELEMENT&&d.type!=CKEDITOR.NODE_TEXT||!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 E={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.tools.extend(CKEDITOR.dom.selection,{_removeFillingCharSequenceString:y,_createFillingCharSequenceNode:g,FILLING_CHAR_SEQUENCE:u});CKEDITOR.dom.selection.prototype={getNative:function(){return void 0!==this._.cache.nativeSel?this._.cache.nativeSel:this._.cache.nativeSel=r?this.document.$.selection:this.document.getWindow().$.getSelection()},getType:r?function(){var a=this._.cache;if(a.type)return a.type;var c=CKEDITOR.SELECTION_NONE;
-try{var b=this.getNative(),d=b.type;"Text"==d&&(c=CKEDITOR.SELECTION_TEXT);"Control"==d&&(c=CKEDITOR.SELECTION_ELEMENT);b.createRange().parentElement()&&(c=CKEDITOR.SELECTION_TEXT)}catch(g){}return a.type=c}:function(){var a=this._.cache;if(a.type)return a.type;var c=CKEDITOR.SELECTION_TEXT,b=this.getNative();if(!b||!b.rangeCount)c=CKEDITOR.SELECTION_NONE;else if(1==b.rangeCount){var b=b.getRangeAt(0),d=b.startContainer;d==b.endContainer&&1==d.nodeType&&1==b.endOffset-b.startOffset&&E[d.childNodes[b.startOffset].nodeName.toLowerCase()]&&
-(c=CKEDITOR.SELECTION_ELEMENT)}return a.type=c},getRanges:function(){var a=r?function(){function a(c){return(new CKEDITOR.dom.node(c)).getIndex()}var c=function(c,b){c=c.duplicate();c.collapse(b);var d=c.parentElement();if(!d.hasChildNodes())return{container:d,offset:0};for(var g=d.children,e,f,h=c.duplicate(),n=0,m=g.length-1,k=-1,l,r;n<=m;)if(k=Math.floor((n+m)/2),e=g[k],h.moveToElementText(e),l=h.compareEndPoints("StartToStart",c),0<l)m=k-1;else if(0>l)n=k+1;else return{container:d,offset:a(e)};
-if(-1==k||k==g.length-1&&0>l){h.moveToElementText(d);h.setEndPoint("StartToStart",c);h=h.text.replace(/(\r\n|\r)/g,"\n").length;g=d.childNodes;if(!h)return e=g[g.length-1],e.nodeType!=CKEDITOR.NODE_TEXT?{container:d,offset:g.length}:{container:e,offset:e.nodeValue.length};for(d=g.length;0<h&&0<d;)f=g[--d],f.nodeType==CKEDITOR.NODE_TEXT&&(r=f,h-=f.nodeValue.length);return{container:r,offset:-h}}h.collapse(0<l?!0:!1);h.setEndPoint(0<l?"StartToStart":"EndToStart",c);h=h.text.replace(/(\r\n|\r)/g,"\n").length;
-if(!h)return{container:d,offset:a(e)+(0<l?0:1)};for(;0<h;)try{f=e[0<l?"previousSibling":"nextSibling"],f.nodeType==CKEDITOR.NODE_TEXT&&(h-=f.nodeValue.length,r=f),e=f}catch(t){return{container:d,offset:a(e)}}return{container:r,offset:0<l?-h:r.nodeValue.length+h}};return function(){var a=this.getNative(),b=a&&a.createRange(),d=this.getType();if(!a)return[];if(d==CKEDITOR.SELECTION_TEXT)return a=new CKEDITOR.dom.range(this.root),d=c(b,!0),a.setStart(new CKEDITOR.dom.node(d.container),d.offset),d=c(b),
-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(),[a];if(d==CKEDITOR.SELECTION_ELEMENT){for(var d=[],g=0;g<b.length;g++){for(var e=b.item(g),f=e.parentNode,h=0,a=new CKEDITOR.dom.range(this.root);h<f.childNodes.length&&f.childNodes[h]!=e;h++);a.setStart(new CKEDITOR.dom.node(f),h);a.setEnd(new CKEDITOR.dom.node(f),h+1);d.push(a)}return d}return[]}}():function(){var a=
-[],c,b=this.getNative();if(!b)return a;for(var d=0;d<b.rangeCount;d++){var g=b.getRangeAt(d);c=new CKEDITOR.dom.range(this.root);c.setStart(new CKEDITOR.dom.node(g.startContainer),g.startOffset);c.setEnd(new CKEDITOR.dom.node(g.endContainer),g.endOffset);a.push(c)}return a};return function(c){var b=this._.cache,d=b.ranges;d||(b.ranges=d=new CKEDITOR.dom.rangeList(a.call(this)));return c?t(new CKEDITOR.dom.rangeList(d.slice())):d}}(),getStartElement:function(){var a=this._.cache;if(void 0!==a.startElement)return a.startElement;
-var c;switch(this.getType()){case CKEDITOR.SELECTION_ELEMENT:return this.getSelectedElement();case CKEDITOR.SELECTION_TEXT:var b=this.getRanges()[0];if(b){if(b.collapsed)c=b.startContainer,c.type!=CKEDITOR.NODE_ELEMENT&&(c=c.getParent());else{for(b.optimize();c=b.startContainer,b.startOffset==(c.getChildCount?c.getChildCount():c.getLength())&&!c.isBlockBoundary();)b.setStartAfter(c);c=b.startContainer;if(c.type!=CKEDITOR.NODE_ELEMENT)return c.getParent();if((c=c.getChild(b.startOffset))&&c.type==
-CKEDITOR.NODE_ELEMENT)for(b=c.getFirst();b&&b.type==CKEDITOR.NODE_ELEMENT;)c=b,b=b.getFirst();else c=b.startContainer}c=c.$}}return a.startElement=c?new CKEDITOR.dom.element(c):null},getSelectedElement:function(){var a=this._.cache;if(void 0!==a.selectedElement)return a.selectedElement;var c=this,b=CKEDITOR.tools.tryThese(function(){return c.getNative().createRange().item(0)},function(){for(var a=c.getRanges()[0].clone(),b,d,g=2;g&&!((b=a.getEnclosedNode())&&b.type==CKEDITOR.NODE_ELEMENT&&E[b.getName()]&&
-(d=b));g--)a.shrink(CKEDITOR.SHRINK_ELEMENT);return d&&d.$});return a.selectedElement=b?new CKEDITOR.dom.element(b):null},getSelectedText:function(){var a=this._.cache;if(void 0!==a.selectedText)return a.selectedText;var c=this.getNative(),c=r?"Control"==c.type?"":c.createRange().text:c.toString();return a.selectedText=c},lock:function(){this.getRanges();this.getStartElement();this.getSelectedElement();this.getSelectedText();this._.cache.nativeSel=null;this.isLocked=1},unlock:function(c){if(this.isLocked){if(c)var b=
-this.getSelectedElement(),d=this.getRanges(),g=this.isFake;this.isLocked=0;this.reset();c&&(c=b||d[0]&&d[0].getCommonAncestor())&&c.getAscendant("body",1)&&((c=this.root.editor)&&c.plugins.tableselection&&c.plugins.tableselection.isSupportedEnvironment(c)&&h(d)?a.call(this,d):g?this.fake(b):b&&2>d.length?this.selectElement(b):this.selectRanges(d))}},reset:function(){this._.cache={};this.isFake=0;var a=this.root.editor;if(a&&a._.fakeSelection)if(this.rev==a._.fakeSelection.rev){delete a._.fakeSelection;
-var c=a._.hiddenSelectionContainer;if(c){var b=a.checkDirty();a.fire("lockSnapshot");c.remove();a.fire("unlockSnapshot");!b&&a.resetDirty()}delete a._.hiddenSelectionContainer}else CKEDITOR.warn("selection-fake-reset");this.rev=x++},selectElement:function(a){var c=new CKEDITOR.dom.range(this.root);c.setStartBefore(a);c.setEndAfter(a);this.selectRanges([c])},selectRanges:function(c){var b=this.root.editor,e=b&&b._.hiddenSelectionContainer;this.reset();if(e)for(var e=this.root,f,m=0;m<c.length;++m)f=
-c[m],f.endContainer.equals(e)&&(f.endOffset=Math.min(f.endOffset,e.getChildCount()));if(c.length)if(this.isLocked){var k=CKEDITOR.document.getActive();this.unlock();this.selectRanges(c);this.lock();k&&!k.equals(this.root)&&k.focus()}else{var l;a:{var t,y;if(1==c.length&&!(y=c[0]).collapsed&&(l=y.getEnclosedNode())&&l.type==CKEDITOR.NODE_ELEMENT&&(y=y.clone(),y.shrink(CKEDITOR.SHRINK_ELEMENT,!0),(t=y.getEnclosedNode())&&t.type==CKEDITOR.NODE_ELEMENT&&(l=t),"false"==l.getAttribute("contenteditable")))break a;
-l=void 0}if(l)this.fake(l);else if(b&&b.plugins.tableselection&&b.plugins.tableselection.isSupportedEnvironment(b)&&h(c)&&!q&&!c[0]._getTableElement({table:1}).hasAttribute("data-cke-tableselection-ignored"))a.call(this,c);else{if(r){t=CKEDITOR.dom.walker.whitespaces(!0);l=/\ufeff|\u00a0/;y={table:1,tbody:1,tr:1};1<c.length&&(b=c[c.length-1],c[0].setEnd(b.endContainer,b.endOffset));b=c[0];c=b.collapsed;var u,x,v;if((e=b.getEnclosedNode())&&e.type==CKEDITOR.NODE_ELEMENT&&e.getName()in E&&(!e.is("a")||
-!e.getText()))try{v=e.$.createControlRange();v.addElement(e.$);v.select();return}catch(p){}if(b.startContainer.type==CKEDITOR.NODE_ELEMENT&&b.startContainer.getName()in y||b.endContainer.type==CKEDITOR.NODE_ELEMENT&&b.endContainer.getName()in y)b.shrink(CKEDITOR.NODE_ELEMENT,!0),c=b.collapsed;v=b.createBookmark();y=v.startNode;c||(k=v.endNode);v=b.document.$.body.createTextRange();v.moveToElementText(y.$);v.moveStart("character",1);k?(l=b.document.$.body.createTextRange(),l.moveToElementText(k.$),
-v.setEndPoint("EndToEnd",l),v.moveEnd("character",-1)):(u=y.getNext(t),x=y.hasAscendant("pre"),u=!(u&&u.getText&&u.getText().match(l))&&(x||!y.hasPrevious()||y.getPrevious().is&&y.getPrevious().is("br")),x=b.document.createElement("span"),x.setHtml("\x26#65279;"),x.insertBefore(y),u&&b.document.createText("").insertBefore(y));b.setStartBefore(y);y.remove();c?(u?(v.moveStart("character",-1),v.select(),b.document.$.selection.clear()):v.select(),b.moveToPosition(x,CKEDITOR.POSITION_BEFORE_START),x.remove()):
-(b.setEndBefore(k),k.remove(),v.select())}else{k=this.getNative();if(!k)return;this.removeAllRanges();for(v=0;v<c.length;v++){if(v<c.length-1&&(u=c[v],x=c[v+1],l=u.clone(),l.setStart(u.endContainer,u.endOffset),l.setEnd(x.startContainer,x.startOffset),!l.collapsed&&(l.shrink(CKEDITOR.NODE_ELEMENT,!0),b=l.getCommonAncestor(),l=l.getEnclosedNode(),b.isReadOnly()||l&&l.isReadOnly()))){x.setStart(u.startContainer,u.startOffset);c.splice(v--,1);continue}b=c[v];x=this.document.$.createRange();b.collapsed&&
-CKEDITOR.env.webkit&&d(b)&&(l=g(this.root),b.insertNode(l),(u=l.getNext())&&!l.getPrevious()&&u.type==CKEDITOR.NODE_ELEMENT&&"br"==u.getName()?(n(this.root),b.moveToPosition(u,CKEDITOR.POSITION_BEFORE_START)):b.moveToPosition(l,CKEDITOR.POSITION_AFTER_END));x.setStart(b.startContainer.$,b.startOffset);try{x.setEnd(b.endContainer.$,b.endOffset)}catch(w){if(0<=w.toString().indexOf("NS_ERROR_ILLEGAL_VALUE"))b.collapse(1),x.setEnd(b.endContainer.$,b.endOffset);else throw w;}k.addRange(x)}}this.reset();
-this.root.fire("selectionchange")}}},fake:function(a,c){var b=this.root.editor;void 0===c&&a.hasAttribute("aria-label")&&(c=a.getAttribute("aria-label"));this.reset();w(b,c);var d=this._.cache,g=new CKEDITOR.dom.range(this.root);g.setStartBefore(a);g.setEndAfter(a);d.ranges=new CKEDITOR.dom.rangeList(g);d.selectedElement=d.startElement=a;d.type=CKEDITOR.SELECTION_ELEMENT;d.selectedText=d.nativeSel=null;this.isFake=1;this.rev=x++;b._.fakeSelection=this;this.root.fire("selectionchange")},isHidden:function(){var a=
-this.getCommonAncestor();a&&a.type==CKEDITOR.NODE_TEXT&&(a=a.getParent());return!(!a||!a.data("cke-hidden-sel"))},isInTable:function(a){return h(this.getRanges(),a)},isCollapsed:function(){var a=this.getRanges();return 1===a.length&&a[0].collapsed},createBookmarks:function(a){a=this.getRanges().createBookmarks(a);this.isFake&&(a.isFake=1);return a},createBookmarks2:function(a){a=this.getRanges().createBookmarks2(a);this.isFake&&(a.isFake=1);return a},selectBookmarks:function(a){for(var c=[],b,d=0;d<
-a.length;d++){var g=new CKEDITOR.dom.range(this.root);g.moveToBookmark(a[d]);c.push(g)}a.isFake&&(b=h(c)?c[0]._getTableElement():c[0].getEnclosedNode(),b&&b.type==CKEDITOR.NODE_ELEMENT||(CKEDITOR.warn("selection-not-fake"),a.isFake=0));a.isFake&&!h(c)?this.fake(b):this.selectRanges(c);return this},getCommonAncestor:function(){var a=this.getRanges();return a.length?a[0].startContainer.getCommonAncestor(a[a.length-1].endContainer):null},scrollIntoView:function(){this.getType()!=CKEDITOR.SELECTION_NONE&&
-this.getRanges()[0].scrollIntoView()},removeAllRanges:function(){if(this.getType()!=CKEDITOR.SELECTION_NONE){var a=this.getNative();try{a&&a[r?"empty":"removeAllRanges"]()}catch(c){}this.reset()}}}}(),"use strict",CKEDITOR.STYLE_BLOCK=1,CKEDITOR.STYLE_INLINE=2,CKEDITOR.STYLE_OBJECT=3,function(){function b(a,c){for(var b,d;(a=a.getParent())&&!a.equals(c);)if(a.getAttribute("data-nostyle"))b=a;else if(!d){var g=a.getAttribute("contentEditable");"false"==g?b=a:"true"==g&&(d=1)}return b}function h(a,
-c,b,d){return(a.getPosition(c)|d)==d&&(!b.childRule||b.childRule(a))}function f(c){var d=c.document;if(c.collapsed)d=x(this,d),c.insertNode(d),c.moveToPosition(d,CKEDITOR.POSITION_BEFORE_END);else{var g=this.element,e=this._.definition,n,k=e.ignoreReadonly,m=k||e.includeReadonly;null==m&&(m=c.root.getCustomData("cke_includeReadonly"));var l=CKEDITOR.dtd[g];l||(n=!0,l=CKEDITOR.dtd.span);c.enlarge(CKEDITOR.ENLARGE_INLINE,1);c.trim();var r=c.createBookmark(),t=r.startNode,y=r.endNode,q=t,u;if(!k){var v=
-c.getCommonAncestor(),k=b(t,v),v=b(y,v);k&&(q=k.getNextSourceNode(!0));v&&(y=v)}for(q.getPosition(y)==CKEDITOR.POSITION_FOLLOWING&&(q=0);q;){k=!1;if(q.equals(y))q=null,k=!0;else{var w=q.type==CKEDITOR.NODE_ELEMENT?q.getName():null,v=w&&"false"==q.getAttribute("contentEditable"),z=w&&-1!==CKEDITOR.tools.array.indexOf(CKEDITOR.style.unstylableElements,w),z=w&&(q.getAttribute("data-nostyle")||z);if(w&&q.data("cke-bookmark")||q.type===CKEDITOR.NODE_COMMENT){q=q.getNextSourceNode(!0);continue}if(v&&m&&
-CKEDITOR.dtd.$block[w])for(var B=q,A=a(B),E=void 0,N=A.length,R=0,B=N&&new CKEDITOR.dom.range(B.getDocument());R<N;++R){var E=A[R],ea=CKEDITOR.filter.instances[E.data("cke-filter")];if(ea?ea.check(this):1)B.selectNodeContents(E),f.call(this,B)}A=w?!l[w]||z?0:v&&!m?0:h(q,y,e,O):1;if(A)if(E=q.getParent(),A=e,N=g,R=n,!E||!(E.getDtd()||CKEDITOR.dtd.span)[N]&&!R||A.parentRule&&!A.parentRule(E))k=!0;else{if(u||w&&CKEDITOR.dtd.$removeEmpty[w]&&(q.getPosition(y)|O)!=O||(u=c.clone(),u.setStartBefore(q)),w=
-q.type,w==CKEDITOR.NODE_TEXT||v||w==CKEDITOR.NODE_ELEMENT&&!q.getChildCount()){for(var w=q,ia;(k=!w.getNext(L))&&(ia=w.getParent(),l[ia.getName()])&&h(ia,t,e,I);)w=ia;u.setEndAfter(w)}}else k=!0;q=q.getNextSourceNode(z||v)}if(k&&u&&!u.collapsed){for(var k=x(this,d),v=k.hasAttributes(),z=u.getCommonAncestor(),w={},A={},E={},N={},ha,fa,D;k&&z;){if(z.getName()==g){for(ha in e.attributes)!N[ha]&&(D=z.getAttribute(fa))&&(k.getAttribute(ha)==D?A[ha]=1:N[ha]=1);for(fa in e.styles)!E[fa]&&(D=z.getStyle(fa))&&
-(k.getStyle(fa)==D?w[fa]=1:E[fa]=1)}z=z.getParent()}for(ha in A)k.removeAttribute(ha);for(fa in w)k.removeStyle(fa);v&&!k.hasAttributes()&&(k=null);k?(u.extractContents().appendTo(k),u.insertNode(k),p.call(this,k),k.mergeSiblings(),CKEDITOR.env.ie||k.$.normalize()):(k=new CKEDITOR.dom.element("span"),u.extractContents().appendTo(k),u.insertNode(k),p.call(this,k),k.remove(!0));u=null}}c.moveToBookmark(r);c.shrink(CKEDITOR.SHRINK_TEXT);c.shrink(CKEDITOR.NODE_ELEMENT,!0)}}function e(a){function c(){for(var a=
-new CKEDITOR.dom.elementPath(d.getParent()),b=new CKEDITOR.dom.elementPath(m.getParent()),g=null,e=null,f=0;f<a.elements.length;f++){var h=a.elements[f];if(h==a.block||h==a.blockLimit)break;l.checkElementRemovable(h,!0)&&(g=h)}for(f=0;f<b.elements.length;f++){h=b.elements[f];if(h==b.block||h==b.blockLimit)break;l.checkElementRemovable(h,!0)&&(e=h)}e&&m.breakParent(e);g&&d.breakParent(g)}a.enlarge(CKEDITOR.ENLARGE_INLINE,1);var b=a.createBookmark(),d=b.startNode,g=this._.definition.alwaysRemoveElement;
-if(a.collapsed){for(var e=new CKEDITOR.dom.elementPath(d.getParent(),a.root),f,h=0,n;h<e.elements.length&&(n=e.elements[h])&&n!=e.block&&n!=e.blockLimit;h++)if(this.checkElementRemovable(n)){var k;!g&&a.collapsed&&(a.checkBoundaryOfElement(n,CKEDITOR.END)||(k=a.checkBoundaryOfElement(n,CKEDITOR.START)))?(f=n,f.match=k?"start":"end"):(n.mergeSiblings(),n.is(this.element)?w.call(this,n):t(n,q(this)[n.getName()]))}if(f){g=d;for(h=0;;h++){n=e.elements[h];if(n.equals(f))break;else if(n.match)continue;
-else n=n.clone();n.append(g);g=n}g["start"==f.match?"insertBefore":"insertAfter"](f)}}else{var m=b.endNode,l=this;c();for(e=d;!e.equals(m);)f=e.getNextSourceNode(),e.type==CKEDITOR.NODE_ELEMENT&&this.checkElementRemovable(e)&&(e.getName()==this.element?w.call(this,e):t(e,q(this)[e.getName()]),f.type==CKEDITOR.NODE_ELEMENT&&f.contains(d)&&(c(),f=d.getNext())),e=f}a.moveToBookmark(b);a.shrink(CKEDITOR.NODE_ELEMENT,!0)}function a(a){var c=[];a.forEach(function(a){if("true"==a.getAttribute("contenteditable"))return c.push(a),
-!1},CKEDITOR.NODE_ELEMENT,!0);return c}function m(a){var c=a.getEnclosedNode()||a.getCommonAncestor(!1,!0);(a=(new CKEDITOR.dom.elementPath(c,a.root)).contains(this.element,1))&&!a.isReadOnly()&&u(a,this)}function k(a){var c=a.getCommonAncestor(!0,!0);if(a=(new CKEDITOR.dom.elementPath(c,a.root)).contains(this.element,1)){var c=this._.definition,b=c.attributes;if(b)for(var d in b)a.removeAttribute(d,b[d]);if(c.styles)for(var g in c.styles)c.styles.hasOwnProperty(g)&&a.removeStyle(g)}}function l(a){var c=
-a.createBookmark(!0),b=a.createIterator();b.enforceRealBlocks=!0;this._.enterMode&&(b.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR);for(var g,e=a.document,f;g=b.getNextParagraph();)!g.isReadOnly()&&(b.activeFilter?b.activeFilter.check(this):1)&&(f=x(this,e,g),d(g,f));a.moveToBookmark(c)}function c(a){var c=a.createBookmark(1),b=a.createIterator();b.enforceRealBlocks=!0;b.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR;for(var g,e;g=b.getNextParagraph();)this.checkElementRemovable(g)&&(g.is("pre")?
-((e=this._.enterMode==CKEDITOR.ENTER_BR?null:a.document.createElement(this._.enterMode==CKEDITOR.ENTER_P?"p":"div"))&&g.copyAttributes(e),d(g,e)):w.call(this,g));a.moveToBookmark(c)}function d(a,c){var b=!c;b&&(c=a.getDocument().createElement("div"),a.copyAttributes(c));var d=c&&c.is("pre"),e=a.is("pre"),f=!d&&e;if(d&&!e){e=c;(f=a.getBogus())&&f.remove();f=a.getHtml();f=n(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 h=a.getDocument().createElement("div");h.append(e);e.$.outerHTML="\x3cpre\x3e"+f+"\x3c/pre\x3e";e.copyAttributes(h.getFirst());e=h.getFirst().remove()}else e.setHtml(f);c=e}else f?c=y(b?[a.getHtml()]:g(a),c):a.moveChildren(c);c.replace(a);if(d){var b=c,k;(k=b.getPrevious(C))&&k.type==CKEDITOR.NODE_ELEMENT&&k.is("pre")&&(d=n(k.getHtml(),/\n$/,"")+"\n\n"+n(b.getHtml(),/^\n/,""),CKEDITOR.env.ie?b.$.outerHTML="\x3cpre\x3e"+d+"\x3c/pre\x3e":
+b&&(b.getCustomData("ready")?(n(a),a.editor.fire("selectionCheck")):b.setCustomData("ready",1))},null,null,-1);c.on("beforeSetMode",function(){n(c.editable())},null,null,-1);c.on("getSnapshot",function(a){a.data&&(a.data=y(a.data))},c,null,20);c.on("toDataFormat",function(a){a.data.dataValue=y(a.data.dataValue)},null,null,0)});CKEDITOR.editor.prototype.selectionChange=function(a){(a?k:l).call(this)};CKEDITOR.editor.prototype.getSelection=function(a){return!this._.savedSelection&&!this._.fakeSelection||
+a?(a=this.editable())&&"wysiwyg"==this.mode&&"recreating"!==this.status?new CKEDITOR.dom.selection(a):null:this._.savedSelection||this._.fakeSelection};CKEDITOR.editor.prototype.getSelectedRanges=function(a){var c=this.getSelection();return c&&c.getRanges(a)||[]};CKEDITOR.editor.prototype.lockSelection=function(a){a=a||this.getSelection(1);return a.getType()!=CKEDITOR.SELECTION_NONE?(!a.isLocked&&a.lock(),this._.savedSelection=a,!0):!1};CKEDITOR.editor.prototype.unlockSelection=function(a){var c=
+this._.savedSelection;return c?(c.unlock(a),delete this._.savedSelection,!0):!1};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;CKEDITOR.dom.selection=function(a){if(a instanceof CKEDITOR.dom.selection){var c=a;a=a.root}var b=a instanceof CKEDITOR.dom.element;this.rev=c?c.rev:x++;this.document=a instanceof CKEDITOR.dom.document?a:a.getDocument();this.root=b?a:this.document.getBody();this.isLocked=0;this._={cache:{}};if(c)return CKEDITOR.tools.extend(this._.cache,c._.cache),this.isFake=c.isFake,this.isLocked=c.isLocked,this;a=this.getNative();var d,g;if(a)if(a.getRangeAt)d=(g=a.rangeCount&&a.getRangeAt(0))&&
+new CKEDITOR.dom.node(g.commonAncestorContainer);else{try{g=a.createRange()}catch(e){}d=g&&CKEDITOR.dom.element.get(g.item&&g.item(0)||g.parentElement())}if(!d||d.type!=CKEDITOR.NODE_ELEMENT&&d.type!=CKEDITOR.NODE_TEXT||!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 E={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.tools.extend(CKEDITOR.dom.selection,{_removeFillingCharSequenceString:y,_createFillingCharSequenceNode:g,FILLING_CHAR_SEQUENCE:t});CKEDITOR.dom.selection.prototype={getNative:function(){return void 0!==this._.cache.nativeSel?this._.cache.nativeSel:this._.cache.nativeSel=r?this.document.$.selection:this.document.getWindow().$.getSelection()},getType:r?function(){var a=this._.cache;if(a.type)return a.type;
+var c=CKEDITOR.SELECTION_NONE;try{var b=this.getNative(),d=b.type;"Text"==d&&(c=CKEDITOR.SELECTION_TEXT);"Control"==d&&(c=CKEDITOR.SELECTION_ELEMENT);b.createRange().parentElement()&&(c=CKEDITOR.SELECTION_TEXT)}catch(g){}return a.type=c}:function(){var a=this._.cache;if(a.type)return a.type;var c=CKEDITOR.SELECTION_TEXT,b=this.getNative();if(!b||!b.rangeCount)c=CKEDITOR.SELECTION_NONE;else if(1==b.rangeCount){var b=b.getRangeAt(0),d=b.startContainer;d==b.endContainer&&1==d.nodeType&&1==b.endOffset-
+b.startOffset&&E[d.childNodes[b.startOffset].nodeName.toLowerCase()]&&(c=CKEDITOR.SELECTION_ELEMENT)}return a.type=c},getRanges:function(){var a=r?function(){function a(c){return(new CKEDITOR.dom.node(c)).getIndex()}var c=function(c,b){c=c.duplicate();c.collapse(b);var d=c.parentElement();if(!d.hasChildNodes())return{container:d,offset:0};for(var g=d.children,e,f,h=c.duplicate(),k=0,n=g.length-1,l=-1,m,q;k<=n;)if(l=Math.floor((k+n)/2),e=g[l],h.moveToElementText(e),m=h.compareEndPoints("StartToStart",
+c),0<m)n=l-1;else if(0>m)k=l+1;else return{container:d,offset:a(e)};if(-1==l||l==g.length-1&&0>m){h.moveToElementText(d);h.setEndPoint("StartToStart",c);h=h.text.replace(/(\r\n|\r)/g,"\n").length;g=d.childNodes;if(!h)return e=g[g.length-1],e.nodeType!=CKEDITOR.NODE_TEXT?{container:d,offset:g.length}:{container:e,offset:e.nodeValue.length};for(d=g.length;0<h&&0<d;)f=g[--d],f.nodeType==CKEDITOR.NODE_TEXT&&(q=f,h-=f.nodeValue.length);return{container:q,offset:-h}}h.collapse(0<m?!0:!1);h.setEndPoint(0<
+m?"StartToStart":"EndToStart",c);h=h.text.replace(/(\r\n|\r)/g,"\n").length;if(!h)return{container:d,offset:a(e)+(0<m?0:1)};for(;0<h;)try{f=e[0<m?"previousSibling":"nextSibling"],f.nodeType==CKEDITOR.NODE_TEXT&&(h-=f.nodeValue.length,q=f),e=f}catch(r){return{container:d,offset:a(e)}}return{container:q,offset:0<m?-h:q.nodeValue.length+h}};return function(){var a=this.getNative(),b=a&&a.createRange(),d=this.getType();if(!a)return[];if(d==CKEDITOR.SELECTION_TEXT)return a=new CKEDITOR.dom.range(this.root),
+d=c(b,!0),a.setStart(new CKEDITOR.dom.node(d.container),d.offset),d=c(b),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(),[a];if(d==CKEDITOR.SELECTION_ELEMENT){for(var d=[],g=0;g<b.length;g++){for(var e=b.item(g),f=e.parentNode,h=0,a=new CKEDITOR.dom.range(this.root);h<f.childNodes.length&&f.childNodes[h]!=e;h++);a.setStart(new CKEDITOR.dom.node(f),h);a.setEnd(new CKEDITOR.dom.node(f),
+h+1);d.push(a)}return d}return[]}}():function(){var a=[],c,b=this.getNative();if(!b)return a;for(var d=0;d<b.rangeCount;d++){var g=b.getRangeAt(d);c=new CKEDITOR.dom.range(this.root);c.setStart(new CKEDITOR.dom.node(g.startContainer),g.startOffset);c.setEnd(new CKEDITOR.dom.node(g.endContainer),g.endOffset);a.push(c)}return a};return function(c){var b=this._.cache,d=b.ranges;d||(b.ranges=d=new CKEDITOR.dom.rangeList(a.call(this)));return c?q(new CKEDITOR.dom.rangeList(d.slice())):d}}(),getStartElement:function(){var a=
+this._.cache;if(void 0!==a.startElement)return a.startElement;var c;switch(this.getType()){case CKEDITOR.SELECTION_ELEMENT:return this.getSelectedElement();case CKEDITOR.SELECTION_TEXT:var b=this.getRanges()[0];if(b){if(b.collapsed)c=b.startContainer,c.type!=CKEDITOR.NODE_ELEMENT&&(c=c.getParent());else{for(b.optimize();c=b.startContainer,b.startOffset==(c.getChildCount?c.getChildCount():c.getLength())&&!c.isBlockBoundary();)b.setStartAfter(c);c=b.startContainer;if(c.type!=CKEDITOR.NODE_ELEMENT)return c.getParent();
+if((c=c.getChild(b.startOffset))&&c.type==CKEDITOR.NODE_ELEMENT)for(b=c.getFirst();b&&b.type==CKEDITOR.NODE_ELEMENT;)c=b,b=b.getFirst();else c=b.startContainer}c=c.$}}return a.startElement=c?new CKEDITOR.dom.element(c):null},getSelectedElement:function(){var a=this._.cache;if(void 0!==a.selectedElement)return a.selectedElement;var c=this,b=CKEDITOR.tools.tryThese(function(){return c.getNative().createRange().item(0)},function(){for(var a=c.getRanges()[0].clone(),b,d,g=2;g&&!((b=a.getEnclosedNode())&&
+b.type==CKEDITOR.NODE_ELEMENT&&E[b.getName()]&&(d=b));g--)a.shrink(CKEDITOR.SHRINK_ELEMENT);return d&&d.$});return a.selectedElement=b?new CKEDITOR.dom.element(b):null},getSelectedText:function(){var a=this._.cache;if(void 0!==a.selectedText)return a.selectedText;var c=this.getNative(),c=r?"Control"==c.type?"":c.createRange().text:c.toString();return a.selectedText=c},lock:function(){this.getRanges();this.getStartElement();this.getSelectedElement();this.getSelectedText();this._.cache.nativeSel=null;
+this.isLocked=1},unlock:function(c){if(this.isLocked){if(c)var b=this.getSelectedElement(),d=this.getRanges(),g=this.isFake;this.isLocked=0;this.reset();c&&(c=b||d[0]&&d[0].getCommonAncestor())&&c.getAscendant("body",1)&&((c=this.root.editor)&&c.plugins.tableselection&&c.plugins.tableselection.isSupportedEnvironment(c)&&h(d)?a.call(this,d):g?this.fake(b):b&&2>d.length?this.selectElement(b):this.selectRanges(d))}},reset:function(){this._.cache={};this.isFake=0;var a=this.root.editor;if(a&&a._.fakeSelection)if(this.rev==
+a._.fakeSelection.rev){delete a._.fakeSelection;var c=a._.hiddenSelectionContainer;if(c){var b=a.checkDirty();a.fire("lockSnapshot");c.remove();a.fire("unlockSnapshot");!b&&a.resetDirty()}delete a._.hiddenSelectionContainer}else CKEDITOR.warn("selection-fake-reset");this.rev=x++},selectElement:function(a){var c=new CKEDITOR.dom.range(this.root);c.setStartBefore(a);c.setEndAfter(a);this.selectRanges([c])},selectRanges:function(c){var b=this.root.editor,e=b&&b._.hiddenSelectionContainer;this.reset();
+if(e)for(var e=this.root,f,k=0;k<c.length;++k)f=c[k],f.endContainer.equals(e)&&(f.endOffset=Math.min(f.endOffset,e.getChildCount()));if(c.length)if(this.isLocked){var l=CKEDITOR.document.getActive();this.unlock();this.selectRanges(c);this.lock();l&&!l.equals(this.root)&&l.focus()}else{var m;a:{var q,y;if(1==c.length&&!(y=c[0]).collapsed&&(m=y.getEnclosedNode())&&m.type==CKEDITOR.NODE_ELEMENT&&(y=y.clone(),y.shrink(CKEDITOR.SHRINK_ELEMENT,!0),(q=y.getEnclosedNode())&&q.type==CKEDITOR.NODE_ELEMENT&&
+(m=q),"false"==m.getAttribute("contenteditable")))break a;m=void 0}if(m)this.fake(m);else if(b&&b.plugins.tableselection&&b.plugins.tableselection.isSupportedEnvironment(b)&&h(c)&&!u&&!c[0]._getTableElement({table:1}).hasAttribute("data-cke-tableselection-ignored"))a.call(this,c);else{if(r){q=CKEDITOR.dom.walker.whitespaces(!0);m=/\ufeff|\u00a0/;y={table:1,tbody:1,tr:1};1<c.length&&(b=c[c.length-1],c[0].setEnd(b.endContainer,b.endOffset));b=c[0];c=b.collapsed;var t,w,p;if((e=b.getEnclosedNode())&&
+e.type==CKEDITOR.NODE_ELEMENT&&e.getName()in E&&(!e.is("a")||!e.getText()))try{p=e.$.createControlRange();p.addElement(e.$);p.select();return}catch(x){}if(b.startContainer.type==CKEDITOR.NODE_ELEMENT&&b.startContainer.getName()in y||b.endContainer.type==CKEDITOR.NODE_ELEMENT&&b.endContainer.getName()in y)b.shrink(CKEDITOR.NODE_ELEMENT,!0),c=b.collapsed;p=b.createBookmark();y=p.startNode;c||(l=p.endNode);p=b.document.$.body.createTextRange();p.moveToElementText(y.$);p.moveStart("character",1);l?(m=
+b.document.$.body.createTextRange(),m.moveToElementText(l.$),p.setEndPoint("EndToEnd",m),p.moveEnd("character",-1)):(t=y.getNext(q),w=y.hasAscendant("pre"),t=!(t&&t.getText&&t.getText().match(m))&&(w||!y.hasPrevious()||y.getPrevious().is&&y.getPrevious().is("br")),w=b.document.createElement("span"),w.setHtml("\x26#65279;"),w.insertBefore(y),t&&b.document.createText("").insertBefore(y));b.setStartBefore(y);y.remove();c?(t?(p.moveStart("character",-1),p.select(),b.document.$.selection.clear()):p.select(),
+b.moveToPosition(w,CKEDITOR.POSITION_BEFORE_START),w.remove()):(b.setEndBefore(l),l.remove(),p.select())}else{l=this.getNative();if(!l)return;this.removeAllRanges();for(p=0;p<c.length;p++){if(p<c.length-1&&(t=c[p],w=c[p+1],m=t.clone(),m.setStart(t.endContainer,t.endOffset),m.setEnd(w.startContainer,w.startOffset),!m.collapsed&&(m.shrink(CKEDITOR.NODE_ELEMENT,!0),b=m.getCommonAncestor(),m=m.getEnclosedNode(),b.isReadOnly()||m&&m.isReadOnly()))){w.setStart(t.startContainer,t.startOffset);c.splice(p--,
+1);continue}b=c[p];w=this.document.$.createRange();b.collapsed&&CKEDITOR.env.webkit&&d(b)&&(m=g(this.root),b.insertNode(m),(t=m.getNext())&&!m.getPrevious()&&t.type==CKEDITOR.NODE_ELEMENT&&"br"==t.getName()?(n(this.root),b.moveToPosition(t,CKEDITOR.POSITION_BEFORE_START)):b.moveToPosition(m,CKEDITOR.POSITION_AFTER_END));w.setStart(b.startContainer.$,b.startOffset);try{w.setEnd(b.endContainer.$,b.endOffset)}catch(v){if(0<=v.toString().indexOf("NS_ERROR_ILLEGAL_VALUE"))b.collapse(1),w.setEnd(b.endContainer.$,
+b.endOffset);else throw v;}l.addRange(w)}}this.reset();this.root.fire("selectionchange")}}},fake:function(a,c){var b=this.root.editor;void 0===c&&a.hasAttribute("aria-label")&&(c=a.getAttribute("aria-label"));this.reset();v(b,c);var d=this._.cache,g=new CKEDITOR.dom.range(this.root);g.setStartBefore(a);g.setEndAfter(a);d.ranges=new CKEDITOR.dom.rangeList(g);d.selectedElement=d.startElement=a;d.type=CKEDITOR.SELECTION_ELEMENT;d.selectedText=d.nativeSel=null;this.isFake=1;this.rev=x++;b._.fakeSelection=
+this;this.root.fire("selectionchange")},isHidden:function(){var a=this.getCommonAncestor();a&&a.type==CKEDITOR.NODE_TEXT&&(a=a.getParent());return!(!a||!a.data("cke-hidden-sel"))},isInTable:function(a){return h(this.getRanges(),a)},isCollapsed:function(){var a=this.getRanges();return 1===a.length&&a[0].collapsed},createBookmarks:function(a){a=this.getRanges().createBookmarks(a);this.isFake&&(a.isFake=1);return a},createBookmarks2:function(a){a=this.getRanges().createBookmarks2(a);this.isFake&&(a.isFake=
+1);return a},selectBookmarks:function(a){for(var c=[],b,d=0;d<a.length;d++){var g=new CKEDITOR.dom.range(this.root);g.moveToBookmark(a[d]);c.push(g)}a.isFake&&(b=h(c)?c[0]._getTableElement():c[0].getEnclosedNode(),b&&b.type==CKEDITOR.NODE_ELEMENT||(CKEDITOR.warn("selection-not-fake"),a.isFake=0));a.isFake&&!h(c)?this.fake(b):this.selectRanges(c);return this},getCommonAncestor:function(){var a=this.getRanges();return a.length?a[0].startContainer.getCommonAncestor(a[a.length-1].endContainer):null},
+scrollIntoView:function(){this.getType()!=CKEDITOR.SELECTION_NONE&&this.getRanges()[0].scrollIntoView()},removeAllRanges:function(){if(this.getType()!=CKEDITOR.SELECTION_NONE){var a=this.getNative();try{a&&a[r?"empty":"removeAllRanges"]()}catch(c){}this.reset()}}}}(),"use strict",CKEDITOR.STYLE_BLOCK=1,CKEDITOR.STYLE_INLINE=2,CKEDITOR.STYLE_OBJECT=3,function(){function b(a,c){for(var b,d;(a=a.getParent())&&!a.equals(c);)if(a.getAttribute("data-nostyle"))b=a;else if(!d){var g=a.getAttribute("contentEditable");
+"false"==g?b=a:"true"==g&&(d=1)}return b}function h(a,c,b,d){return(a.getPosition(c)|d)==d&&(!b.childRule||b.childRule(a))}function f(c){var d=c.document;if(c.collapsed)d=x(this,d),c.insertNode(d),c.moveToPosition(d,CKEDITOR.POSITION_BEFORE_END);else{var g=this.element,e=this._.definition,k,n=e.ignoreReadonly,l=n||e.includeReadonly;null==l&&(l=c.root.getCustomData("cke_includeReadonly"));var m=CKEDITOR.dtd[g];m||(k=!0,m=CKEDITOR.dtd.span);c.enlarge(CKEDITOR.ENLARGE_INLINE,1);c.trim();var q=c.createBookmark(),
+r=q.startNode,y=q.endNode,t=r,u;if(!n){var w=c.getCommonAncestor(),n=b(r,w),w=b(y,w);n&&(t=n.getNextSourceNode(!0));w&&(y=w)}for(t.getPosition(y)==CKEDITOR.POSITION_FOLLOWING&&(t=0);t;){n=!1;if(t.equals(y))t=null,n=!0;else{var v=t.type==CKEDITOR.NODE_ELEMENT?t.getName():null,w=v&&"false"==t.getAttribute("contentEditable"),z=v&&-1!==CKEDITOR.tools.array.indexOf(CKEDITOR.style.unstylableElements,v),z=v&&(t.getAttribute("data-nostyle")||z);if(v&&t.data("cke-bookmark")||t.type===CKEDITOR.NODE_COMMENT){t=
+t.getNextSourceNode(!0);continue}if(w&&l&&CKEDITOR.dtd.$block[v])for(var B=t,A=a(B),E=void 0,C=A.length,Q=0,B=C&&new CKEDITOR.dom.range(B.getDocument());Q<C;++Q){var E=A[Q],ea=CKEDITOR.filter.instances[E.data("cke-filter")];if(ea?ea.check(this):1)B.selectNodeContents(E),f.call(this,B)}A=v?!m[v]||z?0:w&&!l?0:h(t,y,e,N):1;if(A)if(E=t.getParent(),A=e,C=g,Q=k,!E||!(E.getDtd()||CKEDITOR.dtd.span)[C]&&!Q||A.parentRule&&!A.parentRule(E))n=!0;else{if(u||v&&CKEDITOR.dtd.$removeEmpty[v]&&(t.getPosition(y)|
+N)!=N||(u=c.clone(),u.setStartBefore(t)),v=t.type,v==CKEDITOR.NODE_TEXT||w||v==CKEDITOR.NODE_ELEMENT&&!t.getChildCount()){for(var v=t,ja;(n=!v.getNext(M))&&(ja=v.getParent(),m[ja.getName()])&&h(ja,r,e,I);)v=ja;u.setEndAfter(v)}}else n=!0;t=t.getNextSourceNode(z||w)}if(n&&u&&!u.collapsed){for(var n=x(this,d),w=n.hasAttributes(),z=u.getCommonAncestor(),v={},A={},E={},C={},ga,fa,ia;n&&z;){if(z.getName()==g){for(ga in e.attributes)!C[ga]&&(ia=z.getAttribute(fa))&&(n.getAttribute(ga)==ia?A[ga]=1:C[ga]=
+1);for(fa in e.styles)!E[fa]&&(ia=z.getStyle(fa))&&(n.getStyle(fa)==ia?v[fa]=1:E[fa]=1)}z=z.getParent()}for(ga in A)n.removeAttribute(ga);for(fa in v)n.removeStyle(fa);w&&!n.hasAttributes()&&(n=null);n?(u.extractContents().appendTo(n),u.insertNode(n),p.call(this,n),n.mergeSiblings(),CKEDITOR.env.ie||n.$.normalize()):(n=new CKEDITOR.dom.element("span"),u.extractContents().appendTo(n),u.insertNode(n),p.call(this,n),n.remove(!0));u=null}}c.moveToBookmark(q);c.shrink(CKEDITOR.SHRINK_TEXT);c.shrink(CKEDITOR.NODE_ELEMENT,
+!0)}}function e(a){function c(){for(var a=new CKEDITOR.dom.elementPath(d.getParent()),b=new CKEDITOR.dom.elementPath(l.getParent()),g=null,e=null,f=0;f<a.elements.length;f++){var h=a.elements[f];if(h==a.block||h==a.blockLimit)break;m.checkElementRemovable(h,!0)&&(g=h)}for(f=0;f<b.elements.length;f++){h=b.elements[f];if(h==b.block||h==b.blockLimit)break;m.checkElementRemovable(h,!0)&&(e=h)}e&&l.breakParent(e);g&&d.breakParent(g)}a.enlarge(CKEDITOR.ENLARGE_INLINE,1);var b=a.createBookmark(),d=b.startNode,
+g=this._.definition.alwaysRemoveElement;if(a.collapsed){for(var e=new CKEDITOR.dom.elementPath(d.getParent(),a.root),f,h=0,k;h<e.elements.length&&(k=e.elements[h])&&k!=e.block&&k!=e.blockLimit;h++)if(this.checkElementRemovable(k)){var n;!g&&a.collapsed&&(a.checkBoundaryOfElement(k,CKEDITOR.END)||(n=a.checkBoundaryOfElement(k,CKEDITOR.START)))?(f=k,f.match=n?"start":"end"):(k.mergeSiblings(),k.is(this.element)?v.call(this,k):q(k,u(this)[k.getName()]))}if(f){g=d;for(h=0;;h++){k=e.elements[h];if(k.equals(f))break;
+else if(k.match)continue;else k=k.clone();k.append(g);g=k}g["start"==f.match?"insertBefore":"insertAfter"](f)}}else{var l=b.endNode,m=this;c();for(e=d;!e.equals(l);)f=e.getNextSourceNode(),e.type==CKEDITOR.NODE_ELEMENT&&this.checkElementRemovable(e)&&(e.getName()==this.element?v.call(this,e):q(e,u(this)[e.getName()]),f.type==CKEDITOR.NODE_ELEMENT&&f.contains(d)&&(c(),f=d.getNext())),e=f}a.moveToBookmark(b);a.shrink(CKEDITOR.NODE_ELEMENT,!0)}function a(a){var c=[];a.forEach(function(a){if("true"==
+a.getAttribute("contenteditable"))return c.push(a),!1},CKEDITOR.NODE_ELEMENT,!0);return c}function k(a){var c=a.getEnclosedNode()||a.getCommonAncestor(!1,!0);(a=(new CKEDITOR.dom.elementPath(c,a.root)).contains(this.element,1))&&!a.isReadOnly()&&t(a,this)}function l(a){var c=a.getCommonAncestor(!0,!0);if(a=(new CKEDITOR.dom.elementPath(c,a.root)).contains(this.element,1)){var c=this._.definition,b=c.attributes;if(b)for(var d in b)a.removeAttribute(d,b[d]);if(c.styles)for(var g in c.styles)c.styles.hasOwnProperty(g)&&
+a.removeStyle(g)}}function m(a){var c=a.createBookmark(!0),b=a.createIterator();b.enforceRealBlocks=!0;this._.enterMode&&(b.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR);for(var g,e=a.document,f;g=b.getNextParagraph();)!g.isReadOnly()&&(b.activeFilter?b.activeFilter.check(this):1)&&(f=x(this,e,g),d(g,f));a.moveToBookmark(c)}function c(a){var c=a.createBookmark(1),b=a.createIterator();b.enforceRealBlocks=!0;b.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR;for(var g,e;g=b.getNextParagraph();)this.checkElementRemovable(g)&&
+(g.is("pre")?((e=this._.enterMode==CKEDITOR.ENTER_BR?null:a.document.createElement(this._.enterMode==CKEDITOR.ENTER_P?"p":"div"))&&g.copyAttributes(e),d(g,e)):v.call(this,g));a.moveToBookmark(c)}function d(a,c){var b=!c;b&&(c=a.getDocument().createElement("div"),a.copyAttributes(c));var d=c&&c.is("pre"),e=a.is("pre"),f=!d&&e;if(d&&!e){e=c;(f=a.getBogus())&&f.remove();f=a.getHtml();f=n(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 h=a.getDocument().createElement("div");h.append(e);e.$.outerHTML="\x3cpre\x3e"+f+"\x3c/pre\x3e";e.copyAttributes(h.getFirst());e=h.getFirst().remove()}else e.setHtml(f);c=e}else f?c=y(b?[a.getHtml()]:g(a),c):a.moveChildren(c);c.replace(a);if(d){var b=c,k;(k=b.getPrevious(D))&&k.type==CKEDITOR.NODE_ELEMENT&&k.is("pre")&&(d=n(k.getHtml(),/\n$/,"")+"\n\n"+n(b.getHtml(),/^\n/,""),CKEDITOR.env.ie?b.$.outerHTML="\x3cpre\x3e"+d+"\x3c/pre\x3e":
 b.setHtml(d),k.remove())}else b&&r(c)}function g(a){var c=[];n(a.getOuterHtml(),/(\S\s*)\n(?:\s|(<span[^>]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi,function(a,c,b){return c+"\x3c/pre\x3e"+b+"\x3cpre\x3e"}).replace(/<pre\b.*?>([\s\S]*?)<\/pre>/gi,function(a,b){c.push(b)});return c}function n(a,c,b){var d="",g="";a=a.replace(/(^<span[^>]+data-cke-bookmark.*?\/span>)|(<span[^>]+data-cke-bookmark.*?\/span>$)/gi,function(a,c,b){c&&(d=c);b&&(g=b);return""});return d+a.replace(c,b)+g}function y(a,c){var b;
 1<a.length&&(b=new CKEDITOR.dom.documentFragment(c.getDocument()));for(var d=0;d<a.length;d++){var g=a[d],g=g.replace(/(\r\n|\r)/g,"\n"),g=n(g,/^[ \t]*\n/,""),g=n(g,/\n$/,""),g=n(g,/^[ \t]+|[ \t]+$/g,function(a,c){return 1==a.length?"\x26nbsp;":c?" "+CKEDITOR.tools.repeat("\x26nbsp;",a.length-1):CKEDITOR.tools.repeat("\x26nbsp;",a.length-1)+" "}),g=g.replace(/\n/g,"\x3cbr\x3e"),g=g.replace(/[ \t]{2,}/g,function(a){return CKEDITOR.tools.repeat("\x26nbsp;",a.length-1)+" "});if(b){var e=c.clone();e.setHtml(g);
-b.append(e)}else c.setHtml(g)}return b||c}function w(a,c){var b=this._.definition,d=b.attributes,b=b.styles,g=q(this)[a.getName()],e=CKEDITOR.tools.isEmpty(d)&&CKEDITOR.tools.isEmpty(b),f;for(f in d)if("class"!=f&&!this._.definition.fullMatch||a.getAttribute(f)==v(f,d[f]))c&&"data-"==f.slice(0,5)||(e=a.hasAttribute(f),a.removeAttribute(f));for(var h in b)this._.definition.fullMatch&&a.getStyle(h)!=v(h,b[h],!0)||(e=e||!!a.getStyle(h),a.removeStyle(h));t(a,g,A[a.getName()]);e&&(this._.definition.alwaysRemoveElement?
-r(a,1):!CKEDITOR.dtd.$block[a.getName()]||this._.enterMode==CKEDITOR.ENTER_BR&&!a.hasAttributes()?r(a):a.renameNode(this._.enterMode==CKEDITOR.ENTER_P?"p":"div"))}function p(a){for(var c=q(this),b=a.getElementsByTag(this.element),d,g=b.count();0<=--g;)d=b.getItem(g),d.isReadOnly()||w.call(this,d,!0);for(var e in c)if(e!=this.element)for(b=a.getElementsByTag(e),g=b.count()-1;0<=g;g--)d=b.getItem(g),d.isReadOnly()||t(d,c[e])}function t(a,c,b){if(c=c&&c.attributes)for(var d=0;d<c.length;d++){var g=c[d][0],
-e;if(e=a.getAttribute(g)){var f=c[d][1];(null===f||f.test&&f.test(e)||"string"==typeof f&&e==f)&&a.removeAttribute(g)}}b||r(a)}function r(a,c){if(!a.hasAttributes()||c)if(CKEDITOR.dtd.$block[a.getName()]){var b=a.getPrevious(C),d=a.getNext(C);!b||b.type!=CKEDITOR.NODE_TEXT&&b.isBlockBoundary({br:1})||a.append("br",1);!d||d.type!=CKEDITOR.NODE_TEXT&&d.isBlockBoundary({br:1})||a.append("br");a.remove(!0)}else b=a.getFirst(),d=a.getLast(),a.remove(!0),b&&(b.type==CKEDITOR.NODE_ELEMENT&&b.mergeSiblings(),
-d&&!b.equals(d)&&d.type==CKEDITOR.NODE_ELEMENT&&d.mergeSiblings())}function x(a,c,b){var d;d=a.element;"*"==d&&(d="span");d=new CKEDITOR.dom.element(d,c);b&&b.copyAttributes(d);d=u(d,a);c.getCustomData("doc_processing_style")&&d.hasAttribute("id")?d.removeAttribute("id"):c.setCustomData("doc_processing_style",1);return d}function u(a,c){var b=c._.definition,d=b.attributes,b=CKEDITOR.style.getStyleText(b);if(d)for(var g in d)a.setAttribute(g,d[g]);b&&a.setAttribute("style",b);a.getDocument().removeCustomData("doc_processing_style");
-return a}function z(a,c){for(var b in a)a[b]=a[b].replace(K,function(a,b){return c[b]})}function q(a){if(a._.overrides)return a._.overrides;var c=a._.overrides={},b=a._.definition.overrides;if(b){CKEDITOR.tools.isArray(b)||(b=[b]);for(var d=0;d<b.length;d++){var g=b[d],e,f;"string"==typeof g?e=g.toLowerCase():(e=g.element?g.element.toLowerCase():a.element,f=g.attributes);g=c[e]||(c[e]={});if(f){var g=g.attributes=g.attributes||[],h;for(h in f)g.push([h.toLowerCase(),f[h]])}}}return c}function v(a,
-c,b){var d=new CKEDITOR.dom.element("span");d[b?"setStyle":"setAttribute"](a,c);return d[b?"getStyle":"getAttribute"](a)}function B(a,c){function b(a,c){return"font-family"==c.toLowerCase()?a.replace(/["']/g,""):a}"string"==typeof a&&(a=CKEDITOR.tools.parseCssText(a));"string"==typeof c&&(c=CKEDITOR.tools.parseCssText(c,!0));for(var d in a)if(!(d in c)||b(c[d],d)!=b(a[d],d)&&"inherit"!=a[d]&&"inherit"!=c[d])return!1;return!0}function D(a,c,b){var d=a.getRanges();c=c?this.removeFromRange:this.applyToRange;
-for(var g,e=d.createIterator();g=e.getNextRange();)c.call(this,g,b);a.selectRanges(d)}var A={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,blockquote: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},F=/\s*(?:;\s*|$)/,K=/#\((.+?)\)/g,L=CKEDITOR.dom.walker.bookmark(0,
-1),C=CKEDITOR.dom.walker.whitespaces(1);CKEDITOR.style=function(a,c){if("string"==typeof a.type)return new CKEDITOR.style.customHandlers[a.type](a);var b=a.attributes;b&&b.style&&(a.styles=CKEDITOR.tools.extend({},a.styles,CKEDITOR.tools.parseCssText(b.style)),delete b.style);c&&(a=CKEDITOR.tools.clone(a),z(a.attributes,c),z(a.styles,c));b=this.element=a.element?"string"==typeof a.element?a.element.toLowerCase():a.element:"*";this.type=a.type||(A[b]?CKEDITOR.STYLE_BLOCK:E[b]?CKEDITOR.STYLE_OBJECT:
-CKEDITOR.STYLE_INLINE);"object"==typeof this.element&&(this.type=CKEDITOR.STYLE_OBJECT);this._={definition:a}};CKEDITOR.style.prototype={apply:function(a){if(a instanceof CKEDITOR.dom.document)return D.call(this,a.getSelection());if(this.checkApplicable(a.elementPath(),a)){var c=this._.enterMode;c||(this._.enterMode=a.activeEnterMode);D.call(this,a.getSelection(),0,a);this._.enterMode=c}},remove:function(a){if(a instanceof CKEDITOR.dom.document)return D.call(this,a.getSelection(),1);if(this.checkApplicable(a.elementPath(),
-a)){var c=this._.enterMode;c||(this._.enterMode=a.activeEnterMode);D.call(this,a.getSelection(),1,a);this._.enterMode=c}},applyToRange:function(a){this.applyToRange=this.type==CKEDITOR.STYLE_INLINE?f:this.type==CKEDITOR.STYLE_BLOCK?l:this.type==CKEDITOR.STYLE_OBJECT?m:null;return this.applyToRange(a)},removeFromRange:function(a){this.removeFromRange=this.type==CKEDITOR.STYLE_INLINE?e:this.type==CKEDITOR.STYLE_BLOCK?c:this.type==CKEDITOR.STYLE_OBJECT?k:null;return this.removeFromRange(a)},applyToObject:function(a){u(a,
+b.append(e)}else c.setHtml(g)}return b||c}function v(a,c){var b=this._.definition,d=b.attributes,b=b.styles,g=u(this)[a.getName()],e=CKEDITOR.tools.isEmpty(d)&&CKEDITOR.tools.isEmpty(b),f;for(f in d)if("class"!=f&&!this._.definition.fullMatch||a.getAttribute(f)==w(f,d[f]))c&&"data-"==f.slice(0,5)||(e=a.hasAttribute(f),a.removeAttribute(f));for(var h in b)this._.definition.fullMatch&&a.getStyle(h)!=w(h,b[h],!0)||(e=e||!!a.getStyle(h),a.removeStyle(h));q(a,g,A[a.getName()]);e&&(this._.definition.alwaysRemoveElement?
+r(a,1):!CKEDITOR.dtd.$block[a.getName()]||this._.enterMode==CKEDITOR.ENTER_BR&&!a.hasAttributes()?r(a):a.renameNode(this._.enterMode==CKEDITOR.ENTER_P?"p":"div"))}function p(a){for(var c=u(this),b=a.getElementsByTag(this.element),d,g=b.count();0<=--g;)d=b.getItem(g),d.isReadOnly()||v.call(this,d,!0);for(var e in c)if(e!=this.element)for(b=a.getElementsByTag(e),g=b.count()-1;0<=g;g--)d=b.getItem(g),d.isReadOnly()||q(d,c[e])}function q(a,c,b){if(c=c&&c.attributes)for(var d=0;d<c.length;d++){var g=c[d][0],
+e;if(e=a.getAttribute(g)){var f=c[d][1];(null===f||f.test&&f.test(e)||"string"==typeof f&&e==f)&&a.removeAttribute(g)}}b||r(a)}function r(a,c){if(!a.hasAttributes()||c)if(CKEDITOR.dtd.$block[a.getName()]){var b=a.getPrevious(D),d=a.getNext(D);!b||b.type!=CKEDITOR.NODE_TEXT&&b.isBlockBoundary({br:1})||a.append("br",1);!d||d.type!=CKEDITOR.NODE_TEXT&&d.isBlockBoundary({br:1})||a.append("br");a.remove(!0)}else b=a.getFirst(),d=a.getLast(),a.remove(!0),b&&(b.type==CKEDITOR.NODE_ELEMENT&&b.mergeSiblings(),
+d&&!b.equals(d)&&d.type==CKEDITOR.NODE_ELEMENT&&d.mergeSiblings())}function x(a,c,b){var d;d=a.element;"*"==d&&(d="span");d=new CKEDITOR.dom.element(d,c);b&&b.copyAttributes(d);d=t(d,a);c.getCustomData("doc_processing_style")&&d.hasAttribute("id")?d.removeAttribute("id"):c.setCustomData("doc_processing_style",1);return d}function t(a,c){var b=c._.definition,d=b.attributes,b=CKEDITOR.style.getStyleText(b);if(d)for(var g in d)a.setAttribute(g,d[g]);b&&a.setAttribute("style",b);a.getDocument().removeCustomData("doc_processing_style");
+return a}function z(a,c){for(var b in a)a[b]=a[b].replace(K,function(a,b){return c[b]})}function u(a){if(a._.overrides)return a._.overrides;var c=a._.overrides={},b=a._.definition.overrides;if(b){CKEDITOR.tools.isArray(b)||(b=[b]);for(var d=0;d<b.length;d++){var g=b[d],e,f;"string"==typeof g?e=g.toLowerCase():(e=g.element?g.element.toLowerCase():a.element,f=g.attributes);g=c[e]||(c[e]={});if(f){var g=g.attributes=g.attributes||[],h;for(h in f)g.push([h.toLowerCase(),f[h]])}}}return c}function w(a,
+c,b){var d=new CKEDITOR.dom.element("span");d[b?"setStyle":"setAttribute"](a,c);return d[b?"getStyle":"getAttribute"](a)}function B(a,c){function b(a,c){return"font-family"==c.toLowerCase()?a.replace(/["']/g,""):a}"string"==typeof a&&(a=CKEDITOR.tools.parseCssText(a));"string"==typeof c&&(c=CKEDITOR.tools.parseCssText(c,!0));for(var d in a)if(!(d in c)||b(c[d],d)!=b(a[d],d)&&"inherit"!=a[d]&&"inherit"!=c[d])return!1;return!0}function C(a,c,b){var d=a.getRanges();c=c?this.removeFromRange:this.applyToRange;
+for(var g,e=d.createIterator();g=e.getNextRange();)c.call(this,g,b);a.selectRanges(d)}var A={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,blockquote: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},F=/\s*(?:;\s*|$)/,K=/#\((.+?)\)/g,M=CKEDITOR.dom.walker.bookmark(0,
+1),D=CKEDITOR.dom.walker.whitespaces(1);CKEDITOR.style=function(a,c){if("string"==typeof a.type)return new CKEDITOR.style.customHandlers[a.type](a);var b=a.attributes;b&&b.style&&(a.styles=CKEDITOR.tools.extend({},a.styles,CKEDITOR.tools.parseCssText(b.style)),delete b.style);c&&(a=CKEDITOR.tools.clone(a),z(a.attributes,c),z(a.styles,c));b=this.element=a.element?"string"==typeof a.element?a.element.toLowerCase():a.element:"*";this.type=a.type||(A[b]?CKEDITOR.STYLE_BLOCK:E[b]?CKEDITOR.STYLE_OBJECT:
+CKEDITOR.STYLE_INLINE);"object"==typeof this.element&&(this.type=CKEDITOR.STYLE_OBJECT);this._={definition:a}};CKEDITOR.style.prototype={apply:function(a){if(a instanceof CKEDITOR.dom.document)return C.call(this,a.getSelection());if(this.checkApplicable(a.elementPath(),a)){var c=this._.enterMode;c||(this._.enterMode=a.activeEnterMode);C.call(this,a.getSelection(),0,a);this._.enterMode=c}},remove:function(a){if(a instanceof CKEDITOR.dom.document)return C.call(this,a.getSelection(),1);if(this.checkApplicable(a.elementPath(),
+a)){var c=this._.enterMode;c||(this._.enterMode=a.activeEnterMode);C.call(this,a.getSelection(),1,a);this._.enterMode=c}},applyToRange:function(a){this.applyToRange=this.type==CKEDITOR.STYLE_INLINE?f:this.type==CKEDITOR.STYLE_BLOCK?m:this.type==CKEDITOR.STYLE_OBJECT?k:null;return this.applyToRange(a)},removeFromRange:function(a){this.removeFromRange=this.type==CKEDITOR.STYLE_INLINE?e:this.type==CKEDITOR.STYLE_BLOCK?c:this.type==CKEDITOR.STYLE_OBJECT?l:null;return this.removeFromRange(a)},applyToObject:function(a){t(a,
 this)},checkActive:function(a,c){switch(this.type){case CKEDITOR.STYLE_BLOCK:return this.checkElementRemovable(a.block||a.blockLimit,!0,c);case CKEDITOR.STYLE_OBJECT:case CKEDITOR.STYLE_INLINE:for(var b=a.elements,d=0,g;d<b.length;d++)if(g=b[d],this.type!=CKEDITOR.STYLE_INLINE||g!=a.block&&g!=a.blockLimit){if(this.type==CKEDITOR.STYLE_OBJECT){var e=g.getName();if(!("string"==typeof this.element?e==this.element:e in this.element))continue}if(this.checkElementRemovable(g,!0,c))return!0}}return!1},checkApplicable:function(a,
 c,b){c&&c instanceof CKEDITOR.filter&&(b=c);if(b&&!b.check(this))return!1;switch(this.type){case CKEDITOR.STYLE_OBJECT:return!!a.contains(this.element);case CKEDITOR.STYLE_BLOCK:return!!a.blockLimit.getDtd()[this.element]}return!0},checkElementMatch:function(a,c){var b=this._.definition;if(!a||!b.ignoreReadonly&&a.isReadOnly())return!1;var d=a.getName();if("string"==typeof this.element?d==this.element:d in this.element){if(!c&&!a.hasAttributes())return!0;if(d=b._AC)b=d;else{var d={},g=0,e=b.attributes;
-if(e)for(var f in e)g++,d[f]=e[f];if(f=CKEDITOR.style.getStyleText(b))d.style||g++,d.style=f;d._length=g;b=b._AC=d}if(b._length){for(var h in b)if("_length"!=h)if(d=a.getAttribute(h)||"","style"==h?B(b[h],d):b[h]==d){if(!c)return!0}else if(c)return!1;if(c)return!0}else return!0}return!1},checkElementRemovable:function(a,c,b){if(this.checkElementMatch(a,c,b))return!0;if(c=q(this)[a.getName()]){var d;if(!(c=c.attributes))return!0;for(b=0;b<c.length;b++)if(d=c[b][0],d=a.getAttribute(d)){var g=c[b][1];
+if(e)for(var f in e)g++,d[f]=e[f];if(f=CKEDITOR.style.getStyleText(b))d.style||g++,d.style=f;d._length=g;b=b._AC=d}if(b._length){for(var h in b)if("_length"!=h)if(d=a.getAttribute(h)||"","style"==h?B(b[h],d):b[h]==d){if(!c)return!0}else if(c)return!1;if(c)return!0}else return!0}return!1},checkElementRemovable:function(a,c,b){if(this.checkElementMatch(a,c,b))return!0;if(c=u(this)[a.getName()]){var d;if(!(c=c.attributes))return!0;for(b=0;b<c.length;b++)if(d=c[b][0],d=a.getAttribute(d)){var g=c[b][1];
 if(null===g)return!0;if("string"==typeof g){if(d==g)return!0}else if(g.test(d))return!0}}return!1},buildPreview:function(a){var c=this._.definition,b=[],d=c.element;"bdo"==d&&(d="span");var b=["\x3c",d],g=c.attributes;if(g)for(var e in g)b.push(" ",e,'\x3d"',g[e],'"');(g=CKEDITOR.style.getStyleText(c))&&b.push(' style\x3d"',g,'"');b.push("\x3e",a||c.name,"\x3c/",d,"\x3e");return b.join("")},getDefinition:function(){return this._.definition}};CKEDITOR.style.getStyleText=function(a){var c=a._ST;if(c)return c;
 var c=a.styles,b=a.attributes&&a.attributes.style||"",d="";b.length&&(b=b.replace(F,";"));for(var g in c){var e=c[g],f=(g+":"+e).replace(F,";");"inherit"==e?d+=f:b+=f}b.length&&(b=CKEDITOR.tools.normalizeCssText(b,!0));return a._ST=b+d};CKEDITOR.style.customHandlers={};CKEDITOR.style.unstylableElements=[];CKEDITOR.style.addCustomHandler=function(a){var c=function(a){this._={definition:a};this.setup&&this.setup(a)};c.prototype=CKEDITOR.tools.extend(CKEDITOR.tools.prototypedCopy(CKEDITOR.style.prototype),
-{assignedTo:CKEDITOR.STYLE_OBJECT},a,!0);return this.customHandlers[a.type]=c};var O=CKEDITOR.POSITION_PRECEDING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED,I=CKEDITOR.POSITION_FOLLOWING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED}(),CKEDITOR.styleCommand=function(b,h){this.requiredContent=this.allowedContent=this.style=b;CKEDITOR.tools.extend(this,h,!0)},CKEDITOR.styleCommand.prototype.exec=function(b){b.focus();this.state==CKEDITOR.TRISTATE_OFF?b.applyStyle(this.style):
+{assignedTo:CKEDITOR.STYLE_OBJECT},a,!0);return this.customHandlers[a.type]=c};var N=CKEDITOR.POSITION_PRECEDING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED,I=CKEDITOR.POSITION_FOLLOWING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED}(),CKEDITOR.styleCommand=function(b,h){this.requiredContent=this.allowedContent=this.style=b;CKEDITOR.tools.extend(this,h,!0)},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,h,f){CKEDITOR.stylesSet.addExternal(b,h,"");CKEDITOR.stylesSet.load(b,f)},CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{attachStyleStateChange:function(b,h){var f=this._.styleStateChangeCallbacks;f||(f=this._.styleStateChangeCallbacks=[],this.on("selectionChange",
-function(b){for(var a=0;a<f.length;a++){var h=f[a],k=h.style.checkActive(b.data.path,this)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF;h.fn.call(this,k)}}));f.push({style:b,fn:h})},applyStyle:function(b){b.apply(this)},removeStyle:function(b){b.remove(this)},getStylesSet:function(b){if(this._.stylesDefinitions)b(this._.stylesDefinitions);else{var h=this,f=h.config.stylesCombo_stylesSet||h.config.stylesSet;if(!1===f)b(null);else if(f instanceof Array)h._.stylesDefinitions=f,b(f);else{f||(f="default");
+function(b){for(var a=0;a<f.length;a++){var h=f[a],l=h.style.checkActive(b.data.path,this)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF;h.fn.call(this,l)}}));f.push({style:b,fn:h})},applyStyle:function(b){b.apply(this)},removeStyle:function(b){b.remove(this)},getStylesSet:function(b){if(this._.stylesDefinitions)b(this._.stylesDefinitions);else{var h=this,f=h.config.stylesCombo_stylesSet||h.config.stylesSet;if(!1===f)b(null);else if(f instanceof Array)h._.stylesDefinitions=f,b(f);else{f||(f="default");
 var f=f.split(":"),e=f[0];CKEDITOR.stylesSet.addExternal(e,f[1]?f.slice(1).join(":"):CKEDITOR.getUrl("styles.js"),"");CKEDITOR.stylesSet.load(e,function(a){h._.stylesDefinitions=a[e];b(h._.stylesDefinitions)})}}}}),function(){if(window.Promise)CKEDITOR.tools.promise=Promise;else{var b=CKEDITOR.getUrl("vendor/promise.js");if("function"===typeof window.define&&window.define.amd&&"function"===typeof window.require)return window.require([b],function(b){CKEDITOR.tools.promise=b});CKEDITOR.scriptLoader.load(b,
-function(h){if(!h)return CKEDITOR.error("no-vendor-lib",{path:b});if("undefined"!==typeof window.ES6Promise)return CKEDITOR.tools.promise=ES6Promise})}}(),function(){function b(b,a,m){b.once("selectionCheck",function(b){if(!h){var e=b.data.getRanges()[0];m.equals(e)?b.cancel():a.equals(e)&&(f=!0)}},null,null,-1)}var h=!0,f=!1;CKEDITOR.dom.selection.setupEditorOptimization=function(b){b.on("selectionCheck",function(a){a.data&&!f&&a.data.optimizeInElementEnds();f=!1});b.on("contentDom",function(){var a=
-b.editable();a&&(a.attachListener(a,"keydown",function(a){this._.shiftPressed=a.data.$.shiftKey},this),a.attachListener(a,"keyup",function(a){this._.shiftPressed=a.data.$.shiftKey},this))})};CKEDITOR.dom.selection.prototype.optimizeInElementEnds=function(){var e=this.getRanges()[0],a=this.root.editor,f;if(this.root.editor._.shiftPressed||this.isFake||e.isCollapsed||e.startContainer.equals(e.endContainer))f=!1;else if(0===e.endOffset)f=!0;else{f=e.startContainer.type===CKEDITOR.NODE_TEXT;var k=e.endContainer.type===
-CKEDITOR.NODE_TEXT,l=f?e.startContainer.getLength():e.startContainer.getChildCount();f=e.startOffset===l||f^k}f&&(f=e.clone(),e.shrink(CKEDITOR.SHRINK_TEXT,!1,{skipBogus:!CKEDITOR.env.webkit}),h=!1,b(a,e,f),e.select(),h=!0)}}(),function(){function b(a,b){f(a)?a=Math.round(b*(parseFloat(a)/100)):"string"===typeof a&&a.match(/^\d+$/gm)&&(a=parseInt(a,10));return a}function h(a,b){f(a)?a=b*(parseFloat(a)/100):"string"===typeof a&&a.match(/^\d?\.\d+/gm)&&(a=parseFloat(a));return a}function f(a){return"string"===
-typeof a&&a.match(/^((\d*\.\d+)|(\d+))%{1}$/gm)}function e(a,b,e){return!isNaN(a)&&a>=b&&a<=e}function a(a){a=a.toString(16);return 1==a.length?"0"+a:a}CKEDITOR.tools.color=CKEDITOR.tools.createClass({$:function(a,b){this._.initialColorCode=a;this._.defaultValue=b;this._.parseInput(a)},proto:{getHex:function(){if(!this._.isValidColor)return this._.defaultValue;var a=this._.blendAlphaColor(this._.red,this._.green,this._.blue,this._.alpha);return this._.formatHexString(a[0],a[1],a[2])},getHexWithAlpha:function(){if(!this._.isValidColor)return this._.defaultValue;
-var a=Math.round(this._.alpha*CKEDITOR.tools.color.MAX_RGB_CHANNEL_VALUE);return this._.formatHexString(this._.red,this._.green,this._.blue,a)},getRgb:function(){if(!this._.isValidColor)return this._.defaultValue;var a=this._.blendAlphaColor(this._.red,this._.green,this._.blue,this._.alpha);return this._.formatRgbString("rgb",a[0],a[1],a[2])},getRgba:function(){return this._.isValidColor?this._.formatRgbString("rgba",this._.red,this._.green,this._.blue,this._.alpha):this._.defaultValue},getHsl:function(){if(!this._.isValidColor)return this._.defaultValue;
-var a=this._.blendAlphaColor(this._.red,this._.green,this._.blue,this._.alpha),a=this._.rgbToHsl(a[0],a[1],a[2]);return this._.formatHslString("hsl",a[0],a[1],a[2])},getHsla:function(){if(!this._.isValidColor)return this._.defaultValue;var a=this._.rgbToHsl(this._.red,this._.green,this._.blue);return this._.formatHslString("hsla",a[0],a[1],a[2],this._.alpha)},getInitialValue:function(){return this._.initialColorCode}},_:{initialColorCode:"",isValidColor:!0,red:0,green:0,blue:0,alpha:1,blendAlphaColor:function(a,
-b,e,c){return CKEDITOR.tools.array.map([a,b,e],function(a){return Math.round(CKEDITOR.tools.color.MAX_RGB_CHANNEL_VALUE-c*(CKEDITOR.tools.color.MAX_RGB_CHANNEL_VALUE-a))})},formatHexString:function(b,e,f,c){b="#"+a(b)+a(e)+a(f);void 0!==c&&(b+=a(c));return b.toUpperCase()},formatRgbString:function(a,b,e,c,d){b=[b,e,c];void 0!==d&&b.push(d);return a+"("+b.join(",")+")"},formatHslString:function(a,b,e,c,d){return a+"("+b+","+e+"%,"+c+"%"+(void 0!==d?","+d:"")+")"},parseInput:function(a){if("string"!==
-typeof a)this._.isValidColor=!1;else{a=CKEDITOR.tools.trim(a);var b=this._.matchStringToNamedColor(a);b&&(a=b);var b=this._.extractColorChannelsFromHex(a),e=this._.extractColorChannelsFromRgba(a);a=this._.extractColorChannelsFromHsla(a);(a=b||e||a)?(this._.red=a[0],this._.green=a[1],this._.blue=a[2],this._.alpha=a[3]):this._.isValidColor=!1}},matchStringToNamedColor:function(a){return CKEDITOR.tools.color.namedColors[a.toLowerCase()]||null},extractColorChannelsFromHex:function(a){a.match(CKEDITOR.tools.color.hex3CharsRegExp)&&
-(a=this._.hex3ToHex6(a));if(!a.match(CKEDITOR.tools.color.hex6CharsRegExp)&&!a.match(CKEDITOR.tools.color.hex8CharsRegExp))return null;a=a.split("");var b=1;a[7]&&a[8]&&(b=parseInt(a[7]+a[8],16),b/=CKEDITOR.tools.color.MAX_RGB_CHANNEL_VALUE,b=Number(b.toFixed(1)));return[parseInt(a[1]+a[2],16),parseInt(a[3]+a[4],16),parseInt(a[5]+a[6],16),b]},extractColorChannelsFromRgba:function(a){var e=this._.extractColorChannelsByPattern(a,CKEDITOR.tools.color.rgbRegExp);if(!e||(a=0===a.indexOf("rgba"))&&4!==
-e.length||!a&&3!==e.length)return null;var f=b(e[0],CKEDITOR.tools.color.MAX_RGB_CHANNEL_VALUE),c=b(e[1],CKEDITOR.tools.color.MAX_RGB_CHANNEL_VALUE),d=b(e[2],CKEDITOR.tools.color.MAX_RGB_CHANNEL_VALUE),g=1;a&&(g=h(e[3],CKEDITOR.tools.color.MAX_ALPHA_CHANNEL_VALUE));return this._.areColorChannelsValid(f,c,d,g)?[f,c,d,g]:null},extractColorChannelsFromHsla:function(a){var e=this._.extractColorChannelsByPattern(a,CKEDITOR.tools.color.hslRegExp);if(!e||(a=0===a.indexOf("hsla"))&&4!==e.length||!a&&3!==
-e.length)return null;var f=b(e[0],CKEDITOR.tools.color.MAX_HUE_CHANNEL_VALUE),c=h(e[1],CKEDITOR.tools.color.MAX_SATURATION_LIGHTNESS_CHANNEL_VALUE),d=h(e[2],CKEDITOR.tools.color.MAX_SATURATION_LIGHTNESS_CHANNEL_VALUE),g=1,f=this._.hslToRgb(f,c,d);a&&(g=h(e[3],CKEDITOR.tools.color.MAX_ALPHA_CHANNEL_VALUE));f.push(g);return this._.areColorChannelsValid(f[0],f[1],f[2],f[3])?f:null},hex3ToHex6:function(a){a=a.split("");return"#"+a[1]+a[1]+a[2]+a[2]+a[3]+a[3]},extractColorChannelsByPattern:function(a,
-b){var e=a.match(b);if(!e)return null;e=e[2].split(",");return e=CKEDITOR.tools.array.map(e,function(a){return CKEDITOR.tools.trim(a)})},areColorChannelsValid:function(a,b,f,c){return e(a,0,CKEDITOR.tools.color.MAX_RGB_CHANNEL_VALUE)&&e(b,0,CKEDITOR.tools.color.MAX_RGB_CHANNEL_VALUE)&&e(f,0,CKEDITOR.tools.color.MAX_RGB_CHANNEL_VALUE)&&e(c,0,CKEDITOR.tools.color.MAX_ALPHA_CHANNEL_VALUE)},hslToRgb:function(a,b,e){var c=function(c){var g=(c+a/30)%12;c=b*Math.min(e,1-e);g=Math.min(g-3,9-g,1);g=Math.max(-1,
-g);return Math.round((e-c*g)*CKEDITOR.tools.color.MAX_RGB_CHANNEL_VALUE)};return[c(0),c(8),c(4)]},rgbToHsl:function(a,b,e){a/=CKEDITOR.tools.color.MAX_RGB_CHANNEL_VALUE;b/=CKEDITOR.tools.color.MAX_RGB_CHANNEL_VALUE;var c=e/CKEDITOR.tools.color.MAX_RGB_CHANNEL_VALUE,d=Math.max(a,b,c),g=Math.min(a,b,c);e=d-g;var f=0;switch(d){case a:f=(b-c)/e%6;break;case b:f=(c-a)/e+2;break;case c:f=(a-b)/e+4}a=0===e?0:60*f;b=(d+g)/2;d=0;1!==b&&0!==b&&(d=e/(1-Math.abs(2*b-1)));a=Math.round(a);d=100*Math.round(d);return[a,
-d,100*b]}},statics:{MAX_RGB_CHANNEL_VALUE:255,MAX_ALPHA_CHANNEL_VALUE:1,MAX_HUE_CHANNEL_VALUE:360,MAX_SATURATION_LIGHTNESS_CHANNEL_VALUE:1,hex3CharsRegExp:/#([0-9a-f]{3}$)/gim,hex6CharsRegExp:/#([0-9a-f]{6}$)/gim,hex8CharsRegExp:/#([0-9a-f]{8}$)/gim,rgbRegExp:/(rgb[a]?)\(([.,\d\s%]*)\)/i,hslRegExp:/(hsl[a]?)\(([.,\d\s%]*)\)/i,namedColors:{aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aqua:"#00FFFF",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",
-blue:"#0000FF",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgreen:"#006400",darkgrey:"#A9A9A9",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",
-darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",fuchsia:"#FF00FF",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",gray:"#808080",green:"#008000",greenyellow:"#ADFF2F",grey:"#808080",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",
-ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgray:"#D3D3D3",lightgreen:"#90EE90",lightgrey:"#D3D3D3",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",lime:"#00FF00",limegreen:"#32CD32",linen:"#FAF0E6",
-magenta:"#FF00FF",maroon:"#800000",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",navy:"#000080",oldlace:"#FDF5E6",olive:"#808000",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",
-palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",purple:"#800080",rebeccapurple:"#663399",red:"#FF0000",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",silver:"#C0C0C0",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",
-steelblue:"#4682B4",tan:"#D2B48C",teal:"#008080",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",windowtext:"windowtext",wheat:"#F5DEB3",white:"#FFFFFF",whitesmoke:"#F5F5F5",yellow:"#FFFF00",yellowgreen:"#9ACD32"}}});CKEDITOR.tools.style.parse._colors=CKEDITOR.tools.color.namedColors}(),CKEDITOR.dom.comment=function(b,h){"string"==typeof b&&(b=(h?h.$: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"\x3c!--"+this.$.nodeValue+"--\x3e"}}),"use strict",function(){var b={},h={},f;for(f in CKEDITOR.dtd.$blockLimit)f in CKEDITOR.dtd.$list||(b[f]=1);for(f in CKEDITOR.dtd.$block)f in CKEDITOR.dtd.$blockLimit||f in CKEDITOR.dtd.$empty||(h[f]=1);CKEDITOR.dom.elementPath=function(e,a){var f=null,k=null,l=[],c=e,d;a=a||e.getDocument().getBody();c||(c=a);do if(c.type==CKEDITOR.NODE_ELEMENT){l.push(c);if(!this.lastElement&&(this.lastElement=c,c.is(CKEDITOR.dtd.$object)||
-"false"==c.getAttribute("contenteditable")))continue;if(c.equals(a))break;if(!k&&(d=c.getName(),"true"==c.getAttribute("contenteditable")?k=c:!f&&h[d]&&(f=c),b[d])){if(d=!f&&"div"==d){a:{d=c.getChildren();for(var g=0,n=d.count();g<n;g++){var y=d.getItem(g);if(y.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$block[y.getName()]){d=!0;break a}}d=!1}d=!d}d?f=c:k=c}}while(c=c.getParent());k||(k=a);this.block=f;this.blockLimit=k;this.root=a;this.elements=l}}(),CKEDITOR.dom.elementPath.prototype={compare:function(b){var h=
-this.elements;b=b&&b.elements;if(!b||h.length!=b.length)return!1;for(var f=0;f<h.length;f++)if(!h[f].equals(b[f]))return!1;return!0},contains:function(b,h,f){var e=0,a;"string"==typeof b&&(a=function(a){return a.getName()==b});b instanceof CKEDITOR.dom.element?a=function(a){return a.equals(b)}:CKEDITOR.tools.isArray(b)?a=function(a){return-1<CKEDITOR.tools.indexOf(b,a.getName())}:"function"==typeof b?a=b:"object"==typeof b&&(a=function(a){return a.getName()in b});var m=this.elements,k=m.length;h&&
-(f?e+=1:--k);f&&(m=Array.prototype.slice.call(m,0),m.reverse());for(;e<k;e++)if(a(m[e]))return m[e];return null},isContextFor:function(b){var h;return b in CKEDITOR.dtd.$block?(h=this.contains(CKEDITOR.dtd.$intermediate)||this.root.equals(this.block)&&this.block||this.blockLimit,!!h.getDtd()[b]):!0},direction:function(){return(this.block||this.blockLimit||this.root).getDirection(1)}},CKEDITOR.dom.text=function(b,h){"string"==typeof b&&(b=(h?h.$: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},isEmpty:function(b){var h=this.getText();b&&(h=CKEDITOR.tools.trim(h));return!h||h===CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE},split:function(b){var h=this.$.parentNode,f=h.childNodes.length,e=this.getLength(),a=this.getDocument(),m=new CKEDITOR.dom.text(this.$.splitText(b),
-a);h.childNodes.length==f&&(b>=e?(m=a.createText(""),m.insertAfter(this)):(b=a.createText(""),b.insertAfter(m),b.remove()));return m},substring:function(b,h){return"number"!=typeof h?this.$.nodeValue.substr(b):this.$.nodeValue.substring(b,h)}}),function(){function b(b,e,a){var h=b.serializable,k=e[a?"endContainer":"startContainer"],l=a?"endOffset":"startOffset",c=h?e.document.getById(b.startNode):b.startNode;b=h?e.document.getById(b.endNode):b.endNode;k.equals(c.getPrevious())?(e.startOffset=e.startOffset-
-k.getLength()-b.getPrevious().getLength(),k=b.getNext()):k.equals(b.getPrevious())&&(e.startOffset-=k.getLength(),k=b.getNext());k.equals(c.getParent())&&e[l]++;k.equals(b.getParent())&&e[l]++;e[a?"endContainer":"startContainer"]=k;return e}CKEDITOR.dom.rangeList=function(b){if(b instanceof CKEDITOR.dom.rangeList)return b;b?b instanceof CKEDITOR.dom.range&&(b=[b]):b=[];return CKEDITOR.tools.extend(b,h)};var h={createIterator:function(){var b=this,e=CKEDITOR.dom.walker.bookmark(),a=[],h;return{getNextRange:function(k){h=
-void 0===h?0:h+1;var l=b[h];if(l&&1<b.length){if(!h)for(var c=b.length-1;0<=c;c--)a.unshift(b[c].createBookmark(!0));if(k)for(var d=0;b[h+d+1];){var g=l.document;k=0;c=g.getById(a[d].endNode);for(g=g.getById(a[d+1].startNode);;){c=c.getNextSourceNode(!1);if(g.equals(c))k=1;else if(e(c)||c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary())continue;break}if(!k)break;d++}for(l.moveToBookmark(a.shift());d--;)c=b[++h],c.moveToBookmark(a.shift()),l.setEnd(c.endContainer,c.endOffset)}return l}}},createBookmarks:function(f){for(var e=
-[],a,h=0;h<this.length;h++){e.push(a=this[h].createBookmark(f,!0));for(var k=h+1;k<this.length;k++)this[k]=b(a,this[k]),this[k]=b(a,this[k],!0)}return e},createBookmarks2:function(b){for(var e=[],a=0;a<this.length;a++)e.push(this[a].createBookmark2(b));return e},moveToBookmarks:function(b){for(var e=0;e<this.length;e++)this[e].moveToBookmark(b[e])}}}(),function(){function b(){return CKEDITOR.getUrl(CKEDITOR.skinName.split(",")[1]||"skins/"+CKEDITOR.skinName.split(",")[0]+"/")}function h(a){var c=
-CKEDITOR.skin["ua_"+a],e=CKEDITOR.env;if(c)for(var c=c.split(",").sort(function(a,c){return a>c?-1:1}),f=0,h;f<c.length;f++)if(h=c[f],e.ie&&(h.replace(/^ie/,"")==e.version||e.quirks&&"iequirks"==h)&&(h="ie"),e[h]){a+="_"+c[f];break}return CKEDITOR.getUrl(b()+a+".css")}function f(a,c){m[a]||(CKEDITOR.document.appendStyleSheet(h(a)),m[a]=1);c&&c()}function e(a){var c=a.getById(k);c||(c=a.getHead().append("style"),c.setAttribute("id",k),c.setAttribute("type","text/css"));return c}function a(a,c,b){var e,
-f,h;if(CKEDITOR.env.webkit)for(c=c.split("}").slice(0,-1),f=0;f<c.length;f++)c[f]=c[f].split("{");for(var k=0;k<a.length;k++)if(CKEDITOR.env.webkit)for(f=0;f<c.length;f++){h=c[f][1];for(e=0;e<b.length;e++)h=h.replace(b[e][0],b[e][1]);a[k].$.sheet.addRule(c[f][0],h)}else{h=c;for(e=0;e<b.length;e++)h=h.replace(b[e][0],b[e][1]);CKEDITOR.env.ie&&11>CKEDITOR.env.version?a[k].$.styleSheet.cssText+=h:a[k].$.innerHTML+=h}}var m={};CKEDITOR.skin={path:b,loadPart:function(a,c){CKEDITOR.skin.name!=CKEDITOR.skinName.split(",")[0]?
-CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(b()+"skin.js"),function(){f(a,c)}):f(a,c)},getPath:function(a){return CKEDITOR.getUrl(h(a))},icons:{},addIcon:function(a,c,b,e){a=a.toLowerCase();this.icons[a]||(this.icons[a]={path:c,offset:b||0,bgsize:e||"16px"})},getIconStyle:function(a,c,b,e,f){var h;a&&(a=a.toLowerCase(),c&&(h=this.icons[a+"-rtl"]),h||(h=this.icons[a]));a=b||h&&h.path||"";e=e||h&&h.offset;f=f||h&&h.bgsize||"16px";a&&(a=a.replace(/'/g,"\\'"));return a&&"background-image:url('"+CKEDITOR.getUrl(a)+
-"');background-position:0 "+e+"px;background-size:"+f+";"}};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{getUiColor:function(){return this.uiColor},setUiColor:function(b){var g=e(CKEDITOR.document);return(this.setUiColor=function(b){this.uiColor=b;var d=CKEDITOR.skin.chameleon,e="",f="";"function"==typeof d&&(e=d(this,"editor"),f=d(this,"panel"));b=[[c,b]];a([g],e,b);a(l,f,b)}).call(this,b)}});var k="cke_ui_color",l=[],c=/\$color/g;CKEDITOR.on("instanceLoaded",function(b){if(!CKEDITOR.env.ie||
-!CKEDITOR.env.quirks){var g=b.editor;b=function(b){b=(b.data[0]||b.data).element.getElementsByTag("iframe").getItem(0).getFrameDocument();if(!b.getById("cke_ui_color")){var d=e(b);l.push(d);g.on("destroy",function(){l=CKEDITOR.tools.array.filter(l,function(a){return d!==a})});(b=g.getUiColor())&&a([d],CKEDITOR.skin.chameleon(g,"panel"),[[c,b]])}};g.on("panelShow",b);g.on("menuShow",b);g.config.uiColor&&g.setUiColor(g.config.uiColor)}})}(),function(){var b=CKEDITOR.dom.element.createFromHtml('\x3cdiv style\x3d"width:0;height:0;position:absolute;left:-10000px;border:1px solid;border-color:red blue"\x3e\x3c/div\x3e',
-CKEDITOR.document);b.appendTo(CKEDITOR.document.getHead());try{var h=b.getComputedStyle("border-top-color"),f=b.getComputedStyle("border-right-color");CKEDITOR.env.hc=!(!h||h!=f)}catch(e){CKEDITOR.env.hc=!1}b.remove();CKEDITOR.env.hc&&(CKEDITOR.env.cssClass+=" cke_hc");CKEDITOR.document.appendStyleText(".cke{visibility:hidden;}");CKEDITOR.status="loaded";CKEDITOR.fireOnce("loaded");if(b=CKEDITOR._.pending)for(delete CKEDITOR._.pending,h=0;h<b.length;h++)CKEDITOR.editor.prototype.constructor.apply(b[h][0],
-b[h][1]),CKEDITOR.add(b[h][0])}(),CKEDITOR.skin.name="moono-lisa",CKEDITOR.skin.ua_editor="ie,iequirks,ie8,gecko",CKEDITOR.skin.ua_dialog="ie,iequirks,ie8",CKEDITOR.skin.chameleon=function(){var b=function(){return function(b,e){for(var a=b.match(/[^#]./g),h=0;3>h;h++){var k=h,l;l=parseInt(a[h],16);l=("0"+(0>e?0|l*(1+e):0|l+(255-l)*e).toString(16)).slice(-2);a[k]=l}return"#"+a.join("")}}(),h={editor:new CKEDITOR.template("{id}.cke_chrome [border-color:{defaultBorder};] {id} .cke_top [ background-color:{defaultBackground};border-bottom-color:{defaultBorder};] {id} .cke_bottom [background-color:{defaultBackground};border-top-color:{defaultBorder};] {id} .cke_resizer [border-right-color:{ckeResizer}] {id} .cke_dialog_title [background-color:{defaultBackground};border-bottom-color:{defaultBorder};] {id} .cke_dialog_footer [background-color:{defaultBackground};outline-color:{defaultBorder};] {id} .cke_dialog_tab [background-color:{dialogTab};border-color:{defaultBorder};] {id} .cke_dialog_tab:hover [background-color:{lightBackground};] {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} a.cke_button_off:hover,{id} a.cke_button_off:focus,{id} a.cke_button_off:active [background-color:{darkBackground};border-color:{toolbarElementsBorder};] {id} .cke_button_on [background-color:{ckeButtonOn};border-color:{toolbarElementsBorder};] {id} .cke_toolbar_separator,{id} .cke_toolgroup a.cke_button:last-child:after,{id} .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after [background-color: {toolbarElementsBorder};border-color: {toolbarElementsBorder};] {id} a.cke_combo_button:hover,{id} a.cke_combo_button:focus,{id} .cke_combo_on a.cke_combo_button [border-color:{toolbarElementsBorder};background-color:{darkBackground};] {id} .cke_combo:after [border-color:{toolbarElementsBorder};] {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:{darkBackground};] {id}.cke_panel [border-color:{defaultBorder};] "),
+function(h){if(!h)return CKEDITOR.error("no-vendor-lib",{path:b});if("undefined"!==typeof window.ES6Promise)return CKEDITOR.tools.promise=ES6Promise})}}(),function(){function b(b,a,k){b.once("selectionCheck",function(b){if(!h){var e=b.data.getRanges()[0];k.equals(e)?b.cancel():a.equals(e)&&(f=!0)}},null,null,-1)}var h=!0,f=!1;CKEDITOR.dom.selection.setupEditorOptimization=function(b){b.on("selectionCheck",function(a){a.data&&!f&&a.data.optimizeInElementEnds();f=!1});b.on("contentDom",function(){var a=
+b.editable();a&&(a.attachListener(a,"keydown",function(a){this._.shiftPressed=a.data.$.shiftKey},this),a.attachListener(a,"keyup",function(a){this._.shiftPressed=a.data.$.shiftKey},this))})};CKEDITOR.dom.selection.prototype.optimizeInElementEnds=function(){var e=this.getRanges()[0],a=this.root.editor,f;if(this.root.editor._.shiftPressed||this.isFake||e.isCollapsed||e.startContainer.equals(e.endContainer))f=!1;else if(0===e.endOffset)f=!0;else{f=e.startContainer.type===CKEDITOR.NODE_TEXT;var l=e.endContainer.type===
+CKEDITOR.NODE_TEXT,m=f?e.startContainer.getLength():e.startContainer.getChildCount();f=e.startOffset===m||f^l}f&&(f=e.clone(),e.shrink(CKEDITOR.SHRINK_TEXT,!1,{skipBogus:!CKEDITOR.env.webkit}),h=!1,b(a,e,f),e.select(),h=!0)}}(),function(){function b(a,b){if(f(a))a=Math.round(b*(parseFloat(a)/100));else if("string"===typeof a&&a.match(/^\d+$/gm)||"string"===typeof a&&a.match(/^\d+(?:deg)?$/gm))a=parseInt(a,10);return a}function h(a,b){f(a)?a=b*(parseFloat(a)/100):"string"===typeof a&&a.match(/^\d?\.\d+/gm)&&
+(a=parseFloat(a));return a}function f(a){return"string"===typeof a&&a.match(/^((\d*\.\d+)|(\d+))%{1}$/gm)}function e(a,b,e){return!isNaN(a)&&a>=b&&a<=e}function a(a){a=a.toString(16);return 1==a.length?"0"+a:a}CKEDITOR.tools.color=CKEDITOR.tools.createClass({$:function(a,b){this._.initialColorCode=a;this._.defaultValue=b;this._.parseInput(a)},proto:{getHex:function(){if(!this._.isValidColor)return this._.defaultValue;var a=this._.blendAlphaColor(this._.red,this._.green,this._.blue,this._.alpha);return this._.formatHexString(a[0],
+a[1],a[2])},getHexWithAlpha:function(){if(!this._.isValidColor)return this._.defaultValue;var a=Math.round(this._.alpha*CKEDITOR.tools.color.MAX_RGB_CHANNEL_VALUE);return this._.formatHexString(this._.red,this._.green,this._.blue,a)},getRgb:function(){if(!this._.isValidColor)return this._.defaultValue;var a=this._.blendAlphaColor(this._.red,this._.green,this._.blue,this._.alpha);return this._.formatRgbString("rgb",a[0],a[1],a[2])},getRgba:function(){return this._.isValidColor?this._.formatRgbString("rgba",
+this._.red,this._.green,this._.blue,this._.alpha):this._.defaultValue},getHsl:function(){var a=0===this._.alpha||1===this._.alpha;if(!this._.isValidColor)return this._.defaultValue;this._.type===CKEDITOR.tools.color.TYPE_HSL&&a?a=[this._.hue,this._.saturation,this._.lightness]:(a=this._.blendAlphaColor(this._.red,this._.green,this._.blue,this._.alpha),a=this._.rgbToHsl(a[0],a[1],a[2]));return this._.formatHslString("hsl",a[0],a[1],a[2])},getHsla:function(){var a;if(!this._.isValidColor)return this._.defaultValue;
+a=this._.type===CKEDITOR.tools.color.TYPE_HSL?[this._.hue,this._.saturation,this._.lightness]:this._.rgbToHsl(this._.red,this._.green,this._.blue);return this._.formatHslString("hsla",a[0],a[1],a[2],this._.alpha)},getInitialValue:function(){return this._.initialColorCode}},_:{initialColorCode:"",isValidColor:!0,type:0,hue:0,saturation:0,lightness:0,red:0,green:0,blue:0,alpha:1,blendAlphaColor:function(a,b,e,c){return CKEDITOR.tools.array.map([a,b,e],function(a){return Math.round(CKEDITOR.tools.color.MAX_RGB_CHANNEL_VALUE-
+c*(CKEDITOR.tools.color.MAX_RGB_CHANNEL_VALUE-a))})},formatHexString:function(b,e,f,c){b="#"+a(b)+a(e)+a(f);void 0!==c&&(b+=a(c));return b.toUpperCase()},formatRgbString:function(a,b,e,c,d){b=[b,e,c];void 0!==d&&b.push(d);return a+"("+b.join(",")+")"},formatHslString:function(a,b,e,c,d){return a+"("+b+","+e+"%,"+c+"%"+(void 0!==d?","+d:"")+")"},parseInput:function(a){if("string"!==typeof a)this._.isValidColor=!1;else{a=CKEDITOR.tools.trim(a);var b=this._.matchStringToNamedColor(a);b&&(a=b);var b=
+this._.extractColorChannelsFromHex(a),e=this._.extractColorChannelsFromRgba(a);a=this._.extractColorChannelsFromHsla(a);(a=b||e||a)?(this._.type=a.type,this._.red=a.red,this._.green=a.green,this._.blue=a.blue,this._.alpha=a.alpha,a.type===CKEDITOR.tools.color.TYPE_HSL&&(this._.hue=a.hue,this._.saturation=a.saturation,this._.lightness=a.lightness)):this._.isValidColor=!1}},matchStringToNamedColor:function(a){return CKEDITOR.tools.color.namedColors[a.toLowerCase()]||null},extractColorChannelsFromHex:function(a){-1===
+a.indexOf("#")&&(a="#"+a);a.match(CKEDITOR.tools.color.hex3CharsRegExp)&&(a=this._.hex3ToHex6(a));a.match(CKEDITOR.tools.color.hex4CharsRegExp)&&(a=this._.hex4ToHex8(a));if(!a.match(CKEDITOR.tools.color.hex6CharsRegExp)&&!a.match(CKEDITOR.tools.color.hex8CharsRegExp))return null;a=a.split("");var b=1;a[7]&&a[8]&&(b=parseInt(a[7]+a[8],16),b/=CKEDITOR.tools.color.MAX_RGB_CHANNEL_VALUE,b=Number(b.toFixed(1)));return{type:CKEDITOR.tools.color.TYPE_RGB,red:parseInt(a[1]+a[2],16),green:parseInt(a[3]+a[4],
+16),blue:parseInt(a[5]+a[6],16),alpha:b}},extractColorChannelsFromRgba:function(a){var e=this._.extractColorChannelsByPattern(a,CKEDITOR.tools.color.rgbRegExp);if(!e||3>e.length||4<e.length)return null;var f=4===e.length;a=b(e[0],CKEDITOR.tools.color.MAX_RGB_CHANNEL_VALUE);var c=b(e[1],CKEDITOR.tools.color.MAX_RGB_CHANNEL_VALUE),d=b(e[2],CKEDITOR.tools.color.MAX_RGB_CHANNEL_VALUE),g=1;f&&(g=h(e[3],CKEDITOR.tools.color.MAX_ALPHA_CHANNEL_VALUE));e={type:CKEDITOR.tools.color.TYPE_RGB,red:a,green:c,blue:d,
+alpha:g};return this._.areColorChannelsValid(a,c,d,g)?e:null},extractColorChannelsFromHsla:function(a){var e=this._.extractColorChannelsByPattern(a,CKEDITOR.tools.color.hslRegExp);if(!e||3>e.length||4<e.length)return null;var f=4===e.length,c=b(e[0],CKEDITOR.tools.color.MAX_HUE_CHANNEL_VALUE),d=h(e[1],CKEDITOR.tools.color.MAX_SATURATION_LIGHTNESS_CHANNEL_VALUE),g=h(e[2],CKEDITOR.tools.color.MAX_SATURATION_LIGHTNESS_CHANNEL_VALUE),n=1;a=this._.hslToRgb(c,d,g);f&&(n=h(e[3],CKEDITOR.tools.color.MAX_ALPHA_CHANNEL_VALUE));
+a.push(n);e={type:CKEDITOR.tools.color.TYPE_HSL,red:a[0],green:a[1],blue:a[2],alpha:a[3],hue:c,saturation:Math.round(100*d),lightness:Math.round(100*g)};return this._.areColorChannelsValid(a[0],a[1],a[2],a[3])?e:null},hex3ToHex6:function(a){a=a.split("");return"#"+a[1]+a[1]+a[2]+a[2]+a[3]+a[3]},hex4ToHex8:function(a){return this._.hex3ToHex6(a.substr(0,4))+CKEDITOR.tools.repeat(a[4],2)},extractColorChannelsByPattern:function(a,b){var e=a.match(b);if(!e)return null;var c=-1===e[1].indexOf(",")?/\s/:
+",",c=e[1].split(c),c=CKEDITOR.tools.array.reduce(c,function(a,c){var b=CKEDITOR.tools.trim(c);return 0===b.length?a:a.concat([b])},[]);e[2]&&(e=CKEDITOR.tools.trim(e[2].replace(/[\/,]/,"")),c.push(e));return c},areColorChannelsValid:function(a,b,f,c){return e(a,0,CKEDITOR.tools.color.MAX_RGB_CHANNEL_VALUE)&&e(b,0,CKEDITOR.tools.color.MAX_RGB_CHANNEL_VALUE)&&e(f,0,CKEDITOR.tools.color.MAX_RGB_CHANNEL_VALUE)&&e(c,0,CKEDITOR.tools.color.MAX_ALPHA_CHANNEL_VALUE)},hslToRgb:function(a,b,e){var c=function(c){var g=
+(c+a/30)%12;c=b*Math.min(e,1-e);g=Math.min(g-3,9-g,1);g=Math.max(-1,g);return Math.round((e-c*g)*CKEDITOR.tools.color.MAX_RGB_CHANNEL_VALUE)};return[c(0),c(8),c(4)]},rgbToHsl:function(a,b,e){a/=CKEDITOR.tools.color.MAX_RGB_CHANNEL_VALUE;b/=CKEDITOR.tools.color.MAX_RGB_CHANNEL_VALUE;var c=e/CKEDITOR.tools.color.MAX_RGB_CHANNEL_VALUE,d=Math.max(a,b,c),g=Math.min(a,b,c);e=d-g;var f=0;switch(d){case a:f=(b-c)/e%6;break;case b:f=(c-a)/e+2;break;case c:f=(a-b)/e+4}a=0===e?0:60*f;b=(d+g)/2;d=0;1!==b&&0!==
+b&&(d=e/(1-Math.abs(2*b-1)));a=Math.round(a);d=Math.round(100*d);b=Math.round(100*b);return[a,d,b]}},statics:{TYPE_RGB:1,TYPE_HSL:2,MAX_RGB_CHANNEL_VALUE:255,MAX_ALPHA_CHANNEL_VALUE:1,MAX_HUE_CHANNEL_VALUE:360,MAX_SATURATION_LIGHTNESS_CHANNEL_VALUE:1,hex3CharsRegExp:/#([0-9a-f]{3}$)/gim,hex4CharsRegExp:/#([0-9a-f]{4}$)/gim,hex6CharsRegExp:/#([0-9a-f]{6}$)/gim,hex8CharsRegExp:/#([0-9a-f]{8}$)/gim,rgbRegExp:/rgba?\(([.,\d\s%]*)(\s*\/\s*[\d.%]+)?\s*\)/i,hslRegExp:/hsla?\((\s*(?:[.\d]+(?:deg)?)(?:\s*,?\s*[.\d]+%){2})((?:(?:\s*\/\s*)|(?:\s*,\s*))[\d.]+%?)?\s*\)/i,
+namedColors:{aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aqua:"#00FFFF",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blue:"#0000FF",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgreen:"#006400",
+darkgrey:"#A9A9A9",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",fuchsia:"#FF00FF",gainsboro:"#DCDCDC",
+ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",gray:"#808080",green:"#008000",greenyellow:"#ADFF2F",grey:"#808080",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgray:"#D3D3D3",lightgreen:"#90EE90",lightgrey:"#D3D3D3",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",
+lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",lime:"#00FF00",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",maroon:"#800000",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",
+moccasin:"#FFE4B5",navajowhite:"#FFDEAD",navy:"#000080",oldlace:"#FDF5E6",olive:"#808000",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",purple:"#800080",rebeccapurple:"#663399",red:"#FF0000",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",
+seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",silver:"#C0C0C0",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",teal:"#008080",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",windowtext:"windowtext",wheat:"#F5DEB3",white:"#FFFFFF",whitesmoke:"#F5F5F5",yellow:"#FFFF00",yellowgreen:"#9ACD32"}}});CKEDITOR.tools.style.parse._colors=CKEDITOR.tools.color.namedColors}(),CKEDITOR.dom.comment=
+function(b,h){"string"==typeof b&&(b=(h?h.$: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"\x3c!--"+this.$.nodeValue+"--\x3e"}}),"use strict",function(){var b={},h={},f;for(f in CKEDITOR.dtd.$blockLimit)f in CKEDITOR.dtd.$list||(b[f]=1);for(f in CKEDITOR.dtd.$block)f in CKEDITOR.dtd.$blockLimit||f in CKEDITOR.dtd.$empty||
+(h[f]=1);CKEDITOR.dom.elementPath=function(e,a){var f=null,l=null,m=[],c=e,d;a=a||e.getDocument().getBody();c||(c=a);do if(c.type==CKEDITOR.NODE_ELEMENT){m.push(c);if(!this.lastElement&&(this.lastElement=c,c.is(CKEDITOR.dtd.$object)||"false"==c.getAttribute("contenteditable")))continue;if(c.equals(a))break;if(!l&&(d=c.getName(),"true"==c.getAttribute("contenteditable")?l=c:!f&&h[d]&&(f=c),b[d])){if(d=!f&&"div"==d){a:{d=c.getChildren();for(var g=0,n=d.count();g<n;g++){var y=d.getItem(g);if(y.type==
+CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$block[y.getName()]){d=!0;break a}}d=!1}d=!d}d?f=c:l=c}}while(c=c.getParent());l||(l=a);this.block=f;this.blockLimit=l;this.root=a;this.elements=m}}(),CKEDITOR.dom.elementPath.prototype={compare:function(b){var h=this.elements;b=b&&b.elements;if(!b||h.length!=b.length)return!1;for(var f=0;f<h.length;f++)if(!h[f].equals(b[f]))return!1;return!0},contains:function(b,h,f){var e=0,a;"string"==typeof b&&(a=function(a){return a.getName()==b});b instanceof CKEDITOR.dom.element?
+a=function(a){return a.equals(b)}:CKEDITOR.tools.isArray(b)?a=function(a){return-1<CKEDITOR.tools.indexOf(b,a.getName())}:"function"==typeof b?a=b:"object"==typeof b&&(a=function(a){return a.getName()in b});var k=this.elements,l=k.length;h&&(f?e+=1:--l);f&&(k=Array.prototype.slice.call(k,0),k.reverse());for(;e<l;e++)if(a(k[e]))return k[e];return null},isContextFor:function(b){var h;return b in CKEDITOR.dtd.$block?(h=this.contains(CKEDITOR.dtd.$intermediate)||this.root.equals(this.block)&&this.block||
+this.blockLimit,!!h.getDtd()[b]):!0},direction:function(){return(this.block||this.blockLimit||this.root).getDirection(1)}},CKEDITOR.dom.text=function(b,h){"string"==typeof b&&(b=(h?h.$: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},isEmpty:function(b){var h=
+this.getText();b&&(h=CKEDITOR.tools.trim(h));return!h||h===CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE},split:function(b){var h=this.$.parentNode,f=h.childNodes.length,e=this.getLength(),a=this.getDocument(),k=new CKEDITOR.dom.text(this.$.splitText(b),a);h.childNodes.length==f&&(b>=e?(k=a.createText(""),k.insertAfter(this)):(b=a.createText(""),b.insertAfter(k),b.remove()));return k},substring:function(b,h){return"number"!=typeof h?this.$.nodeValue.substr(b):this.$.nodeValue.substring(b,h)}}),function(){function b(b,
+e,a){var h=b.serializable,l=e[a?"endContainer":"startContainer"],m=a?"endOffset":"startOffset",c=h?e.document.getById(b.startNode):b.startNode;b=h?e.document.getById(b.endNode):b.endNode;l.equals(c.getPrevious())?(e.startOffset=e.startOffset-l.getLength()-b.getPrevious().getLength(),l=b.getNext()):l.equals(b.getPrevious())&&(e.startOffset-=l.getLength(),l=b.getNext());l.equals(c.getParent())&&e[m]++;l.equals(b.getParent())&&e[m]++;e[a?"endContainer":"startContainer"]=l;return e}CKEDITOR.dom.rangeList=
+function(b){if(b instanceof CKEDITOR.dom.rangeList)return b;b?b instanceof CKEDITOR.dom.range&&(b=[b]):b=[];return CKEDITOR.tools.extend(b,h)};var h={createIterator:function(){var b=this,e=CKEDITOR.dom.walker.bookmark(),a=[],h;return{getNextRange:function(l){h=void 0===h?0:h+1;var m=b[h];if(m&&1<b.length){if(!h)for(var c=b.length-1;0<=c;c--)a.unshift(b[c].createBookmark(!0));if(l)for(var d=0;b[h+d+1];){var g=m.document;l=0;c=g.getById(a[d].endNode);for(g=g.getById(a[d+1].startNode);;){c=c.getNextSourceNode(!1);
+if(g.equals(c))l=1;else if(e(c)||c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary())continue;break}if(!l)break;d++}for(m.moveToBookmark(a.shift());d--;)c=b[++h],c.moveToBookmark(a.shift()),m.setEnd(c.endContainer,c.endOffset)}return m}}},createBookmarks:function(f){for(var e=[],a,h=0;h<this.length;h++){e.push(a=this[h].createBookmark(f,!0));for(var l=h+1;l<this.length;l++)this[l]=b(a,this[l]),this[l]=b(a,this[l],!0)}return e},createBookmarks2:function(b){for(var e=[],a=0;a<this.length;a++)e.push(this[a].createBookmark2(b));
+return e},moveToBookmarks:function(b){for(var e=0;e<this.length;e++)this[e].moveToBookmark(b[e])}}}(),function(){function b(){return CKEDITOR.getUrl(CKEDITOR.skinName.split(",")[1]||"skins/"+CKEDITOR.skinName.split(",")[0]+"/")}function h(a){var c=CKEDITOR.skin["ua_"+a],e=CKEDITOR.env;if(c)for(var c=c.split(",").sort(function(a,c){return a>c?-1:1}),f=0,h;f<c.length;f++)if(h=c[f],e.ie&&(h.replace(/^ie/,"")==e.version||e.quirks&&"iequirks"==h)&&(h="ie"),e[h]){a+="_"+c[f];break}return CKEDITOR.getUrl(b()+
+a+".css")}function f(a,c){k[a]||(CKEDITOR.document.appendStyleSheet(h(a)),k[a]=1);c&&c()}function e(a){var c=a.getById(l);c||(c=a.getHead().append("style"),c.setAttribute("id",l),c.setAttribute("type","text/css"));return c}function a(a,c,b){var e,f,h;if(CKEDITOR.env.webkit)for(c=c.split("}").slice(0,-1),f=0;f<c.length;f++)c[f]=c[f].split("{");for(var k=0;k<a.length;k++)if(CKEDITOR.env.webkit)for(f=0;f<c.length;f++){h=c[f][1];for(e=0;e<b.length;e++)h=h.replace(b[e][0],b[e][1]);a[k].$.sheet.addRule(c[f][0],
+h)}else{h=c;for(e=0;e<b.length;e++)h=h.replace(b[e][0],b[e][1]);CKEDITOR.env.ie&&11>CKEDITOR.env.version?a[k].$.styleSheet.cssText+=h:a[k].$.innerHTML+=h}}var k={};CKEDITOR.skin={path:b,loadPart:function(a,c){CKEDITOR.skin.name!=CKEDITOR.skinName.split(",")[0]?CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(b()+"skin.js"),function(){f(a,c)}):f(a,c)},getPath:function(a){return CKEDITOR.getUrl(h(a))},icons:{},addIcon:function(a,c,b,e){a=a.toLowerCase();this.icons[a]||(this.icons[a]={path:c,offset:b||0,bgsize:e||
+"16px"})},getIconStyle:function(a,c,b,e,f){var h;a&&(a=a.toLowerCase(),c&&(h=this.icons[a+"-rtl"]),h||(h=this.icons[a]));a=b||h&&h.path||"";e=e||h&&h.offset;f=f||h&&h.bgsize||"16px";a&&(a=a.replace(/'/g,"\\'"));return a&&"background-image:url('"+CKEDITOR.getUrl(a)+"');background-position:0 "+e+"px;background-size:"+f+";"}};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{getUiColor:function(){return this.uiColor},setUiColor:function(b){var g=e(CKEDITOR.document);return(this.setUiColor=function(b){this.uiColor=
+b;var d=CKEDITOR.skin.chameleon,e="",f="";"function"==typeof d&&(e=d(this,"editor"),f=d(this,"panel"));b=[[c,b]];a([g],e,b);a(m,f,b)}).call(this,b)}});var l="cke_ui_color",m=[],c=/\$color/g;CKEDITOR.on("instanceLoaded",function(b){if(!CKEDITOR.env.ie||!CKEDITOR.env.quirks){var g=b.editor;b=function(b){b=(b.data[0]||b.data).element.getElementsByTag("iframe").getItem(0).getFrameDocument();if(!b.getById("cke_ui_color")){var d=e(b);m.push(d);g.on("destroy",function(){m=CKEDITOR.tools.array.filter(m,function(a){return d!==
+a})});(b=g.getUiColor())&&a([d],CKEDITOR.skin.chameleon(g,"panel"),[[c,b]])}};g.on("panelShow",b);g.on("menuShow",b);g.config.uiColor&&g.setUiColor(g.config.uiColor)}})}(),function(){var b=CKEDITOR.dom.element.createFromHtml('\x3cdiv style\x3d"width:0;height:0;position:absolute;left:-10000px;border:1px solid;border-color:red blue"\x3e\x3c/div\x3e',CKEDITOR.document);b.appendTo(CKEDITOR.document.getHead());try{var h=b.getComputedStyle("border-top-color"),f=b.getComputedStyle("border-right-color");
+CKEDITOR.env.hc=!(!h||h!=f)}catch(e){CKEDITOR.env.hc=!1}b.remove();CKEDITOR.env.hc&&(CKEDITOR.env.cssClass+=" cke_hc");CKEDITOR.document.appendStyleText(".cke{visibility:hidden;}");CKEDITOR.status="loaded";CKEDITOR.fireOnce("loaded");if(b=CKEDITOR._.pending)for(delete CKEDITOR._.pending,h=0;h<b.length;h++)CKEDITOR.editor.prototype.constructor.apply(b[h][0],b[h][1]),CKEDITOR.add(b[h][0])}(),CKEDITOR.skin.name="moono-lisa",CKEDITOR.skin.ua_editor="ie,iequirks,ie8,gecko",CKEDITOR.skin.ua_dialog="ie,iequirks,ie8",
+CKEDITOR.skin.chameleon=function(){var b=function(){return function(b,e){for(var a=b.match(/[^#]./g),h=0;3>h;h++){var l=h,m;m=parseInt(a[h],16);m=("0"+(0>e?0|m*(1+e):0|m+(255-m)*e).toString(16)).slice(-2);a[l]=m}return"#"+a.join("")}}(),h={editor:new CKEDITOR.template("{id}.cke_chrome [border-color:{defaultBorder};] {id} .cke_top [ background-color:{defaultBackground};border-bottom-color:{defaultBorder};] {id} .cke_bottom [background-color:{defaultBackground};border-top-color:{defaultBorder};] {id} .cke_resizer [border-right-color:{ckeResizer}] {id} .cke_dialog_title [background-color:{defaultBackground};border-bottom-color:{defaultBorder};] {id} .cke_dialog_footer [background-color:{defaultBackground};outline-color:{defaultBorder};] {id} .cke_dialog_tab [background-color:{dialogTab};border-color:{defaultBorder};] {id} .cke_dialog_tab:hover [background-color:{lightBackground};] {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} a.cke_button_off:hover,{id} a.cke_button_off:focus,{id} a.cke_button_off:active [background-color:{darkBackground};border-color:{toolbarElementsBorder};] {id} .cke_button_on [background-color:{ckeButtonOn};border-color:{toolbarElementsBorder};] {id} .cke_toolbar_separator,{id} .cke_toolgroup a.cke_button:last-child:after,{id} .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after [background-color: {toolbarElementsBorder};border-color: {toolbarElementsBorder};] {id} a.cke_combo_button:hover,{id} a.cke_combo_button:focus,{id} .cke_combo_on a.cke_combo_button [border-color:{toolbarElementsBorder};background-color:{darkBackground};] {id} .cke_combo:after [border-color:{toolbarElementsBorder};] {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:{darkBackground};] {id}.cke_panel [border-color:{defaultBorder};] "),
 panel:new CKEDITOR.template(".cke_panel_grouptitle [background-color:{lightBackground};border-color:{defaultBorder};] .cke_menubutton_icon [background-color:{menubuttonIcon};] .cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active [background-color:{menubuttonHover};] .cke_menubutton:hover .cke_menubutton_icon, .cke_menubutton:focus .cke_menubutton_icon, .cke_menubutton:active .cke_menubutton_icon [background-color:{menubuttonIconHover};] .cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon [background-color:{menubuttonIcon};] .cke_menuseparator [background-color:{menubuttonIcon};] a:hover.cke_colorbox, a:active.cke_colorbox [border-color:{defaultBorder};] a:hover.cke_colorauto, a:hover.cke_colormore, a:active.cke_colorauto, a:active.cke_colormore [background-color:{ckeColorauto};border-color:{defaultBorder};] ")};
 return function(f,e){var a=b(f.uiColor,.4),a={id:"."+f.id,defaultBorder:b(a,-.2),toolbarElementsBorder:b(a,-.25),defaultBackground:a,lightBackground:b(a,.8),darkBackground:b(a,-.15),ckeButtonOn:b(a,.4),ckeResizer:b(a,-.4),ckeColorauto:b(a,.8),dialogBody:b(a,.7),dialogTab:b(a,.65),dialogTabSelected:"#FFF",dialogTabSelectedBorder:"#FFF",elementsPathColor:b(a,-.6),menubuttonHover:b(a,.1),menubuttonIcon:b(a,.5),menubuttonIconHover:b(a,.3)};return h[e].output(a).replace(/\[/g,"{").replace(/\]/g,"}")}}(),
 CKEDITOR.plugins.add("dialogui",{onLoad:function(){var b=function(a){this._||(this._={});this._["default"]=this._.initValue=a["default"]||"";this._.required=a.required||!1;for(var b=[this._],g=1;g<arguments.length;g++)b.push(arguments[g]);b.push(!0);CKEDITOR.tools.extend.apply(CKEDITOR.tools,b);return this._},h={build:function(a,b,g){return new CKEDITOR.ui.dialog.textInput(a,b,g)}},f={build:function(a,b,g){return new CKEDITOR.ui.dialog[b.type](a,b,g)}},e={isChanged:function(){return this.getValue()!=
 this.getInitValue()},reset:function(a){this.setValue(this.getInitValue(),a)},setInitValue:function(){this._.initValue=this.getValue()},resetInitValue:function(){this._.initValue=this._["default"]},getInitValue:function(){return this._.initValue}},a=CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,{onChange:function(a,b){this._.domOnChangeRegistered||(a.on("load",function(){this.getInputElement().on("change",function(){a.parts.dialog.isVisible()&&this.fire("change",{value:this.getValue()})},
-this)},this),this._.domOnChangeRegistered=!0);this.on("change",b)}},!0),m=/^on([A-Z]\w+)/,k=function(a){for(var b in a)(m.test(b)||"title"==b||"type"==b)&&delete a[b];return a},l=function(a){a=a.data.getKeystroke();a==CKEDITOR.SHIFT+CKEDITOR.ALT+36?this.setDirectionMarker("ltr"):a==CKEDITOR.SHIFT+CKEDITOR.ALT+35&&this.setDirectionMarker("rtl")};CKEDITOR.tools.extend(CKEDITOR.ui.dialog,{labeledElement:function(a,d,g,e){if(!(4>arguments.length)){var f=b.call(this,d);f.labelId=CKEDITOR.tools.getNextId()+
-"_label";this._.children=[];var h={role:d.role||"presentation"};d.includeLabel&&(h["aria-labelledby"]=f.labelId);CKEDITOR.ui.dialog.uiElement.call(this,a,d,g,"div",null,h,function(){var b=[],g=d.required?" cke_required":"";"horizontal"!=d.labelLayout?b.push('\x3clabel class\x3d"cke_dialog_ui_labeled_label'+g+'" ',' id\x3d"'+f.labelId+'"',f.inputId?' for\x3d"'+f.inputId+'"':"",(d.labelStyle?' style\x3d"'+d.labelStyle+'"':"")+"\x3e",d.label,"\x3c/label\x3e",'\x3cdiv class\x3d"cke_dialog_ui_labeled_content"',
-d.controlStyle?' style\x3d"'+d.controlStyle+'"':"",' role\x3d"presentation"\x3e',e.call(this,a,d),"\x3c/div\x3e"):(g={type:"hbox",widths:d.widths,padding:0,children:[{type:"html",html:'\x3clabel class\x3d"cke_dialog_ui_labeled_label'+g+'" id\x3d"'+f.labelId+'" for\x3d"'+f.inputId+'"'+(d.labelStyle?' style\x3d"'+d.labelStyle+'"':"")+"\x3e"+CKEDITOR.tools.htmlEncode(d.label)+"\x3c/label\x3e"},{type:"html",html:'\x3cspan class\x3d"cke_dialog_ui_labeled_content"'+(d.controlStyle?' style\x3d"'+d.controlStyle+
-'"':"")+"\x3e"+e.call(this,a,d)+"\x3c/span\x3e"}]},CKEDITOR.dialog._.uiElementBuilders.hbox.build(a,g,b));return b.join("")})}},textInput:function(a,d,g){if(!(3>arguments.length)){b.call(this,d);var e=this._.inputId=CKEDITOR.tools.getNextId()+"_textInput",f={"class":"cke_dialog_ui_input_"+d.type,id:e,type:d.type};d.validate&&(this.validate=d.validate);d.maxLength&&(f.maxlength=d.maxLength);d.size&&(f.size=d.size);d.inputStyle&&(f.style=d.inputStyle);var h=this,k=!1;a.on("load",function(){h.getInputElement().on("keydown",
-function(a){13==a.data.getKeystroke()&&(k=!0)});h.getInputElement().on("keyup",function(b){13==b.data.getKeystroke()&&k&&(a.getButton("ok")&&setTimeout(function(){a.getButton("ok").click()},0),k=!1);h.bidi&&l.call(h,b)},null,null,1E3)});CKEDITOR.ui.dialog.labeledElement.call(this,a,d,g,function(){var a=['\x3cdiv class\x3d"cke_dialog_ui_input_',d.type,'" role\x3d"presentation"'];d.width&&a.push('style\x3d"width:'+d.width+'" ');a.push("\x3e\x3cinput ");f["aria-labelledby"]=this._.labelId;this._.required&&
-(f["aria-required"]=this._.required);for(var c in f)a.push(c+'\x3d"'+f[c]+'" ');a.push(" /\x3e\x3c/div\x3e");return a.join("")})}},textarea:function(a,d,g){if(!(3>arguments.length)){b.call(this,d);var e=this,f=this._.inputId=CKEDITOR.tools.getNextId()+"_textarea",h={};d.validate&&(this.validate=d.validate);h.rows=d.rows||5;h.cols=d.cols||20;h["class"]="cke_dialog_ui_input_textarea "+(d["class"]||"");"undefined"!=typeof d.inputStyle&&(h.style=d.inputStyle);d.dir&&(h.dir=d.dir);if(e.bidi)a.on("load",
-function(){e.getInputElement().on("keyup",l)},e);CKEDITOR.ui.dialog.labeledElement.call(this,a,d,g,function(){h["aria-labelledby"]=this._.labelId;this._.required&&(h["aria-required"]=this._.required);var a=['\x3cdiv class\x3d"cke_dialog_ui_input_textarea" role\x3d"presentation"\x3e\x3ctextarea id\x3d"',f,'" '],c;for(c in h)a.push(c+'\x3d"'+CKEDITOR.tools.htmlEncode(h[c])+'" ');a.push("\x3e",CKEDITOR.tools.htmlEncode(e._["default"]),"\x3c/textarea\x3e\x3c/div\x3e");return a.join("")})}},checkbox:function(a,
-d,g){if(!(3>arguments.length)){var e=b.call(this,d,{"default":!!d["default"]});d.validate&&(this.validate=d.validate);CKEDITOR.ui.dialog.uiElement.call(this,a,d,g,"span",null,null,function(){var b=CKEDITOR.tools.extend({},d,{id:d.id?d.id+"_checkbox":CKEDITOR.tools.getNextId()+"_checkbox"},!0),g=[],f=CKEDITOR.tools.getNextId()+"_label",h={"class":"cke_dialog_ui_checkbox_input",type:"checkbox","aria-labelledby":f};k(b);d["default"]&&(h.checked="checked");"undefined"!=typeof b.inputStyle&&(b.style=b.inputStyle);
-e.checkbox=new CKEDITOR.ui.dialog.uiElement(a,b,g,"input",null,h);g.push(' \x3clabel id\x3d"',f,'" for\x3d"',h.id,'"'+(d.labelStyle?' style\x3d"'+d.labelStyle+'"':"")+"\x3e",CKEDITOR.tools.htmlEncode(d.label),"\x3c/label\x3e");return g.join("")})}},radio:function(a,d,g){if(!(3>arguments.length)){b.call(this,d);this._["default"]||(this._["default"]=this._.initValue=d.items[0][1]);d.validate&&(this.validate=d.validate);var e=[],f=this;d.role="radiogroup";d.includeLabel=!0;CKEDITOR.ui.dialog.labeledElement.call(this,
-a,d,g,function(){for(var b=[],g=[],h=(d.id?d.id:CKEDITOR.tools.getNextId())+"_radio",l=0;l<d.items.length;l++){var m=d.items[l],u=void 0!==m[2]?m[2]:m[0],z=void 0!==m[1]?m[1]:m[0],q=CKEDITOR.tools.getNextId()+"_radio_input",v=q+"_label",q=CKEDITOR.tools.extend({},d,{id:q,title:null,type:null},!0),u=CKEDITOR.tools.extend({},q,{title:u},!0),B={type:"radio","class":"cke_dialog_ui_radio_input",name:h,value:z,"aria-labelledby":v},D=[];f._["default"]==z&&(B.checked="checked");k(q);k(u);"undefined"!=typeof q.inputStyle&&
-(q.style=q.inputStyle);q.keyboardFocusable=!0;e.push(new CKEDITOR.ui.dialog.uiElement(a,q,D,"input",null,B));D.push(" ");new CKEDITOR.ui.dialog.uiElement(a,u,D,"label",null,{id:v,"for":B.id},m[0]);b.push(D.join(""))}new CKEDITOR.ui.dialog.hbox(a,e,b,g);return g.join("")});this._.children=e}},button:function(a,d,g){if(arguments.length){"function"==typeof d&&(d=d(a.getParentEditor()));b.call(this,d,{disabled:d.disabled||!1});CKEDITOR.event.implementOn(this);var e=this;a.on("load",function(){var a=this.getElement();
-(function(){a.on("click",function(a){e.click();a.data.preventDefault()});a.on("keydown",function(a){a.data.getKeystroke()in{32:1}&&(e.click(),a.data.preventDefault())})})();a.unselectable()},this);var f=CKEDITOR.tools.extend({},d);delete f.style;var h=CKEDITOR.tools.getNextId()+"_label";CKEDITOR.ui.dialog.uiElement.call(this,a,f,g,"a",null,{style:d.style,href:"javascript:void(0)",title:d.label,hidefocus:"true","class":d["class"],role:"button","aria-labelledby":h},'\x3cspan id\x3d"'+h+'" class\x3d"cke_dialog_ui_button"\x3e'+
-CKEDITOR.tools.htmlEncode(d.label)+"\x3c/span\x3e")}},select:function(a,d,g){if(!(3>arguments.length)){var e=b.call(this,d);d.validate&&(this.validate=d.validate);e.inputId=CKEDITOR.tools.getNextId()+"_select";CKEDITOR.ui.dialog.labeledElement.call(this,a,d,g,function(){var b=CKEDITOR.tools.extend({},d,{id:d.id?d.id+"_select":CKEDITOR.tools.getNextId()+"_select"},!0),g=[],f=[],h={id:e.inputId,"class":"cke_dialog_ui_input_select","aria-labelledby":this._.labelId};g.push('\x3cdiv class\x3d"cke_dialog_ui_input_',
-d.type,'" role\x3d"presentation"');d.width&&g.push('style\x3d"width:'+d.width+'" ');g.push("\x3e");void 0!==d.size&&(h.size=d.size);void 0!==d.multiple&&(h.multiple=d.multiple);k(b);for(var l=0,m;l<d.items.length&&(m=d.items[l]);l++)f.push('\x3coption value\x3d"',CKEDITOR.tools.htmlEncode(void 0!==m[1]?m[1]:m[0]).replace(/"/g,"\x26quot;"),'" /\x3e ',CKEDITOR.tools.htmlEncode(m[0]));"undefined"!=typeof b.inputStyle&&(b.style=b.inputStyle);e.select=new CKEDITOR.ui.dialog.uiElement(a,b,g,"select",null,
-h,f.join(""));g.push("\x3c/div\x3e");return g.join("")})}},file:function(a,d,g){if(!(3>arguments.length)){void 0===d["default"]&&(d["default"]="");var e=CKEDITOR.tools.extend(b.call(this,d),{definition:d,buttons:[]});d.validate&&(this.validate=d.validate);a.on("load",function(){CKEDITOR.document.getById(e.frameId).getParent().addClass("cke_dialog_ui_input_file")});CKEDITOR.ui.dialog.labeledElement.call(this,a,d,g,function(){e.frameId=CKEDITOR.tools.getNextId()+"_fileInput";var a=['\x3ciframe frameborder\x3d"0" allowtransparency\x3d"0" class\x3d"cke_dialog_ui_input_file" role\x3d"presentation" id\x3d"',
-e.frameId,'" title\x3d"',d.label,'" src\x3d"javascript:void('];a.push(CKEDITOR.env.ie?"(function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+"})()":"0");a.push(')"\x3e\x3c/iframe\x3e');return a.join("")})}},fileButton:function(a,d,g){var e=this;if(!(3>arguments.length)){b.call(this,d);d.validate&&(this.validate=d.validate);var f=CKEDITOR.tools.extend({},d),h=f.onClick;f.className=(f.className?f.className+" ":"")+"cke_dialog_ui_button";f.onClick=function(b){var g=
-d["for"];b=h?h.call(this,b):!1;!1!==b&&("xhr"!==b&&a.getContentElement(g[0],g[1]).submit(),this.disable())};a.on("load",function(){a.getContentElement(d["for"][0],d["for"][1])._.buttons.push(e)});CKEDITOR.ui.dialog.button.call(this,a,f,g)}},html:function(){var a=/^\s*<[\w:]+\s+([^>]*)?>/,b=/^(\s*<[\w:]+(?:\s+[^>]*)?)((?:.|\r|\n)+)$/,g=/\/$/;return function(e,f,h){if(!(3>arguments.length)){var k=[],l=f.html;"\x3c"!=l.charAt(0)&&(l="\x3cspan\x3e"+l+"\x3c/span\x3e");var m=f.focus;if(m){var x=this.focus;
-this.focus=function(){("function"==typeof m?m:x).call(this);this.fire("focus")};f.isFocusable&&(this.isFocusable=this.isFocusable);this.keyboardFocusable=!0}CKEDITOR.ui.dialog.uiElement.call(this,e,f,k,"span",null,null,"");k=k.join("").match(a);l=l.match(b)||["","",""];g.test(l[1])&&(l[1]=l[1].slice(0,-1),l[2]="/"+l[2]);h.push([l[1]," ",k[1]||"",l[2]].join(""))}}}(),fieldset:function(a,b,g,e,f){var h=f.label;this._={children:b};CKEDITOR.ui.dialog.uiElement.call(this,a,f,e,"fieldset",null,null,function(){var a=
-[];h&&a.push("\x3clegend"+(f.labelStyle?' style\x3d"'+f.labelStyle+'"':"")+"\x3e"+h+"\x3c/legend\x3e");for(var c=0;c<g.length;c++)a.push(g[c]);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(a){var b=CKEDITOR.document.getById(this._.labelId);1>b.getChildCount()?(new CKEDITOR.dom.text(a,CKEDITOR.document)).appendTo(b):b.getChild(0).$.nodeValue=
-a;return this},getLabel:function(){var a=CKEDITOR.document.getById(this._.labelId);return!a||1>a.getChildCount()?"":a.getChild(0).getText()},eventProcessors:a},!0);CKEDITOR.ui.dialog.button.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{click:function(){return this._.disabled?!1:this.fire("click",{dialog:this._.dialog})},enable:function(){this._.disabled=!1;var a=this.getElement();a&&a.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(a,b){this.on("click",function(){b.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 a=this.selectParentTab();setTimeout(function(){var b=a.getInputElement();b&&b.$.focus()},0)},select:function(){var a=this.selectParentTab();setTimeout(function(){var b=a.getInputElement();b&&(b.$.focus(),b.$.select())},0)},accessKeyUp:function(){this.select()},setValue:function(a){if(this.bidi){var b=a&&a.charAt(0);(b="‪"==b?"ltr":"‫"==b?"rtl":null)&&(a=a.slice(1));this.setDirectionMarker(b)}a||(a="");return CKEDITOR.ui.dialog.uiElement.prototype.setValue.apply(this,arguments)},
-getValue:function(){var a=CKEDITOR.ui.dialog.uiElement.prototype.getValue.call(this);if(this.bidi&&a){var b=this.getDirectionMarker();b&&(a=("ltr"==b?"‪":"‫")+a)}return a},setDirectionMarker:function(a){var b=this.getInputElement();a?b.setAttributes({dir:a,"data-cke-dir-marker":a}):this.getDirectionMarker()&&b.removeAttributes(["dir","data-cke-dir-marker"])},getDirectionMarker:function(){return this.getInputElement().data("cke-dir-marker")},keyboardFocusable:!0},e,!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(a,b,g){var e=new CKEDITOR.dom.element("option",this.getDialog().getParentEditor().document),f=this.getInputElement().$;e.$.text=a;e.$.value=void 0===b||null===b?a:b;void 0===g||null===g?CKEDITOR.env.ie?f.add(e.$):f.add(e.$,null):f.add(e.$,g);return this},remove:function(a){this.getInputElement().$.remove(a);
-return this},clear:function(){for(var a=this.getInputElement().$;0<a.length;)a.remove(0);return this},keyboardFocusable:!0},e,!0);CKEDITOR.ui.dialog.checkbox.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{getInputElement:function(){return this._.checkbox.getElement()},setValue:function(a,b){this.getInputElement().$.checked=a;!b&&this.fire("change",{value:a})},getValue:function(){return this.getInputElement().$.checked},accessKeyUp:function(){this.setValue(!this.getValue())},eventProcessors:{onChange:function(c,
-b){if(!CKEDITOR.env.ie||8<CKEDITOR.env.version)return a.onChange.apply(this,arguments);c.on("load",function(){var a=this._.checkbox.getElement();a.on("propertychange",function(c){c=c.data.$;"checked"==c.propertyName&&this.fire("change",{value:a.$.checked})},this)},this);this.on("change",b);return null}},keyboardFocusable:!0},e,!0);CKEDITOR.ui.dialog.radio.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{setValue:function(a,b){for(var g=this._.children,e,f=0;f<g.length&&(e=g[f]);f++)e.getElement().$.checked=
-e.getValue()==a;!b&&this.fire("change",{value:a})},getValue:function(){for(var a=this._.children,b=0;b<a.length;b++)if(a[b].getElement().$.checked)return a[b].getValue();return null},accessKeyUp:function(){var a=this._.children,b;for(b=0;b<a.length;b++)if(a[b].getElement().$.checked){a[b].getElement().focus();return}a[0].getElement().focus()},eventProcessors:{onChange:function(b,d){if(!CKEDITOR.env.ie||8<CKEDITOR.env.version)return a.onChange.apply(this,arguments);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",d);return null}}},e,!0);CKEDITOR.ui.dialog.file.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,e,{getInputElement:function(){var a=CKEDITOR.document.getById(this._.frameId).getFrameDocument();return 0<a.$.forms.length?new CKEDITOR.dom.element(a.$.forms[0].elements[0]):
-this.getElement()},submit:function(){this.getInputElement().getParent().$.submit();return this},getAction:function(){return this.getInputElement().getParent().$.action},registerEvents:function(a){var b=/^on([A-Z]\w+)/,g,e=function(a,b,c,d){a.on("formLoaded",function(){a.getInputElement().on(c,d,a)})},f;for(f in a)if(g=f.match(b))this.eventProcessors[f]?this.eventProcessors[f].call(this,this._.dialog,a[f]):e(this,this._.dialog,g[1].toLowerCase(),a[f]);return this},reset:function(){function a(){g.$.open();
-var c="";e.size&&(c=e.size-(CKEDITOR.env.ie?7:0));var u=b.frameId+"_input";g.$.write(['\x3chtml dir\x3d"'+l+'" lang\x3d"'+m+'"\x3e\x3chead\x3e\x3ctitle\x3e\x3c/title\x3e\x3c/head\x3e\x3cbody style\x3d"margin: 0; overflow: hidden; background: transparent;"\x3e','\x3cform enctype\x3d"multipart/form-data" method\x3d"POST" dir\x3d"'+l+'" lang\x3d"'+m+'" action\x3d"',CKEDITOR.tools.htmlEncode(e.action),'"\x3e\x3clabel id\x3d"',b.labelId,'" for\x3d"',u,'" style\x3d"display:none"\x3e',CKEDITOR.tools.htmlEncode(e.label),
-'\x3c/label\x3e\x3cinput style\x3d"width:100%" id\x3d"',u,'" aria-labelledby\x3d"',b.labelId,'" type\x3d"file" name\x3d"',CKEDITOR.tools.htmlEncode(e.id||"cke_upload"),'" size\x3d"',CKEDITOR.tools.htmlEncode(0<c?c:""),'" /\x3e\x3c/form\x3e\x3c/body\x3e\x3c/html\x3e\x3cscript\x3e',CKEDITOR.env.ie?"("+CKEDITOR.tools.fixDomain+")();":"","window.parent.CKEDITOR.tools.callFunction("+h+");","window.onbeforeunload \x3d function() {window.parent.CKEDITOR.tools.callFunction("+k+")}","\x3c/script\x3e"].join(""));
-g.$.close();for(c=0;c<f.length;c++)f[c].enable()}var b=this._,g=CKEDITOR.document.getById(b.frameId).getFrameDocument(),e=b.definition,f=b.buttons,h=this.formLoadedNumber,k=this.formUnloadNumber,l=b.dialog._.editor.lang.dir,m=b.dialog._.editor.langCode;h||(h=this.formLoadedNumber=CKEDITOR.tools.addFunction(function(){this.fire("formLoaded")},this),k=this.formUnloadNumber=CKEDITOR.tools.addFunction(function(){this.getInputElement().clearCustomData()},this),this.getDialog()._.editor.on("destroy",function(){CKEDITOR.tools.removeFunction(h);
-CKEDITOR.tools.removeFunction(k)}));CKEDITOR.env.gecko?setTimeout(a,500):a()},getValue:function(){return this.getInputElement().$.value||""},setInitValue:function(){this._.initValue=""},eventProcessors:{onChange:function(a,b){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",b)}},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",h);CKEDITOR.dialog.addUIElement("password",h);CKEDITOR.dialog.addUIElement("tel",h);CKEDITOR.dialog.addUIElement("textarea",f);CKEDITOR.dialog.addUIElement("checkbox",f);CKEDITOR.dialog.addUIElement("radio",f);CKEDITOR.dialog.addUIElement("button",f);CKEDITOR.dialog.addUIElement("select",f);CKEDITOR.dialog.addUIElement("file",f);CKEDITOR.dialog.addUIElement("fileButton",
-f);CKEDITOR.dialog.addUIElement("html",f);CKEDITOR.dialog.addUIElement("fieldset",{build:function(a,b,g){for(var e=b.children,f,h=[],k=[],l=0;l<e.length&&(f=e[l]);l++){var m=[];h.push(m);k.push(CKEDITOR.dialog._.uiElementBuilders[f.type].build(a,f,m))}return new CKEDITOR.ui.dialog[b.type](a,k,h,g,b)}})}}),CKEDITOR.DIALOG_RESIZE_NONE=0,CKEDITOR.DIALOG_RESIZE_WIDTH=1,CKEDITOR.DIALOG_RESIZE_HEIGHT=2,CKEDITOR.DIALOG_RESIZE_BOTH=3,CKEDITOR.DIALOG_STATE_IDLE=1,CKEDITOR.DIALOG_STATE_BUSY=2,function(){function b(a){a._.tabBarMode=
-!0;a._.tabs[a._.currentTabId][0].focus();a._.currentFocusIndex=-1}function h(){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 f(){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 e(a,b){for(var c=a.$.getElementsByTagName("input"),d=0,g=c.length;d<g;d++){var e=new CKEDITOR.dom.element(c[d]);"text"==e.getAttribute("type").toLowerCase()&&(b?(e.setAttribute("value",e.getCustomData("fake_value")||""),e.removeCustomData("fake_value")):(e.setCustomData("fake_value",e.getAttribute("value")),e.setAttribute("value","")))}}function a(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 m(){var a=this.getInputElement();a&&a.removeAttribute("aria-invalid")}function k(a){var b=CKEDITOR.dom.element.createFromHtml(CKEDITOR.addTemplate("dialog",L).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,hidpi:CKEDITOR.env.hidpi?"cke_hidpi":""})),c=b.getChild([0,0,0,0,0]),d=c.getChild(0),
-g=c.getChild(1);a.plugins.clipboard&&CKEDITOR.plugins.clipboard.preventDefaultDropOnElement(c);!CKEDITOR.env.ie||CKEDITOR.env.quirks||CKEDITOR.env.edge||(a="javascript:void(function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+"}())",CKEDITOR.dom.element.createFromHtml('\x3ciframe frameBorder\x3d"0" class\x3d"cke_iframe_shim" src\x3d"'+a+'" tabIndex\x3d"-1"\x3e\x3c/iframe\x3e').appendTo(c.getParent()));d.unselectable();g.unselectable();return{element:b,
-parts:{dialog:b.getChild(0),title:d,close:g,tabs:c.getChild(2),contents:c.getChild([3,0,0,0]),footer:c.getChild([3,0,1,0])}}}function l(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 c(a){function b(){a.layout()}var c=CKEDITOR.document.getWindow();c.on("resize",b);a.on("hide",function(){c.removeListener("resize",b)})}function d(a,b){this.dialog=a;for(var c=b.contents,d=0,e;e=c[d];d++)c[d]=e&&new g(a,e);CKEDITOR.tools.extend(this,b)}function g(a,b){this._={dialog:a};CKEDITOR.tools.extend(this,b)}function n(a){function b(c){var n=a.getSize(),k=a.parts.dialog.getParent().getClientSize(),l=c.data.$.screenX,m=c.data.$.screenY,r=l-d.x,t=m-d.y;d={x:l,y:m};g.x+=r;g.y+=t;l=g.x+
-h[3]<f?-h[3]:g.x-h[1]>k.width-n.width-f?k.width-n.width+("rtl"==e.lang.dir?0:h[1]):g.x;n=g.y+h[0]<f?-h[0]:g.y-h[2]>k.height-n.height-f?k.height-n.height+h[2]:g.y;l=Math.floor(l);n=Math.floor(n);a.move(l,n,1);c.data.preventDefault()}function c(){CKEDITOR.document.removeListener("mousemove",b);CKEDITOR.document.removeListener("mouseup",c);if(CKEDITOR.env.ie6Compat){var a=E.getChild(0).getFrameDocument();a.removeListener("mousemove",b);a.removeListener("mouseup",c)}}var d=null,g=null,e=a.getParentEditor(),
-f=e.config.dialog_magnetDistance,h=CKEDITOR.skin.margins||[0,0,0,0];"undefined"==typeof f&&(f=20);a.parts.title.on("mousedown",function(e){if(!a._.moved){var f=a._.element;f.getFirst().setStyle("position","absolute");f.removeStyle("display");a._.moved=!0;a.layout()}d={x:e.data.$.screenX,y:e.data.$.screenY};CKEDITOR.document.on("mousemove",b);CKEDITOR.document.on("mouseup",c);g=a.getPosition();CKEDITOR.env.ie6Compat&&(f=E.getChild(0).getFrameDocument(),f.on("mousemove",b),f.on("mouseup",c));e.data.preventDefault()},
-a)}function y(a){function b(c){var m="rtl"==e.lang.dir,r=l.width,t=l.height,q=r+(c.data.$.screenX-k.x)*(m?-1:1)*(a._.moved?1:2),R=t+(c.data.$.screenY-k.y)*(a._.moved?1:2),u=a._.element.getFirst(),u=m&&parseInt(u.getComputedStyle("right"),10),v=a.getPosition();v.x=v.x||0;v.y=v.y||0;v.y+R>n.height&&(R=n.height-v.y);(m?u:v.x)+q>n.width&&(q=n.width-(m?u:v.x));R=Math.floor(R);q=Math.floor(q);if(g==CKEDITOR.DIALOG_RESIZE_WIDTH||g==CKEDITOR.DIALOG_RESIZE_BOTH)r=Math.max(d.minWidth||0,q-f);if(g==CKEDITOR.DIALOG_RESIZE_HEIGHT||
-g==CKEDITOR.DIALOG_RESIZE_BOTH)t=Math.max(d.minHeight||0,R-h);a.resize(r,t);a._.moved&&w(a,a._.position.x,a._.position.y);a._.moved||a.layout();c.data.preventDefault()}function c(){CKEDITOR.document.removeListener("mouseup",c);CKEDITOR.document.removeListener("mousemove",b);m&&(m.remove(),m=null);if(CKEDITOR.env.ie6Compat){var a=E.getChild(0).getFrameDocument();a.removeListener("mouseup",c);a.removeListener("mousemove",b)}}var d=a.definition,g=d.resizable;if(g!=CKEDITOR.DIALOG_RESIZE_NONE){var e=
-a.getParentEditor(),f,h,n,k,l,m,r=CKEDITOR.tools.addFunction(function(d){function g(a){return a.isVisible()}l=a.getSize();var e=a.parts.contents,r=e.$.getElementsByTagName("iframe").length,t=!(CKEDITOR.env.gecko||CKEDITOR.env.ie&&CKEDITOR.env.quirks);r&&(m=CKEDITOR.dom.element.createFromHtml('\x3cdiv class\x3d"cke_dialog_resize_cover" style\x3d"height: 100%; position: absolute; width: 100%; left:0; top:0;"\x3e\x3c/div\x3e'),e.append(m));h=l.height-a.parts.contents.getFirst(g).getSize("height",t);
-f=l.width-a.parts.contents.getFirst(g).getSize("width",1);k={x:d.screenX,y:d.screenY};n=CKEDITOR.document.getWindow().getViewPaneSize();CKEDITOR.document.on("mousemove",b);CKEDITOR.document.on("mouseup",c);CKEDITOR.env.ie6Compat&&(e=E.getChild(0).getFrameDocument(),e.on("mousemove",b),e.on("mouseup",c));d.preventDefault&&d.preventDefault()});a.on("load",function(){var b="";g==CKEDITOR.DIALOG_RESIZE_WIDTH?b=" cke_resizer_horizontal":g==CKEDITOR.DIALOG_RESIZE_HEIGHT&&(b=" cke_resizer_vertical");b=CKEDITOR.dom.element.createFromHtml('\x3cdiv class\x3d"cke_resizer'+
-b+" cke_resizer_"+e.lang.dir+'" title\x3d"'+CKEDITOR.tools.htmlEncode(e.lang.common.resize)+'" onmousedown\x3d"CKEDITOR.tools.callFunction('+r+', event )"\x3e'+("ltr"==e.lang.dir?"â—¢":"â—£")+"\x3c/div\x3e");a.parts.footer.append(b,1)});e.on("destroy",function(){CKEDITOR.tools.removeFunction(r)})}}function w(a,b,c){var d=a.parts.dialog.getParent().getClientSize(),g=a.getSize(),e=a._.viewportRatio,f=Math.max(d.width-g.width,0),d=Math.max(d.height-g.height,0);e.width=f?b/f:e.width;e.height=d?c/d:e.height;
-a._.viewportRatio=e}function p(a){a.data.preventDefault(1)}function t(a){var b=a.config,c=CKEDITOR.skinName||a.config.skin,d=b.dialog_backgroundCoverColor||("moono-lisa"==c?"black":"white"),c=b.dialog_backgroundCoverOpacity,g=b.baseFloatZIndex,b=CKEDITOR.tools.genKey(d,c,g),e=M[b];CKEDITOR.document.getBody().addClass("cke_dialog_open");e?e.show():(g=['\x3cdiv tabIndex\x3d"-1" style\x3d"position: ',CKEDITOR.env.ie6Compat?"absolute":"fixed","; z-index: ",g,"; top: 0px; left: 0px; ","; width: 100%; height: 100%;",
-CKEDITOR.env.ie6Compat?"":"background-color: "+d,'" class\x3d"cke_dialog_background_cover"\x3e'],CKEDITOR.env.ie6Compat&&(d="\x3chtml\x3e\x3cbody style\x3d\\'background-color:"+d+";\\'\x3e\x3c/body\x3e\x3c/html\x3e",g.push('\x3ciframe hidefocus\x3d"true" frameborder\x3d"0" id\x3d"cke_dialog_background_iframe" src\x3d"javascript:'),g.push("void((function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.write( '"+d+"' );document.close();")+"})())"),g.push('" style\x3d"position:absolute;left:0;top:0;width:100%;height: 100%;filter: progid:DXImageTransform.Microsoft.Alpha(opacity\x3d0)"\x3e\x3c/iframe\x3e')),
-g.push("\x3c/div\x3e"),e=CKEDITOR.dom.element.createFromHtml(g.join("")),e.setOpacity(void 0!==c?c:.5),e.on("keydown",p),e.on("keypress",p),e.on("keyup",p),e.appendTo(CKEDITOR.document.getBody()),M[b]=e);a.focusManager.add(e);E=e;CKEDITOR.env.mac&&CKEDITOR.env.webkit||e.focus()}function r(a){CKEDITOR.document.getBody().removeClass("cke_dialog_open");E&&(a.focusManager.remove(E),E.hide())}function x(a){var b=a.data.$.ctrlKey||a.data.$.metaKey,c=a.data.$.altKey,d=a.data.$.shiftKey,g=String.fromCharCode(a.data.$.keyCode);
-(b=Q[(b?"CTRL+":"")+(c?"ALT+":"")+(d?"SHIFT+":"")+g])&&b.length&&(b=b[b.length-1],b.keydown&&b.keydown.call(b.uiElement,b.dialog,b.key),a.data.preventDefault())}function u(a){var b=a.data.$.ctrlKey||a.data.$.metaKey,c=a.data.$.altKey,d=a.data.$.shiftKey,g=String.fromCharCode(a.data.$.keyCode);(b=Q[(b?"CTRL+":"")+(c?"ALT+":"")+(d?"SHIFT+":"")+g])&&b.length&&(b=b[b.length-1],b.keyup&&(b.keyup.call(b.uiElement,b.dialog,b.key),a.data.preventDefault()))}function z(a,b,c,d,g){(Q[c]||(Q[c]=[])).push({uiElement:a,
-dialog:b,key:c,keyup:g||a.accessKeyUp,keydown:d||a.accessKeyDown})}function q(a){for(var b in Q){for(var c=Q[b],d=c.length-1;0<=d;d--)c[d].dialog!=a&&c[d].uiElement!=a||c.splice(d,1);0===c.length&&delete Q[b]}}function v(a,b){a._.accessKeyMap[b]&&a.selectPage(a._.accessKeyMap[b])}function B(){}var D=CKEDITOR.tools.cssLength,A,E,F=!1,K=!CKEDITOR.env.ie||CKEDITOR.env.edge,L='\x3cdiv class\x3d"cke_reset_all cke_dialog_container {editorId} {editorDialogClass} {hidpi}" dir\x3d"{langDir}" style\x3d"'+(K?
-"display:flex":"")+'" lang\x3d"{langCode}" role\x3d"dialog" aria-labelledby\x3d"cke_dialog_title_{id}"\x3e\x3ctable class\x3d"cke_dialog '+CKEDITOR.env.cssClass+' cke_{langDir}" style\x3d"'+(K?"margin:auto":"position:absolute")+'" role\x3d"presentation"\x3e\x3ctr\x3e\x3ctd role\x3d"presentation"\x3e\x3cdiv class\x3d"cke_dialog_body" role\x3d"presentation"\x3e\x3cdiv id\x3d"cke_dialog_title_{id}" class\x3d"cke_dialog_title" role\x3d"presentation"\x3e\x3c/div\x3e\x3ca id\x3d"cke_dialog_close_button_{id}" class\x3d"cke_dialog_close_button" href\x3d"javascript:void(0)" title\x3d"{closeTitle}" role\x3d"button"\x3e\x3cspan class\x3d"cke_label"\x3eX\x3c/span\x3e\x3c/a\x3e\x3cdiv id\x3d"cke_dialog_tabs_{id}" class\x3d"cke_dialog_tabs" role\x3d"tablist"\x3e\x3c/div\x3e\x3ctable class\x3d"cke_dialog_contents" role\x3d"presentation"\x3e\x3ctr\x3e\x3ctd id\x3d"cke_dialog_contents_{id}" class\x3d"cke_dialog_contents_body" role\x3d"presentation"\x3e\x3c/td\x3e\x3c/tr\x3e\x3ctr\x3e\x3ctd id\x3d"cke_dialog_footer_{id}" class\x3d"cke_dialog_footer" role\x3d"presentation"\x3e\x3c/td\x3e\x3c/tr\x3e\x3c/table\x3e\x3c/div\x3e\x3c/td\x3e\x3c/tr\x3e\x3c/table\x3e\x3c/div\x3e';
-CKEDITOR.dialog=function(c,g){function e(){var a=E._.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 l(a){var b=E._.focusList;a=a||0;if(!(1>b.length)){var c=E._.currentFocusIndex;E._.tabBarMode&&0>a&&(c=0);try{b[c].getInputElement().$.blur()}catch(d){}var g=c,e=1<E._.pageCount;do{g+=a;if(e&&!E._.tabBarMode&&(g==b.length||-1==g)){E._.tabBarMode=!0;E._.tabs[E._.currentTabId][0].focus();
-E._.currentFocusIndex=-1;return}g=(g+b.length)%b.length;if(g==c)break}while(a&&!b[g].isFocusable());b[g].focus();"text"==b[g].type&&b[g].select()}}function r(a){if(E==CKEDITOR.dialog._.currentTop){var d=a.data.getKeystroke(),g="rtl"==c.lang.dir,e=[37,38,39,40];w=z=0;if(9==d||d==CKEDITOR.SHIFT+9)l(d==CKEDITOR.SHIFT+9?-1:1),w=1;else if(d==CKEDITOR.ALT+121&&!E._.tabBarMode&&1<E.getPageCount())b(E),w=1;else if(-1!=CKEDITOR.tools.indexOf(e,d)&&E._.tabBarMode)d=-1!=CKEDITOR.tools.indexOf([g?39:37,38],d)?
-h.call(E):f.call(E),E.selectPage(d),E._.tabs[d][0].focus(),w=1;else if(13!=d&&32!=d||!E._.tabBarMode)if(13==d)d=a.data.getTarget(),d.is("a","button","select","textarea")||d.is("input")&&"button"==d.$.type||((d=this.getButton("ok"))&&CKEDITOR.tools.setTimeout(d.click,0,d),w=1),z=1;else if(27==d)(d=this.getButton("cancel"))?CKEDITOR.tools.setTimeout(d.click,0,d):!1!==this.fire("cancel",{hide:!0}).hide&&this.hide(),z=1;else return;else this.selectPage(this._.currentTabId),this._.tabBarMode=!1,this._.currentFocusIndex=
--1,l(1),w=1;t(a)}}function t(a){w?a.data.preventDefault(1):z&&a.data.stopPropagation()}var q=CKEDITOR.dialog._.dialogDefinitions[g],u=CKEDITOR.tools.clone(A),v=c.config.dialog_buttonsOrder||"OS",x=c.lang.dir,p={},w,z;("OS"==v&&CKEDITOR.env.mac||"rtl"==v&&"ltr"==x||"ltr"==v&&"rtl"==x)&&u.buttons.reverse();q=CKEDITOR.tools.extend(q(c),u);q=CKEDITOR.tools.clone(q);q=new d(this,q);u=k(c);this._={editor:c,element:u.element,name:g,model:null,contentSize:{width:0,height:0},size:{width:0,height:0},contents:{},
-buttons:{},accessKeyMap:{},viewportRatio:{width:.5,height:.5},tabs:{},tabIdList:[],currentTabId:null,currentTabIndex:null,pageCount:0,lastTab:null,tabBarMode:!1,focusList:[],currentFocusIndex:0,hasFocus:!1};this.parts=u.parts;CKEDITOR.tools.setTimeout(function(){c.fire("ariaWidget",this.parts.contents)},0,this);u={top:0,visibility:"hidden"};CKEDITOR.env.ie6Compat&&(u.position="absolute");u["rtl"==x?"right":"left"]=0;this.parts.dialog.setStyles(u);CKEDITOR.event.call(this);this.definition=q=CKEDITOR.fire("dialogDefinition",
-{name:g,definition:q,dialog:this},c).definition;if(!("removeDialogTabs"in c._)&&c.config.removeDialogTabs){u=c.config.removeDialogTabs.split(";");for(x=0;x<u.length;x++)if(v=u[x].split(":"),2==v.length){var B=v[0];p[B]||(p[B]=[]);p[B].push(v[1])}c._.removeDialogTabs=p}if(c._.removeDialogTabs&&(p=c._.removeDialogTabs[g]))for(x=0;x<p.length;x++)q.removeContents(p[x]);if(q.onLoad)this.on("load",q.onLoad);if(q.onShow)this.on("show",q.onShow);if(q.onHide)this.on("hide",q.onHide);if(q.onOk)this.on("ok",
-function(a){c.fire("saveSnapshot");setTimeout(function(){c.fire("saveSnapshot")},0);!1===q.onOk.call(this,a)&&(a.data.hide=!1)});this.state=CKEDITOR.DIALOG_STATE_IDLE;if(q.onCancel)this.on("cancel",function(a){!1===q.onCancel.call(this,a)&&(a.data.hide=!1)});var E=this,D=function(a){var b=E._.contents,c=!1,d;for(d in b)for(var g in b[d])if(c=a.call(this,b[d][g]))return};this.on("ok",function(b){D(function(c){if(c.validate){var d=c.validate(this),g="string"==typeof d||!1===d;g&&(b.data.hide=!1,b.stop());
-a.call(c,!g,"string"==typeof d?d:void 0);return g}})},this,null,0);this.on("cancel",function(a){D(function(b){if(b.isChanged())return c.config.dialog_noConfirmCancel||confirm(c.lang.common.confirmCancel)||(a.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=l;var K=this._.element;c.focusManager.add(K,1);this.on("show",function(){K.on("keydown",r,this);if(CKEDITOR.env.gecko)K.on("keypress",
-t,this)});this.on("hide",function(){K.removeListener("keydown",r);CKEDITOR.env.gecko&&K.removeListener("keypress",t);D(function(a){m.apply(a)})});this.on("iframeAdded",function(a){(new CKEDITOR.dom.document(a.data.iframe.$.contentWindow.document)).on("keydown",r,this,null,0)});this.on("show",function(){e();var a=1<E._.pageCount;c.config.dialog_startupFocusTab&&a?(E._.tabBarMode=!0,E._.tabs[E._.currentTabId][0].focus(),E._.currentFocusIndex=-1):this._.hasFocus||(this._.currentFocusIndex=a?-1:this._.focusList.length-
-1,q.onFocus?(a=q.onFocus.call(this))&&a.focus():l(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);n(this);y(this);(new CKEDITOR.dom.text(q.title,CKEDITOR.document)).appendTo(this.parts.title);for(x=0;x<q.contents.length;x++)(p=q.contents[x])&&this.addPage(p);this.parts.tabs.on("click",function(a){var c=a.data.getTarget();c.hasClass("cke_dialog_tab")&&(c=c.$.id,this.selectPage(c.substring(4,c.lastIndexOf("_"))),
-b(this),a.data.preventDefault())},this);x=[];p=CKEDITOR.dialog._.uiElementBuilders.hbox.build(this,{type:"hbox",className:"cke_dialog_footer_buttons",widths:[],children:q.buttons},x).getChild();this.parts.footer.setHtml(x.join(""));for(x=0;x<p.length;x++)this._.buttons[p[x].id]=p[x]};CKEDITOR.dialog.prototype={destroy:function(){this.hide();this._.element.remove()},resize: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"});if("rtl"==this._.editor.lang.dir&&this._.position){var c=this.parts.dialog.getParent().getClientSize().width;this._.position.x=c-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 d=this._.element.getFirst(),g="rtl"==this._.editor.lang.dir;CKEDITOR.env.ie&&d.setStyle("zoom","100%");var e=this.parts.dialog.getParent().getClientSize(),f=this.getSize(),h=this._.viewportRatio,n=Math.max(e.width-f.width,0),e=Math.max(e.height-f.height,0);this._.position&&this._.position.x==a&&this._.position.y==b?(a=Math.floor(n*h.width),b=Math.floor(e*h.height)):w(this,a,b);this._.position={x:a,y:b};g&&(a=n-a);b={top:(0<b?b:0)+"px"};b[g?"right":"left"]=(0<a?a:0)+"px";
-d.setStyles(b);c&&(this._.moved=1)},getPosition:function(){return CKEDITOR.tools.extend({},this._.position)},show:function(){var a=this._.element,b=this.definition,d=CKEDITOR.document.getBody(),g=this._.editor.config.baseFloatZIndex;a.getParent()&&a.getParent().equals(d)?a.setStyle("display",K?"flex":"block"):a.appendTo(d);this.resize(this._.contentSize&&this._.contentSize.width||b.width||b.minWidth,this._.contentSize&&this._.contentSize.height||b.height||b.minHeight);this.reset();null===this._.currentTabId&&
-this.selectPage(this.definition.contents[0].id);null===CKEDITOR.dialog._.currentZIndex&&(CKEDITOR.dialog._.currentZIndex=g);this._.element.getFirst().setStyle("z-index",CKEDITOR.dialog._.currentZIndex+=10);this.getElement().setStyle("z-index",CKEDITOR.dialog._.currentZIndex);null===CKEDITOR.dialog._.currentTop?(CKEDITOR.dialog._.currentTop=this,this._.parentDialog=null,t(this._.editor)):CKEDITOR.dialog._.currentTop!==this&&(this._.parentDialog=CKEDITOR.dialog._.currentTop,d=this._.parentDialog.getElement().getFirst(),
-d.$.style.zIndex-=Math.floor(g/2),this._.parentDialog.getElement().setStyle("z-index",d.$.style.zIndex),CKEDITOR.dialog._.currentTop=this);a.on("keydown",x);a.on("keyup",u);this._.hasFocus=!1;for(var e in b.contents)if(b.contents[e]){var a=b.contents[e],g=this._.tabs[a.id],d=a.requiredContent,f=0;if(g){for(var h in this._.contents[a.id]){var n=this._.contents[a.id][h];"hbox"!=n.type&&"vbox"!=n.type&&n.getInputElement()&&(n.requiredContent&&!this._.editor.activeFilter.check(n.requiredContent)?n.disable():
+this)},this),this._.domOnChangeRegistered=!0);this.on("change",b)}},!0),k=/^on([A-Z]\w+)/,l=function(a){for(var b in a)(k.test(b)||"title"==b||"type"==b)&&delete a[b];return a},m=function(a){a=a.data.getKeystroke();a==CKEDITOR.SHIFT+CKEDITOR.ALT+36?this.setDirectionMarker("ltr"):a==CKEDITOR.SHIFT+CKEDITOR.ALT+35&&this.setDirectionMarker("rtl")};CKEDITOR.tools.extend(CKEDITOR.ui.dialog,{labeledElement:function(a,d,g,e){if(!(4>arguments.length)){var f=b.call(this,d);f.labelId=CKEDITOR.tools.getNextId()+
+"_label";this._.children=[];var h={role:d.role||"presentation"};d.includeLabel&&(h["aria-labelledby"]=f.labelId);CKEDITOR.ui.dialog.uiElement.call(this,a,d,g,"div",null,h,function(){var b=[],g=d.required?" cke_required":"";"horizontal"!=d.labelLayout?b.push('\x3clabel class\x3d"cke_dialog_ui_labeled_label'+g+'" ',' id\x3d"'+f.labelId+'"',f.inputId?' for\x3d"'+f.inputId+'"':"",(d.labelStyle?' style\x3d"'+d.labelStyle+'"':"")+"\x3e",d.required?d.label+'\x3cspan class\x3d"cke_dialog_ui_labeled_required" aria-hidden\x3d"true"\x3e*\x3c/span\x3e':
+d.label,"\x3c/label\x3e",'\x3cdiv class\x3d"cke_dialog_ui_labeled_content"',d.controlStyle?' style\x3d"'+d.controlStyle+'"':"",' role\x3d"presentation"\x3e',e.call(this,a,d),"\x3c/div\x3e"):(g={type:"hbox",widths:d.widths,padding:0,children:[{type:"html",html:'\x3clabel class\x3d"cke_dialog_ui_labeled_label'+g+'" id\x3d"'+f.labelId+'" for\x3d"'+f.inputId+'"'+(d.labelStyle?' style\x3d"'+d.labelStyle+'"':"")+"\x3e"+CKEDITOR.tools.htmlEncode(d.label)+"\x3c/label\x3e"},{type:"html",html:'\x3cspan class\x3d"cke_dialog_ui_labeled_content"'+
+(d.controlStyle?' style\x3d"'+d.controlStyle+'"':"")+"\x3e"+e.call(this,a,d)+"\x3c/span\x3e"}]},CKEDITOR.dialog._.uiElementBuilders.hbox.build(a,g,b));return b.join("")})}},textInput:function(a,d,g){if(!(3>arguments.length)){b.call(this,d);var e=this._.inputId=CKEDITOR.tools.getNextId()+"_textInput",f={"class":"cke_dialog_ui_input_"+d.type,id:e,type:d.type};d.validate&&(this.validate=d.validate);d.maxLength&&(f.maxlength=d.maxLength);d.size&&(f.size=d.size);d.inputStyle&&(f.style=d.inputStyle);var h=
+this,k=!1;a.on("load",function(){h.getInputElement().on("keydown",function(a){13==a.data.getKeystroke()&&(k=!0)});h.getInputElement().on("keyup",function(b){13==b.data.getKeystroke()&&k&&(a.getButton("ok")&&setTimeout(function(){a.getButton("ok").click()},0),k=!1);h.bidi&&m.call(h,b)},null,null,1E3)});CKEDITOR.ui.dialog.labeledElement.call(this,a,d,g,function(){var a=['\x3cdiv class\x3d"cke_dialog_ui_input_',d.type,'" role\x3d"presentation"'];d.width&&a.push('style\x3d"width:'+d.width+'" ');a.push("\x3e\x3cinput ");
+f["aria-labelledby"]=this._.labelId;this._.required&&(f["aria-required"]=this._.required);for(var c in f)a.push(c+'\x3d"'+f[c]+'" ');a.push(" /\x3e\x3c/div\x3e");return a.join("")})}},textarea:function(a,d,g){if(!(3>arguments.length)){b.call(this,d);var e=this,f=this._.inputId=CKEDITOR.tools.getNextId()+"_textarea",h={};d.validate&&(this.validate=d.validate);h.rows=d.rows||5;h.cols=d.cols||20;h["class"]="cke_dialog_ui_input_textarea "+(d["class"]||"");"undefined"!=typeof d.inputStyle&&(h.style=d.inputStyle);
+d.dir&&(h.dir=d.dir);if(e.bidi)a.on("load",function(){e.getInputElement().on("keyup",m)},e);CKEDITOR.ui.dialog.labeledElement.call(this,a,d,g,function(){h["aria-labelledby"]=this._.labelId;this._.required&&(h["aria-required"]=this._.required);var a=['\x3cdiv class\x3d"cke_dialog_ui_input_textarea" role\x3d"presentation"\x3e\x3ctextarea id\x3d"',f,'" '],c;for(c in h)a.push(c+'\x3d"'+CKEDITOR.tools.htmlEncode(h[c])+'" ');a.push("\x3e",CKEDITOR.tools.htmlEncode(e._["default"]),"\x3c/textarea\x3e\x3c/div\x3e");
+return a.join("")})}},checkbox:function(a,d,g){if(!(3>arguments.length)){var e=b.call(this,d,{"default":!!d["default"]});d.validate&&(this.validate=d.validate);CKEDITOR.ui.dialog.uiElement.call(this,a,d,g,"span",null,null,function(){var b=CKEDITOR.tools.extend({},d,{id:d.id?d.id+"_checkbox":CKEDITOR.tools.getNextId()+"_checkbox"},!0),g=[],f=CKEDITOR.tools.getNextId()+"_label",h={"class":"cke_dialog_ui_checkbox_input",type:"checkbox","aria-labelledby":f};l(b);d["default"]&&(h.checked="checked");"undefined"!=
+typeof b.inputStyle&&(b.style=b.inputStyle);e.checkbox=new CKEDITOR.ui.dialog.uiElement(a,b,g,"input",null,h);g.push(' \x3clabel id\x3d"',f,'" for\x3d"',h.id,'"'+(d.labelStyle?' style\x3d"'+d.labelStyle+'"':"")+"\x3e",CKEDITOR.tools.htmlEncode(d.label),"\x3c/label\x3e");return g.join("")})}},radio:function(a,d,g){if(!(3>arguments.length)){b.call(this,d);this._["default"]||(this._["default"]=this._.initValue=d.items[0][1]);d.validate&&(this.validate=d.validate);var e=[],f=this;d.role="radiogroup";
+d.includeLabel=!0;CKEDITOR.ui.dialog.labeledElement.call(this,a,d,g,function(){for(var b=[],g=[],h=(d.id?d.id:CKEDITOR.tools.getNextId())+"_radio",k=0;k<d.items.length;k++){var m=d.items[k],t=void 0!==m[2]?m[2]:m[0],z=void 0!==m[1]?m[1]:m[0],u=CKEDITOR.tools.getNextId()+"_radio_input",w=u+"_label",u=CKEDITOR.tools.extend({},d,{id:u,title:null,type:null},!0),t=CKEDITOR.tools.extend({},u,{title:t},!0),B={type:"radio","class":"cke_dialog_ui_radio_input",name:h,value:z,"aria-labelledby":w},C=[];f._["default"]==
+z&&(B.checked="checked");l(u);l(t);"undefined"!=typeof u.inputStyle&&(u.style=u.inputStyle);u.keyboardFocusable=!0;e.push(new CKEDITOR.ui.dialog.uiElement(a,u,C,"input",null,B));C.push(" ");new CKEDITOR.ui.dialog.uiElement(a,t,C,"label",null,{id:w,"for":B.id},m[0]);b.push(C.join(""))}new CKEDITOR.ui.dialog.hbox(a,e,b,g);return g.join("")});this._.children=e}},button:function(a,d,g){if(arguments.length){"function"==typeof d&&(d=d(a.getParentEditor()));b.call(this,d,{disabled:d.disabled||!1});CKEDITOR.event.implementOn(this);
+var e=this;a.on("load",function(){var a=this.getElement();(function(){a.on("click",function(a){e.click();a.data.preventDefault()});a.on("keydown",function(a){a.data.getKeystroke()in{32:1}&&(e.click(),a.data.preventDefault())})})();a.unselectable()},this);var f=CKEDITOR.tools.extend({},d);delete f.style;var h=CKEDITOR.tools.getNextId()+"_label";CKEDITOR.ui.dialog.uiElement.call(this,a,f,g,"a",null,{style:d.style,href:"javascript:void(0)",title:d.label,hidefocus:"true","class":d["class"],role:"button",
+"aria-labelledby":h},'\x3cspan id\x3d"'+h+'" class\x3d"cke_dialog_ui_button"\x3e'+CKEDITOR.tools.htmlEncode(d.label)+"\x3c/span\x3e")}},select:function(a,d,g){if(!(3>arguments.length)){var e=b.call(this,d);d.validate&&(this.validate=d.validate);e.inputId=CKEDITOR.tools.getNextId()+"_select";CKEDITOR.ui.dialog.labeledElement.call(this,a,d,g,function(){var b=CKEDITOR.tools.extend({},d,{id:d.id?d.id+"_select":CKEDITOR.tools.getNextId()+"_select"},!0),g=[],f=[],h={id:e.inputId,"class":"cke_dialog_ui_input_select",
+"aria-labelledby":this._.labelId};g.push('\x3cdiv class\x3d"cke_dialog_ui_input_',d.type,'" role\x3d"presentation"');d.width&&g.push('style\x3d"width:'+d.width+'" ');g.push("\x3e");void 0!==d.size&&(h.size=d.size);void 0!==d.multiple&&(h.multiple=d.multiple);l(b);for(var k=0,m;k<d.items.length&&(m=d.items[k]);k++)f.push('\x3coption value\x3d"',CKEDITOR.tools.htmlEncode(void 0!==m[1]?m[1]:m[0]).replace(/"/g,"\x26quot;"),'" /\x3e ',CKEDITOR.tools.htmlEncode(m[0]));"undefined"!=typeof b.inputStyle&&
+(b.style=b.inputStyle);e.select=new CKEDITOR.ui.dialog.uiElement(a,b,g,"select",null,h,f.join(""));g.push("\x3c/div\x3e");return g.join("")})}},file:function(a,d,g){if(!(3>arguments.length)){void 0===d["default"]&&(d["default"]="");var e=CKEDITOR.tools.extend(b.call(this,d),{definition:d,buttons:[]});d.validate&&(this.validate=d.validate);a.on("load",function(){CKEDITOR.document.getById(e.frameId).getParent().addClass("cke_dialog_ui_input_file")});CKEDITOR.ui.dialog.labeledElement.call(this,a,d,g,
+function(){e.frameId=CKEDITOR.tools.getNextId()+"_fileInput";var a=['\x3ciframe frameborder\x3d"0" allowtransparency\x3d"0" class\x3d"cke_dialog_ui_input_file" role\x3d"presentation" id\x3d"',e.frameId,'" title\x3d"',d.label,'" src\x3d"javascript:void('];a.push(CKEDITOR.env.ie?"(function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+"})()":"0");a.push(')"\x3e\x3c/iframe\x3e');return a.join("")})}},fileButton:function(a,d,g){var e=this;if(!(3>arguments.length)){b.call(this,
+d);d.validate&&(this.validate=d.validate);var f=CKEDITOR.tools.extend({},d),h=f.onClick;f.className=(f.className?f.className+" ":"")+"cke_dialog_ui_button";f.onClick=function(b){var g=d["for"];b=h?h.call(this,b):!1;!1!==b&&("xhr"!==b&&a.getContentElement(g[0],g[1]).submit(),this.disable())};a.on("load",function(){a.getContentElement(d["for"][0],d["for"][1])._.buttons.push(e)});CKEDITOR.ui.dialog.button.call(this,a,f,g)}},html:function(){var a=/^\s*<[\w:]+\s+([^>]*)?>/,b=/^(\s*<[\w:]+(?:\s+[^>]*)?)((?:.|\r|\n)+)$/,
+g=/\/$/;return function(e,f,h){if(!(3>arguments.length)){var k=[],l=f.html;"\x3c"!=l.charAt(0)&&(l="\x3cspan\x3e"+l+"\x3c/span\x3e");var m=f.focus;if(m){var x=this.focus;this.focus=function(){("function"==typeof m?m:x).call(this);this.fire("focus")};f.isFocusable&&(this.isFocusable=this.isFocusable);this.keyboardFocusable=!0}CKEDITOR.ui.dialog.uiElement.call(this,e,f,k,"span",null,null,"");k=k.join("").match(a);l=l.match(b)||["","",""];g.test(l[1])&&(l[1]=l[1].slice(0,-1),l[2]="/"+l[2]);h.push([l[1],
+" ",k[1]||"",l[2]].join(""))}}}(),fieldset:function(a,b,g,e,f){var h=f.label;this._={children:b};CKEDITOR.ui.dialog.uiElement.call(this,a,f,e,"fieldset",null,null,function(){var a=[];h&&a.push("\x3clegend"+(f.labelStyle?' style\x3d"'+f.labelStyle+'"':"")+"\x3e"+h+"\x3c/legend\x3e");for(var c=0;c<g.length;c++)a.push(g[c]);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(a){var b=CKEDITOR.document.getById(this._.labelId);1>b.getChildCount()?(new CKEDITOR.dom.text(a,CKEDITOR.document)).appendTo(b):b.getChild(0).$.nodeValue=a;return this},getLabel:function(){var a=CKEDITOR.document.getById(this._.labelId);return!a||1>a.getChildCount()?"":a.getChild(0).getText()},eventProcessors:a},!0);CKEDITOR.ui.dialog.button.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{click:function(){return this._.disabled?!1:this.fire("click",{dialog:this._.dialog})},
+enable:function(){this._.disabled=!1;var a=this.getElement();a&&a.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(a,b){this.on("click",function(){b.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 a=this.selectParentTab();setTimeout(function(){var b=a.getInputElement();b&&b.$.focus()},0)},select:function(){var a=this.selectParentTab();setTimeout(function(){var b=a.getInputElement();b&&(b.$.focus(),b.$.select())},0)},accessKeyUp:function(){this.select()},
+setValue:function(a){if(this.bidi){var b=a&&a.charAt(0);(b="‪"==b?"ltr":"‫"==b?"rtl":null)&&(a=a.slice(1));this.setDirectionMarker(b)}a||(a="");return CKEDITOR.ui.dialog.uiElement.prototype.setValue.apply(this,arguments)},getValue:function(){var a=CKEDITOR.ui.dialog.uiElement.prototype.getValue.call(this);if(this.bidi&&a){var b=this.getDirectionMarker();b&&(a=("ltr"==b?"‪":"‫")+a)}return a},setDirectionMarker:function(a){var b=this.getInputElement();a?b.setAttributes({dir:a,"data-cke-dir-marker":a}):
+this.getDirectionMarker()&&b.removeAttributes(["dir","data-cke-dir-marker"])},getDirectionMarker:function(){return this.getInputElement().data("cke-dir-marker")},keyboardFocusable:!0},e,!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(a,b,g){var e=new CKEDITOR.dom.element("option",this.getDialog().getParentEditor().document),
+f=this.getInputElement().$;e.$.text=a;e.$.value=void 0===b||null===b?a:b;void 0===g||null===g?CKEDITOR.env.ie?f.add(e.$):f.add(e.$,null):f.add(e.$,g);return this},remove:function(a){this.getInputElement().$.remove(a);return this},clear:function(){for(var a=this.getInputElement().$;0<a.length;)a.remove(0);return this},keyboardFocusable:!0},e,!0);CKEDITOR.ui.dialog.checkbox.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{getInputElement:function(){return this._.checkbox.getElement()},
+setValue:function(a,b){this.getInputElement().$.checked=a;!b&&this.fire("change",{value:a})},getValue:function(){return this.getInputElement().$.checked},accessKeyUp:function(){this.setValue(!this.getValue())},eventProcessors:{onChange:function(c,b){if(!CKEDITOR.env.ie||8<CKEDITOR.env.version)return a.onChange.apply(this,arguments);c.on("load",function(){var a=this._.checkbox.getElement();a.on("propertychange",function(c){c=c.data.$;"checked"==c.propertyName&&this.fire("change",{value:a.$.checked})},
+this)},this);this.on("change",b);return null}},keyboardFocusable:!0},e,!0);CKEDITOR.ui.dialog.radio.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{setValue:function(a,b){for(var g=this._.children,e,f=0;f<g.length&&(e=g[f]);f++)e.getElement().$.checked=e.getValue()==a;!b&&this.fire("change",{value:a})},getValue:function(){for(var a=this._.children,b=0;b<a.length;b++)if(a[b].getElement().$.checked)return a[b].getValue();return null},accessKeyUp:function(){var a=this._.children,b;
+for(b=0;b<a.length;b++)if(a[b].getElement().$.checked){a[b].getElement().focus();return}a[0].getElement().focus()},eventProcessors:{onChange:function(c,b){if(!CKEDITOR.env.ie||8<CKEDITOR.env.version)return a.onChange.apply(this,arguments);c.on("load",function(){for(var a=this._.children,c=this,b=0;b<a.length;b++)a[b].getElement().on("propertychange",function(a){a=a.data.$;"checked"==a.propertyName&&this.$.checked&&c.fire("change",{value:this.getAttribute("value")})})},this);this.on("change",b);return null}}},
+e,!0);CKEDITOR.ui.dialog.file.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,e,{getInputElement:function(){var a=CKEDITOR.document.getById(this._.frameId).getFrameDocument();return 0<a.$.forms.length?new CKEDITOR.dom.element(a.$.forms[0].elements[0]):this.getElement()},submit:function(){this.getInputElement().getParent().$.submit();return this},getAction:function(){return this.getInputElement().getParent().$.action},registerEvents:function(a){var b=/^on([A-Z]\w+)/,g,e=function(a,
+c,b,d){a.on("formLoaded",function(){a.getInputElement().on(b,d,a)})},f;for(f in a)if(g=f.match(b))this.eventProcessors[f]?this.eventProcessors[f].call(this,this._.dialog,a[f]):e(this,this._.dialog,g[1].toLowerCase(),a[f]);return this},reset:function(){function a(){g.$.open();var c="";e.size&&(c=e.size-(CKEDITOR.env.ie?7:0));var t=b.frameId+"_input";g.$.write(['\x3chtml dir\x3d"'+l+'" lang\x3d"'+m+'"\x3e\x3chead\x3e\x3ctitle\x3e\x3c/title\x3e\x3c/head\x3e\x3cbody style\x3d"margin: 0; overflow: hidden; background: transparent;"\x3e',
+'\x3cform enctype\x3d"multipart/form-data" method\x3d"POST" dir\x3d"'+l+'" lang\x3d"'+m+'" action\x3d"',CKEDITOR.tools.htmlEncode(e.action),'"\x3e\x3clabel id\x3d"',b.labelId,'" for\x3d"',t,'" style\x3d"display:none"\x3e',CKEDITOR.tools.htmlEncode(e.label),'\x3c/label\x3e\x3cinput style\x3d"width:100%" id\x3d"',t,'" aria-labelledby\x3d"',b.labelId,'" type\x3d"file" name\x3d"',CKEDITOR.tools.htmlEncode(e.id||"cke_upload"),'" size\x3d"',CKEDITOR.tools.htmlEncode(0<c?c:""),'" /\x3e\x3c/form\x3e\x3c/body\x3e\x3c/html\x3e\x3cscript\x3e',
+CKEDITOR.env.ie?"("+CKEDITOR.tools.fixDomain+")();":"","window.parent.CKEDITOR.tools.callFunction("+h+");","window.onbeforeunload \x3d function() {window.parent.CKEDITOR.tools.callFunction("+k+")}","\x3c/script\x3e"].join(""));g.$.close();for(c=0;c<f.length;c++)f[c].enable()}var b=this._,g=CKEDITOR.document.getById(b.frameId).getFrameDocument(),e=b.definition,f=b.buttons,h=this.formLoadedNumber,k=this.formUnloadNumber,l=b.dialog._.editor.lang.dir,m=b.dialog._.editor.langCode;h||(h=this.formLoadedNumber=
+CKEDITOR.tools.addFunction(function(){this.fire("formLoaded")},this),k=this.formUnloadNumber=CKEDITOR.tools.addFunction(function(){this.getInputElement().clearCustomData()},this),this.getDialog()._.editor.on("destroy",function(){CKEDITOR.tools.removeFunction(h);CKEDITOR.tools.removeFunction(k)}));CKEDITOR.env.gecko?setTimeout(a,500):a()},getValue:function(){return this.getInputElement().$.value||""},setInitValue:function(){this._.initValue=""},eventProcessors:{onChange:function(a,b){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",b)}},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",h);CKEDITOR.dialog.addUIElement("password",h);CKEDITOR.dialog.addUIElement("tel",h);
+CKEDITOR.dialog.addUIElement("textarea",f);CKEDITOR.dialog.addUIElement("checkbox",f);CKEDITOR.dialog.addUIElement("radio",f);CKEDITOR.dialog.addUIElement("button",f);CKEDITOR.dialog.addUIElement("select",f);CKEDITOR.dialog.addUIElement("file",f);CKEDITOR.dialog.addUIElement("fileButton",f);CKEDITOR.dialog.addUIElement("html",f);CKEDITOR.dialog.addUIElement("fieldset",{build:function(a,b,g){for(var e=b.children,f,h=[],k=[],l=0;l<e.length&&(f=e[l]);l++){var m=[];h.push(m);k.push(CKEDITOR.dialog._.uiElementBuilders[f.type].build(a,
+f,m))}return new CKEDITOR.ui.dialog[b.type](a,k,h,g,b)}})}}),CKEDITOR.DIALOG_RESIZE_NONE=0,CKEDITOR.DIALOG_RESIZE_WIDTH=1,CKEDITOR.DIALOG_RESIZE_HEIGHT=2,CKEDITOR.DIALOG_RESIZE_BOTH=3,CKEDITOR.DIALOG_STATE_IDLE=1,CKEDITOR.DIALOG_STATE_BUSY=2,function(){function b(a){a._.tabBarMode=!0;a._.tabs[a._.currentTabId][0].focus();a._.currentFocusIndex=-1}function h(){for(var a=this._.tabIdList.length,c=CKEDITOR.tools.indexOf(this._.tabIdList,this._.currentTabId)+a,b=c-1;b>c-a;b--)if(this._.tabs[this._.tabIdList[b%
+a]][0].$.offsetHeight)return this._.tabIdList[b%a];return null}function f(){for(var a=this._.tabIdList.length,c=CKEDITOR.tools.indexOf(this._.tabIdList,this._.currentTabId),b=c+1;b<c+a;b++)if(this._.tabs[this._.tabIdList[b%a]][0].$.offsetHeight)return this._.tabIdList[b%a];return null}function e(a,c){for(var b=a.$.getElementsByTagName("input"),d=0,g=b.length;d<g;d++){var e=new CKEDITOR.dom.element(b[d]);"text"==e.getAttribute("type").toLowerCase()&&(c?(e.setAttribute("value",e.getCustomData("fake_value")||
+""),e.removeCustomData("fake_value")):(e.setCustomData("fake_value",e.getAttribute("value")),e.setAttribute("value","")))}}function a(a,c){var b=this.getInputElement();b&&(a?b.removeAttribute("aria-invalid"):b.setAttribute("aria-invalid",!0));a||(this.select?this.select():this.focus());c&&alert(c);this.fire("validated",{valid:a,msg:c})}function k(){var a=this.getInputElement();a&&a.removeAttribute("aria-invalid")}function l(a){var c=CKEDITOR.dom.element.createFromHtml(CKEDITOR.addTemplate("dialog",
+M).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,hidpi:CKEDITOR.env.hidpi?"cke_hidpi":""})),b=c.getChild([0,0,0,0,0]),d=b.getChild(0),g=b.getChild(1);a.plugins.clipboard&&CKEDITOR.plugins.clipboard.preventDefaultDropOnElement(b);!CKEDITOR.env.ie||CKEDITOR.env.quirks||CKEDITOR.env.edge||(a="javascript:void(function(){"+encodeURIComponent("document.open();("+
+CKEDITOR.tools.fixDomain+")();document.close();")+"}())",CKEDITOR.dom.element.createFromHtml('\x3ciframe frameBorder\x3d"0" class\x3d"cke_iframe_shim" src\x3d"'+a+'" tabIndex\x3d"-1"\x3e\x3c/iframe\x3e').appendTo(b.getParent()));d.unselectable();g.unselectable();return{element:c,parts:{dialog:c.getChild(0),title:d,close:g,tabs:b.getChild(2),contents:b.getChild([3,0,0,0]),footer:b.getChild([3,0,1,0])}}}function m(a,c,b){this.element=c;this.focusIndex=b;this.tabIndex=0;this.isFocusable=function(){return!c.getAttribute("disabled")&&
+c.isVisible()};this.focus=function(){a._.currentFocusIndex=this.focusIndex;this.element.focus()};c.on("keydown",function(a){a.data.getKeystroke()in{32:1,13:1}&&this.fire("click")});c.on("focus",function(){this.fire("mouseover")});c.on("blur",function(){this.fire("mouseout")})}function c(a){function c(){a.layout()}var b=CKEDITOR.document.getWindow();b.on("resize",c);a.on("hide",function(){b.removeListener("resize",c)})}function d(a,c){this.dialog=a;for(var b=c.contents,d=0,e;e=b[d];d++)b[d]=e&&new g(a,
+e);CKEDITOR.tools.extend(this,c)}function g(a,c){this._={dialog:a};CKEDITOR.tools.extend(this,c)}function n(a){function c(b){var n=a.getSize(),k=a.parts.dialog.getParent().getClientSize(),l=b.data.$.screenX,m=b.data.$.screenY,q=l-d.x,t=m-d.y;d={x:l,y:m};g.x+=q;g.y+=t;l=g.x+h[3]<f?-h[3]:g.x-h[1]>k.width-n.width-f?k.width-n.width+("rtl"==e.lang.dir?0:h[1]):g.x;n=g.y+h[0]<f?-h[0]:g.y-h[2]>k.height-n.height-f?k.height-n.height+h[2]:g.y;l=Math.floor(l);n=Math.floor(n);a.move(l,n,1);b.data.preventDefault()}
+function b(){CKEDITOR.document.removeListener("mousemove",c);CKEDITOR.document.removeListener("mouseup",b);if(CKEDITOR.env.ie6Compat){var a=E.getChild(0).getFrameDocument();a.removeListener("mousemove",c);a.removeListener("mouseup",b)}}var d=null,g=null,e=a.getParentEditor(),f=e.config.dialog_magnetDistance,h=CKEDITOR.skin.margins||[0,0,0,0];"undefined"==typeof f&&(f=20);a.parts.title.on("mousedown",function(e){if(!a._.moved){var f=a._.element;f.getFirst().setStyle("position","absolute");f.removeStyle("display");
+a._.moved=!0;a.layout()}d={x:e.data.$.screenX,y:e.data.$.screenY};CKEDITOR.document.on("mousemove",c);CKEDITOR.document.on("mouseup",b);g=a.getPosition();CKEDITOR.env.ie6Compat&&(f=E.getChild(0).getFrameDocument(),f.on("mousemove",c),f.on("mouseup",b));e.data.preventDefault()},a)}function y(a){function c(b){var m="rtl"==e.lang.dir,q=l.width,t=l.height,r=q+(b.data.$.screenX-k.x)*(m?-1:1)*(a._.moved?1:2),Q=t+(b.data.$.screenY-k.y)*(a._.moved?1:2),u=a._.element.getFirst(),u=m&&parseInt(u.getComputedStyle("right"),
+10),w=a.getPosition();w.x=w.x||0;w.y=w.y||0;w.y+Q>n.height&&(Q=n.height-w.y);(m?u:w.x)+r>n.width&&(r=n.width-(m?u:w.x));Q=Math.floor(Q);r=Math.floor(r);if(g==CKEDITOR.DIALOG_RESIZE_WIDTH||g==CKEDITOR.DIALOG_RESIZE_BOTH)q=Math.max(d.minWidth||0,r-f);if(g==CKEDITOR.DIALOG_RESIZE_HEIGHT||g==CKEDITOR.DIALOG_RESIZE_BOTH)t=Math.max(d.minHeight||0,Q-h);a.resize(q,t);a._.moved&&v(a,a._.position.x,a._.position.y);a._.moved||a.layout();b.data.preventDefault()}function b(){CKEDITOR.document.removeListener("mouseup",
+b);CKEDITOR.document.removeListener("mousemove",c);m&&(m.remove(),m=null);if(CKEDITOR.env.ie6Compat){var a=E.getChild(0).getFrameDocument();a.removeListener("mouseup",b);a.removeListener("mousemove",c)}}var d=a.definition,g=d.resizable;if(g!=CKEDITOR.DIALOG_RESIZE_NONE){var e=a.getParentEditor(),f,h,n,k,l,m,q=CKEDITOR.tools.addFunction(function(d){function g(a){return a.isVisible()}l=a.getSize();var e=a.parts.contents,q=e.$.getElementsByTagName("iframe").length,t=!(CKEDITOR.env.gecko||CKEDITOR.env.ie&&
+CKEDITOR.env.quirks);q&&(m=CKEDITOR.dom.element.createFromHtml('\x3cdiv class\x3d"cke_dialog_resize_cover" style\x3d"height: 100%; position: absolute; width: 100%; left:0; top:0;"\x3e\x3c/div\x3e'),e.append(m));h=l.height-a.parts.contents.getFirst(g).getSize("height",t);f=l.width-a.parts.contents.getFirst(g).getSize("width",1);k={x:d.screenX,y:d.screenY};n=CKEDITOR.document.getWindow().getViewPaneSize();CKEDITOR.document.on("mousemove",c);CKEDITOR.document.on("mouseup",b);CKEDITOR.env.ie6Compat&&
+(e=E.getChild(0).getFrameDocument(),e.on("mousemove",c),e.on("mouseup",b));d.preventDefault&&d.preventDefault()});a.on("load",function(){var c="";g==CKEDITOR.DIALOG_RESIZE_WIDTH?c=" cke_resizer_horizontal":g==CKEDITOR.DIALOG_RESIZE_HEIGHT&&(c=" cke_resizer_vertical");c=CKEDITOR.dom.element.createFromHtml('\x3cdiv class\x3d"cke_resizer'+c+" cke_resizer_"+e.lang.dir+'" title\x3d"'+CKEDITOR.tools.htmlEncode(e.lang.common.resize)+'" onmousedown\x3d"CKEDITOR.tools.callFunction('+q+', event )"\x3e'+("ltr"==
+e.lang.dir?"â—¢":"â—£")+"\x3c/div\x3e");a.parts.footer.append(c,1)});e.on("destroy",function(){CKEDITOR.tools.removeFunction(q)})}}function v(a,c,b){var d=a.parts.dialog.getParent().getClientSize(),g=a.getSize(),e=a._.viewportRatio,f=Math.max(d.width-g.width,0),d=Math.max(d.height-g.height,0);e.width=f?c/f:e.width;e.height=d?b/d:e.height;a._.viewportRatio=e}function p(a){a.data.preventDefault(1)}function q(a){var c=a.config,b=CKEDITOR.skinName||a.config.skin,d=c.dialog_backgroundCoverColor||("moono-lisa"==
+b?"black":"white"),b=c.dialog_backgroundCoverOpacity,g=c.baseFloatZIndex,c=CKEDITOR.tools.genKey(d,b,g),e=L[c];CKEDITOR.document.getBody().addClass("cke_dialog_open");e?e.show():(g=['\x3cdiv tabIndex\x3d"-1" style\x3d"position: ',CKEDITOR.env.ie6Compat?"absolute":"fixed","; z-index: ",g,"; top: 0px; left: 0px; ","; width: 100%; height: 100%;",CKEDITOR.env.ie6Compat?"":"background-color: "+d,'" class\x3d"cke_dialog_background_cover"\x3e'],CKEDITOR.env.ie6Compat&&(d="\x3chtml\x3e\x3cbody style\x3d\\'background-color:"+
+d+";\\'\x3e\x3c/body\x3e\x3c/html\x3e",g.push('\x3ciframe hidefocus\x3d"true" frameborder\x3d"0" id\x3d"cke_dialog_background_iframe" src\x3d"javascript:'),g.push("void((function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.write( '"+d+"' );document.close();")+"})())"),g.push('" style\x3d"position:absolute;left:0;top:0;width:100%;height: 100%;filter: progid:DXImageTransform.Microsoft.Alpha(opacity\x3d0)"\x3e\x3c/iframe\x3e')),g.push("\x3c/div\x3e"),e=CKEDITOR.dom.element.createFromHtml(g.join("")),
+e.setOpacity(void 0!==b?b:.5),e.on("keydown",p),e.on("keypress",p),e.on("keyup",p),e.appendTo(CKEDITOR.document.getBody()),L[c]=e);a.focusManager.add(e);E=e;CKEDITOR.env.mac&&CKEDITOR.env.webkit||e.focus()}function r(a){CKEDITOR.document.getBody().removeClass("cke_dialog_open");E&&(a.focusManager.remove(E),E.hide())}function x(a){var c=a.data.$.ctrlKey||a.data.$.metaKey,b=a.data.$.altKey,d=a.data.$.shiftKey,g=String.fromCharCode(a.data.$.keyCode);(c=R[(c?"CTRL+":"")+(b?"ALT+":"")+(d?"SHIFT+":"")+
+g])&&c.length&&(c=c[c.length-1],c.keydown&&c.keydown.call(c.uiElement,c.dialog,c.key),a.data.preventDefault())}function t(a){var c=a.data.$.ctrlKey||a.data.$.metaKey,b=a.data.$.altKey,d=a.data.$.shiftKey,g=String.fromCharCode(a.data.$.keyCode);(c=R[(c?"CTRL+":"")+(b?"ALT+":"")+(d?"SHIFT+":"")+g])&&c.length&&(c=c[c.length-1],c.keyup&&(c.keyup.call(c.uiElement,c.dialog,c.key),a.data.preventDefault()))}function z(a,c,b,d,g){(R[b]||(R[b]=[])).push({uiElement:a,dialog:c,key:b,keyup:g||a.accessKeyUp,keydown:d||
+a.accessKeyDown})}function u(a){for(var c in R){for(var b=R[c],d=b.length-1;0<=d;d--)b[d].dialog!=a&&b[d].uiElement!=a||b.splice(d,1);0===b.length&&delete R[c]}}function w(a,c){a._.accessKeyMap[c]&&a.selectPage(a._.accessKeyMap[c])}function B(){}var C=CKEDITOR.tools.cssLength,A,E,F=!1,K=!CKEDITOR.env.ie||CKEDITOR.env.edge,M='\x3cdiv class\x3d"cke_reset_all cke_dialog_container {editorId} {editorDialogClass} {hidpi}" dir\x3d"{langDir}" style\x3d"'+(K?"display:flex":"")+'" lang\x3d"{langCode}" role\x3d"dialog" aria-labelledby\x3d"cke_dialog_title_{id}"\x3e\x3ctable class\x3d"cke_dialog '+
+CKEDITOR.env.cssClass+' cke_{langDir}" style\x3d"'+(K?"margin:auto":"position:absolute")+'" role\x3d"presentation"\x3e\x3ctr\x3e\x3ctd role\x3d"presentation"\x3e\x3cdiv class\x3d"cke_dialog_body" role\x3d"presentation"\x3e\x3cdiv id\x3d"cke_dialog_title_{id}" class\x3d"cke_dialog_title" role\x3d"presentation"\x3e\x3c/div\x3e\x3ca id\x3d"cke_dialog_close_button_{id}" class\x3d"cke_dialog_close_button" href\x3d"javascript:void(0)" title\x3d"{closeTitle}" role\x3d"button"\x3e\x3cspan class\x3d"cke_label"\x3eX\x3c/span\x3e\x3c/a\x3e\x3cdiv id\x3d"cke_dialog_tabs_{id}" class\x3d"cke_dialog_tabs" role\x3d"tablist"\x3e\x3c/div\x3e\x3ctable class\x3d"cke_dialog_contents" role\x3d"presentation"\x3e\x3ctr\x3e\x3ctd id\x3d"cke_dialog_contents_{id}" class\x3d"cke_dialog_contents_body" role\x3d"presentation"\x3e\x3c/td\x3e\x3c/tr\x3e\x3ctr\x3e\x3ctd id\x3d"cke_dialog_footer_{id}" class\x3d"cke_dialog_footer" role\x3d"presentation"\x3e\x3c/td\x3e\x3c/tr\x3e\x3c/table\x3e\x3c/div\x3e\x3c/td\x3e\x3c/tr\x3e\x3c/table\x3e\x3c/div\x3e';
+CKEDITOR.dialog=function(c,g){function e(){var a=E._.focusList;a.sort(function(a,c){return a.tabIndex!=c.tabIndex?c.tabIndex-a.tabIndex:a.focusIndex-c.focusIndex});for(var c=a.length,b=0;b<c;b++)a[b].focusIndex=b}function m(a){var c=E._.focusList;a=a||0;if(!(1>c.length)){var b=E._.currentFocusIndex;E._.tabBarMode&&0>a&&(b=0);try{c[b].getInputElement().$.blur()}catch(d){}var g=b,e=1<E._.pageCount;do{g+=a;if(e&&!E._.tabBarMode&&(g==c.length||-1==g)){E._.tabBarMode=!0;E._.tabs[E._.currentTabId][0].focus();
+E._.currentFocusIndex=-1;return}g=(g+c.length)%c.length;if(g==b)break}while(a&&!c[g].isFocusable());c[g].focus();"text"==c[g].type&&c[g].select()}}function q(a){if(E==CKEDITOR.dialog._.currentTop){var d=a.data.getKeystroke(),g="rtl"==c.lang.dir,e=[37,38,39,40];z=v=0;if(9==d||d==CKEDITOR.SHIFT+9)m(d==CKEDITOR.SHIFT+9?-1:1),z=1;else if(d==CKEDITOR.ALT+121&&!E._.tabBarMode&&1<E.getPageCount())b(E),z=1;else if(-1!=CKEDITOR.tools.indexOf(e,d)&&E._.tabBarMode)d=-1!=CKEDITOR.tools.indexOf([g?39:37,38],d)?
+h.call(E):f.call(E),E.selectPage(d),E._.tabs[d][0].focus(),z=1;else if(13!=d&&32!=d||!E._.tabBarMode)if(13==d)d=a.data.getTarget(),d.is("a","button","select","textarea")||d.is("input")&&"button"==d.$.type||((d=this.getButton("ok"))&&CKEDITOR.tools.setTimeout(d.click,0,d),z=1),v=1;else if(27==d)(d=this.getButton("cancel"))?CKEDITOR.tools.setTimeout(d.click,0,d):!1!==this.fire("cancel",{hide:!0}).hide&&this.hide(),v=1;else return;else this.selectPage(this._.currentTabId),this._.tabBarMode=!1,this._.currentFocusIndex=
+-1,m(1),z=1;t(a)}}function t(a){z?a.data.preventDefault(1):v&&a.data.stopPropagation()}var r=CKEDITOR.dialog._.dialogDefinitions[g],u=CKEDITOR.tools.clone(A),w=c.config.dialog_buttonsOrder||"OS",x=c.lang.dir,p={},z,v;("OS"==w&&CKEDITOR.env.mac||"rtl"==w&&"ltr"==x||"ltr"==w&&"rtl"==x)&&u.buttons.reverse();r=CKEDITOR.tools.extend(r(c),u);r=CKEDITOR.tools.clone(r);r=new d(this,r);u=l(c);this._={editor:c,element:u.element,name:g,model:null,contentSize:{width:0,height:0},size:{width:0,height:0},contents:{},
+buttons:{},accessKeyMap:{},viewportRatio:{width:.5,height:.5},tabs:{},tabIdList:[],currentTabId:null,currentTabIndex:null,pageCount:0,lastTab:null,tabBarMode:!1,focusList:[],currentFocusIndex:0,hasFocus:!1};this.parts=u.parts;CKEDITOR.tools.setTimeout(function(){c.fire("ariaWidget",this.parts.contents)},0,this);u={top:0,visibility:"hidden"};CKEDITOR.env.ie6Compat&&(u.position="absolute");u["rtl"==x?"right":"left"]=0;this.parts.dialog.setStyles(u);CKEDITOR.event.call(this);this.definition=r=CKEDITOR.fire("dialogDefinition",
+{name:g,definition:r,dialog:this},c).definition;if(!("removeDialogTabs"in c._)&&c.config.removeDialogTabs){u=c.config.removeDialogTabs.split(";");for(x=0;x<u.length;x++)if(w=u[x].split(":"),2==w.length){var B=w[0];p[B]||(p[B]=[]);p[B].push(w[1])}c._.removeDialogTabs=p}if(c._.removeDialogTabs&&(p=c._.removeDialogTabs[g]))for(x=0;x<p.length;x++)r.removeContents(p[x]);if(r.onLoad)this.on("load",r.onLoad);if(r.onShow)this.on("show",r.onShow);if(r.onHide)this.on("hide",r.onHide);if(r.onOk)this.on("ok",
+function(a){c.fire("saveSnapshot");setTimeout(function(){c.fire("saveSnapshot")},0);!1===r.onOk.call(this,a)&&(a.data.hide=!1)});this.state=CKEDITOR.DIALOG_STATE_IDLE;if(r.onCancel)this.on("cancel",function(a){!1===r.onCancel.call(this,a)&&(a.data.hide=!1)});var E=this,C=function(a){var c=E._.contents,b=!1,d;for(d in c)for(var g in c[d])if(b=a.call(this,c[d][g]))return};this.on("ok",function(c){C(function(b){if(b.validate){var d=b.validate(this),g="string"==typeof d||!1===d;g&&(c.data.hide=!1,c.stop());
+a.call(b,!g,"string"==typeof d?d:void 0);return g}})},this,null,0);this.on("cancel",function(a){C(function(b){if(b.isChanged())return c.config.dialog_noConfirmCancel||confirm(c.lang.common.confirmCancel)||(a.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=m;var K=this._.element;c.focusManager.add(K,1);this.on("show",function(){K.on("keydown",q,this);if(CKEDITOR.env.gecko)K.on("keypress",
+t,this)});this.on("hide",function(){K.removeListener("keydown",q);CKEDITOR.env.gecko&&K.removeListener("keypress",t);C(function(a){k.apply(a)})});this.on("iframeAdded",function(a){(new CKEDITOR.dom.document(a.data.iframe.$.contentWindow.document)).on("keydown",q,this,null,0)});this.on("show",function(){e();var a=1<E._.pageCount;c.config.dialog_startupFocusTab&&a?(E._.tabBarMode=!0,E._.tabs[E._.currentTabId][0].focus(),E._.currentFocusIndex=-1):this._.hasFocus||(this._.currentFocusIndex=a?-1:this._.focusList.length-
+1,r.onFocus?(a=r.onFocus.call(this))&&a.focus():m(1))},this,null,4294967295);if(CKEDITOR.env.ie6Compat)this.on("load",function(){var a=this.getElement(),c=a.getFirst();c.remove();c.appendTo(a)},this);n(this);y(this);(new CKEDITOR.dom.text(r.title,CKEDITOR.document)).appendTo(this.parts.title);for(x=0;x<r.contents.length;x++)(p=r.contents[x])&&this.addPage(p);this.parts.tabs.on("click",function(a){var c=a.data.getTarget();c.hasClass("cke_dialog_tab")&&(c=c.$.id,this.selectPage(c.substring(4,c.lastIndexOf("_"))),
+b(this),a.data.preventDefault())},this);x=[];p=CKEDITOR.dialog._.uiElementBuilders.hbox.build(this,{type:"hbox",className:"cke_dialog_footer_buttons",widths:[],children:r.buttons},x).getChild();this.parts.footer.setHtml(x.join(""));for(x=0;x<p.length;x++)this._.buttons[p[x].id]=p[x]};CKEDITOR.dialog.prototype={destroy:function(){this.hide();this._.element.remove()},resize:function(a,c){if(!this._.contentSize||this._.contentSize.width!=a||this._.contentSize.height!=c){CKEDITOR.dialog.fire("resize",
+{dialog:this,width:a,height:c},this._.editor);this.fire("resize",{width:a,height:c},this._.editor);this.parts.contents.setStyles({width:a+"px",height:c+"px"});if("rtl"==this._.editor.lang.dir&&this._.position){var b=this.parts.dialog.getParent().getClientSize().width;this._.position.x=b-this._.contentSize.width-parseInt(this._.element.getFirst().getStyle("right"),10)}this._.contentSize={width:a,height:c}}},getSize:function(){var a=this._.element.getFirst();return{width:a.$.offsetWidth||0,height:a.$.offsetHeight||
+0}},move:function(a,c,b){var d=this._.element.getFirst(),g="rtl"==this._.editor.lang.dir;CKEDITOR.env.ie&&d.setStyle("zoom","100%");var e=this.parts.dialog.getParent().getClientSize(),f=this.getSize(),h=this._.viewportRatio,n=Math.max(e.width-f.width,0),e=Math.max(e.height-f.height,0);this._.position&&this._.position.x==a&&this._.position.y==c?(a=Math.floor(n*h.width),c=Math.floor(e*h.height)):v(this,a,c);this._.position={x:a,y:c};g&&(a=n-a);c={top:(0<c?c:0)+"px"};c[g?"right":"left"]=(0<a?a:0)+"px";
+d.setStyles(c);b&&(this._.moved=1)},getPosition:function(){return CKEDITOR.tools.extend({},this._.position)},show:function(){var a=this._.element,b=this.definition,d=CKEDITOR.document.getBody(),g=this._.editor.config.baseFloatZIndex;a.getParent()&&a.getParent().equals(d)?a.setStyle("display",K?"flex":"block"):a.appendTo(d);this.resize(this._.contentSize&&this._.contentSize.width||b.width||b.minWidth,this._.contentSize&&this._.contentSize.height||b.height||b.minHeight);this.reset();null===this._.currentTabId&&
+this.selectPage(this.definition.contents[0].id);null===CKEDITOR.dialog._.currentZIndex&&(CKEDITOR.dialog._.currentZIndex=g);this._.element.getFirst().setStyle("z-index",CKEDITOR.dialog._.currentZIndex+=10);this.getElement().setStyle("z-index",CKEDITOR.dialog._.currentZIndex);null===CKEDITOR.dialog._.currentTop?(CKEDITOR.dialog._.currentTop=this,this._.parentDialog=null,q(this._.editor)):CKEDITOR.dialog._.currentTop!==this&&(this._.parentDialog=CKEDITOR.dialog._.currentTop,d=this._.parentDialog.getElement().getFirst(),
+d.$.style.zIndex-=Math.floor(g/2),this._.parentDialog.getElement().setStyle("z-index",d.$.style.zIndex),CKEDITOR.dialog._.currentTop=this);a.on("keydown",x);a.on("keyup",t);this._.hasFocus=!1;for(var e in b.contents)if(b.contents[e]){var a=b.contents[e],g=this._.tabs[a.id],d=a.requiredContent,f=0;if(g){for(var h in this._.contents[a.id]){var n=this._.contents[a.id][h];"hbox"!=n.type&&"vbox"!=n.type&&n.getInputElement()&&(n.requiredContent&&!this._.editor.activeFilter.check(n.requiredContent)?n.disable():
 (n.enable(),f++))}!f||d&&!this._.editor.activeFilter.check(d)?g[0].addClass("cke_dialog_tab_disabled"):g[0].removeClass("cke_dialog_tab_disabled")}}CKEDITOR.tools.setTimeout(function(){this.layout();c(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;if(this._.moved||!K){var b=this.getSize(),c=CKEDITOR.document.getWindow().getViewPaneSize(),d;this._.moved&&this._.position?(d=this._.position.x,b=this._.position.y):(d=(c.width-b.width)/2,b=(c.height-b.height)/2);CKEDITOR.env.ie6Compat||(a.setStyle("position","absolute"),a.removeStyle("margin"));d=Math.floor(d);b=Math.floor(b);this.move(d,b)}},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(q(this);CKEDITOR.dialog._.currentTop!=this;)CKEDITOR.dialog._.currentTop.hide();if(this._.parentDialog){var b=this._.parentDialog.getElement().getFirst();this._.parentDialog.getElement().removeStyle("z-index");b.setStyle("z-index",parseInt(b.$.style.zIndex,10)+Math.floor(this._.editor.config.baseFloatZIndex/2))}else r(this._.editor);if(CKEDITOR.dialog._.currentTop=this._.parentDialog)CKEDITOR.dialog._.currentZIndex-=
-10;else{CKEDITOR.dialog._.currentZIndex=null;a.removeListener("keydown",x);a.removeListener("keyup",u);var c=this._.editor;c.focus();setTimeout(function(){c.focusManager.unlock();CKEDITOR.env.iOS&&c.window.focus()},0)}delete this._.parentDialog;this.foreach(function(a){a.resetInitValue&&a.resetInitValue()});this.setState(CKEDITOR.DIALOG_STATE_IDLE)}},addPage:function(a){if(!a.requiredContent||this._.editor.filter.check(a.requiredContent)){for(var b=[],c=a.label?' title\x3d"'+CKEDITOR.tools.htmlEncode(a.label)+
-'"':"",d=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),g=this._.contents[a.id]={},e=d.getChild(),f=0;d=e.shift();)d.notAllowed||"hbox"==d.type||"vbox"==d.type||f++,g[d.id]=d,"function"==typeof d.getChild&&e.push.apply(e,d.getChild());f||(a.hidden=!0);b=CKEDITOR.dom.element.createFromHtml(b.join(""));b.setAttribute("role","tabpanel");b.setStyle("min-height",
-"100%");d=CKEDITOR.env;g="cke_"+a.id+"_"+CKEDITOR.tools.getNextNumber();c=CKEDITOR.dom.element.createFromHtml(['\x3ca class\x3d"cke_dialog_tab"',0<this._.pageCount?" cke_last":"cke_first",c,a.hidden?' style\x3d"display:none"':"",' id\x3d"',g,'"',d.gecko&&!d.hc?"":' href\x3d"javascript:void(0)"',' tabIndex\x3d"-1" hidefocus\x3d"true" role\x3d"tab"\x3e',a.label,"\x3c/a\x3e"].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();b.setAttribute("name",a.id);b.appendTo(this.parts.contents);c.unselectable();this.parts.tabs.append(c);a.accessKey&&(z(this,this,"CTRL+"+a.accessKey,B,v),this._.accessKeyMap["CTRL+"+a.accessKey]=a.id)}},selectPage:function(a){if(this._.currentTabId!=a&&!this._.tabs[a][0].hasClass("cke_dialog_tab_disabled")&&!1!==this.fire("selectPage",{page:a,currentPage:this._.currentTabId})){for(var b in this._.tabs){var c=this._.tabs[b][0],d=this._.tabs[b][1];b!=a&&(c.removeClass("cke_dialog_tab_selected"),
-c.removeAttribute("aria-selected"),d.hide());d.setAttribute("aria-hidden",b!=a)}var g=this._.tabs[a];g[0].addClass("cke_dialog_tab_selected");g[0].setAttribute("aria-selected",!0);CKEDITOR.env.ie6Compat||CKEDITOR.env.ie7Compat?(e(g[1]),g[1].show(),setTimeout(function(){e(g[1],1)},0)):g[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(h.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 l(this,a,b));else{this._.focusList.splice(b,0,new l(this,a,b));for(var c=b+1;c<this._.focusList.length;c++)this._.focusList[c].focusIndex++}},setState:function(a){if(this.state!=a){this.state=a;if(a==CKEDITOR.DIALOG_STATE_BUSY){if(!this.parts.spinner){var b=this.getParentEditor().lang.dir,c={attributes:{"class":"cke_dialog_spinner"},styles:{"float":"rtl"==b?"right":"left"}};c.styles["margin-"+("rtl"==b?"left":"right")]=
-"8px";this.parts.spinner=CKEDITOR.document.createElement("div",c);this.parts.spinner.setHtml("\x26#8987;");this.parts.spinner.appendTo(this.parts.title,1)}this.parts.spinner.show();this.getButton("ok").disable()}else a==CKEDITOR.DIALOG_STATE_IDLE&&(this.parts.spinner&&this.parts.spinner.hide(),this.getButton("ok").enable());this.fire("state",a)}},getModel:function(a){return this._.model?this._.model:this.definition.getModel?this.definition.getModel(a):null},setModel:function(a){this._.model=a},getMode:function(a){if(this.definition.getMode)return this.definition.getMode(a);
-a=this.getModel(a);return!a||a instanceof CKEDITOR.dom.element&&!a.getParent()?CKEDITOR.dialog.CREATION_MODE:CKEDITOR.dialog.EDITING_MODE}};CKEDITOR.tools.extend(CKEDITOR.dialog,{CREATION_MODE:0,EDITING_MODE:1,add:function(a,b){this._.dialogDefinitions[a]&&"function"!=typeof b||(this._.dialogDefinitions[a]=b)},exists:function(a){return!!this._.dialogDefinitions[a]},getCurrent:function(){return CKEDITOR.dialog._.currentTop},isTabEnabled:function(a,b,c){a=a.config.removeDialogTabs;return!(a&&a.match(new RegExp("(?:^|;)"+
-b+":"+c+"(?:$|;)","i")))},okButton:function(){var a=function(a,b){b=b||{};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()}},b,!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,b){b=b||{};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()}},b,!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);
-A={resizable:CKEDITOR.DIALOG_RESIZE_BOTH,minWidth:600,minHeight:400,buttons:[CKEDITOR.dialog.okButton,CKEDITOR.dialog.cancelButton]};var C=function(a,b,c){for(var d=0,g;g=a[d];d++)if(g.id==b||c&&g[c]&&(g=C(g[c],b,c)))return g;return null},O=function(a,b,c,d,g){if(c){for(var e=0,f;f=a[e];e++){if(f.id==c)return a.splice(e,0,b),b;if(d&&f[d]&&(f=O(f[d],b,c,d,!0)))return f}if(g)return null}a.push(b);return b},I=function(a,b,c){for(var d=0,g;g=a[d];d++){if(g.id==b)return a.splice(d,1);if(c&&g[c]&&(g=I(g[c],
-b,c)))return g}return null};d.prototype={getContents:function(a){return C(this.contents,a)},getButton:function(a){return C(this.buttons,a)},addContents:function(a,b){return O(this.contents,a,b)},addButton:function(a,b){return O(this.buttons,a,b)},removeContents:function(a){I(this.contents,a)},removeButton:function(a){I(this.buttons,a)}};g.prototype={get:function(a){return C(this.elements,a,"children")},add:function(a,b){return O(this.elements,a,b,"children")},remove:function(a){I(this.elements,a,
-"children")}};var M={},Q={};(function(){CKEDITOR.ui.dialog={uiElement:function(a,b,c,d,g,e,f){if(!(4>arguments.length)){var h=(d.call?d(b):d)||"div",n=["\x3c",h," "],k=(g&&g.call?g(b):g)||{},l=(e&&e.call?e(b):e)||{},m=(f&&f.call?f.call(this,a,b):f)||"",r=this.domId=l.id||CKEDITOR.tools.getNextId()+"_uiElement";b.requiredContent&&!a.getParentEditor().filter.check(b.requiredContent)&&(k.display="none",this.notAllowed=!0);l.id=r;var q={};b.type&&(q["cke_dialog_ui_"+b.type]=1);b.className&&(q[b.className]=
-1);b.disabled&&(q.cke_disabled=1);for(var t=l["class"]&&l["class"].split?l["class"].split(" "):[],r=0;r<t.length;r++)t[r]&&(q[t[r]]=1);t=[];for(r in q)t.push(r);l["class"]=t.join(" ");b.title&&(l.title=b.title);q=(b.style||"").split(";");b.align&&(t=b.align,k["margin-left"]="left"==t?0:"auto",k["margin-right"]="right"==t?0:"auto");for(r in k)q.push(r+":"+k[r]);b.hidden&&q.push("display:none");for(r=q.length-1;0<=r;r--)""===q[r]&&q.splice(r,1);0<q.length&&(l.style=(l.style?l.style+"; ":"")+q.join("; "));
-for(r in l)n.push(r+'\x3d"'+CKEDITOR.tools.htmlEncode(l[r])+'" ');n.push("\x3e",m,"\x3c/",h,"\x3e");c.push(n.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&&z(this,a,"CTRL+"+b.accessKey);var u=this;a.on("load",function(){var b=u.getInputElement();if(b){var c=u.type in{checkbox:1,ratio:1}&&CKEDITOR.env.ie&&8>CKEDITOR.env.version?"cke_dialog_ui_focused":"";b.on("focus",function(){a._.tabBarMode=!1;a._.hasFocus=!0;u.fire("focus");c&&this.addClass(c)});b.on("blur",function(){u.fire("blur");
-c&&this.removeClass(c)})}});CKEDITOR.tools.extend(this,b);this.keyboardFocusable&&(this.tabIndex=b.tabIndex||0,this.focusIndex=a._.focusList.push(this)-1,this.on("focus",function(){a._.currentFocusIndex=u.focusIndex}))}},hbox:function(a,b,c,d,g){if(!(4>arguments.length)){this._||(this._={});var e=this._.children=b,f=g&&g.widths||null,h=g&&g.height||null,n,k={role:"presentation"};g&&g.align&&(k.align=g.align);CKEDITOR.ui.dialog.uiElement.call(this,a,g||{type:"hbox"},d,"table",{},k,function(){var a=
-['\x3ctbody\x3e\x3ctr class\x3d"cke_dialog_ui_hbox"\x3e'];for(n=0;n<c.length;n++){var b="cke_dialog_ui_hbox_child",d=[];0===n&&(b="cke_dialog_ui_hbox_first");n==c.length-1&&(b="cke_dialog_ui_hbox_last");a.push('\x3ctd class\x3d"',b,'" role\x3d"presentation" ');f?f[n]&&d.push("width:"+D(f[n])):d.push("width:"+Math.floor(100/c.length)+"%");h&&d.push("height:"+D(h));g&&void 0!==g.padding&&d.push("padding:"+D(g.padding));CKEDITOR.env.ie&&CKEDITOR.env.quirks&&e[n].align&&d.push("text-align:"+e[n].align);
-0<d.length&&a.push('style\x3d"'+d.join("; ")+'" ');a.push("\x3e",c[n],"\x3c/td\x3e")}a.push("\x3c/tr\x3e\x3c/tbody\x3e");return a.join("")})}},vbox:function(a,b,c,d,g){if(!(3>arguments.length)){this._||(this._={});var e=this._.children=b,f=g&&g.width||null,h=g&&g.heights||null;CKEDITOR.ui.dialog.uiElement.call(this,a,g||{type:"vbox"},d,"div",null,{role:"presentation"},function(){var b=['\x3ctable role\x3d"presentation" cellspacing\x3d"0" border\x3d"0" '];b.push('style\x3d"');g&&g.expand&&b.push("height:100%;");
-b.push("width:"+D(f||"100%"),";");CKEDITOR.env.webkit&&b.push("float:none;");b.push('"');b.push('align\x3d"',CKEDITOR.tools.htmlEncode(g&&g.align||("ltr"==a.getParentEditor().lang.dir?"left":"right")),'" ');b.push("\x3e\x3ctbody\x3e");for(var d=0;d<c.length;d++){var n=[];b.push('\x3ctr\x3e\x3ctd role\x3d"presentation" ');f&&n.push("width:"+D(f||"100%"));h?n.push("height:"+D(h[d])):g&&g.expand&&n.push("height:"+Math.floor(100/c.length)+"%");g&&void 0!==g.padding&&n.push("padding:"+D(g.padding));CKEDITOR.env.ie&&
-CKEDITOR.env.quirks&&e[d].align&&n.push("text-align:"+e[d].align);0<n.length&&b.push('style\x3d"',n.join("; "),'" ');b.push(' class\x3d"cke_dialog_ui_vbox_child"\x3e',c[d],"\x3c/td\x3e\x3c/tr\x3e")}b.push("\x3c/tbody\x3e\x3c/table\x3e");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,d=function(a,b,c,d){b.on("load",function(){a.getInputElement().on(c,d,a)})},g;for(g in a)if(c=g.match(b))this.eventProcessors[g]?this.eventProcessors[g].call(this,this._.dialog,a[g]):d(this,this._.dialog,c[1].toLowerCase(),a[g]);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()?!0:!1}};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,b,c){for(var d=b.children,g,e=[],f=[],h=0;h<d.length&&(g=d[h]);h++){var n=[];e.push(n);f.push(CKEDITOR.dialog._.uiElementBuilders[g.type].build(a,g,n))}return new CKEDITOR.ui.dialog[b.type](a,
-f,e,c,b)}};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){var b=this.tabId;a.openDialog(this.dialogName,function(a){b&&a.selectPage(b)})},canUndo:!1,editorFocus:1};(function(){var a=/^([a]|[^a])+$/,b=/^\d*$/,c=/^\d*(?:\.\d+)?$/,d=/^(((\d*(\.\d+))|(\d*))(px|\%)?)?$/,g=/^(((\d*(\.\d+))|(\d*))(px|em|ex|in|cm|mm|pt|pc|\%)?)?$/i,
-e=/^(--|-?([a-zA-Z_]|\\))(\\|[a-zA-Z0-9-_])*\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,d=CKEDITOR.VALIDATE_AND,g=[],e;for(e=0;e<a.length;e++)if("function"==typeof a[e])g.push(a[e]);else break;e<a.length&&"string"==typeof a[e]&&(c=a[e],e++);e<a.length&&"number"==typeof a[e]&&(d=a[e]);var f=d==CKEDITOR.VALIDATE_AND?!0:!1;for(e=0;e<g.length;e++)f=d==
-CKEDITOR.VALIDATE_AND?f&&g[e](b):f||g[e](b);return f?!0:c}},regex:function(a,b){return function(c){c=this&&this.getValue?this.getValue():c;return a.test(c)?!0:b}},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 g.test(CKEDITOR.tools.trim(a))},a)},htmlLength:function(a){return this.functions(function(a){return d.test(CKEDITOR.tools.trim(a))},a)},inlineStyle:function(a){return this.functions(function(a){a=
-CKEDITOR.tools.trim(a).split(";");""===a[a.length-1]&&a.pop();return CKEDITOR.tools.array.every(a,function(a){return e.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 M)M[c].remove();M={}}a=a.editor._.storedDialogs;
-for(var d in a)a[d].destroy()})})();CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{openDialog:function(a,b,c){var d=null,g=CKEDITOR.dialog._.dialogDefinitions[a];null===CKEDITOR.dialog._.currentTop&&t(this);if("function"==typeof g)g=this._.storedDialogs||(this._.storedDialogs={}),d=g[a]||(g[a]=new CKEDITOR.dialog(this,a)),d.setModel(c),b&&b.call(d,d),d.show();else{if("failed"==g)throw r(this),Error('[CKEDITOR.dialog.openDialog] Dialog "'+a+'" failed when loading definition.');"string"==typeof g&&
-CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(g),function(){"function"!=typeof CKEDITOR.dialog._.dialogDefinitions[a]&&(CKEDITOR.dialog._.dialogDefinitions[a]="failed");this.openDialog(a,b,c)},this,0,1)}CKEDITOR.skin.loadPart("dialog");if(d)d.once("hide",function(){d.setModel(null)},null,null,999);return d}});CKEDITOR.plugins.add("dialog",{requires:"dialogui",init:function(a){F||(CKEDITOR.document.appendStyleSheet(this.path+"styles/dialog.css"),F=!0);a.on("doubleclick",function(b){b.data.dialog&&a.openDialog(b.data.dialog)},
-null,null,999)}})}(),function(){CKEDITOR.plugins.add("a11yhelp",{requires:"dialog",availableLangs:{af:1,ar:1,az:1,bg:1,ca:1,cs:1,cy:1,da:1,de:1,"de-ch":1,el:1,en:1,"en-au":1,"en-gb":1,eo:1,es:1,"es-mx":1,et:1,eu:1,fa:1,fi:1,fo:1,fr:1,"fr-ca":1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,id:1,it:1,ja:1,km:1,ko:1,ku:1,lt:1,lv:1,mk:1,mn:1,nb:1,nl:1,no:1,oc:1,pl:1,pt:1,"pt-br":1,ro:1,ru:1,si:1,sk:1,sl:1,sq:1,sr:1,"sr-latn":1,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,zh:1,"zh-cn":1},init:function(b){var h=this;b.addCommand("a11yHelp",
-{exec:function(){var f=b.langCode,f=h.availableLangs[f]?f:h.availableLangs[f.replace(/-.*/,"")]?f.replace(/-.*/,""):"en";CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(h.path+"dialogs/lang/"+f+".js"),function(){b.lang.a11yhelp=h.langEntries[f];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");b.on("ariaEditorHelpLabel",function(f){f.data.label=b.lang.common.editorHelp})}})}(),
-CKEDITOR.plugins.add("about",{requires:"dialog",init:function(b){var h=b.addCommand("about",new CKEDITOR.dialogCommand("about"));h.modes={wysiwyg:1,source:1};h.canUndo=!1;h.readOnly=1;b.ui.addButton&&b.ui.addButton("About",{label:b.lang.about.dlgTitle,command:"about",toolbar:"about"});CKEDITOR.dialog.add("about",this.path+"dialogs/about.js")}}),"use strict",function(){function b(b){function f(){m=b.document;k=m[CKEDITOR.env.ie?"getBody":"getDocumentElement"]();l=CKEDITOR.env.quirks?m.getBody():m.getDocumentElement();
-var a=CKEDITOR.env.quirks?l:l.findOne("body");a&&(a.setStyle("height","auto"),a.setStyle("min-height",CKEDITOR.env.safari?"0%":"auto"));c=CKEDITOR.dom.element.createFromHtml('\x3cspan style\x3d"margin:0;padding:0;border:0;clear:both;width:1px;height:1px;display:block;"\x3e'+(CKEDITOR.env.webkit?"\x26nbsp;":"")+"\x3c/span\x3e",m)}function e(){y&&l.setStyle("overflow-y","hidden");var e=b.window.getViewPaneSize().height,f;k.append(c);f=c.getDocumentPosition(m).y+c.$.offsetHeight;c.remove();f+=d;f=Math.max(f,
-g);f=Math.min(f,n);f!=e&&a!=f&&(f=b.fire("autoGrow",{currentHeight:e,newHeight:f}).newHeight,e="border-box"===b.container.getComputedStyle("box-sizing"),e=b.container.getSize("width",e),b.resize(e,f,!0),a=f);y||(f<n&&l.$.scrollHeight>l.$.clientHeight?l.setStyle("overflow-y","hidden"):l.removeStyle("overflow-y"))}var a,m,k,l,c,d=b.config.autoGrow_bottomSpace||0,g=void 0!==b.config.autoGrow_minHeight?b.config.autoGrow_minHeight:200,n=b.config.autoGrow_maxHeight||Infinity,y=!b.config.autoGrow_maxHeight;
-b.addCommand("autogrow",{exec:e,modes:{wysiwyg:1},readOnly:1,canUndo:!1,editorFocus:!1});var w={contentDom:1,key:1,selectionChange:1,insertElement:1,mode:1},p;for(p in w)b.on(p,function(c){"wysiwyg"==c.editor.mode&&setTimeout(function(){var c=b.getCommand("maximize");!b.window||c&&c.state==CKEDITOR.TRISTATE_ON?a=null:(e(),y||e())},100)});b.on("afterCommandExec",function(a){"maximize"==a.data.name&&"wysiwyg"==a.editor.mode&&(a.data.command.state==CKEDITOR.TRISTATE_ON?l.removeStyle("overflow-y"):e())});
+this.parts.dialog;if(this._.moved||!K){var c=this.getSize(),b=CKEDITOR.document.getWindow().getViewPaneSize(),d;this._.moved&&this._.position?(d=this._.position.x,c=this._.position.y):(d=(b.width-c.width)/2,c=(b.height-c.height)/2);CKEDITOR.env.ie6Compat||(a.setStyle("position","absolute"),a.removeStyle("margin"));d=Math.floor(d);c=Math.floor(c);this.move(d,c)}},foreach:function(a){for(var c in this._.contents)for(var b in this._.contents[c])a.call(this,this._.contents[c][b]);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(c){c.setup&&c.setup.apply(c,a)})},commitContent:function(){var a=arguments;this.foreach(function(c){CKEDITOR.env.ie&&this._.currentFocusIndex==c.focusIndex&&c.getInputElement().$.blur();c.commit&&c.commit.apply(c,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(u(this);CKEDITOR.dialog._.currentTop!=this;)CKEDITOR.dialog._.currentTop.hide();if(this._.parentDialog){var c=this._.parentDialog.getElement().getFirst();this._.parentDialog.getElement().removeStyle("z-index");c.setStyle("z-index",parseInt(c.$.style.zIndex,10)+Math.floor(this._.editor.config.baseFloatZIndex/2))}else r(this._.editor);if(CKEDITOR.dialog._.currentTop=this._.parentDialog)CKEDITOR.dialog._.currentZIndex-=
+10;else{CKEDITOR.dialog._.currentZIndex=null;a.removeListener("keydown",x);a.removeListener("keyup",t);var b=this._.editor;b.focus();setTimeout(function(){b.focusManager.unlock();CKEDITOR.env.iOS&&b.window.focus()},0)}delete this._.parentDialog;this.foreach(function(a){a.resetInitValue&&a.resetInitValue()});this.setState(CKEDITOR.DIALOG_STATE_IDLE)}},addPage:function(a){if(!a.requiredContent||this._.editor.filter.check(a.requiredContent)){for(var c=[],b=a.label?' title\x3d"'+CKEDITOR.tools.htmlEncode(a.label)+
+'"':"",d=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%;"},c),g=this._.contents[a.id]={},e=d.getChild(),f=0;d=e.shift();)d.notAllowed||"hbox"==d.type||"vbox"==d.type||f++,g[d.id]=d,"function"==typeof d.getChild&&e.push.apply(e,d.getChild());f||(a.hidden=!0);c=CKEDITOR.dom.element.createFromHtml(c.join(""));c.setAttribute("role","tabpanel");c.setStyle("min-height",
+"100%");d=CKEDITOR.env;g="cke_"+a.id+"_"+CKEDITOR.tools.getNextNumber();b=CKEDITOR.dom.element.createFromHtml(['\x3ca class\x3d"cke_dialog_tab"',0<this._.pageCount?" cke_last":"cke_first",b,a.hidden?' style\x3d"display:none"':"",' id\x3d"',g,'"',d.gecko&&!d.hc?"":' href\x3d"javascript:void(0)"',' tabIndex\x3d"-1" hidefocus\x3d"true" role\x3d"tab"\x3e',a.label,"\x3c/a\x3e"].join(""));c.setAttribute("aria-labelledby",g);this._.tabs[a.id]=[b,c];this._.tabIdList.push(a.id);!a.hidden&&this._.pageCount++;
+this._.lastTab=b;this.updateStyle();c.setAttribute("name",a.id);c.appendTo(this.parts.contents);b.unselectable();this.parts.tabs.append(b);a.accessKey&&(z(this,this,"CTRL+"+a.accessKey,B,w),this._.accessKeyMap["CTRL+"+a.accessKey]=a.id)}},selectPage:function(a){if(this._.currentTabId!=a&&!this._.tabs[a][0].hasClass("cke_dialog_tab_disabled")&&!1!==this.fire("selectPage",{page:a,currentPage:this._.currentTabId})){for(var c in this._.tabs){var b=this._.tabs[c][0],d=this._.tabs[c][1];c!=a&&(b.removeClass("cke_dialog_tab_selected"),
+b.removeAttribute("aria-selected"),d.hide());d.setAttribute("aria-hidden",c!=a)}var g=this._.tabs[a];g[0].addClass("cke_dialog_tab_selected");g[0].setAttribute("aria-selected",!0);CKEDITOR.env.ie6Compat||CKEDITOR.env.ie7Compat?(e(g[1]),g[1].show(),setTimeout(function(){e(g[1],1)},0)):g[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 c=
+this._.tabs[a]&&this._.tabs[a][0];c&&1!=this._.pageCount&&c.isVisible()&&(a==this._.currentTabId&&this.selectPage(h.call(this)),c.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,c){var b=this._.contents[a];return b&&b[c]},getValueOf:function(a,c){return this.getContentElement(a,c).getValue()},
+setValueOf:function(a,c,b){return this.getContentElement(a,c).setValue(b)},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,
+c){if("undefined"==typeof c)c=this._.focusList.length,this._.focusList.push(new m(this,a,c));else{this._.focusList.splice(c,0,new m(this,a,c));for(var b=c+1;b<this._.focusList.length;b++)this._.focusList[b].focusIndex++}},setState:function(a){if(this.state!=a){this.state=a;if(a==CKEDITOR.DIALOG_STATE_BUSY){if(!this.parts.spinner){var c=this.getParentEditor().lang.dir,b={attributes:{"class":"cke_dialog_spinner"},styles:{"float":"rtl"==c?"right":"left"}};b.styles["margin-"+("rtl"==c?"left":"right")]=
+"8px";this.parts.spinner=CKEDITOR.document.createElement("div",b);this.parts.spinner.setHtml("\x26#8987;");this.parts.spinner.appendTo(this.parts.title,1)}this.parts.spinner.show();this.getButton("ok")&&this.getButton("ok").disable()}else a==CKEDITOR.DIALOG_STATE_IDLE&&(this.parts.spinner&&this.parts.spinner.hide(),this.getButton("ok")&&this.getButton("ok").enable());this.fire("state",a)}},getModel:function(a){return this._.model?this._.model:this.definition.getModel?this.definition.getModel(a):null},
+setModel:function(a){this._.model=a},getMode:function(a){if(this.definition.getMode)return this.definition.getMode(a);a=this.getModel(a);return!a||a instanceof CKEDITOR.dom.element&&!a.getParent()?CKEDITOR.dialog.CREATION_MODE:CKEDITOR.dialog.EDITING_MODE}};CKEDITOR.tools.extend(CKEDITOR.dialog,{CREATION_MODE:0,EDITING_MODE:1,add:function(a,c){this._.dialogDefinitions[a]&&"function"!=typeof c||(this._.dialogDefinitions[a]=c)},exists:function(a){return!!this._.dialogDefinitions[a]},getCurrent:function(){return CKEDITOR.dialog._.currentTop},
+isTabEnabled:function(a,c,b){a=a.config.removeDialogTabs;return!(a&&a.match(new RegExp("(?:^|;)"+c+":"+b+"(?:$|;)","i")))},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(c){return CKEDITOR.tools.extend(function(b){return a(b,c)},{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(c){return CKEDITOR.tools.extend(function(b){return a(b,c)},{type:"button"},!0)};return a}(),addUIElement:function(a,c){this._.uiElementBuilders[a]=c}});CKEDITOR.dialog._={uiElementBuilders:{},dialogDefinitions:{},currentTop:null,currentZIndex:null};
+CKEDITOR.event.implementOn(CKEDITOR.dialog);CKEDITOR.event.implementOn(CKEDITOR.dialog.prototype);A={resizable:CKEDITOR.DIALOG_RESIZE_BOTH,minWidth:600,minHeight:400,buttons:[CKEDITOR.dialog.okButton,CKEDITOR.dialog.cancelButton]};var D=function(a,c,b){for(var d=0,g;g=a[d];d++)if(g.id==c||b&&g[b]&&(g=D(g[b],c,b)))return g;return null},N=function(a,c,b,d,g){if(b){for(var e=0,f;f=a[e];e++){if(f.id==b)return a.splice(e,0,c),c;if(d&&f[d]&&(f=N(f[d],c,b,d,!0)))return f}if(g)return null}a.push(c);return c},
+I=function(a,c,b){for(var d=0,g;g=a[d];d++){if(g.id==c)return a.splice(d,1);if(b&&g[b]&&(g=I(g[b],c,b)))return g}return null};d.prototype={getContents:function(a){return D(this.contents,a)},getButton:function(a){return D(this.buttons,a)},addContents:function(a,c){return N(this.contents,a,c)},addButton:function(a,c){return N(this.buttons,a,c)},removeContents:function(a){I(this.contents,a)},removeButton:function(a){I(this.buttons,a)}};g.prototype={get:function(a){return D(this.elements,a,"children")},
+add:function(a,c){return N(this.elements,a,c,"children")},remove:function(a){I(this.elements,a,"children")}};var L={},R={};(function(){CKEDITOR.ui.dialog={uiElement:function(a,c,b,d,g,e,f){if(!(4>arguments.length)){var h=(d.call?d(c):d)||"div",n=["\x3c",h," "],k=(g&&g.call?g(c):g)||{},l=(e&&e.call?e(c):e)||{},m=(f&&f.call?f.call(this,a,c):f)||"",r=this.domId=l.id||CKEDITOR.tools.getNextId()+"_uiElement";c.requiredContent&&!a.getParentEditor().filter.check(c.requiredContent)&&(k.display="none",this.notAllowed=
+!0);l.id=r;var q={};c.type&&(q["cke_dialog_ui_"+c.type]=1);c.className&&(q[c.className]=1);c.disabled&&(q.cke_disabled=1);for(var t=l["class"]&&l["class"].split?l["class"].split(" "):[],r=0;r<t.length;r++)t[r]&&(q[t[r]]=1);t=[];for(r in q)t.push(r);l["class"]=t.join(" ");c.title&&(l.title=c.title);q=(c.style||"").split(";");c.align&&(t=c.align,k["margin-left"]="left"==t?0:"auto",k["margin-right"]="right"==t?0:"auto");for(r in k)q.push(r+":"+k[r]);c.hidden&&q.push("display:none");for(r=q.length-1;0<=
+r;r--)""===q[r]&&q.splice(r,1);0<q.length&&(l.style=(l.style?l.style+"; ":"")+q.join("; "));for(r in l)n.push(r+'\x3d"'+CKEDITOR.tools.htmlEncode(l[r])+'" ');n.push("\x3e",m,"\x3c/",h,"\x3e");b.push(n.join(""));(this._||(this._={})).dialog=a;"boolean"==typeof c.isChanged&&(this.isChanged=function(){return c.isChanged});"function"==typeof c.isChanged&&(this.isChanged=c.isChanged);"function"==typeof c.setValue&&(this.setValue=CKEDITOR.tools.override(this.setValue,function(a){return function(b){a.call(this,
+c.setValue.call(this,b))}}));"function"==typeof c.getValue&&(this.getValue=CKEDITOR.tools.override(this.getValue,function(a){return function(){return c.getValue.call(this,a.call(this))}}));CKEDITOR.event.implementOn(this);this.registerEvents(c);this.accessKeyUp&&this.accessKeyDown&&c.accessKey&&z(this,a,"CTRL+"+c.accessKey);var u=this;a.on("load",function(){var c=u.getInputElement();if(c){var b=u.type in{checkbox:1,ratio:1}&&CKEDITOR.env.ie&&8>CKEDITOR.env.version?"cke_dialog_ui_focused":"";c.on("focus",
+function(){a._.tabBarMode=!1;a._.hasFocus=!0;u.fire("focus");b&&this.addClass(b)});c.on("blur",function(){u.fire("blur");b&&this.removeClass(b)})}});CKEDITOR.tools.extend(this,c);this.keyboardFocusable&&(this.tabIndex=c.tabIndex||0,this.focusIndex=a._.focusList.push(this)-1,this.on("focus",function(){a._.currentFocusIndex=u.focusIndex}))}},hbox:function(a,c,b,d,g){if(!(4>arguments.length)){this._||(this._={});var e=this._.children=c,f=g&&g.widths||null,h=g&&g.height||null,n,k={role:"presentation"};
+g&&g.align&&(k.align=g.align);CKEDITOR.ui.dialog.uiElement.call(this,a,g||{type:"hbox"},d,"table",{},k,function(){var a=['\x3ctbody\x3e\x3ctr class\x3d"cke_dialog_ui_hbox"\x3e'];for(n=0;n<b.length;n++){var c="cke_dialog_ui_hbox_child",d=[];0===n&&(c="cke_dialog_ui_hbox_first");n==b.length-1&&(c="cke_dialog_ui_hbox_last");a.push('\x3ctd class\x3d"',c,'" role\x3d"presentation" ');f?f[n]&&d.push("width:"+C(f[n])):d.push("width:"+Math.floor(100/b.length)+"%");h&&d.push("height:"+C(h));g&&void 0!==g.padding&&
+d.push("padding:"+C(g.padding));CKEDITOR.env.ie&&CKEDITOR.env.quirks&&e[n].align&&d.push("text-align:"+e[n].align);0<d.length&&a.push('style\x3d"'+d.join("; ")+'" ');a.push("\x3e",b[n],"\x3c/td\x3e")}a.push("\x3c/tr\x3e\x3c/tbody\x3e");return a.join("")})}},vbox:function(a,c,b,d,g){if(!(3>arguments.length)){this._||(this._={});var e=this._.children=c,f=g&&g.width||null,h=g&&g.heights||null;CKEDITOR.ui.dialog.uiElement.call(this,a,g||{type:"vbox"},d,"div",null,{role:"presentation"},function(){var c=
+['\x3ctable role\x3d"presentation" cellspacing\x3d"0" border\x3d"0" '];c.push('style\x3d"');g&&g.expand&&c.push("height:100%;");c.push("width:"+C(f||"100%"),";");CKEDITOR.env.webkit&&c.push("float:none;");c.push('"');c.push('align\x3d"',CKEDITOR.tools.htmlEncode(g&&g.align||("ltr"==a.getParentEditor().lang.dir?"left":"right")),'" ');c.push("\x3e\x3ctbody\x3e");for(var d=0;d<b.length;d++){var n=[];c.push('\x3ctr\x3e\x3ctd role\x3d"presentation" ');f&&n.push("width:"+C(f||"100%"));h?n.push("height:"+
+C(h[d])):g&&g.expand&&n.push("height:"+Math.floor(100/b.length)+"%");g&&void 0!==g.padding&&n.push("padding:"+C(g.padding));CKEDITOR.env.ie&&CKEDITOR.env.quirks&&e[d].align&&n.push("text-align:"+e[d].align);0<n.length&&c.push('style\x3d"',n.join("; "),'" ');c.push(' class\x3d"cke_dialog_ui_vbox_child"\x3e',b[d],"\x3c/td\x3e\x3c/tr\x3e")}c.push("\x3c/tbody\x3e\x3c/table\x3e");return c.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,c){this.getInputElement().setValue(a);!c&&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 c=/^on([A-Z]\w+)/,b,d=function(a,c,b,d){c.on("load",function(){a.getInputElement().on(b,d,a)})},g;for(g in a)if(b=g.match(c))this.eventProcessors[g]?this.eventProcessors[g].call(this,this._.dialog,a[g]):d(this,this._.dialog,b[1].toLowerCase(),a[g]);return this},eventProcessors:{onLoad:function(a,c){a.on("load",c,this)},onShow:function(a,c){a.on("show",
+c,this)},onHide:function(a,c){a.on("hide",c,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()?!0:!1}};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,b){for(var d=c.children,g,e=[],f=[],h=0;h<d.length&&(g=d[h]);h++){var n=[];e.push(n);f.push(CKEDITOR.dialog._.uiElementBuilders[g.type].build(a,g,n))}return new CKEDITOR.ui.dialog[c.type](a,f,e,b,c)}};CKEDITOR.dialog.addUIElement("hbox",a);CKEDITOR.dialog.addUIElement("vbox",a)})();CKEDITOR.dialogCommand=function(a,c){this.dialogName=a;CKEDITOR.tools.extend(this,c,!0)};CKEDITOR.dialogCommand.prototype={exec:function(a){var c=this.tabId;a.openDialog(this.dialogName,function(a){c&&a.selectPage(c)})},
+canUndo:!1,editorFocus:1};(function(){var a=/^([a]|[^a])+$/,c=/^\d*$/,b=/^\d*(?:\.\d+)?$/,d=/^(((\d*(\.\d+))|(\d*))(px|\%)?)?$/,g=/^(((\d*(\.\d+))|(\d*))(px|em|ex|in|cm|mm|pt|pc|\%)?)?$/i,e=/^(--|-?([a-zA-Z_]|\\))(\\|[a-zA-Z0-9-_])*\s*?:\s*?[^:;]+$/;CKEDITOR.VALIDATE_OR=1;CKEDITOR.VALIDATE_AND=2;CKEDITOR.dialog.validate={functions:function(){var a=arguments;return function(){var c=this&&this.getValue?this.getValue():a[0],b,d=CKEDITOR.VALIDATE_AND,g=[],e;for(e=0;e<a.length;e++)if("function"==typeof a[e])g.push(a[e]);
+else break;e<a.length&&"string"==typeof a[e]&&(b=a[e],e++);e<a.length&&"number"==typeof a[e]&&(d=a[e]);var f=d==CKEDITOR.VALIDATE_AND?!0:!1;for(e=0;e<g.length;e++)f=d==CKEDITOR.VALIDATE_AND?f&&g[e](c):f||g[e](c);return f?!0:b}},regex:function(a,c){return function(b){b=this&&this.getValue?this.getValue():b;return a.test(b)?!0:c}},notEmpty:function(c){return this.regex(a,c)},integer:function(a){return this.regex(c,a)},number:function(a){return this.regex(b,a)},cssLength:function(a){return this.functions(function(a){return g.test(CKEDITOR.tools.trim(a))},
+a)},htmlLength:function(a){return this.functions(function(a){return d.test(CKEDITOR.tools.trim(a))},a)},inlineStyle:function(a){return this.functions(function(a){a=CKEDITOR.tools.trim(a).split(";");""===a[a.length-1]&&a.pop();return CKEDITOR.tools.array.every(a,function(a){return e.test(CKEDITOR.tools.trim(a))})},a)},equals:function(a,c){return this.functions(function(c){return c==a},c)},notEqual:function(a,c){return this.functions(function(c){return c!=a},c)}};CKEDITOR.on("instanceDestroyed",function(a){if(CKEDITOR.tools.isEmpty(CKEDITOR.instances)){for(var c;c=
+CKEDITOR.dialog._.currentTop;)c.hide();for(var b in L)L[b].remove();L={}}a=a.editor._.storedDialogs;for(var d in a)a[d].destroy()})})();CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{openDialog:function(a,c,b){var d=null,g=CKEDITOR.dialog._.dialogDefinitions[a];null===CKEDITOR.dialog._.currentTop&&q(this);if("function"==typeof g)g=this._.storedDialogs||(this._.storedDialogs={}),d=g[a]||(g[a]=new CKEDITOR.dialog(this,a)),d.setModel(b),c&&c.call(d,d),d.show();else{if("failed"==g)throw r(this),Error('[CKEDITOR.dialog.openDialog] Dialog "'+
+a+'" failed when loading definition.');"string"==typeof g&&CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(g),function(){"function"!=typeof CKEDITOR.dialog._.dialogDefinitions[a]&&(CKEDITOR.dialog._.dialogDefinitions[a]="failed");this.openDialog(a,c,b)},this,0,1)}CKEDITOR.skin.loadPart("dialog");if(d)d.once("hide",function(){d.setModel(null)},null,null,999);return d}});CKEDITOR.plugins.add("dialog",{requires:"dialogui",init:function(a){F||(CKEDITOR.document.appendStyleSheet(this.path+"styles/dialog.css"),
+F=!0);a.on("doubleclick",function(c){c.data.dialog&&a.openDialog(c.data.dialog)},null,null,999)}})}(),function(){CKEDITOR.plugins.add("a11yhelp",{requires:"dialog",availableLangs:{af:1,ar:1,az:1,bg:1,ca:1,cs:1,cy:1,da:1,de:1,"de-ch":1,el:1,en:1,"en-au":1,"en-gb":1,eo:1,es:1,"es-mx":1,et:1,eu:1,fa:1,fi:1,fo:1,fr:1,"fr-ca":1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,id:1,it:1,ja:1,km:1,ko:1,ku:1,lt:1,lv:1,mk:1,mn:1,nb:1,nl:1,no:1,oc:1,pl:1,pt:1,"pt-br":1,ro:1,ru:1,si:1,sk:1,sl:1,sq:1,sr:1,"sr-latn":1,sv:1,th:1,
+tr:1,tt:1,ug:1,uk:1,vi:1,zh:1,"zh-cn":1},init:function(b){var h=this;b.addCommand("a11yHelp",{exec:function(){var f=b.langCode,f=h.availableLangs[f]?f:h.availableLangs[f.replace(/-.*/,"")]?f.replace(/-.*/,""):"en";CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(h.path+"dialogs/lang/"+f+".js"),function(){b.lang.a11yhelp=h.langEntries[f];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");
+b.on("ariaEditorHelpLabel",function(f){f.data.label=b.lang.common.editorHelp})}})}(),CKEDITOR.plugins.add("about",{requires:"dialog",init:function(b){var h=b.addCommand("about",new CKEDITOR.dialogCommand("about"));h.modes={wysiwyg:1,source:1};h.canUndo=!1;h.readOnly=1;b.ui.addButton&&b.ui.addButton("About",{label:b.lang.about.dlgTitle,command:"about",toolbar:"about"});CKEDITOR.dialog.add("about",this.path+"dialogs/about.js")}}),"use strict",function(){function b(b){function f(){k=b.document;l=k[CKEDITOR.env.ie?
+"getBody":"getDocumentElement"]();m=CKEDITOR.env.quirks?k.getBody():k.getDocumentElement();var a=CKEDITOR.env.quirks?m:m.findOne("body");a&&(a.setStyle("height","auto"),a.setStyle("min-height",CKEDITOR.env.safari?"0%":"auto"));c=CKEDITOR.dom.element.createFromHtml('\x3cspan style\x3d"margin:0;padding:0;border:0;clear:both;width:1px;height:1px;display:block;"\x3e'+(CKEDITOR.env.webkit?"\x26nbsp;":"")+"\x3c/span\x3e",k)}function e(){y&&m.setStyle("overflow-y","hidden");var e=b.window.getViewPaneSize().height,
+f;l.append(c);f=c.getDocumentPosition(k).y+c.$.offsetHeight;c.remove();f+=d;f=Math.max(f,g);f=Math.min(f,n);f!=e&&a!=f&&(f=b.fire("autoGrow",{currentHeight:e,newHeight:f}).newHeight,b.resize(null,f,!0),a=f);y||(f<n&&m.$.scrollHeight>m.$.clientHeight?m.setStyle("overflow-y","hidden"):m.removeStyle("overflow-y"))}var a,k,l,m,c,d=b.config.autoGrow_bottomSpace||0,g=void 0!==b.config.autoGrow_minHeight?b.config.autoGrow_minHeight:200,n=b.config.autoGrow_maxHeight||Infinity,y=!b.config.autoGrow_maxHeight;
+b.addCommand("autogrow",{exec:e,modes:{wysiwyg:1},readOnly:1,canUndo:!1,editorFocus:!1});var v={contentDom:1,key:1,selectionChange:1,insertElement:1,mode:1},p;for(p in v)b.on(p,function(c){"wysiwyg"==c.editor.mode&&setTimeout(function(){var c=b.getCommand("maximize");!b.window||c&&c.state==CKEDITOR.TRISTATE_ON?a=null:(e(),y||e())},100)});b.on("afterCommandExec",function(a){"maximize"==a.data.name&&"wysiwyg"==a.editor.mode&&(a.data.command.state==CKEDITOR.TRISTATE_ON?m.removeStyle("overflow-y"):e())});
 b.on("contentDom",f);f();b.config.autoGrow_onStartup&&b.editable().isVisible()&&b.execCommand("autogrow")}CKEDITOR.plugins.add("autogrow",{init:function(h){if(h.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE)h.on("instanceReady",function(){h.editable().isInline()?h.ui.space("contents").setStyle("height","auto"):b(h)})}})}(),CKEDITOR.plugins.add("basicstyles",{init:function(b){var h=0,f=function(a,f,c,d){if(d){d=new CKEDITOR.style(d);var g=e[c];g.unshift(d);b.attachStyleStateChange(d,function(a){!b.readOnly&&
 b.getCommand(c).setState(a)});b.addCommand(c,new CKEDITOR.styleCommand(d,{contentForms:g}));b.ui.addButton&&b.ui.addButton(a,{label:f,command:c,toolbar:"basicstyles,"+(h+=10)})}},e={bold:["strong","b",["span",function(a){a=a.styles["font-weight"];return"bold"==a||700<=+a}]],italic:["em","i",["span",function(a){return"italic"==a.styles["font-style"]}]],underline:["u",["span",function(a){return"underline"==a.styles["text-decoration"]}]],strike:["s","strike",["span",function(a){return"line-through"==
-a.styles["text-decoration"]}]],subscript:["sub"],superscript:["sup"]},a=b.config,m=b.lang.basicstyles;f("Bold",m.bold,"bold",a.coreStyles_bold);f("Italic",m.italic,"italic",a.coreStyles_italic);f("Underline",m.underline,"underline",a.coreStyles_underline);f("Strike",m.strike,"strike",a.coreStyles_strike);f("Subscript",m.subscript,"subscript",a.coreStyles_subscript);f("Superscript",m.superscript,"superscript",a.coreStyles_superscript);b.setKeystroke([[CKEDITOR.CTRL+66,"bold"],[CKEDITOR.CTRL+73,"italic"],
+a.styles["text-decoration"]}]],subscript:["sub"],superscript:["sup"]},a=b.config,k=b.lang.basicstyles;f("Bold",k.bold,"bold",a.coreStyles_bold);f("Italic",k.italic,"italic",a.coreStyles_italic);f("Underline",k.underline,"underline",a.coreStyles_underline);f("Strike",k.strike,"strike",a.coreStyles_strike);f("Subscript",k.subscript,"subscript",a.coreStyles_subscript);f("Superscript",k.superscript,"superscript",a.coreStyles_superscript);b.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:"s",overrides:"strike"},CKEDITOR.config.coreStyles_subscript={element:"sub"},CKEDITOR.config.coreStyles_superscript={element:"sup"},function(){var b={exec:function(b){var f=b.getCommand("blockquote").state,e=b.getSelection(),a=e&&e.getRanges()[0];
-if(a){var m=e.createBookmarks();if(CKEDITOR.env.ie){var k=m[0].startNode,l=m[0].endNode,c;if(k&&"blockquote"==k.getParent().getName())for(c=k;c=c.getNext();)if(c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary()){k.move(c,!0);break}if(l&&"blockquote"==l.getParent().getName())for(c=l;c=c.getPrevious();)if(c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary()){l.move(c);break}}var d=a.createIterator();d.enlargeBr=b.config.enterMode!=CKEDITOR.ENTER_BR;if(f==CKEDITOR.TRISTATE_OFF){for(k=[];f=d.getNextParagraph();)k.push(f);
-1>k.length&&(f=b.document.createElement(b.config.enterMode==CKEDITOR.ENTER_P?"p":"div"),l=m.shift(),a.insertNode(f),f.append(new CKEDITOR.dom.text("",b.document)),a.moveToBookmark(l),a.selectNodeContents(f),a.collapse(!0),l=a.createBookmark(),k.push(f),m.unshift(l));c=k[0].getParent();a=[];for(l=0;l<k.length;l++)f=k[l],c=c.getCommonAncestor(f.getParent());for(f={table:1,tbody:1,tr:1,ol:1,ul:1};f[c.getName()];)c=c.getParent();for(l=null;0<k.length;){for(f=k.shift();!f.getParent().equals(c);)f=f.getParent();
-f.equals(l)||a.push(f);l=f}for(;0<a.length;)if(f=a.shift(),"blockquote"==f.getName()){for(l=new CKEDITOR.dom.documentFragment(b.document);f.getFirst();)l.append(f.getFirst().remove()),k.push(l.getLast());l.replace(f)}else k.push(f);a=b.document.createElement("blockquote");for(a.insertBefore(k[0]);0<k.length;)f=k.shift(),a.append(f)}else if(f==CKEDITOR.TRISTATE_ON){l=[];for(c={};f=d.getNextParagraph();){for(k=a=null;f.getParent();){if("blockquote"==f.getParent().getName()){a=f.getParent();k=f;break}f=
-f.getParent()}a&&k&&!k.getCustomData("blockquote_moveout")&&(l.push(k),CKEDITOR.dom.element.setMarker(c,k,"blockquote_moveout",!0))}CKEDITOR.dom.element.clearAllMarkers(c);f=[];k=[];for(c={};0<l.length;)d=l.shift(),a=d.getParent(),d.getPrevious()?d.getNext()?(d.breakParent(d.getParent()),k.push(d.getNext())):d.remove().insertAfter(a):d.remove().insertBefore(a),a.getCustomData("blockquote_processed")||(k.push(a),CKEDITOR.dom.element.setMarker(c,a,"blockquote_processed",!0)),f.push(d);CKEDITOR.dom.element.clearAllMarkers(c);
-for(l=k.length-1;0<=l;l--){a=k[l];a:{c=a;for(var d=0,g=c.getChildCount(),n=void 0;d<g&&(n=c.getChild(d));d++)if(n.type==CKEDITOR.NODE_ELEMENT&&n.isBlockBoundary()){c=!1;break a}c=!0}c&&a.remove()}if(b.config.enterMode==CKEDITOR.ENTER_BR)for(a=!0;f.length;)if(d=f.shift(),"div"==d.getName()){l=new CKEDITOR.dom.documentFragment(b.document);!a||!d.getPrevious()||d.getPrevious().type==CKEDITOR.NODE_ELEMENT&&d.getPrevious().isBlockBoundary()||l.append(b.document.createElement("br"));for(a=d.getNext()&&
-!(d.getNext().type==CKEDITOR.NODE_ELEMENT&&d.getNext().isBlockBoundary());d.getFirst();)d.getFirst().remove().appendTo(l);a&&l.append(b.document.createElement("br"));l.replace(d);a=!1}}e.selectBookmarks(m);b.focus()}},refresh:function(b,f){this.setState(b.elementPath(f.block||f.blockLimit).contains("blockquote",1)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)},context:"blockquote",allowedContent:"blockquote",requiredContent:"blockquote"};CKEDITOR.plugins.add("blockquote",{init:function(h){h.blockless||
+if(a){var k=e.createBookmarks();if(CKEDITOR.env.ie){var l=k[0].startNode,m=k[0].endNode,c;if(l&&"blockquote"==l.getParent().getName())for(c=l;c=c.getNext();)if(c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary()){l.move(c,!0);break}if(m&&"blockquote"==m.getParent().getName())for(c=m;c=c.getPrevious();)if(c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary()){m.move(c);break}}var d=a.createIterator();d.enlargeBr=b.config.enterMode!=CKEDITOR.ENTER_BR;if(f==CKEDITOR.TRISTATE_OFF){for(l=[];f=d.getNextParagraph();)l.push(f);
+1>l.length&&(f=b.document.createElement(b.config.enterMode==CKEDITOR.ENTER_P?"p":"div"),m=k.shift(),a.insertNode(f),f.append(new CKEDITOR.dom.text("",b.document)),a.moveToBookmark(m),a.selectNodeContents(f),a.collapse(!0),m=a.createBookmark(),l.push(f),k.unshift(m));c=l[0].getParent();a=[];for(m=0;m<l.length;m++)f=l[m],c=c.getCommonAncestor(f.getParent());for(f={table:1,tbody:1,tr:1,ol:1,ul:1};f[c.getName()];)c=c.getParent();for(m=null;0<l.length;){for(f=l.shift();!f.getParent().equals(c);)f=f.getParent();
+f.equals(m)||a.push(f);m=f}for(;0<a.length;)if(f=a.shift(),"blockquote"==f.getName()){for(m=new CKEDITOR.dom.documentFragment(b.document);f.getFirst();)m.append(f.getFirst().remove()),l.push(m.getLast());m.replace(f)}else l.push(f);a=b.document.createElement("blockquote");for(a.insertBefore(l[0]);0<l.length;)f=l.shift(),a.append(f)}else if(f==CKEDITOR.TRISTATE_ON){m=[];for(c={};f=d.getNextParagraph();){for(l=a=null;f.getParent();){if("blockquote"==f.getParent().getName()){a=f.getParent();l=f;break}f=
+f.getParent()}a&&l&&!l.getCustomData("blockquote_moveout")&&(m.push(l),CKEDITOR.dom.element.setMarker(c,l,"blockquote_moveout",!0))}CKEDITOR.dom.element.clearAllMarkers(c);f=[];l=[];for(c={};0<m.length;)d=m.shift(),a=d.getParent(),d.getPrevious()?d.getNext()?(d.breakParent(d.getParent()),l.push(d.getNext())):d.remove().insertAfter(a):d.remove().insertBefore(a),a.getCustomData("blockquote_processed")||(l.push(a),CKEDITOR.dom.element.setMarker(c,a,"blockquote_processed",!0)),f.push(d);CKEDITOR.dom.element.clearAllMarkers(c);
+for(m=l.length-1;0<=m;m--){a=l[m];a:{c=a;for(var d=0,g=c.getChildCount(),n=void 0;d<g&&(n=c.getChild(d));d++)if(n.type==CKEDITOR.NODE_ELEMENT&&n.isBlockBoundary()){c=!1;break a}c=!0}c&&a.remove()}if(b.config.enterMode==CKEDITOR.ENTER_BR)for(a=!0;f.length;)if(d=f.shift(),"div"==d.getName()){m=new CKEDITOR.dom.documentFragment(b.document);!a||!d.getPrevious()||d.getPrevious().type==CKEDITOR.NODE_ELEMENT&&d.getPrevious().isBlockBoundary()||m.append(b.document.createElement("br"));for(a=d.getNext()&&
+!(d.getNext().type==CKEDITOR.NODE_ELEMENT&&d.getNext().isBlockBoundary());d.getFirst();)d.getFirst().remove().appendTo(m);a&&m.append(b.document.createElement("br"));m.replace(d);a=!1}}e.selectBookmarks(k);b.focus()}},refresh:function(b,f){this.setState(b.elementPath(f.block||f.blockLimit).contains("blockquote",1)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)},context:"blockquote",allowedContent:"blockquote",requiredContent:"blockquote"};CKEDITOR.plugins.add("blockquote",{init:function(h){h.blockless||
 (h.addCommand("blockquote",b),h.ui.addButton&&h.ui.addButton("Blockquote",{label:h.lang.blockquote.toolbar,command:"blockquote",toolbar:"blocks,10"}))}})}(),"use strict",function(){function b(b,e){CKEDITOR.tools.extend(this,e,{editor:b,id:"cke-"+CKEDITOR.tools.getUniqueId(),area:b._.notificationArea});e.type||(this.type="info");this.element=this._createElement();b.plugins.clipboard&&CKEDITOR.plugins.clipboard.preventDefaultDropOnElement(this.element)}function h(b){var e=this;this.editor=b;this.notifications=
 [];this.element=this._createElement();this._uiBuffer=CKEDITOR.tools.eventsBuffer(10,this._layout,this);this._changeBuffer=CKEDITOR.tools.eventsBuffer(500,this._layout,this);b.on("destroy",function(){e._removeListeners();e.element.remove()})}CKEDITOR.plugins.add("notification",{init:function(b){function e(a){var b=new CKEDITOR.dom.element("div");b.setStyles({position:"fixed","margin-left":"-9999px"});b.setAttributes({"aria-live":"assertive","aria-atomic":"true"});b.setText(a);CKEDITOR.document.getBody().append(b);
-setTimeout(function(){b.remove()},100)}b._.notificationArea=new h(b);b.showNotification=function(a,e,h){var l,c;"progress"==e?l=h:c=h;a=new CKEDITOR.plugins.notification(b,{message:a,type:e,progress:l,duration:c});a.show();return a};b.on("key",function(a){if(27==a.data.keyCode){var h=b._.notificationArea.notifications;h.length&&(e(b.lang.notification.closed),h[h.length-1].hide(),a.cancel())}})}});b.prototype={show:function(){!1!==this.editor.fire("notificationShow",{notification:this})&&(this.area.add(this),
-this._hideAfterTimeout())},update:function(b){var e=!0;!1===this.editor.fire("notificationUpdate",{notification:this,options:b})&&(e=!1);var a=this.element,h=a.findOne(".cke_notification_message"),k=a.findOne(".cke_notification_progress"),l=b.type;a.removeAttribute("role");b.progress&&"progress"!=this.type&&(l="progress");l&&(a.removeClass(this._getClass()),a.removeAttribute("aria-label"),this.type=l,a.addClass(this._getClass()),a.setAttribute("aria-label",this.type),"progress"!=this.type||k?"progress"!=
-this.type&&k&&k.remove():(k=this._createProgressElement(),k.insertBefore(h)));void 0!==b.message&&(this.message=b.message,h.setHtml(this.message));void 0!==b.progress&&(this.progress=b.progress,k&&k.setStyle("width",this._getPercentageProgress()));e&&b.important&&(a.setAttribute("role","alert"),this.isVisible()||this.area.add(this));this.duration=b.duration;this._hideAfterTimeout()},hide:function(){!1!==this.editor.fire("notificationHide",{notification:this})&&this.area.remove(this)},isVisible:function(){return 0<=
+setTimeout(function(){b.remove()},100)}b._.notificationArea=new h(b);b.showNotification=function(a,e,h){var m,c;"progress"==e?m=h:c=h;a=new CKEDITOR.plugins.notification(b,{message:a,type:e,progress:m,duration:c});a.show();return a};b.on("key",function(a){if(27==a.data.keyCode){var h=b._.notificationArea.notifications;h.length&&(e(b.lang.notification.closed),h[h.length-1].hide(),a.cancel())}})}});b.prototype={show:function(){!1!==this.editor.fire("notificationShow",{notification:this})&&(this.area.add(this),
+this._hideAfterTimeout())},update:function(b){var e=!0;!1===this.editor.fire("notificationUpdate",{notification:this,options:b})&&(e=!1);var a=this.element,h=a.findOne(".cke_notification_message"),l=a.findOne(".cke_notification_progress"),m=b.type;a.removeAttribute("role");b.progress&&"progress"!=this.type&&(m="progress");m&&(a.removeClass(this._getClass()),a.removeAttribute("aria-label"),this.type=m,a.addClass(this._getClass()),a.setAttribute("aria-label",this.type),"progress"!=this.type||l?"progress"!=
+this.type&&l&&l.remove():(l=this._createProgressElement(),l.insertBefore(h)));void 0!==b.message&&(this.message=b.message,h.setHtml(this.message));void 0!==b.progress&&(this.progress=b.progress,l&&l.setStyle("width",this._getPercentageProgress()));e&&b.important&&(a.setAttribute("role","alert"),this.isVisible()||this.area.add(this));this.duration=b.duration;this._hideAfterTimeout()},hide:function(){!1!==this.editor.fire("notificationHide",{notification:this})&&this.area.remove(this)},isVisible:function(){return 0<=
 CKEDITOR.tools.indexOf(this.area.notifications,this)},_createElement:function(){var b=this,e,a,h=this.editor.lang.common.close;e=new CKEDITOR.dom.element("div");e.addClass("cke_notification");e.addClass(this._getClass());e.setAttributes({id:this.id,role:"alert","aria-label":this.type});"progress"==this.type&&e.append(this._createProgressElement());a=new CKEDITOR.dom.element("p");a.addClass("cke_notification_message");a.setHtml(this.message);e.append(a);a=CKEDITOR.dom.element.createFromHtml('\x3ca class\x3d"cke_notification_close" href\x3d"javascript:void(0)" title\x3d"'+
 h+'" role\x3d"button" tabindex\x3d"-1"\x3e\x3cspan class\x3d"cke_label"\x3eX\x3c/span\x3e\x3c/a\x3e');e.append(a);a.on("click",function(){b.editor.focus();b.hide()});return e},_getClass:function(){return"progress"==this.type?"cke_notification_info":"cke_notification_"+this.type},_createProgressElement:function(){var b=new CKEDITOR.dom.element("span");b.addClass("cke_notification_progress");b.setStyle("width",this._getPercentageProgress());return b},_getPercentageProgress:function(){return Math.round(100*
 (this.progress||0))+"%"},_hideAfterTimeout:function(){var b=this,e;this._hideTimeoutId&&clearTimeout(this._hideTimeoutId);if("number"==typeof this.duration)e=this.duration;else if("info"==this.type||"success"==this.type)e="number"==typeof this.editor.config.notification_duration?this.editor.config.notification_duration:5E3;e&&(b._hideTimeoutId=setTimeout(function(){b.hide()},e))}};h.prototype={add:function(b){this.notifications.push(b);this.element.append(b.element);1==this.element.getChildCount()&&
 (CKEDITOR.document.getBody().append(this.element),this._attachListeners());this._layout()},remove:function(b){var e=CKEDITOR.tools.indexOf(this.notifications,b);0>e||(this.notifications.splice(e,1),b.element.remove(),this.element.getChildCount()||(this._removeListeners(),this.element.remove()))},_createElement:function(){var b=this.editor,e=b.config,a=new CKEDITOR.dom.element("div");a.addClass("cke_notifications_area");a.setAttribute("id","cke_notifications_area_"+b.name);a.setStyle("z-index",e.baseFloatZIndex-
 2);return a},_attachListeners:function(){var b=CKEDITOR.document.getWindow(),e=this.editor;b.on("scroll",this._uiBuffer.input);b.on("resize",this._uiBuffer.input);e.on("change",this._changeBuffer.input);e.on("floatingSpaceLayout",this._layout,this,null,20);e.on("blur",this._layout,this,null,20)},_removeListeners:function(){var b=CKEDITOR.document.getWindow(),e=this.editor;b.removeListener("scroll",this._uiBuffer.input);b.removeListener("resize",this._uiBuffer.input);e.removeListener("change",this._changeBuffer.input);
-e.removeListener("floatingSpaceLayout",this._layout);e.removeListener("blur",this._layout)},_layout:function(){function b(){e.setStyle("left",x(u+h.width-n-y))}var e=this.element,a=this.editor,h=a.ui.contentsElement.getClientRect(),k=a.ui.contentsElement.getDocumentPosition(),l,c,d=e.getClientRect(),g,n=this._notificationWidth,y=this._notificationMargin;g=CKEDITOR.document.getWindow();var w=g.getScrollPosition(),p=g.getViewPaneSize(),t=CKEDITOR.document.getBody(),r=t.getDocumentPosition(),x=CKEDITOR.tools.cssLength;
-n&&y||(g=this.element.getChild(0),n=this._notificationWidth=g.getClientRect().width,y=this._notificationMargin=parseInt(g.getComputedStyle("margin-left"),10)+parseInt(g.getComputedStyle("margin-right"),10));a.toolbar&&(l=a.ui.space(a.config.toolbarLocation),c=l.getClientRect());l&&l.isVisible()&&c.bottom>h.top&&c.bottom<h.bottom-d.height?e.setStyles({position:"fixed",top:x(c.bottom)}):0<h.top?e.setStyles({position:"absolute",top:x(k.y)}):k.y+h.height-d.height>w.y?e.setStyles({position:"fixed",top:0}):
-e.setStyles({position:"absolute",top:x(k.y+h.height-d.height)});var u="fixed"==e.getStyle("position")?h.left:"static"!=t.getComputedStyle("position")?k.x-r.x:k.x;h.width<n+y?k.x+n+y>w.x+p.width?b():e.setStyle("left",x(u)):k.x+n+y>w.x+p.width?e.setStyle("left",x(u)):k.x+h.width/2+n/2+y>w.x+p.width?e.setStyle("left",x(u-k.x+w.x+p.width-n-y)):0>h.left+h.width-n-y?b():0>h.left+h.width/2-n/2?e.setStyle("left",x(u-k.x+w.x)):e.setStyle("left",x(u+h.width/2-n/2-y/2))}};CKEDITOR.plugins.notification=b}(),
+e.removeListener("floatingSpaceLayout",this._layout);e.removeListener("blur",this._layout)},_layout:function(){function b(){e.setStyle("left",x(t+h.width-n-y))}var e=this.element,a=this.editor,h=a.ui.contentsElement.getClientRect(),l=a.ui.contentsElement.getDocumentPosition(),m,c,d=e.getClientRect(),g,n=this._notificationWidth,y=this._notificationMargin;g=CKEDITOR.document.getWindow();var v=g.getScrollPosition(),p=g.getViewPaneSize(),q=CKEDITOR.document.getBody(),r=q.getDocumentPosition(),x=CKEDITOR.tools.cssLength;
+n&&y||(g=this.element.getChild(0),n=this._notificationWidth=g.getClientRect().width,y=this._notificationMargin=parseInt(g.getComputedStyle("margin-left"),10)+parseInt(g.getComputedStyle("margin-right"),10));a.toolbar&&(m=a.ui.space(a.config.toolbarLocation),c=m.getClientRect());m&&m.isVisible()&&c.bottom>h.top&&c.bottom<h.bottom-d.height?e.setStyles({position:"fixed",top:x(c.bottom)}):0<h.top?e.setStyles({position:"absolute",top:x(l.y)}):l.y+h.height-d.height>v.y?e.setStyles({position:"fixed",top:0}):
+e.setStyles({position:"absolute",top:x(l.y+h.height-d.height)});var t="fixed"==e.getStyle("position")?h.left:"static"!=q.getComputedStyle("position")?l.x-r.x:l.x;h.width<n+y?l.x+n+y>v.x+p.width?b():e.setStyle("left",x(t)):l.x+n+y>v.x+p.width?e.setStyle("left",x(t)):l.x+h.width/2+n/2+y>v.x+p.width?e.setStyle("left",x(t-l.x+v.x+p.width-n-y)):0>h.left+h.width-n-y?b():0>h.left+h.width/2-n/2?e.setStyle("left",x(t-l.x+v.x)):e.setStyle("left",x(t+h.width/2-n/2-y/2))}};CKEDITOR.plugins.notification=b}(),
 function(){var b='\x3ca id\x3d"{id}" class\x3d"cke_button cke_button__{name} cke_button_{state} {cls}"'+(CKEDITOR.env.gecko&&!CKEDITOR.env.hc?"":" href\x3d\"javascript:void('{titleJs}')\"")+' title\x3d"{title}" tabindex\x3d"-1" hidefocus\x3d"true" role\x3d"button" aria-labelledby\x3d"{id}_label" aria-describedby\x3d"{id}_description" aria-haspopup\x3d"{hasArrow}" aria-disabled\x3d"{ariaDisabled}"';CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(b+=' onkeypress\x3d"return false;"');CKEDITOR.env.gecko&&(b+=
 ' onblur\x3d"this.style.cssText \x3d this.style.cssText;"');var h="";CKEDITOR.env.ie&&(h='return false;" onmouseup\x3d"CKEDITOR.tools.getMouseButton(event)\x3d\x3dCKEDITOR.MOUSE_BUTTON_LEFT\x26\x26');var b=b+(' onkeydown\x3d"return CKEDITOR.tools.callFunction({keydownFn},event);" onfocus\x3d"return CKEDITOR.tools.callFunction({focusFn},event);" onclick\x3d"'+h+'CKEDITOR.tools.callFunction({clickFn},this);return false;"\x3e\x3cspan class\x3d"cke_button_icon cke_button__{iconName}_icon" style\x3d"{style}"')+
 '\x3e\x26nbsp;\x3c/span\x3e\x3cspan id\x3d"{id}_label" class\x3d"cke_button_label cke_button__{name}_label" aria-hidden\x3d"false"\x3e{label}\x3c/span\x3e\x3cspan id\x3d"{id}_description" class\x3d"cke_button_label" aria-hidden\x3d"false"\x3e{ariaShortcutSpace}{ariaShortcut}\x3c/span\x3e{arrowHtml}\x3c/a\x3e',f=CKEDITOR.addTemplate("buttonArrow",'\x3cspan class\x3d"cke_button_arrow"\x3e'+(CKEDITOR.env.hc?"\x26#9660;":"")+"\x3c/span\x3e"),e=CKEDITOR.addTemplate("button",b);CKEDITOR.plugins.add("button",
-{beforeInit:function(a){a.ui.addHandler(CKEDITOR.UI_BUTTON,CKEDITOR.ui.button.handler)}});CKEDITOR.UI_BUTTON="button";CKEDITOR.ui.button=function(a){CKEDITOR.tools.extend(this,a,{title:a.label,click:a.click||function(b){b.execCommand(a.command)}});this._={}};CKEDITOR.ui.button.handler={create:function(a){return new CKEDITOR.ui.button(a)}};CKEDITOR.ui.button.prototype={render:function(a,b){function h(){var b=a.mode;b&&(b=this.modes[b]?void 0!==l[b]?l[b]:CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,
-b=a.readOnly&&!this.readOnly?CKEDITOR.TRISTATE_DISABLED:b,this.setState(b),this.refresh&&this.refresh())}var l=null,c=CKEDITOR.env,d=this._.id=CKEDITOR.tools.getNextId(),g="",n=this.command,y,w,p;this._.editor=a;var t={id:d,button:this,editor:a,focus:function(){CKEDITOR.document.getById(d).focus()},execute:function(){this.button.click(a)},attach:function(a){this.button.attach(a)}},r=CKEDITOR.tools.addFunction(function(a){if(t.onkey)return a=new CKEDITOR.dom.event(a),!1!==t.onkey(t,a.getKeystroke())}),
-x=CKEDITOR.tools.addFunction(function(a){var b;t.onfocus&&(b=!1!==t.onfocus(t,new CKEDITOR.dom.event(a)));return b}),u=0;t.clickFn=y=CKEDITOR.tools.addFunction(function(){u&&(a.unlockSelection(1),u=0);t.execute();c.iOS&&a.focus()});this.modes?(l={},a.on("beforeModeUnload",function(){a.mode&&this._.state!=CKEDITOR.TRISTATE_DISABLED&&(l[a.mode]=this._.state)},this),a.on("activeFilterChange",h,this),a.on("mode",h,this),!this.readOnly&&a.on("readOnly",h,this)):n&&(n=a.getCommand(n))&&(n.on("state",function(){this.setState(n.state)},
-this),g+=n.state==CKEDITOR.TRISTATE_ON?"on":n.state==CKEDITOR.TRISTATE_DISABLED?"disabled":"off");var z;if(this.directional)a.on("contentDirChanged",function(b){var c=CKEDITOR.document.getById(this._.id),d=c.getFirst();b=b.data;b!=a.lang.dir?c.addClass("cke_"+b):c.removeClass("cke_ltr").removeClass("cke_rtl");d.setAttribute("style",CKEDITOR.skin.getIconStyle(z,"rtl"==b,this.icon,this.iconOffset))},this);n?(w=a.getCommandKeystroke(n))&&(p=CKEDITOR.tools.keystrokeToString(a.lang.common.keyboard,w)):
-g+="off";w=this.name||this.command;var q=null,v=this.icon;z=w;this.icon&&!/\./.test(this.icon)?(z=this.icon,v=null):(this.icon&&(q=this.icon),CKEDITOR.env.hidpi&&this.iconHiDpi&&(q=this.iconHiDpi));q?(CKEDITOR.skin.addIcon(q,q),v=null):q=z;g={id:d,name:w,iconName:z,label:this.label,cls:(this.hasArrow?"cke_button_expandable ":"")+(this.className||""),state:g,ariaDisabled:"disabled"==g?"true":"false",title:this.title+(p?" ("+p.display+")":""),ariaShortcutSpace:p?"\x26nbsp;":"",ariaShortcut:p?a.lang.common.keyboardShortcut+
-" "+p.aria:"",titleJs:c.gecko&&!c.hc?"":(this.title||"").replace("'",""),hasArrow:"string"===typeof this.hasArrow&&this.hasArrow||(this.hasArrow?"true":"false"),keydownFn:r,focusFn:x,clickFn:y,style:CKEDITOR.skin.getIconStyle(q,"rtl"==a.lang.dir,v,this.iconOffset),arrowHtml:this.hasArrow?f.output():""};e.output(g,b);if(this.onRender)this.onRender();return t},setState:function(a){if(this._.state==a)return!1;this._.state=a;var b=CKEDITOR.document.getById(this._.id);return b?(b.setState(a,"cke_button"),
+{beforeInit:function(a){a.ui.addHandler(CKEDITOR.UI_BUTTON,CKEDITOR.ui.button.handler)}});CKEDITOR.UI_BUTTON="button";CKEDITOR.ui.button=function(a){CKEDITOR.tools.extend(this,a,{title:a.label,click:a.click||function(b){b.execCommand(a.command)}});this._={}};CKEDITOR.ui.button.handler={create:function(a){return new CKEDITOR.ui.button(a)}};CKEDITOR.ui.button.prototype={render:function(a,b){function h(){var c=a.mode;c&&(c=this.modes[c]?void 0!==m[c]?m[c]:CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,
+c=a.readOnly&&!this.readOnly?CKEDITOR.TRISTATE_DISABLED:c,this.setState(c),this.refresh&&this.refresh())}var m=null,c=CKEDITOR.env,d=this._.id=CKEDITOR.tools.getNextId(),g="",n=this.command,y,v,p;this._.editor=a;var q={id:d,button:this,editor:a,focus:function(){CKEDITOR.document.getById(d).focus()},execute:function(){this.button.click(a)},attach:function(a){this.button.attach(a)}},r=CKEDITOR.tools.addFunction(function(a){if(q.onkey)return a=new CKEDITOR.dom.event(a),!1!==q.onkey(q,a.getKeystroke())}),
+x=CKEDITOR.tools.addFunction(function(a){var c;q.onfocus&&(c=!1!==q.onfocus(q,new CKEDITOR.dom.event(a)));return c}),t=0;q.clickFn=y=CKEDITOR.tools.addFunction(function(){t&&(a.unlockSelection(1),t=0);q.execute();c.iOS&&a.focus()});this.modes?(m={},a.on("beforeModeUnload",function(){a.mode&&this._.state!=CKEDITOR.TRISTATE_DISABLED&&(m[a.mode]=this._.state)},this),a.on("activeFilterChange",h,this),a.on("mode",h,this),!this.readOnly&&a.on("readOnly",h,this)):n&&(n=a.getCommand(n))&&(n.on("state",function(){this.setState(n.state)},
+this),g+=n.state==CKEDITOR.TRISTATE_ON?"on":n.state==CKEDITOR.TRISTATE_DISABLED?"disabled":"off");var z;if(this.directional)a.on("contentDirChanged",function(c){var b=CKEDITOR.document.getById(this._.id),d=b.getFirst();c=c.data;c!=a.lang.dir?b.addClass("cke_"+c):b.removeClass("cke_ltr").removeClass("cke_rtl");d.setAttribute("style",CKEDITOR.skin.getIconStyle(z,"rtl"==c,this.icon,this.iconOffset))},this);n?(v=a.getCommandKeystroke(n))&&(p=CKEDITOR.tools.keystrokeToString(a.lang.common.keyboard,v)):
+g+="off";v=this.name||this.command;var u=null,w=this.icon;z=v;this.icon&&!/\./.test(this.icon)?(z=this.icon,w=null):(this.icon&&(u=this.icon),CKEDITOR.env.hidpi&&this.iconHiDpi&&(u=this.iconHiDpi));u?(CKEDITOR.skin.addIcon(u,u),w=null):u=z;g={id:d,name:v,iconName:z,label:this.label,cls:(this.hasArrow?"cke_button_expandable ":"")+(this.className||""),state:g,ariaDisabled:"disabled"==g?"true":"false",title:this.title+(p?" ("+p.display+")":""),ariaShortcutSpace:p?"\x26nbsp;":"",ariaShortcut:p?a.lang.common.keyboardShortcut+
+" "+p.aria:"",titleJs:c.gecko&&!c.hc?"":(this.title||"").replace("'",""),hasArrow:"string"===typeof this.hasArrow&&this.hasArrow||(this.hasArrow?"true":"false"),keydownFn:r,focusFn:x,clickFn:y,style:CKEDITOR.skin.getIconStyle(u,"rtl"==a.lang.dir,w,this.iconOffset),arrowHtml:this.hasArrow?f.output():""};e.output(g,b);if(this.onRender)this.onRender();return q},setState:function(a){if(this._.state==a)return!1;this._.state=a;var b=CKEDITOR.document.getById(this._.id);return b?(b.setState(a,"cke_button"),
 b.setAttribute("aria-disabled",a==CKEDITOR.TRISTATE_DISABLED),this.hasArrow?b.setAttribute("aria-expanded",a==CKEDITOR.TRISTATE_ON):a===CKEDITOR.TRISTATE_ON?b.setAttribute("aria-pressed",!0):b.removeAttribute("aria-pressed"),!0):!1},getState:function(){return this._.state},toFeature:function(a){if(this._.feature)return this._.feature;var b=this;this.allowedContent||this.requiredContent||!this.command||(b=a.getCommand(this.command)||b);return this._.feature=b}};CKEDITOR.ui.prototype.addButton=function(a,
-b){this.add(a,CKEDITOR.UI_BUTTON,b)}}(),function(){function b(a){function b(){for(var c=e(),d=CKEDITOR.tools.clone(a.config.toolbarGroups)||h(a),g=0;g<d.length;g++){var m=d[g];if("/"!=m){"string"==typeof m&&(m=d[g]={name:m});var t,r=m.groups;if(r)for(var x=0;x<r.length;x++)t=r[x],(t=c[t])&&f(m,t);(t=c[m.name])&&f(m,t)}}return d}function e(){var b={},c,d,g;for(c in a.ui.items)d=a.ui.items[c],g=d.toolbar||"others",g=g.split(","),d=g[0],g=parseInt(g[1]||-1,10),b[d]||(b[d]=[]),b[d].push({name:c,order:g});
-for(d in b)b[d]=b[d].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 f(b,c){if(c.length){b.items?b.items.push(a.ui.create("-")):b.items=[];for(var g;g=c.shift();)g="string"==typeof g?g:g.name,d&&-1!=CKEDITOR.tools.indexOf(d,g)||(g=a.ui.create(g))&&a.addFeature(g)&&b.items.push(g)}}function c(a){var b=[],c,d,g;for(c=0;c<a.length;++c)d=a[c],g={},"/"==d?b.push(d):CKEDITOR.tools.isArray(d)?(f(g,CKEDITOR.tools.clone(d)),b.push(g)):d.items&&
-(f(g,CKEDITOR.tools.clone(d.items)),g.name=d.name,b.push(g));return b}var d=a.config.removeButtons,d=d&&d.split(","),g=a.config.toolbar;"string"==typeof g&&(g=a.config["toolbar_"+g]);return a.toolbar=g?c(g):b()}function h(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"]},
+b){this.add(a,CKEDITOR.UI_BUTTON,b)}}(),function(){function b(a){function b(){for(var c=e(),d=CKEDITOR.tools.clone(a.config.toolbarGroups)||h(a),g=0;g<d.length;g++){var k=d[g];if("/"!=k){"string"==typeof k&&(k=d[g]={name:k});var q,r=k.groups;if(r)for(var x=0;x<r.length;x++)q=r[x],(q=c[q])&&f(k,q);(q=c[k.name])&&f(k,q)}}return d}function e(){var c={},b,d,g;for(b in a.ui.items)d=a.ui.items[b],g=d.toolbar||"others",g=g.split(","),d=g[0],g=parseInt(g[1]||-1,10),c[d]||(c[d]=[]),c[d].push({name:b,order:g});
+for(d in c)c[d]=c[d].sort(function(a,c){return a.order==c.order?0:0>c.order?-1:0>a.order?1:a.order<c.order?-1:1});return c}function f(c,b){if(b.length){c.items?c.items.push(a.ui.create("-")):c.items=[];for(var g;g=b.shift();)g="string"==typeof g?g:g.name,d&&-1!=CKEDITOR.tools.indexOf(d,g)||(g=a.ui.create(g))&&a.addFeature(g)&&c.items.push(g)}}function c(a){var c=[],b,d,g;for(b=0;b<a.length;++b)d=a[b],g={},"/"==d?c.push(d):CKEDITOR.tools.isArray(d)?(f(g,CKEDITOR.tools.clone(d)),c.push(g)):d.items&&
+(f(g,CKEDITOR.tools.clone(d.items)),g.name=d.name,c.push(g));return c}var d=a.config.removeButtons,d=d&&d.split(","),g=a.config.toolbar;"string"==typeof g&&(g=a.config["toolbar_"+g]);return a.toolbar=g?c(g):b()}function h(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","bidi"]},{name:"links"},{name:"insert"},"/",{name:"styles"},{name:"colors"},{name:"tools"},{name:"others"},{name:"about"}])}var f=function(){this.toolbars=[];this.focusCommandExecuted=!1};f.prototype.focus=function(){for(var a=0,b;b=this.toolbars[a++];)for(var e=0,f;f=b.items[e++];)if(f.focus){f.focus();return}};var e={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 h,k=function(b,c){var d,g="rtl"==a.lang.dir,e=a.config.toolbarGroupCycling,f=g?37:39,g=g?39:37,e=void 0===e||e;switch(c){case 9:case CKEDITOR.SHIFT+9:for(;!d||!d.items.length;)if(d=9==c?(d?d.next:b.toolbar.next)||a.toolbox.toolbars[0]:(d?d.previous:b.toolbar.previous)||a.toolbox.toolbars[a.toolbox.toolbars.length-1],d.items.length)for(b=d.items[h?d.items.length-
-1:0];b&&!b.focus;)(b=h?b.previous:b.next)||(d=0);b&&b.focus();return!1;case f:d=b;do d=d.next,!d&&e&&(d=b.toolbar.items[0]);while(d&&!d.focus);d?d.focus():k(b,9);return!1;case 40:return b.button&&b.button.hasArrow?b.execute():k(b,40==c?f:g),!1;case g:case 38:d=b;do d=d.previous,!d&&e&&(d=b.toolbar.items[b.toolbar.items.length-1]);while(d&&!d.focus);d?d.focus():(h=1,k(b,CKEDITOR.SHIFT+9),h=0);return!1;case 27:return a.focus(),!1;case 13:case 32:return b.execute(),!1}return!0};a.on("uiSpace",function(e){if(e.data.space==
+setTimeout(function(){a.toolbox.focus()},100):a.toolbox.focus())}};CKEDITOR.plugins.add("toolbar",{requires:"button",init:function(a){var h,l=function(b,c){var d,g="rtl"==a.lang.dir,e=a.config.toolbarGroupCycling,f=g?37:39,g=g?39:37,e=void 0===e||e;switch(c){case 9:case CKEDITOR.SHIFT+9:for(;!d||!d.items.length;)if(d=9==c?(d?d.next:b.toolbar.next)||a.toolbox.toolbars[0]:(d?d.previous:b.toolbar.previous)||a.toolbox.toolbars[a.toolbox.toolbars.length-1],d.items.length)for(b=d.items[h?d.items.length-
+1:0];b&&!b.focus;)(b=h?b.previous:b.next)||(d=0);b&&b.focus();return!1;case f:d=b;do d=d.next,!d&&e&&(d=b.toolbar.items[0]);while(d&&!d.focus);d?d.focus():l(b,9);return!1;case 40:return b.button&&b.button.hasArrow?b.execute():l(b,40==c?f:g),!1;case g:case 38:d=b;do d=d.previous,!d&&e&&(d=b.toolbar.items[b.toolbar.items.length-1]);while(d&&!d.focus);d?d.focus():(h=1,l(b,CKEDITOR.SHIFT+9),h=0);return!1;case 27:return a.focus(),!1;case 13:case 32:return b.execute(),!1}return!0};a.on("uiSpace",function(e){if(e.data.space==
 a.config.toolbarLocation){e.removeListener();a.toolbox=new f;var c=CKEDITOR.tools.getNextId(),d=['\x3cspan id\x3d"',c,'" class\x3d"cke_voice_label"\x3e',a.lang.toolbar.toolbars,"\x3c/span\x3e",'\x3cspan id\x3d"'+a.ui.spaceId("toolbox")+'" class\x3d"cke_toolbox" role\x3d"group" aria-labelledby\x3d"',c,'" onmousedown\x3d"return false;"\x3e'],c=!1!==a.config.toolbarStartupExpanded,g,h;a.config.toolbarCanCollapse&&a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE&&d.push('\x3cspan class\x3d"cke_toolbox_main"'+
-(c?"\x3e":' style\x3d"display:none"\x3e'));for(var m=a.toolbox.toolbars,w=b(a),p=w.length,t=0;t<p;t++){var r,x=0,u,z=w[t],q="/"!==z&&("/"===w[t+1]||t==p-1),v;if(z)if(g&&(d.push("\x3c/span\x3e"),h=g=0),"/"===z)d.push('\x3cspan class\x3d"cke_toolbar_break"\x3e\x3c/span\x3e');else{v=z.items||z;for(var B=0;B<v.length;B++){var D=v[B],A;if(D){var E=function(b){b=b.render(a,d);F=x.items.push(b)-1;0<F&&(b.previous=x.items[F-1],b.previous.next=b);b.toolbar=x;b.onkey=k;b.onfocus=function(){a.toolbox.focusCommandExecuted||
-a.focus()}};if(D.type==CKEDITOR.UI_SEPARATOR)h=g&&D;else{A=!1!==D.canGroup;if(!x){r=CKEDITOR.tools.getNextId();x={id:r,items:[]};u=z.name&&(a.lang.toolbar.toolbarGroups[z.name]||z.name);d.push('\x3cspan id\x3d"',r,'" class\x3d"cke_toolbar'+(q?' cke_toolbar_last"':'"'),u?' aria-labelledby\x3d"'+r+'_label"':"",' role\x3d"toolbar"\x3e');u&&d.push('\x3cspan id\x3d"',r,'_label" class\x3d"cke_voice_label"\x3e',u,"\x3c/span\x3e");d.push('\x3cspan class\x3d"cke_toolbar_start"\x3e\x3c/span\x3e');var F=m.push(x)-
-1;0<F&&(x.previous=m[F-1],x.previous.next=x)}A?g||(d.push('\x3cspan class\x3d"cke_toolgroup" role\x3d"presentation"\x3e'),g=1):g&&(d.push("\x3c/span\x3e"),g=0);h&&(E(h),h=0);E(D)}}}g&&(d.push("\x3c/span\x3e"),h=g=0);x&&d.push('\x3cspan class\x3d"cke_toolbar_end"\x3e\x3c/span\x3e\x3c/span\x3e')}}a.config.toolbarCanCollapse&&d.push("\x3c/span\x3e");if(a.config.toolbarCanCollapse&&a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var K=CKEDITOR.tools.addFunction(function(){a.execCommand("toolbarCollapse")});
-a.on("destroy",function(){CKEDITOR.tools.removeFunction(K)});a.addCommand("toolbarCollapse",{readOnly:1,exec:function(a){var b=a.ui.space("toolbar_collapser"),c=b.getPrevious(),d=a.ui.space("contents"),g=c.getParent(),e=parseInt(d.$.style.height,10),f=g.$.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",e-(g.$.offsetHeight-f)+"px");a.fire("resize",{outerHeight:a.container.$.offsetHeight,contentsHeight:d.$.offsetHeight,outerWidth:a.container.$.offsetWidth})},modes:{wysiwyg:1,source:1}});a.setKeystroke(CKEDITOR.ALT+(CKEDITOR.env.ie||CKEDITOR.env.webkit?189:109),"toolbarCollapse");d.push('\x3ca title\x3d"'+(c?a.lang.toolbar.toolbarCollapse:a.lang.toolbar.toolbarExpand)+'" id\x3d"'+a.ui.spaceId("toolbar_collapser")+'" tabIndex\x3d"-1" class\x3d"cke_toolbox_collapser');
-c||d.push(" cke_toolbox_collapser_min");d.push('" onclick\x3d"CKEDITOR.tools.callFunction('+K+')"\x3e','\x3cspan class\x3d"cke_arrow"\x3e\x26#9650;\x3c/span\x3e',"\x3c/a\x3e")}d.push("\x3c/span\x3e");e.data.html+=d.join("")}});a.on("destroy",function(){if(this.toolbox){var a,b=0,d,g,e;for(a=this.toolbox.toolbars;b<a.length;b++)for(g=a[b].items,d=0;d<g.length;d++)e=g[d],e.clickFn&&CKEDITOR.tools.removeFunction(e.clickFn),e.keyDownFn&&CKEDITOR.tools.removeFunction(e.keyDownFn)}});a.on("uiReady",function(){var b=
-a.ui.space("toolbox");b&&a.focusManager.add(b,1)});a.addCommand("toolbarFocus",e);a.setKeystroke(CKEDITOR.ALT+121,"toolbarFocus");a.ui.add("-",CKEDITOR.UI_SEPARATOR,{});a.ui.addHandler(CKEDITOR.UI_SEPARATOR,{create:function(){return{render:function(a,b){b.push('\x3cspan class\x3d"cke_toolbar_separator" role\x3d"separator"\x3e\x3c/span\x3e');return{}}}}})}});CKEDITOR.ui.prototype.addToolbarGroup=function(a,b,e){var f=h(this.editor),c=0===b,d={name:a};if(e){if(e=CKEDITOR.tools.search(f,function(a){return a.name==
-e})){!e.groups&&(e.groups=[]);if(b&&(b=CKEDITOR.tools.indexOf(e.groups,b),0<=b)){e.groups.splice(b+1,0,a);return}c?e.groups.splice(0,0,a):e.groups.push(a);return}b=null}b&&(b=CKEDITOR.tools.indexOf(f,function(a){return a.name==b}));c?f.splice(0,0,a):"number"==typeof b?f.splice(b+1,0,d):f.push(a)}}(),CKEDITOR.UI_SEPARATOR="separator",CKEDITOR.config.toolbarLocation="top","use strict",function(){function b(a,b,c){b.type||(b.type="auto");if(c&&!1===a.fire("beforePaste",b)||!b.dataValue&&b.dataTransfer.isEmpty())return!1;
-b.dataValue||(b.dataValue="");if(CKEDITOR.env.gecko&&"drop"==b.method&&a.toolbox)a.once("afterPaste",function(){a.toolbox.focus()});return a.fire("paste",b)}function h(a){function c(){var b=a.editable();if(CKEDITOR.plugins.clipboard.isCustomCopyCutSupported){var d=function(b){a.getSelection().isCollapsed()||(a.readOnly&&"cut"==b.name||A.initPasteDataTransfer(b,a),b.data.preventDefault())};b.on("copy",d);b.on("cut",d);b.on("cut",function(){a.readOnly||a.extractSelectedHtml()},null,null,999)}b.on(A.mainPasteEvent,
-function(a){"beforepaste"==A.mainPasteEvent&&E||v(a)});"beforepaste"==A.mainPasteEvent&&(b.on("paste",function(a){F||(f(),a.data.preventDefault(),v(a),k("paste"))}),b.on("contextmenu",h,null,null,0),b.on("beforepaste",function(a){!a.data||a.data.$.ctrlKey||a.data.$.shiftKey||h()},null,null,0));b.on("beforecut",function(){!E&&l(a)});var e;b.attachListener(CKEDITOR.env.ie?b:a.document.getDocumentElement(),"mouseup",function(){e=setTimeout(B,0)});a.on("destroy",function(){clearTimeout(e)});b.on("keyup",
-B)}function d(b){return{type:b,canUndo:"cut"==b,startDisabled:!0,fakeKeystroke:"cut"==b?CKEDITOR.CTRL+88:CKEDITOR.CTRL+67,exec:function(){"cut"==this.type&&l();var b;var c=this.type;if(CKEDITOR.env.ie)b=k(c);else try{b=a.document.$.execCommand(c,!1,null)}catch(d){b=!1}b||a.showNotification(a.lang.clipboard[this.type+"Error"]);return b}}}function e(){return{canUndo:!1,async:!0,fakeKeystroke:CKEDITOR.CTRL+86,exec:function(a,c){function d(c,f){f="undefined"!==typeof f?f:!0;c?(c.method="paste",c.dataTransfer||
+(c?"\x3e":' style\x3d"display:none"\x3e'));for(var k=a.toolbox.toolbars,v=b(a),p=v.length,q=0;q<p;q++){var r,x=0,t,z=v[q],u="/"!==z&&("/"===v[q+1]||q==p-1),w;if(z)if(g&&(d.push("\x3c/span\x3e"),h=g=0),"/"===z)d.push('\x3cspan class\x3d"cke_toolbar_break"\x3e\x3c/span\x3e');else{w=z.items||z;for(var B=0;B<w.length;B++){var C=w[B],A;if(C){var E=function(c){c=c.render(a,d);F=x.items.push(c)-1;0<F&&(c.previous=x.items[F-1],c.previous.next=c);c.toolbar=x;c.onkey=l;c.onfocus=function(){a.toolbox.focusCommandExecuted||
+a.focus()}};if(C.type==CKEDITOR.UI_SEPARATOR)h=g&&C;else{A=!1!==C.canGroup;if(!x){r=CKEDITOR.tools.getNextId();x={id:r,items:[]};t=z.name&&(a.lang.toolbar.toolbarGroups[z.name]||z.name);d.push('\x3cspan id\x3d"',r,'" class\x3d"cke_toolbar'+(u?' cke_toolbar_last"':'"'),t?' aria-labelledby\x3d"'+r+'_label"':"",' role\x3d"toolbar"\x3e');t&&d.push('\x3cspan id\x3d"',r,'_label" class\x3d"cke_voice_label"\x3e',t,"\x3c/span\x3e");d.push('\x3cspan class\x3d"cke_toolbar_start"\x3e\x3c/span\x3e');var F=k.push(x)-
+1;0<F&&(x.previous=k[F-1],x.previous.next=x)}A?g||(d.push('\x3cspan class\x3d"cke_toolgroup" role\x3d"presentation"\x3e'),g=1):g&&(d.push("\x3c/span\x3e"),g=0);h&&(E(h),h=0);E(C)}}}g&&(d.push("\x3c/span\x3e"),h=g=0);x&&d.push('\x3cspan class\x3d"cke_toolbar_end"\x3e\x3c/span\x3e\x3c/span\x3e')}}a.config.toolbarCanCollapse&&d.push("\x3c/span\x3e");if(a.config.toolbarCanCollapse&&a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var K=CKEDITOR.tools.addFunction(function(){a.execCommand("toolbarCollapse")});
+a.on("destroy",function(){CKEDITOR.tools.removeFunction(K)});a.addCommand("toolbarCollapse",{readOnly:1,exec:function(a){var c=a.ui.space("toolbar_collapser"),b=c.getPrevious(),d=a.ui.space("contents"),g=b.getParent(),e=parseInt(d.$.style.height,10),f=g.$.offsetHeight,h=c.hasClass("cke_toolbox_collapser_min");h?(b.show(),c.removeClass("cke_toolbox_collapser_min"),c.setAttribute("title",a.lang.toolbar.toolbarCollapse)):(b.hide(),c.addClass("cke_toolbox_collapser_min"),c.setAttribute("title",a.lang.toolbar.toolbarExpand));
+c.getFirst().setText(h?"â–²":"â—€");d.setStyle("height",e-(g.$.offsetHeight-f)+"px");a.fire("resize",{outerHeight:a.container.$.offsetHeight,contentsHeight:d.$.offsetHeight,outerWidth:a.container.$.offsetWidth})},modes:{wysiwyg:1,source:1}});a.setKeystroke(CKEDITOR.ALT+(CKEDITOR.env.ie||CKEDITOR.env.webkit?189:109),"toolbarCollapse");d.push('\x3ca title\x3d"'+(c?a.lang.toolbar.toolbarCollapse:a.lang.toolbar.toolbarExpand)+'" id\x3d"'+a.ui.spaceId("toolbar_collapser")+'" tabIndex\x3d"-1" class\x3d"cke_toolbox_collapser');
+c||d.push(" cke_toolbox_collapser_min");d.push('" onclick\x3d"CKEDITOR.tools.callFunction('+K+')"\x3e','\x3cspan class\x3d"cke_arrow"\x3e\x26#9650;\x3c/span\x3e',"\x3c/a\x3e")}d.push("\x3c/span\x3e");e.data.html+=d.join("")}});a.on("destroy",function(){if(this.toolbox){var a,c=0,b,g,e;for(a=this.toolbox.toolbars;c<a.length;c++)for(g=a[c].items,b=0;b<g.length;b++)e=g[b],e.clickFn&&CKEDITOR.tools.removeFunction(e.clickFn),e.keyDownFn&&CKEDITOR.tools.removeFunction(e.keyDownFn)}});a.on("uiReady",function(){var b=
+a.ui.space("toolbox");b&&a.focusManager.add(b,1)});a.addCommand("toolbarFocus",e);a.setKeystroke(CKEDITOR.ALT+121,"toolbarFocus");a.ui.add("-",CKEDITOR.UI_SEPARATOR,{});a.ui.addHandler(CKEDITOR.UI_SEPARATOR,{create:function(){return{render:function(a,c){c.push('\x3cspan class\x3d"cke_toolbar_separator" role\x3d"separator"\x3e\x3c/span\x3e');return{}}}}})}});CKEDITOR.ui.prototype.addToolbarGroup=function(a,b,e){var f=h(this.editor),c=0===b,d={name:a};if(e){if(e=CKEDITOR.tools.search(f,function(a){return a.name==
+e})){!e.groups&&(e.groups=[]);if(b&&(b=CKEDITOR.tools.indexOf(e.groups,b),0<=b)){e.groups.splice(b+1,0,a);return}c?e.groups.splice(0,0,a):e.groups.push(a);return}b=null}b&&(b=CKEDITOR.tools.indexOf(f,function(a){return a.name==b}));c?f.splice(0,0,a):"number"==typeof b?f.splice(b+1,0,d):f.push(a)}}(),CKEDITOR.UI_SEPARATOR="separator",CKEDITOR.config.toolbarLocation="top","use strict",function(){function b(a,c,b){c.type||(c.type="auto");if(b&&!1===a.fire("beforePaste",c)||!c.dataValue&&c.dataTransfer.isEmpty())return!1;
+c.dataValue||(c.dataValue="");if(CKEDITOR.env.gecko&&"drop"==c.method&&a.toolbox)a.once("afterPaste",function(){a.toolbox.focus()});return a.fire("paste",c)}function h(a){function c(){var b=a.editable();if(CKEDITOR.plugins.clipboard.isCustomCopyCutSupported){var d=function(c){a.getSelection().isCollapsed()||(a.readOnly&&"cut"==c.name||A.initPasteDataTransfer(c,a),c.data.preventDefault())};b.on("copy",d);b.on("cut",d);b.on("cut",function(){a.readOnly||a.extractSelectedHtml()},null,null,999)}b.on(A.mainPasteEvent,
+function(a){"beforepaste"==A.mainPasteEvent&&E||w(a)});"beforepaste"==A.mainPasteEvent&&(b.on("paste",function(a){F||(f(),a.data.preventDefault(),w(a),l("paste"))}),b.on("contextmenu",h,null,null,0),b.on("beforepaste",function(a){!a.data||a.data.$.ctrlKey||a.data.$.shiftKey||h()},null,null,0));b.on("beforecut",function(){!E&&k(a)});var e;b.attachListener(CKEDITOR.env.ie?b:a.document.getDocumentElement(),"mouseup",function(){e=setTimeout(B,0)});a.on("destroy",function(){clearTimeout(e)});b.on("keyup",
+B)}function d(c){return{type:c,canUndo:"cut"==c,startDisabled:!0,fakeKeystroke:"cut"==c?CKEDITOR.CTRL+88:CKEDITOR.CTRL+67,exec:function(){"cut"==this.type&&k();var c;var b=this.type;if(CKEDITOR.env.ie)c=l(b);else try{c=a.document.$.execCommand(b,!1,null)}catch(d){c=!1}c||a.showNotification(a.lang.clipboard[this.type+"Error"]);return c}}}function e(){return{canUndo:!1,async:!0,fakeKeystroke:CKEDITOR.CTRL+86,exec:function(a,c){function d(c,f){f="undefined"!==typeof f?f:!0;c?(c.method="paste",c.dataTransfer||
 (c.dataTransfer=A.initPasteDataTransfer()),b(a,c,f)):e&&!a._.forcePasteDialog&&a.showNotification(n,"info",a.config.clipboard_notificationDuration);a._.forcePasteDialog=!1;a.fire("afterCommandExec",{name:"paste",command:g,returnValue:!!c})}c="undefined"!==typeof c&&null!==c?c:{};var g=this,e="undefined"!==typeof c.notification?c.notification:!0,f=c.type,h=CKEDITOR.tools.keystrokeToString(a.lang.common.keyboard,a.getCommandKeystroke(this)),n="string"===typeof e?e:a.lang.clipboard.pasteNotification.replace(/%1/,
-'\x3ckbd aria-label\x3d"'+h.aria+'"\x3e'+h.display+"\x3c/kbd\x3e"),h="string"===typeof c?c:c.dataValue;f&&!0!==a.config.forcePasteAsPlainText&&"allow-word"!==a.config.forcePasteAsPlainText?a._.nextPasteType=f:delete a._.nextPasteType;"string"===typeof h?d({dataValue:h}):a.getClipboardData(d)}}}function f(){F=1;setTimeout(function(){F=0},100)}function h(){E=1;setTimeout(function(){E=0},10)}function k(b){var c=a.document,d=c.getBody(),e=!1,f=function(){e=!0};d.on(b,f);7<CKEDITOR.env.version?c.$.execCommand(b):
-c.$.selection.createRange().execCommand(b);d.removeListener(b,f);return e}function l(){if(CKEDITOR.env.ie&&!CKEDITOR.env.quirks){var b=a.getSelection(),c,d,e;b.getType()==CKEDITOR.SELECTION_ELEMENT&&(c=b.getSelectedElement())&&(d=b.getRanges()[0],e=a.document.createText(""),e.insertBefore(c),d.setStartBefore(e),d.setEndAfter(c),b.selectRanges([d]),setTimeout(function(){c.getParent()&&(e.remove(),b.selectElement(c))},0))}}function m(b,c){var d=a.document,e=a.editable(),f=function(a){a.cancel()},h;
-if(!d.getById("cke_pastebin")){var n=a.getSelection(),k=n.createBookmarks();CKEDITOR.env.ie&&n.root.fire("selectionchange");var l=new CKEDITOR.dom.element(!CKEDITOR.env.webkit&&!e.is("body")||CKEDITOR.env.ie?"div":"body",d);l.setAttributes({id:"cke_pastebin","data-cke-temp":"1"});var r=0,d=d.getWindow();CKEDITOR.env.webkit?(e.append(l),l.addClass("cke_editable"),e.is("body")||(r="static"!=e.getComputedStyle("position")?e:CKEDITOR.dom.element.get(e.$.offsetParent),r=r.getDocumentPosition().y)):e.getAscendant(CKEDITOR.env.ie?
-"body":"html",1).append(l);l.setStyles({position:"absolute",top:d.getScrollPosition().y-r+10+"px",width:"1px",height:Math.max(1,d.getViewPaneSize().height-20)+"px",overflow:"hidden",margin:0,padding:0});CKEDITOR.env.safari&&l.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select","text"));(r=l.getParent().isReadOnly())?(l.setOpacity(0),l.setAttribute("contenteditable",!0)):l.setStyle("ltr"==a.config.contentsLangDirection?"left":"right","-10000px");a.on("selectionChange",f,null,null,0);if(CKEDITOR.env.webkit||
-CKEDITOR.env.gecko)h=e.once("blur",f,null,null,-100);r&&l.focus();r=new CKEDITOR.dom.range(l);r.selectNodeContents(l);var q=r.select();CKEDITOR.env.ie&&(h=e.once("blur",function(){a.lockSelection(q)}));var u=CKEDITOR.document.getWindow().getScrollPosition().y;setTimeout(function(){CKEDITOR.env.webkit&&(CKEDITOR.document.getBody().$.scrollTop=u);h&&h.removeListener();CKEDITOR.env.ie&&e.focus();n.selectBookmarks(k);l.remove();var b;CKEDITOR.env.webkit&&(b=l.getFirst())&&b.is&&b.hasClass("Apple-style-span")&&
-(l=b);a.removeListener("selectionChange",f);c(l.getHtml())},0)}}function z(){if("paste"==A.mainPasteEvent)return a.fire("beforePaste",{type:"auto",method:"paste"}),!1;a.focus();f();var b=a.focusManager;b.lock();if(a.editable().fire(A.mainPasteEvent)&&!k("paste"))return b.unlock(),!1;b.unlock();return!0}function q(b){if("wysiwyg"==a.mode)switch(b.data.keyCode){case CKEDITOR.CTRL+86:case CKEDITOR.SHIFT+45:b=a.editable();f();"paste"==A.mainPasteEvent&&b.fire("beforepaste");break;case CKEDITOR.CTRL+88:case CKEDITOR.SHIFT+
-46:a.fire("saveSnapshot"),setTimeout(function(){a.fire("saveSnapshot")},50)}}function v(c){var d={type:"auto",method:"paste",dataTransfer:A.initPasteDataTransfer(c)};d.dataTransfer.cacheData();var e=!1!==a.fire("beforePaste",d);e&&A.canClipboardApiBeTrusted(d.dataTransfer,a)?(c.data.preventDefault(),setTimeout(function(){b(a,d)},0)):m(c,function(c){d.dataValue=c.replace(/<span[^>]+data-cke-bookmark[^<]*?<\/span>/ig,"");e&&b(a,d)})}function B(){if("wysiwyg"==a.mode){var b=D("paste");a.getCommand("cut").setState(D("cut"));
-a.getCommand("copy").setState(D("copy"));a.getCommand("paste").setState(b);a.fire("pasteState",b)}}function D(b){var c=a.getSelection(),c=c&&c.getRanges()[0];if((a.readOnly||c&&c.checkReadOnly())&&b in{paste:1,cut:1})return CKEDITOR.TRISTATE_DISABLED;if("paste"==b)return CKEDITOR.TRISTATE_OFF;b=a.getSelection();c=b.getRanges();return b.getType()==CKEDITOR.SELECTION_NONE||1==c.length&&c[0].collapsed?CKEDITOR.TRISTATE_DISABLED:CKEDITOR.TRISTATE_OFF}var A=CKEDITOR.plugins.clipboard,E=0,F=0;(function(){a.on("key",
-q);a.on("contentDom",c);a.on("selectionChange",B);if(a.contextMenu){a.contextMenu.addListener(function(){return{cut:D("cut"),copy:D("copy"),paste:D("paste")}});var b=null;a.on("menuShow",function(){b&&(b.removeListener(),b=null);var c=a.contextMenu.findItemByCommandName("paste");c&&c.element&&(b=c.element.on("touchend",function(){a._.forcePasteDialog=!0}))})}if(a.ui.addButton)a.once("instanceReady",function(){a._.pasteButtons&&CKEDITOR.tools.array.forEach(a._.pasteButtons,function(b){if(b=a.ui.get(b))if(b=
-CKEDITOR.document.getById(b._.id))b.on("touchend",function(){a._.forcePasteDialog=!0})})})})();(function(){function b(c,d,e,f,h){var n=a.lang.clipboard[d];a.addCommand(d,e);a.ui.addButton&&a.ui.addButton(c,{label:n,command:d,toolbar:"clipboard,"+f});a.addMenuItems&&a.addMenuItem(d,{label:n,command:d,group:"clipboard",order:h})}b("Cut","cut",d("cut"),10,1);b("Copy","copy",d("copy"),20,4);b("Paste","paste",e(),30,8);a._.pasteButtons||(a._.pasteButtons=[]);a._.pasteButtons.push("Paste")})();a.getClipboardData=
-function(b,c){function d(a){a.removeListener();a.cancel();c(a.data)}function e(a){a.removeListener();a.cancel();c({type:h,dataValue:a.data.dataValue,dataTransfer:a.data.dataTransfer,method:"paste"})}var f=!1,h="auto";c||(c=b,b=null);a.on("beforePaste",function(a){a.removeListener();f=!0;h=a.data.type},null,null,1E3);a.on("paste",d,null,null,0);!1===z()&&(a.removeListener("paste",d),a._.forcePasteDialog&&f&&a.fire("pasteDialog")?(a.on("pasteDialogCommit",e),a.on("dialogHide",function(a){a.removeListener();
-a.data.removeListener("pasteDialogCommit",e);a.data._.committed||c(null)})):c(null))}}function f(a){if(CKEDITOR.env.webkit){if(!a.match(/^[^<]*$/g)&&!a.match(/^(<div><br( ?\/)?><\/div>|<div>[^<]*<\/div>)*$/gi))return"html"}else if(CKEDITOR.env.ie){if(!a.match(/^([^<]|<br( ?\/)?>)*$/gi)&&!a.match(/^(<p>([^<]|<br( ?\/)?>)*<\/p>|(\r\n))*$/gi))return"html"}else if(CKEDITOR.env.gecko){if(!a.match(/^([^<]|<br( ?\/)?>)*$/gi))return"html"}else return"html";return"htmlifiedtext"}function e(a,b){function c(a){return CKEDITOR.tools.repeat("\x3c/p\x3e\x3cp\x3e",
-~~(a/2))+(1==a%2?"\x3cbr\x3e":"")}b=b.replace(/(?!\u3000)\s+/g," ").replace(/> +</g,"\x3e\x3c").replace(/<br ?\/>/gi,"\x3cbr\x3e");b=b.replace(/<\/?[A-Z]+>/g,function(a){return a.toLowerCase()});if(b.match(/^[^<]$/))return b;CKEDITOR.env.webkit&&-1<b.indexOf("\x3cdiv\x3e")&&(b=b.replace(/^(<div>(<br>|)<\/div>)(?!$|(<div>(<br>|)<\/div>))/g,"\x3cbr\x3e").replace(/^(<div>(<br>|)<\/div>){2}(?!$)/g,"\x3cdiv\x3e\x3c/div\x3e"),b.match(/<div>(<br>|)<\/div>/)&&(b="\x3cp\x3e"+b.replace(/(<div>(<br>|)<\/div>)+/g,
-function(a){return c(a.split("\x3c/div\x3e\x3cdiv\x3e").length+1)})+"\x3c/p\x3e"),b=b.replace(/<\/div><div>/g,"\x3cbr\x3e"),b=b.replace(/<\/?div>/g,""));CKEDITOR.env.gecko&&a.enterMode!=CKEDITOR.ENTER_BR&&(CKEDITOR.env.gecko&&(b=b.replace(/^<br><br>$/,"\x3cbr\x3e")),-1<b.indexOf("\x3cbr\x3e\x3cbr\x3e")&&(b="\x3cp\x3e"+b.replace(/(<br>){2,}/g,function(a){return c(a.length/4)})+"\x3c/p\x3e"));return k(a,b)}function a(a){function b(){var a={},c;for(c in CKEDITOR.dtd)"$"!=c.charAt(0)&&"div"!=c&&"span"!=
-c&&(a[c]=1);return a}var c={};return{get:function(d){return"plain-text"==d?c.plainText||(c.plainText=new CKEDITOR.filter(a,"br")):"semantic-content"==d?((d=c.semanticContent)||(d=new CKEDITOR.filter(a,{}),d.allow({$1:{elements:b(),attributes:!0,styles:!1,classes:!1}}),d=c.semanticContent=d),d):d?new CKEDITOR.filter(a,d):null}}}function m(a,b,c){b=CKEDITOR.htmlParser.fragment.fromHtml(b);var d=new CKEDITOR.htmlParser.basicWriter;c.applyTo(b,!0,!1,a.activeEnterMode);b.writeHtml(d);return d.getHtml()}
-function k(a,b){a.enterMode==CKEDITOR.ENTER_BR?b=b.replace(/(<\/p><p>)+/g,function(a){return CKEDITOR.tools.repeat("\x3cbr\x3e",a.length/7*2)}).replace(/<\/?p>/g,""):a.enterMode==CKEDITOR.ENTER_DIV&&(b=b.replace(/<(\/)?p>/g,"\x3c$1div\x3e"));return b}function l(a){a.data.preventDefault();a.data.$.dataTransfer.dropEffect="none"}function c(a){var c=CKEDITOR.plugins.clipboard;a.on("contentDom",function(){function d(c,e,f){e.select();b(a,{dataTransfer:f,method:"drop"},1);f.sourceEditor.fire("saveSnapshot");
-f.sourceEditor.editable().extractHtmlFromRange(c);f.sourceEditor.getSelection().selectRanges([c]);f.sourceEditor.fire("saveSnapshot")}function e(d,f){d.select();b(a,{dataTransfer:f,method:"drop"},1);c.resetDragDataTransfer()}function f(b,c,d){var e={$:b.data.$,target:b.data.getTarget()};c&&(e.dragRange=c);d&&(e.dropRange=d);!1===a.fire(b.name,e)&&b.data.preventDefault()}function h(a){a.type!=CKEDITOR.NODE_ELEMENT&&(a=a.getParent());return a.getChildCount()}var k=a.editable(),l=CKEDITOR.plugins.clipboard.getDropTarget(a),
-m=a.ui.space("top"),z=a.ui.space("bottom");c.preventDefaultDropOnElement(m);c.preventDefaultDropOnElement(z);k.attachListener(l,"dragstart",f);k.attachListener(a,"dragstart",c.resetDragDataTransfer,c,null,1);k.attachListener(a,"dragstart",function(b){c.initDragDataTransfer(b,a)},null,null,2);k.attachListener(a,"dragstart",function(){var b=c.dragRange=a.getSelection().getRanges()[0];CKEDITOR.env.ie&&10>CKEDITOR.env.version&&(c.dragStartContainerChildCount=b?h(b.startContainer):null,c.dragEndContainerChildCount=
-b?h(b.endContainer):null)},null,null,100);k.attachListener(l,"dragend",f);k.attachListener(a,"dragend",c.initDragDataTransfer,c,null,1);k.attachListener(a,"dragend",c.resetDragDataTransfer,c,null,100);k.attachListener(l,"dragover",function(a){if(CKEDITOR.env.edge)a.data.preventDefault();else{var b=a.data.getTarget();b&&b.is&&b.is("html")?a.data.preventDefault():CKEDITOR.env.ie&&CKEDITOR.plugins.clipboard.isFileApiSupported&&a.data.$.dataTransfer.types.contains("Files")&&a.data.preventDefault()}});
-k.attachListener(l,"drop",function(b){if(!b.data.$.defaultPrevented&&(b.data.preventDefault(),!a.readOnly)){var d=b.data.getTarget();if(!d.isReadOnly()||d.type==CKEDITOR.NODE_ELEMENT&&d.is("html")){var d=c.getRangeAtDropPosition(b,a),e=c.dragRange;d&&f(b,e,d)}}},null,null,9999);k.attachListener(a,"drop",c.initDragDataTransfer,c,null,1);k.attachListener(a,"drop",function(b){if(b=b.data){var f=b.dropRange,h=b.dragRange,k=b.dataTransfer;k.getTransferType(a)==CKEDITOR.DATA_TRANSFER_INTERNAL?setTimeout(function(){c.internalDrop(h,
-f,k,a)},0):k.getTransferType(a)==CKEDITOR.DATA_TRANSFER_CROSS_EDITORS?d(h,f,k):e(f,k)}},null,null,9999)})}var d;CKEDITOR.plugins.add("clipboard",{requires:"dialog,notification,toolbar",init:function(b){function d(a){if(!a||t===a.id)return!1;var b=a.getTypes(),b=1===b.length&&"Files"===b[0];a=1===a.getFilesCount();return b&&a}var k,l=a(b);b.config.forcePasteAsPlainText?k="plain-text":b.config.pasteFilter?k=b.config.pasteFilter:!CKEDITOR.env.webkit||"pasteFilter"in b.config||(k="semantic-content");
-b.pasteFilter=l.get(k);h(b);c(b);CKEDITOR.dialog.add("paste",CKEDITOR.getUrl(this.path+"dialogs/paste.js"));if(CKEDITOR.env.gecko){var p=["image/png","image/jpeg","image/gif"],t;b.on("paste",function(a){var c=a.data,e=c.dataTransfer;if(!c.dataValue&&"paste"==c.method&&d(e)&&(e=e.getFile(0),-1!=CKEDITOR.tools.indexOf(p,e.type))){var f=new FileReader;f.addEventListener("load",function(){a.data.dataValue='\x3cimg src\x3d"'+f.result+'" /\x3e';b.fire("paste",a.data)},!1);f.addEventListener("abort",function(){b.fire("paste",
-a.data)},!1);f.addEventListener("error",function(){b.fire("paste",a.data)},!1);f.readAsDataURL(e);t=c.dataTransfer.id;a.stop()}},null,null,1)}b.on("paste",function(a){a.data.dataTransfer||(a.data.dataTransfer=new CKEDITOR.plugins.clipboard.dataTransfer);if(!a.data.dataValue){var c=a.data.dataTransfer,d=c.getData("text/html");if(d)a.data.dataValue=d,a.data.type="html";else if(d=c.getData("text/plain"))a.data.dataValue=b.editable().transformPlainTextToHtml(d),a.data.type="text"}},null,null,1);b.on("paste",
-function(a){var b=a.data.dataValue,c=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,"\x26nbsp;\x26nbsp; \x26nbsp;")})),-1<b.indexOf('\x3cbr class\x3d"Apple-interchange-newline"\x3e')&&(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 d,g,e=new CKEDITOR.dom.element("div");for(e.setHtml(b);1==e.getChildCount()&&(d=e.getFirst())&&d.type==CKEDITOR.NODE_ELEMENT&&(d.hasClass("cke_editable")||d.hasClass("cke_contents"));)e=g=d;g&&(b=g.getHtml().replace(/<br>$/i,""))}CKEDITOR.env.ie?b=b.replace(/^&nbsp;(?: |\r\n)?<(\w+)/g,function(b,d){return d.toLowerCase()in c?(a.data.preSniffing="html","\x3c"+d):b}):CKEDITOR.env.webkit?b=b.replace(/<\/(\w+)><div><br><\/div>$/,function(b,d){return d in
-c?(a.data.endsWithEOL=1,"\x3c/"+d+"\x3e"):b}):CKEDITOR.env.gecko&&(b=b.replace(/(\s)<br>$/,"$1"));a.data.dataValue=b},null,null,3);b.on("paste",function(a){a=a.data;var c=b._.nextPasteType||a.type,d=a.dataValue,h,k=b.config.clipboard_defaultContentType||"html",n=a.dataTransfer.getTransferType(b)==CKEDITOR.DATA_TRANSFER_EXTERNAL,t=!0===b.config.forcePasteAsPlainText;h="html"==c||"html"==a.preSniffing?"html":f(d);delete b._.nextPasteType;"htmlifiedtext"==h&&(d=e(b.config,d));if("text"==c&&"html"==h)d=
-m(b,d,l.get("plain-text"));else if(n&&b.pasteFilter&&!a.dontFilter||t)d=m(b,d,b.pasteFilter);a.startsWithEOL&&(d='\x3cbr data-cke-eol\x3d"1"\x3e'+d);a.endsWithEOL&&(d+='\x3cbr data-cke-eol\x3d"1"\x3e');"auto"==c&&(c="html"==h||"html"==k?"html":"text");a.type=c;a.dataValue=d;delete a.preSniffing;delete a.startsWithEOL;delete a.endsWithEOL},null,null,6);b.on("paste",function(a){a=a.data;a.dataValue&&(b.insertHtml(a.dataValue,a.type,a.range),setTimeout(function(){b.fire("afterPaste")},0))},null,null,
-1E3);b.on("pasteDialog",function(a){setTimeout(function(){b.openDialog("paste",a.data)},0)})}});CKEDITOR.plugins.clipboard={isCustomCopyCutSupported:CKEDITOR.env.ie&&16>CKEDITOR.env.version||CKEDITOR.env.iOS&&605>CKEDITOR.env.version?!1:!0,isCustomDataTypesSupported:!CKEDITOR.env.ie||16<=CKEDITOR.env.version,isFileApiSupported:!CKEDITOR.env.ie||9<CKEDITOR.env.version,mainPasteEvent:CKEDITOR.env.ie&&!CKEDITOR.env.edge?"beforepaste":"paste",addPasteButton:function(a,b,c){a.ui.addButton&&(a.ui.addButton(b,
-c),a._.pasteButtons||(a._.pasteButtons=[]),a._.pasteButtons.push(b))},canClipboardApiBeTrusted:function(a,b){return a.getTransferType(b)!=CKEDITOR.DATA_TRANSFER_EXTERNAL||CKEDITOR.env.chrome&&!a.isEmpty()||CKEDITOR.env.gecko&&(a.getData("text/html")||a.getFilesCount())||CKEDITOR.env.safari&&603<=CKEDITOR.env.version&&!CKEDITOR.env.iOS||CKEDITOR.env.iOS&&605<=CKEDITOR.env.version||CKEDITOR.env.edge&&16<=CKEDITOR.env.version?!0:!1},getDropTarget:function(a){var b=a.editable();return CKEDITOR.env.ie&&
-9>CKEDITOR.env.version||b.isInline()?b:a.document},fixSplitNodesAfterDrop:function(a,b,c,d){function e(a,c,d){var g=a;g.type==CKEDITOR.NODE_TEXT&&(g=a.getParent());if(g.equals(c)&&d!=c.getChildCount())return a=b.startContainer.getChild(b.startOffset-1),c=b.startContainer.getChild(b.startOffset),a&&a.type==CKEDITOR.NODE_TEXT&&c&&c.type==CKEDITOR.NODE_TEXT&&(d=a.getLength(),a.setText(a.getText()+c.getText()),c.remove(),b.setStart(a,d),b.collapse(!0)),!0}var f=b.startContainer;"number"==typeof d&&"number"==
-typeof c&&f.type==CKEDITOR.NODE_ELEMENT&&(e(a.startContainer,f,c)||e(a.endContainer,f,d))},isDropRangeAffectedByDragRange:function(a,b){var c=b.startContainer,d=b.endOffset;return a.endContainer.equals(c)&&a.endOffset<=d||a.startContainer.getParent().equals(c)&&a.startContainer.getIndex()<d||a.endContainer.getParent().equals(c)&&a.endContainer.getIndex()<d?!0:!1},internalDrop:function(a,c,d,e){var f=CKEDITOR.plugins.clipboard,h=e.editable(),k,l;e.fire("saveSnapshot");e.fire("lockSnapshot",{dontUpdate:1});
-CKEDITOR.env.ie&&10>CKEDITOR.env.version&&this.fixSplitNodesAfterDrop(a,c,f.dragStartContainerChildCount,f.dragEndContainerChildCount);(l=this.isDropRangeAffectedByDragRange(a,c))||(k=a.createBookmark(!1));f=c.clone().createBookmark(!1);l&&(k=a.createBookmark(!1));a=k.startNode;c=k.endNode;l=f.startNode;c&&a.getPosition(l)&CKEDITOR.POSITION_PRECEDING&&c.getPosition(l)&CKEDITOR.POSITION_FOLLOWING&&l.insertBefore(a);a=e.createRange();a.moveToBookmark(k);h.extractHtmlFromRange(a,1);c=e.createRange();
-f.startNode.getCommonAncestor(h)||(f=e.getSelection().createBookmarks()[0]);c.moveToBookmark(f);b(e,{dataTransfer:d,method:"drop",range:c},1);e.fire("unlockSnapshot")},getRangeAtDropPosition:function(a,b){var c=a.data.$,d=c.clientX,e=c.clientY,f=b.getSelection(!0).getRanges()[0],h=b.createRange();if(a.data.testRange)return a.data.testRange;if(document.caretRangeFromPoint&&b.document.$.caretRangeFromPoint(d,e))c=b.document.$.caretRangeFromPoint(d,e),h.setStart(CKEDITOR.dom.node(c.startContainer),c.startOffset),
-h.collapse(!0);else if(c.rangeParent)h.setStart(CKEDITOR.dom.node(c.rangeParent),c.rangeOffset),h.collapse(!0);else{if(CKEDITOR.env.ie&&8<CKEDITOR.env.version&&f&&b.editable().hasFocus)return f;if(document.body.createTextRange){b.focus();c=b.document.getBody().$.createTextRange();try{for(var k=!1,l=0;20>l&&!k;l++){if(!k)try{c.moveToPoint(d,e-l),k=!0}catch(m){}if(!k)try{c.moveToPoint(d,e+l),k=!0}catch(q){}}if(k){var v="cke-temp-"+(new Date).getTime();c.pasteHTML('\x3cspan id\x3d"'+v+'"\x3e​\x3c/span\x3e');
-var B=b.document.getById(v);h.moveToPosition(B,CKEDITOR.POSITION_BEFORE_START);B.remove()}else{var D=b.document.$.elementFromPoint(d,e),A=new CKEDITOR.dom.element(D),E;if(A.equals(b.editable())||"html"==A.getName())return f&&f.startContainer&&!f.startContainer.equals(b.editable())?f:null;E=A.getClientRect();d<E.left?h.setStartAt(A,CKEDITOR.POSITION_AFTER_START):h.setStartAt(A,CKEDITOR.POSITION_BEFORE_END);h.collapse(!0)}}catch(F){return null}}else return null}return h},initDragDataTransfer:function(a,
-b){var c=a.data.$?a.data.$.dataTransfer:null,d=new this.dataTransfer(c,b);"dragstart"===a.name&&d.storeId();c?this.dragData&&d.id==this.dragData.id?d=this.dragData:this.dragData=d:this.dragData?d=this.dragData:this.dragData=d;a.data.dataTransfer=d},resetDragDataTransfer:function(){this.dragData=null},initPasteDataTransfer:function(a,b){if(this.isCustomCopyCutSupported){if(a&&a.data&&a.data.$){var c=a.data.$.clipboardData,d=new this.dataTransfer(c,b);"copy"!==a.name&&"cut"!==a.name||d.storeId();this.copyCutData&&
-d.id==this.copyCutData.id?(d=this.copyCutData,d.$=c):this.copyCutData=d;return d}return new this.dataTransfer(null,b)}return new this.dataTransfer(CKEDITOR.env.edge&&a&&a.data.$&&a.data.$.clipboardData||null,b)},preventDefaultDropOnElement:function(a){a&&a.on("dragover",l)}};d=CKEDITOR.plugins.clipboard.isCustomDataTypesSupported?"cke/id":"Text";CKEDITOR.plugins.clipboard.dataTransfer=function(a,b){a&&(this.$=a);this._={metaRegExp:/^<meta.*?>/i,fragmentRegExp:/\s*\x3c!--StartFragment--\x3e|\x3c!--EndFragment--\x3e\s*/g,
-data:{},files:[],nativeHtmlCache:"",normalizeType:function(a){a=a.toLowerCase();return"text"==a||"text/plain"==a?"Text":"url"==a?"URL":a}};this._.fallbackDataTransfer=new CKEDITOR.plugins.clipboard.fallbackDataTransfer(this);this.id=this.getData(d);this.id||(this.id="Text"==d?"":"cke-"+CKEDITOR.tools.getUniqueId());b&&(this.sourceEditor=b,this.setData("text/html",b.getSelectedHtml(1)),"Text"==d||this.getData("text/plain")||this.setData("text/plain",b.getSelection().getSelectedText()))};CKEDITOR.DATA_TRANSFER_INTERNAL=
-1;CKEDITOR.DATA_TRANSFER_CROSS_EDITORS=2;CKEDITOR.DATA_TRANSFER_EXTERNAL=3;CKEDITOR.plugins.clipboard.dataTransfer.prototype={getData:function(a,b){a=this._.normalizeType(a);var c="text/html"==a&&b?this._.nativeHtmlCache:this._.data[a];if(void 0===c||null===c||""===c){if(this._.fallbackDataTransfer.isRequired())c=this._.fallbackDataTransfer.getData(a,b);else try{c=this.$.getData(a)||""}catch(d){c=""}"text/html"!=a||b||(c=this._stripHtml(c))}"Text"==a&&CKEDITOR.env.gecko&&this.getFilesCount()&&"file://"==
-c.substring(0,7)&&(c="");if("string"===typeof c)var e=c.indexOf("\x3c/html\x3e"),c=-1!==e?c.substring(0,e+7):c;return c},setData:function(a,b){a=this._.normalizeType(a);"text/html"==a?(this._.data[a]=this._stripHtml(b),this._.nativeHtmlCache=b):this._.data[a]=b;if(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported||"URL"==a||"Text"==a)if("Text"==d&&"Text"==a&&(this.id=b),this._.fallbackDataTransfer.isRequired())this._.fallbackDataTransfer.setData(a,b);else try{this.$.setData(a,b)}catch(c){}},storeId:function(){"Text"!==
-d&&this.setData(d,this.id)},getTransferType:function(a){return this.sourceEditor?this.sourceEditor==a?CKEDITOR.DATA_TRANSFER_INTERNAL:CKEDITOR.DATA_TRANSFER_CROSS_EDITORS:CKEDITOR.DATA_TRANSFER_EXTERNAL},cacheData:function(){function a(c){c=b._.normalizeType(c);var d=b.getData(c);"text/html"==c&&(b._.nativeHtmlCache=b.getData(c,!0),d=b._stripHtml(d));d&&(b._.data[c]=d)}if(this.$){var b=this,c,d;if(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported){if(this.$.types)for(c=0;c<this.$.types.length;c++)a(this.$.types[c])}else a("Text"),
-a("URL");d=this._getImageFromClipboard();if(this.$&&this.$.files||d){this._.files=[];if(this.$.files&&this.$.files.length)for(c=0;c<this.$.files.length;c++)this._.files.push(this.$.files[c]);0===this._.files.length&&d&&this._.files.push(d)}}},getFilesCount:function(){return this._.files.length?this._.files.length:this.$&&this.$.files&&this.$.files.length?this.$.files.length:this._getImageFromClipboard()?1:0},getFile:function(a){return this._.files.length?this._.files[a]:this.$&&this.$.files&&this.$.files.length?
-this.$.files[a]:0===a?this._getImageFromClipboard():void 0},isEmpty:function(){var a={},b;if(this.getFilesCount())return!1;CKEDITOR.tools.array.forEach(CKEDITOR.tools.object.keys(this._.data),function(b){a[b]=1});if(this.$)if(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported){if(this.$.types)for(var c=0;c<this.$.types.length;c++)a[this.$.types[c]]=1}else a.Text=1,a.URL=1;"Text"!=d&&(a[d]=0);for(b in a)if(a[b]&&""!==this.getData(b))return!1;return!0},getTypes:function(){return this.$&&this.$.types?
-[].slice.call(this.$.types):[]},_getImageFromClipboard:function(){var a;try{if(this.$&&this.$.items&&this.$.items[0]&&(a=this.$.items[0].getAsFile())&&a.type)return a}catch(b){}},_stripHtml:function(a){function b(a){var c=new CKEDITOR.htmlParser,d,g;c.onTagOpen=function(a){"body"===a&&(d=c._.htmlPartsRegex.lastIndex)};c.onTagClose=function(a){"body"===a&&(g=c._.htmlPartsRegex.lastIndex)};c.parse(a);return"number"!==typeof d||"number"!==typeof g?a:a.substring(d,g).replace(/<\/body\s*>$/gi,"")}a&&a.length&&
-(a=b(a),a=a.replace(this._.metaRegExp,""),a=a.replace(this._.fragmentRegExp,""));return a}};CKEDITOR.plugins.clipboard.fallbackDataTransfer=function(a){this._dataTransfer=a;this._customDataFallbackType="text/html"};CKEDITOR.plugins.clipboard.fallbackDataTransfer._isCustomMimeTypeSupported=null;CKEDITOR.plugins.clipboard.fallbackDataTransfer._customTypes=[];CKEDITOR.plugins.clipboard.fallbackDataTransfer.prototype={isRequired:function(){var a=CKEDITOR.plugins.clipboard.fallbackDataTransfer,b=this._dataTransfer.$;
-if(null===a._isCustomMimeTypeSupported)if(b){a._isCustomMimeTypeSupported=!1;if(CKEDITOR.env.edge&&17<=CKEDITOR.env.version)return!0;try{b.setData("cke/mimetypetest","cke test value"),a._isCustomMimeTypeSupported="cke test value"===b.getData("cke/mimetypetest"),b.clearData("cke/mimetypetest")}catch(c){}}else return!1;return!a._isCustomMimeTypeSupported},getData:function(a,b){var c=this._getData(this._customDataFallbackType,!0);if(b)return c;var c=this._extractDataComment(c),d=null,d=a===this._customDataFallbackType?
-c.content:c.data&&c.data[a]?c.data[a]:this._getData(a,!0);return null!==d?d:""},setData:function(a,b){var c=a===this._customDataFallbackType;c&&(b=this._applyDataComment(b,this._getFallbackTypeData()));var d=b,e=this._dataTransfer.$;try{e.setData(a,d),c&&(this._dataTransfer._.nativeHtmlCache=d)}catch(f){if(this._isUnsupportedMimeTypeError(f)){c=CKEDITOR.plugins.clipboard.fallbackDataTransfer;-1===CKEDITOR.tools.indexOf(c._customTypes,a)&&c._customTypes.push(a);var c=this._getFallbackTypeContent(),
-h=this._getFallbackTypeData();h[a]=d;try{d=this._applyDataComment(c,h),e.setData(this._customDataFallbackType,d),this._dataTransfer._.nativeHtmlCache=d}catch(k){d=""}}}return d},_getData:function(a,b){var c=this._dataTransfer._.data;if(!b&&c[a])return c[a];try{return this._dataTransfer.$.getData(a)}catch(d){return null}},_getFallbackTypeContent:function(){var a=this._dataTransfer._.data[this._customDataFallbackType];a||(a=this._extractDataComment(this._getData(this._customDataFallbackType,!0)).content);
-return a},_getFallbackTypeData:function(){var a=CKEDITOR.plugins.clipboard.fallbackDataTransfer._customTypes,b=this._extractDataComment(this._getData(this._customDataFallbackType,!0)).data||{},c=this._dataTransfer._.data;CKEDITOR.tools.array.forEach(a,function(a){void 0!==c[a]?b[a]=c[a]:void 0!==b[a]&&(b[a]=b[a])},this);return b},_isUnsupportedMimeTypeError:function(a){return a.message&&-1!==a.message.search(/element not found/gi)},_extractDataComment:function(a){var b={data:null,content:a||""};if(a&&
-16<a.length){var c;(c=/\x3c!--cke-data:(.*?)--\x3e/g.exec(a))&&c[1]&&(b.data=JSON.parse(decodeURIComponent(c[1])),b.content=a.replace(c[0],""))}return b},_applyDataComment:function(a,b){var c="";b&&CKEDITOR.tools.object.keys(b).length&&(c="\x3c!--cke-data:"+encodeURIComponent(JSON.stringify(b))+"--\x3e");return c+(a&&a.length?a:"")}}}(),CKEDITOR.config.clipboard_notificationDuration=1E4,function(){CKEDITOR.plugins.add("panel",{beforeInit:function(b){b.ui.addHandler(CKEDITOR.UI_PANEL,CKEDITOR.ui.panel.handler)}});
-CKEDITOR.UI_PANEL="panel";CKEDITOR.ui.panel=function(b,a){a&&CKEDITOR.tools.extend(this,a);CKEDITOR.tools.extend(this,{className:"",css:[]});this.id=CKEDITOR.tools.getNextId();this.document=b;this.isFramed=this.forceIFrame||this.css.length;this._={blocks:{}}};CKEDITOR.ui.panel.handler={create:function(b){return new CKEDITOR.ui.panel(b)}};var b=CKEDITOR.addTemplate("panel",'\x3cdiv lang\x3d"{langCode}" id\x3d"{id}" dir\x3d{dir} class\x3d"cke cke_reset_all {editorId} cke_panel cke_panel {cls} cke_{dir}" style\x3d"z-index:{z-index}" role\x3d"presentation"\x3e{frame}\x3c/div\x3e'),
-h=CKEDITOR.addTemplate("panel-frame",'\x3ciframe id\x3d"{id}" class\x3d"cke_panel_frame" role\x3d"presentation" frameborder\x3d"0" src\x3d"{src}"\x3e\x3c/iframe\x3e'),f=CKEDITOR.addTemplate("panel-frame-inner",'\x3c!DOCTYPE html\x3e\x3chtml class\x3d"cke_panel_container {env}" dir\x3d"{dir}" lang\x3d"{langCode}"\x3e\x3chead\x3e{css}\x3c/head\x3e\x3cbody class\x3d"cke_{dir}" style\x3d"margin:0;padding:0" onload\x3d"{onload}"\x3e\x3c/body\x3e\x3c/html\x3e');CKEDITOR.ui.panel.prototype={render:function(e,
-a){var m={editorId:e.id,id:this.id,langCode:e.langCode,dir:e.lang.dir,cls:this.className,frame:"",env:CKEDITOR.env.cssClass,"z-index":e.config.baseFloatZIndex+1};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(f.output(CKEDITOR.tools.extend({css:CKEDITOR.tools.buildStyleHtml(this.css),onload:"window.parent.CKEDITOR.tools.callFunction("+b+");"},m)));a.getWindow().$.CKEDITOR=CKEDITOR;a.on("keydown",function(a){var b=a.data.getKeystroke(),c=this.document.getById(this.id).getAttribute("dir");if("input"!==a.data.getTarget().getName()||37!==b&&39!==b)this._.onKeyDown&&!1===this._.onKeyDown(b)?"input"===a.data.getTarget().getName()&&32===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};if(this.isFramed){var k=CKEDITOR.env.air?"javascript:void(0)":CKEDITOR.env.ie&&!CKEDITOR.env.edge?"javascript:void(function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+"}())":"";m.frame=h.output({id:this.id+"_frame",src:k})}k=b.output(m);a&&
-a.push(k);return k},addBlock:function(b,a){a=this._.blocks[b]=a instanceof CKEDITOR.ui.panel.block?a:new CKEDITOR.ui.panel.block(this.getHolderElement(),a);this._.currentBlock||this.showBlock(b);return a},getBlock:function(b){return this._.blocks[b]},showBlock:function(b){b=this._.blocks[b];var a=this._.currentBlock,f=!this.forceIFrame||CKEDITOR.env.ie?this._.holder:this.document.getById(this.id+"_frame");a&&a.hide();this._.currentBlock=b;CKEDITOR.fire("ariaWidget",f);b._.focusIndex=-1;this._.onKeyDown=
-b.onKeyDown&&CKEDITOR.tools.bind(b.onKeyDown,b);b.show();return b},destroy:function(){this.element&&this.element.remove()}};CKEDITOR.ui.panel.block=CKEDITOR.tools.createClass({$:function(b,a){this.element=b.append(b.getDocument().createElement("div",{attributes:{tabindex:-1,"class":"cke_panel_block"},styles:{display:"none"}}));a&&CKEDITOR.tools.extend(this,a);this.element.setAttributes({role:this.attributes.role||"presentation","aria-label":this.attributes["aria-label"],title:this.attributes.title||
-this.attributes["aria-label"]});this.keys={};this._.focusIndex=-1;this.element.disableContextMenu()},_:{markItem:function(b){-1!=b&&(b=this._.getItems().getItem(this._.focusIndex=b),CKEDITOR.env.webkit&&b.getDocument().getWindow().focus(),b.focus(),this.onMark&&this.onMark(b))},markFirstDisplayed:function(b){for(var a=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&"none"==a.getStyle("display")},f=this._.getItems(),h,l,c=f.count()-1;0<=c;c--)if(h=f.getItem(c),h.getAscendant(a)||(l=h,this._.focusIndex=
-c),"true"==h.getAttribute("aria-selected")){l=h;this._.focusIndex=c;break}l&&(b&&b(),CKEDITOR.env.webkit&&l.getDocument().getWindow().focus(),l.focus(),this.onMark&&this.onMark(l))},getItems:function(){return this.element.find("a,input")}},proto:{show:function(){this.element.setStyle("display","")},hide:function(){this.onHide&&!0===this.onHide.call(this)||this.element.setStyle("display","none")},onKeyDown:function(b,a){var f=this.keys[b];switch(f){case "next":for(var h=this._.focusIndex,f=this._.getItems(),
-l;l=f.getItem(++h);)if(l.getAttribute("_cke_focus")&&l.$.offsetWidth){this._.focusIndex=h;l.focus(!0);break}return l||a?!1:(this._.focusIndex=-1,this.onKeyDown(b,1));case "prev":h=this._.focusIndex;for(f=this._.getItems();0<h&&(l=f.getItem(--h));){if(l.getAttribute("_cke_focus")&&l.$.offsetWidth){this._.focusIndex=h;l.focus(!0);break}l=null}return l||a?!1:(this._.focusIndex=f.count(),this.onKeyDown(b,1));case "click":case "mouseup":return h=this._.focusIndex,(l=0<=h&&this._.getItems().getItem(h))&&
-l.fireEventHandler(f,{button:CKEDITOR.tools.normalizeMouseButton(CKEDITOR.MOUSE_BUTTON_LEFT,!0)}),!1}return!0}}})}(),CKEDITOR.plugins.add("floatpanel",{requires:"panel"}),function(){function b(b,e,a,m,k){k=CKEDITOR.tools.genKey(e.getUniqueId(),a.getUniqueId(),b.lang.dir,b.uiColor||"",m.css||"",k||"");var l=h[k];l||(l=h[k]=new CKEDITOR.ui.panel(e,m),l.element=a.append(CKEDITOR.dom.element.createFromHtml(l.render(b),e)),l.element.setStyles({display:"none",position:"absolute"}));return l}var h={};CKEDITOR.ui.floatPanel=
-CKEDITOR.tools.createClass({$:function(f,e,a,h){function k(){g.hide()}a.forceIFrame=1;a.toolbarRelated&&f.elementMode==CKEDITOR.ELEMENT_MODE_INLINE&&(e=CKEDITOR.document.getById("cke_"+f.name));var l=e.getDocument();h=b(f,l,e,a,h||0);var c=h.element,d=c.getFirst(),g=this;c.disableContextMenu();this.element=c;this._={editor:f,panel:h,parentElement:e,definition:a,document:l,iframe:d,children:[],dir:f.lang.dir,showBlockParams:null,markFirst:void 0!==a.markFirst?a.markFirst:!0};f.on("mode",k);f.on("resize",
-k);l.getWindow().on("resize",function(){this.reposition()},this)},proto:{addBlock:function(b,e){return this._.panel.addBlock(b,e)},addListBlock:function(b,e){return this._.panel.addListBlock(b,e)},getBlock:function(b){return this._.panel.getBlock(b)},showBlock:function(b,e,a,h,k,l){var c=this._.panel,d=c.showBlock(b);this._.showBlockParams=[].slice.call(arguments);this.allowBlur(!1);var g=this._.editor.editable();this._.returnFocus=g.hasFocus?g:new CKEDITOR.dom.element(CKEDITOR.document.$.activeElement);
-this._.hideTimeout=0;var n=this.element,g=this._.iframe,g=CKEDITOR.env.ie&&!CKEDITOR.env.edge?g:new CKEDITOR.dom.window(g.$.contentWindow),y=n.getDocument(),w=this._.parentElement.getPositionedAncestor(),p=e.getDocumentPosition(y),y=w?w.getDocumentPosition(y):{x:0,y:0},t="rtl"==this._.dir,r=p.x+(h||0)-y.x,x=p.y+(k||0)-y.y;!t||1!=a&&4!=a?t||2!=a&&3!=a||(r+=e.$.offsetWidth-1):r+=e.$.offsetWidth;if(3==a||4==a)x+=e.$.offsetHeight-1;this._.panel._.offsetParentId=e.getId();n.setStyles({top:x+"px",left:0,
-display:""});n.setOpacity(0);n.getFirst().removeStyle("width");this._.editor.focusManager.add(g);this._.blurSet||(CKEDITOR.event.useCapture=!0,g.on("blur",function(a){function b(){delete this._.returnFocus;this.hide()}this.allowBlur()&&a.data.getPhase()==CKEDITOR.EVENT_PHASE_AT_TARGET&&this.visible&&!this._.activeChild&&(CKEDITOR.env.iOS?this._.hideTimeout||(this._.hideTimeout=CKEDITOR.tools.setTimeout(b,0,this)):b.call(this))},this),g.on("focus",function(){this._.focused=!0;this.hideChild();this.allowBlur(!0)},
+'\x3ckbd aria-label\x3d"'+h.aria+'"\x3e'+h.display+"\x3c/kbd\x3e"),h="string"===typeof c?c:c.dataValue;f&&!0!==a.config.forcePasteAsPlainText&&"allow-word"!==a.config.forcePasteAsPlainText?a._.nextPasteType=f:delete a._.nextPasteType;"string"===typeof h?d({dataValue:h}):a.getClipboardData(d)}}}function f(){F=1;setTimeout(function(){F=0},100)}function h(){E=1;setTimeout(function(){E=0},10)}function l(c){var b=a.document,d=b.getBody(),e=!1,f=function(){e=!0};d.on(c,f);7<CKEDITOR.env.version?b.$.execCommand(c):
+b.$.selection.createRange().execCommand(c);d.removeListener(c,f);return e}function k(){if(CKEDITOR.env.ie&&!CKEDITOR.env.quirks){var c=a.getSelection(),b,d,e;c.getType()==CKEDITOR.SELECTION_ELEMENT&&(b=c.getSelectedElement())&&(d=c.getRanges()[0],e=a.document.createText(""),e.insertBefore(b),d.setStartBefore(e),d.setEndAfter(b),c.selectRanges([d]),setTimeout(function(){b.getParent()&&(e.remove(),c.selectElement(b))},0))}}function m(c,b){var d=a.document,e=a.editable(),f=function(a){a.cancel()},h;
+if(!d.getById("cke_pastebin")){var n=a.getSelection(),l=n.createBookmarks();CKEDITOR.env.ie&&n.root.fire("selectionchange");var k=new CKEDITOR.dom.element(!CKEDITOR.env.webkit&&!e.is("body")||CKEDITOR.env.ie?"div":"body",d);k.setAttributes({id:"cke_pastebin","data-cke-temp":"1"});var r=0,d=d.getWindow();CKEDITOR.env.webkit?(e.append(k),k.addClass("cke_editable"),e.is("body")||(r="static"!=e.getComputedStyle("position")?e:CKEDITOR.dom.element.get(e.$.offsetParent),r=r.getDocumentPosition().y)):e.getAscendant(CKEDITOR.env.ie?
+"body":"html",1).append(k);k.setStyles({position:"absolute",top:d.getScrollPosition().y-r+10+"px",width:"1px",height:Math.max(1,d.getViewPaneSize().height-20)+"px",overflow:"hidden",margin:0,padding:0});CKEDITOR.env.safari&&k.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select","text"));(r=k.getParent().isReadOnly())?(k.setOpacity(0),k.setAttribute("contenteditable",!0)):k.setStyle("ltr"==a.config.contentsLangDirection?"left":"right","-10000px");a.on("selectionChange",f,null,null,0);if(CKEDITOR.env.webkit||
+CKEDITOR.env.gecko)h=e.once("blur",f,null,null,-100);r&&k.focus();r=new CKEDITOR.dom.range(k);r.selectNodeContents(k);var t=r.select();CKEDITOR.env.ie&&(h=e.once("blur",function(){a.lockSelection(t)}));var q=CKEDITOR.document.getWindow().getScrollPosition().y;setTimeout(function(){CKEDITOR.env.webkit&&(CKEDITOR.document.getBody().$.scrollTop=q);h&&h.removeListener();CKEDITOR.env.ie&&e.focus();n.selectBookmarks(l);k.remove();var c;CKEDITOR.env.webkit&&(c=k.getFirst())&&c.is&&c.hasClass("Apple-style-span")&&
+(k=c);a.removeListener("selectionChange",f);b(k.getHtml())},0)}}function z(){if("paste"==A.mainPasteEvent)return a.fire("beforePaste",{type:"auto",method:"paste"}),!1;a.focus();f();var c=a.focusManager;c.lock();if(a.editable().fire(A.mainPasteEvent)&&!l("paste"))return c.unlock(),!1;c.unlock();return!0}function u(c){if("wysiwyg"==a.mode)switch(c.data.keyCode){case CKEDITOR.CTRL+86:case CKEDITOR.SHIFT+45:c=a.editable();f();"paste"==A.mainPasteEvent&&c.fire("beforepaste");break;case CKEDITOR.CTRL+88:case CKEDITOR.SHIFT+
+46:a.fire("saveSnapshot"),setTimeout(function(){a.fire("saveSnapshot")},50)}}function w(c){var d={type:"auto",method:"paste",dataTransfer:A.initPasteDataTransfer(c)};d.dataTransfer.cacheData();var e=!1!==a.fire("beforePaste",d);e&&A.canClipboardApiBeTrusted(d.dataTransfer,a)?(c.data.preventDefault(),setTimeout(function(){b(a,d)},0)):m(c,function(c){d.dataValue=c.replace(/<span[^>]+data-cke-bookmark[^<]*?<\/span>/ig,"");e&&b(a,d)})}function B(){if("wysiwyg"==a.mode){var c=C("paste");a.getCommand("cut").setState(C("cut"));
+a.getCommand("copy").setState(C("copy"));a.getCommand("paste").setState(c);a.fire("pasteState",c)}}function C(c){var b=a.getSelection(),b=b&&b.getRanges()[0];if((a.readOnly||b&&b.checkReadOnly())&&c in{paste:1,cut:1})return CKEDITOR.TRISTATE_DISABLED;if("paste"==c)return CKEDITOR.TRISTATE_OFF;c=a.getSelection();b=c.getRanges();return c.getType()==CKEDITOR.SELECTION_NONE||1==b.length&&b[0].collapsed?CKEDITOR.TRISTATE_DISABLED:CKEDITOR.TRISTATE_OFF}var A=CKEDITOR.plugins.clipboard,E=0,F=0;(function(){a.on("key",
+u);a.on("contentDom",c);a.on("selectionChange",B);if(a.contextMenu){a.contextMenu.addListener(function(){return{cut:C("cut"),copy:C("copy"),paste:C("paste")}});var b=null;a.on("menuShow",function(){b&&(b.removeListener(),b=null);var c=a.contextMenu.findItemByCommandName("paste");c&&c.element&&(b=c.element.on("touchend",function(){a._.forcePasteDialog=!0}))})}if(a.ui.addButton)a.once("instanceReady",function(){a._.pasteButtons&&CKEDITOR.tools.array.forEach(a._.pasteButtons,function(c){if(c=a.ui.get(c))if(c=
+CKEDITOR.document.getById(c._.id))c.on("touchend",function(){a._.forcePasteDialog=!0})})})})();(function(){function c(b,d,e,f,h){var n=a.lang.clipboard[d];a.addCommand(d,e);a.ui.addButton&&a.ui.addButton(b,{label:n,command:d,toolbar:"clipboard,"+f});a.addMenuItems&&a.addMenuItem(d,{label:n,command:d,group:"clipboard",order:h})}c("Cut","cut",d("cut"),10,1);c("Copy","copy",d("copy"),20,4);c("Paste","paste",e(),30,8);a._.pasteButtons||(a._.pasteButtons=[]);a._.pasteButtons.push("Paste")})();a.getClipboardData=
+function(c,b){function d(a){a.removeListener();a.cancel();b(a.data)}function e(a){a.removeListener();a.cancel();b({type:h,dataValue:a.data.dataValue,dataTransfer:a.data.dataTransfer,method:"paste"})}var f=!1,h="auto";b||(b=c,c=null);a.on("beforePaste",function(a){a.removeListener();f=!0;h=a.data.type},null,null,1E3);a.on("paste",d,null,null,0);!1===z()&&(a.removeListener("paste",d),a._.forcePasteDialog&&f&&a.fire("pasteDialog")?(a.on("pasteDialogCommit",e),a.on("dialogHide",function(a){a.removeListener();
+a.data.removeListener("pasteDialogCommit",e);a.data._.committed||b(null)})):b(null))}}function f(a){if(CKEDITOR.env.webkit){if(!a.match(/^[^<]*$/g)&&!a.match(/^(<div><br( ?\/)?><\/div>|<div>[^<]*<\/div>)*$/gi))return"html"}else if(CKEDITOR.env.ie){if(!a.match(/^([^<]|<br( ?\/)?>)*$/gi)&&!a.match(/^(<p>([^<]|<br( ?\/)?>)*<\/p>|(\r\n))*$/gi))return"html"}else if(CKEDITOR.env.gecko){if(!a.match(/^([^<]|<br( ?\/)?>)*$/gi))return"html"}else return"html";return"htmlifiedtext"}function e(a,c){function b(a){return CKEDITOR.tools.repeat("\x3c/p\x3e\x3cp\x3e",
+~~(a/2))+(1==a%2?"\x3cbr\x3e":"")}c=c.replace(/(?!\u3000)\s+/g," ").replace(/> +</g,"\x3e\x3c").replace(/<br ?\/>/gi,"\x3cbr\x3e");c=c.replace(/<\/?[A-Z]+>/g,function(a){return a.toLowerCase()});if(c.match(/^[^<]$/))return c;CKEDITOR.env.webkit&&-1<c.indexOf("\x3cdiv\x3e")&&(c=c.replace(/^(<div>(<br>|)<\/div>)(?!$|(<div>(<br>|)<\/div>))/g,"\x3cbr\x3e").replace(/^(<div>(<br>|)<\/div>){2}(?!$)/g,"\x3cdiv\x3e\x3c/div\x3e"),c.match(/<div>(<br>|)<\/div>/)&&(c="\x3cp\x3e"+c.replace(/(<div>(<br>|)<\/div>)+/g,
+function(a){return b(a.split("\x3c/div\x3e\x3cdiv\x3e").length+1)})+"\x3c/p\x3e"),c=c.replace(/<\/div><div>/g,"\x3cbr\x3e"),c=c.replace(/<\/?div>/g,""));CKEDITOR.env.gecko&&a.enterMode!=CKEDITOR.ENTER_BR&&(CKEDITOR.env.gecko&&(c=c.replace(/^<br><br>$/,"\x3cbr\x3e")),-1<c.indexOf("\x3cbr\x3e\x3cbr\x3e")&&(c="\x3cp\x3e"+c.replace(/(<br>){2,}/g,function(a){return b(a.length/4)})+"\x3c/p\x3e"));return l(a,c)}function a(a){function c(){var a={},b;for(b in CKEDITOR.dtd)"$"!=b.charAt(0)&&"div"!=b&&"span"!=
+b&&(a[b]=1);return a}var b={};return{get:function(d){return"plain-text"==d?b.plainText||(b.plainText=new CKEDITOR.filter(a,"br")):"semantic-content"==d?((d=b.semanticContent)||(d=new CKEDITOR.filter(a,{}),d.allow({$1:{elements:c(),attributes:!0,styles:!1,classes:!1}}),d=b.semanticContent=d),d):d?new CKEDITOR.filter(a,d):null}}}function k(a,c,b){c=CKEDITOR.htmlParser.fragment.fromHtml(c);var d=new CKEDITOR.htmlParser.basicWriter;b.applyTo(c,!0,!1,a.activeEnterMode);c.writeHtml(d);return d.getHtml()}
+function l(a,c){a.enterMode==CKEDITOR.ENTER_BR?c=c.replace(/(<\/p><p>)+/g,function(a){return CKEDITOR.tools.repeat("\x3cbr\x3e",a.length/7*2)}).replace(/<\/?p>/g,""):a.enterMode==CKEDITOR.ENTER_DIV&&(c=c.replace(/<(\/)?p>/g,"\x3c$1div\x3e"));return c}function m(a){a.data.preventDefault();a.data.$.dataTransfer.dropEffect="none"}function c(a){var c=CKEDITOR.plugins.clipboard;a.on("contentDom",function(){function d(c,e,f){e.select();b(a,{dataTransfer:f,method:"drop"},1);f.sourceEditor.fire("saveSnapshot");
+f.sourceEditor.editable().extractHtmlFromRange(c);f.sourceEditor.getSelection().selectRanges([c]);f.sourceEditor.fire("saveSnapshot")}function e(d,f){d.select();b(a,{dataTransfer:f,method:"drop"},1);c.resetDragDataTransfer()}function f(c,b,d){var e={$:c.data.$,target:c.data.getTarget()};b&&(e.dragRange=b);d&&(e.dropRange=d);!1===a.fire(c.name,e)&&c.data.preventDefault()}function h(a){a.type!=CKEDITOR.NODE_ELEMENT&&(a=a.getParent());return a.getChildCount()}var l=a.editable(),k=CKEDITOR.plugins.clipboard.getDropTarget(a),
+m=a.ui.space("top"),z=a.ui.space("bottom");c.preventDefaultDropOnElement(m);c.preventDefaultDropOnElement(z);l.attachListener(k,"dragstart",f);l.attachListener(a,"dragstart",c.resetDragDataTransfer,c,null,1);l.attachListener(a,"dragstart",function(b){c.initDragDataTransfer(b,a)},null,null,2);l.attachListener(a,"dragstart",function(){var b=c.dragRange=a.getSelection().getRanges()[0];CKEDITOR.env.ie&&10>CKEDITOR.env.version&&(c.dragStartContainerChildCount=b?h(b.startContainer):null,c.dragEndContainerChildCount=
+b?h(b.endContainer):null)},null,null,100);l.attachListener(k,"dragend",f);l.attachListener(a,"dragend",c.initDragDataTransfer,c,null,1);l.attachListener(a,"dragend",c.resetDragDataTransfer,c,null,100);l.attachListener(k,"dragover",function(a){if(CKEDITOR.env.edge)a.data.preventDefault();else{var c=a.data.getTarget();c&&c.is&&c.is("html")?a.data.preventDefault():CKEDITOR.env.ie&&CKEDITOR.plugins.clipboard.isFileApiSupported&&a.data.$.dataTransfer.types.contains("Files")&&a.data.preventDefault()}});
+l.attachListener(k,"drop",function(b){if(!b.data.$.defaultPrevented&&(b.data.preventDefault(),!a.readOnly)){var d=b.data.getTarget();if(!d.isReadOnly()||d.type==CKEDITOR.NODE_ELEMENT&&d.is("html")){var d=c.getRangeAtDropPosition(b,a),e=c.dragRange;d&&f(b,e,d)}}},null,null,9999);l.attachListener(a,"drop",c.initDragDataTransfer,c,null,1);l.attachListener(a,"drop",function(b){if(b=b.data){var f=b.dropRange,h=b.dragRange,l=b.dataTransfer;l.getTransferType(a)==CKEDITOR.DATA_TRANSFER_INTERNAL?setTimeout(function(){c.internalDrop(h,
+f,l,a)},0):l.getTransferType(a)==CKEDITOR.DATA_TRANSFER_CROSS_EDITORS?d(h,f,l):e(f,l)}},null,null,9999)})}var d;CKEDITOR.plugins.add("clipboard",{requires:"dialog,notification,toolbar",init:function(b){function d(a){a=CKEDITOR.tools.array.map(a,function(a){return a.split("/")[1].toUpperCase()}).join(", ");return b.lang.clipboard.fileFormatNotSupportedNotification.replace(/\${formats\}/g,a)}function l(a,c){return CKEDITOR.env.ie&&a.data.fileTransferCancel||!(CKEDITOR.env.ie||c&&x!==c.id)?!1:c.isFileTransfer()&&
+1===c.getFilesCount()}var m,p=a(b);b.config.forcePasteAsPlainText?m="plain-text":b.config.pasteFilter?m=b.config.pasteFilter:!CKEDITOR.env.webkit||"pasteFilter"in b.config||(m="semantic-content");b.pasteFilter=p.get(m);h(b);c(b);CKEDITOR.dialog.add("paste",CKEDITOR.getUrl(this.path+"dialogs/paste.js"));if((CKEDITOR.plugins.clipboard.isCustomDataTypesSupported||CKEDITOR.plugins.clipboard.isFileApiSupported)&&b.config.clipboard_handleImages){var q=["image/png","image/jpeg","image/gif"],r=d(q),x;b.on("paste",
+function(a){var c=a.data,d=c.dataTransfer;if(!c.dataValue&&l(a,d))if(d=d.getFile(0),-1===CKEDITOR.tools.indexOf(q,d.type))b.showNotification(r,"info",b.config.clipboard_notificationDuration);else{var e=new FileReader;e.addEventListener("load",function(){a.data.dataValue='\x3cimg src\x3d"'+e.result+'" /\x3e';b.fire("paste",a.data)},!1);e.addEventListener("abort",function(){CKEDITOR.env.ie&&(a.data.fileTransferCancel=!0);b.fire("paste",a.data)},!1);e.addEventListener("error",function(){CKEDITOR.env.ie&&
+(a.data.fileTransferCancel=!0);b.fire("paste",a.data)},!1);e.readAsDataURL(d);x=c.dataTransfer.id;a.stop()}},null,null,1)}b.on("paste",function(a){a.data.dataTransfer||(a.data.dataTransfer=new CKEDITOR.plugins.clipboard.dataTransfer);if(!a.data.dataValue){var c=a.data.dataTransfer,d=c.getData("text/html");if(d)a.data.dataValue=d,a.data.type="html";else if(d=c.getData("text/plain"))a.data.dataValue=b.editable().transformPlainTextToHtml(d),a.data.type="text"}},null,null,1);b.on("paste",function(a){var c=
+a.data.dataValue,b=CKEDITOR.dtd.$block;-1<c.indexOf("Apple-")&&(c=c.replace(/<span class="Apple-converted-space">&nbsp;<\/span>/gi," "),"html"!=a.data.type&&(c=c.replace(/<span class="Apple-tab-span"[^>]*>([^<]*)<\/span>/gi,function(a,c){return c.replace(/\t/g,"\x26nbsp;\x26nbsp; \x26nbsp;")})),-1<c.indexOf('\x3cbr class\x3d"Apple-interchange-newline"\x3e')&&(a.data.startsWithEOL=1,a.data.preSniffing="html",c=c.replace(/<br class="Apple-interchange-newline">/,"")),c=c.replace(/(<[^>]+) class="Apple-[^"]*"/gi,
+"$1"));if(c.match(/^<[^<]+cke_(editable|contents)/i)){var d,g,e=new CKEDITOR.dom.element("div");for(e.setHtml(c);1==e.getChildCount()&&(d=e.getFirst())&&d.type==CKEDITOR.NODE_ELEMENT&&(d.hasClass("cke_editable")||d.hasClass("cke_contents"));)e=g=d;g&&(c=g.getHtml().replace(/<br>$/i,""))}CKEDITOR.env.ie?c=c.replace(/^&nbsp;(?: |\r\n)?<(\w+)/g,function(c,d){return d.toLowerCase()in b?(a.data.preSniffing="html","\x3c"+d):c}):CKEDITOR.env.webkit?c=c.replace(/<\/(\w+)><div><br><\/div>$/,function(c,d){return d in
+b?(a.data.endsWithEOL=1,"\x3c/"+d+"\x3e"):c}):CKEDITOR.env.gecko&&(c=c.replace(/(\s)<br>$/,"$1"));a.data.dataValue=c},null,null,3);b.on("paste",function(a){a=a.data;var c=b._.nextPasteType||a.type,d=a.dataValue,h,l=b.config.clipboard_defaultContentType||"html",n=a.dataTransfer.getTransferType(b)==CKEDITOR.DATA_TRANSFER_EXTERNAL,m=!0===b.config.forcePasteAsPlainText;h="html"==c||"html"==a.preSniffing?"html":f(d);delete b._.nextPasteType;"htmlifiedtext"==h&&(d=e(b.config,d));if("text"==c&&"html"==h)d=
+k(b,d,p.get("plain-text"));else if(n&&b.pasteFilter&&!a.dontFilter||m)d=k(b,d,b.pasteFilter);a.startsWithEOL&&(d='\x3cbr data-cke-eol\x3d"1"\x3e'+d);a.endsWithEOL&&(d+='\x3cbr data-cke-eol\x3d"1"\x3e');"auto"==c&&(c="html"==h||"html"==l?"html":"text");a.type=c;a.dataValue=d;delete a.preSniffing;delete a.startsWithEOL;delete a.endsWithEOL},null,null,6);b.on("paste",function(a){a=a.data;a.dataValue&&(b.insertHtml(a.dataValue,a.type,a.range),setTimeout(function(){b.fire("afterPaste")},0))},null,null,
+1E3);b.on("pasteDialog",function(a){setTimeout(function(){b.openDialog("paste",a.data)},0)})}});CKEDITOR.plugins.clipboard={isCustomCopyCutSupported:CKEDITOR.env.ie&&16>CKEDITOR.env.version||CKEDITOR.env.iOS&&605>CKEDITOR.env.version?!1:!0,isCustomDataTypesSupported:!CKEDITOR.env.ie||16<=CKEDITOR.env.version,isFileApiSupported:!CKEDITOR.env.ie||9<CKEDITOR.env.version,mainPasteEvent:CKEDITOR.env.ie&&!CKEDITOR.env.edge?"beforepaste":"paste",addPasteButton:function(a,c,b){a.ui.addButton&&(a.ui.addButton(c,
+b),a._.pasteButtons||(a._.pasteButtons=[]),a._.pasteButtons.push(c))},canClipboardApiBeTrusted:function(a,c){return a.getTransferType(c)!=CKEDITOR.DATA_TRANSFER_EXTERNAL||CKEDITOR.env.chrome&&!a.isEmpty()||CKEDITOR.env.gecko&&(a.getData("text/html")||a.getFilesCount())||CKEDITOR.env.safari&&603<=CKEDITOR.env.version&&!CKEDITOR.env.iOS||CKEDITOR.env.iOS&&605<=CKEDITOR.env.version||CKEDITOR.env.edge&&16<=CKEDITOR.env.version?!0:!1},getDropTarget:function(a){var c=a.editable();return CKEDITOR.env.ie&&
+9>CKEDITOR.env.version||c.isInline()?c:a.document},fixSplitNodesAfterDrop:function(a,c,b,d){function e(a,b,d){var g=a;g.type==CKEDITOR.NODE_TEXT&&(g=a.getParent());if(g.equals(b)&&d!=b.getChildCount())return a=c.startContainer.getChild(c.startOffset-1),b=c.startContainer.getChild(c.startOffset),a&&a.type==CKEDITOR.NODE_TEXT&&b&&b.type==CKEDITOR.NODE_TEXT&&(d=a.getLength(),a.setText(a.getText()+b.getText()),b.remove(),c.setStart(a,d),c.collapse(!0)),!0}var f=c.startContainer;"number"==typeof d&&"number"==
+typeof b&&f.type==CKEDITOR.NODE_ELEMENT&&(e(a.startContainer,f,b)||e(a.endContainer,f,d))},isDropRangeAffectedByDragRange:function(a,c){var b=c.startContainer,d=c.endOffset;return a.endContainer.equals(b)&&a.endOffset<=d||a.startContainer.getParent().equals(b)&&a.startContainer.getIndex()<d||a.endContainer.getParent().equals(b)&&a.endContainer.getIndex()<d?!0:!1},internalDrop:function(a,c,d,e){var f=CKEDITOR.plugins.clipboard,h=e.editable(),l,k;e.fire("saveSnapshot");e.fire("lockSnapshot",{dontUpdate:1});
+CKEDITOR.env.ie&&10>CKEDITOR.env.version&&this.fixSplitNodesAfterDrop(a,c,f.dragStartContainerChildCount,f.dragEndContainerChildCount);(k=this.isDropRangeAffectedByDragRange(a,c))||(l=a.createBookmark(!1));f=c.clone().createBookmark(!1);k&&(l=a.createBookmark(!1));a=l.startNode;c=l.endNode;k=f.startNode;c&&a.getPosition(k)&CKEDITOR.POSITION_PRECEDING&&c.getPosition(k)&CKEDITOR.POSITION_FOLLOWING&&k.insertBefore(a);a=e.createRange();a.moveToBookmark(l);h.extractHtmlFromRange(a,1);c=e.createRange();
+f.startNode.getCommonAncestor(h)||(f=e.getSelection().createBookmarks()[0]);c.moveToBookmark(f);b(e,{dataTransfer:d,method:"drop",range:c},1);e.fire("unlockSnapshot")},getRangeAtDropPosition:function(a,c){var b=a.data.$,d=b.clientX,e=b.clientY,f=c.getSelection(!0).getRanges()[0],h=c.createRange();if(a.data.testRange)return a.data.testRange;if(document.caretRangeFromPoint&&c.document.$.caretRangeFromPoint(d,e))b=c.document.$.caretRangeFromPoint(d,e),h.setStart(CKEDITOR.dom.node(b.startContainer),b.startOffset),
+h.collapse(!0);else if(b.rangeParent)h.setStart(CKEDITOR.dom.node(b.rangeParent),b.rangeOffset),h.collapse(!0);else{if(CKEDITOR.env.ie&&8<CKEDITOR.env.version&&f&&c.editable().hasFocus)return f;if(document.body.createTextRange){c.focus();b=c.document.getBody().$.createTextRange();try{for(var l=!1,k=0;20>k&&!l;k++){if(!l)try{b.moveToPoint(d,e-k),l=!0}catch(m){}if(!l)try{b.moveToPoint(d,e+k),l=!0}catch(u){}}if(l){var w="cke-temp-"+(new Date).getTime();b.pasteHTML('\x3cspan id\x3d"'+w+'"\x3e​\x3c/span\x3e');
+var B=c.document.getById(w);h.moveToPosition(B,CKEDITOR.POSITION_BEFORE_START);B.remove()}else{var C=c.document.$.elementFromPoint(d,e),A=new CKEDITOR.dom.element(C),E;if(A.equals(c.editable())||"html"==A.getName())return f&&f.startContainer&&!f.startContainer.equals(c.editable())?f:null;E=A.getClientRect();d<E.left?h.setStartAt(A,CKEDITOR.POSITION_AFTER_START):h.setStartAt(A,CKEDITOR.POSITION_BEFORE_END);h.collapse(!0)}}catch(F){return null}}else return null}return h},initDragDataTransfer:function(a,
+c){var b=a.data.$?a.data.$.dataTransfer:null,d=new this.dataTransfer(b,c);"dragstart"===a.name&&d.storeId();b?this.dragData&&d.id==this.dragData.id?d=this.dragData:this.dragData=d:this.dragData?d=this.dragData:this.dragData=d;a.data.dataTransfer=d},resetDragDataTransfer:function(){this.dragData=null},initPasteDataTransfer:function(a,c){if(this.isCustomCopyCutSupported){if(a&&a.data&&a.data.$){var b=a.data.$.clipboardData,d=new this.dataTransfer(b,c);"copy"!==a.name&&"cut"!==a.name||d.storeId();this.copyCutData&&
+d.id==this.copyCutData.id?(d=this.copyCutData,d.$=b):this.copyCutData=d;return d}return new this.dataTransfer(null,c)}return new this.dataTransfer(CKEDITOR.env.edge&&a&&a.data.$&&a.data.$.clipboardData||null,c)},preventDefaultDropOnElement:function(a){a&&a.on("dragover",m)}};d=CKEDITOR.plugins.clipboard.isCustomDataTypesSupported?"cke/id":"Text";CKEDITOR.plugins.clipboard.dataTransfer=function(a,c){a&&(this.$=a);this._={metaRegExp:/^<meta.*?>/i,fragmentRegExp:/\s*\x3c!--StartFragment--\x3e|\x3c!--EndFragment--\x3e\s*/g,
+types:[],data:{},files:[],nativeHtmlCache:"",normalizeType:function(a){a=a.toLowerCase();return"text"==a||"text/plain"==a?"Text":"url"==a?"URL":"files"===a?"Files":a}};this._.fallbackDataTransfer=new CKEDITOR.plugins.clipboard.fallbackDataTransfer(this);this.id=this.getData(d);this.id||(this.id="Text"==d?"":"cke-"+CKEDITOR.tools.getUniqueId());c&&(this.sourceEditor=c,this.setData("text/html",c.getSelectedHtml(1)),"Text"==d||this.getData("text/plain")||this.setData("text/plain",c.getSelection().getSelectedText()))};
+CKEDITOR.DATA_TRANSFER_INTERNAL=1;CKEDITOR.DATA_TRANSFER_CROSS_EDITORS=2;CKEDITOR.DATA_TRANSFER_EXTERNAL=3;CKEDITOR.plugins.clipboard.dataTransfer.prototype={getData:function(a,c){a=this._.normalizeType(a);var b="text/html"==a&&c?this._.nativeHtmlCache:this._.data[a];if(void 0===b||null===b||""===b){if(this._.fallbackDataTransfer.isRequired())b=this._.fallbackDataTransfer.getData(a,c);else try{b=this.$.getData(a)||""}catch(d){b=""}"text/html"!=a||c||(b=this._stripHtml(b))}"Text"==a&&CKEDITOR.env.gecko&&
+this.getFilesCount()&&"file://"==b.substring(0,7)&&(b="");if("string"===typeof b)var e=b.indexOf("\x3c/html\x3e"),b=-1!==e?b.substring(0,e+7):b;return b},setData:function(a,c){a=this._.normalizeType(a);"text/html"==a?(this._.data[a]=this._stripHtml(c),this._.nativeHtmlCache=c):this._.data[a]=c;if(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported||"URL"==a||"Text"==a)if("Text"==d&&"Text"==a&&(this.id=c),this._.fallbackDataTransfer.isRequired())this._.fallbackDataTransfer.setData(a,c);else try{this.$.setData(a,
+c)}catch(b){}},storeId:function(){"Text"!==d&&this.setData(d,this.id)},getTransferType:function(a){return this.sourceEditor?this.sourceEditor==a?CKEDITOR.DATA_TRANSFER_INTERNAL:CKEDITOR.DATA_TRANSFER_CROSS_EDITORS:CKEDITOR.DATA_TRANSFER_EXTERNAL},cacheData:function(){function a(b){b=c._.normalizeType(b);var d=c.getData(b);"text/html"==b&&(c._.nativeHtmlCache=c.getData(b,!0),d=c._stripHtml(d));d&&(c._.data[b]=d);c._.types.push(b)}if(this.$){var c=this,b,d,e;if(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported){if(this.$.types)for(b=
+0;b<this.$.types.length;b++)a(this.$.types[b])}else a("Text"),a("URL");d=this._getImageFromClipboard();if((e=this.$&&this.$.files||null)||d){this._.files=[];if(e&&e.length)for(b=0;b<e.length;b++)this._.files.push(e[b]);0===this._.files.length&&d&&this._.files.push(d)}}},getFilesCount:function(){if(this._.files.length)return this._.files.length;var a=this.$&&this.$.files||null;return a&&a.length?a.length:this._getImageFromClipboard()?1:0},getFile:function(a){if(this._.files.length)return this._.files[a];
+var c=this.$&&this.$.files||null;return c&&c.length?c[a]:0===a?this._getImageFromClipboard():void 0},isFileTransfer:function(){var a=this.getTypes(),a=CKEDITOR.tools.array.filter(a,function(a){return"application/x-moz-file"!==a});return 1===a.length&&"files"===a[0].toLowerCase()},isEmpty:function(){var a={},c;if(this.getFilesCount())return!1;CKEDITOR.tools.array.forEach(CKEDITOR.tools.object.keys(this._.data),function(c){a[c]=1});if(this.$)if(CKEDITOR.plugins.clipboard.isCustomDataTypesSupported){if(this.$.types)for(var b=
+0;b<this.$.types.length;b++)a[this.$.types[b]]=1}else a.Text=1,a.URL=1;"Text"!=d&&(a[d]=0);for(c in a)if(a[c]&&""!==this.getData(c))return!1;return!0},getTypes:function(){return 0<this._.types.length?this._.types:this.$&&this.$.types?[].slice.call(this.$.types):[]},_getImageFromClipboard:function(){var a;try{if(this.$&&this.$.items&&this.$.items[0]&&(a=this.$.items[0].getAsFile())&&a.type)return a}catch(c){}},_stripHtml:function(a){function c(a){var b=new CKEDITOR.htmlParser,d,g;b.onTagOpen=function(a){"body"===
+a&&(d=b._.htmlPartsRegex.lastIndex)};b.onTagClose=function(a){"body"===a&&(g=b._.htmlPartsRegex.lastIndex)};b.parse(a);return"number"!==typeof d||"number"!==typeof g?a:a.substring(d,g).replace(/<\/body\s*>$/gi,"")}a&&a.length&&(a=c(a),a=a.replace(this._.metaRegExp,""),a=a.replace(this._.fragmentRegExp,""));return a}};CKEDITOR.plugins.clipboard.fallbackDataTransfer=function(a){this._dataTransfer=a;this._customDataFallbackType="text/html"};CKEDITOR.plugins.clipboard.fallbackDataTransfer._isCustomMimeTypeSupported=
+null;CKEDITOR.plugins.clipboard.fallbackDataTransfer._customTypes=[];CKEDITOR.plugins.clipboard.fallbackDataTransfer.prototype={isRequired:function(){var a=CKEDITOR.plugins.clipboard.fallbackDataTransfer,c=this._dataTransfer.$;if(null===a._isCustomMimeTypeSupported)if(c){a._isCustomMimeTypeSupported=!1;if(CKEDITOR.env.edge&&17<=CKEDITOR.env.version)return!0;try{c.setData("cke/mimetypetest","cke test value"),a._isCustomMimeTypeSupported="cke test value"===c.getData("cke/mimetypetest"),c.clearData("cke/mimetypetest")}catch(b){}}else return!1;
+return!a._isCustomMimeTypeSupported},getData:function(a,c){var b=this._getData(this._customDataFallbackType,!0);if(c)return b;var b=this._extractDataComment(b),d=null,d=a===this._customDataFallbackType?b.content:b.data&&b.data[a]?b.data[a]:this._getData(a,!0);return null!==d?d:""},setData:function(a,c){var b=a===this._customDataFallbackType;b&&(c=this._applyDataComment(c,this._getFallbackTypeData()));var d=c,e=this._dataTransfer.$;try{e.setData(a,d),b&&(this._dataTransfer._.nativeHtmlCache=d)}catch(f){if(this._isUnsupportedMimeTypeError(f)){b=
+CKEDITOR.plugins.clipboard.fallbackDataTransfer;-1===CKEDITOR.tools.indexOf(b._customTypes,a)&&b._customTypes.push(a);var b=this._getFallbackTypeContent(),h=this._getFallbackTypeData();h[a]=d;try{d=this._applyDataComment(b,h),e.setData(this._customDataFallbackType,d),this._dataTransfer._.nativeHtmlCache=d}catch(l){d=""}}}return d},_getData:function(a,c){var b=this._dataTransfer._.data;if(!c&&b[a])return b[a];try{return this._dataTransfer.$.getData(a)}catch(d){return null}},_getFallbackTypeContent:function(){var a=
+this._dataTransfer._.data[this._customDataFallbackType];a||(a=this._extractDataComment(this._getData(this._customDataFallbackType,!0)).content);return a},_getFallbackTypeData:function(){var a=CKEDITOR.plugins.clipboard.fallbackDataTransfer._customTypes,c=this._extractDataComment(this._getData(this._customDataFallbackType,!0)).data||{},b=this._dataTransfer._.data;CKEDITOR.tools.array.forEach(a,function(a){void 0!==b[a]?c[a]=b[a]:void 0!==c[a]&&(c[a]=c[a])},this);return c},_isUnsupportedMimeTypeError:function(a){return a.message&&
+-1!==a.message.search(/element not found/gi)},_extractDataComment:function(a){var c={data:null,content:a||""};if(a&&16<a.length){var b;(b=/\x3c!--cke-data:(.*?)--\x3e/g.exec(a))&&b[1]&&(c.data=JSON.parse(decodeURIComponent(b[1])),c.content=a.replace(b[0],""))}return c},_applyDataComment:function(a,c){var b="";c&&CKEDITOR.tools.object.keys(c).length&&(b="\x3c!--cke-data:"+encodeURIComponent(JSON.stringify(c))+"--\x3e");return b+(a&&a.length?a:"")}}}(),CKEDITOR.config.clipboard_notificationDuration=
+1E4,CKEDITOR.config.clipboard_handleImages=!0,function(){CKEDITOR.plugins.add("panel",{beforeInit:function(b){b.ui.addHandler(CKEDITOR.UI_PANEL,CKEDITOR.ui.panel.handler)}});CKEDITOR.UI_PANEL="panel";CKEDITOR.ui.panel=function(b,a){a&&CKEDITOR.tools.extend(this,a);CKEDITOR.tools.extend(this,{className:"",css:[]});this.id=CKEDITOR.tools.getNextId();this.document=b;this.isFramed=this.forceIFrame||this.css.length;this._={blocks:{}}};CKEDITOR.ui.panel.handler={create:function(b){return new CKEDITOR.ui.panel(b)}};
+var b=CKEDITOR.addTemplate("panel",'\x3cdiv lang\x3d"{langCode}" id\x3d"{id}" dir\x3d{dir} class\x3d"cke cke_reset_all {editorId} cke_panel cke_panel {cls} cke_{dir}" style\x3d"z-index:{z-index}" role\x3d"presentation"\x3e{frame}\x3c/div\x3e'),h=CKEDITOR.addTemplate("panel-frame",'\x3ciframe id\x3d"{id}" class\x3d"cke_panel_frame" role\x3d"presentation" frameborder\x3d"0" src\x3d"{src}"\x3e\x3c/iframe\x3e'),f=CKEDITOR.addTemplate("panel-frame-inner",'\x3c!DOCTYPE html\x3e\x3chtml class\x3d"cke_panel_container {env}" dir\x3d"{dir}" lang\x3d"{langCode}"\x3e\x3chead\x3e{css}\x3c/head\x3e\x3cbody class\x3d"cke_{dir}" style\x3d"margin:0;padding:0" onload\x3d"{onload}"\x3e\x3c/body\x3e\x3c/html\x3e');
+CKEDITOR.ui.panel.prototype={render:function(e,a){var k={editorId:e.id,id:this.id,langCode:e.langCode,dir:e.lang.dir,cls:this.className,frame:"",env:CKEDITOR.env.cssClass,"z-index":e.config.baseFloatZIndex+1};this.getHolderElement=function(){var a=this._.holder;if(!a){if(this.isFramed){var a=this.document.getById(this.id+"_frame"),c=a.getParent(),a=a.getFrameDocument();CKEDITOR.env.iOS&&c.setStyles({overflow:"scroll","-webkit-overflow-scrolling":"touch"});c=CKEDITOR.tools.addFunction(CKEDITOR.tools.bind(function(){this.isLoaded=
+!0;if(this.onLoad)this.onLoad()},this));a.write(f.output(CKEDITOR.tools.extend({css:CKEDITOR.tools.buildStyleHtml(this.css),onload:"window.parent.CKEDITOR.tools.callFunction("+c+");"},k)));a.getWindow().$.CKEDITOR=CKEDITOR;a.on("keydown",function(a){var c=a.data.getKeystroke(),b=this.document.getById(this.id).getAttribute("dir");if("input"!==a.data.getTarget().getName()||37!==c&&39!==c)this._.onKeyDown&&!1===this._.onKeyDown(c)?"input"===a.data.getTarget().getName()&&32===c||a.data.preventDefault():
+(27==c||c==("rtl"==b?39:37))&&this.onEscape&&!1===this.onEscape(c)&&a.data.preventDefault()},this);a=a.getBody();a.unselectable();CKEDITOR.env.air&&CKEDITOR.tools.callFunction(c)}else a=this.document.getById(this.id);this._.holder=a}return a};if(this.isFramed){var l=CKEDITOR.env.air?"javascript:void(0)":CKEDITOR.env.ie&&!CKEDITOR.env.edge?"javascript:void(function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+"}())":"";k.frame=h.output({id:this.id+"_frame",
+src:l})}l=b.output(k);a&&a.push(l);return l},addBlock:function(b,a){a=this._.blocks[b]=a instanceof CKEDITOR.ui.panel.block?a:new CKEDITOR.ui.panel.block(this.getHolderElement(),a);this._.currentBlock||this.showBlock(b);return a},getBlock:function(b){return this._.blocks[b]},showBlock:function(b){b=this._.blocks[b];var a=this._.currentBlock,f=!this.forceIFrame||CKEDITOR.env.ie?this._.holder:this.document.getById(this.id+"_frame");a&&a.hide();this._.currentBlock=b;CKEDITOR.fire("ariaWidget",f);b._.focusIndex=
+-1;this._.onKeyDown=b.onKeyDown&&CKEDITOR.tools.bind(b.onKeyDown,b);b.show();return b},destroy:function(){this.element&&this.element.remove()}};CKEDITOR.ui.panel.block=CKEDITOR.tools.createClass({$:function(b,a){this.element=b.append(b.getDocument().createElement("div",{attributes:{tabindex:-1,"class":"cke_panel_block"},styles:{display:"none"}}));a&&CKEDITOR.tools.extend(this,a);this.element.setAttributes({role:this.attributes.role||"presentation","aria-label":this.attributes["aria-label"],title:this.attributes.title||
+this.attributes["aria-label"]});this.keys={};this._.focusIndex=-1;this.element.disableContextMenu()},_:{markItem:function(b){-1!=b&&(b=this._.getItems().getItem(this._.focusIndex=b),CKEDITOR.env.webkit&&b.getDocument().getWindow().focus(),b.focus(),this.onMark&&this.onMark(b))},markFirstDisplayed:function(b){for(var a=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&"none"==a.getStyle("display")},f=this._.getItems(),h,m,c=f.count()-1;0<=c;c--)if(h=f.getItem(c),h.getAscendant(a)||(m=h,this._.focusIndex=
+c),"true"==h.getAttribute("aria-selected")){m=h;this._.focusIndex=c;break}m&&(b&&b(),CKEDITOR.env.webkit&&m.getDocument().getWindow().focus(),m.focus(),this.onMark&&this.onMark(m))},getItems:function(){return this.element.find("a,input")}},proto:{show:function(){this.element.setStyle("display","")},hide:function(){this.onHide&&!0===this.onHide.call(this)||this.element.setStyle("display","none")},onKeyDown:function(b,a){var f=this.keys[b];switch(f){case "next":for(var h=this._.focusIndex,f=this._.getItems(),
+m;m=f.getItem(++h);)if(m.getAttribute("_cke_focus")&&m.$.offsetWidth){this._.focusIndex=h;m.focus(!0);break}return m||a?!1:(this._.focusIndex=-1,this.onKeyDown(b,1));case "prev":h=this._.focusIndex;for(f=this._.getItems();0<h&&(m=f.getItem(--h));){if(m.getAttribute("_cke_focus")&&m.$.offsetWidth){this._.focusIndex=h;m.focus(!0);break}m=null}return m||a?!1:(this._.focusIndex=f.count(),this.onKeyDown(b,1));case "click":case "mouseup":return h=this._.focusIndex,(m=0<=h&&this._.getItems().getItem(h))&&
+m.fireEventHandler(f,{button:CKEDITOR.tools.normalizeMouseButton(CKEDITOR.MOUSE_BUTTON_LEFT,!0)}),!1}return!0}}})}(),CKEDITOR.plugins.add("floatpanel",{requires:"panel"}),function(){function b(b,e,a,k,l){l=CKEDITOR.tools.genKey(e.getUniqueId(),a.getUniqueId(),b.lang.dir,b.uiColor||"",k.css||"",l||"");var m=h[l];m||(m=h[l]=new CKEDITOR.ui.panel(e,k),m.element=a.append(CKEDITOR.dom.element.createFromHtml(m.render(b),e)),m.element.setStyles({display:"none",position:"absolute"}));return m}var h={};CKEDITOR.ui.floatPanel=
+CKEDITOR.tools.createClass({$:function(f,e,a,h){function l(){g.hide()}a.forceIFrame=1;a.toolbarRelated&&f.elementMode==CKEDITOR.ELEMENT_MODE_INLINE&&(e=CKEDITOR.document.getById("cke_"+f.name));var m=e.getDocument();h=b(f,m,e,a,h||0);var c=h.element,d=c.getFirst(),g=this;c.disableContextMenu();this.element=c;this._={editor:f,panel:h,parentElement:e,definition:a,document:m,iframe:d,children:[],dir:f.lang.dir,showBlockParams:null,markFirst:void 0!==a.markFirst?a.markFirst:!0};f.on("mode",l);f.on("resize",
+l);m.getWindow().on("resize",function(){this.reposition()},this)},proto:{addBlock:function(b,e){return this._.panel.addBlock(b,e)},addListBlock:function(b,e){return this._.panel.addListBlock(b,e)},getBlock:function(b){return this._.panel.getBlock(b)},showBlock:function(b,e,a,h,l,m){var c=this._.panel,d=c.showBlock(b);this._.showBlockParams=[].slice.call(arguments);this.allowBlur(!1);var g=this._.editor.editable();this._.returnFocus=g.hasFocus?g:new CKEDITOR.dom.element(CKEDITOR.document.$.activeElement);
+this._.hideTimeout=0;var n=this.element,g=this._.iframe,g=CKEDITOR.env.ie&&!CKEDITOR.env.edge?g:new CKEDITOR.dom.window(g.$.contentWindow),y=n.getDocument(),v=this._.parentElement.getPositionedAncestor(),p=e.getDocumentPosition(y),y=v?v.getDocumentPosition(y):{x:0,y:0},q="rtl"==this._.dir,r=p.x+(h||0)-y.x,x=p.y+(l||0)-y.y;!q||1!=a&&4!=a?q||2!=a&&3!=a||(r+=e.$.offsetWidth-1):r+=e.$.offsetWidth;if(3==a||4==a)x+=e.$.offsetHeight-1;this._.panel._.offsetParentId=e.getId();n.setStyles({top:x+"px",left:0,
+display:""});n.setOpacity(0);n.getFirst().removeStyle("width");this._.editor.focusManager.add(g);this._.blurSet||(CKEDITOR.event.useCapture=!0,g.on("blur",function(a){function c(){delete this._.returnFocus;this.hide()}this.allowBlur()&&a.data.getPhase()==CKEDITOR.EVENT_PHASE_AT_TARGET&&this.visible&&!this._.activeChild&&(CKEDITOR.env.iOS?this._.hideTimeout||(this._.hideTimeout=CKEDITOR.tools.setTimeout(c,0,this)):c.call(this))},this),g.on("focus",function(){this._.focused=!0;this.hideChild();this.allowBlur(!0)},
 this),CKEDITOR.env.iOS&&(g.on("touchstart",function(){clearTimeout(this._.hideTimeout)},this),g.on("touchend",function(){this._.hideTimeout=0;this.focus()},this)),CKEDITOR.event.useCapture=!1,this._.blurSet=1);c.onEscape=CKEDITOR.tools.bind(function(a){if(this.onEscape&&!1===this.onEscape(a))return!1},this);CKEDITOR.tools.setTimeout(function(){var a=CKEDITOR.tools.bind(function(){var a=n;a.removeStyle("width");if(d.autoSize){var b=d.element.getDocument(),b=(CKEDITOR.env.webkit||CKEDITOR.env.edge?
-d.element:b.getBody()).$.scrollWidth;CKEDITOR.env.ie&&CKEDITOR.env.quirks&&0<b&&(b+=(a.$.offsetWidth||0)-(a.$.clientWidth||0)+3);a.setStyle("width",b+10+"px");b=d.element.$.scrollHeight;CKEDITOR.env.ie&&CKEDITOR.env.quirks&&0<b&&(b+=(a.$.offsetHeight||0)-(a.$.clientHeight||0)+3);a.setStyle("height",b+"px");c._.currentBlock.element.setStyle("display","none").removeStyle("display")}else a.removeStyle("height");t&&(r-=n.$.offsetWidth);n.setStyle("left",r+"px");var b=c.element.getWindow(),a=n.$.getBoundingClientRect(),
-b=b.getViewPaneSize(),g=a.width||a.right-a.left,e=a.height||a.bottom-a.top,f=t?a.right:b.width-a.left,h=t?b.width-a.right:a.left;t?f<g&&(r=h>g?r+g:b.width>g?r-a.left:r-a.right+b.width):f<g&&(r=h>g?r-g:b.width>g?r-a.right+b.width:r-a.left);g=a.top;b.height-a.top<e&&(x=g>e?x-e:b.height>e?x-a.bottom+b.height:x-a.top);CKEDITOR.env.ie&&!CKEDITOR.env.edge&&((b=a=n.$.offsetParent&&new CKEDITOR.dom.element(n.$.offsetParent))&&"html"==b.getName()&&(b=b.getDocument().getBody()),b&&"rtl"==b.getComputedStyle("direction")&&
-(r=CKEDITOR.env.ie8Compat?r-2*n.getDocument().getDocumentElement().$.scrollLeft:r-(a.$.scrollWidth-a.$.clientWidth)));var a=n.getFirst(),k;(k=a.getCustomData("activePanel"))&&k.onHide&&k.onHide.call(this,1);a.setCustomData("activePanel",this);n.setStyles({top:x+"px",left:r+"px"});n.setOpacity(1);l&&l()},this);c.isLoaded?a():c.onLoad=a;CKEDITOR.tools.setTimeout(function(){var a=CKEDITOR.env.webkit&&CKEDITOR.document.getWindow().getScrollPosition().y;this.focus();d.element.focus();CKEDITOR.env.webkit&&
+d.element:b.getBody()).$.scrollWidth;CKEDITOR.env.ie&&CKEDITOR.env.quirks&&0<b&&(b+=(a.$.offsetWidth||0)-(a.$.clientWidth||0)+3);a.setStyle("width",b+10+"px");b=d.element.$.scrollHeight;CKEDITOR.env.ie&&CKEDITOR.env.quirks&&0<b&&(b+=(a.$.offsetHeight||0)-(a.$.clientHeight||0)+3);a.setStyle("height",b+"px");c._.currentBlock.element.setStyle("display","none").removeStyle("display")}else a.removeStyle("height");q&&(r-=n.$.offsetWidth);n.setStyle("left",r+"px");var b=c.element.getWindow(),a=n.$.getBoundingClientRect(),
+b=b.getViewPaneSize(),g=a.width||a.right-a.left,e=a.height||a.bottom-a.top,f=q?a.right:b.width-a.left,h=q?b.width-a.right:a.left;q?f<g&&(r=h>g?r+g:b.width>g?r-a.left:r-a.right+b.width):f<g&&(r=h>g?r-g:b.width>g?r-a.right+b.width:r-a.left);g=a.top;b.height-a.top<e&&(x=g>e?x-e:b.height>e?x-a.bottom+b.height:x-a.top);CKEDITOR.env.ie&&!CKEDITOR.env.edge&&((b=a=n.$.offsetParent&&new CKEDITOR.dom.element(n.$.offsetParent))&&"html"==b.getName()&&(b=b.getDocument().getBody()),b&&"rtl"==b.getComputedStyle("direction")&&
+(r=CKEDITOR.env.ie8Compat?r-2*n.getDocument().getDocumentElement().$.scrollLeft:r-(a.$.scrollWidth-a.$.clientWidth)));var a=n.getFirst(),l;(l=a.getCustomData("activePanel"))&&l.onHide&&l.onHide.call(this,1);a.setCustomData("activePanel",this);n.setStyles({top:x+"px",left:r+"px"});n.setOpacity(1);m&&m()},this);c.isLoaded?a():c.onLoad=a;CKEDITOR.tools.setTimeout(function(){var a=CKEDITOR.env.webkit&&CKEDITOR.document.getWindow().getScrollPosition().y;this.focus();d.element.focus();CKEDITOR.env.webkit&&
 (CKEDITOR.document.getBody().$.scrollTop=a);this.allowBlur(!0);this._.markFirst&&(CKEDITOR.env.ie?CKEDITOR.tools.setTimeout(function(){d.markFirstDisplayed?d.markFirstDisplayed():d._.markFirstDisplayed()},0):d.markFirstDisplayed?d.markFirstDisplayed():d._.markFirstDisplayed());this._.editor.fire("panelShow",this)},0,this)},CKEDITOR.env.air?200:0,this);this.visible=1;this.onShow&&this.onShow.call(this)},reposition:function(){var b=this._.showBlockParams;this.visible&&this._.showBlockParams&&(this.hide(),
 this.showBlock.apply(this,b))},focus:function(){if(CKEDITOR.env.webkit){var b=CKEDITOR.document.getActive();b&&!b.equals(this._.iframe)&&b.$.blur()}(this._.lastFocused||this._.iframe.getFrameDocument().getWindow()).focus()},blur:function(){var b=this._.iframe.getFrameDocument().getActive();b&&b.is("a")&&(this._.lastFocused=b)},hide:function(b){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(b=b&&this._.returnFocus)CKEDITOR.env.webkit&&b.type&&b.getWindow().$.focus(),b.focus();delete this._.lastFocused;this._.showBlockParams=null;this._.editor.fire("panelHide",this)}},allowBlur:function(b){var e=this._.panel;void 0!==b&&(e.allowBlur=b);return e.allowBlur},showAsChild:function(b,e,a,h,k,l){if(this._.activeChild!=b||b._.panel._.offsetParentId!=a.getId())this.hideChild(),b.onHide=
-CKEDITOR.tools.bind(function(){CKEDITOR.tools.setTimeout(function(){this._.focused||this.hide()},0,this)},this),this._.activeChild=b,this._.focused=!1,b.showBlock(e,a,h,k,l),this.blur(),(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)&&setTimeout(function(){b.element.getChild(0).$.style.cssText+=""},100)},hideChild:function(b){var e=this._.activeChild;e&&(delete e.onHide,delete this._.activeChild,e.hide(),b&&this.focus())}}});CKEDITOR.on("instanceDestroyed",function(){var b=CKEDITOR.tools.isEmpty(CKEDITOR.instances),
+this.element.setStyle("display","none");this.visible=0;this.element.getFirst().removeCustomData("activePanel");if(b=b&&this._.returnFocus)CKEDITOR.env.webkit&&b.type&&b.getWindow().$.focus(),b.focus();delete this._.lastFocused;this._.showBlockParams=null;this._.editor.fire("panelHide",this)}},allowBlur:function(b){var e=this._.panel;void 0!==b&&(e.allowBlur=b);return e.allowBlur},showAsChild:function(b,e,a,h,l,m){if(this._.activeChild!=b||b._.panel._.offsetParentId!=a.getId())this.hideChild(),b.onHide=
+CKEDITOR.tools.bind(function(){CKEDITOR.tools.setTimeout(function(){this._.focused||this.hide()},0,this)},this),this._.activeChild=b,this._.focused=!1,b.showBlock(e,a,h,l,m),this.blur(),(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)&&setTimeout(function(){b.element.getChild(0).$.style.cssText+=""},100)},hideChild:function(b){var e=this._.activeChild;e&&(delete e.onHide,delete this._.activeChild,e.hide(),b&&this.focus())}}});CKEDITOR.on("instanceDestroyed",function(){var b=CKEDITOR.tools.isEmpty(CKEDITOR.instances),
 e;for(e in h){var a=h[e];b?a.destroy():a.element.hide()}b&&(h={})})}(),CKEDITOR.plugins.add("menu",{requires:"floatpanel",beforeInit:function(b){for(var h=b.config.menu_groups.split(","),f=b._.menuGroups={},e=b._.menuItems={},a=0;a<h.length;a++)f[h[a]]=a+1;b.addMenuGroup=function(a,b){f[a]=b||100};b.addMenuItem=function(a,b){f[b.group]&&(e[a]=new CKEDITOR.menuItem(this,a,b))};b.addMenuItems=function(a){for(var b in a)this.addMenuItem(b,a[b])};b.getMenuItem=function(a){return e[a]};b.removeMenuItem=
-function(a){delete e[a]}}}),function(){function b(a){a.sort(function(a,b){return a.group<b.group?-1:a.group>b.group?1:a.order<b.order?-1:a.order>b.order?1:0})}var h='\x3cspan class\x3d"cke_menuitem"\x3e\x3ca id\x3d"{id}" class\x3d"cke_menubutton cke_menubutton__{name} cke_menubutton_{state} {cls}" href\x3d"{href}" title\x3d"{title}" tabindex\x3d"-1" _cke_focus\x3d1 hidefocus\x3d"true" role\x3d"{role}" aria-label\x3d"{attrLabel}" aria-describedby\x3d"{id}_description" aria-haspopup\x3d"{hasPopup}" aria-disabled\x3d"{disabled}" {ariaChecked} draggable\x3d"false"',
+function(a){delete e[a]}}}),function(){function b(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 h='\x3cspan class\x3d"cke_menuitem"\x3e\x3ca id\x3d"{id}" class\x3d"cke_menubutton cke_menubutton__{name} cke_menubutton_{state} {cls}" href\x3d"{href}" title\x3d"{title}" tabindex\x3d"-1" _cke_focus\x3d1 hidefocus\x3d"true" role\x3d"{role}" aria-label\x3d"{attrLabel}" aria-describedby\x3d"{id}_description" aria-haspopup\x3d"{hasPopup}" aria-disabled\x3d"{disabled}" {ariaChecked} draggable\x3d"false"',
 f="";CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(h+=' onkeypress\x3d"return false;"');CKEDITOR.env.gecko&&(h+=' onblur\x3d"this.style.cssText \x3d this.style.cssText;" ondragstart\x3d"return false;"');CKEDITOR.env.ie&&(f='return false;" onmouseup\x3d"CKEDITOR.tools.getMouseButton(event)\x3d\x3d\x3dCKEDITOR.MOUSE_BUTTON_LEFT\x26\x26');var h=h+(' onmouseover\x3d"CKEDITOR.tools.callFunction({hoverFn},{index});" onmouseout\x3d"CKEDITOR.tools.callFunction({moveOutFn},{index});" onclick\x3d"'+f+'CKEDITOR.tools.callFunction({clickFn},{index}); return false;"\x3e')+
 '\x3cspan class\x3d"cke_menubutton_inner"\x3e\x3cspan class\x3d"cke_menubutton_icon"\x3e\x3cspan class\x3d"cke_button_icon cke_button__{iconName}_icon" style\x3d"{iconStyle}"\x3e\x3c/span\x3e\x3c/span\x3e\x3cspan class\x3d"cke_menubutton_label"\x3e{label}\x3c/span\x3e{shortcutHtml}{arrowHtml}\x3c/span\x3e\x3c/a\x3e\x3cspan id\x3d"{id}_description" class\x3d"cke_voice_label" aria-hidden\x3d"false"\x3e{ariaShortcut}\x3c/span\x3e\x3c/span\x3e',e=CKEDITOR.addTemplate("menuItem",h),a=CKEDITOR.addTemplate("menuArrow",
-'\x3cspan class\x3d"cke_menuarrow"\x3e\x3cspan\x3e{label}\x3c/span\x3e\x3c/span\x3e'),m=CKEDITOR.addTemplate("menuShortcut",'\x3cspan class\x3d"cke_menubutton_label cke_menubutton_shortcut"\x3e{shortcut}\x3c/span\x3e');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-
+'\x3cspan class\x3d"cke_menuarrow"\x3e\x3cspan\x3e{label}\x3c/span\x3e\x3c/span\x3e'),k=CKEDITOR.addTemplate("menuShortcut",'\x3cspan class\x3d"cke_menubutton_label cke_menubutton_shortcut"\x3e{shortcut}\x3c/span\x3e');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:{}}),d=c.block.attributes=c.attributes||{};!d.role&&(d.role="menu");this._.panelDefinition=c},_:{onShow:function(){var a=this.editor.getSelection(),b=a&&a.getStartElement(),c=this.editor.elementPath(),d=this._.listeners;this.removeAll();for(var g=0;g<d.length;g++){var e=d[g](b,a,c);if(e)for(var f in e){var h=this.editor.getMenuItem(f);!h||h.command&&!this.editor.getCommand(h.command).state||(h.state=e[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 d in c){var g=this.editor.getMenuItem(d);
-g&&(g.state=c[d],b.add(g))}var e=this._.panel.getBlock(this.id).element.getDocument().getById(this.id+String(a));setTimeout(function(){b.show(e,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,e,c,d){if(!this.parent&&(this._.onShow(),!this.items.length))return;e=e||("rtl"==this.editor.lang.dir?2:1);var g=this.items,f=this.editor,h=this._.panel,m=this._.element;if(!h){h=this._.panel=
-new CKEDITOR.ui.floatPanel(this.editor,CKEDITOR.document.getBody(),this._.panelDefinition,this._.level);h.onEscape=CKEDITOR.tools.bind(function(a){if(!1===this._.onEscape(a))return!1},this);h.onShow=function(){h._.panel.getHolderElement().getParent().addClass("cke").addClass("cke_reset_all")};h.onHide=CKEDITOR.tools.bind(function(){this._.onHide&&this._.onHide()},this);m=h.addBlock(this.id,this._.panelDefinition.block);m.autoSize=!0;var p=m.keys;p[40]="next";p[9]="next";p[38]="prev";p[CKEDITOR.SHIFT+
-9]="prev";p["rtl"==f.lang.dir?37:39]=CKEDITOR.env.ie?"mouseup":"click";p[32]=CKEDITOR.env.ie?"mouseup":"click";CKEDITOR.env.ie&&(p[13]="mouseup");m=this._.element=m.element;p=m.getDocument();p.getBody().setStyle("overflow","hidden");p.getElementsByTag("html").getItem(0).setStyle("overflow","hidden");this._.itemOverFn=CKEDITOR.tools.addFunction(function(a){clearTimeout(this._.showSubTimeout);this._.showSubTimeout=CKEDITOR.tools.setTimeout(this._.showSubMenu,f.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)}b(g);for(var p=f.elementPath(),p=['\x3cdiv class\x3d"cke_menu'+(p&&p.direction()!=f.lang.dir?" cke_mixed_dir_content":"")+'" role\x3d"presentation"\x3e'],t=g.length,r=t&&g[0].group,x=0;x<t;x++){var u=
-g[x];r!=u.group&&(p.push('\x3cdiv class\x3d"cke_menuseparator" role\x3d"separator"\x3e\x3c/div\x3e'),r=u.group);u.render(this,x,p)}p.push("\x3c/div\x3e");m.setHtml(p.join(""));CKEDITOR.ui.fire("ready",this);this.parent?this.parent._.panel.showAsChild(h,this.id,a,e,c,d):h.showBlock(this.id,a,e,c,d);f.fire("menuShow",[h])},addListener:function(a){this._.listeners.push(a)},hide:function(a){this._.onHide&&this._.onHide();this._.panel&&this._.panel.hide(a)},findItemByCommandName:function(a){var b=CKEDITOR.tools.array.filter(this.items,
-function(b){return a===b.command});return b.length?(b=b[0],{item:b,element:this._.element.findOne("."+b.className)}):null}}});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(b,f,c){var d=b.id+String(f),g="undefined"==typeof this.state?CKEDITOR.TRISTATE_OFF:this.state,h="",y=this.editor,w,p,t=g==CKEDITOR.TRISTATE_ON?"on":g==CKEDITOR.TRISTATE_DISABLED?
-"disabled":"off";this.role in{menuitemcheckbox:1,menuitemradio:1}&&(h=' aria-checked\x3d"'+(g==CKEDITOR.TRISTATE_ON?"true":"false")+'"');var r=this.getItems,x="\x26#"+("rtl"==this.editor.lang.dir?"9668":"9658")+";",u=this.name;this.icon&&!/\./.test(this.icon)&&(u=this.icon);this.command&&(w=y.getCommand(this.command),(w=y.getCommandKeystroke(w))&&(p=CKEDITOR.tools.keystrokeToString(y.lang.common.keyboard,w)));w=CKEDITOR.tools.htmlEncodeAttr(this.label);b={id:d,name:this.name,iconName:u,label:this.label,
-attrLabel:w,cls:this.className||"",state:t,hasPopup:r?"true":"false",disabled:g==CKEDITOR.TRISTATE_DISABLED,title:w+(p?" ("+p.display+")":""),ariaShortcut:p?y.lang.common.keyboardShortcut+" "+p.aria:"",href:"javascript:void('"+(w||"").replace("'")+"')",hoverFn:b._.itemOverFn,moveOutFn:b._.itemOutFn,clickFn:b._.itemClickFn,index:f,iconStyle:CKEDITOR.skin.getIconStyle(u,"rtl"==this.editor.lang.dir,u==this.icon?null:this.icon,this.iconOffset),shortcutHtml:p?m.output({shortcut:p.display}):"",arrowHtml:r?
-a.output({label:x}):"",role:this.role?this.role:"menuitem",ariaChecked:h};e.output(b,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:{css:b.config.contextmenu_contentsCss,
+g&&(g.state=c[d],b.add(g))}var e=this._.panel.getBlock(this.id).element.getDocument().getById(this.id+String(a));setTimeout(function(){b.show(e,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,e,c,d){if(!this.parent&&(this._.onShow(),!this.items.length))return;e=e||("rtl"==this.editor.lang.dir?2:1);var g=this.items,f=this.editor,h=this._.panel,k=this._.element;if(!h){h=this._.panel=
+new CKEDITOR.ui.floatPanel(this.editor,CKEDITOR.document.getBody(),this._.panelDefinition,this._.level);h.onEscape=CKEDITOR.tools.bind(function(a){if(!1===this._.onEscape(a))return!1},this);h.onShow=function(){h._.panel.getHolderElement().getParent().addClass("cke").addClass("cke_reset_all")};h.onHide=CKEDITOR.tools.bind(function(){this._.onHide&&this._.onHide()},this);k=h.addBlock(this.id,this._.panelDefinition.block);k.autoSize=!0;var p=k.keys;p[40]="next";p[9]="next";p[38]="prev";p[CKEDITOR.SHIFT+
+9]="prev";p["rtl"==f.lang.dir?37:39]=CKEDITOR.env.ie?"mouseup":"click";p[32]=CKEDITOR.env.ie?"mouseup":"click";CKEDITOR.env.ie&&(p[13]="mouseup");k=this._.element=k.element;p=k.getDocument();p.getBody().setStyle("overflow","hidden");p.getElementsByTag("html").getItem(0).setStyle("overflow","hidden");this._.itemOverFn=CKEDITOR.tools.addFunction(function(a){clearTimeout(this._.showSubTimeout);this._.showSubTimeout=CKEDITOR.tools.setTimeout(this._.showSubMenu,f.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 c=this.items[a];if(c.state==CKEDITOR.TRISTATE_DISABLED)this.hide(1);else if(c.getItems)this._.showSubMenu(a);else this._.onClick(c)},this)}b(g);for(var p=f.elementPath(),p=['\x3cdiv class\x3d"cke_menu'+(p&&p.direction()!=f.lang.dir?" cke_mixed_dir_content":"")+'" role\x3d"presentation"\x3e'],q=g.length,r=q&&g[0].group,x=0;x<q;x++){var t=
+g[x];r!=t.group&&(p.push('\x3cdiv class\x3d"cke_menuseparator" role\x3d"separator"\x3e\x3c/div\x3e'),r=t.group);t.render(this,x,p)}p.push("\x3c/div\x3e");k.setHtml(p.join(""));CKEDITOR.ui.fire("ready",this);this.parent?this.parent._.panel.showAsChild(h,this.id,a,e,c,d):h.showBlock(this.id,a,e,c,d);f.fire("menuShow",[h])},addListener:function(a){this._.listeners.push(a)},hide:function(a){this._.onHide&&this._.onHide();this._.panel&&this._.panel.hide(a)},findItemByCommandName:function(a){var b=CKEDITOR.tools.array.filter(this.items,
+function(c){return a===c.command});return b.length?(b=b[0],{item:b,element:this._.element.findOne("."+b.className)}):null}}});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(b,f,c){var d=b.id+String(f),g="undefined"==typeof this.state?CKEDITOR.TRISTATE_OFF:this.state,h="",y=this.editor,v,p,q=g==CKEDITOR.TRISTATE_ON?"on":g==CKEDITOR.TRISTATE_DISABLED?
+"disabled":"off";this.role in{menuitemcheckbox:1,menuitemradio:1}&&(h=' aria-checked\x3d"'+(g==CKEDITOR.TRISTATE_ON?"true":"false")+'"');var r=this.getItems,x="\x26#"+("rtl"==this.editor.lang.dir?"9668":"9658")+";",t=this.name;this.icon&&!/\./.test(this.icon)&&(t=this.icon);this.command&&(v=y.getCommand(this.command),(v=y.getCommandKeystroke(v))&&(p=CKEDITOR.tools.keystrokeToString(y.lang.common.keyboard,v)));v=CKEDITOR.tools.htmlEncodeAttr(this.label);b={id:d,name:this.name,iconName:t,label:this.label,
+attrLabel:v,cls:this.className||"",state:q,hasPopup:r?"true":"false",disabled:g==CKEDITOR.TRISTATE_DISABLED,title:v+(p?" ("+p.display+")":""),ariaShortcut:p?y.lang.common.keyboardShortcut+" "+p.aria:"",href:"javascript:void('"+(v||"").replace("'")+"')",hoverFn:b._.itemOverFn,moveOutFn:b._.itemOutFn,clickFn:b._.itemClickFn,index:f,iconStyle:CKEDITOR.skin.getIconStyle(t,"rtl"==this.editor.lang.dir,t==this.icon?null:this.icon,this.iconOffset),shortcutHtml:p?k.output({shortcut:p.display}):"",arrowHtml:r?
+a.output({label:x}):"",role:this.role?this.role:"menuitem",ariaChecked:h};e.output(b,c)}}})}(),CKEDITOR.config.menu_groups="clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,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:{css:b.config.contextmenu_contentsCss,
 className:"cke_menu_panel",attributes:{"aria-label":b.lang.contextmenu.options}}})},proto:{addTarget:function(b,h){function f(){a=!1}var e,a;b.on("contextmenu",function(b){b=b.data;var f=CKEDITOR.env.webkit?e:CKEDITOR.env.mac?b.$.metaKey:b.$.ctrlKey;if(!h||!f)if(b.preventDefault(),!a){if(CKEDITOR.env.mac&&CKEDITOR.env.webkit){var f=this.editor,c=(new CKEDITOR.dom.elementPath(b.getTarget(),f.editable())).contains(function(a){return a.hasAttribute("contenteditable")},!0);c&&"false"==c.getAttribute("contenteditable")&&
-f.getSelection().fake(c)}var c=b.getTarget().getDocument(),d=b.getTarget().getDocument().getDocumentElement(),f=!c.equals(CKEDITOR.document),c=c.getWindow().getScrollPosition(),g=f?b.$.clientX:b.$.pageX||c.x+b.$.clientX,n=f?b.$.clientY:b.$.pageY||c.y+b.$.clientY;CKEDITOR.tools.setTimeout(function(){this.open(d,null,g,n)},CKEDITOR.env.ie?200:0,this)}},this);if(CKEDITOR.env.webkit){var m=function(){e=0};b.on("keydown",function(a){e=CKEDITOR.env.mac?a.data.$.metaKey:a.data.$.ctrlKey});b.on("keyup",m);
-b.on("contextmenu",m)}CKEDITOR.env.gecko&&!CKEDITOR.env.mac&&(b.on("keydown",function(b){b.data.$.shiftKey&&121===b.data.$.keyCode&&(a=!0)},null,null,0),b.on("keyup",f),b.on("contextmenu",f))},open:function(b,h,f,e){!1!==this.editor.config.enableContextMenu&&this.editor.getSelection().getType()!==CKEDITOR.SELECTION_NONE&&(this.editor.focus(),b=b||CKEDITOR.document.getDocumentElement(),this.editor.selectionChange(1),this.show(b,h,f,e))}}})},beforeInit:function(b){var h=b.contextMenu=new CKEDITOR.plugins.contextMenu(b);
+f.getSelection().fake(c)}var c=b.getTarget().getDocument(),d=b.getTarget().getDocument().getDocumentElement(),f=!c.equals(CKEDITOR.document),c=c.getWindow().getScrollPosition(),g=f?b.$.clientX:b.$.pageX||c.x+b.$.clientX,k=f?b.$.clientY:b.$.pageY||c.y+b.$.clientY;CKEDITOR.tools.setTimeout(function(){this.open(d,null,g,k)},CKEDITOR.env.ie?200:0,this)}},this);if(CKEDITOR.env.webkit){var k=function(){e=0};b.on("keydown",function(a){e=CKEDITOR.env.mac?a.data.$.metaKey:a.data.$.ctrlKey});b.on("keyup",k);
+b.on("contextmenu",k)}CKEDITOR.env.gecko&&!CKEDITOR.env.mac&&(b.on("keydown",function(b){b.data.$.shiftKey&&121===b.data.$.keyCode&&(a=!0)},null,null,0),b.on("keyup",f),b.on("contextmenu",f))},open:function(b,h,f,e){!1!==this.editor.config.enableContextMenu&&this.editor.getSelection().getType()!==CKEDITOR.SELECTION_NONE&&(this.editor.focus(),b=b||CKEDITOR.document.getDocumentElement(),this.editor.selectionChange(1),this.show(b,h,f,e))}}})},beforeInit:function(b){var h=b.contextMenu=new CKEDITOR.plugins.contextMenu(b);
 b.on("contentDom",function(){h.addTarget(b.editable(),!1!==b.config.browserContextMenuOnCtrl)});b.addCommand("contextMenu",{exec:function(b){var e=0,a=0,h=b.getSelection().getRanges(),h=h[h.length-1].getClientRects(b.editable().isInline());if(h=h[h.length-1])e=h["rtl"===b.lang.dir?"left":"right"],a=h.bottom;b.contextMenu.open(b.document.getBody().getParent(),null,e,a)}});b.setKeystroke(CKEDITOR.SHIFT+121,"contextMenu");b.setKeystroke(CKEDITOR.CTRL+CKEDITOR.SHIFT+121,"contextMenu")}}),function(){function b(a,
-b){function f(b){b=g.list[b];var c;b.equals(a.editable())||"true"==b.getAttribute("contenteditable")?(c=a.createRange(),c.selectNodeContents(b),c=c.select()):(c=a.getSelection(),c.selectElement(b));CKEDITOR.env.ie&&a.fire("selectionChange",{selection:c,path:new CKEDITOR.dom.elementPath(b)});a.focus()}function l(){d&&d.setHtml('\x3cspan class\x3d"cke_path_empty"\x3e\x26nbsp;\x3c/span\x3e');delete g.list}var c=a.ui.spaceId("path"),d,g=a._.elementsPath,n=g.idBase;b.html+='\x3cspan id\x3d"'+c+'_label" class\x3d"cke_voice_label"\x3e'+
-a.lang.elementspath.eleLabel+'\x3c/span\x3e\x3cspan id\x3d"'+c+'" class\x3d"cke_path" role\x3d"group" aria-labelledby\x3d"'+c+'_label"\x3e\x3cspan class\x3d"cke_path_empty"\x3e\x26nbsp;\x3c/span\x3e\x3c/span\x3e';a.on("uiReady",function(){var b=a.ui.space("path");b&&a.focusManager.add(b,1)});g.onClick=f;var y=CKEDITOR.tools.addFunction(f),w=CKEDITOR.tools.addFunction(function(b,c){var d=g.idBase,e;c=new CKEDITOR.dom.event(c);e="rtl"==a.lang.dir;switch(c.getKeystroke()){case e?39:37:case 9:return(e=
-CKEDITOR.document.getById(d+(b+1)))||(e=CKEDITOR.document.getById(d+"0")),e.focus(),!1;case e?37:39:case CKEDITOR.SHIFT+9:return(e=CKEDITOR.document.getById(d+(b-1)))||(e=CKEDITOR.document.getById(d+(g.list.length-1))),e.focus(),!1;case 27:return a.focus(),!1;case 13:case 32:return f(b),!1}return!0});a.on("selectionChange",function(b){for(var f=[],h=g.list=[],k=[],l=g.filters,m=!0,q=b.data.path.elements,v=q.length;v--;){var B=q[v],D=0;b=B.data("cke-display-name")?B.data("cke-display-name"):B.data("cke-real-element-type")?
-B.data("cke-real-element-type"):B.getName();(m=B.hasAttribute("contenteditable")?"true"==B.getAttribute("contenteditable"):m)||B.hasAttribute("contenteditable")||(D=1);for(var A=0;A<l.length;A++){var E=l[A](B,b);if(!1===E){D=1;break}b=E||b}D||(h.unshift(B),k.unshift(b))}h=h.length;for(l=0;l<h;l++)b=k[l],m=a.lang.elementspath.eleTitle.replace(/%1/,b),b=e.output({id:n+l,label:m,text:b,jsTitle:"javascript:void('"+b+"')",index:l,keyDownFn:w,clickFn:y}),f.unshift(b);d||(d=CKEDITOR.document.getById(c));
-k=d;k.setHtml(f.join("")+'\x3cspan class\x3d"cke_path_empty"\x3e\x26nbsp;\x3c/span\x3e');a.fire("elementsPathUpdate",{space:k})});a.on("readOnly",l);a.on("contentDomUnload",l);a.addCommand("elementsPathFocus",h.toolbarFocus);a.setKeystroke(CKEDITOR.ALT+122,"elementsPathFocus")}var h={toolbarFocus:{editorFocus:!1,readOnly:1,exec:function(a){(a=CKEDITOR.document.getById(a._.elementsPath.idBase+"0"))&&a.focus(CKEDITOR.env.ie||CKEDITOR.env.air)}}},f="";CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(f+=' onkeypress\x3d"return false;"');
+b){function f(b){b=g.list[b];var c;b.equals(a.editable())||"true"==b.getAttribute("contenteditable")?(c=a.createRange(),c.selectNodeContents(b),c=c.select()):(c=a.getSelection(),c.selectElement(b));CKEDITOR.env.ie&&a.fire("selectionChange",{selection:c,path:new CKEDITOR.dom.elementPath(b)});a.focus()}function m(){d&&d.setHtml('\x3cspan class\x3d"cke_path_empty"\x3e\x26nbsp;\x3c/span\x3e');delete g.list}var c=a.ui.spaceId("path"),d,g=a._.elementsPath,n=g.idBase;b.html+='\x3cspan id\x3d"'+c+'_label" class\x3d"cke_voice_label"\x3e'+
+a.lang.elementspath.eleLabel+'\x3c/span\x3e\x3cspan id\x3d"'+c+'" class\x3d"cke_path" role\x3d"group" aria-labelledby\x3d"'+c+'_label"\x3e\x3cspan class\x3d"cke_path_empty"\x3e\x26nbsp;\x3c/span\x3e\x3c/span\x3e';a.on("uiReady",function(){var b=a.ui.space("path");b&&a.focusManager.add(b,1)});g.onClick=f;var y=CKEDITOR.tools.addFunction(f),v=CKEDITOR.tools.addFunction(function(b,c){var d=g.idBase,e;c=new CKEDITOR.dom.event(c);e="rtl"==a.lang.dir;switch(c.getKeystroke()){case e?39:37:case 9:return(e=
+CKEDITOR.document.getById(d+(b+1)))||(e=CKEDITOR.document.getById(d+"0")),e.focus(),!1;case e?37:39:case CKEDITOR.SHIFT+9:return(e=CKEDITOR.document.getById(d+(b-1)))||(e=CKEDITOR.document.getById(d+(g.list.length-1))),e.focus(),!1;case 27:return a.focus(),!1;case 13:case 32:return f(b),!1}return!0});a.on("selectionChange",function(b){for(var f=[],h=g.list=[],k=[],l=g.filters,m=!0,u=b.data.path.elements,w=u.length;w--;){var B=u[w],C=0;b=B.data("cke-display-name")?B.data("cke-display-name"):B.data("cke-real-element-type")?
+B.data("cke-real-element-type"):B.getName();(m=B.hasAttribute("contenteditable")?"true"==B.getAttribute("contenteditable"):m)||B.hasAttribute("contenteditable")||(C=1);for(var A=0;A<l.length;A++){var E=l[A](B,b);if(!1===E){C=1;break}b=E||b}C||(h.unshift(B),k.unshift(b))}h=h.length;for(l=0;l<h;l++)b=k[l],m=a.lang.elementspath.eleTitle.replace(/%1/,b),b=e.output({id:n+l,label:m,text:b,jsTitle:"javascript:void('"+b+"')",index:l,keyDownFn:v,clickFn:y}),f.unshift(b);d||(d=CKEDITOR.document.getById(c));
+k=d;k.setHtml(f.join("")+'\x3cspan class\x3d"cke_path_empty"\x3e\x26nbsp;\x3c/span\x3e');a.fire("elementsPathUpdate",{space:k})});a.on("readOnly",m);a.on("contentDomUnload",m);a.addCommand("elementsPathFocus",h.toolbarFocus);a.setKeystroke(CKEDITOR.ALT+122,"elementsPathFocus")}var h={toolbarFocus:{editorFocus:!1,readOnly:1,exec:function(a){(a=CKEDITOR.document.getById(a._.elementsPath.idBase+"0"))&&a.focus(CKEDITOR.env.ie||CKEDITOR.env.air)}}},f="";CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(f+=' onkeypress\x3d"return false;"');
 CKEDITOR.env.gecko&&(f+=' onblur\x3d"this.style.cssText \x3d this.style.cssText;"');var e=CKEDITOR.addTemplate("pathItem",'\x3ca id\x3d"{id}" href\x3d"{jsTitle}" tabindex\x3d"-1" class\x3d"cke_path_item" title\x3d"{label}"'+f+' hidefocus\x3d"true"  draggable\x3d"false"  ondragstart\x3d"return false;" onkeydown\x3d"return CKEDITOR.tools.callFunction({keyDownFn},{index}, event );" onclick\x3d"CKEDITOR.tools.callFunction({clickFn},{index}); return false;" role\x3d"button" aria-label\x3d"{label}"\x3e{text}\x3c/a\x3e');
-CKEDITOR.plugins.add("elementspath",{init:function(a){a._.elementsPath={idBase:"cke_elementspath_"+CKEDITOR.tools.getNextNumber()+"_",filters:[]};a.on("uiSpace",function(e){"bottom"==e.data.space&&b(a,e.data)})}})}(),function(){function b(a,b,c){c=a.config.forceEnterMode||c;if("wysiwyg"==a.mode){b||(b=a.activeEnterMode);var e=a.elementPath();e&&!e.isContextFor("p")&&(b=CKEDITOR.ENTER_BR,c=1);a.fire("saveSnapshot");b==CKEDITOR.ENTER_BR?k(a,b,null,c):l(a,b,null,c);a.fire("saveSnapshot")}}function h(a){a=
+CKEDITOR.plugins.add("elementspath",{init:function(a){a._.elementsPath={idBase:"cke_elementspath_"+CKEDITOR.tools.getNextNumber()+"_",filters:[]};a.on("uiSpace",function(e){"bottom"==e.data.space&&b(a,e.data)})}})}(),function(){function b(a,b,c){c=a.config.forceEnterMode||c;if("wysiwyg"==a.mode){b||(b=a.activeEnterMode);var e=a.elementPath();e&&!e.isContextFor("p")&&(b=CKEDITOR.ENTER_BR,c=1);a.fire("saveSnapshot");b==CKEDITOR.ENTER_BR?l(a,b,null,c):m(a,b,null,c);a.fire("saveSnapshot")}}function h(a){a=
 a.getSelection().getRanges(!0);for(var b=a.length-1;0<b;b--)a[b].deleteContents();return a[0]}function f(a){var b=a.startContainer.getAscendant(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&"true"==a.getAttribute("contenteditable")},!0);if(a.root.equals(b))return a;b=new CKEDITOR.dom.range(b);b.moveToRange(a);return b}CKEDITOR.plugins.add("enterkey",{init:function(a){a.addCommand("enter",{modes:{wysiwyg:1},editorFocus:!1,exec:function(a){b(a)}});a.addCommand("shiftEnter",{modes:{wysiwyg:1},editorFocus:!1,
-exec:function(a){b(a,a.activeShiftEnterMode,1)}});a.setKeystroke([[13,"enter"],[CKEDITOR.SHIFT+13,"shiftEnter"]])}});var e=CKEDITOR.dom.walker.whitespaces(),a=CKEDITOR.dom.walker.bookmark(),m,k,l,c;CKEDITOR.plugins.enterkey={enterBlock:function(b,g,l,m){function w(a){var b;if(a===CKEDITOR.ENTER_BR||-1===CKEDITOR.tools.indexOf(["td","th"],x.lastElement.getName())||1!==x.lastElement.getChildCount())return!1;a=x.lastElement.getChild(0).clone(!0);(b=a.getBogus())&&b.remove();return a.getText().length?
-!1:!0}if(l=l||h(b)){l=f(l);var p=l.document,t=l.checkStartOfBlock(),r=l.checkEndOfBlock(),x=b.elementPath(l.startContainer),u=x.block,z=g==CKEDITOR.ENTER_DIV?"div":"p",q;if(u&&t&&r){t=u.getParent();if(t.is("li")&&1<t.getChildCount()){p=new CKEDITOR.dom.element("li");q=b.createRange();p.insertAfter(t);u.remove();q.setStart(p,0);b.getSelection().selectRanges([q]);return}if(u.is("li")||u.getParent().is("li")){u.is("li")||(u=u.getParent(),t=u.getParent());q=t.getParent();l=!u.hasPrevious();var v=!u.hasNext();
-m=b.getSelection();var z=m.createBookmarks(),B=u.getDirection(1),r=u.getAttribute("class"),D=u.getAttribute("style"),A=q.getDirection(1)!=B;b=b.enterMode!=CKEDITOR.ENTER_BR||A||D||r;if(q.is("li"))l||v?(l&&v&&t.remove(),u[v?"insertAfter":"insertBefore"](q)):u.breakParent(q);else{if(b)if(x.block.is("li")?(q=p.createElement(g==CKEDITOR.ENTER_P?"p":"div"),A&&q.setAttribute("dir",B),D&&q.setAttribute("style",D),r&&q.setAttribute("class",r),u.moveChildren(q)):q=x.block,l||v)q[l?"insertBefore":"insertAfter"](t);
-else u.breakParent(t),q.insertAfter(t);else if(u.appendBogus(!0),l||v)for(;p=u[l?"getFirst":"getLast"]();)p[l?"insertBefore":"insertAfter"](t);else for(u.breakParent(t);p=u.getLast();)p.insertAfter(t);u.remove()}m.selectBookmarks(z);return}if(u&&u.getParent().is("blockquote")){u.breakParent(u.getParent());u.getPrevious().getFirst(CKEDITOR.dom.walker.invisible(1))||u.getPrevious().remove();u.getNext().getFirst(CKEDITOR.dom.walker.invisible(1))||u.getNext().remove();l.moveToElementEditStart(u);l.select();
-return}}else if(u&&u.is("pre")&&!r){k(b,g,l,m);return}if(D=l.splitBlock(z)){b=D.previousBlock;u=D.nextBlock;t=D.wasStartOfBlock;r=D.wasEndOfBlock;u?(v=u.getParent(),v.is("li")&&(u.breakParent(v),u.move(u.getNext(),1))):b&&(v=b.getParent())&&v.is("li")&&(b.breakParent(v),v=b.getNext(),l.moveToElementEditStart(v),b.move(b.getPrevious()));if(t||r)if(w(g))l.moveToElementEditStart(l.getTouchedStartNode());else{if(b){if(b.is("li")||!c.test(b.getName())&&!b.is("pre"))q=b.clone()}else u&&(q=u.clone());q?
-m&&!q.is("li")&&q.renameNode(z):v&&v.is("li")?q=v:(q=p.createElement(z),b&&(B=b.getDirection())&&q.setAttribute("dir",B));if(p=D.elementPath)for(g=0,m=p.elements.length;g<m;g++){z=p.elements[g];if(z.equals(p.block)||z.equals(p.blockLimit))break;CKEDITOR.dtd.$removeEmpty[z.getName()]&&(z=z.clone(),q.moveChildren(z),q.append(z))}q.appendBogus();q.getParent()||l.insertNode(q);q.is("li")&&q.removeAttribute("value");!CKEDITOR.env.ie||!t||r&&b.getChildCount()||(l.moveToElementEditStart(r?b:q),l.select());
-l.moveToElementEditStart(t&&!r?u:q)}else u.is("li")&&(q=l.clone(),q.selectNodeContents(u),q=new CKEDITOR.dom.walker(q),q.evaluator=function(b){return!(a(b)||e(b)||b.type==CKEDITOR.NODE_ELEMENT&&b.getName()in CKEDITOR.dtd.$inline&&!(b.getName()in CKEDITOR.dtd.$empty))},(v=q.next())&&v.type==CKEDITOR.NODE_ELEMENT&&v.is("ul","ol")&&(CKEDITOR.env.needsBrFiller?p.createElement("br"):p.createText(" ")).insertBefore(v)),u&&l.moveToElementEditStart(u);l.select();l.scrollIntoView()}}},enterBr:function(a,b,
-e,f){if(e=e||h(a)){var k=e.document,m=e.checkEndOfBlock(),t=new CKEDITOR.dom.elementPath(a.getSelection().getStartElement()),r=t.block,x=r&&t.block.getName();f||"li"!=x?(!f&&m&&c.test(x)?(m=r.getDirection())?(k=k.createElement("div"),k.setAttribute("dir",m),k.insertAfter(r),e.setStart(k,0)):(k.createElement("br").insertAfter(r),CKEDITOR.env.gecko&&k.createText("").insertAfter(r),e.setStartAt(r.getNext(),CKEDITOR.env.ie?CKEDITOR.POSITION_BEFORE_START:CKEDITOR.POSITION_AFTER_START)):(a="pre"==x&&CKEDITOR.env.ie&&
-8>CKEDITOR.env.version?k.createText("\r"):k.createElement("br"),e.deleteContents(),e.insertNode(a),CKEDITOR.env.needsBrFiller?(k.createText("").insertAfter(a),m&&(r||t.blockLimit).appendBogus(),a.getNext().$.nodeValue="",e.setStartAt(a.getNext(),CKEDITOR.POSITION_AFTER_START)):e.setStartAt(a,CKEDITOR.POSITION_AFTER_END)),e.collapse(!0),e.select(),e.scrollIntoView()):l(a,b,e,f)}}};m=CKEDITOR.plugins.enterkey;k=m.enterBr;l=m.enterBlock;c=/^h[1-6]$/}(),function(){function b(b,f){var e={},a=[],m={nbsp:" ",
-shy:"­",gt:"\x3e",lt:"\x3c",amp:"\x26",apos:"'",quot:'"'};b=b.replace(/\b(nbsp|shy|gt|lt|amp|apos|quot)(?:,|$)/g,function(b,c){var h=f?"\x26"+c+";":m[c];e[h]=f?m[c]:"\x26"+c+";";a.push(h);return""});b=b.replace(/,$/,"");if(!f&&b){b=b.split(",");var k=document.createElement("div"),l;k.innerHTML="\x26"+b.join(";\x26")+";";l=k.innerHTML;k=null;for(k=0;k<l.length;k++){var c=l.charAt(k);e[c]="\x26"+b[k]+";";a.push(c)}}e.regex=a.join(f?"|":"");return e}CKEDITOR.plugins.add("entities",{afterInit:function(h){function f(a){return c[a]}
-function e(b){return"force"!=a.entities_processNumerical&&k[b]?k[b]:"\x26#"+b.charCodeAt(0)+";"}var a=h.config;if(h=(h=h.dataProcessor)&&h.htmlFilter){var m=[];!1!==a.basicEntities&&m.push("nbsp,gt,lt,amp");a.entities&&(m.length&&m.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"),
-a.entities_latin&&m.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"),a.entities_greek&&m.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"),
-a.entities_additional&&m.push(a.entities_additional));var k=b(m.join(",")),l=k.regex?"["+k.regex+"]":"a^";delete k.regex;a.entities&&a.entities_processNumerical&&(l="[^ -~]|"+l);var l=new RegExp(l,"g"),c=b("nbsp,gt,lt,amp,shy",!0),d=new RegExp(c.regex,"g");h.addRules({text:function(a){return a.replace(d,f).replace(l,e)}},{applyToAll:!0,excludeNestedEditable:!0})}}})}(),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(b,h,f,e){h=h||"80%";f=f||"70%";"string"==typeof h&&1<h.length&&"%"==h.substr(h.length-1,1)&&(h=parseInt(window.screen.width*parseInt(h,10)/100,10));"string"==typeof f&&1<f.length&&"%"==f.substr(f.length-1,1)&&(f=parseInt(window.screen.height*parseInt(f,10)/100,10));640>h&&(h=640);420>f&&(f=420);var a=parseInt((window.screen.height-f)/2,10),m=parseInt((window.screen.width-
-h)/2,10);e=(e||"location\x3dno,menubar\x3dno,toolbar\x3dno,dependent\x3dyes,minimizable\x3dno,modal\x3dyes,alwaysRaised\x3dyes,resizable\x3dyes,scrollbars\x3dyes")+",width\x3d"+h+",height\x3d"+f+",top\x3d"+a+",left\x3d"+m;var k=window.open("",null,e,!0);if(!k)return!1;try{-1==navigator.userAgent.toLowerCase().indexOf(" chrome/")&&(k.moveTo(m,a),k.resizeTo(h,f)),k.focus(),k.location.href=b}catch(l){window.open(b,null,e,!0)}return!0}}),"use strict",function(){function b(a){this.editor=a;this.loaders=
+exec:function(a){b(a,a.activeShiftEnterMode,1)}});a.setKeystroke([[13,"enter"],[CKEDITOR.SHIFT+13,"shiftEnter"]])}});var e=CKEDITOR.dom.walker.whitespaces(),a=CKEDITOR.dom.walker.bookmark(),k,l,m,c;CKEDITOR.plugins.enterkey={enterBlock:function(b,g,k,m){function v(a){var b;if(a===CKEDITOR.ENTER_BR||-1===CKEDITOR.tools.indexOf(["td","th"],x.lastElement.getName())||1!==x.lastElement.getChildCount())return!1;a=x.lastElement.getChild(0).clone(!0);(b=a.getBogus())&&b.remove();return a.getText().length?
+!1:!0}if(k=k||h(b)){k=f(k);var p=k.document,q=k.checkStartOfBlock(),r=k.checkEndOfBlock(),x=b.elementPath(k.startContainer),t=x.block,z=g==CKEDITOR.ENTER_DIV?"div":"p",u;if(t&&q&&r){q=t.getParent();if(q.is("li")&&1<q.getChildCount()){p=new CKEDITOR.dom.element("li");u=b.createRange();p.insertAfter(q);t.remove();u.setStart(p,0);b.getSelection().selectRanges([u]);return}if(t.is("li")||t.getParent().is("li")){t.is("li")||(t=t.getParent(),q=t.getParent());u=q.getParent();k=!t.hasPrevious();var w=!t.hasNext();
+m=b.getSelection();var z=m.createBookmarks(),B=t.getDirection(1),r=t.getAttribute("class"),C=t.getAttribute("style"),A=u.getDirection(1)!=B;b=b.enterMode!=CKEDITOR.ENTER_BR||A||C||r;if(u.is("li"))k||w?(k&&w&&q.remove(),t[w?"insertAfter":"insertBefore"](u)):t.breakParent(u);else{if(b)if(x.block.is("li")?(u=p.createElement(g==CKEDITOR.ENTER_P?"p":"div"),A&&u.setAttribute("dir",B),C&&u.setAttribute("style",C),r&&u.setAttribute("class",r),t.moveChildren(u)):u=x.block,k||w)u[k?"insertBefore":"insertAfter"](q);
+else t.breakParent(q),u.insertAfter(q);else if(t.appendBogus(!0),k||w)for(;p=t[k?"getFirst":"getLast"]();)p[k?"insertBefore":"insertAfter"](q);else for(t.breakParent(q);p=t.getLast();)p.insertAfter(q);t.remove()}m.selectBookmarks(z);return}if(t&&t.getParent().is("blockquote")){t.breakParent(t.getParent());t.getPrevious().getFirst(CKEDITOR.dom.walker.invisible(1))||t.getPrevious().remove();t.getNext().getFirst(CKEDITOR.dom.walker.invisible(1))||t.getNext().remove();k.moveToElementEditStart(t);k.select();
+return}}else if(t&&t.is("pre")&&!r){l(b,g,k,m);return}if(C=k.splitBlock(z)){b=C.previousBlock;t=C.nextBlock;q=C.wasStartOfBlock;r=C.wasEndOfBlock;t?(w=t.getParent(),w.is("li")&&(t.breakParent(w),t.move(t.getNext(),1))):b&&(w=b.getParent())&&w.is("li")&&(b.breakParent(w),w=b.getNext(),k.moveToElementEditStart(w),b.move(b.getPrevious()));if(q||r)if(v(g))k.moveToElementEditStart(k.getTouchedStartNode());else{if(b){if(b.is("li")||!c.test(b.getName())&&!b.is("pre"))u=b.clone()}else t&&(u=t.clone());u?
+m&&!u.is("li")&&u.renameNode(z):w&&w.is("li")?u=w:(u=p.createElement(z),b&&(B=b.getDirection())&&u.setAttribute("dir",B));if(p=C.elementPath)for(g=0,m=p.elements.length;g<m;g++){z=p.elements[g];if(z.equals(p.block)||z.equals(p.blockLimit))break;CKEDITOR.dtd.$removeEmpty[z.getName()]&&(z=z.clone(),u.moveChildren(z),u.append(z))}u.appendBogus();u.getParent()||k.insertNode(u);u.is("li")&&u.removeAttribute("value");!CKEDITOR.env.ie||!q||r&&b.getChildCount()||(k.moveToElementEditStart(r?b:u),k.select());
+k.moveToElementEditStart(q&&!r?t:u)}else t.is("li")&&(u=k.clone(),u.selectNodeContents(t),u=new CKEDITOR.dom.walker(u),u.evaluator=function(b){return!(a(b)||e(b)||b.type==CKEDITOR.NODE_ELEMENT&&b.getName()in CKEDITOR.dtd.$inline&&!(b.getName()in CKEDITOR.dtd.$empty))},(w=u.next())&&w.type==CKEDITOR.NODE_ELEMENT&&w.is("ul","ol")&&(CKEDITOR.env.needsBrFiller?p.createElement("br"):p.createText(" ")).insertBefore(w)),t&&k.moveToElementEditStart(t);k.select();k.scrollIntoView()}}},enterBr:function(a,b,
+e,f){if(e=e||h(a)){var k=e.document,l=e.checkEndOfBlock(),q=new CKEDITOR.dom.elementPath(a.getSelection().getStartElement()),r=q.block,x=r&&q.block.getName();f||"li"!=x?(!f&&l&&c.test(x)?(l=r.getDirection())?(k=k.createElement("div"),k.setAttribute("dir",l),k.insertAfter(r),e.setStart(k,0)):(k.createElement("br").insertAfter(r),CKEDITOR.env.gecko&&k.createText("").insertAfter(r),e.setStartAt(r.getNext(),CKEDITOR.env.ie?CKEDITOR.POSITION_BEFORE_START:CKEDITOR.POSITION_AFTER_START)):(a="pre"==x&&CKEDITOR.env.ie&&
+8>CKEDITOR.env.version?k.createText("\r"):k.createElement("br"),e.deleteContents(),e.insertNode(a),CKEDITOR.env.needsBrFiller?(k.createText("").insertAfter(a),l&&(r||q.blockLimit).appendBogus(),a.getNext().$.nodeValue="",e.setStartAt(a.getNext(),CKEDITOR.POSITION_AFTER_START)):e.setStartAt(a,CKEDITOR.POSITION_AFTER_END)),e.collapse(!0),e.select(),e.scrollIntoView()):m(a,b,e,f)}}};k=CKEDITOR.plugins.enterkey;l=k.enterBr;m=k.enterBlock;c=/^h[1-6]$/}(),function(){function b(b,f){var e={},a=[],k={nbsp:" ",
+shy:"­",gt:"\x3e",lt:"\x3c",amp:"\x26",apos:"'",quot:'"'};b=b.replace(/\b(nbsp|shy|gt|lt|amp|apos|quot)(?:,|$)/g,function(b,c){var h=f?"\x26"+c+";":k[c];e[h]=f?k[c]:"\x26"+c+";";a.push(h);return""});b=b.replace(/,$/,"");if(!f&&b){b=b.split(",");var l=document.createElement("div"),m;l.innerHTML="\x26"+b.join(";\x26")+";";m=l.innerHTML;l=null;for(l=0;l<m.length;l++){var c=m.charAt(l);e[c]="\x26"+b[l]+";";a.push(c)}}e.regex=a.join(f?"|":"");return e}CKEDITOR.plugins.add("entities",{afterInit:function(h){function f(a){return c[a]}
+function e(b){return"force"!=a.entities_processNumerical&&l[b]?l[b]:"\x26#"+b.charCodeAt(0)+";"}var a=h.config;if(h=(h=h.dataProcessor)&&h.htmlFilter){var k=[];!1!==a.basicEntities&&k.push("nbsp,gt,lt,amp");a.entities&&(k.length&&k.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"),
+a.entities_latin&&k.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"),a.entities_greek&&k.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"),
+a.entities_additional&&k.push(a.entities_additional));var l=b(k.join(",")),m=l.regex?"["+l.regex+"]":"a^";delete l.regex;a.entities&&a.entities_processNumerical&&(m="[^ -~]|"+m);var m=new RegExp(m,"g"),c=b("nbsp,gt,lt,amp,shy",!0),d=new RegExp(c.regex,"g");h.addRules({text:function(a){return a.replace(d,f).replace(m,e)}},{applyToAll:!0,excludeNestedEditable:!0})}}})}(),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(b,h,f,e){h=h||"80%";f=f||"70%";"string"==typeof h&&1<h.length&&"%"==h.substr(h.length-1,1)&&(h=parseInt(window.screen.width*parseInt(h,10)/100,10));"string"==typeof f&&1<f.length&&"%"==f.substr(f.length-1,1)&&(f=parseInt(window.screen.height*parseInt(f,10)/100,10));640>h&&(h=640);420>f&&(f=420);var a=parseInt((window.screen.height-f)/2,10),k=parseInt((window.screen.width-
+h)/2,10);e=(e||"location\x3dno,menubar\x3dno,toolbar\x3dno,dependent\x3dyes,minimizable\x3dno,modal\x3dyes,alwaysRaised\x3dyes,resizable\x3dyes,scrollbars\x3dyes")+",width\x3d"+h+",height\x3d"+f+",top\x3d"+a+",left\x3d"+k;var l=window.open("",null,e,!0);if(!l)return!1;try{-1==navigator.userAgent.toLowerCase().indexOf(" chrome/")&&(l.moveTo(k,a),l.resizeTo(h,f)),l.focus(),l.location.href=b}catch(m){window.open(b,null,e,!0)}return!0}}),"use strict",function(){function b(a){this.editor=a;this.loaders=
 []}function h(a,b,e){var h=a.config.fileTools_defaultFileName;this.editor=a;this.lang=a.lang;"string"===typeof b?(this.data=b,this.file=f(this.data),this.loaded=this.total=this.file.size):(this.data=null,this.file=b,this.total=this.file.size,this.loaded=0);e?this.fileName=e:this.file.name?this.fileName=this.file.name:(a=this.file.type.split("/"),h&&(a[0]=h),this.fileName=a.join("."));this.uploaded=0;this.responseData=this.uploadTotal=null;this.status="created";this.abort=function(){this.changeStatus("abort")}}
 function f(a){var b=a.match(e)[1];a=a.replace(e,"");a=atob(a);var f=[],h,c,d,g;for(h=0;h<a.length;h+=512){c=a.slice(h,h+512);d=Array(c.length);for(g=0;g<c.length;g++)d[g]=c.charCodeAt(g);c=new Uint8Array(d);f.push(c)}return new Blob(f,{type:b})}CKEDITOR.plugins.add("filetools",{beforeInit:function(a){a.uploadRepository=new b(a);a.on("fileUploadRequest",function(a){var b=a.data.fileLoader;b.xhr.open("POST",b.uploadUrl,!0);a.data.requestData.upload={file:b.file,name:b.fileName}},null,null,5);a.on("fileUploadRequest",
 function(b){var e=b.data.fileLoader,f=new FormData;b=b.data.requestData;var c=a.config.fileTools_requestHeaders,d,g;for(g in b){var h=b[g];"object"===typeof h&&h.file?f.append(g,h.file,h.name):f.append(g,h)}f.append("ckCsrfToken",CKEDITOR.tools.getCsrfToken());if(c)for(d in c)e.xhr.setRequestHeader(d,c[d]);e.xhr.send(f)},null,null,999);a.on("fileUploadResponse",function(a){var b=a.data.fileLoader,e=b.xhr,c=a.data;try{var d=JSON.parse(e.responseText);d.error&&d.error.message&&(c.message=d.error.message);
@@ -826,26 +835,26 @@ if(d.uploaded)for(var g in d)c[g]=d[g];else a.cancel()}catch(f){c.message=b.lang
 b){var e=this;this.once("loaded",function(f){f.cancel();e.once("update",function(a){a.cancel()},null,null,0);e.upload(a,b)},null,null,0);this.load()},load:function(){var a=this,b=this.reader=new FileReader;a.changeStatus("loading");this.abort=function(){a.reader.abort()};b.onabort=function(){a.changeStatus("abort")};b.onerror=function(){a.message=a.lang.filetools.loadError;a.changeStatus("error")};b.onprogress=function(b){a.loaded=b.loaded;a.update()};b.onload=function(){a.loaded=a.total;a.data=b.result;
 a.changeStatus("loaded")};b.readAsDataURL(this.file)},upload:function(a,b){var e=b||{};a?(this.uploadUrl=a,this.xhr=new XMLHttpRequest,this.attachRequestListeners(),this.editor.fire("fileUploadRequest",{fileLoader:this,requestData:e})&&this.changeStatus("uploading")):(this.message=this.lang.filetools.noUrlError,this.changeStatus("error"))},attachRequestListeners:function(){function a(){"error"!=e.status&&(e.message=e.lang.filetools.networkError,e.changeStatus("error"))}function b(){"abort"!=e.status&&
 e.changeStatus("abort")}var e=this,f=this.xhr;e.abort=function(){f.abort();b()};f.onerror=a;f.onabort=b;f.upload?(f.upload.onprogress=function(a){a.lengthComputable&&(e.uploadTotal||(e.uploadTotal=a.total),e.uploaded=a.loaded,e.update())},f.upload.onerror=a,f.upload.onabort=b):(e.uploadTotal=e.total,e.update());f.onload=function(){e.update();if("abort"!=e.status)if(e.uploaded=e.uploadTotal,200>f.status||299<f.status)e.message=e.lang.filetools["httpError"+f.status],e.message||(e.message=e.lang.filetools.httpError.replace("%1",
-f.status)),e.changeStatus("error");else{for(var a={fileLoader:e},b=["message","fileName","url"],g=e.editor.fire("fileUploadResponse",a),h=0;h<b.length;h++){var m=b[h];"string"===typeof a[m]&&(e[m]=a[m])}e.responseData=a;delete e.responseData.fileLoader;!1===g?e.changeStatus("error"):e.changeStatus("uploaded")}}},changeStatus:function(a){this.status=a;if("error"==a||"abort"==a||"loaded"==a||"uploaded"==a)this.abort=function(){};this.fire(a);this.update()},update:function(){this.fire("update")},isFinished:function(){return!!this.status.match(/^(?:loaded|uploaded|error|abort)$/)}};
+f.status)),e.changeStatus("error");else{for(var a={fileLoader:e},b=["message","fileName","url"],g=e.editor.fire("fileUploadResponse",a),h=0;h<b.length;h++){var k=b[h];"string"===typeof a[k]&&(e[k]=a[k])}e.responseData=a;delete e.responseData.fileLoader;!1===g?e.changeStatus("error"):e.changeStatus("uploaded")}}},changeStatus:function(a){this.status=a;if("error"==a||"abort"==a||"loaded"==a||"uploaded"==a)this.abort=function(){};this.fire(a);this.update()},update:function(){this.fire("update")},isFinished:function(){return!!this.status.match(/^(?:loaded|uploaded|error|abort)$/)}};
 CKEDITOR.event.implementOn(b.prototype);CKEDITOR.event.implementOn(h.prototype);var e=/^data:(\S*?);base64,/;CKEDITOR.fileTools||(CKEDITOR.fileTools={});CKEDITOR.tools.extend(CKEDITOR.fileTools,{uploadRepository:b,fileLoader:h,getUploadUrl:function(a,b){var e=CKEDITOR.tools.capitalize;return b&&a[b+"UploadUrl"]?a[b+"UploadUrl"]:a.uploadUrl?a.uploadUrl:b&&a["filebrowser"+e(b,1)+"UploadUrl"]?a["filebrowser"+e(b,1)+"UploadUrl"]+"\x26responseType\x3djson":a.filebrowserUploadUrl?a.filebrowserUploadUrl+
 "\x26responseType\x3djson":null},isTypeSupported:function(a,b){return!!a.type.match(b)},isFileUploadSupported:"function"===typeof FileReader&&"function"===typeof(new FileReader).readAsDataURL&&"function"===typeof FormData&&"function"===typeof(new FormData).append&&"function"===typeof XMLHttpRequest&&"function"===typeof Blob})}(),function(){function b(a,b){var c=[];if(b)for(var d in b)c.push(d+"\x3d"+encodeURIComponent(b[d]));else return a;return a+(-1!=a.indexOf("?")?"\x26":"?")+c.join("\x26")}function h(a){return!a.match(/command=QuickUpload/)||
 a.match(/(\?|&)responseType=json/)?a:b(a,{responseType:"json"})}function f(a){a+="";return a.charAt(0).toUpperCase()+a.substr(1)}function e(){var a=this.getDialog(),c=a.getParentEditor();c._.filebrowserSe=this;var d=c.config["filebrowser"+f(a.getName())+"WindowWidth"]||c.config.filebrowserWindowWidth||"80%",a=c.config["filebrowser"+f(a.getName())+"WindowHeight"]||c.config.filebrowserWindowHeight||"70%",e=this.filebrowser.params||{};e.CKEditor=c.name;e.CKEditorFuncNum=c._.filebrowserFn;e.langCode||
-(e.langCode=c.langCode);e=b(this.filebrowser.url,e);c.popup(e,d,a,c.config.filebrowserWindowFeatures||c.config.fileBrowserWindowFeatures)}function a(a){var b=new CKEDITOR.dom.element(a.$.form);b&&((a=b.$.elements.ckCsrfToken)?a=new CKEDITOR.dom.element(a):(a=new CKEDITOR.dom.element("input"),a.setAttributes({name:"ckCsrfToken",type:"hidden"}),b.append(a)),a.setAttribute("value",CKEDITOR.tools.getCsrfToken()))}function m(){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()?!0:!1}function k(a,c,d){var e=d.params||{};e.CKEditor=a.name;e.CKEditorFuncNum=a._.filebrowserFn;e.langCode||(e.langCode=a.langCode);c.action=b(d.url,e);c.filebrowser=d}function l(b,d,w,p){if(p&&p.length)for(var t,r=p.length;r--;)if(t=p[r],"hbox"!=t.type&&"vbox"!=t.type&&"fieldset"!=t.type||l(b,d,w,t.children),t.filebrowser)if("string"==typeof t.filebrowser&&(t.filebrowser={action:"fileButton"==
-t.type?"QuickUpload":"Browse",target:t.filebrowser}),"Browse"==t.filebrowser.action){var x=t.filebrowser.url;void 0===x&&(x=b.config["filebrowser"+f(d)+"BrowseUrl"],void 0===x&&(x=b.config.filebrowserBrowseUrl));x&&(t.onClick=e,t.filebrowser.url=x,t.hidden=!1)}else if("QuickUpload"==t.filebrowser.action&&t["for"]&&(x=t.filebrowser.url,void 0===x&&(x=b.config["filebrowser"+f(d)+"UploadUrl"],void 0===x&&(x=b.config.filebrowserUploadUrl)),x)){var u=t.onClick;t.onClick=function(d){var e=d.sender,f=e.getDialog().getContentElement(this["for"][0],
-this["for"][1]).getInputElement(),k=CKEDITOR.fileTools&&CKEDITOR.fileTools.isFileUploadSupported;if(u&&!1===u.call(e,d))return!1;if(m.call(e,d)){if("form"!==b.config.filebrowserUploadMethod&&k)return d=b.uploadRepository.create(f.$.files[0]),d.on("uploaded",function(a){var b=a.sender.responseData;g.call(a.sender.editor,b.url,b.message)}),d.on("error",c.bind(this)),d.on("abort",c.bind(this)),d.loadAndUpload(h(x)),"xhr";a(f);return!0}return!1};t.filebrowser.url=x;t.hidden=!1;k(b,w.getContents(t["for"][0]).get(t["for"][1]),
-t.filebrowser)}}function c(a){var b={};try{b=JSON.parse(a.sender.xhr.response)||{}}catch(c){}this.enable();alert(b.error?b.error.message:a.sender.message)}function d(a,b,c){if(-1!==c.indexOf(";")){c=c.split(";");for(var e=0;e<c.length;e++)if(d(a,b,c[e]))return!0;return!1}return(a=a.getContents(b).get(c).filebrowser)&&a.url}function g(a,b){var c=this._.filebrowserSe.getDialog(),d=this._.filebrowserSe["for"],e=this._.filebrowserSe.filebrowser.onSelect;d&&c.getContentElement(d[0],d[1]).reset();if("function"!=
+(e.langCode=c.langCode);e=b(this.filebrowser.url,e);c.popup(e,d,a,c.config.filebrowserWindowFeatures||c.config.fileBrowserWindowFeatures)}function a(a){var b=new CKEDITOR.dom.element(a.$.form);b&&((a=b.$.elements.ckCsrfToken)?a=new CKEDITOR.dom.element(a):(a=new CKEDITOR.dom.element("input"),a.setAttributes({name:"ckCsrfToken",type:"hidden"}),b.append(a)),a.setAttribute("value",CKEDITOR.tools.getCsrfToken()))}function k(){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()?!0:!1}function l(a,c,d){var e=d.params||{};e.CKEditor=a.name;e.CKEditorFuncNum=a._.filebrowserFn;e.langCode||(e.langCode=a.langCode);c.action=b(d.url,e);c.filebrowser=d}function m(b,d,v,p){if(p&&p.length)for(var q,r=p.length;r--;)if(q=p[r],"hbox"!=q.type&&"vbox"!=q.type&&"fieldset"!=q.type||m(b,d,v,q.children),q.filebrowser)if("string"==typeof q.filebrowser&&(q.filebrowser={action:"fileButton"==
+q.type?"QuickUpload":"Browse",target:q.filebrowser}),"Browse"==q.filebrowser.action){var x=q.filebrowser.url;void 0===x&&(x=b.config["filebrowser"+f(d)+"BrowseUrl"],void 0===x&&(x=b.config.filebrowserBrowseUrl));x&&(q.onClick=e,q.filebrowser.url=x,q.hidden=!1)}else if("QuickUpload"==q.filebrowser.action&&q["for"]&&(x=q.filebrowser.url,void 0===x&&(x=b.config["filebrowser"+f(d)+"UploadUrl"],void 0===x&&(x=b.config.filebrowserUploadUrl)),x)){var t=q.onClick;q.onClick=function(d){var e=d.sender,f=e.getDialog().getContentElement(this["for"][0],
+this["for"][1]).getInputElement(),l=CKEDITOR.fileTools&&CKEDITOR.fileTools.isFileUploadSupported;if(t&&!1===t.call(e,d))return!1;if(k.call(e,d)){if("form"!==b.config.filebrowserUploadMethod&&l)return d=b.uploadRepository.create(f.$.files[0]),d.on("uploaded",function(a){var b=a.sender.responseData;g.call(a.sender.editor,b.url,b.message)}),d.on("error",c.bind(this)),d.on("abort",c.bind(this)),d.loadAndUpload(h(x)),"xhr";a(f);return!0}return!1};q.filebrowser.url=x;q.hidden=!1;l(b,v.getContents(q["for"][0]).get(q["for"][1]),
+q.filebrowser)}}function c(a){var b={};try{b=JSON.parse(a.sender.xhr.response)||{}}catch(c){}this.enable();alert(b.error?b.error.message:a.sender.message)}function d(a,b,c){if(-1!==c.indexOf(";")){c=c.split(";");for(var e=0;e<c.length;e++)if(d(a,b,c[e]))return!0;return!1}return(a=a.getContents(b).get(c).filebrowser)&&a.url}function g(a,b){var c=this._.filebrowserSe.getDialog(),d=this._.filebrowserSe["for"],e=this._.filebrowserSe.filebrowser.onSelect;d&&c.getContentElement(d[0],d[1]).reset();if("function"!=
 typeof b||!1!==b.call(this._.filebrowserSe))if(!e||!1!==e.call(this._.filebrowserSe,a,b))if("string"==typeof b&&b&&alert(b),a&&(d=this._.filebrowserSe,c=d.getDialog(),d=d.filebrowser.target||null))if(d=d.split(":"),e=c.getContentElement(d[0],d[1]))e.setValue(a),c.selectPage(d[0])}CKEDITOR.plugins.add("filebrowser",{requires:"popup,filetools",init:function(a){a._.filebrowserFn=CKEDITOR.tools.addFunction(g,a);a.on("destroy",function(){CKEDITOR.tools.removeFunction(this._.filebrowserFn)})}});CKEDITOR.on("dialogDefinition",
-function(a){if(a.editor.plugins.filebrowser)for(var b=a.data.definition,c,e=0;e<b.contents.length;++e)if(c=b.contents[e])l(a.editor,a.data.name,b,c.elements),c.hidden&&c.filebrowser&&(c.hidden=!d(b,c.id,c.filebrowser))})}(),function(){function b(b){var a=b.config,m=b.fire("uiSpace",{space:"top",html:""}).html,k=function(){function d(a,b,e){c.setStyle(b,f(e));c.setStyle("position",a)}function g(a){var b=m.getDocumentPosition();switch(a){case "top":d("absolute","top",b.y-u-v);break;case "pin":d("fixed",
-"top",D);break;case "bottom":d("absolute","top",b.y+(r.height||r.bottom-r.top)+v)}l=a}var l,m,t,r,x,u,z,q=a.floatSpaceDockedOffsetX||0,v=a.floatSpaceDockedOffsetY||0,B=a.floatSpacePinnedOffsetX||0,D=a.floatSpacePinnedOffsetY||0;return function(d){if(m=b.editable()){var n=d&&"focus"==d.name;n&&c.show();b.fire("floatingSpaceLayout",{show:n});c.removeStyle("left");c.removeStyle("right");t=c.getClientRect();r=m.getClientRect();x=h.getViewPaneSize();u=t.height;z="pageXOffset"in h.$?h.$.pageXOffset:CKEDITOR.document.$.documentElement.scrollLeft;
-l?(u+v<=r.top?g("top"):u+v>x.height-r.bottom?g("pin"):g("bottom"),d=x.width/2,d=a.floatSpacePreferRight?"right":0<r.left&&r.right<x.width&&r.width>t.width?"rtl"==a.contentsLangDirection?"right":"left":d-r.left>r.right-d?"left":"right",t.width>x.width?(d="left",n=0):(n="left"==d?0<r.left?r.left:0:r.right<x.width?x.width-r.right:0,n+t.width>x.width&&(d="left"==d?"right":"left",n=0)),c.setStyle(d,f(("pin"==l?B:q)+n+("pin"==l?0:"left"==d?z:-z)))):(l="pin",g("pin"),k(d))}}}();if(m){var l=new CKEDITOR.template('\x3cdiv id\x3d"cke_{name}" class\x3d"cke {id} cke_reset_all cke_chrome cke_editor_{name} cke_float cke_{langDir} '+
-CKEDITOR.env.cssClass+'" dir\x3d"{langDir}" title\x3d"'+(CKEDITOR.env.gecko?" ":"")+'" lang\x3d"{langCode}" role\x3d"application" style\x3d"{style}"'+(b.title?' aria-labelledby\x3d"cke_{name}_arialbl"':" ")+"\x3e"+(b.title?'\x3cspan id\x3d"cke_{name}_arialbl" class\x3d"cke_voice_label"\x3e{voiceLabel}\x3c/span\x3e':" ")+'\x3cdiv class\x3d"cke_inner"\x3e\x3cdiv id\x3d"{topId}" class\x3d"cke_top" role\x3d"presentation"\x3e{content}\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e'),c=CKEDITOR.document.getBody().append(CKEDITOR.dom.element.createFromHtml(l.output({content:m,
-id:b.id,langDir:b.lang.dir,langCode:b.langCode,name:b.name,style:"display:none;z-index:"+(a.baseFloatZIndex-1),topId:b.ui.spaceId("top"),voiceLabel:b.title}))),d=CKEDITOR.tools.eventsBuffer(500,k),g=CKEDITOR.tools.eventsBuffer(100,k);c.unselectable();c.on("mousedown",function(a){a=a.data;a.getTarget().hasAscendant("a",1)||a.preventDefault()});b.on("focus",function(a){k(a);b.on("change",d.input);h.on("scroll",g.input);h.on("resize",g.input)});b.on("blur",function(){c.hide();b.removeListener("change",
+function(a){if(a.editor.plugins.filebrowser)for(var b=a.data.definition,c,e=0;e<b.contents.length;++e)if(c=b.contents[e])m(a.editor,a.data.name,b,c.elements),c.hidden&&c.filebrowser&&(c.hidden=!d(b,c.id,c.filebrowser))})}(),function(){function b(b){var a=b.config,k=b.fire("uiSpace",{space:"top",html:""}).html,l=function(){function d(a,b,e){c.setStyle(b,f(e));c.setStyle("position",a)}function g(a){var b=m.getDocumentPosition();switch(a){case "top":d("absolute","top",b.y-t-w);break;case "pin":d("fixed",
+"top",C);break;case "bottom":d("absolute","top",b.y+(r.height||r.bottom-r.top)+w)}k=a}var k,m,q,r,x,t,z,u=a.floatSpaceDockedOffsetX||0,w=a.floatSpaceDockedOffsetY||0,B=a.floatSpacePinnedOffsetX||0,C=a.floatSpacePinnedOffsetY||0;return function(d){if(m=b.editable()){var n=d&&"focus"==d.name;n&&c.show();b.fire("floatingSpaceLayout",{show:n});c.removeStyle("left");c.removeStyle("right");q=c.getClientRect();r=m.getClientRect();x=h.getViewPaneSize();t=q.height;z="pageXOffset"in h.$?h.$.pageXOffset:CKEDITOR.document.$.documentElement.scrollLeft;
+k?(t+w<=r.top?g("top"):t+w>x.height-r.bottom?g("pin"):g("bottom"),d=x.width/2,d=a.floatSpacePreferRight?"right":0<r.left&&r.right<x.width&&r.width>q.width?"rtl"==a.contentsLangDirection?"right":"left":d-r.left>r.right-d?"left":"right",q.width>x.width?(d="left",n=0):(n="left"==d?0<r.left?r.left:0:r.right<x.width?x.width-r.right:0,n+q.width>x.width&&(d="left"==d?"right":"left",n=0)),c.setStyle(d,f(("pin"==k?B:u)+n+("pin"==k?0:"left"==d?z:-z)))):(k="pin",g("pin"),l(d))}}}();if(k){var m=new CKEDITOR.template('\x3cdiv id\x3d"cke_{name}" class\x3d"cke {id} cke_reset_all cke_chrome cke_editor_{name} cke_float cke_{langDir} '+
+CKEDITOR.env.cssClass+'" dir\x3d"{langDir}" title\x3d"'+(CKEDITOR.env.gecko?" ":"")+'" lang\x3d"{langCode}" role\x3d"application" style\x3d"{style}"'+(b.title?' aria-labelledby\x3d"cke_{name}_arialbl"':" ")+"\x3e"+(b.title?'\x3cspan id\x3d"cke_{name}_arialbl" class\x3d"cke_voice_label"\x3e{voiceLabel}\x3c/span\x3e':" ")+'\x3cdiv class\x3d"cke_inner"\x3e\x3cdiv id\x3d"{topId}" class\x3d"cke_top" role\x3d"presentation"\x3e{content}\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e'),c=CKEDITOR.document.getBody().append(CKEDITOR.dom.element.createFromHtml(m.output({content:k,
+id:b.id,langDir:b.lang.dir,langCode:b.langCode,name:b.name,style:"display:none;z-index:"+(a.baseFloatZIndex-1),topId:b.ui.spaceId("top"),voiceLabel:b.title}))),d=CKEDITOR.tools.eventsBuffer(500,l),g=CKEDITOR.tools.eventsBuffer(100,l);c.unselectable();c.on("mousedown",function(a){a=a.data;a.getTarget().hasAscendant("a",1)||a.preventDefault()});b.on("focus",function(a){l(a);b.on("change",d.input);h.on("scroll",g.input);h.on("resize",g.input)});b.on("blur",function(){c.hide();b.removeListener("change",
 d.input);h.removeListener("scroll",g.input);h.removeListener("resize",g.input)});b.on("destroy",function(){h.removeListener("scroll",g.input);h.removeListener("resize",g.input);c.clearCustomData();c.remove()});b.focusManager.hasFocus&&c.show();b.focusManager.add(c,1)}}var h=CKEDITOR.document.getWindow(),f=CKEDITOR.tools.cssLength;CKEDITOR.plugins.add("floatingspace",{init:function(e){e.on("loaded",function(){b(this)},null,null,20)}})}(),CKEDITOR.plugins.add("listblock",{requires:"panel",onLoad:function(){var b=
 CKEDITOR.addTemplate("panel-list",'\x3cul role\x3d"presentation" class\x3d"cke_panel_list"\x3e{items}\x3c/ul\x3e'),h=CKEDITOR.addTemplate("panel-list-item",'\x3cli id\x3d"{id}" class\x3d"cke_panel_listItem" role\x3dpresentation\x3e\x3ca id\x3d"{id}_option" _cke_focus\x3d1 hidefocus\x3dtrue title\x3d"{title}" draggable\x3d"false" ondragstart\x3d"return false;" href\x3d"javascript:void(\'{val}\')"  onclick\x3d"{onclick}CKEDITOR.tools.callFunction({clickFn},\'{val}\'); return false;" role\x3d"option"\x3e{text}\x3c/a\x3e\x3c/li\x3e'),
 f=CKEDITOR.addTemplate("panel-list-group",'\x3ch1 id\x3d"{id}" draggable\x3d"false" ondragstart\x3d"return false;" class\x3d"cke_panel_grouptitle" role\x3d"presentation" \x3e{label}\x3c/h1\x3e'),e=/\'/g;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){b=b||{};var e=b.attributes||(b.attributes={});(this.multiSelect=!!b.multiSelect)&&
 (e["aria-multiselectable"]=!0);!e.role&&(e.role="listbox");this.base.apply(this,arguments);this.element.setAttribute("role",e.role);e=this.keys;e[40]="next";e[9]="next";e[38]="prev";e[CKEDITOR.SHIFT+9]="prev";e[32]=CKEDITOR.env.ie?"mouseup":"click";CKEDITOR.env.ie&&(e[13]="mouseup");this._.pendingHtml=[];this._.pendingList=[];this._.items={};this._.groups={}},_:{close:function(){if(this._.started){var a=b.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,f){var l=CKEDITOR.tools.getNextId();this._.started||(this._.started=1,this._.size=this._.size||0);this._.items[a]=l;var c;c=CKEDITOR.tools.htmlEncodeAttr(a).replace(e,"\\'");a={id:l,val:c,onclick:CKEDITOR.env.ie?'return false;" onmouseup\x3d"CKEDITOR.tools.getMouseButton(event)\x3d\x3d\x3dCKEDITOR.MOUSE_BUTTON_LEFT\x26\x26':
+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,f){var m=CKEDITOR.tools.getNextId();this._.started||(this._.started=1,this._.size=this._.size||0);this._.items[a]=m;var c;c=CKEDITOR.tools.htmlEncodeAttr(a).replace(e,"\\'");a={id:m,val:c,onclick:CKEDITOR.env.ie?'return false;" onmouseup\x3d"CKEDITOR.tools.getMouseButton(event)\x3d\x3d\x3dCKEDITOR.MOUSE_BUTTON_LEFT\x26\x26':
 "",clickFn:this._.getClick(),title:CKEDITOR.tools.htmlEncodeAttr(f||a),text:b||a};this._.pendingList.push(h.output(a))},startGroup:function(a){this._.close();var b=CKEDITOR.tools.getNextId();this._.groups[a]=b;this._.pendingHtml.push(f.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,e=this.element.getDocument(),f;for(f in a)e.getById(a[f]).setStyle("display","");for(var c in b)a=e.getById(b[c]),f=a.getNext(),a.setStyle("display",""),f&&"ul"==f.getName()&&f.setStyle("display",
 "")},mark:function(a){this.multiSelect||this.unmarkAll();a=this._.items[a];var 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)},markFirstDisplayed:function(){var a=this;this._.markFirstDisplayed(function(){a.multiSelect||a.unmarkAll()})},unmark:function(a){var b=this.element.getDocument();a=this._.items[a];var e=b.getById(a);e.removeClass("cke_selected");b.getById(a+"_option").removeAttribute("aria-selected");
@@ -854,15 +863,15 @@ b.getItem(++f);){if(a.equals(e)){this._.focusIndex=f;break}}else this.element.fo
 (CKEDITOR.env.gecko&&!CKEDITOR.env.hc?"":" href\x3d\"javascript:void('{titleJs}')\"")+' hidefocus\x3d"true" role\x3d"button" aria-labelledby\x3d"{id}_label" aria-haspopup\x3d"listbox"',h="";CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(b+=' onkeypress\x3d"return false;"');CKEDITOR.env.gecko&&(b+=' onblur\x3d"this.style.cssText \x3d this.style.cssText;"');CKEDITOR.env.ie&&(h='return false;" onmouseup\x3d"CKEDITOR.tools.getMouseButton(event)\x3d\x3dCKEDITOR.MOUSE_BUTTON_LEFT\x26\x26');var b=b+(' onkeydown\x3d"return CKEDITOR.tools.callFunction({keydownFn},event,this);" onfocus\x3d"return CKEDITOR.tools.callFunction({focusFn},event);" onclick\x3d"'+
 h+'CKEDITOR.tools.callFunction({clickFn},this);return false;"\x3e\x3cspan id\x3d"{id}_text" class\x3d"cke_combo_text cke_combo_inlinelabel"\x3e{label}\x3c/span\x3e\x3cspan class\x3d"cke_combo_open"\x3e\x3cspan class\x3d"cke_combo_arrow"\x3e'+(CKEDITOR.env.hc?"\x26#9660;":CKEDITOR.env.air?"\x26nbsp;":"")+"\x3c/span\x3e\x3c/span\x3e\x3c/a\x3e\x3c/span\x3e"),f=CKEDITOR.addTemplate("combo",b);CKEDITOR.UI_RICHCOMBO="richcombo";CKEDITOR.ui.richCombo=CKEDITOR.tools.createClass({$:function(b){CKEDITOR.tools.extend(this,
 b,{canGroup:!1,title:b.label,modes:{wysiwyg:1},editorFocus:1});b=this.panel||{};delete this.panel;this.id=CKEDITOR.tools.getNextNumber();this.document=b.parent&&b.parent.getDocument()||CKEDITOR.document;b.className="cke_combopanel";b.block={multiSelect:b.multiSelect,attributes:b.attributes};b.toolbarRelated=!0;this._={panelDefinition:b,items:{},listeners:[]}},proto:{renderHtml:function(b){var a=[];this.render(b,a);return a.join("")},render:function(b,a){function h(){if(this.getState()!=CKEDITOR.TRISTATE_ON){var a=
-this.modes[b.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED;b.readOnly&&!this.readOnly&&(a=CKEDITOR.TRISTATE_DISABLED);this.setState(a);this.setValue("");a!=CKEDITOR.TRISTATE_DISABLED&&this.refresh&&this.refresh()}}var k=CKEDITOR.env,l,c,d="cke_"+this.id,g=CKEDITOR.tools.addFunction(function(a){c&&(b.unlockSelection(1),c=0);l.execute(a)},this),n=this;l={id:d,combo:this,focus:function(){CKEDITOR.document.getById(d).getChild(1).focus()},execute:function(a){var c=n._;if(c.state!=CKEDITOR.TRISTATE_DISABLED)if(n.createPanel(b),
+this.modes[b.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED;b.readOnly&&!this.readOnly&&(a=CKEDITOR.TRISTATE_DISABLED);this.setState(a);this.setValue("");a!=CKEDITOR.TRISTATE_DISABLED&&this.refresh&&this.refresh()}}var l=CKEDITOR.env,m,c,d="cke_"+this.id,g=CKEDITOR.tools.addFunction(function(a){c&&(b.unlockSelection(1),c=0);m.execute(a)},this),n=this;m={id:d,combo:this,focus:function(){CKEDITOR.document.getById(d).getChild(1).focus()},execute:function(a){var c=n._;if(c.state!=CKEDITOR.TRISTATE_DISABLED)if(n.createPanel(b),
 c.on)c.panel.hide();else{n.commit();var d=n.getValue();d?c.list.mark(d):c.list.unmarkAll();c.panel.showBlock(n.id,new CKEDITOR.dom.element(a),4)}},clickFn:g};this._.listeners.push(b.on("activeFilterChange",h,this));this._.listeners.push(b.on("mode",h,this));this._.listeners.push(b.on("selectionChange",h,this));!this.readOnly&&this._.listeners.push(b.on("readOnly",h,this));var y=CKEDITOR.tools.addFunction(function(a,b){a=new CKEDITOR.dom.event(a);var c=a.getKeystroke();switch(c){case 13:case 32:case 40:CKEDITOR.tools.callFunction(g,
-b);break;default:l.onkey(l,c)}a.preventDefault()}),w=CKEDITOR.tools.addFunction(function(){l.onfocus&&l.onfocus()});c=0;l.keyDownFn=y;k={id:d,name:this.name||this.command,label:this.label,title:this.title,cls:this.className||"",titleJs:k.gecko&&!k.hc?"":(this.title||"").replace("'",""),keydownFn:y,focusFn:w,clickFn:g};f.output(k,a);if(this.onRender)this.onRender();return l},createPanel:function(b){if(!this._.panel){var a=this._.panelDefinition,f=this._.panelDefinition.block,h=a.parent||CKEDITOR.document.getBody(),
-l="cke_combopanel__"+this.name,c=new CKEDITOR.ui.floatPanel(b,h,a),a=c.addListBlock(this.id,f),d=this;c.onShow=function(){this.element.addClass(l);d.setState(CKEDITOR.TRISTATE_ON);d._.on=1;d.editorFocus&&!b.focusManager.hasFocus&&b.focus();if(d.onOpen)d.onOpen()};c.onHide=function(a){this.element.removeClass(l);d.setState(d.modes&&d.modes[b.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);d._.on=0;if(!a&&d.onClose)d.onClose()};c.onEscape=function(){c.hide(1)};a.onClick=function(a,b){d.onClick&&
+b);break;default:m.onkey(m,c)}a.preventDefault()}),v=CKEDITOR.tools.addFunction(function(){m.onfocus&&m.onfocus()});c=0;m.keyDownFn=y;l={id:d,name:this.name||this.command,label:this.label,title:this.title,cls:this.className||"",titleJs:l.gecko&&!l.hc?"":(this.title||"").replace("'",""),keydownFn:y,focusFn:v,clickFn:g};f.output(l,a);if(this.onRender)this.onRender();return m},createPanel:function(b){if(!this._.panel){var a=this._.panelDefinition,f=this._.panelDefinition.block,h=a.parent||CKEDITOR.document.getBody(),
+m="cke_combopanel__"+this.name,c=new CKEDITOR.ui.floatPanel(b,h,a),a=c.addListBlock(this.id,f),d=this;c.onShow=function(){this.element.addClass(m);d.setState(CKEDITOR.TRISTATE_ON);d._.on=1;d.editorFocus&&!b.focusManager.hasFocus&&b.focus();if(d.onOpen)d.onOpen()};c.onHide=function(a){this.element.removeClass(m);d.setState(d.modes&&d.modes[b.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);d._.on=0;if(!a&&d.onClose)d.onClose()};c.onEscape=function(){c.hide(1)};a.onClick=function(a,b){d.onClick&&
 d.onClick.call(d,a,b);c.hide()};this._.panel=c;this._.list=a;c.getBlock(this.id).onHide=function(){d._.on=0;d.setState(CKEDITOR.TRISTATE_OFF)};this.init&&this.init()}},setValue:function(b,a){this._.value=b;var f=this.document.getById("cke_"+this.id+"_text");f&&(b||a?f.removeClass("cke_combo_inlinelabel"):(a=this.label,f.addClass("cke_combo_inlinelabel")),f.setText("undefined"!=typeof a?a:b));var f="undefined"!=typeof a?a:b,h=this.label,f=f===h?f:f+", "+h;(h=this.document.getById("cke_"+this.id+"_label"))&&
 h.setText(f)},getValue:function(){return this._.value||""},unmarkAll:function(){this._.list.unmarkAll()},mark:function(b){this._.list.mark(b)},hideItem:function(b){this._.list.hideItem(b)},hideGroup:function(b){this._.list.hideGroup(b)},showAll:function(){this._.list.showAll()},add:function(b,a,f){this._.items[b]=f||b;this._.list.add(b,a,f)},startGroup:function(b){this._.list.startGroup(b)},commit:function(){this._.committed||(this._.list.commit(),this._.committed=1,CKEDITOR.ui.fire("ready",this));
 this._.committed=1},setState:function(b){if(this._.state!=b){var a=this.document.getById("cke_"+this.id),f=a.getElementsByTag("a").getItem(0);a.setState(b,"cke_combo");b==CKEDITOR.TRISTATE_DISABLED?a.setAttribute("aria-disabled",!0):a.removeAttribute("aria-disabled");f&&f.setAttribute("aria-expanded",b==CKEDITOR.TRISTATE_ON);this._.state=b}},getState:function(){return this._.state},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))},destroy:function(){CKEDITOR.tools.array.forEach(this._.listeners,function(b){b.removeListener()});this._.listeners=[]},select:function(b){if(!CKEDITOR.tools.isEmpty(this._.items))for(var a in this._.items)if(b({value:a,text:this._.items[a]})){this.setValue(a);break}}},statics:{handler:{create:function(b){return new CKEDITOR.ui.richCombo(b)}}}});CKEDITOR.ui.prototype.addRichCombo=function(b,a){this.add(b,
-CKEDITOR.UI_RICHCOMBO,a)}}(),CKEDITOR.plugins.add("format",{requires:"richcombo",init:function(b){if(!b.blockless){for(var h=b.config,f=b.lang.format,e=h.format_tags.split(";"),a={},m=0,k=[],l=0;l<e.length;l++){var c=e[l],d=new CKEDITOR.style(h["format_"+c]);if(!b.filter.customConfig||b.filter.check(d))m++,a[c]=d,a[c]._.enterMode=b.config.enterMode,k.push(d)}0!==m&&b.ui.addRichCombo("Format",{label:f.label,title:f.panelTitle,toolbar:"styles,20",allowedContent:k,panel:{css:[CKEDITOR.skin.getPath("editor")].concat(h.contentsCss),
+CKEDITOR.UI_RICHCOMBO,a)}}(),CKEDITOR.plugins.add("format",{requires:"richcombo",init:function(b){if(!b.blockless){for(var h=b.config,f=b.lang.format,e=h.format_tags.split(";"),a={},k=0,l=[],m=0;m<e.length;m++){var c=e[m],d=new CKEDITOR.style(h["format_"+c]);if(!b.filter.customConfig||b.filter.check(d))k++,a[c]=d,a[c]._.enterMode=b.config.enterMode,l.push(d)}0!==k&&b.ui.addRichCombo("Format",{label:f.label,title:f.panelTitle,toolbar:"styles,20",allowedContent:l,panel:{css:[CKEDITOR.skin.getPath("editor")].concat(h.contentsCss),
 multiSelect:!1,attributes:{"aria-label":f.panelTitle}},init:function(){this.startGroup(f.panelTitle);for(var b in a){var c=f["tag_"+b];this.add(b,a[b].buildPreview(c),c)}},onClick:function(c){b.focus();b.fire("saveSnapshot");c=a[c];var d=b.elementPath();b.fire("stylesRemove",{type:CKEDITOR.STYLE_BLOCK});c.checkActive(d,b)||b.applyStyle(c);setTimeout(function(){b.fire("saveSnapshot")},0)},onRender:function(){b.on("selectionChange",function(c){var d=this.getValue();c=c.data.path;this.refresh();for(var e in a)if(a[e].checkActive(c,
 b)){e!=d&&this.setValue(e,b.lang.format["tag_"+e]);return}this.setValue("")},this)},onOpen:function(){this.showAll();for(var c in a)b.activeFilter.check(a[c])||this.hideItem(c)},refresh:function(){var c=b.elementPath();if(c){if(c.isContextFor("p"))for(var d in a)if(b.activeFilter.check(a[d]))return;this.setState(CKEDITOR.TRISTATE_DISABLED)}}})}}}),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"},function(){var b={canUndo:!1,exec:function(b){var f=b.document.createElement("hr");b.insertElement(f)},allowedContent:"hr",requiredContent:"hr"};CKEDITOR.plugins.add("horizontalrule",{init:function(h){h.blockless||
@@ -873,10 +882,10 @@ f.breakAfterClose&&(this._.needsSpace=f.needsSpace)):(this._.output.push("\x3e")
 this._.indent?this.indentation():h&&h.breakBeforeClose&&(this.lineBreak(),this.indentation());this._.output.push("\x3c/",b,"\x3e");"pre"==b&&(this._.inPre=0);h&&h.breakAfterClose&&(this.lineBreak(),this._.needsSpace=h.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("\x3c!--",b,"--\x3e")},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;this._.needsSpace=0},setRules:function(b,h){var f=this._.rules[b];f?CKEDITOR.tools.extend(f,h,!0):this._.rules[b]=h}}}),"use strict",function(){function b(a,b){CKEDITOR.tools.extend(this,{editor:a,editable:a.editable(),
 doc:a.document,win:a.window},b,!0);this.inline=this.editable.isInline();this.inline||(this.frame=this.win.getFrame());this.target=this[this.inline?"editable":"doc"]}function h(a,b){CKEDITOR.tools.extend(this,b,{editor:a},!0)}function f(b,d){var e=b.editable();CKEDITOR.tools.extend(this,{editor:b,editable:e,inline:e.isInline(),doc:b.document,win:b.window,container:CKEDITOR.document.getBody(),winTop:CKEDITOR.document.getWindow()},d,!0);this.hidden={};this.visible={};this.inline||(this.frame=this.win.getFrame());
-this.queryViewport();var f=CKEDITOR.tools.bind(this.queryViewport,this),h=CKEDITOR.tools.bind(this.hideVisible,this),k=CKEDITOR.tools.bind(this.removeAll,this);e.attachListener(this.winTop,"resize",f);e.attachListener(this.winTop,"scroll",f);e.attachListener(this.winTop,"resize",h);e.attachListener(this.win,"scroll",h);e.attachListener(this.inline?e:this.frame,"mouseout",function(a){var b=a.data.$.clientX;a=a.data.$.clientY;this.queryViewport();(b<=this.rect.left||b>=this.rect.right||a<=this.rect.top||
-a>=this.rect.bottom)&&this.hideVisible();(0>=b||b>=this.winTopPane.width||0>=a||a>=this.winTopPane.height)&&this.hideVisible()},this);e.attachListener(b,"resize",f);e.attachListener(b,"mode",k);b.on("destroy",k);this.lineTpl=(new CKEDITOR.template('\x3cdiv data-cke-lineutils-line\x3d"1" class\x3d"cke_reset_all" style\x3d"{lineStyle}"\x3e\x3cspan style\x3d"{tipLeftStyle}"\x3e\x26nbsp;\x3c/span\x3e\x3cspan style\x3d"{tipRightStyle}"\x3e\x26nbsp;\x3c/span\x3e\x3c/div\x3e')).output({lineStyle:CKEDITOR.tools.writeCssText(CKEDITOR.tools.extend({},
-m,this.lineStyle,!0)),tipLeftStyle:CKEDITOR.tools.writeCssText(CKEDITOR.tools.extend({},a,{left:"0px","border-left-color":"red","border-width":"6px 0 6px 6px"},this.tipCss,this.tipLeftStyle,!0)),tipRightStyle:CKEDITOR.tools.writeCssText(CKEDITOR.tools.extend({},a,{right:"0px","border-right-color":"red","border-width":"6px 6px 6px 0"},this.tipCss,this.tipRightStyle,!0))})}function e(a){var b;if(b=a&&a.type==CKEDITOR.NODE_ELEMENT)b=!(k[a.getComputedStyle("float")]||k[a.getAttribute("align")]);return b&&
-!l[a.getComputedStyle("position")]}CKEDITOR.plugins.add("lineutils");CKEDITOR.LINEUTILS_BEFORE=1;CKEDITOR.LINEUTILS_AFTER=2;CKEDITOR.LINEUTILS_INSIDE=4;b.prototype={start:function(a){var b=this,e=this.editor,f=this.doc,h,k,l,m,r=CKEDITOR.tools.eventsBuffer(50,function(){e.readOnly||"wysiwyg"!=e.mode||(b.relations={},(k=f.$.elementFromPoint(l,m))&&k.nodeType&&(h=new CKEDITOR.dom.element(k),b.traverseSearch(h),isNaN(l+m)||b.pixelSearch(h,l,m),a&&a(b.relations,l,m)))});this.listener=this.editable.attachListener(this.target,
+this.queryViewport();var f=CKEDITOR.tools.bind(this.queryViewport,this),h=CKEDITOR.tools.bind(this.hideVisible,this),l=CKEDITOR.tools.bind(this.removeAll,this);e.attachListener(this.winTop,"resize",f);e.attachListener(this.winTop,"scroll",f);e.attachListener(this.winTop,"resize",h);e.attachListener(this.win,"scroll",h);e.attachListener(this.inline?e:this.frame,"mouseout",function(a){var b=a.data.$.clientX;a=a.data.$.clientY;this.queryViewport();(b<=this.rect.left||b>=this.rect.right||a<=this.rect.top||
+a>=this.rect.bottom)&&this.hideVisible();(0>=b||b>=this.winTopPane.width||0>=a||a>=this.winTopPane.height)&&this.hideVisible()},this);e.attachListener(b,"resize",f);e.attachListener(b,"mode",l);b.on("destroy",l);this.lineTpl=(new CKEDITOR.template('\x3cdiv data-cke-lineutils-line\x3d"1" class\x3d"cke_reset_all" style\x3d"{lineStyle}"\x3e\x3cspan style\x3d"{tipLeftStyle}"\x3e\x26nbsp;\x3c/span\x3e\x3cspan style\x3d"{tipRightStyle}"\x3e\x26nbsp;\x3c/span\x3e\x3c/div\x3e')).output({lineStyle:CKEDITOR.tools.writeCssText(CKEDITOR.tools.extend({},
+k,this.lineStyle,!0)),tipLeftStyle:CKEDITOR.tools.writeCssText(CKEDITOR.tools.extend({},a,{left:"0px","border-left-color":"red","border-width":"6px 0 6px 6px"},this.tipCss,this.tipLeftStyle,!0)),tipRightStyle:CKEDITOR.tools.writeCssText(CKEDITOR.tools.extend({},a,{right:"0px","border-right-color":"red","border-width":"6px 6px 6px 0"},this.tipCss,this.tipRightStyle,!0))})}function e(a){var b;if(b=a&&a.type==CKEDITOR.NODE_ELEMENT)b=!(l[a.getComputedStyle("float")]||l[a.getAttribute("align")]);return b&&
+!m[a.getComputedStyle("position")]}CKEDITOR.plugins.add("lineutils");CKEDITOR.LINEUTILS_BEFORE=1;CKEDITOR.LINEUTILS_AFTER=2;CKEDITOR.LINEUTILS_INSIDE=4;b.prototype={start:function(a){var b=this,e=this.editor,f=this.doc,h,k,l,m,r=CKEDITOR.tools.eventsBuffer(50,function(){e.readOnly||"wysiwyg"!=e.mode||(b.relations={},(k=f.$.elementFromPoint(l,m))&&k.nodeType&&(h=new CKEDITOR.dom.element(k),b.traverseSearch(h),isNaN(l+m)||b.pixelSearch(h,l,m),a&&a(b.relations,l,m)))});this.listener=this.editable.attachListener(this.target,
 "mousemove",function(a){l=a.data.$.clientX;m=a.data.$.clientY;r.input()});this.editable.attachListener(this.inline?this.editable:this.frame,"mouseout",function(){r.reset()})},stop:function(){this.listener&&this.listener.removeListener()},getRange:function(){var a={};a[CKEDITOR.LINEUTILS_BEFORE]=CKEDITOR.POSITION_BEFORE_START;a[CKEDITOR.LINEUTILS_AFTER]=CKEDITOR.POSITION_AFTER_END;a[CKEDITOR.LINEUTILS_INSIDE]=CKEDITOR.POSITION_AFTER_START;return function(b){var e=this.editor.createRange();e.moveToPosition(this.relations[b.uid].element,
 a[b.type]);return e}}(),store:function(){function a(b,c,e){var f=b.getUniqueId();f in e?e[f].type|=c:e[f]={element:b,type:c}}return function(b,g){var f;g&CKEDITOR.LINEUTILS_AFTER&&e(f=b.getNext())&&f.isVisible()&&(a(f,CKEDITOR.LINEUTILS_BEFORE,this.relations),g^=CKEDITOR.LINEUTILS_AFTER);g&CKEDITOR.LINEUTILS_INSIDE&&e(f=b.getFirst())&&f.isVisible()&&(a(f,CKEDITOR.LINEUTILS_BEFORE,this.relations),g^=CKEDITOR.LINEUTILS_INSIDE);a(b,g,this.relations)}}(),traverseSearch:function(a){var b,g,f;do if(f=a.$["data-cke-expando"],
 !(f&&f in this.relations)){if(a.equals(this.editable))break;if(e(a))for(b in this.lookups)(g=this.lookups[b](a))&&this.store(a,g)}while((!a||a.type!=CKEDITOR.NODE_ELEMENT||"true"!=a.getAttribute("contenteditable"))&&(a=a.getParent()))},pixelSearch:function(){function a(c,f,h,k,l){for(var m=0,r;l(h);){h+=k;if(25==++m)break;if(r=this.doc.$.elementFromPoint(f,h))if(r==c)m=0;else if(b(c,r)&&(m=0,e(r=new CKEDITOR.dom.element(r))))return r}}var b=CKEDITOR.env.ie||CKEDITOR.env.webkit?function(a,b){return a.contains(b)}:
@@ -884,230 +893,233 @@ function(a,b){return!!(a.compareDocumentPosition(b)&16)};return function(b,d,f){
 greedySearch:function(){this.relations={};for(var a=this.editable.getElementsByTag("*"),b=0,g,f,h;g=a.getItem(b++);)if(!g.equals(this.editable)&&g.type==CKEDITOR.NODE_ELEMENT&&(g.hasAttribute("contenteditable")||!g.isReadOnly())&&e(g)&&g.isVisible())for(h in this.lookups)(f=this.lookups[h](g))&&this.store(g,f);return this.relations}};h.prototype={locate:function(){function a(b,c){var f=b.element[c===CKEDITOR.LINEUTILS_BEFORE?"getPrevious":"getNext"]();return f&&e(f)?(b.siblingRect=f.getClientRect(),
 c==CKEDITOR.LINEUTILS_BEFORE?(b.siblingRect.bottom+b.elementRect.top)/2:(b.elementRect.bottom+b.siblingRect.top)/2):c==CKEDITOR.LINEUTILS_BEFORE?b.elementRect.top:b.elementRect.bottom}return function(b){var e;this.locations={};for(var f in b)e=b[f],e.elementRect=e.element.getClientRect(),e.type&CKEDITOR.LINEUTILS_BEFORE&&this.store(f,CKEDITOR.LINEUTILS_BEFORE,a(e,CKEDITOR.LINEUTILS_BEFORE)),e.type&CKEDITOR.LINEUTILS_AFTER&&this.store(f,CKEDITOR.LINEUTILS_AFTER,a(e,CKEDITOR.LINEUTILS_AFTER)),e.type&
 CKEDITOR.LINEUTILS_INSIDE&&this.store(f,CKEDITOR.LINEUTILS_INSIDE,(e.elementRect.top+e.elementRect.bottom)/2);return this.locations}}(),sort:function(){var a,b,e,f;return function(h,k){a=this.locations;b=[];for(var l in a)for(var m in a[l])if(e=Math.abs(h-a[l][m]),b.length){for(f=0;f<b.length;f++)if(e<b[f].dist){b.splice(f,0,{uid:+l,type:m,dist:e});break}f==b.length&&b.push({uid:+l,type:m,dist:e})}else b.push({uid:+l,type:m,dist:e});return"undefined"!=typeof k?b.slice(0,k):b}}(),store:function(a,
-b,e){this.locations[a]||(this.locations[a]={});this.locations[a][b]=e}};var a={display:"block",width:"0px",height:"0px","border-color":"transparent","border-style":"solid",position:"absolute",top:"-6px"},m={height:"0px","border-top":"1px dashed red",position:"absolute","z-index":9999};f.prototype={removeAll:function(){for(var a in this.hidden)this.hidden[a].remove(),delete this.hidden[a];for(a in this.visible)this.visible[a].remove(),delete this.visible[a]},hideLine:function(a){var b=a.getUniqueId();
+b,e){this.locations[a]||(this.locations[a]={});this.locations[a][b]=e}};var a={display:"block",width:"0px",height:"0px","border-color":"transparent","border-style":"solid",position:"absolute",top:"-6px"},k={height:"0px","border-top":"1px dashed red",position:"absolute","z-index":9999};f.prototype={removeAll:function(){for(var a in this.hidden)this.hidden[a].remove(),delete this.hidden[a];for(a in this.visible)this.visible[a].remove(),delete this.visible[a]},hideLine:function(a){var b=a.getUniqueId();
 a.hide();this.hidden[b]=a;delete this.visible[b]},showLine:function(a){var b=a.getUniqueId();a.show();this.visible[b]=a;delete this.hidden[b]},hideVisible:function(){for(var a in this.visible)this.hideLine(this.visible[a])},placeLine:function(a,b){var e,f,h;if(e=this.getStyle(a.uid,a.type)){for(h in this.visible)if(this.visible[h].getCustomData("hash")!==this.hash){f=this.visible[h];break}if(!f)for(h in this.hidden)if(this.hidden[h].getCustomData("hash")!==this.hash){this.showLine(f=this.hidden[h]);
 break}f||this.showLine(f=this.addLine());f.setCustomData("hash",this.hash);this.visible[f.getUniqueId()]=f;f.setStyles(e);b&&b(f)}},getStyle:function(a,b){var e=this.relations[a],f=this.locations[a][b],h={};h.width=e.siblingRect?Math.max(e.siblingRect.width,e.elementRect.width):e.elementRect.width;h.top=this.inline?f+this.winTopScroll.y-this.rect.relativeY:this.rect.top+this.winTopScroll.y+f;if(h.top-this.winTopScroll.y<this.rect.top||h.top-this.winTopScroll.y>this.rect.bottom)return!1;this.inline?
 h.left=e.elementRect.left-this.rect.relativeX:(0<e.elementRect.left?h.left=this.rect.left+e.elementRect.left:(h.width+=e.elementRect.left,h.left=this.rect.left),0<(e=h.left+h.width-(this.rect.left+this.winPane.width))&&(h.width-=e));h.left+=this.winTopScroll.x;for(var k in h)h[k]=CKEDITOR.tools.cssLength(h[k]);return h},addLine:function(){var a=CKEDITOR.dom.element.createFromHtml(this.lineTpl);a.appendTo(this.container);return a},prepare:function(a,b){this.relations=a;this.locations=b;this.hash=Math.random()},
 cleanup:function(){var a,b;for(b in this.visible)a=this.visible[b],a.getCustomData("hash")!==this.hash&&this.hideLine(a)},queryViewport:function(){this.winPane=this.win.getViewPaneSize();this.winTopScroll=this.winTop.getScrollPosition();this.winTopPane=this.winTop.getViewPaneSize();this.rect=this.getClientRect(this.inline?this.editable:this.frame)},getClientRect:function(a){a=a.getClientRect();var b=this.container.getDocumentPosition(),e=this.container.getComputedStyle("position");a.relativeX=a.relativeY=
-0;"static"!=e&&(a.relativeY=b.y,a.relativeX=b.x,a.top-=a.relativeY,a.bottom-=a.relativeY,a.left-=a.relativeX,a.right-=a.relativeX);return a}};var k={left:1,right:1,center:1},l={absolute:1,fixed:1};CKEDITOR.plugins.lineutils={finder:b,locator:h,liner:f}}(),function(){function b(b){return b.getName&&!b.hasAttribute("data-cke-temp")}CKEDITOR.plugins.add("widgetselection",{init:function(b){if(CKEDITOR.env.webkit){var f=CKEDITOR.plugins.widgetselection;b.on("contentDom",function(b){b=b.editor;var a=b.editable();
+0;"static"!=e&&(a.relativeY=b.y,a.relativeX=b.x,a.top-=a.relativeY,a.bottom-=a.relativeY,a.left-=a.relativeX,a.right-=a.relativeX);return a}};var l={left:1,right:1,center:1},m={absolute:1,fixed:1};CKEDITOR.plugins.lineutils={finder:b,locator:h,liner:f}}(),function(){function b(b){return b.getName&&!b.hasAttribute("data-cke-temp")}CKEDITOR.plugins.add("widgetselection",{init:function(b){if(CKEDITOR.env.webkit){var f=CKEDITOR.plugins.widgetselection;b.on("contentDom",function(b){b=b.editor;var a=b.editable();
 a.attachListener(a,"keydown",function(b){b.data.getKeystroke()==CKEDITOR.CTRL+65&&CKEDITOR.tools.setTimeout(function(){f.addFillers(a)||f.removeFillers(a)},0)},null,null,-1);b.on("selectionCheck",function(a){f.removeFillers(a.editor.editable())});b.on("paste",function(a){a.data.dataValue=f.cleanPasteData(a.data.dataValue)});"selectall"in b.plugins&&f.addSelectAllIntegration(b)})}}});CKEDITOR.plugins.widgetselection={startFiller:null,endFiller:null,fillerAttribute:"data-cke-filler-webkit",fillerContent:"\x26nbsp;",
 fillerTagName:"div",addFillers:function(h){var f=h.editor;if(!this.isWholeContentSelected(h)&&0<h.getChildCount()){var e=h.getFirst(b),a=h.getLast(b);e&&e.type==CKEDITOR.NODE_ELEMENT&&!e.isEditable()&&(this.startFiller=this.createFiller(),h.append(this.startFiller,1));a&&a.type==CKEDITOR.NODE_ELEMENT&&!a.isEditable()&&(this.endFiller=this.createFiller(!0),h.append(this.endFiller,0));if(this.hasFiller(h))return f=f.createRange(),f.selectNodeContents(h),f.select(),!0}return!1},removeFillers:function(b){if(this.hasFiller(b)&&
 !this.isWholeContentSelected(b)){var f=b.findOne(this.fillerTagName+"["+this.fillerAttribute+"\x3dstart]"),e=b.findOne(this.fillerTagName+"["+this.fillerAttribute+"\x3dend]");this.startFiller&&f&&this.startFiller.equals(f)?this.removeFiller(this.startFiller,b):this.startFiller=f;this.endFiller&&e&&this.endFiller.equals(e)?this.removeFiller(this.endFiller,b):this.endFiller=e}},cleanPasteData:function(b){b&&b.length&&(b=b.replace(this.createFillerRegex(),"").replace(this.createFillerRegex(!0),""));
 return b},isWholeContentSelected:function(b){var f=b.editor.getSelection().getRanges()[0];return!f||f&&f.collapsed?!1:(f=f.clone(),f.enlarge(CKEDITOR.ENLARGE_ELEMENT),!!(f&&b&&f.startContainer&&f.endContainer&&0===f.startOffset&&f.endOffset===b.getChildCount()&&f.startContainer.equals(b)&&f.endContainer.equals(b)))},hasFiller:function(b){return 0<b.find(this.fillerTagName+"["+this.fillerAttribute+"]").count()},createFiller:function(b){var f=new CKEDITOR.dom.element(this.fillerTagName);f.setHtml(this.fillerContent);
-f.setAttribute(this.fillerAttribute,b?"end":"start");f.setAttribute("data-cke-temp",1);f.setStyles({display:"block",width:0,height:0,padding:0,border:0,margin:0,position:"absolute",top:0,left:"-9999px",opacity:0,overflow:"hidden"});return f},removeFiller:function(b,f){if(b){var e=f.editor,a=f.editor.getSelection().getRanges()[0].startPath(),m=e.createRange(),k,l;a.contains(b)&&(k=b.getHtml(),l=!0);a="start"==b.getAttribute(this.fillerAttribute);b.remove();k&&0<k.length&&k!=this.fillerContent?(f.insertHtmlIntoRange(k,
-e.getSelection().getRanges()[0]),m.setStartAt(f.getChild(f.getChildCount()-1),CKEDITOR.POSITION_BEFORE_END),e.getSelection().selectRanges([m])):l&&(a?m.setStartAt(f.getFirst().getNext(),CKEDITOR.POSITION_AFTER_START):m.setEndAt(f.getLast().getPrevious(),CKEDITOR.POSITION_BEFORE_END),f.editor.getSelection().selectRanges([m]))}},createFillerRegex:function(b){var f=this.createFiller(b).getOuterHtml().replace(/style="[^"]*"/gi,'style\x3d"[^"]*"').replace(/>[^<]*</gi,"\x3e[^\x3c]*\x3c");return new RegExp((b?
-"":"^")+f+(b?"$":""))},addSelectAllIntegration:function(b){var f=this;b.editable().attachListener(b,"beforeCommandExec",function(e){var a=b.editable();"selectAll"==e.data.name&&a&&f.addFillers(a)},null,null,9999)}}}(),"use strict",function(){function b(a){this.editor=a;this.registered={};this.instances={};this.selected=[];this.widgetHoldingFocusedEditable=this.focused=null;this._={nextId:0,upcasts:[],upcastCallbacks:[],filters:{}};E(this);A(this);this.on("checkWidgets",k);this.editor.on("contentDomInvalidated",
-this.checkWidgets,this);D(this);q(this);v(this);z(this);B(this)}function h(a,b,c,d,e){var f=a.editor;CKEDITOR.tools.extend(this,d,{editor:f,id:b,inline:"span"==c.getParent().getName(),element:c,data:CKEDITOR.tools.extend({},"function"==typeof d.defaults?d.defaults():d.defaults),dataReady:!1,inited:!1,ready:!1,edit:h.prototype.edit,focusedEditable:null,definition:d,repository:a,draggable:!1!==d.draggable,_:{downcastFn:d.downcast&&"string"==typeof d.downcast?d.downcasts[d.downcast]:d.downcast}},!0);
-a.fire("instanceCreated",this);G(this,d);this.init&&this.init();this.inited=!0;(a=this.element.data("cke-widget-data"))&&this.setData(JSON.parse(decodeURIComponent(a)));e&&this.setData(e);this.data.classes||this.setData("classes",this.getClasses());this.dataReady=!0;ca(this);this.fire("data",this.data);this.isInited()&&f.editable().contains(this.wrapper)&&(this.ready=!0,this.fire("ready"))}function f(a,b,c){CKEDITOR.dom.element.call(this,b.$);this.editor=a;this._={};b=this.filter=c.filter;CKEDITOR.dtd[this.getName()].p?
+f.setAttribute(this.fillerAttribute,b?"end":"start");f.setAttribute("data-cke-temp",1);f.setStyles({display:"block",width:0,height:0,padding:0,border:0,margin:0,position:"absolute",top:0,left:"-9999px",opacity:0,overflow:"hidden"});return f},removeFiller:function(b,f){if(b){var e=f.editor,a=f.editor.getSelection().getRanges()[0].startPath(),k=e.createRange(),l,m;a.contains(b)&&(l=b.getHtml(),m=!0);a="start"==b.getAttribute(this.fillerAttribute);b.remove();l&&0<l.length&&l!=this.fillerContent?(f.insertHtmlIntoRange(l,
+e.getSelection().getRanges()[0]),k.setStartAt(f.getChild(f.getChildCount()-1),CKEDITOR.POSITION_BEFORE_END),e.getSelection().selectRanges([k])):m&&(a?k.setStartAt(f.getFirst().getNext(),CKEDITOR.POSITION_AFTER_START):k.setEndAt(f.getLast().getPrevious(),CKEDITOR.POSITION_BEFORE_END),f.editor.getSelection().selectRanges([k]))}},createFillerRegex:function(b){var f=this.createFiller(b).getOuterHtml().replace(/style="[^"]*"/gi,'style\x3d"[^"]*"').replace(/>[^<]*</gi,"\x3e[^\x3c]*\x3c");return new RegExp((b?
+"":"^")+f+(b?"$":""))},addSelectAllIntegration:function(b){var f=this;b.editable().attachListener(b,"beforeCommandExec",function(e){var a=b.editable();"selectAll"==e.data.name&&a&&f.addFillers(a)},null,null,9999)}}}(),"use strict",function(){function b(a){this.editor=a;this.registered={};this.instances={};this.selected=[];this.widgetHoldingFocusedEditable=this.focused=null;this._={nextId:0,upcasts:[],upcastCallbacks:[],filters:{}};E(this);A(this);this.on("checkWidgets",l);this.editor.on("contentDomInvalidated",
+this.checkWidgets,this);C(this);u(this);w(this);z(this);B(this)}function h(a,b,c,d,e){var g=a.editor;CKEDITOR.tools.extend(this,d,{editor:g,id:b,inline:"span"==c.getParent().getName(),element:c,data:CKEDITOR.tools.extend({},"function"==typeof d.defaults?d.defaults():d.defaults),dataReady:!1,inited:!1,ready:!1,edit:h.prototype.edit,focusedEditable:null,definition:d,repository:a,draggable:!1!==d.draggable,_:{downcastFn:d.downcast&&"string"==typeof d.downcast?d.downcasts[d.downcast]:d.downcast}},!0);
+a.fire("instanceCreated",this);O(this,d);this.init&&this.init();this.inited=!0;(a=this.element.data("cke-widget-data"))&&this.setData(JSON.parse(decodeURIComponent(a)));e&&this.setData(e);this.data.classes||this.setData("classes",this.getClasses());this.dataReady=!0;Z(this);this.fire("data",this.data);this.isInited()&&g.editable().contains(this.wrapper)&&(this.ready=!0,this.fire("ready"))}function f(a,b,c){CKEDITOR.dom.element.call(this,b.$);this.editor=a;this._={};b=this.filter=c.filter;CKEDITOR.dtd[this.getName()].p?
 (this.enterMode=b?b.getAllowedEnterMode(a.enterMode):a.enterMode,this.shiftEnterMode=b?b.getAllowedEnterMode(a.shiftEnterMode,!0):a.shiftEnterMode):this.enterMode=this.shiftEnterMode=CKEDITOR.ENTER_BR}function e(a,b){a.addCommand(b.name,{exec:function(a,c){function d(){a.widgets.finalizeCreation(h)}var e=a.widgets.focused;if(e&&e.name==b.name)e.edit();else if(b.insert)b.insert({editor:a,commandData:c});else if(b.template){var e="function"==typeof b.defaults?b.defaults():b.defaults,e=CKEDITOR.dom.element.createFromHtml(b.template.output(e),
-a.document),f,g=a.widgets.wrapElement(e,b.name),h=new CKEDITOR.dom.documentFragment(g.getDocument());h.append(g);(f=a.widgets.initOn(e,b,c&&c.startupData))?(e=f.once("edit",function(b){if(b.data.dialog)f.once("dialog",function(b){b=b.data;var c,e;c=b.once("ok",d,null,null,20);e=b.once("cancel",function(b){b.data&&!1===b.data.hide||a.widgets.destroy(f,!0)});b.once("hide",function(){c.removeListener();e.removeListener()})});else d()},null,null,999),f.edit(),e.removeListener()):d()}},allowedContent:b.allowedContent,
-requiredContent:b.requiredContent,contentForms:b.contentForms,contentTransformations:b.contentTransformations})}function a(a,b){function c(a,d){var e=b.upcast.split(","),f,g;for(g=0;g<e.length;g++)if(f=e[g],f===a.name)return b.upcasts[f].call(this,a,d);return!1}function d(b,c,e){var f=CKEDITOR.tools.getIndex(a._.upcasts,function(a){return a[2]>e});0>f&&(f=a._.upcasts.length);a._.upcasts.splice(f,0,[CKEDITOR.tools.bind(b,c),c.name,e])}var e=b.upcast,f=b.upcastPriority||10;e&&("string"==typeof e?d(c,
-b,f):d(e,b,f))}function m(a,b){a.focused=null;if(b.isInited()){var c=b.editor.checkDirty();a.fire("widgetBlurred",{widget:b});b.setFocused(!1);!c&&b.editor.resetDirty()}}function k(a){a=a.data;if("wysiwyg"==this.editor.mode){var b=this.editor.editable(),c=this.instances,d,e,f,g;if(b){for(d in c)c[d].isReady()&&!b.contains(c[d].wrapper)&&this.destroy(c[d],!0);if(a&&a.initOnlyNew)c=this.initOnAll();else{var k=b.find(".cke_widget_wrapper"),c=[];d=0;for(e=k.count();d<e;d++){f=k.getItem(d);if(g=!this.getByElement(f,
-!0)){a:{g=t;for(var l=f;l=l.getParent();)if(g(l)){g=!0;break a}g=!1}g=!g}g&&b.contains(f)&&(f.addClass("cke_widget_new"),c.push(this.initOn(f.getFirst(h.isDomWidgetElement))))}}a&&a.focusInited&&1==c.length&&c[0].focus()}}}function l(a){if("undefined"!=typeof a.attributes&&a.attributes["data-widget"]){var b=c(a),e=d(a),f=!1;b&&b.value&&b.value.match(/^\s/g)&&(b.parent.attributes["data-cke-white-space-first"]=1,b.value=b.value.replace(/^\s/g,"\x26nbsp;"),f=!0);e&&e.value&&e.value.match(/\s$/g)&&(e.parent.attributes["data-cke-white-space-last"]=
-1,e.value=e.value.replace(/\s$/g,"\x26nbsp;"),f=!0);f&&(a.attributes["data-cke-widget-white-space"]=1)}}function c(a){return a.find(function(a){return 3===a.type},!0).shift()}function d(a){return a.find(function(a){return 3===a.type},!0).pop()}function g(a,b,c){if(!c.allowedContent&&!c.disallowedContent)return null;var d=this._.filters[a];d||(this._.filters[a]=d={});a=d[b];a||(a=c.allowedContent?new CKEDITOR.filter(c.allowedContent):this.editor.filter.clone(),d[b]=a,c.disallowedContent&&a.disallow(c.disallowedContent));
-return a}function n(a){var b=[],c=a._.upcasts,d=a._.upcastCallbacks;return{toBeWrapped:b,iterator:function(a){var e,f,g,k,l;if("data-cke-widget-wrapper"in a.attributes)return(a=a.getFirst(h.isParserWidgetElement))&&b.push([a]),!1;if("data-widget"in a.attributes)return b.push([a]),!1;if(l=c.length){if(a.attributes["data-cke-widget-upcasted"])return!1;k=0;for(e=d.length;k<e;++k)if(!1===d[k](a))return;for(k=0;k<l;++k)if(e=c[k],g={},f=e[0](a,g))return f instanceof CKEDITOR.htmlParser.element&&(a=f),a.attributes["data-cke-widget-data"]=
-encodeURIComponent(JSON.stringify(g)),a.attributes["data-cke-widget-upcasted"]=1,b.push([a,e[1]]),!1}}}}function y(a,b){return{tabindex:-1,contenteditable:"false","data-cke-widget-wrapper":1,"data-cke-filter":"off","class":"cke_widget_wrapper cke_widget_new cke_widget_"+(a?"inline":"block")+(b?" cke_widget_"+b:"")}}function w(a,b,c){if(a.type==CKEDITOR.NODE_ELEMENT){var d=CKEDITOR.dtd[a.name];if(d&&!d[c.name]){var d=a.split(b),e=a.parent;b=d.getIndex();a.children.length||(--b,a.remove());d.children.length||
-d.remove();return w(e,b,c)}}a.add(c,b)}function p(a,b){return"boolean"==typeof a.inline?a.inline:!!CKEDITOR.dtd.$inline[b]}function t(a){return a.hasAttribute("data-cke-temp")}function r(a,b,c,d){var e=a.editor;e.fire("lockSnapshot");c?(d=c.data("cke-widget-editable"),d=b.editables[d],a.widgetHoldingFocusedEditable=b,b.focusedEditable=d,c.addClass("cke_widget_editable_focused"),d.filter&&e.setActiveFilter(d.filter),e.setActiveEnterMode(d.enterMode,d.shiftEnterMode)):(d||b.focusedEditable.removeClass("cke_widget_editable_focused"),
-b.focusedEditable=null,a.widgetHoldingFocusedEditable=null,e.setActiveFilter(null),e.setActiveEnterMode(null,null));e.fire("unlockSnapshot")}function x(a){a.contextMenu&&a.contextMenu.addListener(function(b){if(b=a.widgets.getByElement(b,!0))return b.fire("contextMenu",{})})}function u(a,b){return CKEDITOR.tools.trim(b)}function z(a){var b=a.editor,c=CKEDITOR.plugins.lineutils;b.on("dragstart",function(c){var d=c.data.target;h.isDomDragHandler(d)&&(d=a.getByElement(d),c.data.dataTransfer.setData("cke/widget-id",
-d.id),b.focus(),d.focus())});b.on("drop",function(c){function d(a,b){return a&&b?a.wrapper.equals(b.wrapper)||a.wrapper.contains(b.wrapper):!1}var e=c.data.dataTransfer,f=e.getData("cke/widget-id"),g=e.getTransferType(b),e=b.createRange(),h=function(a){a=a.getBoundaryNodes().startNode;a.type!==CKEDITOR.NODE_ELEMENT&&(a=a.getParent());return b.widgets.getByElement(a)}(c.data.dropRange);if(""!==f&&g===CKEDITOR.DATA_TRANSFER_CROSS_EDITORS)c.cancel();else if(g==CKEDITOR.DATA_TRANSFER_INTERNAL)if(""===
-f&&0<b.widgets.selected.length)c.data.dataTransfer.setData("text/html",H(b));else if(f=a.instances[f])d(f,h)?c.cancel():(e.setStartBefore(f.wrapper),e.setEndAfter(f.wrapper),c.data.dragRange=e,delete CKEDITOR.plugins.clipboard.dragStartContainerChildCount,delete CKEDITOR.plugins.clipboard.dragEndContainerChildCount,c.data.dataTransfer.setData("text/html",f.getClipboardHtml()),b.widgets.destroy(f,!0))});b.on("contentDom",function(){var d=b.editable();CKEDITOR.tools.extend(a,{finder:new c.finder(b,
+a.document),g,f=a.widgets.wrapElement(e,b.name),h=new CKEDITOR.dom.documentFragment(f.getDocument());h.append(f);(g=a.widgets.initOn(e,b,c&&c.startupData))?(e=g.once("edit",function(b){if(b.data.dialog)g.once("dialog",function(b){b=b.data;var c,e;c=b.once("ok",d,null,null,20);e=b.once("cancel",function(b){b.data&&!1===b.data.hide||a.widgets.destroy(g,!0)});b.once("hide",function(){c.removeListener();e.removeListener()})});else d()},null,null,999),g.edit(),e.removeListener()):d()}},allowedContent:b.allowedContent,
+requiredContent:b.requiredContent,contentForms:b.contentForms,contentTransformations:b.contentTransformations})}function a(a,b){function c(a,d){var e=b.upcast.split(","),g,f;for(f=0;f<e.length;f++)if(g=e[f],g===a.name)return b.upcasts[g].call(this,a,d);return!1}function d(b,c,e){var g=CKEDITOR.tools.getIndex(a._.upcasts,function(a){return a[2]>e});0>g&&(g=a._.upcasts.length);a._.upcasts.splice(g,0,[CKEDITOR.tools.bind(b,c),c.name,e])}var e=b.upcast,g=b.upcastPriority||10;e&&("string"==typeof e?d(c,
+b,g):d(e,b,g))}function k(a,b){a.focused=null;if(b.isInited()){var c=b.editor.checkDirty();a.fire("widgetBlurred",{widget:b});b.setFocused(!1);!c&&b.editor.resetDirty()}}function l(a){a=a.data;if("wysiwyg"==this.editor.mode){var b=this.editor.editable(),c=this.instances,d,e,g,f;if(b){for(d in c)c[d].isReady()&&!b.contains(c[d].wrapper)&&this.destroy(c[d],!0);if(a&&a.initOnlyNew)c=this.initOnAll();else{var k=b.find(".cke_widget_wrapper"),c=[];d=0;for(e=k.count();d<e;d++){g=k.getItem(d);if(f=!this.getByElement(g,
+!0)){a:{f=q;for(var l=g;l=l.getParent();)if(f(l)){f=!0;break a}f=!1}f=!f}f&&b.contains(g)&&(g.addClass("cke_widget_new"),c.push(this.initOn(g.getFirst(h.isDomWidgetElement))))}}a&&a.focusInited&&1==c.length&&c[0].focus()}}}function m(a){if("undefined"!=typeof a.attributes&&a.attributes["data-widget"]){var b=c(a),e=d(a),g=!1;b&&b.value&&b.value.match(/^\s/g)&&(b.parent.attributes["data-cke-white-space-first"]=1,b.value=b.value.replace(/^\s/g,"\x26nbsp;"),g=!0);e&&e.value&&e.value.match(/\s$/g)&&(e.parent.attributes["data-cke-white-space-last"]=
+1,e.value=e.value.replace(/\s$/g,"\x26nbsp;"),g=!0);g&&(a.attributes["data-cke-widget-white-space"]=1)}}function c(a){return a.find(function(a){return 3===a.type},!0).shift()}function d(a){return a.find(function(a){return 3===a.type},!0).pop()}function g(a,b,c){if(!c.allowedContent&&!c.disallowedContent)return null;var d=this._.filters[a];d||(this._.filters[a]=d={});a=d[b];a||(a=c.allowedContent?new CKEDITOR.filter(c.allowedContent):this.editor.filter.clone(),d[b]=a,c.disallowedContent&&a.disallow(c.disallowedContent));
+return a}function n(a){var b=[],c=a._.upcasts,d=a._.upcastCallbacks;return{toBeWrapped:b,iterator:function(a){var e,g,f,k,l;if("data-cke-widget-wrapper"in a.attributes)return(a=a.getFirst(h.isParserWidgetElement))&&b.push([a]),!1;if("data-widget"in a.attributes)return b.push([a]),!1;if(l=c.length){if(a.attributes["data-cke-widget-upcasted"])return!1;k=0;for(e=d.length;k<e;++k)if(!1===d[k](a))return;for(k=0;k<l;++k)if(e=c[k],f={},g=e[0](a,f))return g instanceof CKEDITOR.htmlParser.element&&(a=g),a.attributes["data-cke-widget-data"]=
+encodeURIComponent(JSON.stringify(f)),a.attributes["data-cke-widget-upcasted"]=1,b.push([a,e[1]]),!1}}}}function y(a,b){return{tabindex:-1,contenteditable:"false","data-cke-widget-wrapper":1,"data-cke-filter":"off","class":"cke_widget_wrapper cke_widget_new cke_widget_"+(a?"inline":"block")+(b?" cke_widget_"+b:"")}}function v(a,b,c){if(a.type==CKEDITOR.NODE_ELEMENT){var d=CKEDITOR.dtd[a.name];if(d&&!d[c.name]){var d=a.split(b),e=a.parent;b=d.getIndex();a.children.length||(--b,a.remove());d.children.length||
+d.remove();return v(e,b,c)}}a.add(c,b)}function p(a,b){return"boolean"==typeof a.inline?a.inline:!!CKEDITOR.dtd.$inline[b]}function q(a){return a.hasAttribute("data-cke-temp")}function r(a,b,c,d){var e=a.editor;e.fire("lockSnapshot");c?(d=c.data("cke-widget-editable"),d=b.editables[d],a.widgetHoldingFocusedEditable=b,b.focusedEditable=d,c.addClass("cke_widget_editable_focused"),d.filter&&e.setActiveFilter(d.filter),e.setActiveEnterMode(d.enterMode,d.shiftEnterMode)):(d||b.focusedEditable.removeClass("cke_widget_editable_focused"),
+b.focusedEditable=null,a.widgetHoldingFocusedEditable=null,e.setActiveFilter(null),e.setActiveEnterMode(null,null));e.fire("unlockSnapshot")}function x(a){a.contextMenu&&a.contextMenu.addListener(function(b){if(b=a.widgets.getByElement(b,!0))return b.fire("contextMenu",{})})}function t(a,b){return CKEDITOR.tools.trim(b)}function z(a){var b=a.editor,c=CKEDITOR.plugins.lineutils;b.on("dragstart",function(c){var d=c.data.target;h.isDomDragHandler(d)&&(d=a.getByElement(d),c.data.dataTransfer.setData("cke/widget-id",
+d.id),b.focus(),d.focus())});b.on("drop",function(c){function d(a,b){return a&&b?a.wrapper.equals(b.wrapper)||a.wrapper.contains(b.wrapper):!1}var e=c.data.dataTransfer,g=e.getData("cke/widget-id"),f=e.getTransferType(b),e=b.createRange(),h=function(a){a=a.getBoundaryNodes().startNode;a.type!==CKEDITOR.NODE_ELEMENT&&(a=a.getParent());return b.widgets.getByElement(a)}(c.data.dropRange);if(""!==g&&f===CKEDITOR.DATA_TRANSFER_CROSS_EDITORS)c.cancel();else if(f==CKEDITOR.DATA_TRANSFER_INTERNAL)if(""===
+g&&0<b.widgets.selected.length)c.data.dataTransfer.setData("text/html",G(b));else if(g=a.instances[g])d(g,h)?c.cancel():(e.setStartBefore(g.wrapper),e.setEndAfter(g.wrapper),c.data.dragRange=e,delete CKEDITOR.plugins.clipboard.dragStartContainerChildCount,delete CKEDITOR.plugins.clipboard.dragEndContainerChildCount,c.data.dataTransfer.setData("text/html",g.getClipboardHtml()),b.widgets.destroy(g,!0))});b.on("contentDom",function(){var d=b.editable();CKEDITOR.tools.extend(a,{finder:new c.finder(b,
 {lookups:{"default":function(b){if(!b.is(CKEDITOR.dtd.$listItem)&&b.is(CKEDITOR.dtd.$block)&&!h.isDomNestedEditable(b)&&!a._.draggedWidget.wrapper.contains(b)){var c=h.getNestedEditable(d,b);if(c){b=a._.draggedWidget;if(a.getByElement(c)==b)return;c=CKEDITOR.filter.instances[c.data("cke-filter")];b=b.requiredContent;if(c&&b&&!c.check(b))return}return CKEDITOR.LINEUTILS_BEFORE|CKEDITOR.LINEUTILS_AFTER}}}}),locator:new c.locator(b),liner:new c.liner(b,{lineStyle:{cursor:"move !important","border-top-color":"#666"},
-tipLeftStyle:{"border-left-color":"#666"},tipRightStyle:{"border-right-color":"#666"}})},!0)})}function q(a){var b=a.editor;b.on("contentDom",function(){var c=b.editable(),d=c.isInline()?c:b.document,e,f;c.attachListener(d,"mousedown",function(c){var d=c.data.getTarget();e=d instanceof CKEDITOR.dom.element?a.getByElement(d):null;f=0;e&&(e.inline&&d.type==CKEDITOR.NODE_ELEMENT&&d.hasAttribute("data-cke-widget-drag-handler")?(f=1,a.focused!=e&&b.getSelection().removeAllRanges()):h.getNestedEditable(e.wrapper,
-d)?e=null:(c.data.preventDefault(),CKEDITOR.env.ie||e.focus()))});c.attachListener(d,"mouseup",function(){f&&e&&e.wrapper&&(f=0,e.focus())});CKEDITOR.env.ie&&c.attachListener(d,"mouseup",function(){setTimeout(function(){e&&e.wrapper&&c.contains(e.wrapper)&&(e.focus(),e=null)})})});b.on("doubleclick",function(b){var c=a.getByElement(b.data.element);if(c&&!h.getNestedEditable(c.wrapper,b.data.element))return c.fire("doubleclick",{element:b.data.element})},null,null,1)}function v(a){a.editor.on("key",
+tipLeftStyle:{"border-left-color":"#666"},tipRightStyle:{"border-right-color":"#666"}})},!0)})}function u(a){var b=a.editor;b.on("contentDom",function(){var c=b.editable(),d=c.isInline()?c:b.document,e,g;c.attachListener(d,"mousedown",function(c){var d=c.data.getTarget();e=d instanceof CKEDITOR.dom.element?a.getByElement(d):null;g=0;e&&(e.inline&&d.type==CKEDITOR.NODE_ELEMENT&&d.hasAttribute("data-cke-widget-drag-handler")?(g=1,a.focused!=e&&b.getSelection().removeAllRanges()):h.getNestedEditable(e.wrapper,
+d)?e=null:(c.data.preventDefault(),CKEDITOR.env.ie||e.focus()))});c.attachListener(d,"mouseup",function(){g&&e&&e.wrapper&&(g=0,e.focus())});CKEDITOR.env.ie&&c.attachListener(d,"mouseup",function(){setTimeout(function(){e&&e.wrapper&&c.contains(e.wrapper)&&(e.focus(),e=null)})})});b.on("doubleclick",function(b){var c=a.getByElement(b.data.element);if(c&&!h.getNestedEditable(c.wrapper,b.data.element))return c.fire("doubleclick",{element:b.data.element})},null,null,1)}function w(a){a.editor.on("key",
 function(b){var c=a.focused,d=a.widgetHoldingFocusedEditable,e;c?e=c.fire("key",{keyCode:b.data.keyCode}):d&&(c=b.data.keyCode,b=d.focusedEditable,c==CKEDITOR.CTRL+65?(c=b.getBogus(),d=d.editor.createRange(),d.selectNodeContents(b),c&&d.setEndAt(c,CKEDITOR.POSITION_BEFORE_START),d.select(),e=!1):8==c||46==c?(e=d.editor.getSelection().getRanges(),d=e[0],e=!(1==e.length&&d.collapsed&&d.checkBoundaryOfElement(b,CKEDITOR[8==c?"START":"END"]))):e=void 0);return e},null,null,1)}function B(a){function b(d){1>
-a.selected.length||O(c,"cut"===d.name)}var c=a.editor;c.on("contentDom",function(){var a=c.editable();a.attachListener(a,"copy",b);a.attachListener(a,"cut",b)})}function D(a){function b(){var a=e.getSelection();if(a&&(a=a.getRanges()[0])&&!a.collapsed){var d=c(a.startContainer),f=c(a.endContainer);!d&&f?(a.setEndBefore(f.wrapper),a.select()):d&&!f&&(a.setStartAfter(d.wrapper),a.select())}}function c(a){return a?a.type==CKEDITOR.NODE_TEXT?c(a.getParent()):e.widgets.getByElement(a):null}function d(){a.fire("checkSelection")}
+a.selected.length||I(c,"cut"===d.name)}var c=a.editor;c.on("contentDom",function(){var a=c.editable();a.attachListener(a,"copy",b);a.attachListener(a,"cut",b)})}function C(a){function b(){var a=e.getSelection();if(a&&(a=a.getRanges()[0])&&!a.collapsed){var d=c(a.startContainer),g=c(a.endContainer);!d&&g?(a.setEndBefore(g.wrapper),a.select()):d&&!g&&(a.setStartAfter(d.wrapper),a.select())}}function c(a){return a?a.type==CKEDITOR.NODE_TEXT?c(a.getParent()):e.widgets.getByElement(a):null}function d(){a.fire("checkSelection")}
 var e=a.editor;e.on("selectionCheck",d);e.on("contentDom",function(){e.editable().attachListener(e,"key",function(){setTimeout(d,10)})});if(!CKEDITOR.env.ie)a.on("checkSelection",b);a.on("checkSelection",a.checkSelection,a);e.on("selectionChange",function(b){var c=(b=h.getNestedEditable(e.editable(),b.data.selection.getStartElement()))&&a.getByElement(b),d=a.widgetHoldingFocusedEditable;d?d===c&&d.focusedEditable.equals(b)||(r(a,d,null),c&&b&&r(a,c,b)):c&&b&&r(a,c,b)});e.on("dataReady",function(){F(a).commit()});
-e.on("blur",function(){var b;(b=a.focused)&&m(a,b);(b=a.widgetHoldingFocusedEditable)&&r(a,b,null)})}function A(a){var b=a.editor,e={};b.on("toDataFormat",function(b){var f=CKEDITOR.tools.getNextNumber(),g=[];b.data.downcastingSessionId=f;e[f]=g;b.data.dataValue.forEach(function(b){var e=b.attributes,f;if("data-cke-widget-white-space"in e){f=c(b);var k=d(b);f.parent.attributes["data-cke-white-space-first"]&&(f.value=f.value.replace(/^&nbsp;/g," "));k.parent.attributes["data-cke-white-space-last"]&&
-(k.value=k.value.replace(/&nbsp;$/g," "))}if("data-cke-widget-id"in e){if(e=a.instances[e["data-cke-widget-id"]])f=b.getFirst(h.isParserWidgetElement),g.push({wrapper:b,element:f,widget:e,editables:{}}),"1"!=f.attributes["data-cke-widget-keep-attr"]&&delete f.attributes["data-widget"]}else if("data-cke-widget-editable"in e)return 0<g.length&&(g[g.length-1].editables[e["data-cke-widget-editable"]]=b),!1},CKEDITOR.NODE_ELEMENT,!0)},null,null,8);b.on("toDataFormat",function(a){if(a.data.downcastingSessionId)for(var b=
-e[a.data.downcastingSessionId],c,d,f,g,h,k;c=b.shift();){d=c.widget;f=c.element;g=d._.downcastFn&&d._.downcastFn.call(d,f);a.data.widgetsCopy&&d.getClipboardHtml&&(g=CKEDITOR.htmlParser.fragment.fromHtml(d.getClipboardHtml()),g=g.children[0]);for(k in c.editables)h=c.editables[k],delete h.attributes.contenteditable,h.setHtml(d.editables[k].getData());g||(g=f);c.wrapper.replaceWith(g)}},null,null,13);b.on("contentDomUnload",function(){a.destroyAll(!0)})}function E(a){var b=a.editor,c,d;b.on("toHtml",
-function(b){var d=n(a),e;for(b.data.dataValue.forEach(d.iterator,CKEDITOR.NODE_ELEMENT,!0);e=d.toBeWrapped.pop();){var f=e[0],g=f.parent;g.type==CKEDITOR.NODE_ELEMENT&&g.attributes["data-cke-widget-wrapper"]&&g.replaceWith(f);a.wrapElement(e[0],e[1])}c=b.data.protectedWhitespaces?3==b.data.dataValue.children.length&&h.isParserWidgetWrapper(b.data.dataValue.children[1]):1==b.data.dataValue.children.length&&h.isParserWidgetWrapper(b.data.dataValue.children[0])},null,null,8);b.on("dataReady",function(){if(d)for(var c=
-b.editable().find(".cke_widget_wrapper"),e,f,g=0,k=c.count();g<k;++g)e=c.getItem(g),f=e.getFirst(h.isDomWidgetElement),f.type==CKEDITOR.NODE_ELEMENT&&f.data("widget")?(f.replace(e),a.wrapElement(f)):e.remove();d=0;a.destroyAll(!0);a.initOnAll()});b.on("loadSnapshot",function(b){/data-cke-widget/.test(b.data)&&(d=1);a.destroyAll(!0)},null,null,9);b.on("paste",function(a){a=a.data;a.dataValue=a.dataValue.replace(U,u);a.range&&(a=h.getNestedEditable(b.editable(),a.range.startContainer))&&(a=CKEDITOR.filter.instances[a.data("cke-filter")])&&
-b.setActiveFilter(a)});b.on("afterInsertHtml",function(d){d.data.intoRange?a.checkWidgets({initOnlyNew:!0}):(b.fire("lockSnapshot"),a.checkWidgets({initOnlyNew:!0,focusInited:c}),b.fire("unlockSnapshot"))})}function F(a){var b=a.selected,c=[],d=b.slice(0),e=null;return{select:function(a){0>CKEDITOR.tools.indexOf(b,a)&&c.push(a);a=CKEDITOR.tools.indexOf(d,a);0<=a&&d.splice(a,1);return this},focus:function(a){e=a;return this},commit:function(){var f=a.focused!==e,g,h;a.editor.fire("lockSnapshot");for(f&&
-(g=a.focused)&&m(a,g);g=d.pop();)b.splice(CKEDITOR.tools.indexOf(b,g),1),g.isInited()&&(h=g.editor.checkDirty(),g.setSelected(!1),!h&&g.editor.resetDirty());f&&e&&(h=a.editor.checkDirty(),a.focused=e,a.fire("widgetFocused",{widget:e}),e.setFocused(!0),!h&&a.editor.resetDirty());for(;g=c.pop();)b.push(g),g.setSelected(!0);a.editor.fire("unlockSnapshot")}}}function K(a){a&&a.addFilterRule(function(a){return a.replace(/\s*cke_widget_selected/g,"").replace(/\s*cke_widget_focused/g,"")})}function L(a,
-b,c){var d=0;b=I(b);var e=a.data.classes||{},f;if(b){for(e=CKEDITOR.tools.clone(e);f=b.pop();)c?e[f]||(d=e[f]=1):e[f]&&(delete e[f],d=1);d&&a.setData("classes",e)}}function C(a){a.cancel()}function O(a,b){var c=a.widgets.focused,d,e,f;ga.hasCopyBin(a)||(e=new ga(a,{beforeDestroy:function(){!b&&c&&c.focus();f&&a.getSelection().selectBookmarks(f);d&&CKEDITOR.plugins.widgetselection.addFillers(a.editable())},afterDestroy:function(){b&&!a.readOnly&&(c?a.widgets.del(c):a.extractSelectedHtml(),a.fire("saveSnapshot"))}}),
-c||(d=CKEDITOR.env.webkit&&CKEDITOR.plugins.widgetselection.isWholeContentSelected(a.editable()),f=a.getSelection().createBookmarks(!0)),e.handle(H(a)))}function I(a){return(a=(a=a.getDefinition().attributes)&&a["class"])?a.split(/\s+/):null}function M(){var a=CKEDITOR.document.getActive(),b=this.editor,c=b.editable();(c.isInline()?c:b.document.getWindow().getFrame()).equals(a)&&b.focusManager.focus(c)}function Q(){CKEDITOR.env.gecko&&this.editor.unlockSelection();CKEDITOR.env.webkit||(this.editor.forceNextSelectionCheck(),
-this.editor.selectionChange(1))}function H(a){var b=a.getSelectedHtml(!0);if(a.widgets.focused)return a.widgets.focused.getClipboardHtml();a.once("toDataFormat",function(a){a.data.widgetsCopy=!0},null,null,-1);return a.dataProcessor.toDataFormat(b)}function G(a,b){P(a);Y(a);T(a);X(a);S(a);aa(a);ba(a);if(CKEDITOR.env.ie&&9>CKEDITOR.env.version)a.wrapper.on("dragstart",function(b){var c=b.data.getTarget();h.getNestedEditable(a,c)||a.inline&&h.isDomDragHandler(c)||b.data.preventDefault()});a.wrapper.removeClass("cke_widget_new");
-a.element.addClass("cke_widget_element");a.on("key",function(b){b=b.data.keyCode;if(13==b)a.edit();else{if(b==CKEDITOR.CTRL+67||b==CKEDITOR.CTRL+88){O(a.editor,b==CKEDITOR.CTRL+88);return}if(b in V||CKEDITOR.CTRL&b||CKEDITOR.ALT&b)return}return!1},null,null,999);a.on("doubleclick",function(b){a.edit()&&b.cancel()});if(b.data)a.on("data",b.data);if(b.edit)a.on("edit",b.edit)}function P(a){(a.wrapper=a.element.getParent()).setAttribute("data-cke-widget-id",a.id)}function Y(a,b){a.partSelectors||(a.partSelectors=
-a.parts);if(a.parts){var c={},d,e;for(e in a.partSelectors)b||!a.parts[e]||"string"==typeof a.parts[e]?(d=a.wrapper.findOne(a.partSelectors[e]),c[e]=d):c[e]=a.parts[e];a.parts=c}}function T(a){var b=a.editables,c,d;a.editables={};if(a.editables)for(c in b)d=b[c],a.initEditable(c,"string"==typeof d?{selector:d}:d)}function X(a){if(!0===a.mask)da(a);else if(a.mask){var b=new CKEDITOR.tools.buffers.throttle(250,J,a),c=CKEDITOR.env.gecko?300:0,d,e;a.on("focus",function(){b.input();d=a.editor.on("change",
-b.input);e=a.on("blur",function(){d.removeListener();e.removeListener()})});a.editor.on("instanceReady",function(){setTimeout(function(){b.input()},c)});a.editor.on("mode",function(){setTimeout(function(){b.input()},c)});if(CKEDITOR.env.gecko){var f=a.element.find("img");CKEDITOR.tools.array.forEach(f.toArray(),function(a){a.on("load",function(){b.input()})})}for(var g in a.editables)a.editables[g].on("focus",function(){a.editor.on("change",b.input);e&&e.removeListener()}),a.editables[g].on("blur",
-function(){a.editor.removeListener("change",b.input)});b.input()}}function da(a){var b=a.wrapper.findOne(".cke_widget_mask");b||(b=new CKEDITOR.dom.element("img",a.editor.document),b.setAttributes({src:CKEDITOR.tools.transparentImageData,"class":"cke_reset cke_widget_mask"}),a.wrapper.append(b));a.mask=b}function J(){if(this.wrapper){this.maskPart=this.maskPart||this.mask;var a=this.parts[this.maskPart],b;if(a&&"string"!=typeof a){b=this.wrapper.findOne(".cke_widget_partial_mask");b||(b=new CKEDITOR.dom.element("img",
-this.editor.document),b.setAttributes({src:CKEDITOR.tools.transparentImageData,"class":"cke_reset cke_widget_partial_mask"}),this.wrapper.append(b));this.mask=b;var c=b.$,d=a.$,e=!(c.offsetTop==d.offsetTop&&c.offsetLeft==d.offsetLeft);if(c.offsetWidth!=d.offsetWidth||c.offsetHeight!=d.offsetHeight||e)c=a.getParent(),d=CKEDITOR.plugins.widget.isDomWidget(c),b.setStyles({top:a.$.offsetTop+(d?0:c.$.offsetTop)+"px",left:a.$.offsetLeft+(d?0:c.$.offsetLeft)+"px",width:a.$.offsetWidth+"px",height:a.$.offsetHeight+
-"px"})}}}function S(a){if(a.draggable){var b=a.editor,c=a.wrapper.getLast(h.isDomDragHandlerContainer),d;c?d=c.findOne("img"):(c=new CKEDITOR.dom.element("span",b.document),c.setAttributes({"class":"cke_reset cke_widget_drag_handler_container",style:"background:rgba(220,220,220,0.5);background-image:url("+b.plugins.widget.path+"images/handle.png);display:none;"}),d=new CKEDITOR.dom.element("img",b.document),d.setAttributes({"class":"cke_reset cke_widget_drag_handler","data-cke-widget-drag-handler":"1",
-src:CKEDITOR.tools.transparentImageData,width:15,title:b.lang.widget.move,height:15,role:"presentation"}),a.inline&&d.setAttribute("draggable","true"),c.append(d),a.wrapper.append(c));a.wrapper.on("dragover",function(a){a.data.preventDefault()});a.wrapper.on("mouseenter",a.updateDragHandlerPosition,a);setTimeout(function(){a.on("data",a.updateDragHandlerPosition,a)},50);if(!a.inline&&(d.on("mousedown",W,a),CKEDITOR.env.ie&&9>CKEDITOR.env.version))d.on("dragstart",function(a){a.data.preventDefault(!0)});
-a.dragHandlerContainer=c}}function W(a){function b(){var c;for(r.reset();c=h.pop();)c.removeListener();var d=k;c=a.sender;var e=this.repository.finder,f=this.repository.liner,g=this.editor,l=this.editor.editable();CKEDITOR.tools.isEmpty(f.visible)||(d=e.getRange(d[0]),this.focus(),g.fire("drop",{dropRange:d,target:d.startContainer}));l.removeClass("cke_widget_dragging");f.hideVisible();g.fire("dragend",{target:c})}if(CKEDITOR.tools.getMouseButton(a)===CKEDITOR.MOUSE_BUTTON_LEFT){var c=this.repository.finder,
-d=this.repository.locator,e=this.repository.liner,f=this.editor,g=f.editable(),h=[],k=[],l,m;this.repository._.draggedWidget=this;var n=c.greedySearch(),r=CKEDITOR.tools.eventsBuffer(50,function(){l=d.locate(n);k=d.sort(m,1);k.length&&(e.prepare(n,l),e.placeLine(k[0]),e.cleanup())});g.addClass("cke_widget_dragging");h.push(g.on("mousemove",function(a){m=a.data.$.clientY;r.input()}));f.fire("dragstart",{target:a.sender});h.push(f.document.once("mouseup",b,this));g.isInline()||h.push(CKEDITOR.document.once("mouseup",
-b,this))}}function aa(a){var b=null;a.on("data",function(){var a=this.data.classes,c;if(b!=a){for(c in b)a&&a[c]||this.removeClass(c);for(c in a)this.addClass(c);b=a}})}function ba(a){a.on("data",function(){if(a.wrapper){var b=this.getLabel?this.getLabel():this.editor.lang.widget.label.replace(/%1/,this.pathName||this.element.getName());a.wrapper.setAttribute("role","region");a.wrapper.setAttribute("aria-label",b)}},null,null,9999)}function ca(a){a.element.data("cke-widget-data",encodeURIComponent(JSON.stringify(a.data)))}
-function Z(){function a(){}function b(a,c,d){return d&&this.checkElement(a)?(a=d.widgets.getByElement(a,!0))&&a.checkStyleActive(this):!1}function c(a){function b(a,c,d){for(var e=a.length,f=0;f<e;){if(c.call(d,a[f],f,a))return a[f];f++}}function e(a){function b(a,c){var d=CKEDITOR.tools.object.keys(a),e=CKEDITOR.tools.object.keys(c);if(d.length!==e.length)return!1;for(var f in a)if(("object"!==typeof a[f]||"object"!==typeof c[f]||!b(a[f],c[f]))&&a[f]!==c[f])return!1;return!0}return function(c){return b(a.getDefinition(),
-c.getDefinition())}}var f=a.widget,g;d[f]||(d[f]={});for(var h=0,k=a.group.length;h<k;h++)g=a.group[h],d[f][g]||(d[f][g]=[]),g=d[f][g],b(g,e(a))||g.push(a)}var d={};CKEDITOR.style.addCustomHandler({type:"widget",setup:function(a){this.widget=a.widget;(this.group="string"==typeof a.group?[a.group]:a.group)&&c(this)},apply:function(a){var b;a instanceof CKEDITOR.editor&&this.checkApplicable(a.elementPath(),a)&&(b=a.widgets.focused,this.group&&this.removeStylesFromSameGroup(a),b.applyStyle(this))},remove:function(a){a instanceof
-CKEDITOR.editor&&this.checkApplicable(a.elementPath(),a)&&a.widgets.focused.removeStyle(this)},removeStylesFromSameGroup:function(a){var b=!1,c,e;if(!(a instanceof CKEDITOR.editor))return!1;e=a.elementPath();if(this.checkApplicable(e,a))for(var f=0,g=this.group.length;f<g;f++){c=d[this.widget][this.group[f]];for(var h=0;h<c.length;h++)c[h]!==this&&c[h].checkActive(e,a)&&(a.widgets.focused.removeStyle(c[h]),b=!0)}return b},checkActive:function(a,b){return this.checkElementMatch(a.lastElement,0,b)},
-checkApplicable:function(a,b){return b instanceof CKEDITOR.editor?this.checkElement(a.lastElement):!1},checkElementMatch:b,checkElementRemovable:b,checkElement:function(a){return h.isDomWidgetWrapper(a)?(a=a.getFirst(h.isDomWidgetElement))&&a.data("widget")==this.widget:!1},buildPreview:function(a){return a||this._.definition.name},toAllowedContentRules:function(a){if(!a)return null;a=a.widgets.registered[this.widget];var b,c={};if(!a)return null;if(a.styleableElements){b=this.getClassesArray();if(!b)return null;
-c[a.styleableElements]={classes:b,propertiesOnly:!0};return c}return a.styleToAllowedContentRules?a.styleToAllowedContentRules(this):null},getClassesArray:function(){var a=this._.definition.attributes&&this._.definition.attributes["class"];return a?CKEDITOR.tools.trim(a).split(/\s+/):null},applyToRange:a,removeFromRange:a,applyToObject:a})}CKEDITOR.plugins.add("widget",{requires:"lineutils,clipboard,widgetselection",onLoad:function(){void 0!==CKEDITOR.document.$.querySelectorAll&&(CKEDITOR.addCss('.cke_widget_wrapper{position:relative;outline:none}.cke_widget_inline{display:inline-block}.cke_widget_wrapper:hover\x3e.cke_widget_element{outline:2px solid #ffd25c;cursor:default}.cke_widget_wrapper:hover .cke_widget_editable{outline:2px solid #ffd25c}.cke_widget_wrapper.cke_widget_focused\x3e.cke_widget_element,.cke_widget_wrapper .cke_widget_editable.cke_widget_editable_focused{outline:2px solid #47a4f5}.cke_widget_editable{cursor:text}.cke_widget_drag_handler_container{position:absolute;width:15px;height:0;display:block;opacity:0.75;transition:height 0s 0.2s;line-height:0}.cke_widget_wrapper:hover\x3e.cke_widget_drag_handler_container{height:15px;transition:none}.cke_widget_drag_handler_container:hover{opacity:1}.cke_editable[contenteditable\x3d"false"] .cke_widget_drag_handler_container{display:none;}img.cke_widget_drag_handler{cursor:move;width:15px;height:15px;display:inline-block}.cke_widget_mask{position:absolute;top:0;left:0;width:100%;height:100%;display:block}.cke_widget_partial_mask{position:absolute;display:block}.cke_editable.cke_widget_dragging, .cke_editable.cke_widget_dragging *{cursor:move !important}'),
-Z())},beforeInit:function(a){void 0!==CKEDITOR.document.$.querySelectorAll&&(a.widgets=new b(a))},afterInit:function(a){if(void 0!==CKEDITOR.document.$.querySelectorAll){var b=a.widgets.registered,c,d,e;for(d in b)c=b[d],(e=c.button)&&a.ui.addButton&&a.ui.addButton(CKEDITOR.tools.capitalize(c.name,!0),{label:e,command:c.name,toolbar:"insert,10"});x(a);K(a.undoManager)}}});b.prototype={MIN_SELECTION_CHECK_INTERVAL:500,add:function(b,c){var d=this.editor;c=CKEDITOR.tools.prototypedCopy(c);c.name=b;
-c._=c._||{};d.fire("widgetDefinition",c);c.template&&(c.template=new CKEDITOR.template(c.template));e(d,c);a(this,c);this.registered[b]=c;if(c.dialog&&d.plugins.dialog)var f=CKEDITOR.on("dialogDefinition",function(a){a=a.data.definition;var b=a.dialog;a.getMode||b.getName()!==c.dialog||(a.getMode=function(){var a=b.getModel(d);return a&&a instanceof CKEDITOR.plugins.widget&&a.ready?CKEDITOR.dialog.EDITING_MODE:CKEDITOR.dialog.CREATION_MODE});f.removeListener()});return c},addUpcastCallback:function(a){this._.upcastCallbacks.push(a)},
+e.on("blur",function(){var b;(b=a.focused)&&k(a,b);(b=a.widgetHoldingFocusedEditable)&&r(a,b,null)})}function A(a){var b=a.editor,e={};b.on("toDataFormat",function(b){var g=CKEDITOR.tools.getNextNumber(),f=[];b.data.downcastingSessionId=g;e[g]=f;b.data.dataValue.forEach(function(b){var e=b.attributes,g;if("data-cke-widget-white-space"in e){g=c(b);var k=d(b);g.parent.attributes["data-cke-white-space-first"]&&(g.value=g.value.replace(/^&nbsp;/g," "));k.parent.attributes["data-cke-white-space-last"]&&
+(k.value=k.value.replace(/&nbsp;$/g," "))}if("data-cke-widget-id"in e){if(e=a.instances[e["data-cke-widget-id"]])g=b.getFirst(h.isParserWidgetElement),f.push({wrapper:b,element:g,widget:e,editables:{}}),"1"!=g.attributes["data-cke-widget-keep-attr"]&&delete g.attributes["data-widget"]}else if("data-cke-widget-editable"in e)return 0<f.length&&(f[f.length-1].editables[e["data-cke-widget-editable"]]=b),!1},CKEDITOR.NODE_ELEMENT,!0)},null,null,8);b.on("toDataFormat",function(a){if(a.data.downcastingSessionId)for(var b=
+e[a.data.downcastingSessionId],c,d,g,f,h,k;c=b.shift();){d=c.widget;g=c.element;f=d._.downcastFn&&d._.downcastFn.call(d,g);a.data.widgetsCopy&&d.getClipboardHtml&&(f=CKEDITOR.htmlParser.fragment.fromHtml(d.getClipboardHtml()),f=f.children[0]);for(k in c.editables)h=c.editables[k],delete h.attributes.contenteditable,h.setHtml(d.editables[k].getData());f||(f=g);c.wrapper.replaceWith(f)}},null,null,13);b.on("contentDomUnload",function(){a.destroyAll(!0)})}function E(a){var b=a.editor,c,d;b.on("toHtml",
+function(b){var d=n(a),e;for(b.data.dataValue.forEach(d.iterator,CKEDITOR.NODE_ELEMENT,!0);e=d.toBeWrapped.pop();){var g=e[0],f=g.parent;f.type==CKEDITOR.NODE_ELEMENT&&f.attributes["data-cke-widget-wrapper"]&&f.replaceWith(g);a.wrapElement(e[0],e[1])}c=b.data.protectedWhitespaces?3==b.data.dataValue.children.length&&h.isParserWidgetWrapper(b.data.dataValue.children[1]):1==b.data.dataValue.children.length&&h.isParserWidgetWrapper(b.data.dataValue.children[0])},null,null,8);b.on("dataReady",function(){if(d)for(var c=
+b.editable().find(".cke_widget_wrapper"),e,g,f=0,k=c.count();f<k;++f)e=c.getItem(f),g=e.getFirst(h.isDomWidgetElement),g.type==CKEDITOR.NODE_ELEMENT&&g.data("widget")?(g.replace(e),a.wrapElement(g)):e.remove();d=0;a.destroyAll(!0);a.initOnAll()});b.on("loadSnapshot",function(b){/data-cke-widget/.test(b.data)&&(d=1);a.destroyAll(!0)},null,null,9);b.on("paste",function(a){a=a.data;a.dataValue=a.dataValue.replace(V,t);a.range&&(a=h.getNestedEditable(b.editable(),a.range.startContainer))&&(a=CKEDITOR.filter.instances[a.data("cke-filter")])&&
+b.setActiveFilter(a)});b.on("afterInsertHtml",function(d){d.data.intoRange?a.checkWidgets({initOnlyNew:!0}):(b.fire("lockSnapshot"),a.checkWidgets({initOnlyNew:!0,focusInited:c}),b.fire("unlockSnapshot"))})}function F(a){var b=a.selected,c=[],d=b.slice(0),e=null;return{select:function(a){0>CKEDITOR.tools.indexOf(b,a)&&c.push(a);a=CKEDITOR.tools.indexOf(d,a);0<=a&&d.splice(a,1);return this},focus:function(a){e=a;return this},commit:function(){var g=a.focused!==e,f,h;a.editor.fire("lockSnapshot");for(g&&
+(f=a.focused)&&k(a,f);f=d.pop();)b.splice(CKEDITOR.tools.indexOf(b,f),1),f.isInited()&&(h=f.editor.checkDirty(),f.setSelected(!1),!h&&f.editor.resetDirty());g&&e&&(h=a.editor.checkDirty(),a.focused=e,a.fire("widgetFocused",{widget:e}),e.setFocused(!0),!h&&a.editor.resetDirty());for(;f=c.pop();)b.push(f),f.setSelected(!0);a.editor.fire("unlockSnapshot")}}}function K(a){a&&a.addFilterRule(function(a){return a.replace(/\s*cke_widget_selected/g,"").replace(/\s*cke_widget_focused/g,"")})}function M(a,
+b,c){var d=0;b=L(b);var e=a.data.classes||{},g;if(b){for(e=CKEDITOR.tools.clone(e);g=b.pop();)c?e[g]||(d=e[g]=1):e[g]&&(delete e[g],d=1);d&&a.setData("classes",e)}}function D(a){a.cancel()}function N(a,b){var c=function(a){return a==CKEDITOR.ENTER_BR?"br":a==CKEDITOR.ENTER_DIV?"div":"p"}(a.editor.config.enterMode),d=new CKEDITOR.dom.element(c);"br"!==c&&d.appendBogus();"after"===b?d.insertAfter(a.wrapper):d.insertBefore(a.wrapper);(function(b){var c=a.editor.createRange();c.setStart(b,0);a.editor.getSelection().selectRanges([c])})(d)}
+function I(a,b){var c=a.widgets.focused,d,e,g;P.hasCopyBin(a)||(e=new P(a,{beforeDestroy:function(){!b&&c&&c.focus();g&&a.getSelection().selectBookmarks(g);d&&CKEDITOR.plugins.widgetselection.addFillers(a.editable())},afterDestroy:function(){b&&!a.readOnly&&(c?a.widgets.del(c):a.extractSelectedHtml(),a.fire("saveSnapshot"))}}),c||(d=CKEDITOR.env.webkit&&CKEDITOR.plugins.widgetselection.isWholeContentSelected(a.editable()),g=a.getSelection().createBookmarks(!0)),e.handle(G(a)))}function L(a){return(a=
+(a=a.getDefinition().attributes)&&a["class"])?a.split(/\s+/):null}function R(){var a=CKEDITOR.document.getActive(),b=this.editor,c=b.editable();(c.isInline()?c:b.document.getWindow().getFrame()).equals(a)&&b.focusManager.focus(c)}function H(){CKEDITOR.env.gecko&&this.editor.unlockSelection();CKEDITOR.env.webkit||(this.editor.forceNextSelectionCheck(),this.editor.selectionChange(1))}function G(a){var b=a.getSelectedHtml(!0);if(a.widgets.focused)return a.widgets.focused.getClipboardHtml();a.once("toDataFormat",
+function(a){a.data.widgetsCopy=!0},null,null,-1);return a.dataProcessor.toDataFormat(b)}function O(a,b){var c=a.editor.config.widget_keystrokeInsertLineBefore,d=a.editor.config.widget_keystrokeInsertLineAfter;Y(a);S(a);X(a);ca(a);W(a);ba(a);da(a);if(CKEDITOR.env.ie&&9>CKEDITOR.env.version)a.wrapper.on("dragstart",function(b){var c=b.data.getTarget();h.getNestedEditable(a,c)||a.inline&&h.isDomDragHandler(c)||b.data.preventDefault()});a.wrapper.removeClass("cke_widget_new");a.element.addClass("cke_widget_element");
+a.on("key",function(b){b=b.data.keyCode;if(b==c)N(a,"before"),a.editor.fire("saveSnapshot");else if(b==d)N(a,"after"),a.editor.fire("saveSnapshot");else if(13==b)a.edit();else{if(b==CKEDITOR.CTRL+67||b==CKEDITOR.CTRL+88){I(a.editor,b==CKEDITOR.CTRL+88);return}if(b in ha||CKEDITOR.CTRL&b||CKEDITOR.ALT&b)return}return!1},null,null,999);a.on("doubleclick",function(b){a.edit()&&b.cancel()});if(b.data)a.on("data",b.data);if(b.edit)a.on("edit",b.edit)}function Y(a){(a.wrapper=a.element.getParent()).setAttribute("data-cke-widget-id",
+a.id)}function S(a,b){a.partSelectors||(a.partSelectors=a.parts);if(a.parts){var c={},d,e;for(e in a.partSelectors)b||!a.parts[e]||"string"==typeof a.parts[e]?(d=a.wrapper.findOne(a.partSelectors[e]),c[e]=d):c[e]=a.parts[e];a.parts=c}}function X(a){var b=a.editables,c,d;a.editables={};if(a.editables)for(c in b)d=b[c],a.initEditable(c,"string"==typeof d?{selector:d}:d)}function ca(a){if(!0===a.mask)J(a);else if(a.mask){var b=new CKEDITOR.tools.buffers.throttle(250,T,a),c=CKEDITOR.env.gecko?300:0,d,
+e;a.on("focus",function(){b.input();d=a.editor.on("change",b.input);e=a.on("blur",function(){d.removeListener();e.removeListener()})});a.editor.on("instanceReady",function(){setTimeout(function(){b.input()},c)});a.editor.on("mode",function(){setTimeout(function(){b.input()},c)});if(CKEDITOR.env.gecko){var g=a.element.find("img");CKEDITOR.tools.array.forEach(g.toArray(),function(a){a.on("load",function(){b.input()})})}for(var f in a.editables)a.editables[f].on("focus",function(){a.editor.on("change",
+b.input);e&&e.removeListener()}),a.editables[f].on("blur",function(){a.editor.removeListener("change",b.input)});b.input()}}function J(a){var b=a.wrapper.findOne(".cke_widget_mask");b||(b=new CKEDITOR.dom.element("img",a.editor.document),b.setAttributes({src:CKEDITOR.tools.transparentImageData,"class":"cke_reset cke_widget_mask"}),a.wrapper.append(b));a.mask=b}function T(){if(this.wrapper){this.maskPart=this.maskPart||this.mask;var a=this.parts[this.maskPart],b;if(a&&"string"!=typeof a){b=this.wrapper.findOne(".cke_widget_partial_mask");
+b||(b=new CKEDITOR.dom.element("img",this.editor.document),b.setAttributes({src:CKEDITOR.tools.transparentImageData,"class":"cke_reset cke_widget_partial_mask"}),this.wrapper.append(b));this.mask=b;var c=b.$,d=a.$,e=!(c.offsetTop==d.offsetTop&&c.offsetLeft==d.offsetLeft);if(c.offsetWidth!=d.offsetWidth||c.offsetHeight!=d.offsetHeight||e)c=a.getParent(),d=CKEDITOR.plugins.widget.isDomWidget(c),b.setStyles({top:a.$.offsetTop+(d?0:c.$.offsetTop)+"px",left:a.$.offsetLeft+(d?0:c.$.offsetLeft)+"px",width:a.$.offsetWidth+
+"px",height:a.$.offsetHeight+"px"})}}}function W(a){if(a.draggable){var b=a.editor,c=a.wrapper.getLast(h.isDomDragHandlerContainer),d;c?d=c.findOne("img"):(c=new CKEDITOR.dom.element("span",b.document),c.setAttributes({"class":"cke_reset cke_widget_drag_handler_container",style:"background:rgba(220,220,220,0.5);background-image:url("+b.plugins.widget.path+"images/handle.png);display:none;"}),d=new CKEDITOR.dom.element("img",b.document),d.setAttributes({"class":"cke_reset cke_widget_drag_handler",
+"data-cke-widget-drag-handler":"1",src:CKEDITOR.tools.transparentImageData,width:15,title:b.lang.widget.move,height:15,role:"presentation"}),a.inline&&d.setAttribute("draggable","true"),c.append(d),a.wrapper.append(c));a.wrapper.on("dragover",function(a){a.data.preventDefault()});a.wrapper.on("mouseenter",a.updateDragHandlerPosition,a);setTimeout(function(){a.on("data",a.updateDragHandlerPosition,a)},50);if(!a.inline&&(d.on("mousedown",aa,a),CKEDITOR.env.ie&&9>CKEDITOR.env.version))d.on("dragstart",
+function(a){a.data.preventDefault(!0)});a.dragHandlerContainer=c}}function aa(a){function b(){var c;for(r.reset();c=h.pop();)c.removeListener();var d=k;c=a.sender;var e=this.repository.finder,g=this.repository.liner,f=this.editor,l=this.editor.editable();CKEDITOR.tools.isEmpty(g.visible)||(d=e.getRange(d[0]),this.focus(),f.fire("drop",{dropRange:d,target:d.startContainer}));l.removeClass("cke_widget_dragging");g.hideVisible();f.fire("dragend",{target:c})}if(CKEDITOR.tools.getMouseButton(a)===CKEDITOR.MOUSE_BUTTON_LEFT){var c=
+this.repository.finder,d=this.repository.locator,e=this.repository.liner,g=this.editor,f=g.editable(),h=[],k=[],l,m;this.repository._.draggedWidget=this;var n=c.greedySearch(),r=CKEDITOR.tools.eventsBuffer(50,function(){l=d.locate(n);k=d.sort(m,1);k.length&&(e.prepare(n,l),e.placeLine(k[0]),e.cleanup())});f.addClass("cke_widget_dragging");h.push(f.on("mousemove",function(a){m=a.data.$.clientY;r.input()}));g.fire("dragstart",{target:a.sender});h.push(g.document.once("mouseup",b,this));f.isInline()||
+h.push(CKEDITOR.document.once("mouseup",b,this))}}function ba(a){var b=null;a.on("data",function(){var a=this.data.classes,c;if(b!=a){for(c in b)a&&a[c]||this.removeClass(c);for(c in a)this.addClass(c);b=a}})}function da(a){a.on("data",function(){if(a.wrapper){var b=this.getLabel?this.getLabel():this.editor.lang.widget.label.replace(/%1/,this.pathName||this.element.getName());a.wrapper.setAttribute("role","region");a.wrapper.setAttribute("aria-label",b)}},null,null,9999)}function Z(a){a.element.data("cke-widget-data",
+encodeURIComponent(JSON.stringify(a.data)))}function U(){function a(){}function b(a,c,d){return d&&this.checkElement(a)?(a=d.widgets.getByElement(a,!0))&&a.checkStyleActive(this):!1}function c(a){function b(a,c,d){for(var e=a.length,g=0;g<e;){if(c.call(d,a[g],g,a))return a[g];g++}}function e(a){function b(a,c){var d=CKEDITOR.tools.object.keys(a),e=CKEDITOR.tools.object.keys(c);if(d.length!==e.length)return!1;for(var g in a)if(("object"!==typeof a[g]||"object"!==typeof c[g]||!b(a[g],c[g]))&&a[g]!==
+c[g])return!1;return!0}return function(c){return b(a.getDefinition(),c.getDefinition())}}var g=a.widget,f;d[g]||(d[g]={});for(var h=0,k=a.group.length;h<k;h++)f=a.group[h],d[g][f]||(d[g][f]=[]),f=d[g][f],b(f,e(a))||f.push(a)}var d={};CKEDITOR.style.addCustomHandler({type:"widget",setup:function(a){this.widget=a.widget;(this.group="string"==typeof a.group?[a.group]:a.group)&&c(this)},apply:function(a){var b;a instanceof CKEDITOR.editor&&this.checkApplicable(a.elementPath(),a)&&(b=a.widgets.focused,
+this.group&&this.removeStylesFromSameGroup(a),b.applyStyle(this))},remove:function(a){a instanceof CKEDITOR.editor&&this.checkApplicable(a.elementPath(),a)&&a.widgets.focused.removeStyle(this)},removeStylesFromSameGroup:function(a){var b=!1,c,e;if(!(a instanceof CKEDITOR.editor))return!1;e=a.elementPath();if(this.checkApplicable(e,a))for(var g=0,f=this.group.length;g<f;g++){c=d[this.widget][this.group[g]];for(var h=0;h<c.length;h++)c[h]!==this&&c[h].checkActive(e,a)&&(a.widgets.focused.removeStyle(c[h]),
+b=!0)}return b},checkActive:function(a,b){return this.checkElementMatch(a.lastElement,0,b)},checkApplicable:function(a,b){return b instanceof CKEDITOR.editor?this.checkElement(a.lastElement):!1},checkElementMatch:b,checkElementRemovable:b,checkElement:function(a){return h.isDomWidgetWrapper(a)?(a=a.getFirst(h.isDomWidgetElement))&&a.data("widget")==this.widget:!1},buildPreview:function(a){return a||this._.definition.name},toAllowedContentRules:function(a){if(!a)return null;a=a.widgets.registered[this.widget];
+var b,c={};if(!a)return null;if(a.styleableElements){b=this.getClassesArray();if(!b)return null;c[a.styleableElements]={classes:b,propertiesOnly:!0};return c}return a.styleToAllowedContentRules?a.styleToAllowedContentRules(this):null},getClassesArray:function(){var a=this._.definition.attributes&&this._.definition.attributes["class"];return a?CKEDITOR.tools.trim(a).split(/\s+/):null},applyToRange:a,removeFromRange:a,applyToObject:a})}CKEDITOR.plugins.add("widget",{requires:"lineutils,clipboard,widgetselection",
+onLoad:function(){void 0!==CKEDITOR.document.$.querySelectorAll&&(CKEDITOR.addCss('.cke_widget_wrapper{position:relative;outline:none}.cke_widget_inline{display:inline-block}.cke_widget_wrapper:hover\x3e.cke_widget_element{outline:2px solid #ffd25c;cursor:default}.cke_widget_wrapper:hover .cke_widget_editable{outline:2px solid #ffd25c}.cke_widget_wrapper.cke_widget_focused\x3e.cke_widget_element,.cke_widget_wrapper .cke_widget_editable.cke_widget_editable_focused{outline:2px solid #47a4f5}.cke_widget_editable{cursor:text}.cke_widget_drag_handler_container{position:absolute;width:15px;height:0;display:block;opacity:0.75;transition:height 0s 0.2s;line-height:0}.cke_widget_wrapper:hover\x3e.cke_widget_drag_handler_container{height:15px;transition:none}.cke_widget_drag_handler_container:hover{opacity:1}.cke_editable[contenteditable\x3d"false"] .cke_widget_drag_handler_container{display:none;}img.cke_widget_drag_handler{cursor:move;width:15px;height:15px;display:inline-block}.cke_widget_mask{position:absolute;top:0;left:0;width:100%;height:100%;display:block}.cke_widget_partial_mask{position:absolute;display:block}.cke_editable.cke_widget_dragging, .cke_editable.cke_widget_dragging *{cursor:move !important}'),
+U())},beforeInit:function(a){void 0!==CKEDITOR.document.$.querySelectorAll&&(a.widgets=new b(a))},afterInit:function(a){if(void 0!==CKEDITOR.document.$.querySelectorAll){var b=a.widgets.registered,c,d,e;for(d in b)c=b[d],(e=c.button)&&a.ui.addButton&&a.ui.addButton(CKEDITOR.tools.capitalize(c.name,!0),{label:e,command:c.name,toolbar:"insert,10"});x(a);K(a.undoManager)}}});b.prototype={MIN_SELECTION_CHECK_INTERVAL:500,add:function(b,c){var d=this.editor;c=CKEDITOR.tools.prototypedCopy(c);c.name=b;
+c._=c._||{};d.fire("widgetDefinition",c);c.template&&(c.template=new CKEDITOR.template(c.template));e(d,c);a(this,c);this.registered[b]=c;if(c.dialog&&d.plugins.dialog)var g=CKEDITOR.on("dialogDefinition",function(a){a=a.data.definition;var b=a.dialog;a.getMode||b.getName()!==c.dialog||(a.getMode=function(){var a=b.getModel(d);return a&&a instanceof CKEDITOR.plugins.widget&&a.ready?CKEDITOR.dialog.EDITING_MODE:CKEDITOR.dialog.CREATION_MODE});g.removeListener()});return c},addUpcastCallback:function(a){this._.upcastCallbacks.push(a)},
 checkSelection:function(){if(this.editor.getSelection()){var a=this.editor.getSelection(),b=a.getSelectedElement(),c=F(this),d;if(b&&(d=this.getByElement(b,!0)))return c.focus(d).select(d).commit();a=a.getRanges()[0];if(!a||a.collapsed)return c.commit();a=new CKEDITOR.dom.walker(a);for(a.evaluator=h.isDomWidgetWrapper;b=a.next();)c.select(this.getByElement(b));c.commit()}},checkWidgets:function(a){this.fire("checkWidgets",CKEDITOR.tools.copy(a||{}))},del:function(a){if(this.focused===a){var b=a.editor,
-c=b.createRange(),d;(d=c.moveToClosestEditablePosition(a.wrapper,!0))||(d=c.moveToClosestEditablePosition(a.wrapper,!1));d&&b.getSelection().selectRanges([c])}a.wrapper.remove();this.destroy(a,!0)},destroy:function(a,b){this.widgetHoldingFocusedEditable===a&&r(this,a,null,b);a.destroy(b);delete this.instances[a.id];this.fire("instanceDestroyed",a)},destroyAll:function(a,b){var c,d,e=this.instances;if(b&&!a){d=b.find(".cke_widget_wrapper");for(var e=d.count(),f=0;f<e;++f)(c=this.getByElement(d.getItem(f),
+c=b.createRange(),d;(d=c.moveToClosestEditablePosition(a.wrapper,!0))||(d=c.moveToClosestEditablePosition(a.wrapper,!1));d&&b.getSelection().selectRanges([c])}a.wrapper.remove();this.destroy(a,!0)},destroy:function(a,b){this.widgetHoldingFocusedEditable===a&&r(this,a,null,b);a.destroy(b);delete this.instances[a.id];this.fire("instanceDestroyed",a)},destroyAll:function(a,b){var c,d,e=this.instances;if(b&&!a){d=b.find(".cke_widget_wrapper");for(var e=d.count(),g=0;g<e;++g)(c=this.getByElement(d.getItem(g),
 !0))&&this.destroy(c)}else for(d in e)c=e[d],this.destroy(c,a)},finalizeCreation:function(a){(a=a.getFirst())&&h.isDomWidgetWrapper(a)&&(this.editor.insertElement(a),a=this.getByElement(a),a.ready=!0,a.fire("ready"),a.focus())},getByElement:function(){function a(c){return c.is(b)&&c.data("cke-widget-id")}var b={div:1,span:1};return function(b,c){if(!b)return null;var d=a(b);if(!c&&!d){var e=this.editor.editable();do b=b.getParent();while(b&&!b.equals(e)&&!(d=a(b)))}return this.instances[d]||null}}(),
 initOn:function(a,b,c){b?"string"==typeof b&&(b=this.registered[b]):b=this.registered[a.data("widget")];if(!b)return null;var d=this.wrapElement(a,b.name);return d?d.hasClass("cke_widget_new")?(a=new h(this,this._.nextId++,a,b,c),a.isInited()?this.instances[a.id]=a:null):this.getByElement(a):null},initOnAll:function(a){a=(a||this.editor.editable()).find(".cke_widget_new");for(var b=[],c,d=a.count();d--;)(c=this.initOn(a.getItem(d).getFirst(h.isDomWidgetElement)))&&b.push(c);return b},onWidget:function(a){var b=
 Array.prototype.slice.call(arguments);b.shift();for(var c in this.instances){var d=this.instances[c];d.name==a&&d.on.apply(d,b)}this.on("instanceCreated",function(c){c=c.data;c.name==a&&c.on.apply(c,b)})},parseElementClasses:function(a){if(!a)return null;a=CKEDITOR.tools.trim(a).split(/\s+/);for(var b,c={},d=0;b=a.pop();)-1==b.indexOf("cke_")&&(c[b]=d=1);return d?c:null},wrapElement:function(a,b){var c=null,d,e;if(a instanceof CKEDITOR.dom.element){b=b||a.data("widget");d=this.registered[b];if(!d)return null;
-if((c=a.getParent())&&c.type==CKEDITOR.NODE_ELEMENT&&c.data("cke-widget-wrapper"))return c;a.hasAttribute("data-cke-widget-keep-attr")||a.data("cke-widget-keep-attr",a.data("widget")?1:0);a.data("widget",b);(e=p(d,a.getName()))&&l(a);c=new CKEDITOR.dom.element(e?"span":"div",a.getDocument());c.setAttributes(y(e,b));c.data("cke-display-name",d.pathName?d.pathName:a.getName());a.getParent(!0)&&c.replace(a);a.appendTo(c)}else if(a instanceof CKEDITOR.htmlParser.element){b=b||a.attributes["data-widget"];
-d=this.registered[b];if(!d)return null;if((c=a.parent)&&c.type==CKEDITOR.NODE_ELEMENT&&c.attributes["data-cke-widget-wrapper"])return c;"data-cke-widget-keep-attr"in a.attributes||(a.attributes["data-cke-widget-keep-attr"]=a.attributes["data-widget"]?1:0);b&&(a.attributes["data-widget"]=b);(e=p(d,a.name))&&l(a);c=new CKEDITOR.htmlParser.element(e?"span":"div",y(e,b));c.attributes["data-cke-display-name"]=d.pathName?d.pathName:a.name;d=a.parent;var f;d&&(f=a.getIndex(),a.remove());c.add(a);d&&w(d,
-f,c)}return c},_tests_createEditableFilter:g};CKEDITOR.event.implementOn(b.prototype);h.prototype={addClass:function(a){this.element.addClass(a);this.wrapper.addClass(h.WRAPPER_CLASS_PREFIX+a)},applyStyle:function(a){L(this,a,1)},checkStyleActive:function(a){a=I(a);var b;if(!a)return!1;for(;b=a.pop();)if(!this.hasClass(b))return!1;return!0},destroy:function(a){this.fire("destroy");if(this.editables)for(var b in this.editables)this.destroyEditable(b,a);a||("0"==this.element.data("cke-widget-keep-attr")&&
-this.element.removeAttribute("data-widget"),this.element.removeAttributes(["data-cke-widget-data","data-cke-widget-keep-attr"]),this.element.removeClass("cke_widget_element"),this.element.replace(this.wrapper));this.wrapper=null},destroyEditable:function(a,b){var c=this.editables[a],d=!0;c.removeListener("focus",Q);c.removeListener("blur",M);this.editor.focusManager.remove(c);if(c.filter){for(var e in this.repository.instances){var f=this.repository.instances[e];f.editables&&(f=f.editables[a])&&f!==
-c&&c.filter===f.filter&&(d=!1)}d&&(c.filter.destroy(),(d=this.repository._.filters[this.name])&&delete d[a])}b||(this.repository.destroyAll(!1,c),c.removeClass("cke_widget_editable"),c.removeClass("cke_widget_editable_focused"),c.removeAttributes(["contenteditable","data-cke-widget-editable","data-cke-enter-mode"]));delete this.editables[a]},edit:function(){var a={dialog:this.dialog},b=this;if(!1===this.fire("edit",a)||!a.dialog)return!1;this.editor.openDialog(a.dialog,function(a){var c,d;!1!==b.fire("dialog",
+if((c=a.getParent())&&c.type==CKEDITOR.NODE_ELEMENT&&c.data("cke-widget-wrapper"))return c;a.hasAttribute("data-cke-widget-keep-attr")||a.data("cke-widget-keep-attr",a.data("widget")?1:0);a.data("widget",b);(e=p(d,a.getName()))&&m(a);c=new CKEDITOR.dom.element(e?"span":"div",a.getDocument());c.setAttributes(y(e,b));c.data("cke-display-name",d.pathName?d.pathName:a.getName());a.getParent(!0)&&c.replace(a);a.appendTo(c)}else if(a instanceof CKEDITOR.htmlParser.element){b=b||a.attributes["data-widget"];
+d=this.registered[b];if(!d)return null;if((c=a.parent)&&c.type==CKEDITOR.NODE_ELEMENT&&c.attributes["data-cke-widget-wrapper"])return c;"data-cke-widget-keep-attr"in a.attributes||(a.attributes["data-cke-widget-keep-attr"]=a.attributes["data-widget"]?1:0);b&&(a.attributes["data-widget"]=b);(e=p(d,a.name))&&m(a);c=new CKEDITOR.htmlParser.element(e?"span":"div",y(e,b));c.attributes["data-cke-display-name"]=d.pathName?d.pathName:a.name;d=a.parent;var g;d&&(g=a.getIndex(),a.remove());c.add(a);d&&v(d,
+g,c)}return c},_tests_createEditableFilter:g};CKEDITOR.event.implementOn(b.prototype);h.prototype={addClass:function(a){this.element.addClass(a);this.wrapper.addClass(h.WRAPPER_CLASS_PREFIX+a)},applyStyle:function(a){M(this,a,1)},checkStyleActive:function(a){a=L(a);var b;if(!a)return!1;for(;b=a.pop();)if(!this.hasClass(b))return!1;return!0},destroy:function(a){this.fire("destroy");if(this.editables)for(var b in this.editables)this.destroyEditable(b,a);a||("0"==this.element.data("cke-widget-keep-attr")&&
+this.element.removeAttribute("data-widget"),this.element.removeAttributes(["data-cke-widget-data","data-cke-widget-keep-attr"]),this.element.removeClass("cke_widget_element"),this.element.replace(this.wrapper));this.wrapper=null},destroyEditable:function(a,b){var c=this.editables[a],d=!0;c.removeListener("focus",H);c.removeListener("blur",R);this.editor.focusManager.remove(c);if(c.filter){for(var e in this.repository.instances){var g=this.repository.instances[e];g.editables&&(g=g.editables[a])&&g!==
+c&&c.filter===g.filter&&(d=!1)}d&&(c.filter.destroy(),(d=this.repository._.filters[this.name])&&delete d[a])}b||(this.repository.destroyAll(!1,c),c.removeClass("cke_widget_editable"),c.removeClass("cke_widget_editable_focused"),c.removeAttributes(["contenteditable","data-cke-widget-editable","data-cke-enter-mode"]));delete this.editables[a]},edit:function(){var a={dialog:this.dialog},b=this;if(!1===this.fire("edit",a)||!a.dialog)return!1;this.editor.openDialog(a.dialog,function(a){var c,d;!1!==b.fire("dialog",
 a)&&(c=a.on("show",function(){a.setupContent(b)}),d=a.on("ok",function(){var c,d=b.on("data",function(a){c=1;a.cancel()},null,null,0);b.editor.fire("saveSnapshot");a.commitContent(b);d.removeListener();c&&(b.fire("data",b.data),b.editor.fire("saveSnapshot"))}),a.once("hide",function(){c.removeListener();d.removeListener()}))},b);return!0},getClasses:function(){return this.repository.parseElementClasses(this.element.getAttribute("class"))},getClipboardHtml:function(){var a=this.editor.createRange();
 a.setStartBefore(this.wrapper);a.setEndAfter(this.wrapper);return this.editor.editable().getHtmlFromRange(a).getHtml()},hasClass:function(a){return this.element.hasClass(a)},initEditable:function(a,b){var c=this._findOneNotNested(b.selector);return c&&c.is(CKEDITOR.dtd.$editable)?(c=new f(this.editor,c,{filter:g.call(this.repository,this.name,a,b)}),this.editables[a]=c,c.setAttributes({contenteditable:"true","data-cke-widget-editable":a,"data-cke-enter-mode":c.enterMode}),c.filter&&c.data("cke-filter",
-c.filter.id),c.addClass("cke_widget_editable"),c.removeClass("cke_widget_editable_focused"),b.pathName&&c.data("cke-display-name",b.pathName),this.editor.focusManager.add(c),c.on("focus",Q,this),CKEDITOR.env.ie&&c.on("blur",M,this),c._.initialSetData=!0,c.setData(c.getHtml()),!0):!1},_findOneNotNested:function(a){a=this.wrapper.find(a);for(var b,c,d=0;d<a.count();d++)if(b=a.getItem(d),c=b.getAscendant(h.isDomWidgetWrapper),this.wrapper.equals(c))return b;return null},isInited:function(){return!(!this.wrapper||
-!this.inited)},isReady:function(){return this.isInited()&&this.ready},focus:function(){var a=this.editor.getSelection();if(a){var b=this.editor.checkDirty();a.fake(this.wrapper);!b&&this.editor.resetDirty()}this.editor.focus()},refreshMask:function(){X(this)},refreshParts:function(a){Y(this,"undefined"!==typeof a?a:!0)},removeClass:function(a){this.element.removeClass(a);this.wrapper.removeClass(h.WRAPPER_CLASS_PREFIX+a)},removeStyle:function(a){L(this,a,0)},setData:function(a,b){var c=this.data,
-d=0;if("string"==typeof a)c[a]!==b&&(c[a]=b,d=1);else{var e=a;for(a in e)c[a]!==e[a]&&(d=1,c[a]=e[a])}d&&this.dataReady&&(ca(this),this.fire("data",c));return this},setFocused:function(a){this.wrapper[a?"addClass":"removeClass"]("cke_widget_focused");this.fire(a?"focus":"blur");return this},setSelected:function(a){this.wrapper[a?"addClass":"removeClass"]("cke_widget_selected");this.fire(a?"select":"deselect");return this},updateDragHandlerPosition:function(){var a=this.editor,b=this.element.$,c=this._.dragHandlerOffset,
+c.filter.id),c.addClass("cke_widget_editable"),c.removeClass("cke_widget_editable_focused"),b.pathName&&c.data("cke-display-name",b.pathName),this.editor.focusManager.add(c),c.on("focus",H,this),CKEDITOR.env.ie&&c.on("blur",R,this),c._.initialSetData=!0,c.setData(c.getHtml()),!0):!1},_findOneNotNested:function(a){a=this.wrapper.find(a);for(var b,c,d=0;d<a.count();d++)if(b=a.getItem(d),c=b.getAscendant(h.isDomWidgetWrapper),this.wrapper.equals(c))return b;return null},isInited:function(){return!(!this.wrapper||
+!this.inited)},isReady:function(){return this.isInited()&&this.ready},focus:function(){var a=this.editor.getSelection();if(a){var b=this.editor.checkDirty();a.fake(this.wrapper);!b&&this.editor.resetDirty()}this.editor.focus()},refreshMask:function(){ca(this)},refreshParts:function(a){S(this,"undefined"!==typeof a?a:!0)},removeClass:function(a){this.element.removeClass(a);this.wrapper.removeClass(h.WRAPPER_CLASS_PREFIX+a)},removeStyle:function(a){M(this,a,0)},setData:function(a,b){var c=this.data,
+d=0;if("string"==typeof a)c[a]!==b&&(c[a]=b,d=1);else{var e=a;for(a in e)c[a]!==e[a]&&(d=1,c[a]=e[a])}d&&this.dataReady&&(Z(this),this.fire("data",c));return this},setFocused:function(a){this.wrapper[a?"addClass":"removeClass"]("cke_widget_focused");this.fire(a?"focus":"blur");return this},setSelected:function(a){this.wrapper[a?"addClass":"removeClass"]("cke_widget_selected");this.fire(a?"select":"deselect");return this},updateDragHandlerPosition:function(){var a=this.editor,b=this.element.$,c=this._.dragHandlerOffset,
 b={x:b.offsetLeft,y:b.offsetTop-15};c&&b.x==c.x&&b.y==c.y||(c=a.checkDirty(),a.fire("lockSnapshot"),this.dragHandlerContainer.setStyles({top:b.y+"px",left:b.x+"px"}),this.dragHandlerContainer.removeStyle("display"),a.fire("unlockSnapshot"),!c&&a.resetDirty(),this._.dragHandlerOffset=b)}};CKEDITOR.event.implementOn(h.prototype);h.getNestedEditable=function(a,b){return!b||b.equals(a)?null:h.isDomNestedEditable(b)?b:h.getNestedEditable(a,b.getParent())};h.isDomDragHandler=function(a){return a.type==
 CKEDITOR.NODE_ELEMENT&&a.hasAttribute("data-cke-widget-drag-handler")};h.isDomDragHandlerContainer=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasClass("cke_widget_drag_handler_container")};h.isDomNestedEditable=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("data-cke-widget-editable")};h.isDomWidgetElement=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("data-widget")};h.isDomWidgetWrapper=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("data-cke-widget-wrapper")};
 h.isDomWidget=function(a){return a?this.isDomWidgetWrapper(a)||this.isDomWidgetElement(a):!1};h.isParserWidgetElement=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&!!a.attributes["data-widget"]};h.isParserWidgetWrapper=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&!!a.attributes["data-cke-widget-wrapper"]};h.WRAPPER_CLASS_PREFIX="cke_widget_wrapper_";f.prototype=CKEDITOR.tools.extend(CKEDITOR.tools.prototypedCopy(CKEDITOR.dom.element.prototype),{setData:function(a){this._.initialSetData||
-this.editor.widgets.destroyAll(!1,this);this._.initialSetData=!1;a=this.editor.dataProcessor.unprotectRealComments(a);a=this.editor.dataProcessor.unprotectSource(a);a=this.editor.dataProcessor.toHtml(a,{context:this.getName(),filter:this.filter,enterMode:this.enterMode});this.setHtml(a);this.editor.widgets.initOnAll(this)},getData:function(){return this.editor.dataProcessor.toDataFormat(this.getHtml(),{context:this.getName(),filter:this.filter,enterMode:this.enterMode})}});var U=/^(?:<(?:div|span)(?: data-cke-temp="1")?(?: id="cke_copybin")?(?: data-cke-temp="1")?>)?(?:<(?:div|span)(?: style="[^"]+")?>)?<span [^>]*data-cke-copybin-start="1"[^>]*>.?<\/span>([\s\S]+)<span [^>]*data-cke-copybin-end="1"[^>]*>.?<\/span>(?:<\/(?:div|span)>)?(?:<\/(?:div|span)>)?$/i,
-V={37:1,38:1,39:1,40:1,8:1,46:1};V[CKEDITOR.SHIFT+121]=1;var ga=CKEDITOR.tools.createClass({$:function(a,b){this._.createCopyBin(a,b);this._.createListeners(b)},_:{createCopyBin:function(a){var b=a.document,c=CKEDITOR.env.edge&&16<=CKEDITOR.env.version,d=!a.blockless&&!CKEDITOR.env.ie||c?"div":"span",c=b.createElement(d),b=b.createElement(d);b.setAttributes({id:"cke_copybin","data-cke-temp":"1"});c.setStyles({position:"absolute",width:"1px",height:"1px",overflow:"hidden"});c.setStyle("ltr"==a.config.contentsLangDirection?
-"left":"right","-5000px");this.editor=a;this.copyBin=c;this.container=b},createListeners:function(a){a&&(a.beforeDestroy&&(this.beforeDestroy=a.beforeDestroy),a.afterDestroy&&(this.afterDestroy=a.afterDestroy))}},proto:{handle:function(a){var b=this.copyBin,c=this.editor,d=this.container,e=CKEDITOR.env.ie&&9>CKEDITOR.env.version,f=c.document.getDocumentElement().$,g=c.createRange(),h=this,k=CKEDITOR.env.mac&&CKEDITOR.env.webkit,l=k?100:0,m=window.requestAnimationFrame&&!k?requestAnimationFrame:setTimeout,
-n,r,q;b.setHtml('\x3cspan data-cke-copybin-start\x3d"1"\x3e​\x3c/span\x3e'+a+'\x3cspan data-cke-copybin-end\x3d"1"\x3e​\x3c/span\x3e');c.fire("lockSnapshot");d.append(b);c.editable().append(d);n=c.on("selectionChange",C,null,null,0);r=c.widgets.on("checkSelection",C,null,null,0);e&&(q=f.scrollTop);g.selectNodeContents(b);g.select();e&&(f.scrollTop=q);return new CKEDITOR.tools.promise(function(a){m(function(){h.beforeDestroy&&h.beforeDestroy();d.remove();n.removeListener();r.removeListener();c.fire("unlockSnapshot");
-h.afterDestroy&&h.afterDestroy();a()},l)})}},statics:{hasCopyBin:function(a){return!!ga.getCopyBin(a)},getCopyBin:function(a){return a.document.getById("cke_copybin")}}});CKEDITOR.plugins.widget=h;h.repository=b;h.nestedEditable=f}(),"use strict",function(){function b(a){function b(){this.deflated||(a.widgets.focused==this.widget&&(this.focused=!0),a.widgets.destroy(this.widget),this.deflated=!0)}function c(){var b=a.editable(),d=a.document;if(this.deflated)this.widget=a.widgets.initOn(this.element,
-"image",this.widget.data),this.widget.inline&&!(new CKEDITOR.dom.elementPath(this.widget.wrapper,b)).block&&(b=d.createElement(a.activeEnterMode==CKEDITOR.ENTER_P?"p":"div"),b.replace(this.widget.wrapper),this.widget.wrapper.move(b)),this.focused&&(this.widget.focus(),delete this.focused),delete this.deflated;else{var f=this.widget,b=e,d=f.wrapper,g=f.data.align,f=f.data.hasCaption;if(b){for(var h=3;h--;)d.removeClass(b[h]);"center"==g?f&&d.addClass(b[1]):"none"!=g&&d.addClass(b[w[g]])}else"center"==
-g?(f?d.setStyle("text-align","center"):d.removeStyle("text-align"),d.removeStyle("float")):("none"==g?d.removeStyle("float"):d.setStyle("float",g),d.removeStyle("text-align"))}}var e=a.config.image2_alignClasses,k=a.config.image2_captionedClass;return{allowedContent:d(a),requiredContent:"img[src,alt]",features:g(a),styleableElements:"img figure",contentTransformations:[["img[width]: sizeToAttribute"]],editables:{caption:{selector:"figcaption",allowedContent:"br em strong sub sup u s; a[!href,target]"}},
-parts:{image:"img",caption:"figcaption"},dialog:"image2",template:'\x3cimg alt\x3d"" src\x3d"" /\x3e',data:function(){var d=this.features;this.data.hasCaption&&!a.filter.checkFeature(d.caption)&&(this.data.hasCaption=!1);"none"==this.data.align||a.filter.checkFeature(d.align)||(this.data.align="none");this.shiftState({widget:this,element:this.element,oldData:this.oldData,newData:this.data,deflate:b,inflate:c});this.data.link?this.parts.link||(this.parts.link=this.parts.image.getParent()):this.parts.link&&
-delete this.parts.link;this.parts.image.setAttributes({src:this.data.src,"data-cke-saved-src":this.data.src,alt:this.data.alt});if(this.oldData&&!this.oldData.hasCaption&&this.data.hasCaption)for(var e in this.data.classes)this.parts.image.removeClass(e);if(a.filter.checkFeature(d.dimension)){d=this.data;d={width:d.width,height:d.height};e=this.parts.image;for(var f in d)d[f]?e.setAttribute(f,d[f]):e.removeAttribute(f)}this.oldData=CKEDITOR.tools.extend({},this.data)},init:function(){var b=CKEDITOR.plugins.image2,
-c=this.parts.image,d={hasCaption:!!this.parts.caption,src:c.getAttribute("src"),alt:c.getAttribute("alt")||"",width:c.getAttribute("width")||"",height:c.getAttribute("height")||"",lock:this.ready?b.checkHasNaturalRatio(c):!0},f=c.getAscendant("a");f&&this.wrapper.contains(f)&&(this.parts.link=f);d.align||(c=d.hasCaption?this.element:c,e?(c.hasClass(e[0])?d.align="left":c.hasClass(e[2])&&(d.align="right"),d.align?c.removeClass(e[w[d.align]]):d.align="none"):(d.align=c.getStyle("float")||"none",c.removeStyle("float")));
-a.plugins.link&&this.parts.link&&(d.link=b.getLinkAttributesParser()(a,this.parts.link),(c=d.link.advanced)&&c.advCSSClasses&&(c.advCSSClasses=CKEDITOR.tools.trim(c.advCSSClasses.replace(/cke_\S+/,""))));this.wrapper[(d.hasCaption?"remove":"add")+"Class"]("cke_image_nocaption");this.setData(d);a.filter.checkFeature(this.features.dimension)&&!0!==a.config.image2_disableResizer&&m(this);this.shiftState=b.stateShifter(this.editor);this.on("contextMenu",function(a){a.data.image=CKEDITOR.TRISTATE_OFF;
-if(this.parts.link||this.wrapper.getAscendant("a"))a.data.link=a.data.unlink=CKEDITOR.TRISTATE_OFF})},addClass:function(a){n(this).addClass(a)},hasClass:function(a){return n(this).hasClass(a)},removeClass:function(a){n(this).removeClass(a)},getClasses:function(){var a=new RegExp("^("+[].concat(k,e).join("|")+")$");return function(){var b=this.repository.parseElementClasses(n(this).getAttribute("class")),c;for(c in b)a.test(c)&&delete b[c];return b}}(),upcast:h(a),downcast:f(a),getLabel:function(){return this.editor.lang.widget.label.replace(/%1/,
-(this.data.alt||"")+" "+this.pathName)}}}function h(b){var c=e(b),d=b.config.image2_captionedClass;return function(b,e){var f={width:1,height:1},g=b.name,h;if(!b.attributes["data-cke-realelement"]&&(c(b)?("div"==g&&(h=b.getFirst("figure"))&&(b.replaceWith(h),b=h),e.align="center",h=b.getFirst("img")||b.getFirst("a").getFirst("img")):"figure"==g&&b.hasClass(d)?h=b.find(function(a){return"img"===a.name&&-1!==CKEDITOR.tools.array.indexOf(["figure","a"],a.parent.name)},!0)[0]:a(b)&&(h="a"==b.name?b.children[0]:
-b),h)){for(var k in f)(f=h.attributes[k])&&f.match(p)&&delete h.attributes[k];return b}}}function f(a){var b=a.config.image2_alignClasses;return function(a){var c="a"==a.name?a.getFirst():a,d=c.attributes,e=this.data.align;if(!this.inline){var f=a.getFirst("span");f&&f.replaceWith(f.getFirst({img:1,a:1}))}e&&"none"!=e&&(f=CKEDITOR.tools.parseCssText(d.style||""),"center"==e&&"figure"==a.name?a=a.wrapWith(new CKEDITOR.htmlParser.element("div",b?{"class":b[1]}:{style:"text-align:center"})):e in{left:1,
-right:1}&&(b?c.addClass(b[w[e]]):f["float"]=e),b||CKEDITOR.tools.isEmpty(f)||(d.style=CKEDITOR.tools.writeCssText(f)));return a}}function e(b){var c=b.config.image2_captionedClass,d=b.config.image2_alignClasses,e={figure:1,a:1,img:1};return function(f){if(!(f.name in{div:1,p:1}))return!1;var g=f.children;if(1!==g.length)return!1;g=g[0];if(!(g.name in e))return!1;if("p"==f.name){if(!a(g))return!1}else if("figure"==g.name){if(!g.hasClass(c))return!1}else if(b.enterMode==CKEDITOR.ENTER_P||!a(g))return!1;
-return(d?f.hasClass(d[1]):"center"==CKEDITOR.tools.parseCssText(f.attributes.style||"",!0)["text-align"])?!0:!1}}function a(a){return"img"==a.name?!0:"a"==a.name?1==a.children.length&&a.getFirst("img"):!1}function m(a){var b=a.editor,c=b.editable(),d=b.document,e=a.resizer=d.createElement("span");e.addClass("cke_image_resizer");e.setAttribute("title",b.lang.image2.resizer);e.append(new CKEDITOR.dom.text("​",d));if(a.inline)a.wrapper.append(e);else{var f=a.parts.link||a.parts.image,g=f.getParent(),
-h=d.createElement("span");h.addClass("cke_image_resizer_wrapper");h.append(f);h.append(e);a.element.append(h,!0);g.is("span")&&g.remove()}e.on("mousedown",function(f){function g(a,b,c){var e=CKEDITOR.document,f=[];d.equals(e)||f.push(e.on(a,b));f.push(d.on(a,b));if(c)for(a=f.length;a--;)c.push(f.pop())}function h(){T=p+n*J;X=Math.round(T/B)}function k(){X=y-S;T=Math.round(X*B)}var l=a.parts.image,m=function(){var a=b.config.image2_maxSize,c;if(!a)return null;a=CKEDITOR.tools.copy(a);c=CKEDITOR.plugins.image2.getNatural(l);
-a.width=Math.max("natural"===a.width?c.width:a.width,15);a.height=Math.max("natural"===a.height?c.height:a.height,15);return a}(),n="right"==a.data.align?-1:1,q=f.data.$.screenX,v=f.data.$.screenY,p=l.$.clientWidth,y=l.$.clientHeight,B=p/y,w=[],P="cke_image_s"+(~n?"e":"w"),Y,T,X,da,J,S,W;b.fire("saveSnapshot");g("mousemove",function(a){Y=a.data.$;J=Y.screenX-q;S=v-Y.screenY;W=Math.abs(J/S);1==n?0>=J?0>=S?h():W>=B?h():k():0>=S?W>=B?k():h():k():0>=J?0>=S?W>=B?k():h():k():0>=S?h():W>=B?h():k();a=m&&
-(T>m.width||X>m.height);15>T||15>X||a||(da={width:T,height:X},l.setAttributes(da))},w);g("mouseup",function(){for(var d;d=w.pop();)d.removeListener();c.removeClass(P);e.removeClass("cke_image_resizing");da&&(a.setData(da),b.fire("saveSnapshot"));da=!1},w);c.addClass(P);e.addClass("cke_image_resizing")});a.on("data",function(){e["right"==a.data.align?"addClass":"removeClass"]("cke_image_resizer_left")})}function k(a){var b=[],d;return function(e){var f=a.getCommand("justify"+e);if(f){b.push(function(){f.refresh(a,
-a.elementPath())});if(e in{right:1,left:1,center:1})f.on("exec",function(d){var f=c(a);if(f){f.setData("align",e);for(f=b.length;f--;)b[f]();d.cancel()}});f.on("refresh",function(b){var f=c(a),g={right:1,left:1,center:1};f&&(void 0===d&&(d=a.filter.checkFeature(a.widgets.registered.image.features.align)),d?this.setState(f.data.align==e?CKEDITOR.TRISTATE_ON:e in g?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED):this.setState(CKEDITOR.TRISTATE_DISABLED),b.cancel())})}}}function l(a){if(a.plugins.link){var b=
-CKEDITOR.on("dialogDefinition",function(b){b=b.data;if("link"==b.name){b=b.definition;var d=b.onShow,e=b.onOk;b.onShow=function(){var b=c(a),e=this.getContentElement("info","linkDisplayText").getElement().getParent().getParent();b&&(b.inline?!b.wrapper.getAscendant("a"):1)?(this.setupContent(b.data.link||{}),e.hide()):(e.show(),d.apply(this,arguments))};b.onOk=function(){var b=c(a);if(b&&(b.inline?!b.wrapper.getAscendant("a"):1)){var d={};this.commitContent(d);b.setData("link",d)}else e.apply(this,
-arguments)}}});a.on("destroy",function(){b.removeListener()});a.getCommand("unlink").on("exec",function(b){var d=c(a);d&&d.parts.link&&(d.setData("link",null),this.refresh(a,a.elementPath()),b.cancel())});a.getCommand("unlink").on("refresh",function(b){var d=c(a);d&&(this.setState(d.data.link||d.wrapper.getAscendant("a")?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED),b.cancel())})}}function c(a){return(a=a.widgets.focused)&&"image"==a.name?a:null}function d(a){var b=a.config.image2_alignClasses;
-a={div:{match:e(a)},p:{match:e(a)},img:{attributes:"!src,alt,width,height"},figure:{classes:"!"+a.config.image2_captionedClass},figcaption:!0};b?(a.div.classes=b[1],a.p.classes=a.div.classes,a.img.classes=b[0]+","+b[2],a.figure.classes+=","+a.img.classes):(a.div.styles="text-align",a.p.styles="text-align",a.img.styles="float",a.figure.styles="float,display");return a}function g(a){a=a.config.image2_alignClasses;return{dimension:{requiredContent:"img[width,height]"},align:{requiredContent:"img"+(a?
-"("+a[0]+")":"{float}")},caption:{requiredContent:"figcaption"}}}function n(a){return a.data.hasCaption?a.element:a.parts.image}var y=new CKEDITOR.template('\x3cfigure class\x3d"{captionedClass}"\x3e\x3cimg alt\x3d"" src\x3d"" /\x3e\x3cfigcaption\x3e{captionPlaceholder}\x3c/figcaption\x3e\x3c/figure\x3e'),w={left:0,center:1,right:2},p=/^\s*(\d+\%)\s*$/i;CKEDITOR.plugins.add("image2",{requires:"widget,dialog",icons:"image",hidpi:!0,onLoad:function(){CKEDITOR.addCss('.cke_image_nocaption{line-height:0}.cke_editable.cke_image_sw, .cke_editable.cke_image_sw *{cursor:sw-resize !important}.cke_editable.cke_image_se, .cke_editable.cke_image_se *{cursor:se-resize !important}.cke_image_resizer{display:none;position:absolute;width:10px;height:10px;bottom:-5px;right:-5px;background:#000;outline:1px solid #fff;line-height:0;cursor:se-resize;}.cke_image_resizer_wrapper{position:relative;display:inline-block;line-height:0;}.cke_image_resizer.cke_image_resizer_left{right:auto;left:-5px;cursor:sw-resize;}.cke_widget_wrapper:hover .cke_image_resizer,.cke_image_resizer.cke_image_resizing{display:block}.cke_editable[contenteditable\x3d"false"] .cke_image_resizer{display:none;}.cke_widget_wrapper\x3ea{display:inline-block}')},
+this.editor.widgets.destroyAll(!1,this);this._.initialSetData=!1;a=this.editor.dataProcessor.unprotectRealComments(a);a=this.editor.dataProcessor.unprotectSource(a);a=this.editor.dataProcessor.toHtml(a,{context:this.getName(),filter:this.filter,enterMode:this.enterMode});this.setHtml(a);this.editor.widgets.initOnAll(this)},getData:function(){return this.editor.dataProcessor.toDataFormat(this.getHtml(),{context:this.getName(),filter:this.filter,enterMode:this.enterMode})}});var V=/^(?:<(?:div|span)(?: data-cke-temp="1")?(?: id="cke_copybin")?(?: data-cke-temp="1")?>)?(?:<(?:div|span)(?: style="[^"]+")?>)?<span [^>]*data-cke-copybin-start="1"[^>]*>.?<\/span>([\s\S]+)<span [^>]*data-cke-copybin-end="1"[^>]*>.?<\/span>(?:<\/(?:div|span)>)?(?:<\/(?:div|span)>)?$/i,
+ha={37:1,38:1,39:1,40:1,8:1,46:1};ha[CKEDITOR.SHIFT+121]=1;var P=CKEDITOR.tools.createClass({$:function(a,b){this._.createCopyBin(a,b);this._.createListeners(b)},_:{createCopyBin:function(a){var b=a.document,c=CKEDITOR.env.edge&&16<=CKEDITOR.env.version,d=!a.blockless&&!CKEDITOR.env.ie||c?"div":"span",c=b.createElement(d),b=b.createElement(d);b.setAttributes({id:"cke_copybin","data-cke-temp":"1"});c.setStyles({position:"absolute",width:"1px",height:"1px",overflow:"hidden"});c.setStyle("ltr"==a.config.contentsLangDirection?
+"left":"right","-5000px");this.editor=a;this.copyBin=c;this.container=b},createListeners:function(a){a&&(a.beforeDestroy&&(this.beforeDestroy=a.beforeDestroy),a.afterDestroy&&(this.afterDestroy=a.afterDestroy))}},proto:{handle:function(a){var b=this.copyBin,c=this.editor,d=this.container,e=CKEDITOR.env.ie&&9>CKEDITOR.env.version,g=c.document.getDocumentElement().$,f=c.createRange(),h=this,k=CKEDITOR.env.mac&&CKEDITOR.env.webkit,l=k?100:0,m=window.requestAnimationFrame&&!k?requestAnimationFrame:setTimeout,
+n,r,t;b.setHtml('\x3cspan data-cke-copybin-start\x3d"1"\x3e​\x3c/span\x3e'+a+'\x3cspan data-cke-copybin-end\x3d"1"\x3e​\x3c/span\x3e');c.fire("lockSnapshot");d.append(b);c.editable().append(d);n=c.on("selectionChange",D,null,null,0);r=c.widgets.on("checkSelection",D,null,null,0);e&&(t=g.scrollTop);f.selectNodeContents(b);f.select();e&&(g.scrollTop=t);return new CKEDITOR.tools.promise(function(a){m(function(){h.beforeDestroy&&h.beforeDestroy();d.remove();n.removeListener();r.removeListener();c.fire("unlockSnapshot");
+h.afterDestroy&&h.afterDestroy();a()},l)})}},statics:{hasCopyBin:function(a){return!!P.getCopyBin(a)},getCopyBin:function(a){return a.document.getById("cke_copybin")}}});CKEDITOR.plugins.widget=h;h.repository=b;h.nestedEditable=f}(),CKEDITOR.config.widget_keystrokeInsertLineBefore=CKEDITOR.SHIFT+CKEDITOR.ALT+13,CKEDITOR.config.widget_keystrokeInsertLineAfter=CKEDITOR.SHIFT+13,"use strict",function(){function b(a){function b(){this.deflated||(a.widgets.focused==this.widget&&(this.focused=!0),a.widgets.destroy(this.widget),
+this.deflated=!0)}function c(){var b=a.editable(),d=a.document;if(this.deflated)this.widget=a.widgets.initOn(this.element,"image",this.widget.data),this.widget.inline&&!(new CKEDITOR.dom.elementPath(this.widget.wrapper,b)).block&&(b=d.createElement(a.activeEnterMode==CKEDITOR.ENTER_P?"p":"div"),b.replace(this.widget.wrapper),this.widget.wrapper.move(b)),this.focused&&(this.widget.focus(),delete this.focused),delete this.deflated;else{var g=this.widget,b=e,d=g.wrapper,f=g.data.align,g=g.data.hasCaption;
+if(b){for(var h=3;h--;)d.removeClass(b[h]);"center"==f?g&&d.addClass(b[1]):"none"!=f&&d.addClass(b[v[f]])}else"center"==f?(g?d.setStyle("text-align","center"):d.removeStyle("text-align"),d.removeStyle("float")):("none"==f?d.removeStyle("float"):d.setStyle("float",f),d.removeStyle("text-align"))}}var e=a.config.image2_alignClasses,l=a.config.image2_captionedClass;return{allowedContent:d(a),requiredContent:"img[src,alt]",features:g(a),styleableElements:"img figure",contentTransformations:[["img[width]: sizeToAttribute"]],
+editables:{caption:{selector:"figcaption",allowedContent:"br em strong sub sup u s; a[!href,target]"}},parts:{image:"img",caption:"figcaption"},dialog:"image2",template:'\x3cimg alt\x3d"" src\x3d"" /\x3e',data:function(){var d=this.features;this.data.hasCaption&&!a.filter.checkFeature(d.caption)&&(this.data.hasCaption=!1);"none"==this.data.align||a.filter.checkFeature(d.align)||(this.data.align="none");this.shiftState({widget:this,element:this.element,oldData:this.oldData,newData:this.data,deflate:b,
+inflate:c});this.data.link?this.parts.link||(this.parts.link=this.parts.image.getParent()):this.parts.link&&delete this.parts.link;this.parts.image.setAttributes({src:this.data.src,"data-cke-saved-src":this.data.src,alt:this.data.alt});if(this.oldData&&!this.oldData.hasCaption&&this.data.hasCaption)for(var e in this.data.classes)this.parts.image.removeClass(e);if(a.filter.checkFeature(d.dimension)){d=this.data;d={width:d.width,height:d.height};e=this.parts.image;for(var g in d)d[g]?e.setAttribute(g,
+d[g]):e.removeAttribute(g)}this.oldData=CKEDITOR.tools.extend({},this.data)},init:function(){var b=CKEDITOR.plugins.image2,c=this.parts.image,d={hasCaption:!!this.parts.caption,src:c.getAttribute("src"),alt:c.getAttribute("alt")||"",width:c.getAttribute("width")||"",height:c.getAttribute("height")||"",lock:this.ready?b.checkHasNaturalRatio(c):!0},g=c.getAscendant("a");g&&this.wrapper.contains(g)&&(this.parts.link=g);d.align||(c=d.hasCaption?this.element:c,e?(c.hasClass(e[0])?d.align="left":c.hasClass(e[2])&&
+(d.align="right"),d.align?c.removeClass(e[v[d.align]]):d.align="none"):(d.align=c.getStyle("float")||"none",c.removeStyle("float")));a.plugins.link&&this.parts.link&&(d.link=b.getLinkAttributesParser()(a,this.parts.link),(c=d.link.advanced)&&c.advCSSClasses&&(c.advCSSClasses=CKEDITOR.tools.trim(c.advCSSClasses.replace(/cke_\S+/,""))));this.wrapper[(d.hasCaption?"remove":"add")+"Class"]("cke_image_nocaption");this.setData(d);a.filter.checkFeature(this.features.dimension)&&!0!==a.config.image2_disableResizer&&
+k(this);this.shiftState=b.stateShifter(this.editor);this.on("contextMenu",function(a){a.data.image=CKEDITOR.TRISTATE_OFF;if(this.parts.link||this.wrapper.getAscendant("a"))a.data.link=a.data.unlink=CKEDITOR.TRISTATE_OFF})},addClass:function(a){n(this).addClass(a)},hasClass:function(a){return n(this).hasClass(a)},removeClass:function(a){n(this).removeClass(a)},getClasses:function(){var a=new RegExp("^("+[].concat(l,e).join("|")+")$");return function(){var b=this.repository.parseElementClasses(n(this).getAttribute("class")),
+c;for(c in b)a.test(c)&&delete b[c];return b}}(),upcast:h(a),downcast:f(a),getLabel:function(){return this.editor.lang.widget.label.replace(/%1/,(this.data.alt||"")+" "+this.pathName)}}}function h(b){var c=e(b),d=b.config.image2_captionedClass;return function(b,e){var g={width:1,height:1},f=b.name,h;if(!b.attributes["data-cke-realelement"]&&(c(b)?("div"==f&&(h=b.getFirst("figure"))&&(b.replaceWith(h),b=h),e.align="center",h=b.getFirst("img")||b.getFirst("a").getFirst("img")):"figure"==f&&b.hasClass(d)?
+h=b.find(function(a){return"img"===a.name&&-1!==CKEDITOR.tools.array.indexOf(["figure","a"],a.parent.name)},!0)[0]:a(b)&&(h="a"==b.name?b.children[0]:b),h)){for(var k in g)(g=h.attributes[k])&&g.match(p)&&delete h.attributes[k];return b}}}function f(a){var b=a.config.image2_alignClasses;return function(a){var c="a"==a.name?a.getFirst():a,d=c.attributes,e=this.data.align;if(!this.inline){var g=a.getFirst("span");g&&g.replaceWith(g.getFirst({img:1,a:1}))}e&&"none"!=e&&(g=CKEDITOR.tools.parseCssText(d.style||
+""),"center"==e&&"figure"==a.name?a=a.wrapWith(new CKEDITOR.htmlParser.element("div",b?{"class":b[1]}:{style:"text-align:center"})):e in{left:1,right:1}&&(b?c.addClass(b[v[e]]):g["float"]=e),b||CKEDITOR.tools.isEmpty(g)||(d.style=CKEDITOR.tools.writeCssText(g)));return a}}function e(b){var c=b.config.image2_captionedClass,d=b.config.image2_alignClasses,e={figure:1,a:1,img:1};return function(g){if(!(g.name in{div:1,p:1}))return!1;var f=g.children;if(1!==f.length)return!1;f=f[0];if(!(f.name in e))return!1;
+if("p"==g.name){if(!a(f))return!1}else if("figure"==f.name){if(!f.hasClass(c))return!1}else if(b.enterMode==CKEDITOR.ENTER_P||!a(f))return!1;return(d?g.hasClass(d[1]):"center"==CKEDITOR.tools.parseCssText(g.attributes.style||"",!0)["text-align"])?!0:!1}}function a(a){return"img"==a.name?!0:"a"==a.name?1==a.children.length&&a.getFirst("img"):!1}function k(a){var b=a.editor,c=b.editable(),d=b.document,e=a.resizer=d.createElement("span");e.addClass("cke_image_resizer");e.setAttribute("title",b.lang.image2.resizer);
+e.append(new CKEDITOR.dom.text("​",d));if(a.inline)a.wrapper.append(e);else{var g=a.parts.link||a.parts.image,f=g.getParent(),h=d.createElement("span");h.addClass("cke_image_resizer_wrapper");h.append(g);h.append(e);a.element.append(h,!0);f.is("span")&&f.remove()}e.on("mousedown",function(g){function f(a,b,c){var e=CKEDITOR.document,g=[];d.equals(e)||g.push(e.on(a,b));g.push(d.on(a,b));if(c)for(a=g.length;a--;)c.push(g.pop())}function h(){S=B+n*J;X=Math.round(S/y)}function k(){X=p-T;S=Math.round(X*
+y)}var l=a.parts.image,m=function(){var a=b.config.image2_maxSize,c;if(!a)return null;a=CKEDITOR.tools.copy(a);c=CKEDITOR.plugins.image2.getNatural(l);a.width=Math.max("natural"===a.width?c.width:a.width,15);a.height=Math.max("natural"===a.height?c.height:a.height,15);return a}(),n="right"==a.data.align?-1:1,u=g.data.$.screenX,w=g.data.$.screenY,B=l.$.clientWidth,p=l.$.clientHeight,y=B/p,v=[],O="cke_image_s"+(~n?"e":"w"),Y,S,X,ca,J,T,W;b.fire("saveSnapshot");f("mousemove",function(a){Y=a.data.$;J=
+Y.screenX-u;T=w-Y.screenY;W=Math.abs(J/T);1==n?0>=J?0>=T?h():W>=y?h():k():0>=T?W>=y?k():h():k():0>=J?0>=T?W>=y?k():h():k():0>=T?h():W>=y?h():k();a=m&&(S>m.width||X>m.height);15>S||15>X||a||(ca={width:S,height:X},l.setAttributes(ca))},v);f("mouseup",function(){for(var d;d=v.pop();)d.removeListener();c.removeClass(O);e.removeClass("cke_image_resizing");ca&&(a.setData(ca),b.fire("saveSnapshot"));ca=!1},v);c.addClass(O);e.addClass("cke_image_resizing")});a.on("data",function(){e["right"==a.data.align?
+"addClass":"removeClass"]("cke_image_resizer_left")})}function l(a){var b=[],d;return function(e){var g=a.getCommand("justify"+e);if(g){b.push(function(){g.refresh(a,a.elementPath())});if(e in{right:1,left:1,center:1})g.on("exec",function(d){var g=c(a);if(g){g.setData("align",e);for(g=b.length;g--;)b[g]();d.cancel()}});g.on("refresh",function(b){var g=c(a),f={right:1,left:1,center:1};g&&(void 0===d&&(d=a.filter.checkFeature(a.widgets.registered.image.features.align)),d?this.setState(g.data.align==
+e?CKEDITOR.TRISTATE_ON:e in f?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED):this.setState(CKEDITOR.TRISTATE_DISABLED),b.cancel())})}}}function m(a){if(a.plugins.link){var b=CKEDITOR.on("dialogDefinition",function(b){b=b.data;if("link"==b.name){b=b.definition;var d=b.onShow,e=b.onOk;b.onShow=function(){var b=c(a),e=this.getContentElement("info","linkDisplayText").getElement().getParent().getParent();b&&(b.inline?!b.wrapper.getAscendant("a"):1)?(this.setupContent(b.data.link||{}),e.hide()):(e.show(),
+d.apply(this,arguments))};b.onOk=function(){var b=c(a);if(b&&(b.inline?!b.wrapper.getAscendant("a"):1)){var d={};this.commitContent(d);b.setData("link",d)}else e.apply(this,arguments)}}});a.on("destroy",function(){b.removeListener()});a.getCommand("unlink").on("exec",function(b){var d=c(a);d&&d.parts.link&&(d.setData("link",null),this.refresh(a,a.elementPath()),b.cancel())});a.getCommand("unlink").on("refresh",function(b){var d=c(a);d&&(this.setState(d.data.link||d.wrapper.getAscendant("a")?CKEDITOR.TRISTATE_OFF:
+CKEDITOR.TRISTATE_DISABLED),b.cancel())})}}function c(a){return(a=a.widgets.focused)&&"image"==a.name?a:null}function d(a){var b=a.config.image2_alignClasses;a={div:{match:e(a)},p:{match:e(a)},img:{attributes:"!src,alt,width,height"},figure:{classes:"!"+a.config.image2_captionedClass},figcaption:!0};b?(a.div.classes=b[1],a.p.classes=a.div.classes,a.img.classes=b[0]+","+b[2],a.figure.classes+=","+a.img.classes):(a.div.styles="text-align",a.p.styles="text-align",a.img.styles="float",a.figure.styles=
+"float,display");return a}function g(a){a=a.config.image2_alignClasses;return{dimension:{requiredContent:"img[width,height]"},align:{requiredContent:"img"+(a?"("+a[0]+")":"{float}")},caption:{requiredContent:"figcaption"}}}function n(a){return a.data.hasCaption?a.element:a.parts.image}var y=new CKEDITOR.template('\x3cfigure class\x3d"{captionedClass}"\x3e\x3cimg alt\x3d"" src\x3d"" /\x3e\x3cfigcaption\x3e{captionPlaceholder}\x3c/figcaption\x3e\x3c/figure\x3e'),v={left:0,center:1,right:2},p=/^\s*(\d+\%)\s*$/i;
+CKEDITOR.plugins.add("image2",{requires:"widget,dialog",icons:"image",hidpi:!0,onLoad:function(){CKEDITOR.addCss('.cke_image_nocaption{line-height:0}.cke_editable.cke_image_sw, .cke_editable.cke_image_sw *{cursor:sw-resize !important}.cke_editable.cke_image_se, .cke_editable.cke_image_se *{cursor:se-resize !important}.cke_image_resizer{display:none;position:absolute;width:10px;height:10px;bottom:-5px;right:-5px;background:#000;outline:1px solid #fff;line-height:0;cursor:se-resize;}.cke_image_resizer_wrapper{position:relative;display:inline-block;line-height:0;}.cke_image_resizer.cke_image_resizer_left{right:auto;left:-5px;cursor:sw-resize;}.cke_widget_wrapper:hover .cke_image_resizer,.cke_image_resizer.cke_image_resizing{display:block}.cke_editable[contenteditable\x3d"false"] .cke_image_resizer{display:none;}.cke_widget_wrapper\x3ea{display:inline-block}')},
 init:function(a){if(!a.plugins.detectConflict("image2",["easyimage"])){var c=a.config,d=a.lang.image2,e=b(a);c.filebrowserImage2BrowseUrl=c.filebrowserImageBrowseUrl;c.filebrowserImage2UploadUrl=c.filebrowserImageUploadUrl;e.pathName=d.pathName;e.editables.caption.pathName=d.pathNameCaption;a.widgets.add("image",e);a.ui.addButton&&a.ui.addButton("Image",{label:a.lang.common.image,command:"image",toolbar:"insert,10"});a.contextMenu&&(a.addMenuGroup("image",10),a.addMenuItem("image",{label:d.menu,command:"image",
-group:"image"}));CKEDITOR.dialog.add("image2",this.path+"dialogs/image2.js")}},afterInit:function(a){var b={left:1,right:1,center:1,block:1},c=k(a),d;for(d in b)c(d);l(a)}});CKEDITOR.plugins.image2={stateShifter:function(a){function b(a,f){var g={};e?g.attributes={"class":e[1]}:g.styles={"text-align":"center"};g=d.createElement(a.activeEnterMode==CKEDITOR.ENTER_P?"p":"div",g);c(g,f);f.move(g);return g}function c(b,d){if(d.getParent()){var e=a.createRange();e.moveToPosition(d,CKEDITOR.POSITION_BEFORE_START);
-d.remove();g.insertElementIntoRange(b,e)}else b.replace(d)}var d=a.document,e=a.config.image2_alignClasses,f=a.config.image2_captionedClass,g=a.editable(),h=["hasCaption","align","link"],k={align:function(c,d,f){var g=c.element;c.changed.align?c.newData.hasCaption||("center"==f&&(c.deflate(),c.element=b(a,g)),c.changed.hasCaption||"center"!=d||"center"==f||(c.deflate(),d=g.findOne("a,img"),d.replace(g),c.element=d)):"center"==f&&c.changed.hasCaption&&!c.newData.hasCaption&&(c.deflate(),c.element=
-b(a,g));!e&&g.is("figure")&&("center"==f?g.setStyle("display","inline-block"):g.removeStyle("display"))},hasCaption:function(b,e,g){b.changed.hasCaption&&(e=b.element.is({img:1,a:1})?b.element:b.element.findOne("a,img"),b.deflate(),g?(g=CKEDITOR.dom.element.createFromHtml(y.output({captionedClass:f,captionPlaceholder:a.lang.image2.captionPlaceholder}),d),c(g,b.element),e.replace(g.findOne("img")),b.element=g):(e.replace(b.element),b.element=e))},link:function(b,c,e){if(b.changed.link){var f=b.element.is("img")?
-b.element:b.element.findOne("img"),g=b.element.is("a")?b.element:b.element.findOne("a"),h=b.element.is("a")&&!e||b.element.is("img")&&e,k;h&&b.deflate();e?(c||(k=d.createElement("a",{attributes:{href:b.newData.link.url}}),k.replace(f),f.move(k)),e=CKEDITOR.plugins.image2.getLinkAttributesGetter()(a,e),CKEDITOR.tools.isEmpty(e.set)||(k||g).setAttributes(e.set),e.removed.length&&(k||g).removeAttributes(e.removed)):(e=g.findOne("img"),e.replace(g),k=e);h&&(b.element=k)}}};return function(a){var b,c;
+group:"image"}));CKEDITOR.dialog.add("image2",this.path+"dialogs/image2.js")}},afterInit:function(a){var b={left:1,right:1,center:1,block:1},c=l(a),d;for(d in b)c(d);m(a)}});CKEDITOR.plugins.image2={stateShifter:function(a){function b(a,g){var f={};e?f.attributes={"class":e[1]}:f.styles={"text-align":"center"};f=d.createElement(a.activeEnterMode==CKEDITOR.ENTER_P?"p":"div",f);c(f,g);g.move(f);return f}function c(b,d){if(d.getParent()){var e=a.createRange();e.moveToPosition(d,CKEDITOR.POSITION_BEFORE_START);
+d.remove();f.insertElementIntoRange(b,e)}else b.replace(d)}var d=a.document,e=a.config.image2_alignClasses,g=a.config.image2_captionedClass,f=a.editable(),h=["hasCaption","align","link"],k={align:function(c,d,g){var f=c.element;c.changed.align?c.newData.hasCaption||("center"==g&&(c.deflate(),c.element=b(a,f)),c.changed.hasCaption||"center"!=d||"center"==g||(c.deflate(),d=f.findOne("a,img"),d.replace(f),c.element=d)):"center"==g&&c.changed.hasCaption&&!c.newData.hasCaption&&(c.deflate(),c.element=
+b(a,f));!e&&f.is("figure")&&("center"==g?f.setStyle("display","inline-block"):f.removeStyle("display"))},hasCaption:function(b,e,f){b.changed.hasCaption&&(e=b.element.is({img:1,a:1})?b.element:b.element.findOne("a,img"),b.deflate(),f?(f=CKEDITOR.dom.element.createFromHtml(y.output({captionedClass:g,captionPlaceholder:a.lang.image2.captionPlaceholder}),d),c(f,b.element),e.replace(f.findOne("img")),b.element=f):(e.replace(b.element),b.element=e))},link:function(b,c,e){if(b.changed.link){var g=b.element.is("img")?
+b.element:b.element.findOne("img"),f=b.element.is("a")?b.element:b.element.findOne("a"),h=b.element.is("a")&&!e||b.element.is("img")&&e,k;h&&b.deflate();e?(c||(k=d.createElement("a",{attributes:{href:b.newData.link.url}}),k.replace(g),g.move(k)),e=CKEDITOR.plugins.image2.getLinkAttributesGetter()(a,e),CKEDITOR.tools.isEmpty(e.set)||(k||f).setAttributes(e.set),e.removed.length&&(k||f).removeAttributes(e.removed)):(e=f.findOne("img"),e.replace(f),k=e);h&&(b.element=k)}}};return function(a){var b,c;
 a.changed={};for(c=0;c<h.length;c++)b=h[c],a.changed[b]=a.oldData?a.oldData[b]!==a.newData[b]:!1;for(c=0;c<h.length;c++)b=h[c],k[b](a,a.oldData?a.oldData[b]:null,a.newData[b]);a.inflate()}},checkHasNaturalRatio:function(a){var b=a.$;a=this.getNatural(a);return Math.round(b.clientWidth/a.width*a.height)==b.clientHeight||Math.round(b.clientHeight/a.height*a.width)==b.clientWidth},getNatural:function(a){if(a.$.naturalWidth)a={width:a.$.naturalWidth,height:a.$.naturalHeight};else{var b=new Image;b.src=
-a.getAttribute("src");a={width:b.width,height:b.height}}return a},getLinkAttributesGetter:function(){return CKEDITOR.plugins.link.getLinkAttributes},getLinkAttributesParser:function(){return CKEDITOR.plugins.link.parseLinkAttributes}}}(),CKEDITOR.config.image2_captionedClass="image",function(){function b(b,a){var m,k;a.on("refresh",function(a){var b=[h],d;for(d in a.data.states)b.push(a.data.states[d]);this.setState(CKEDITOR.tools.search(b,f)?f:h)},a,null,100);a.on("exec",function(a){m=b.getSelection();
-k=m.createBookmarks(1);a.data||(a.data={});a.data.done=!1},a,null,0);a.on("exec",function(){b.forceNextSelectionCheck();m.selectBookmarks(k)},a,null,100)}var h=CKEDITOR.TRISTATE_DISABLED,f=CKEDITOR.TRISTATE_OFF;CKEDITOR.plugins.add("indent",{init:function(e){var a=CKEDITOR.plugins.indent.genericDefinition;b(e,e.addCommand("indent",new a(!0)));b(e,e.addCommand("outdent",new a));e.ui.addButton&&(e.ui.addButton("Indent",{label:e.lang.indent.indent,command:"indent",directional:!0,toolbar:"indent,20"}),
+a.getAttribute("src");a={width:b.width,height:b.height}}return a},getLinkAttributesGetter:function(){return CKEDITOR.plugins.link.getLinkAttributes},getLinkAttributesParser:function(){return CKEDITOR.plugins.link.parseLinkAttributes}}}(),CKEDITOR.config.image2_captionedClass="image",function(){function b(b,a){var k,l;a.on("refresh",function(a){var b=[h],d;for(d in a.data.states)b.push(a.data.states[d]);this.setState(CKEDITOR.tools.search(b,f)?f:h)},a,null,100);a.on("exec",function(a){k=b.getSelection();
+l=k.createBookmarks(1);a.data||(a.data={});a.data.done=!1},a,null,0);a.on("exec",function(){b.forceNextSelectionCheck();k.selectBookmarks(l)},a,null,100)}var h=CKEDITOR.TRISTATE_DISABLED,f=CKEDITOR.TRISTATE_OFF;CKEDITOR.plugins.add("indent",{init:function(e){var a=CKEDITOR.plugins.indent.genericDefinition;b(e,e.addCommand("indent",new a(!0)));b(e,e.addCommand("outdent",new a));e.ui.addButton&&(e.ui.addButton("Indent",{label:e.lang.indent.indent,command:"indent",directional:!0,toolbar:"indent,20"}),
 e.ui.addButton("Outdent",{label:e.lang.indent.outdent,command:"outdent",directional:!0,toolbar:"indent,10"}));e.on("dirChanged",function(a){var b=e.createRange(),f=a.data.node;b.setStartBefore(f);b.setEndAfter(f);for(var c=new CKEDITOR.dom.walker(b),d;d=c.next();)if(d.type==CKEDITOR.NODE_ELEMENT)if(!d.equals(f)&&d.getDirection())b.setStartAfter(d),c=new CKEDITOR.dom.walker(b);else{var g=e.config.indentClasses;if(g)for(var h="ltr"==a.data.dir?["_rtl",""]:["","_rtl"],y=0;y<g.length;y++)d.hasClass(g[y]+
 h[0])&&(d.removeClass(g[y]+h[0]),d.addClass(g[y]+h[1]));g=d.getStyle("margin-right");h=d.getStyle("margin-left");g?d.setStyle("margin-left",g):d.removeStyle("margin-left");h?d.setStyle("margin-right",h):d.removeStyle("margin-right")}})}});CKEDITOR.plugins.indent={genericDefinition:function(b){this.isIndent=!!b;this.startDisabled=!this.isIndent},specificDefinition:function(b,a,f){this.name=a;this.editor=b;this.jobs={};this.enterBr=b.config.enterMode==CKEDITOR.ENTER_BR;this.isIndent=!!f;this.relatedGlobal=
 f?"indent":"outdent";this.indentKey=f?9:CKEDITOR.SHIFT+9;this.database={}},registerCommands:function(b,a){b.on("pluginsLoaded",function(){for(var b in a)(function(a,b){var c=a.getCommand(b.relatedGlobal),d;for(d in b.jobs)c.on("exec",function(c){c.data.done||(a.fire("lockSnapshot"),b.execJob(a,d)&&(c.data.done=!0),a.fire("unlockSnapshot"),CKEDITOR.dom.element.clearAllMarkers(b.database))},this,null,d),c.on("refresh",function(c){c.data.states||(c.data.states={});c.data.states[b.name+"@"+d]=b.refreshJob(a,
 d,c.data.path)},this,null,d);a.addFeature(b)})(this,a[b])})}};CKEDITOR.plugins.indent.genericDefinition.prototype={context:"p",exec:function(){}};CKEDITOR.plugins.indent.specificDefinition.prototype={execJob:function(b,a){var f=this.jobs[a];if(f.state!=h)return f.exec.call(this,b)},refreshJob:function(b,a,f){a=this.jobs[a];b.activeFilter.checkFeature(this)?a.state=a.refresh.call(this,b,f):a.state=h;return a.state},getContext:function(b){return b.contains(this.context)}}}(),function(){function b(a){function b(c){for(var h=
-m.startContainer,u=m.endContainer;h&&!h.getParent().equals(c);)h=h.getParent();for(;u&&!u.getParent().equals(c);)u=u.getParent();if(!h||!u)return!1;for(var t=[],q=!1;!q;)h.equals(u)&&(q=!0),t.push(h),h=h.getNext();if(1>t.length)return!1;h=c.getParents(!0);for(u=0;u<h.length;u++)if(h[u].getName&&k[h[u].getName()]){c=h[u];break}for(var h=d.isIndent?1:-1,u=t[0],t=t[t.length-1],q=CKEDITOR.plugins.list.listToArray(c,e),v=q[t.getCustomData("listarray_index")].indent,u=u.getCustomData("listarray_index");u<=
-t.getCustomData("listarray_index");u++)if(q[u].indent+=h,0<h){for(var p=q[u].parent,D=u-1;0<=D;D--)if(q[D].indent===h){p=q[D].parent;break}q[u].parent=new CKEDITOR.dom.element(p.getName(),p.getDocument())}for(u=t.getCustomData("listarray_index")+1;u<q.length&&q[u].indent>v;u++)q[u].indent+=h;h=CKEDITOR.plugins.list.arrayToList(q,e,null,a.config.enterMode,c.getDirection());if(!d.isIndent){var A;if((A=c.getParent())&&A.is("li"))for(var t=h.listNode.getChildren(),E=[],w,u=t.count()-1;0<=u;u--)(w=t.getItem(u))&&
-w.is&&w.is("li")&&E.push(w)}h&&h.listNode.replace(c);if(E&&E.length)for(u=0;u<E.length;u++){for(w=c=E[u];(w=w.getNext())&&w.is&&w.getName()in k;)CKEDITOR.env.needsNbspFiller&&!c.getFirst(f)&&c.append(m.document.createText(" ")),c.append(w);c.insertAfter(A)}h&&a.fire("contentDomInvalidated");return!0}for(var d=this,e=this.database,k=this.context,m,w=a.getSelection(),w=(w&&w.getRanges()).createIterator();m=w.getNextRange();){for(var p=m.getCommonAncestor();p&&(p.type!=CKEDITOR.NODE_ELEMENT||!k[p.getName()]);){if(a.editable().equals(p)){p=
-!1;break}p=p.getParent()}p||(p=m.startPath().contains(k))&&m.setEndAt(p,CKEDITOR.POSITION_BEFORE_END);if(!p){var t=m.getEnclosedNode();t&&t.type==CKEDITOR.NODE_ELEMENT&&t.getName()in k&&(m.setStartAt(t,CKEDITOR.POSITION_AFTER_START),m.setEndAt(t,CKEDITOR.POSITION_BEFORE_END),p=t)}p&&m.startContainer.type==CKEDITOR.NODE_ELEMENT&&m.startContainer.getName()in k&&(t=new CKEDITOR.dom.walker(m),t.evaluator=h,m.startContainer=t.next());p&&m.endContainer.type==CKEDITOR.NODE_ELEMENT&&m.endContainer.getName()in
-k&&(t=new CKEDITOR.dom.walker(m),t.evaluator=h,m.endContainer=t.previous());if(p)return b(p)}return 0}function h(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.is("li")}function f(b){return e(b)&&a(b)}var e=CKEDITOR.dom.walker.whitespaces(!0),a=CKEDITOR.dom.walker.bookmark(!1,!0),m=CKEDITOR.TRISTATE_DISABLED,k=CKEDITOR.TRISTATE_OFF;CKEDITOR.plugins.add("indentlist",{requires:"indent",init:function(a){function c(a){d.specificDefinition.apply(this,arguments);this.requiredContent=["ul","ol"];a.on("key",
-function(b){var c=a.elementPath();if("wysiwyg"==a.mode&&b.data.keyCode==this.indentKey&&c){var d=this.getContext(c);!d||this.isIndent&&CKEDITOR.plugins.indentList.firstItemInPath(this.context,c,d)||(a.execCommand(this.relatedGlobal),b.cancel())}},this);this.jobs[this.isIndent?10:30]={refresh:this.isIndent?function(a,b){var c=this.getContext(b),d=CKEDITOR.plugins.indentList.firstItemInPath(this.context,b,c);return c&&this.isIndent&&!d?k:m}:function(a,b){return!this.getContext(b)||this.isIndent?m:k},
+l.startContainer,t=l.endContainer;h&&!h.getParent().equals(c);)h=h.getParent();for(;t&&!t.getParent().equals(c);)t=t.getParent();if(!h||!t)return!1;for(var q=[],u=!1;!u;)h.equals(t)&&(u=!0),q.push(h),h=h.getNext();if(1>q.length)return!1;h=c.getParents(!0);for(t=0;t<h.length;t++)if(h[t].getName&&k[h[t].getName()]){c=h[t];break}for(var h=d.isIndent?1:-1,t=q[0],q=q[q.length-1],u=CKEDITOR.plugins.list.listToArray(c,e),w=u[q.getCustomData("listarray_index")].indent,t=t.getCustomData("listarray_index");t<=
+q.getCustomData("listarray_index");t++)if(u[t].indent+=h,0<h){for(var p=u[t].parent,C=t-1;0<=C;C--)if(u[C].indent===h){p=u[C].parent;break}u[t].parent=new CKEDITOR.dom.element(p.getName(),p.getDocument())}for(t=q.getCustomData("listarray_index")+1;t<u.length&&u[t].indent>w;t++)u[t].indent+=h;h=CKEDITOR.plugins.list.arrayToList(u,e,null,a.config.enterMode,c.getDirection());if(!d.isIndent){var A;if((A=c.getParent())&&A.is("li"))for(var q=h.listNode.getChildren(),E=[],v,t=q.count()-1;0<=t;t--)(v=q.getItem(t))&&
+v.is&&v.is("li")&&E.push(v)}h&&h.listNode.replace(c);if(E&&E.length)for(t=0;t<E.length;t++){for(v=c=E[t];(v=v.getNext())&&v.is&&v.getName()in k;)CKEDITOR.env.needsNbspFiller&&!c.getFirst(f)&&c.append(l.document.createText(" ")),c.append(v);c.insertAfter(A)}h&&a.fire("contentDomInvalidated");return!0}for(var d=this,e=this.database,k=this.context,l,v=a.getSelection(),v=(v&&v.getRanges()).createIterator();l=v.getNextRange();){for(var p=l.getCommonAncestor();p&&(p.type!=CKEDITOR.NODE_ELEMENT||!k[p.getName()]);){if(a.editable().equals(p)){p=
+!1;break}p=p.getParent()}p||(p=l.startPath().contains(k))&&l.setEndAt(p,CKEDITOR.POSITION_BEFORE_END);if(!p){var q=l.getEnclosedNode();q&&q.type==CKEDITOR.NODE_ELEMENT&&q.getName()in k&&(l.setStartAt(q,CKEDITOR.POSITION_AFTER_START),l.setEndAt(q,CKEDITOR.POSITION_BEFORE_END),p=q)}p&&l.startContainer.type==CKEDITOR.NODE_ELEMENT&&l.startContainer.getName()in k&&(q=new CKEDITOR.dom.walker(l),q.evaluator=h,l.startContainer=q.next());p&&l.endContainer.type==CKEDITOR.NODE_ELEMENT&&l.endContainer.getName()in
+k&&(q=new CKEDITOR.dom.walker(l),q.evaluator=h,l.endContainer=q.previous());if(p)return b(p)}return 0}function h(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.is("li")}function f(b){return e(b)&&a(b)}var e=CKEDITOR.dom.walker.whitespaces(!0),a=CKEDITOR.dom.walker.bookmark(!1,!0),k=CKEDITOR.TRISTATE_DISABLED,l=CKEDITOR.TRISTATE_OFF;CKEDITOR.plugins.add("indentlist",{requires:"indent",init:function(a){function c(a){d.specificDefinition.apply(this,arguments);this.requiredContent=["ul","ol"];a.on("key",
+function(b){var c=a.elementPath();if("wysiwyg"==a.mode&&b.data.keyCode==this.indentKey&&c){var d=this.getContext(c);!d||this.isIndent&&CKEDITOR.plugins.indentList.firstItemInPath(this.context,c,d)||(a.execCommand(this.relatedGlobal),b.cancel())}},this);this.jobs[this.isIndent?10:30]={refresh:this.isIndent?function(a,b){var c=this.getContext(b),d=CKEDITOR.plugins.indentList.firstItemInPath(this.context,b,c);return c&&this.isIndent&&!d?l:k}:function(a,b){return!this.getContext(b)||this.isIndent?k:l},
 exec:CKEDITOR.tools.bind(b,this)}}var d=CKEDITOR.plugins.indent;d.registerCommands(a,{indentlist:new c(a,"indentlist",!0),outdentlist:new c(a,"outdentlist")});CKEDITOR.tools.extend(c.prototype,d.specificDefinition.prototype,{context:{ol:1,ul:1}})}});CKEDITOR.plugins.indentList={};CKEDITOR.plugins.indentList.firstItemInPath=function(a,b,d){var e=b.contains(h);d||(d=b.contains(a));return d&&e&&e.equals(d.getFirst(h))}}(),function(){function b(b,a){a=void 0===a||a;var f;if(a)f=b.getComputedStyle("text-align");
 else{for(;!b.hasAttribute||!b.hasAttribute("align")&&!b.getStyle("text-align");){f=b.getParent();if(!f)break;b=f}f=b.getStyle("text-align")||b.getAttribute("align")||""}f&&(f=f.replace(/(?:-(?:moz|webkit)-)?(?:start|auto)/i,""));!f&&a&&(f="rtl"==b.getComputedStyle("direction")?"right":"left");return f}function h(b,a,f){this.editor=b;this.name=a;this.value=f;this.context="p";a=b.config.justifyClasses;var h=b.config.enterMode==CKEDITOR.ENTER_P?"p":"div";if(a){switch(f){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=new RegExp("(?:^|\\s+)(?:"+a.join("|")+")(?\x3d$|\\s)");this.requiredContent=h+"("+this.cssClassName+")"}else this.requiredContent=h+"{text-align}";this.allowedContent={"caption div h1 h2 h3 h4 h5 h6 p pre td th li":{propertiesOnly:!0,styles:this.cssClassName?null:"text-align",classes:this.cssClassName||null}};b.config.enterMode==CKEDITOR.ENTER_BR&&
-(this.allowedContent.div=!0)}function f(b){var a=b.editor,f=a.createRange();f.setStartBefore(b.data.node);f.setEndAfter(b.data.node);for(var h=new CKEDITOR.dom.walker(f),l;l=h.next();)if(l.type==CKEDITOR.NODE_ELEMENT)if(!l.equals(b.data.node)&&l.getDirection())f.setStartAfter(l),h=new CKEDITOR.dom.walker(f);else{var c=a.config.justifyClasses;c&&(l.hasClass(c[0])?(l.removeClass(c[0]),l.addClass(c[2])):l.hasClass(c[2])&&(l.removeClass(c[2]),l.addClass(c[0])));c=l.getStyle("text-align");"left"==c?l.setStyle("text-align",
-"right"):"right"==c&&l.setStyle("text-align","left")}}h.prototype={exec:function(e){var a=e.getSelection(),f=e.config.enterMode;if(a){for(var h=a.createBookmarks(),l=a.getRanges(),c=this.cssClassName,d,g,n=e.config.useComputedState,n=void 0===n||n,y=l.length-1;0<=y;y--)for(d=l[y].createIterator(),d.enlargeBr=f!=CKEDITOR.ENTER_BR;g=d.getNextParagraph(f==CKEDITOR.ENTER_P?"p":"div");)if(!g.isReadOnly()){var w=g.getName(),p;p=e.activeFilter.check(w+"{text-align}");if((w=e.activeFilter.check(w+"("+c+")"))||
-p){g.removeAttribute("align");g.removeStyle("text-align");var t=c&&(g.$.className=CKEDITOR.tools.ltrim(g.$.className.replace(this.cssClassRegex,""))),r=this.state==CKEDITOR.TRISTATE_OFF&&(!n||b(g,!0)!=this.value);c&&w?r?g.addClass(c):t||g.removeAttribute("class"):r&&p&&g.setStyle("text-align",this.value)}}e.focus();e.forceNextSelectionCheck();a.selectBookmarks(h)}},refresh:function(e,a){var f=a.block||a.blockLimit,h=f.getName(),l=f.equals(e.editable()),h=this.cssClassName?e.activeFilter.check(h+"("+
-this.cssClassName+")"):e.activeFilter.check(h+"{text-align}");l&&!CKEDITOR.dtd.$list[a.lastElement.getName()]?this.setState(CKEDITOR.TRISTATE_OFF):!l&&h?this.setState(b(f,this.editor.config.useComputedState)==this.value?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF):this.setState(CKEDITOR.TRISTATE_DISABLED)}};CKEDITOR.plugins.add("justify",{init:function(b){if(!b.blockless){var a=new h(b,"justifyleft","left"),m=new h(b,"justifycenter","center"),k=new h(b,"justifyright","right"),l=new h(b,"justifyblock",
-"justify");b.addCommand("justifyleft",a);b.addCommand("justifycenter",m);b.addCommand("justifyright",k);b.addCommand("justifyblock",l);b.ui.addButton&&(b.ui.addButton("JustifyLeft",{label:b.lang.common.alignLeft,command:"justifyleft",toolbar:"align,10"}),b.ui.addButton("JustifyCenter",{label:b.lang.common.center,command:"justifycenter",toolbar:"align,20"}),b.ui.addButton("JustifyRight",{label:b.lang.common.alignRight,command:"justifyright",toolbar:"align,30"}),b.ui.addButton("JustifyBlock",{label:b.lang.common.justify,
+(this.allowedContent.div=!0)}function f(b){var a=b.editor,f=a.createRange();f.setStartBefore(b.data.node);f.setEndAfter(b.data.node);for(var h=new CKEDITOR.dom.walker(f),m;m=h.next();)if(m.type==CKEDITOR.NODE_ELEMENT)if(!m.equals(b.data.node)&&m.getDirection())f.setStartAfter(m),h=new CKEDITOR.dom.walker(f);else{var c=a.config.justifyClasses;c&&(m.hasClass(c[0])?(m.removeClass(c[0]),m.addClass(c[2])):m.hasClass(c[2])&&(m.removeClass(c[2]),m.addClass(c[0])));c=m.getStyle("text-align");"left"==c?m.setStyle("text-align",
+"right"):"right"==c&&m.setStyle("text-align","left")}}h.prototype={exec:function(e){var a=e.getSelection(),f=e.config.enterMode;if(a){for(var h=a.createBookmarks(),m=a.getRanges(),c=this.cssClassName,d,g,n=e.config.useComputedState,n=void 0===n||n,y=m.length-1;0<=y;y--)for(d=m[y].createIterator(),d.enlargeBr=f!=CKEDITOR.ENTER_BR;g=d.getNextParagraph(f==CKEDITOR.ENTER_P?"p":"div");)if(!g.isReadOnly()){var v=g.getName(),p;p=e.activeFilter.check(v+"{text-align}");if((v=e.activeFilter.check(v+"("+c+")"))||
+p){g.removeAttribute("align");g.removeStyle("text-align");var q=c&&(g.$.className=CKEDITOR.tools.ltrim(g.$.className.replace(this.cssClassRegex,""))),r=this.state==CKEDITOR.TRISTATE_OFF&&(!n||b(g,!0)!=this.value);c&&v?r?g.addClass(c):q||g.removeAttribute("class"):r&&p&&g.setStyle("text-align",this.value)}}e.focus();e.forceNextSelectionCheck();a.selectBookmarks(h)}},refresh:function(e,a){var f=a.block||a.blockLimit,h=f.getName(),m=f.equals(e.editable()),h=this.cssClassName?e.activeFilter.check(h+"("+
+this.cssClassName+")"):e.activeFilter.check(h+"{text-align}");m&&!CKEDITOR.dtd.$list[a.lastElement.getName()]?this.setState(CKEDITOR.TRISTATE_OFF):!m&&h?this.setState(b(f,this.editor.config.useComputedState)==this.value?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF):this.setState(CKEDITOR.TRISTATE_DISABLED)}};CKEDITOR.plugins.add("justify",{init:function(b){if(!b.blockless){var a=new h(b,"justifyleft","left"),k=new h(b,"justifycenter","center"),l=new h(b,"justifyright","right"),m=new h(b,"justifyblock",
+"justify");b.addCommand("justifyleft",a);b.addCommand("justifycenter",k);b.addCommand("justifyright",l);b.addCommand("justifyblock",m);b.ui.addButton&&(b.ui.addButton("JustifyLeft",{label:b.lang.common.alignLeft,command:"justifyleft",toolbar:"align,10"}),b.ui.addButton("JustifyCenter",{label:b.lang.common.center,command:"justifycenter",toolbar:"align,20"}),b.ui.addButton("JustifyRight",{label:b.lang.common.alignRight,command:"justifyright",toolbar:"align,30"}),b.ui.addButton("JustifyBlock",{label:b.lang.common.justify,
 command:"justifyblock",toolbar:"align,40"}));b.on("dirChanged",f)}}})}(),CKEDITOR.plugins.add("menubutton",{requires:"button,menu",onLoad:function(){var b=function(b){var f=this._,e=f.menu;f.state!==CKEDITOR.TRISTATE_DISABLED&&(f.on&&e?e.hide():(f.previousState=f.state,e||(e=f.menu=new CKEDITOR.menu(b,{panel:{className:"cke_menu_panel",attributes:{"aria-label":b.lang.common.options}}}),e.onHide=CKEDITOR.tools.bind(function(){var a=this.command?b.getCommand(this.command).modes:this.modes;this.setState(!a||
 a[b.mode]?f.previousState:CKEDITOR.TRISTATE_DISABLED);f.on=0},this),this.onMenu&&e.addListener(this.onMenu)),this.setState(CKEDITOR.TRISTATE_ON),f.on=1,setTimeout(function(){e.show(CKEDITOR.document.getById(f.id),4)},0)))};CKEDITOR.ui.menuButton=CKEDITOR.tools.createClass({base:CKEDITOR.ui.button,$:function(h){delete h.panel;this.base(h);this.hasArrow="menu";this.click=b},statics:{handler:{create:function(b){return new CKEDITOR.ui.menuButton(b)}}}})},beforeInit:function(b){b.ui.addHandler(CKEDITOR.UI_MENUBUTTON,
-CKEDITOR.ui.menuButton.handler)}}),CKEDITOR.UI_MENUBUTTON="menubutton","use strict",function(){CKEDITOR.plugins.add("language",{requires:"menubutton",init:function(b){var h=b.config.language_list||["ar:Arabic:rtl","fr:French","es:Spanish"],f=this,e=b.lang.language,a={},m,k,l,c;b.addCommand("language",{allowedContent:"span[!lang,!dir]",requiredContent:"span[lang,dir]",contextSensitive:!0,exec:function(b,c){var e=a["language_"+c];if(e)b[e.style.checkActive(b.elementPath(),b)?"removeStyle":"applyStyle"](e.style)},
-refresh:function(a){this.setState(f.getCurrentLangElement(a)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)}});for(c=0;c<h.length;c++)m=h[c].split(":"),k=m[0],l="language_"+k,a[l]={label:m[1],langId:k,group:"language",order:c,ltr:"rtl"!=(""+m[2]).toLowerCase(),onClick:function(){b.execCommand("language",this.langId)},role:"menuitemcheckbox"},a[l].style=new CKEDITOR.style({element:"span",attributes:{lang:k,dir:a[l].ltr?"ltr":"rtl"}});a.language_remove={label:e.remove,group:"language_remove",state:CKEDITOR.TRISTATE_DISABLED,
+CKEDITOR.ui.menuButton.handler)}}),CKEDITOR.UI_MENUBUTTON="menubutton","use strict",function(){CKEDITOR.plugins.add("language",{requires:"menubutton",init:function(b){var h=b.config.language_list||["ar:Arabic:rtl","fr:French","es:Spanish"],f=this,e=b.lang.language,a={},k,l,m,c;b.addCommand("language",{allowedContent:"span[!lang,!dir]",requiredContent:"span[lang,dir]",contextSensitive:!0,exec:function(b,c){var e=a["language_"+c];if(e)b[e.style.checkActive(b.elementPath(),b)?"removeStyle":"applyStyle"](e.style)},
+refresh:function(a){this.setState(f.getCurrentLangElement(a)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)}});for(c=0;c<h.length;c++)k=h[c].split(":"),l=k[0],m="language_"+l,a[m]={label:k[1],langId:l,group:"language",order:c,ltr:"rtl"!=(""+k[2]).toLowerCase(),onClick:function(){b.execCommand("language",this.langId)},role:"menuitemcheckbox"},a[m].style=new CKEDITOR.style({element:"span",attributes:{lang:l,dir:a[m].ltr?"ltr":"rtl"}});a.language_remove={label:e.remove,group:"language_remove",state:CKEDITOR.TRISTATE_DISABLED,
 order:a.length,onClick:function(){var a=f.getCurrentLangElement(b);a&&b.execCommand("language",a.getAttribute("lang"))}};b.addMenuGroup("language",1);b.addMenuGroup("language_remove");b.addMenuItems(a);b.ui.add("Language",CKEDITOR.UI_MENUBUTTON,{label:e.button,allowedContent:"span[!lang,!dir]",requiredContent:"span[lang,dir]",toolbar:"bidi,30",command:"language",onMenu:function(){var c={},e=f.getCurrentLangElement(b),h;for(h in a)c[h]=CKEDITOR.TRISTATE_OFF;c.language_remove=e?CKEDITOR.TRISTATE_OFF:
 CKEDITOR.TRISTATE_DISABLED;e&&(c["language_"+e.getAttribute("lang")]=CKEDITOR.TRISTATE_ON);return c}});b.addRemoveFormatFilter&&b.addRemoveFormatFilter(function(a){return!(a.is("span")&&a.getAttribute("dir")&&a.getAttribute("lang"))})},getCurrentLangElement:function(b){var h=b.elementPath();b=h&&h.elements;var f;if(h)for(var e=0;e<b.length;e++)h=b[e],!f&&"span"==h.getName()&&h.hasAttribute("dir")&&h.hasAttribute("lang")&&(f=h);return f}})}(),function(){function b(a,b,c,d){for(var e=CKEDITOR.plugins.list.listToArray(b.root,
-c),f=[],g=0;g<b.contents.length;g++){var h=b.contents[g];(h=h.getAscendant("li",!0))&&!h.getCustomData("list_item_processed")&&(f.push(h),CKEDITOR.dom.element.setMarker(c,h,"list_item_processed",!0))}for(var h=b.root.getDocument(),k,l,g=0;g<f.length;g++){var m=f[g].getCustomData("listarray_index");k=e[m].parent;k.is(this.type)||(l=h.createElement(this.type),k.copyAttributes(l,{start:1,type:1}),l.removeStyle("list-style-type"),e[m].parent=l)}c=CKEDITOR.plugins.list.arrayToList(e,c,null,a.config.enterMode);
-for(var n,e=c.listNode.getChildCount(),g=0;g<e&&(n=c.listNode.getChild(g));g++)n.getName()==this.type&&d.push(n);c.listNode.replace(b.root);a.fire("contentDomInvalidated")}function h(a,b,c){var d=b.contents,e=b.root.getDocument(),f=[];if(1==d.length&&d[0].equals(b.root)){var g=e.createElement("div");d[0].moveChildren&&d[0].moveChildren(g);d[0].append(g);d[0]=g}b=b.contents[0].getParent();for(g=0;g<d.length;g++)b=b.getCommonAncestor(d[g].getParent());a=a.config.useComputedState;var h,k;a=void 0===
-a||a;for(g=0;g<d.length;g++)for(var l=d[g],m;m=l.getParent();){if(m.equals(b)){f.push(l);!k&&l.getDirection()&&(k=1);l=l.getDirection(a);null!==h&&(h=h&&h!=l?null:l);break}l=m}if(!(1>f.length)){d=f[f.length-1].getNext();g=e.createElement(this.type);for(c.push(g);f.length;)c=f.shift(),a=e.createElement("li"),l=c,l.is("pre")||p.test(l.getName())||"false"==l.getAttribute("contenteditable")?c.appendTo(a):(c.copyAttributes(a),h&&c.getDirection()&&(a.removeStyle("direction"),a.removeAttribute("dir")),c.moveChildren(a),
-c.remove()),a.appendTo(g);h&&k&&g.setAttribute("dir",h);d?g.insertBefore(d):g.appendTo(b)}}function f(a,b,c){function d(c){if(!(!(l=k[c?"getFirst":"getLast"]())||l.is&&l.isBlockBoundary()||!(m=b.root[c?"getPrevious":"getNext"](CKEDITOR.dom.walker.invisible(!0)))||m.is&&m.isBlockBoundary({br:1})))a.document.createElement("br")[c?"insertBefore":"insertAfter"](l)}for(var e=CKEDITOR.plugins.list.listToArray(b.root,c),f=[],g=0;g<b.contents.length;g++){var h=b.contents[g];(h=h.getAscendant("li",!0))&&!h.getCustomData("list_item_processed")&&
-(f.push(h),CKEDITOR.dom.element.setMarker(c,h,"list_item_processed",!0))}h=null;for(g=0;g<f.length;g++)h=f[g].getCustomData("listarray_index"),e[h].indent=-1;for(g=h+1;g<e.length;g++)if(e[g].indent>e[g-1].indent+1){f=e[g-1].indent+1-e[g].indent;for(h=e[g].indent;e[g]&&e[g].indent>=h;)e[g].indent+=f,g++;g--}var k=CKEDITOR.plugins.list.arrayToList(e,c,null,a.config.enterMode,b.root.getAttribute("dir")).listNode,l,m;d(!0);d();k.replace(b.root);a.fire("contentDomInvalidated")}function e(a,b){this.name=
-a;this.context=this.type=b;this.allowedContent=b+" li";this.requiredContent=b}function a(a,b,c,d){for(var e,f;e=a[d?"getLast":"getFirst"](t);)(f=e.getDirection(1))!==b.getDirection(1)&&e.setAttribute("dir",f),e.remove(),c?e[d?"insertBefore":"insertAfter"](c):b.append(e,d),c=e}function m(b){function c(d){var e=b[d?"getPrevious":"getNext"](y);e&&e.type==CKEDITOR.NODE_ELEMENT&&e.is(b.getName())&&(a(b,e,null,!d),b.remove(),b=e)}c();c(1)}function k(a){return a.type==CKEDITOR.NODE_ELEMENT&&(a.getName()in
-CKEDITOR.dtd.$block||a.getName()in CKEDITOR.dtd.$listItem)&&CKEDITOR.dtd[a.getName()]["#"]}function l(b,d,e){b.fire("saveSnapshot");e.enlarge(CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS);var f=e.extractContents();d.trim(!1,!0);var g=d.createBookmark(),h=new CKEDITOR.dom.elementPath(d.startContainer),k=h.block,h=h.lastElement.getAscendant("li",1)||k,l=new CKEDITOR.dom.elementPath(e.startContainer),n=l.contains(CKEDITOR.dtd.$listItem),l=l.contains(CKEDITOR.dtd.$list);k?(k=k.getBogus())&&k.remove():l&&(k=l.getPrevious(y))&&
-w(k)&&k.remove();(k=f.getLast())&&k.type==CKEDITOR.NODE_ELEMENT&&k.is("br")&&k.remove();(k=d.startContainer.getChild(d.startOffset))?f.insertBefore(k):d.startContainer.append(f);n&&(f=c(n))&&(h.contains(n)?(a(f,n.getParent(),n),f.remove()):h.append(f));for(;e.checkStartOfBlock()&&e.checkEndOfBlock();){l=e.startPath();f=l.block;if(!f)break;f.is("li")&&(h=f.getParent(),f.equals(h.getLast(y))&&f.equals(h.getFirst(y))&&(f=h));e.moveToPosition(f,CKEDITOR.POSITION_BEFORE_START);f.remove()}e=e.clone();f=
-b.editable();e.setEndAt(f,CKEDITOR.POSITION_BEFORE_END);e=new CKEDITOR.dom.walker(e);e.evaluator=function(a){return y(a)&&!w(a)};(e=e.next())&&e.type==CKEDITOR.NODE_ELEMENT&&e.getName()in CKEDITOR.dtd.$list&&m(e);d.moveToBookmark(g);d.select();b.fire("saveSnapshot")}function c(a){return(a=a.getLast(y))&&a.type==CKEDITOR.NODE_ELEMENT&&a.getName()in d?a:null}var d={ol:1,ul:1},g=CKEDITOR.dom.walker.whitespaces(),n=CKEDITOR.dom.walker.bookmark(),y=function(a){return!(g(a)||n(a))},w=CKEDITOR.dom.walker.bogus();
-CKEDITOR.plugins.list={listToArray:function(a,b,c,e,f){if(!d[a.getName()])return[];e||(e=0);c||(c=[]);for(var g=0,h=a.getChildCount();g<h;g++){var k=a.getChild(g);k.type==CKEDITOR.NODE_ELEMENT&&k.getName()in CKEDITOR.dtd.$list&&CKEDITOR.plugins.list.listToArray(k,b,c,e+1);if("li"==k.$.nodeName.toLowerCase()){var l={parent:a,indent:e,element:k,contents:[]};f?l.grandparent=f:(l.grandparent=a.getParent(),l.grandparent&&"li"==l.grandparent.$.nodeName.toLowerCase()&&(l.grandparent=l.grandparent.getParent()));
-b&&CKEDITOR.dom.element.setMarker(b,k,"listarray_index",c.length);c.push(l);for(var m=0,n=k.getChildCount(),t;m<n;m++)t=k.getChild(m),t.type==CKEDITOR.NODE_ELEMENT&&d[t.getName()]?CKEDITOR.plugins.list.listToArray(t,b,c,e+1,l.grandparent):l.contents.push(t)}}return c},arrayToList:function(a,b,c,e,f){c||(c=0);if(!a||a.length<c+1)return null;for(var g,h=a[c].parent.getDocument(),k=new CKEDITOR.dom.documentFragment(h),l=null,m=c,t=Math.max(a[c].indent,0),p=null,w,C,O=e==CKEDITOR.ENTER_P?"p":"div";;){var I=
-a[m];g=I.grandparent;w=I.element.getDirection(1);if(I.indent==t){l&&a[m].parent.getName()==l.getName()||(l=a[m].parent.clone(!1,1),f&&l.setAttribute("dir",f),k.append(l));p=l.append(I.element.clone(0,1));w!=l.getDirection(1)&&p.setAttribute("dir",w);for(g=0;g<I.contents.length;g++)p.append(I.contents[g].clone(1,1));m++}else if(I.indent==Math.max(t,0)+1)I=a[m-1].element.getDirection(1),m=CKEDITOR.plugins.list.arrayToList(a,null,m,e,I!=w?w:null),!p.getChildCount()&&CKEDITOR.env.needsNbspFiller&&7>=
-h.$.documentMode&&p.append(h.createText(" ")),p.append(m.listNode),m=m.nextIndex;else if(-1==I.indent&&!c&&g){d[g.getName()]?(p=I.element.clone(!1,!0),w!=g.getDirection(1)&&p.setAttribute("dir",w)):p=new CKEDITOR.dom.documentFragment(h);var l=g.getDirection(1)!=w,M=I.element,Q=M.getAttribute("class"),H=M.getAttribute("style"),G=p.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT&&(e!=CKEDITOR.ENTER_BR||l||H||Q),P,Y=I.contents.length,T;for(g=0;g<Y;g++)if(P=I.contents[g],n(P)&&1<Y)G?T=P.clone(1,1):p.append(P.clone(1,
-1));else if(P.type==CKEDITOR.NODE_ELEMENT&&P.isBlockBoundary()){l&&!P.getDirection()&&P.setAttribute("dir",w);C=P;var X=M.getAttribute("style");X&&C.setAttribute("style",X.replace(/([^;])$/,"$1;")+(C.getAttribute("style")||""));Q&&P.addClass(Q);C=null;T&&(p.append(T),T=null);p.append(P.clone(1,1))}else G?(C||(C=h.createElement(O),p.append(C),l&&C.setAttribute("dir",w)),H&&C.setAttribute("style",H),Q&&C.setAttribute("class",Q),T&&(C.append(T),T=null),C.append(P.clone(1,1))):p.append(P.clone(1,1));
-T&&((C||p).append(T),T=null);p.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT&&m!=a.length-1&&(CKEDITOR.env.needsBrFiller&&(w=p.getLast())&&w.type==CKEDITOR.NODE_ELEMENT&&w.is("br")&&w.remove(),(w=p.getLast(y))&&w.type==CKEDITOR.NODE_ELEMENT&&w.is(CKEDITOR.dtd.$block)||p.append(h.createElement("br")));w=p.$.nodeName.toLowerCase();"div"!=w&&"p"!=w||p.appendBogus();k.append(p);l=null;m++}else return null;C=null;if(a.length<=m||Math.max(a[m].indent,0)<t)break}if(b)for(a=k.getFirst();a;){if(a.type==CKEDITOR.NODE_ELEMENT&&
-(CKEDITOR.dom.element.clearMarkers(b,a),a.getName()in CKEDITOR.dtd.$listItem&&(c=a,h=f=e=void 0,e=c.getDirection()))){for(f=c.getParent();f&&!(h=f.getDirection());)f=f.getParent();e==h&&c.removeAttribute("dir")}a=a.getNextSourceNode()}return{listNode:k,nextIndex:m}}};var p=/^h[1-6]$/,t=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT);e.prototype={exec:function(a){function c(a){return d[a.root.getName()]&&!e(a.root,[CKEDITOR.NODE_COMMENT])}function e(a,b){return CKEDITOR.tools.array.filter(a.getChildren().toArray(),
-function(a){return-1===CKEDITOR.tools.array.indexOf(b,a.type)}).length}function g(a){var b=!0;if(0===a.getChildCount())return!1;a.forEach(function(a){if(a.type!==CKEDITOR.NODE_COMMENT)return b=!1},null,!0);return b}this.refresh(a,a.elementPath());var k=a.config,l=a.getSelection(),n=l&&l.getRanges();if(this.state==CKEDITOR.TRISTATE_OFF){var t=a.editable();if(t.getFirst(y)){var p=1==n.length&&n[0];(k=p&&p.getEnclosedNode())&&k.is&&this.type==k.getName()&&this.setState(CKEDITOR.TRISTATE_ON)}else k.enterMode==
-CKEDITOR.ENTER_BR?t.appendBogus():n[0].fixBlock(1,k.enterMode==CKEDITOR.ENTER_P?"p":"div"),l.selectRanges(n)}for(var k=l.createBookmarks(!0),t=[],w={},n=n.createIterator(),F=0;(p=n.getNextRange())&&++F;){var K=p.getBoundaryNodes(),L=K.startNode,C=K.endNode;L.type==CKEDITOR.NODE_ELEMENT&&"td"==L.getName()&&p.setStartAt(K.startNode,CKEDITOR.POSITION_AFTER_START);C.type==CKEDITOR.NODE_ELEMENT&&"td"==C.getName()&&p.setEndAt(K.endNode,CKEDITOR.POSITION_BEFORE_END);p=p.createIterator();for(p.forceBrBreak=
-this.state==CKEDITOR.TRISTATE_OFF;K=p.getNextParagraph();)if(!K.getCustomData("list_block")&&!g(K)){CKEDITOR.dom.element.setMarker(w,K,"list_block",1);for(var O=a.elementPath(K),L=O.elements,C=0,O=O.blockLimit,I,M=L.length-1;0<=M&&(I=L[M]);M--)if(d[I.getName()]&&O.contains(I)){O.removeCustomData("list_group_object_"+F);(L=I.getCustomData("list_group_object"))?L.contents.push(K):(L={root:I,contents:[K]},t.push(L),CKEDITOR.dom.element.setMarker(w,I,"list_group_object",L));C=1;break}C||(C=O,C.getCustomData("list_group_object_"+
-F)?C.getCustomData("list_group_object_"+F).contents.push(K):(L={root:C,contents:[K]},CKEDITOR.dom.element.setMarker(w,C,"list_group_object_"+F,L),t.push(L)))}}for(I=[];0<t.length;)L=t.shift(),this.state==CKEDITOR.TRISTATE_OFF?c(L)||(d[L.root.getName()]?b.call(this,a,L,w,I):h.call(this,a,L,I)):this.state==CKEDITOR.TRISTATE_ON&&d[L.root.getName()]&&!c(L)&&f.call(this,a,L,w);for(M=0;M<I.length;M++)m(I[M]);CKEDITOR.dom.element.clearAllMarkers(w);l.selectBookmarks(k);a.focus()},refresh:function(a,b){var c=
+c),g=[],f=0;f<b.contents.length;f++){var h=b.contents[f];(h=h.getAscendant("li",!0))&&!h.getCustomData("list_item_processed")&&(g.push(h),CKEDITOR.dom.element.setMarker(c,h,"list_item_processed",!0))}for(var h=b.root.getDocument(),k,l,f=0;f<g.length;f++){var m=g[f].getCustomData("listarray_index");k=e[m].parent;k.is(this.type)||(l=h.createElement(this.type),k.copyAttributes(l,{start:1,type:1}),l.removeStyle("list-style-type"),e[m].parent=l)}c=CKEDITOR.plugins.list.arrayToList(e,c,null,a.config.enterMode);
+for(var n,e=c.listNode.getChildCount(),f=0;f<e&&(n=c.listNode.getChild(f));f++)n.getName()==this.type&&d.push(n);c.listNode.replace(b.root);a.fire("contentDomInvalidated")}function h(a,b,c){var d=b.contents,e=b.root.getDocument(),g=[];if(1==d.length&&d[0].equals(b.root)){var f=e.createElement("div");d[0].moveChildren&&d[0].moveChildren(f);d[0].append(f);d[0]=f}b=b.contents[0].getParent();for(f=0;f<d.length;f++)b=b.getCommonAncestor(d[f].getParent());a=a.config.useComputedState;var h,k;a=void 0===
+a||a;for(f=0;f<d.length;f++)for(var l=d[f],m;m=l.getParent();){if(m.equals(b)){g.push(l);!k&&l.getDirection()&&(k=1);l=l.getDirection(a);null!==h&&(h=h&&h!=l?null:l);break}l=m}if(!(1>g.length)){d=g[g.length-1].getNext();f=e.createElement(this.type);for(c.push(f);g.length;)c=g.shift(),a=e.createElement("li"),l=c,l.is("pre")||p.test(l.getName())||"false"==l.getAttribute("contenteditable")?c.appendTo(a):(c.copyAttributes(a),h&&c.getDirection()&&(a.removeStyle("direction"),a.removeAttribute("dir")),c.moveChildren(a),
+c.remove()),a.appendTo(f);h&&k&&f.setAttribute("dir",h);d?f.insertBefore(d):f.appendTo(b)}}function f(a,b,c){function d(c){if(!(!(l=k[c?"getFirst":"getLast"]())||l.is&&l.isBlockBoundary()||!(m=b.root[c?"getPrevious":"getNext"](CKEDITOR.dom.walker.invisible(!0)))||m.is&&m.isBlockBoundary({br:1})))a.document.createElement("br")[c?"insertBefore":"insertAfter"](l)}for(var e=CKEDITOR.plugins.list.listToArray(b.root,c),g=[],f=0;f<b.contents.length;f++){var h=b.contents[f];(h=h.getAscendant("li",!0))&&!h.getCustomData("list_item_processed")&&
+(g.push(h),CKEDITOR.dom.element.setMarker(c,h,"list_item_processed",!0))}h=null;for(f=0;f<g.length;f++)h=g[f].getCustomData("listarray_index"),e[h].indent=-1;for(f=h+1;f<e.length;f++)if(e[f].indent>e[f-1].indent+1){g=e[f-1].indent+1-e[f].indent;for(h=e[f].indent;e[f]&&e[f].indent>=h;)e[f].indent+=g,f++;f--}var k=CKEDITOR.plugins.list.arrayToList(e,c,null,a.config.enterMode,b.root.getAttribute("dir")).listNode,l,m;d(!0);d();k.replace(b.root);a.fire("contentDomInvalidated")}function e(a,b){this.name=
+a;this.context=this.type=b;this.allowedContent=b+" li";this.requiredContent=b}function a(a,b,c,d){for(var e,g;e=a[d?"getLast":"getFirst"](q);)(g=e.getDirection(1))!==b.getDirection(1)&&e.setAttribute("dir",g),e.remove(),c?e[d?"insertBefore":"insertAfter"](c):b.append(e,d),c=e}function k(b){function c(d){var e=b[d?"getPrevious":"getNext"](y);e&&e.type==CKEDITOR.NODE_ELEMENT&&e.is(b.getName())&&(a(b,e,null,!d),b.remove(),b=e)}c();c(1)}function l(a){return a.type==CKEDITOR.NODE_ELEMENT&&(a.getName()in
+CKEDITOR.dtd.$block||a.getName()in CKEDITOR.dtd.$listItem)&&CKEDITOR.dtd[a.getName()]["#"]}function m(b,d,e){b.fire("saveSnapshot");e.enlarge(CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS);var g=e.extractContents();d.trim(!1,!0);var f=d.createBookmark(),h=new CKEDITOR.dom.elementPath(d.startContainer),l=h.block,h=h.lastElement.getAscendant("li",1)||l,m=new CKEDITOR.dom.elementPath(e.startContainer),n=m.contains(CKEDITOR.dtd.$listItem),m=m.contains(CKEDITOR.dtd.$list);l?(l=l.getBogus())&&l.remove():m&&(l=m.getPrevious(y))&&
+v(l)&&l.remove();(l=g.getLast())&&l.type==CKEDITOR.NODE_ELEMENT&&l.is("br")&&l.remove();(l=d.startContainer.getChild(d.startOffset))?g.insertBefore(l):d.startContainer.append(g);n&&(g=c(n))&&(h.contains(n)?(a(g,n.getParent(),n),g.remove()):h.append(g));for(;e.checkStartOfBlock()&&e.checkEndOfBlock();){m=e.startPath();g=m.block;if(!g)break;g.is("li")&&(h=g.getParent(),g.equals(h.getLast(y))&&g.equals(h.getFirst(y))&&(g=h));e.moveToPosition(g,CKEDITOR.POSITION_BEFORE_START);g.remove()}e=e.clone();g=
+b.editable();e.setEndAt(g,CKEDITOR.POSITION_BEFORE_END);e=new CKEDITOR.dom.walker(e);e.evaluator=function(a){return y(a)&&!v(a)};(e=e.next())&&e.type==CKEDITOR.NODE_ELEMENT&&e.getName()in CKEDITOR.dtd.$list&&k(e);d.moveToBookmark(f);d.select();b.fire("saveSnapshot")}function c(a){return(a=a.getLast(y))&&a.type==CKEDITOR.NODE_ELEMENT&&a.getName()in d?a:null}var d={ol:1,ul:1},g=CKEDITOR.dom.walker.whitespaces(),n=CKEDITOR.dom.walker.bookmark(),y=function(a){return!(g(a)||n(a))},v=CKEDITOR.dom.walker.bogus();
+CKEDITOR.plugins.list={listToArray:function(a,b,c,e,g){if(!d[a.getName()])return[];e||(e=0);c||(c=[]);for(var f=0,h=a.getChildCount();f<h;f++){var k=a.getChild(f);k.type==CKEDITOR.NODE_ELEMENT&&k.getName()in CKEDITOR.dtd.$list&&CKEDITOR.plugins.list.listToArray(k,b,c,e+1);if("li"==k.$.nodeName.toLowerCase()){var l={parent:a,indent:e,element:k,contents:[]};g?l.grandparent=g:(l.grandparent=a.getParent(),l.grandparent&&"li"==l.grandparent.$.nodeName.toLowerCase()&&(l.grandparent=l.grandparent.getParent()));
+b&&CKEDITOR.dom.element.setMarker(b,k,"listarray_index",c.length);c.push(l);for(var m=0,n=k.getChildCount(),q;m<n;m++)q=k.getChild(m),q.type==CKEDITOR.NODE_ELEMENT&&d[q.getName()]?CKEDITOR.plugins.list.listToArray(q,b,c,e+1,l.grandparent):l.contents.push(q)}}return c},arrayToList:function(a,b,c,e,g){c||(c=0);if(!a||a.length<c+1)return null;for(var f,h=a[c].parent.getDocument(),k=new CKEDITOR.dom.documentFragment(h),l=null,m=c,q=Math.max(a[c].indent,0),p=null,v,D,N=e==CKEDITOR.ENTER_P?"p":"div";;){var I=
+a[m];f=I.grandparent;v=I.element.getDirection(1);if(I.indent==q){l&&a[m].parent.getName()==l.getName()||(l=a[m].parent.clone(!1,1),g&&l.setAttribute("dir",g),k.append(l));p=l.append(I.element.clone(0,1));v!=l.getDirection(1)&&p.setAttribute("dir",v);for(f=0;f<I.contents.length;f++)p.append(I.contents[f].clone(1,1));m++}else if(I.indent==Math.max(q,0)+1)I=a[m-1].element.getDirection(1),m=CKEDITOR.plugins.list.arrayToList(a,null,m,e,I!=v?v:null),!p.getChildCount()&&CKEDITOR.env.needsNbspFiller&&7>=
+h.$.documentMode&&p.append(h.createText(" ")),p.append(m.listNode),m=m.nextIndex;else if(-1==I.indent&&!c&&f){d[f.getName()]?(p=I.element.clone(!1,!0),v!=f.getDirection(1)&&p.setAttribute("dir",v)):p=new CKEDITOR.dom.documentFragment(h);var l=f.getDirection(1)!=v,L=I.element,R=L.getAttribute("class"),H=L.getAttribute("style"),G=p.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT&&(e!=CKEDITOR.ENTER_BR||l||H||R),O,Y=I.contents.length,S;for(f=0;f<Y;f++)if(O=I.contents[f],n(O)&&1<Y)G?S=O.clone(1,1):p.append(O.clone(1,
+1));else if(O.type==CKEDITOR.NODE_ELEMENT&&O.isBlockBoundary()){l&&!O.getDirection()&&O.setAttribute("dir",v);D=O;var X=L.getAttribute("style");X&&D.setAttribute("style",X.replace(/([^;])$/,"$1;")+(D.getAttribute("style")||""));R&&O.addClass(R);D=null;S&&(p.append(S),S=null);p.append(O.clone(1,1))}else G?(D||(D=h.createElement(N),p.append(D),l&&D.setAttribute("dir",v)),H&&D.setAttribute("style",H),R&&D.setAttribute("class",R),S&&(D.append(S),S=null),D.append(O.clone(1,1))):p.append(O.clone(1,1));
+S&&((D||p).append(S),S=null);p.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT&&m!=a.length-1&&(CKEDITOR.env.needsBrFiller&&(v=p.getLast())&&v.type==CKEDITOR.NODE_ELEMENT&&v.is("br")&&v.remove(),(v=p.getLast(y))&&v.type==CKEDITOR.NODE_ELEMENT&&v.is(CKEDITOR.dtd.$block)||p.append(h.createElement("br")));v=p.$.nodeName.toLowerCase();"div"!=v&&"p"!=v||p.appendBogus();k.append(p);l=null;m++}else return null;D=null;if(a.length<=m||Math.max(a[m].indent,0)<q)break}if(b)for(a=k.getFirst();a;){if(a.type==CKEDITOR.NODE_ELEMENT&&
+(CKEDITOR.dom.element.clearMarkers(b,a),a.getName()in CKEDITOR.dtd.$listItem&&(c=a,h=g=e=void 0,e=c.getDirection()))){for(g=c.getParent();g&&!(h=g.getDirection());)g=g.getParent();e==h&&c.removeAttribute("dir")}a=a.getNextSourceNode()}return{listNode:k,nextIndex:m}}};var p=/^h[1-6]$/,q=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT);e.prototype={exec:function(a){function c(a){return d[a.root.getName()]&&!e(a.root,[CKEDITOR.NODE_COMMENT])}function e(a,b){return CKEDITOR.tools.array.filter(a.getChildren().toArray(),
+function(a){return-1===CKEDITOR.tools.array.indexOf(b,a.type)}).length}function g(a){var b=!0;if(0===a.getChildCount())return!1;a.forEach(function(a){if(a.type!==CKEDITOR.NODE_COMMENT)return b=!1},null,!0);return b}this.refresh(a,a.elementPath());var l=a.config,m=a.getSelection(),n=m&&m.getRanges();if(this.state==CKEDITOR.TRISTATE_OFF){var q=a.editable();if(q.getFirst(y)){var p=1==n.length&&n[0];(l=p&&p.getEnclosedNode())&&l.is&&this.type==l.getName()&&this.setState(CKEDITOR.TRISTATE_ON)}else l.enterMode==
+CKEDITOR.ENTER_BR?q.appendBogus():n[0].fixBlock(1,l.enterMode==CKEDITOR.ENTER_P?"p":"div"),m.selectRanges(n)}for(var l=m.createBookmarks(!0),q=[],v={},n=n.createIterator(),F=0;(p=n.getNextRange())&&++F;){var K=p.getBoundaryNodes(),M=K.startNode,D=K.endNode;M.type==CKEDITOR.NODE_ELEMENT&&"td"==M.getName()&&p.setStartAt(K.startNode,CKEDITOR.POSITION_AFTER_START);D.type==CKEDITOR.NODE_ELEMENT&&"td"==D.getName()&&p.setEndAt(K.endNode,CKEDITOR.POSITION_BEFORE_END);p=p.createIterator();for(p.forceBrBreak=
+this.state==CKEDITOR.TRISTATE_OFF;K=p.getNextParagraph();)if(!K.getCustomData("list_block")&&!g(K)){CKEDITOR.dom.element.setMarker(v,K,"list_block",1);for(var N=a.elementPath(K),M=N.elements,D=0,N=N.blockLimit,I,L=M.length-1;0<=L&&(I=M[L]);L--)if(d[I.getName()]&&N.contains(I)){N.removeCustomData("list_group_object_"+F);(M=I.getCustomData("list_group_object"))?M.contents.push(K):(M={root:I,contents:[K]},q.push(M),CKEDITOR.dom.element.setMarker(v,I,"list_group_object",M));D=1;break}D||(D=N,D.getCustomData("list_group_object_"+
+F)?D.getCustomData("list_group_object_"+F).contents.push(K):(M={root:D,contents:[K]},CKEDITOR.dom.element.setMarker(v,D,"list_group_object_"+F,M),q.push(M)))}}for(I=[];0<q.length;)M=q.shift(),this.state==CKEDITOR.TRISTATE_OFF?c(M)||(d[M.root.getName()]?b.call(this,a,M,v,I):h.call(this,a,M,I)):this.state==CKEDITOR.TRISTATE_ON&&d[M.root.getName()]&&!c(M)&&f.call(this,a,M,v);for(L=0;L<I.length;L++)k(I[L]);CKEDITOR.dom.element.clearAllMarkers(v);m.selectBookmarks(l);a.focus()},refresh:function(a,b){var c=
 b.contains(d,1),e=b.blockLimit||b.root;c&&e.contains(c)?this.setState(c.is(this.type)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF):this.setState(CKEDITOR.TRISTATE_OFF)}};CKEDITOR.plugins.add("list",{requires:"indentlist",init:function(a){a.blockless||(a.addCommand("numberedlist",new e("numberedlist","ol")),a.addCommand("bulletedlist",new e("bulletedlist","ul")),a.ui.addButton&&(a.ui.addButton("NumberedList",{label:a.lang.list.numberedlist,command:"numberedlist",directional:!0,toolbar:"list,10"}),a.ui.addButton("BulletedList",
-{label:a.lang.list.bulletedlist,command:"bulletedlist",directional:!0,toolbar:"list,20"})),a.on("key",function(b){var e=b.data.domEvent.getKey(),f;if("wysiwyg"==a.mode&&e in{8:1,46:1}){var g=a.getSelection().getRanges()[0],h=g&&g.startPath();if(g&&g.collapsed){var m=8==e,n=a.editable(),t=new CKEDITOR.dom.walker(g.clone());t.evaluator=function(a){return y(a)&&!w(a)};t.guard=function(a,b){return!(b&&a.type==CKEDITOR.NODE_ELEMENT&&a.is("table"))};e=g.clone();if(m){var p;(p=h.contains(d))&&g.checkBoundaryOfElement(p,
-CKEDITOR.START)&&(p=p.getParent())&&p.is("li")&&(p=c(p))?(f=p,p=p.getPrevious(y),e.moveToPosition(p&&w(p)?p:f,CKEDITOR.POSITION_BEFORE_START)):(t.range.setStartAt(n,CKEDITOR.POSITION_AFTER_START),t.range.setEnd(g.startContainer,g.startOffset),(p=t.previous())&&p.type==CKEDITOR.NODE_ELEMENT&&(p.getName()in d||p.is("li"))&&(p.is("li")||(t.range.selectNodeContents(p),t.reset(),t.evaluator=k,p=t.previous()),f=p,e.moveToElementEditEnd(f),e.moveToPosition(e.endPath().block,CKEDITOR.POSITION_BEFORE_END)));
-if(f)l(a,e,g),b.cancel();else{var F=h.contains(d);F&&g.checkBoundaryOfElement(F,CKEDITOR.START)&&(f=F.getFirst(y),g.checkBoundaryOfElement(f,CKEDITOR.START)&&(p=F.getPrevious(y),c(f)?p&&(g.moveToElementEditEnd(p),g.select()):a.execCommand("outdent"),b.cancel()))}}else if(f=h.contains("li")){if(t.range.setEndAt(n,CKEDITOR.POSITION_BEFORE_END),m=(n=f.getLast(y))&&k(n)?n:f,h=0,(p=t.next())&&p.type==CKEDITOR.NODE_ELEMENT&&p.getName()in d&&p.equals(n)?(h=1,p=t.next()):g.checkBoundaryOfElement(m,CKEDITOR.END)&&
-(h=2),h&&p){g=g.clone();g.moveToElementEditStart(p);if(1==h&&(e.optimize(),!e.startContainer.equals(f))){for(f=e.startContainer;f.is(CKEDITOR.dtd.$inline);)F=f,f=f.getParent();F&&e.moveToPosition(F,CKEDITOR.POSITION_AFTER_END)}2==h&&(e.moveToPosition(e.endPath().block,CKEDITOR.POSITION_BEFORE_END),g.endPath().block&&g.moveToPosition(g.endPath().block,CKEDITOR.POSITION_AFTER_START));l(a,e,g);b.cancel()}}else t.range.setEndAt(n,CKEDITOR.POSITION_BEFORE_END),(p=t.next())&&p.type==CKEDITOR.NODE_ELEMENT&&
-p.is(d)&&(p=p.getFirst(y),h.block&&g.checkStartOfBlock()&&g.checkEndOfBlock()?(h.block.remove(),g.moveToElementEditStart(p),g.select()):c(p)?(g.moveToElementEditStart(p),g.select()):(g=g.clone(),g.moveToElementEditStart(p),l(a,e,g)),b.cancel());setTimeout(function(){a.selectionChange(1)})}}}))}})}(),"use strict",function(){function b(a,b,c){return n(b)&&n(c)&&c.equals(b.getNext(function(a){return!(U(a)||V(a)||y(a))}))}function h(a){this.upper=a[0];this.lower=a[1];this.set.apply(this,a.slice(2))}function f(a){var b=
-a.element;if(b&&n(b)&&(b=b.getAscendant(a.triggers,!0))&&a.editable.contains(b)){var c=k(b);if("true"==c.getAttribute("contenteditable"))return b;if(c.is(a.triggers))return c}return null}function e(a,b,c){q(a,b);q(a,c);a=b.size.bottom;c=c.size.top;return a&&c?0|(a+c)/2:a||c}function a(a,b,c){return b=b[c?"getPrevious":"getNext"](function(b){return b&&b.type==CKEDITOR.NODE_TEXT&&!U(b)||n(b)&&!y(b)&&!g(a,b)})}function m(a,b,c){return a>b&&a<c}function k(a,b){if(a.data("cke-editable"))return null;for(b||
-(a=a.getParent());a&&!a.data("cke-editable");){if(a.hasAttribute("contenteditable"))return a;a=a.getParent()}return null}function l(a){var b=a.doc,d=F('\x3cspan contenteditable\x3d"false" data-cke-magic-line\x3d"1" style\x3d"'+aa+"position:absolute;border-top:1px dashed "+a.boxColor+'"\x3e\x3c/span\x3e',b),e=CKEDITOR.getUrl(this.path+"images/"+(K.hidpi?"hidpi/":"")+"icon"+(a.rtl?"-rtl":"")+".png");A(d,{attach:function(){this.wrap.getParent()||this.wrap.appendTo(a.editable,!0);return this},lineChildren:[A(F('\x3cspan title\x3d"'+
-a.editor.lang.magicline.title+'" contenteditable\x3d"false"\x3e\x26#8629;\x3c/span\x3e',b),{base:aa+"height:17px;width:17px;"+(a.rtl?"left":"right")+":17px;background:url("+e+") center no-repeat "+a.boxColor+";cursor:pointer;"+(K.hc?"font-size: 15px;line-height:14px;border:1px solid #fff;text-align:center;":"")+(K.hidpi?"background-size: 9px 10px;":""),looks:["top:-8px; border-radius: 2px;","top:-17px; border-radius: 2px 2px 0px 0px;","top:-1px; border-radius: 0px 0px 2px 2px;"]}),A(F(ca,b),{base:ba+
-"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"]}),A(F(ca,b),{base:ba+"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(){q(a,this);var b=a.holdDistance,c=this.size;return c&&m(a.mouse.y,
-c.top-b,c.bottom+b)&&m(a.mouse.x,c.left-b,c.right+b)?!0:!1},place:function(){var b=a.view,c=a.editable,d=a.trigger,e=d.upper,f=d.lower,g=e||f,h=g.getParent(),k={};this.trigger=d;e&&q(a,e,!0);f&&q(a,f,!0);q(a,h,!0);a.inInlineMode&&v(a,!0);h.equals(c)?(k.left=b.scroll.x,k.right=-b.scroll.x,k.width=""):(k.left=g.size.left-g.size.margin.left+b.scroll.x-(a.inInlineMode?b.editable.left+b.editable.border.left:0),k.width=g.size.outerWidth+g.size.margin.left+g.size.margin.right+b.scroll.x,k.right="");e&&f?
-k.top=e.size.margin.bottom===f.size.margin.top?0|e.size.bottom+e.size.margin.bottom/2:e.size.margin.bottom<f.size.margin.top?e.size.bottom+e.size.margin.bottom:e.size.bottom+e.size.margin.bottom-f.size.margin.top:e?f||(k.top=e.size.bottom+e.size.margin.bottom):k.top=f.size.top-f.size.margin.top;d.is(G)||m(k.top,b.scroll.y-15,b.scroll.y+5)?(k.top=a.inInlineMode?0:b.scroll.y,this.look(G)):d.is(P)||m(k.top,b.pane.bottom-5,b.pane.bottom+15)?(k.top=a.inInlineMode?b.editable.height+b.editable.padding.top+
-b.editable.padding.bottom:b.pane.bottom-1,this.look(P)):(a.inInlineMode&&(k.top-=b.editable.top+b.editable.border.top),this.look(Y));a.inInlineMode&&(k.top--,k.top+=b.editable.scroll.top,k.left+=b.editable.scroll.left);for(var l in k)k[l]=CKEDITOR.tools.cssLength(k[l]);this.setStyles(k)},look:function(a){if(this.oldLook!=a){for(var b=this.lineChildren.length,c;b--;)(c=this.lineChildren[b]).setAttribute("style",c.base+c.looks[0|a/2]);this.oldLook=a}},wrap:new E("span",a.doc)});for(b=d.lineChildren.length;b--;)d.lineChildren[b].appendTo(d);
-d.look(Y);d.appendTo(d.wrap);d.unselectable();d.lineChildren[0].on("mouseup",function(b){d.detach();c(a,function(b){var c=a.line.trigger;b[c.is(I)?"insertBefore":"insertAfter"](c.is(I)?c.lower:c.upper)},!0);a.editor.focus();K.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 c(a,b,c){var d=new CKEDITOR.dom.range(a.doc),e=a.editor,f;K.ie&&a.enterMode==CKEDITOR.ENTER_BR?f=a.doc.createText(T):
-(f=(f=k(a.element,!0))&&f.data("cke-enter-mode")||a.enterMode,f=new E(O[f],a.doc),f.is("br")||a.doc.createText(T).appendTo(f));c&&e.fire("saveSnapshot");b(f);d.moveToPosition(f,CKEDITOR.POSITION_AFTER_START);e.getSelection().selectRanges([d]);a.hotNode=f;c&&e.fire("saveSnapshot")}function d(b,d){return{canUndo:!0,modes:{wysiwyg:1},exec:function(){function e(a){var f=K.ie&&9>K.version?" ":T,g=b.hotNode&&b.hotNode.getText()==f&&b.element.equals(b.hotNode)&&b.lastCmdDirection===!!d;c(b,function(c){g&&
-b.hotNode&&b.hotNode.remove();c[d?"insertAfter":"insertBefore"](a);c.setAttributes({"data-cke-magicline-hot":1,"data-cke-magicline-dir":!!d});b.lastCmdDirection=!!d});K.ie||b.enterMode==CKEDITOR.ENTER_BR||b.hotNode.scrollIntoView();b.line.detach()}return function(c){c=c.getSelection().getStartElement();var g;c=c.getAscendant(S,1);if(!t(b,c)&&c&&!c.equals(b.editable)&&!c.contains(b.editable)){(g=k(c))&&"false"==g.getAttribute("contenteditable")&&(c=g);b.element=c;g=a(b,c,!d);var h;n(g)&&g.is(b.triggers)&&
-g.is(J)&&(!a(b,g,!d)||(h=a(b,g,!d))&&n(h)&&h.is(b.triggers))?e(g):(h=f(b,c),n(h)&&(a(b,h,!d)?(c=a(b,h,!d))&&n(c)&&c.is(b.triggers)&&e(h):e(h)))}}}()}}function g(a,b){if(!b||b.type!=CKEDITOR.NODE_ELEMENT||!b.$)return!1;var c=a.line;return c.wrap.equals(b)||c.wrap.contains(b)}function n(a){return a&&a.type==CKEDITOR.NODE_ELEMENT&&a.$}function y(a){if(!n(a))return!1;var b;(b=w(a))||(n(a)?(b={left:1,right:1,center:1},b=!(!b[a.getComputedStyle("float")]&&!b[a.getAttribute("align")])):b=!1);return b}function w(a){return!!{absolute:1,
-fixed:1}[a.getComputedStyle("position")]}function p(a,b){return n(b)?b.is(a.triggers):null}function t(a,b){if(!b)return!1;for(var c=b.getParents(1),d=c.length;d--;)for(var e=a.tabuList.length;e--;)if(c[d].hasAttribute(a.tabuList[e]))return!0;return!1}function r(a,b,c){b=b[c?"getLast":"getFirst"](function(b){return a.isRelevant(b)&&!b.is(da)});if(!b)return!1;q(a,b);return c?b.size.top>a.mouse.y:b.size.bottom<a.mouse.y}function x(a){var b=a.editable,c=a.mouse,d=a.view,e=a.triggerOffset;v(a);var f=c.y>
-(a.inInlineMode?d.editable.top+d.editable.height/2:Math.min(d.editable.height,d.pane.height)/2),b=b[f?"getLast":"getFirst"](function(a){return!(U(a)||V(a))});if(!b)return null;g(a,b)&&(b=a.line.wrap[f?"getPrevious":"getNext"](function(a){return!(U(a)||V(a))}));if(!n(b)||y(b)||!p(a,b))return null;q(a,b);return!f&&0<=b.size.top&&m(c.y,0,b.size.top+e)?(a=a.inInlineMode||0===d.scroll.y?G:Y,new h([null,b,I,H,a])):f&&b.size.bottom<=d.pane.height&&m(c.y,b.size.bottom-e,d.pane.height)?(a=a.inInlineMode||
-m(b.size.bottom,d.pane.height-e,d.pane.height)?P:Y,new h([b,null,M,H,a])):null}function u(b){var c=b.mouse,d=b.view,e=b.triggerOffset,g=f(b);if(!g)return null;q(b,g);var e=Math.min(e,0|g.size.outerHeight/2),k=[],l,t;if(m(c.y,g.size.top-1,g.size.top+e))t=!1;else if(m(c.y,g.size.bottom-e,g.size.bottom+1))t=!0;else return null;if(y(g)||r(b,g,t)||g.getParent().is(X))return null;var u=a(b,g,!t);if(u){if(u&&u.type==CKEDITOR.NODE_TEXT)return null;if(n(u)){if(y(u)||!p(b,u)||u.getParent().is(X))return null;
-k=[u,g][t?"reverse":"concat"]().concat([Q,H])}}else g.equals(b.editable[t?"getLast":"getFirst"](b.isRelevant))?(v(b),t&&m(c.y,g.size.bottom-e,d.pane.height)&&m(g.size.bottom,d.pane.height-e,d.pane.height)?l=P:m(c.y,0,g.size.top+e)&&(l=G)):l=Y,k=[null,g][t?"reverse":"concat"]().concat([t?M:I,H,l,g.equals(b.editable[t?"getLast":"getFirst"](b.isRelevant))?t?P:G:Y]);return 0 in k?new h(k):null}function z(a,b,c,d){for(var e=b.getDocumentPosition(),f={},g={},h={},k={},l=N.length;l--;)f[N[l]]=parseInt(b.getComputedStyle.call(b,
-"border-"+N[l]+"-width"),10)||0,h[N[l]]=parseInt(b.getComputedStyle.call(b,"padding-"+N[l]),10)||0,g[N[l]]=parseInt(b.getComputedStyle.call(b,"margin-"+N[l]),10)||0;c&&!d||B(a,d);k.top=e.y-(c?0:a.view.scroll.y);k.left=e.x-(c?0:a.view.scroll.x);k.outerWidth=b.$.offsetWidth;k.outerHeight=b.$.offsetHeight;k.height=k.outerHeight-(h.top+h.bottom+f.top+f.bottom);k.width=k.outerWidth-(h.left+h.right+f.left+f.right);k.bottom=k.top+k.outerHeight;k.right=k.left+k.outerWidth;a.inInlineMode&&(k.scroll={top:b.$.scrollTop,
-left:b.$.scrollLeft});return A({border:f,padding:h,margin:g,ignoreScroll:c},k,!0)}function q(a,b,c){if(!n(b))return b.size=null;if(!b.size)b.size={};else if(b.size.ignoreScroll==c&&b.size.date>new Date-W)return null;return A(b.size,z(a,b,c),{date:+new Date},!0)}function v(a,b){a.view.editable=z(a,a.editable,b,!0)}function B(a,b){a.view||(a.view={});var c=a.view;if(!(!b&&c&&c.date>new Date-W)){var d=a.win,c=d.getScrollPosition(),d=d.getViewPaneSize();A(a.view,{scroll:{x:c.x,y:c.y,width:a.doc.$.documentElement.scrollWidth-
-d.width,height:a.doc.$.documentElement.scrollHeight-d.height},pane:{width:d.width,height:d.height,bottom:d.height+c.y},date:+new Date},!0)}}function D(a,b,c,d){for(var e=d,f=d,g=0,k=!1,l=!1,m=a.view.pane.height,n=a.mouse;n.y+g<m&&0<n.y-g;){k||(k=b(e,d));l||(l=b(f,d));!k&&0<n.y-g&&(e=c(a,{x:n.x,y:n.y-g}));!l&&n.y+g<m&&(f=c(a,{x:n.x,y:n.y+g}));if(k&&l)break;g+=2}return new h([e,f,null,null])}CKEDITOR.plugins.add("magicline",{init:function(b){var e=b.config,k=e.magicline_triggerOffset||30,m={editor:b,
-enterMode:e.enterMode,triggerOffset:k,holdDistance:0|k*(e.magicline_holdDistance||.5),boxColor:e.magicline_color||"#ff0000",rtl:"rtl"==e.contentsLangDirection,tabuList:["data-cke-hidden-sel"].concat(e.magicline_tabuList||[]),triggers:e.magicline_everywhere?S:{table:1,hr:1,div:1,ul:1,ol:1,dl:1,form:1,blockquote:1}},r,q,p;m.isRelevant=function(a){return n(a)&&!g(m,a)&&!y(a)};b.on("contentDom",function(){var k=b.editable(),n=b.document,y=b.window;A(m,{editable:k,inInlineMode:k.isInline(),doc:n,win:y,
-hotNode:null},!0);m.boundary=m.inInlineMode?m.editable:m.doc.getDocumentElement();k.is(C.$inline)||(m.inInlineMode&&!w(k)&&k.setStyles({position:"relative",top:null,left:null}),l.call(this,m),B(m),k.attachListener(b,"beforeUndoImage",function(){m.line.detach()}),k.attachListener(b,"beforeGetData",function(){m.line.wrap.getParent()&&(m.line.detach(),b.once("getData",function(){m.line.attach()},null,null,1E3))},null,null,0),k.attachListener(m.inInlineMode?n:n.getWindow().getFrame(),"mouseout",function(a){if("wysiwyg"==
-b.mode)if(m.inInlineMode){var c=a.data.$.clientX;a=a.data.$.clientY;B(m);v(m,!0);var d=m.view.editable,e=m.view.scroll;c>d.left-e.x&&c<d.right-e.x&&a>d.top-e.y&&a<d.bottom-e.y||(clearTimeout(p),p=null,m.line.detach())}else clearTimeout(p),p=null,m.line.detach()}),k.attachListener(k,"keyup",function(){m.hiddenMode=0}),k.attachListener(k,"keydown",function(a){if("wysiwyg"==b.mode)switch(a.data.getKeystroke()){case 2228240:case 16:m.hiddenMode=1,m.line.detach()}}),k.attachListener(m.inInlineMode?k:n,
-"mousemove",function(a){q=!0;if("wysiwyg"==b.mode&&!b.readOnly&&!p){var c={x:a.data.$.clientX,y:a.data.$.clientY};p=setTimeout(function(){m.mouse=c;p=m.trigger=null;B(m);q&&!m.hiddenMode&&b.focusManager.hasFocus&&!m.line.mouseNear()&&(m.element=Z(m,!0))&&((m.trigger=x(m)||u(m)||ga(m))&&!t(m,m.trigger.upper||m.trigger.lower)?m.line.attach().place():(m.trigger=null,m.line.detach()),q=!1)},30)}}),k.attachListener(y,"scroll",function(){"wysiwyg"==b.mode&&(m.line.detach(),K.webkit&&(m.hiddenMode=1,clearTimeout(r),
-r=setTimeout(function(){m.mouseDown||(m.hiddenMode=0)},50)))}),k.attachListener(L?n:y,"mousedown",function(){"wysiwyg"==b.mode&&(m.line.detach(),m.hiddenMode=1,m.mouseDown=1)}),k.attachListener(L?n:y,"mouseup",function(){m.hiddenMode=0;m.mouseDown=0}),b.addCommand("accessPreviousSpace",d(m)),b.addCommand("accessNextSpace",d(m,!0)),b.setKeystroke([[e.magicline_keystrokePrevious,"accessPreviousSpace"],[e.magicline_keystrokeNext,"accessNextSpace"]]),b.on("loadSnapshot",function(){var a,c,d,e;for(e in{p:1,
-br:1,div:1})for(a=b.document.getElementsByTag(e),d=a.count();d--;)if((c=a.getItem(d)).data("cke-magicline-hot")){m.hotNode=c;m.lastCmdDirection="true"===c.data("cke-magicline-dir")?!0:!1;return}}),b._.magiclineBackdoor={accessFocusSpace:c,boxTrigger:h,isLine:g,getAscendantTrigger:f,getNonEmptyNeighbour:a,getSize:z,that:m,triggerEdge:u,triggerEditable:x,triggerExpand:ga})},this)}});var A=CKEDITOR.tools.extend,E=CKEDITOR.dom.element,F=E.createFromHtml,K=CKEDITOR.env,L=CKEDITOR.env.ie&&9>CKEDITOR.env.version,
-C=CKEDITOR.dtd,O={},I=128,M=64,Q=32,H=16,G=4,P=2,Y=1,T=" ",X=C.$listItem,da=C.$tableContent,J=A({},C.$nonEditable,C.$empty),S=C.$block,W=100,aa="width:0px;height:0px;padding:0px;margin:0px;display:block;z-index:9999;color:#fff;position:absolute;font-size: 0px;line-height:0px;",ba=aa+"border-color:transparent;display:block;border-style:solid;",ca="\x3cspan\x3e"+T+"\x3c/span\x3e";O[CKEDITOR.ENTER_BR]="br";O[CKEDITOR.ENTER_P]="p";O[CKEDITOR.ENTER_DIV]="div";h.prototype={set:function(a,b,c){this.properties=
+{label:a.lang.list.bulletedlist,command:"bulletedlist",directional:!0,toolbar:"list,20"})),a.on("key",function(b){var e=b.data.domEvent.getKey(),g;if("wysiwyg"==a.mode&&e in{8:1,46:1}){var f=a.getSelection().getRanges()[0],h=f&&f.startPath();if(f&&f.collapsed){var k=8==e,n=a.editable(),q=new CKEDITOR.dom.walker(f.clone());q.evaluator=function(a){return y(a)&&!v(a)};q.guard=function(a,b){return!(b&&a.type==CKEDITOR.NODE_ELEMENT&&a.is("table"))};e=f.clone();if(k){var p;(p=h.contains(d))&&f.checkBoundaryOfElement(p,
+CKEDITOR.START)&&(p=p.getParent())&&p.is("li")&&(p=c(p))?(g=p,p=p.getPrevious(y),e.moveToPosition(p&&v(p)?p:g,CKEDITOR.POSITION_BEFORE_START)):(q.range.setStartAt(n,CKEDITOR.POSITION_AFTER_START),q.range.setEnd(f.startContainer,f.startOffset),(p=q.previous())&&p.type==CKEDITOR.NODE_ELEMENT&&(p.getName()in d||p.is("li"))&&(p.is("li")||(q.range.selectNodeContents(p),q.reset(),q.evaluator=l,p=q.previous()),g=p,e.moveToElementEditEnd(g),e.moveToPosition(e.endPath().block,CKEDITOR.POSITION_BEFORE_END)));
+if(g)m(a,e,f),b.cancel();else{var F=h.contains(d);F&&f.checkBoundaryOfElement(F,CKEDITOR.START)&&(g=F.getFirst(y),f.checkBoundaryOfElement(g,CKEDITOR.START)&&(p=F.getPrevious(y),c(g)?p&&(f.moveToElementEditEnd(p),f.select()):a.execCommand("outdent"),b.cancel()))}}else if(g=h.contains("li")){if(q.range.setEndAt(n,CKEDITOR.POSITION_BEFORE_END),k=(n=g.getLast(y))&&l(n)?n:g,h=0,(p=q.next())&&p.type==CKEDITOR.NODE_ELEMENT&&p.getName()in d&&p.equals(n)?(h=1,p=q.next()):f.checkBoundaryOfElement(k,CKEDITOR.END)&&
+(h=2),h&&p){f=f.clone();f.moveToElementEditStart(p);if(1==h&&(e.optimize(),!e.startContainer.equals(g))){for(g=e.startContainer;g.is(CKEDITOR.dtd.$inline);)F=g,g=g.getParent();F&&e.moveToPosition(F,CKEDITOR.POSITION_AFTER_END)}2==h&&(e.moveToPosition(e.endPath().block,CKEDITOR.POSITION_BEFORE_END),f.endPath().block&&f.moveToPosition(f.endPath().block,CKEDITOR.POSITION_AFTER_START));m(a,e,f);b.cancel()}}else q.range.setEndAt(n,CKEDITOR.POSITION_BEFORE_END),(p=q.next())&&p.type==CKEDITOR.NODE_ELEMENT&&
+p.is(d)&&(p=p.getFirst(y),h.block&&f.checkStartOfBlock()&&f.checkEndOfBlock()?(h.block.remove(),f.moveToElementEditStart(p),f.select()):c(p)?(f.moveToElementEditStart(p),f.select()):(f=f.clone(),f.moveToElementEditStart(p),m(a,e,f)),b.cancel());setTimeout(function(){a.selectionChange(1)})}}}))}})}(),"use strict",function(){function b(a,b,c){return n(b)&&n(c)&&c.equals(b.getNext(function(a){return!(U(a)||V(a)||y(a))}))}function h(a){this.upper=a[0];this.lower=a[1];this.set.apply(this,a.slice(2))}function f(a){var b=
+a.element;if(b&&n(b)&&(b=b.getAscendant(a.triggers,!0))&&a.editable.contains(b)){var c=l(b);if("true"==c.getAttribute("contenteditable"))return b;if(c.is(a.triggers))return c}return null}function e(a,b,c){u(a,b);u(a,c);a=b.size.bottom;c=c.size.top;return a&&c?0|(a+c)/2:a||c}function a(a,b,c){return b=b[c?"getPrevious":"getNext"](function(b){return b&&b.type==CKEDITOR.NODE_TEXT&&!U(b)||n(b)&&!y(b)&&!g(a,b)})}function k(a,b,c){return a>b&&a<c}function l(a,b){if(a.data("cke-editable"))return null;for(b||
+(a=a.getParent());a&&!a.data("cke-editable");){if(a.hasAttribute("contenteditable"))return a;a=a.getParent()}return null}function m(a){var b=a.doc,d=F('\x3cspan contenteditable\x3d"false" data-cke-magic-line\x3d"1" style\x3d"'+aa+"position:absolute;border-top:1px dashed "+a.boxColor+'"\x3e\x3c/span\x3e',b),e=CKEDITOR.getUrl(this.path+"images/"+(K.hidpi?"hidpi/":"")+"icon"+(a.rtl?"-rtl":"")+".png");A(d,{attach:function(){this.wrap.getParent()||this.wrap.appendTo(a.editable,!0);return this},lineChildren:[A(F('\x3cspan title\x3d"'+
+a.editor.lang.magicline.title+'" contenteditable\x3d"false"\x3e\x26#8629;\x3c/span\x3e',b),{base:aa+"height:17px;width:17px;"+(a.rtl?"left":"right")+":17px;background:url("+e+") center no-repeat "+a.boxColor+";cursor:pointer;"+(K.hc?"font-size: 15px;line-height:14px;border:1px solid #fff;text-align:center;":"")+(K.hidpi?"background-size: 9px 10px;":""),looks:["top:-8px; border-radius: 2px;","top:-17px; border-radius: 2px 2px 0px 0px;","top:-1px; border-radius: 0px 0px 2px 2px;"]}),A(F(da,b),{base:ba+
+"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"]}),A(F(da,b),{base:ba+"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(){u(a,this);var b=a.holdDistance,c=this.size;return c&&k(a.mouse.y,
+c.top-b,c.bottom+b)&&k(a.mouse.x,c.left-b,c.right+b)?!0:!1},place:function(){var b=a.view,c=a.editable,d=a.trigger,e=d.upper,g=d.lower,f=e||g,h=f.getParent(),l={};this.trigger=d;e&&u(a,e,!0);g&&u(a,g,!0);u(a,h,!0);a.inInlineMode&&w(a,!0);h.equals(c)?(l.left=b.scroll.x,l.right=-b.scroll.x,l.width=""):(l.left=f.size.left-f.size.margin.left+b.scroll.x-(a.inInlineMode?b.editable.left+b.editable.border.left:0),l.width=f.size.outerWidth+f.size.margin.left+f.size.margin.right+b.scroll.x,l.right="");e&&g?
+l.top=e.size.margin.bottom===g.size.margin.top?0|e.size.bottom+e.size.margin.bottom/2:e.size.margin.bottom<g.size.margin.top?e.size.bottom+e.size.margin.bottom:e.size.bottom+e.size.margin.bottom-g.size.margin.top:e?g||(l.top=e.size.bottom+e.size.margin.bottom):l.top=g.size.top-g.size.margin.top;d.is(G)||k(l.top,b.scroll.y-15,b.scroll.y+5)?(l.top=a.inInlineMode?0:b.scroll.y,this.look(G)):d.is(O)||k(l.top,b.pane.bottom-5,b.pane.bottom+15)?(l.top=a.inInlineMode?b.editable.height+b.editable.padding.top+
+b.editable.padding.bottom:b.pane.bottom-1,this.look(O)):(a.inInlineMode&&(l.top-=b.editable.top+b.editable.border.top),this.look(Y));a.inInlineMode&&(l.top--,l.top+=b.editable.scroll.top,l.left+=b.editable.scroll.left);for(var m in l)l[m]=CKEDITOR.tools.cssLength(l[m]);this.setStyles(l)},look:function(a){if(this.oldLook!=a){for(var b=this.lineChildren.length,c;b--;)(c=this.lineChildren[b]).setAttribute("style",c.base+c.looks[0|a/2]);this.oldLook=a}},wrap:new E("span",a.doc)});for(b=d.lineChildren.length;b--;)d.lineChildren[b].appendTo(d);
+d.look(Y);d.appendTo(d.wrap);d.unselectable();d.lineChildren[0].on("mouseup",function(b){d.detach();c(a,function(b){var c=a.line.trigger;b[c.is(I)?"insertBefore":"insertAfter"](c.is(I)?c.lower:c.upper)},!0);a.editor.focus();K.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 c(a,b,c){var d=new CKEDITOR.dom.range(a.doc),e=a.editor,g;K.ie&&a.enterMode==CKEDITOR.ENTER_BR?g=a.doc.createText(S):
+(g=(g=l(a.element,!0))&&g.data("cke-enter-mode")||a.enterMode,g=new E(N[g],a.doc),g.is("br")||a.doc.createText(S).appendTo(g));c&&e.fire("saveSnapshot");b(g);d.moveToPosition(g,CKEDITOR.POSITION_AFTER_START);e.getSelection().selectRanges([d]);a.hotNode=g;c&&e.fire("saveSnapshot")}function d(b,d){return{canUndo:!0,modes:{wysiwyg:1},exec:function(){function e(a){var g=K.ie&&9>K.version?" ":S,f=b.hotNode&&b.hotNode.getText()==g&&b.element.equals(b.hotNode)&&b.lastCmdDirection===!!d;c(b,function(c){f&&
+b.hotNode&&b.hotNode.remove();c[d?"insertAfter":"insertBefore"](a);c.setAttributes({"data-cke-magicline-hot":1,"data-cke-magicline-dir":!!d});b.lastCmdDirection=!!d});K.ie||b.enterMode==CKEDITOR.ENTER_BR||b.hotNode.scrollIntoView();b.line.detach()}return function(c){c=c.getSelection().getStartElement();var g;c=c.getAscendant(T,1);if(!q(b,c)&&c&&!c.equals(b.editable)&&!c.contains(b.editable)){(g=l(c))&&"false"==g.getAttribute("contenteditable")&&(c=g);b.element=c;g=a(b,c,!d);var h;n(g)&&g.is(b.triggers)&&
+g.is(J)&&(!a(b,g,!d)||(h=a(b,g,!d))&&n(h)&&h.is(b.triggers))?e(g):(h=f(b,c),n(h)&&(a(b,h,!d)?(c=a(b,h,!d))&&n(c)&&c.is(b.triggers)&&e(h):e(h)))}}}()}}function g(a,b){if(!b||b.type!=CKEDITOR.NODE_ELEMENT||!b.$)return!1;var c=a.line;return c.wrap.equals(b)||c.wrap.contains(b)}function n(a){return a&&a.type==CKEDITOR.NODE_ELEMENT&&a.$}function y(a){if(!n(a))return!1;var b;(b=v(a))||(n(a)?(b={left:1,right:1,center:1},b=!(!b[a.getComputedStyle("float")]&&!b[a.getAttribute("align")])):b=!1);return b}function v(a){return!!{absolute:1,
+fixed:1}[a.getComputedStyle("position")]}function p(a,b){return n(b)?b.is(a.triggers):null}function q(a,b){if(!b)return!1;for(var c=b.getParents(1),d=c.length;d--;)for(var e=a.tabuList.length;e--;)if(c[d].hasAttribute(a.tabuList[e]))return!0;return!1}function r(a,b,c){b=b[c?"getLast":"getFirst"](function(b){return a.isRelevant(b)&&!b.is(ca)});if(!b)return!1;u(a,b);return c?b.size.top>a.mouse.y:b.size.bottom<a.mouse.y}function x(a){var b=a.editable,c=a.mouse,d=a.view,e=a.triggerOffset;w(a);var f=c.y>
+(a.inInlineMode?d.editable.top+d.editable.height/2:Math.min(d.editable.height,d.pane.height)/2),b=b[f?"getLast":"getFirst"](function(a){return!(U(a)||V(a))});if(!b)return null;g(a,b)&&(b=a.line.wrap[f?"getPrevious":"getNext"](function(a){return!(U(a)||V(a))}));if(!n(b)||y(b)||!p(a,b))return null;u(a,b);return!f&&0<=b.size.top&&k(c.y,0,b.size.top+e)?(a=a.inInlineMode||0===d.scroll.y?G:Y,new h([null,b,I,H,a])):f&&b.size.bottom<=d.pane.height&&k(c.y,b.size.bottom-e,d.pane.height)?(a=a.inInlineMode||
+k(b.size.bottom,d.pane.height-e,d.pane.height)?O:Y,new h([b,null,L,H,a])):null}function t(b){var c=b.mouse,d=b.view,e=b.triggerOffset,g=f(b);if(!g)return null;u(b,g);var e=Math.min(e,0|g.size.outerHeight/2),l=[],m,q;if(k(c.y,g.size.top-1,g.size.top+e))q=!1;else if(k(c.y,g.size.bottom-e,g.size.bottom+1))q=!0;else return null;if(y(g)||r(b,g,q)||g.getParent().is(X))return null;var t=a(b,g,!q);if(t){if(t&&t.type==CKEDITOR.NODE_TEXT)return null;if(n(t)){if(y(t)||!p(b,t)||t.getParent().is(X))return null;
+l=[t,g][q?"reverse":"concat"]().concat([R,H])}}else g.equals(b.editable[q?"getLast":"getFirst"](b.isRelevant))?(w(b),q&&k(c.y,g.size.bottom-e,d.pane.height)&&k(g.size.bottom,d.pane.height-e,d.pane.height)?m=O:k(c.y,0,g.size.top+e)&&(m=G)):m=Y,l=[null,g][q?"reverse":"concat"]().concat([q?L:I,H,m,g.equals(b.editable[q?"getLast":"getFirst"](b.isRelevant))?q?O:G:Y]);return 0 in l?new h(l):null}function z(a,b,c,d){for(var e=b.getDocumentPosition(),g={},f={},h={},l={},k=P.length;k--;)g[P[k]]=parseInt(b.getComputedStyle.call(b,
+"border-"+P[k]+"-width"),10)||0,h[P[k]]=parseInt(b.getComputedStyle.call(b,"padding-"+P[k]),10)||0,f[P[k]]=parseInt(b.getComputedStyle.call(b,"margin-"+P[k]),10)||0;c&&!d||B(a,d);l.top=e.y-(c?0:a.view.scroll.y);l.left=e.x-(c?0:a.view.scroll.x);l.outerWidth=b.$.offsetWidth;l.outerHeight=b.$.offsetHeight;l.height=l.outerHeight-(h.top+h.bottom+g.top+g.bottom);l.width=l.outerWidth-(h.left+h.right+g.left+g.right);l.bottom=l.top+l.outerHeight;l.right=l.left+l.outerWidth;a.inInlineMode&&(l.scroll={top:b.$.scrollTop,
+left:b.$.scrollLeft});return A({border:g,padding:h,margin:f,ignoreScroll:c},l,!0)}function u(a,b,c){if(!n(b))return b.size=null;if(!b.size)b.size={};else if(b.size.ignoreScroll==c&&b.size.date>new Date-W)return null;return A(b.size,z(a,b,c),{date:+new Date},!0)}function w(a,b){a.view.editable=z(a,a.editable,b,!0)}function B(a,b){a.view||(a.view={});var c=a.view;if(!(!b&&c&&c.date>new Date-W)){var d=a.win,c=d.getScrollPosition(),d=d.getViewPaneSize();A(a.view,{scroll:{x:c.x,y:c.y,width:a.doc.$.documentElement.scrollWidth-
+d.width,height:a.doc.$.documentElement.scrollHeight-d.height},pane:{width:d.width,height:d.height,bottom:d.height+c.y},date:+new Date},!0)}}function C(a,b,c,d){for(var e=d,g=d,f=0,l=!1,k=!1,m=a.view.pane.height,n=a.mouse;n.y+f<m&&0<n.y-f;){l||(l=b(e,d));k||(k=b(g,d));!l&&0<n.y-f&&(e=c(a,{x:n.x,y:n.y-f}));!k&&n.y+f<m&&(g=c(a,{x:n.x,y:n.y+f}));if(l&&k)break;f+=2}return new h([e,g,null,null])}CKEDITOR.plugins.add("magicline",{init:function(b){var e=b.config,l=e.magicline_triggerOffset||30,k={editor:b,
+enterMode:e.enterMode,triggerOffset:l,holdDistance:0|l*(e.magicline_holdDistance||.5),boxColor:e.magicline_color||"#ff0000",rtl:"rtl"==e.contentsLangDirection,tabuList:["data-cke-hidden-sel"].concat(e.magicline_tabuList||[]),triggers:e.magicline_everywhere?T:{table:1,hr:1,div:1,ul:1,ol:1,dl:1,form:1,blockquote:1}},r,u,p;k.isRelevant=function(a){return n(a)&&!g(k,a)&&!y(a)};b.on("contentDom",function(){var l=b.editable(),n=b.document,y=b.window;A(k,{editable:l,inInlineMode:l.isInline(),doc:n,win:y,
+hotNode:null},!0);k.boundary=k.inInlineMode?k.editable:k.doc.getDocumentElement();l.is(D.$inline)||(k.inInlineMode&&!v(l)&&l.setStyles({position:"relative",top:null,left:null}),m.call(this,k),B(k),l.attachListener(b,"beforeUndoImage",function(){k.line.detach()}),l.attachListener(b,"beforeGetData",function(){k.line.wrap.getParent()&&(k.line.detach(),b.once("getData",function(){k.line.attach()},null,null,1E3))},null,null,0),l.attachListener(k.inInlineMode?n:n.getWindow().getFrame(),"mouseout",function(a){if("wysiwyg"==
+b.mode)if(k.inInlineMode){var c=a.data.$.clientX;a=a.data.$.clientY;B(k);w(k,!0);var d=k.view.editable,e=k.view.scroll;c>d.left-e.x&&c<d.right-e.x&&a>d.top-e.y&&a<d.bottom-e.y||(clearTimeout(p),p=null,k.line.detach())}else clearTimeout(p),p=null,k.line.detach()}),l.attachListener(l,"keyup",function(){k.hiddenMode=0}),l.attachListener(l,"keydown",function(a){if("wysiwyg"==b.mode)switch(a.data.getKeystroke()){case 2228240:case 16:k.hiddenMode=1,k.line.detach()}}),l.attachListener(k.inInlineMode?l:n,
+"mousemove",function(a){u=!0;if("wysiwyg"==b.mode&&!b.readOnly&&!p){var c={x:a.data.$.clientX,y:a.data.$.clientY};p=setTimeout(function(){k.mouse=c;p=k.trigger=null;B(k);u&&!k.hiddenMode&&b.focusManager.hasFocus&&!k.line.mouseNear()&&(k.element=Z(k,!0))&&((k.trigger=x(k)||t(k)||ha(k))&&!q(k,k.trigger.upper||k.trigger.lower)?k.line.attach().place():(k.trigger=null,k.line.detach()),u=!1)},30)}}),l.attachListener(y,"scroll",function(){"wysiwyg"==b.mode&&(k.line.detach(),K.webkit&&(k.hiddenMode=1,clearTimeout(r),
+r=setTimeout(function(){k.mouseDown||(k.hiddenMode=0)},50)))}),l.attachListener(M?n:y,"mousedown",function(){"wysiwyg"==b.mode&&(k.line.detach(),k.hiddenMode=1,k.mouseDown=1)}),l.attachListener(M?n:y,"mouseup",function(){k.hiddenMode=0;k.mouseDown=0}),b.addCommand("accessPreviousSpace",d(k)),b.addCommand("accessNextSpace",d(k,!0)),b.setKeystroke([[e.magicline_keystrokePrevious,"accessPreviousSpace"],[e.magicline_keystrokeNext,"accessNextSpace"]]),b.on("loadSnapshot",function(){var a,c,d,e;for(e in{p:1,
+br:1,div:1})for(a=b.document.getElementsByTag(e),d=a.count();d--;)if((c=a.getItem(d)).data("cke-magicline-hot")){k.hotNode=c;k.lastCmdDirection="true"===c.data("cke-magicline-dir")?!0:!1;return}}),b._.magiclineBackdoor={accessFocusSpace:c,boxTrigger:h,isLine:g,getAscendantTrigger:f,getNonEmptyNeighbour:a,getSize:z,that:k,triggerEdge:t,triggerEditable:x,triggerExpand:ha})},this)}});var A=CKEDITOR.tools.extend,E=CKEDITOR.dom.element,F=E.createFromHtml,K=CKEDITOR.env,M=CKEDITOR.env.ie&&9>CKEDITOR.env.version,
+D=CKEDITOR.dtd,N={},I=128,L=64,R=32,H=16,G=4,O=2,Y=1,S=" ",X=D.$listItem,ca=D.$tableContent,J=A({},D.$nonEditable,D.$empty),T=D.$block,W=100,aa="width:0px;height:0px;padding:0px;margin:0px;display:block;z-index:9999;color:#fff;position:absolute;font-size: 0px;line-height:0px;",ba=aa+"border-color:transparent;display:block;border-style:solid;",da="\x3cspan\x3e"+S+"\x3c/span\x3e";N[CKEDITOR.ENTER_BR]="br";N[CKEDITOR.ENTER_P]="p";N[CKEDITOR.ENTER_DIV]="div";h.prototype={set:function(a,b,c){this.properties=
 a+b+(c||Y);return this},is:function(a){return(this.properties&a)==a}};var Z=function(){function a(b,c){var d=b.$.elementFromPoint(c.x,c.y);return d&&d.nodeType?new CKEDITOR.dom.element(d):null}return function(b,c,d){if(!b.mouse)return null;var e=b.doc,f=b.line.wrap;d=d||b.mouse;var h=a(e,d);c&&g(b,h)&&(f.hide(),h=a(e,d),f.show());return!h||h.type!=CKEDITOR.NODE_ELEMENT||!h.$||K.ie&&9>K.version&&!b.boundary.equals(h)&&!b.boundary.contains(h)?null:h}}(),U=CKEDITOR.dom.walker.whitespaces(),V=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_COMMENT),
-ga=function(){function a(d){var f=d.element,g,h,k;if(!n(f)||f.contains(d.editable)||f.isReadOnly())return null;k=D(d,function(a,b){return!b.equals(a)},function(a,b){return Z(a,!0,b)},f);g=k.upper;h=k.lower;if(b(d,g,h))return k.set(Q,8);if(g&&f.contains(g))for(;!g.getParent().equals(f);)g=g.getParent();else g=f.getFirst(function(a){return c(d,a)});if(h&&f.contains(h))for(;!h.getParent().equals(f);)h=h.getParent();else h=f.getLast(function(a){return c(d,a)});if(!g||!h)return null;q(d,g);q(d,h);if(!m(d.mouse.y,
-g.size.top,h.size.bottom))return null;for(var f=Number.MAX_VALUE,l,r,t,u;h&&!h.equals(g)&&(r=g.getNext(d.isRelevant));)l=Math.abs(e(d,g,r)-d.mouse.y),l<f&&(f=l,t=g,u=r),g=r,q(d,g);if(!t||!u||!m(d.mouse.y,t.size.top,u.size.bottom))return null;k.upper=t;k.lower=u;return k.set(Q,8)}function c(a,b){return!(b&&b.type==CKEDITOR.NODE_TEXT||V(b)||y(b)||g(a,b)||b.type==CKEDITOR.NODE_ELEMENT&&b.$&&b.is("br"))}return function(c){var d=a(c),e;if(e=d){e=d.upper;var f=d.lower;e=!e||!f||y(f)||y(e)||f.equals(e)||
-e.equals(f)||f.contains(e)||e.contains(f)?!1:p(c,e)&&p(c,f)&&b(c,e,f)?!0:!1}return e?d:null}}(),N=["top","left","right","bottom"]}(),CKEDITOR.config.magicline_keystrokePrevious=CKEDITOR.CTRL+CKEDITOR.SHIFT+51,CKEDITOR.config.magicline_keystrokeNext=CKEDITOR.CTRL+CKEDITOR.SHIFT+52,function(){function b(a){if(!a||a.type!=CKEDITOR.NODE_ELEMENT||"form"!=a.getName())return[];for(var b=[],e=["style","className"],c=0;c<e.length;c++){var d=a.$.elements.namedItem(e[c]);d&&(d=new CKEDITOR.dom.element(d),b.push([d,
+ha=function(){function a(d){var g=d.element,f,h,l;if(!n(g)||g.contains(d.editable)||g.isReadOnly())return null;l=C(d,function(a,b){return!b.equals(a)},function(a,b){return Z(a,!0,b)},g);f=l.upper;h=l.lower;if(b(d,f,h))return l.set(R,8);if(f&&g.contains(f))for(;!f.getParent().equals(g);)f=f.getParent();else f=g.getFirst(function(a){return c(d,a)});if(h&&g.contains(h))for(;!h.getParent().equals(g);)h=h.getParent();else h=g.getLast(function(a){return c(d,a)});if(!f||!h)return null;u(d,f);u(d,h);if(!k(d.mouse.y,
+f.size.top,h.size.bottom))return null;for(var g=Number.MAX_VALUE,m,q,r,t;h&&!h.equals(f)&&(q=f.getNext(d.isRelevant));)m=Math.abs(e(d,f,q)-d.mouse.y),m<g&&(g=m,r=f,t=q),f=q,u(d,f);if(!r||!t||!k(d.mouse.y,r.size.top,t.size.bottom))return null;l.upper=r;l.lower=t;return l.set(R,8)}function c(a,b){return!(b&&b.type==CKEDITOR.NODE_TEXT||V(b)||y(b)||g(a,b)||b.type==CKEDITOR.NODE_ELEMENT&&b.$&&b.is("br"))}return function(c){var d=a(c),e;if(e=d){e=d.upper;var g=d.lower;e=!e||!g||y(g)||y(e)||g.equals(e)||
+e.equals(g)||g.contains(e)||e.contains(g)?!1:p(c,e)&&p(c,g)&&b(c,e,g)?!0:!1}return e?d:null}}(),P=["top","left","right","bottom"]}(),CKEDITOR.config.magicline_keystrokePrevious=CKEDITOR.CTRL+CKEDITOR.SHIFT+51,CKEDITOR.config.magicline_keystrokeNext=CKEDITOR.CTRL+CKEDITOR.SHIFT+52,function(){function b(a){if(!a||a.type!=CKEDITOR.NODE_ELEMENT||"form"!=a.getName())return[];for(var b=[],e=["style","className"],c=0;c<e.length;c++){var d=a.$.elements.namedItem(e[c]);d&&(d=new CKEDITOR.dom.element(d),b.push([d,
 d.nextSibling]),d.remove())}return b}function h(a,b){if(a&&a.type==CKEDITOR.NODE_ELEMENT&&"form"==a.getName()&&0<b.length)for(var e=b.length-1;0<=e;e--){var c=b[e][0],d=b[e][1];d?c.insertBefore(d):c.appendTo(a)}}function f(a,e){var f=b(a),c={},d=a.$;e||(c["class"]=d.className||"",d.className="");c.inline=d.style.cssText||"";e||(d.style.cssText="position: static; overflow: visible");h(f);return c}function e(a,e){var f=b(a),c=a.$;"class"in e&&(c.className=e["class"]);"inline"in e&&(c.style.cssText=
-e.inline);h(f)}function a(a){if(!a.editable().isInline()){var b=CKEDITOR.instances,e;for(e in b){var c=b[e];"wysiwyg"!=c.mode||c.readOnly||(c=c.document.getBody(),c.setAttribute("contentEditable",!1),c.setAttribute("contentEditable",!0))}a.editable().hasFocus&&(a.toolbox.focus(),a.focus())}}CKEDITOR.plugins.add("maximize",{init:function(b){function h(){var a=d.getViewPaneSize();b.resize(a.width,a.height,null,!0)}if(b.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var l=b.lang,c=CKEDITOR.document,d=c.getWindow(),
-g,n,y,w=CKEDITOR.TRISTATE_OFF;b.addCommand("maximize",{modes:{wysiwyg:!CKEDITOR.env.iOS,source:!CKEDITOR.env.iOS},readOnly:1,editorFocus:!1,exec:function(){var p=b.container.getFirst(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasClass("cke_inner")}),t=b.ui.space("contents");if("wysiwyg"==b.mode){var r=b.getSelection();g=r&&r.getRanges();n=d.getScrollPosition()}else{var x=b.editable().$;g=!CKEDITOR.env.ie&&[x.selectionStart,x.selectionEnd];n=[x.scrollLeft,x.scrollTop]}if(this.state==CKEDITOR.TRISTATE_OFF){d.on("resize",
-h);y=d.getScrollPosition();for(r=b.container;r=r.getParent();)r.setCustomData("maximize_saved_styles",f(r)),r.setStyle("z-index",b.config.baseFloatZIndex-5);t.setCustomData("maximize_saved_styles",f(t,!0));p.setCustomData("maximize_saved_styles",f(p,!0));t={overflow:CKEDITOR.env.webkit?"":"hidden",width:0,height:0};c.getDocumentElement().setStyles(t);!CKEDITOR.env.gecko&&c.getDocumentElement().setStyle("position","fixed");CKEDITOR.env.gecko&&CKEDITOR.env.quirks||c.getBody().setStyles(t);CKEDITOR.env.ie?
-setTimeout(function(){d.$.scrollTo(0,0)},0):d.$.scrollTo(0,0);p.setStyle("position",CKEDITOR.env.gecko&&CKEDITOR.env.quirks?"fixed":"absolute");p.$.offsetLeft;p.setStyles({"z-index":b.config.baseFloatZIndex-5,left:"0px",top:"0px"});p.addClass("cke_maximized");h();t=p.getDocumentPosition();p.setStyles({left:-1*t.x+"px",top:-1*t.y+"px"});CKEDITOR.env.gecko&&a(b)}else if(this.state==CKEDITOR.TRISTATE_ON){d.removeListener("resize",h);for(var r=[t,p],u=0;u<r.length;u++)e(r[u],r[u].getCustomData("maximize_saved_styles")),
-r[u].removeCustomData("maximize_saved_styles");for(r=b.container;r=r.getParent();)e(r,r.getCustomData("maximize_saved_styles")),r.removeCustomData("maximize_saved_styles");CKEDITOR.env.ie?setTimeout(function(){d.$.scrollTo(y.x,y.y)},0):d.$.scrollTo(y.x,y.y);p.removeClass("cke_maximized");CKEDITOR.env.webkit&&(p.setStyle("display","inline"),setTimeout(function(){p.setStyle("display","block")},0));b.fire("resize",{outerHeight:b.container.$.offsetHeight,contentsHeight:t.$.offsetHeight,outerWidth:b.container.$.offsetWidth})}this.toggleState();
-if(r=this.uiItems[0])t=this.state==CKEDITOR.TRISTATE_OFF?l.maximize.maximize:l.maximize.minimize,r=CKEDITOR.document.getById(r._.id),r.getChild(1).setHtml(t),r.setAttribute("title",t),r.setAttribute("href",'javascript:void("'+t+'");');"wysiwyg"==b.mode?g?(CKEDITOR.env.gecko&&a(b),b.getSelection().selectRanges(g),(x=b.getSelection().getStartElement())&&x.scrollIntoView(!0)):d.$.scrollTo(n.x,n.y):(g&&(x.selectionStart=g[0],x.selectionEnd=g[1]),x.scrollLeft=n[0],x.scrollTop=n[1]);g=n=null;w=this.state;
-b.fire("maximize",this.state)},canUndo:!1});b.ui.addButton&&b.ui.addButton("Maximize",{label:l.maximize.maximize,command:"maximize",toolbar:"tools,10"});b.on("mode",function(){var a=b.getCommand("maximize");a.setState(a.state==CKEDITOR.TRISTATE_DISABLED?CKEDITOR.TRISTATE_DISABLED:w)},null,null,100)}}})}(),function(){CKEDITOR.plugins.add("xml",{});CKEDITOR.xml=function(b){var h=null;if("object"==typeof b)h=b;else if(b=(b||"").replace(/&nbsp;/g," "),"ActiveXObject"in window){try{h=new ActiveXObject("MSXML2.DOMDocument")}catch(f){try{h=
-new ActiveXObject("Microsoft.XmlDom")}catch(e){}}h&&(h.async=!1,h.resolveExternals=!1,h.validateOnParse=!1,h.loadXML(b))}else window.DOMParser&&(h=(new DOMParser).parseFromString(b,"text/xml"));this.baseXml=h};CKEDITOR.xml.prototype={selectSingleNode:function(b,h){var f=this.baseXml;if(h||(h=f)){if("selectSingleNode"in h)return h.selectSingleNode(b);if(f.evaluate)return(f=f.evaluate(b,h,null,9,null))&&f.singleNodeValue||null}return null},selectNodes:function(b,h){var f=this.baseXml,e=[];if(h||(h=
-f)){if("selectNodes"in h)return h.selectNodes(b);if(f.evaluate&&(f=f.evaluate(b,h,null,5,null)))for(var a;a=f.iterateNext();)e.push(a)}return e},getInnerXml:function(b,h){var f=this.selectSingleNode(b,h),e=[];if(f)for(f=f.firstChild;f;)f.xml?e.push(f.xml):window.XMLSerializer&&e.push((new XMLSerializer).serializeToString(f)),f=f.nextSibling;return e.length?e.join(""):null}}}(),function(){CKEDITOR.plugins.add("ajax",{requires:"xml"});CKEDITOR.ajax=function(){function b(){if(!CKEDITOR.env.ie||"file:"!=
-location.protocol)try{return new XMLHttpRequest}catch(a){}try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(b){}try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(e){}return null}function h(a,b){if(4!=a.readyState||!(200<=a.status&&300>a.status||304==a.status||0===a.status||1223==a.status))return null;switch(b){case "text":return a.responseText;case "xml":var e=a.responseXML;return new CKEDITOR.xml(e&&e.firstChild?e:a.responseText);case "arraybuffer":return a.response;default:return null}}
-function f(a,e,f){var l=!!e,c=b();if(!c)return null;l&&"text"!==f&&"xml"!==f&&(c.responseType=f);c.open("GET",a,l);l&&(c.onreadystatechange=function(){4==c.readyState&&(e(h(c,f)),c=null)});c.send(null);return l?"":h(c,f)}function e(a,e,f,l,c){var d=b();if(!d)return null;d.open("POST",a,!0);d.onreadystatechange=function(){4==d.readyState&&(l&&l(h(d,c)),d=null)};d.setRequestHeader("Content-type",f||"application/x-www-form-urlencoded; charset\x3dUTF-8");d.send(e)}return{load:function(a,b,e){return f(a,
-b,e||"text")},post:function(a,b,f,h){return e(a,b,f,h,"text")},loadXml:function(a,b){return f(a,b,"xml")},loadText:function(a,b){return f(a,b,"text")},loadBinary:function(a,b){return f(a,b,"arraybuffer")}}}()}(),function(){function b(a,b){return CKEDITOR.tools.array.filter(a,function(a){return a.canHandle(b)}).sort(function(a,b){return a.priority===b.priority?0:a.priority-b.priority})}function h(a,b){var c=a.shift();c&&c.handle(b,function(){h(a,b)})}function f(a){var b=CKEDITOR.tools.array.reduce(a,
-function(a,b){return CKEDITOR.tools.array.isArray(b.filters)?a.concat(b.filters):a},[]);return CKEDITOR.tools.array.filter(b,function(a,d){return CKEDITOR.tools.array.indexOf(b,a)===d})}function e(b,e){var c=0,d,f;if(!CKEDITOR.tools.array.isArray(b)||0===b.length)return!0;d=CKEDITOR.tools.array.filter(b,function(b){return-1===CKEDITOR.tools.array.indexOf(a,b)});if(0<d.length)for(f=0;f<d.length;f++)(function(b){CKEDITOR.scriptLoader.queue(b,function(f){f&&a.push(b);++c===d.length&&e()})})(d[f]);return 0===
-d.length}var a=[],m=CKEDITOR.tools.createClass({$:function(){this.handlers=[]},proto:{register:function(a){"number"!==typeof a.priority&&(a.priority=10);this.handlers.push(a)},addPasteListener:function(a){a.on("paste",function(l){var c=b(this.handlers,l),d;if(0!==c.length){d=f(c);d=e(d,function(){return a.fire("paste",l.data)});if(!d)return l.cancel();h(c,l)}},this,null,3)}}});CKEDITOR.plugins.add("pastetools",{requires:["clipboard","ajax"],beforeInit:function(a){a.pasteTools=new m;a.pasteTools.addPasteListener(a)}});
-CKEDITOR.plugins.pastetools={filters:{},loadFilters:e,createFilter:function(a){var b=CKEDITOR.tools.array.isArray(a.rules)?a.rules:[a.rules],c=a.additionalTransforms;return function(a,e){var f=new CKEDITOR.htmlParser.basicWriter,h=new CKEDITOR.htmlParser.filter,k;c&&(a=c(a,e));CKEDITOR.tools.array.forEach(b,function(b){h.addRules(b(a,e,h))});k=CKEDITOR.htmlParser.fragment.fromHtml(a);h.applyTo(k);k.writeHtml(f);return f.getHtml()}},getClipboardData:function(a,b){var c;return CKEDITOR.plugins.clipboard.isCustomDataTypesSupported||
-"text/html"===b?(c=a.dataTransfer.getData(b,!0))||"text/html"!==b?c:a.dataValue:null},getConfigValue:function(a,b){if(a&&a.config){var c=CKEDITOR.tools,d=a.config,e=c.object.keys(d),f=["pasteTools_"+b,"pasteFromWord_"+b,"pasteFromWord"+c.capitalize(b,!0)],f=c.array.find(f,function(a){return-1!==c.array.indexOf(e,a)});return d[f]}},getContentGeneratorName:function(a){if((a=/<meta\s+name=["']?generator["']?\s+content=["']?(\w+)/gi.exec(a))&&a.length)return a=a[1].toLowerCase(),0===a.indexOf("microsoft")?
-"microsoft":0===a.indexOf("libreoffice")?"libreoffice":"unknown"}};CKEDITOR.pasteFilters=CKEDITOR.plugins.pastetools.filters}(),function(){CKEDITOR.plugins.add("pastefromgdocs",{requires:"pastetools",init:function(b){var h=CKEDITOR.plugins.getPath("pastetools"),f=this.path;b.pasteTools.register({filters:[CKEDITOR.getUrl(h+"filter/common.js"),CKEDITOR.getUrl(f+"filter/default.js")],canHandle:function(b){return/id=(\"|\')?docs\-internal\-guid\-/.test(b.data.dataValue)},handle:function(e,a){var f=e.data,
-h=CKEDITOR.plugins.pastetools.getClipboardData(f,"text/html");f.dontFilter=!0;f.dataValue=CKEDITOR.pasteFilters.gdocs(h,b);!0===b.config.forcePasteAsPlainText&&(f.type="text");a()}})}})}(),function(){CKEDITOR.plugins.add("pastefromlibreoffice",{requires:"pastetools",isSupportedEnvironment:function(){var b=CKEDITOR.env.ie&&11>=CKEDITOR.env.version;return!(CKEDITOR.env.webkit&&!CKEDITOR.env.chrome)&&!b},init:function(b){if(this.isSupportedEnvironment()){var h=CKEDITOR.plugins.getPath("pastetools"),
-f=this.path;b.pasteTools.register({priority:100,filters:[CKEDITOR.getUrl(h+"filter/common.js"),CKEDITOR.getUrl(h+"filter/image.js"),CKEDITOR.getUrl(f+"filter/default.js")],canHandle:function(b){b=b.data;return(b=b.dataTransfer.getData("text/html",!0)||b.dataValue)?"libreoffice"===CKEDITOR.plugins.pastetools.getContentGeneratorName(b):!1},handle:function(e,a){var f=e.data,h=f.dataValue||CKEDITOR.plugins.pastetools.getClipboardData(f,"text/html");f.dontFilter=!0;h=CKEDITOR.pasteFilters.image(h,b,CKEDITOR.plugins.pastetools.getClipboardData(f,
-"text/rtf"));f.dataValue=CKEDITOR.pasteFilters.libreoffice(h,b);!0===b.config.forcePasteAsPlainText&&(f.type="text");a()}})}}})}(),function(){CKEDITOR.plugins.add("pastefromword",{requires:"pastetools",init:function(b){var h=0,f=CKEDITOR.plugins.getPath("pastetools"),e=this.path,a=void 0===b.config.pasteFromWord_inlineImages?!0:b.config.pasteFromWord_inlineImages,f=[CKEDITOR.getUrl(f+"filter/common.js"),CKEDITOR.getUrl(f+"filter/image.js"),CKEDITOR.getUrl(e+"filter/default.js")];b.addCommand("pastefromword",
-{canUndo:!1,async:!0,exec:function(a,b){h=1;a.execCommand("paste",{type:"html",notification:b&&"undefined"!==typeof b.notification?b.notification:!0})}});CKEDITOR.plugins.clipboard.addPasteButton(b,"PasteFromWord",{label:b.lang.pastefromword.toolbar,command:"pastefromword",toolbar:"clipboard,50"});b.pasteTools.register({filters:b.config.pasteFromWordCleanupFile?[b.config.pasteFromWordCleanupFile]:f,canHandle:function(a){a=CKEDITOR.plugins.pastetools.getClipboardData(a.data,"text/html");var b=CKEDITOR.plugins.pastetools.getContentGeneratorName(a),
-e=/(class="?Mso|style=["'][^"]*?\bmso\-|w:WordDocument|<o:\w+>|<\/font>)/,b=b?"microsoft"===b:e.test(a);return a&&(h||b)},handle:function(e,f){var l=e.data,c=CKEDITOR.plugins.pastetools.getClipboardData(l,"text/html"),d=CKEDITOR.plugins.pastetools.getClipboardData(l,"text/rtf"),c={dataValue:c,dataTransfer:{"text/rtf":d}};if(!1!==b.fire("pasteFromWord",c)||h){l.dontFilter=!0;if(h||!b.config.pasteFromWordPromptCleanup||confirm(b.lang.pastefromword.confirmCleanup))c.dataValue=CKEDITOR.cleanWord(c.dataValue,
-b),CKEDITOR.plugins.clipboard.isCustomDataTypesSupported&&a&&CKEDITOR.pasteFilters.image&&(c.dataValue=CKEDITOR.pasteFilters.image(c.dataValue,b,d)),b.fire("afterPasteFromWord",c),l.dataValue=c.dataValue,!0===b.config.forcePasteAsPlainText?l.type="text":CKEDITOR.plugins.clipboard.isCustomCopyCutSupported||"allow-word"!==b.config.forcePasteAsPlainText||(l.type="html");h=0;f()}}})}})}(),function(){var b={canUndo:!1,async:!0,exec:function(b,f){var e=b.lang,a=CKEDITOR.tools.keystrokeToString(e.common.keyboard,
-b.getCommandKeystroke(CKEDITOR.env.ie?b.commands.paste:this)),m=f&&"undefined"!==typeof f.notification?f.notification:!f||!f.from||"keystrokeHandler"===f.from&&CKEDITOR.env.ie,e=m&&"string"===typeof m?m:e.pastetext.pasteNotification.replace(/%1/,'\x3ckbd aria-label\x3d"'+a.aria+'"\x3e'+a.display+"\x3c/kbd\x3e");b.execCommand("paste",{type:"text",notification:m?e:!1})}};CKEDITOR.plugins.add("pastetext",{requires:"clipboard",init:function(h){var f=CKEDITOR.env.safari?CKEDITOR.CTRL+CKEDITOR.ALT+CKEDITOR.SHIFT+
-86:CKEDITOR.CTRL+CKEDITOR.SHIFT+86;h.addCommand("pastetext",b);h.setKeystroke(f,"pastetext");CKEDITOR.plugins.clipboard.addPasteButton(h,"PasteText",{label:h.lang.pastetext.button,command:"pastetext",toolbar:"clipboard,40"});if(h.config.forcePasteAsPlainText)h.on("beforePaste",function(b){"html"!=b.data.type&&(b.data.type="text")});h.on("pasteState",function(b){h.getCommand("pastetext").setState(b.data)})}})}(),CKEDITOR.plugins.add("removeformat",{init:function(b){b.addCommand("removeFormat",CKEDITOR.plugins.removeformat.commands.removeformat);
-b.ui.addButton&&b.ui.addButton("RemoveFormat",{label:b.lang.removeformat.toolbar,command:"removeFormat",toolbar:"cleanup,10"})}}),CKEDITOR.plugins.removeformat={commands:{removeformat:{exec:function(b){for(var h=b._.removeFormatRegex||(b._.removeFormatRegex=new RegExp("^(?:"+b.config.removeFormatTags.replace(/,/g,"|")+")$","i")),f=b._.removeAttributes||(b._.removeAttributes=b.config.removeFormatAttributes.split(",")),e=CKEDITOR.plugins.removeformat.filter,a=b.getSelection().getRanges(),m=a.createIterator(),
-k=function(a){return a.type==CKEDITOR.NODE_ELEMENT},l;l=m.getNextRange();){l.enlarge(CKEDITOR.ENLARGE_INLINE);var c=l.createBookmark(),d=c.startNode,g=c.endNode,n=function(a){for(var c=b.elementPath(a),d=c.elements,f=1,g;(g=d[f])&&!g.equals(c.block)&&!g.equals(c.blockLimit);f++)h.test(g.getName())&&e(b,g)&&a.breakParent(g)};n(d);if(g)for(n(g),d=d.getNextSourceNode(!0,CKEDITOR.NODE_ELEMENT);d&&!d.equals(g);)if(d.isReadOnly()){if(d.getPosition(g)&CKEDITOR.POSITION_CONTAINS)break;d=d.getNext(k)}else n=
-d.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT),"img"==d.getName()&&d.data("cke-realelement")||!e(b,d)||(h.test(d.getName())?d.remove(1):(d.removeAttributes(f),b.fire("removeFormatCleanup",d))),d=n;l.moveToBookmark(c)}b.forceNextSelectionCheck();b.getSelection().selectRanges(a)}}},filter:function(b,h){for(var f=b._.removeFormatFilters||[],e=0;e<f.length;e++)if(!1===f[e](h))return!1;return!0}},CKEDITOR.editor.prototype.addRemoveFormatFilter=function(b){this._.removeFormatFilters||(this._.removeFormatFilters=
-[]);this._.removeFormatFilters.push(b)},CKEDITOR.config.removeFormatTags="b,big,cite,code,del,dfn,em,font,i,ins,kbd,q,s,samp,small,span,strike,strong,sub,sup,tt,u,var",CKEDITOR.config.removeFormatAttributes="class,style,lang,width,height,align,hspace,valign",function(){function b(b,e,a){var m,k;if(a="string"==typeof a?CKEDITOR.document.getById(a):new CKEDITOR.dom.element(a))if(m=b.fire("uiSpace",{space:e,html:""}).html)b.on("uiSpace",function(a){a.data.space==e&&a.cancel()},null,null,1),k=a.append(CKEDITOR.dom.element.createFromHtml(h.output({id:b.id,
-name:b.name,langDir:b.lang.dir,langCode:b.langCode,space:e,spaceId:b.ui.spaceId(e),content:m}))),a.getCustomData("cke_hasshared")?k.hide():a.setCustomData("cke_hasshared",1),k.unselectable(),k.on("mousedown",function(a){a=a.data;a.getTarget().hasAscendant("a",1)||a.preventDefault()}),b.focusManager.add(k,1),b.on("focus",function(){for(var b=0,c,d=a.getChildren();c=d.getItem(b);b++)c.type==CKEDITOR.NODE_ELEMENT&&!c.equals(k)&&c.hasClass("cke_shared")&&c.hide();k.show()}),b.on("destroy",function(){k.remove()})}
-var h=CKEDITOR.addTemplate("sharedcontainer",'\x3cdiv id\x3d"cke_{name}" class\x3d"cke {id} cke_reset_all cke_chrome cke_editor_{name} cke_shared cke_detached cke_{langDir} '+CKEDITOR.env.cssClass+'" dir\x3d"{langDir}" title\x3d"'+(CKEDITOR.env.gecko?" ":"")+'" lang\x3d"{langCode}" role\x3d"presentation"\x3e\x3cdiv class\x3d"cke_inner"\x3e\x3cdiv id\x3d"{spaceId}" class\x3d"cke_{space}" role\x3d"presentation"\x3e{content}\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e');CKEDITOR.plugins.add("sharedspace",{init:function(f){f.on("loaded",
-function(){var e=f.config.sharedSpaces;if(e)for(var a in e)b(f,a,e[a])},null,null,9)}})}(),function(){var b={readOnly:1,preserveState:!0,editorFocus:!1,exec:function(b){this.toggleState();this.refresh(b)},refresh:function(b){if(b.document){var f=this.state!=CKEDITOR.TRISTATE_ON||b.elementMode==CKEDITOR.ELEMENT_MODE_INLINE&&!b.focusManager.hasFocus?"removeClass":"attachClass";b.editable()[f]("cke_show_blocks")}}};CKEDITOR.plugins.add("showblocks",{onLoad:function(){var b="p div pre address blockquote h1 h2 h3 h4 h5 h6".split(" "),
-f,e,a,m,k=CKEDITOR.getUrl(this.path),l=!(CKEDITOR.env.ie&&9>CKEDITOR.env.version),c=l?":not([contenteditable\x3dfalse]):not(.cke_show_blocks_off)":"",d,g;for(f=e=a=m="";d=b.pop();)g=b.length?",":"",f+=".cke_show_blocks "+d+c+g,a+=".cke_show_blocks.cke_contents_ltr "+d+c+g,m+=".cke_show_blocks.cke_contents_rtl "+d+c+g,e+=".cke_show_blocks "+d+c+"{background-image:url("+CKEDITOR.getUrl(k+"images/block_"+d+".png")+")}";CKEDITOR.addCss((f+"{background-repeat:no-repeat;border:1px dotted gray;padding-top:8px}").concat(e,
-a+"{background-position:top left;padding-left:8px}",m+"{background-position:top right;padding-right:8px}"));l||CKEDITOR.addCss(".cke_show_blocks [contenteditable\x3dfalse],.cke_show_blocks .cke_show_blocks_off{border:none;padding-top:0;background-image:none}.cke_show_blocks.cke_contents_rtl [contenteditable\x3dfalse],.cke_show_blocks.cke_contents_rtl .cke_show_blocks_off{padding-right:0}.cke_show_blocks.cke_contents_ltr [contenteditable\x3dfalse],.cke_show_blocks.cke_contents_ltr .cke_show_blocks_off{padding-left:0}")},
+e.inline);h(f)}function a(a){if(!a.editable().isInline()){var b=CKEDITOR.instances,e;for(e in b){var c=b[e];"wysiwyg"!=c.mode||c.readOnly||(c=c.document.getBody(),c.setAttribute("contentEditable",!1),c.setAttribute("contentEditable",!0))}a.editable().hasFocus&&(a.toolbox.focus(),a.focus())}}CKEDITOR.plugins.add("maximize",{init:function(b){function h(){var a=d.getViewPaneSize();b.resize(a.width,a.height,null,!0)}if(b.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var m=b.lang,c=CKEDITOR.document,d=c.getWindow(),
+g,n,y,v=CKEDITOR.TRISTATE_OFF;b.addCommand("maximize",{modes:{wysiwyg:!CKEDITOR.env.iOS,source:!CKEDITOR.env.iOS},readOnly:1,editorFocus:!1,exec:function(){var p=b.container.getFirst(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasClass("cke_inner")}),q=b.ui.space("contents");if("wysiwyg"==b.mode){var r=b.getSelection();g=r&&r.getRanges();n=d.getScrollPosition()}else{var x=b.editable().$;g=!CKEDITOR.env.ie&&[x.selectionStart,x.selectionEnd];n=[x.scrollLeft,x.scrollTop]}if(this.state==CKEDITOR.TRISTATE_OFF){d.on("resize",
+h);y=d.getScrollPosition();for(r=b.container;r=r.getParent();)r.setCustomData("maximize_saved_styles",f(r)),r.setStyle("z-index",b.config.baseFloatZIndex-5);q.setCustomData("maximize_saved_styles",f(q,!0));p.setCustomData("maximize_saved_styles",f(p,!0));q={overflow:CKEDITOR.env.webkit?"":"hidden",width:0,height:0};c.getDocumentElement().setStyles(q);!CKEDITOR.env.gecko&&c.getDocumentElement().setStyle("position","fixed");CKEDITOR.env.gecko&&CKEDITOR.env.quirks||c.getBody().setStyles(q);CKEDITOR.env.ie?
+setTimeout(function(){d.$.scrollTo(0,0)},0):d.$.scrollTo(0,0);p.setStyle("position",CKEDITOR.env.gecko&&CKEDITOR.env.quirks?"fixed":"absolute");p.$.offsetLeft;p.setStyles({"z-index":b.config.baseFloatZIndex-5,left:"0px",top:"0px"});p.addClass("cke_maximized");h();q=p.getDocumentPosition();p.setStyles({left:-1*q.x+"px",top:-1*q.y+"px"});CKEDITOR.env.gecko&&a(b)}else if(this.state==CKEDITOR.TRISTATE_ON){d.removeListener("resize",h);for(var r=[q,p],t=0;t<r.length;t++)e(r[t],r[t].getCustomData("maximize_saved_styles")),
+r[t].removeCustomData("maximize_saved_styles");for(r=b.container;r=r.getParent();)e(r,r.getCustomData("maximize_saved_styles")),r.removeCustomData("maximize_saved_styles");CKEDITOR.env.ie?setTimeout(function(){d.$.scrollTo(y.x,y.y)},0):d.$.scrollTo(y.x,y.y);p.removeClass("cke_maximized");CKEDITOR.env.webkit&&(p.setStyle("display","inline"),setTimeout(function(){p.setStyle("display","block")},0));b.fire("resize",{outerHeight:b.container.$.offsetHeight,contentsHeight:q.$.offsetHeight,outerWidth:b.container.$.offsetWidth})}this.toggleState();
+if(r=this.uiItems[0])q=this.state==CKEDITOR.TRISTATE_OFF?m.maximize.maximize:m.maximize.minimize,r=CKEDITOR.document.getById(r._.id),r.getChild(1).setHtml(q),r.setAttribute("title",q),r.setAttribute("href",'javascript:void("'+q+'");');"wysiwyg"==b.mode?g?(CKEDITOR.env.gecko&&a(b),b.getSelection().selectRanges(g),(x=b.getSelection().getStartElement())&&x.scrollIntoView(!0)):d.$.scrollTo(n.x,n.y):(g&&(x.selectionStart=g[0],x.selectionEnd=g[1]),x.scrollLeft=n[0],x.scrollTop=n[1]);g=n=null;v=this.state;
+b.fire("maximize",this.state)},canUndo:!1});b.ui.addButton&&b.ui.addButton("Maximize",{label:m.maximize.maximize,command:"maximize",toolbar:"tools,10"});b.on("mode",function(){var a=b.getCommand("maximize");a.setState(a.state==CKEDITOR.TRISTATE_DISABLED?CKEDITOR.TRISTATE_DISABLED:v)},null,null,100);if(b.config.maximize_historyIntegration)d.on(b.config.maximize_historyIntegration===CKEDITOR.HISTORY_NATIVE?"popstate":"hashchange",function(){var a=b.getCommand("maximize");a.state===CKEDITOR.TRISTATE_ON&&
+a.exec()})}}});CKEDITOR.config.maximize_historyIntegration=CKEDITOR.HISTORY_NATIVE}(),function(){CKEDITOR.plugins.add("xml",{});CKEDITOR.xml=function(b){var h=null;if("object"==typeof b)h=b;else if(b=(b||"").replace(/&nbsp;/g," "),"ActiveXObject"in window){try{h=new ActiveXObject("MSXML2.DOMDocument")}catch(f){try{h=new ActiveXObject("Microsoft.XmlDom")}catch(e){}}h&&(h.async=!1,h.resolveExternals=!1,h.validateOnParse=!1,h.loadXML(b))}else window.DOMParser&&(h=(new DOMParser).parseFromString(b,"text/xml"));
+this.baseXml=h};CKEDITOR.xml.prototype={selectSingleNode:function(b,h){var f=this.baseXml;if(h||(h=f)){if("selectSingleNode"in h)return h.selectSingleNode(b);if(f.evaluate)return(f=f.evaluate(b,h,null,9,null))&&f.singleNodeValue||null}return null},selectNodes:function(b,h){var f=this.baseXml,e=[];if(h||(h=f)){if("selectNodes"in h)return h.selectNodes(b);if(f.evaluate&&(f=f.evaluate(b,h,null,5,null)))for(var a;a=f.iterateNext();)e.push(a)}return e},getInnerXml:function(b,h){var f=this.selectSingleNode(b,
+h),e=[];if(f)for(f=f.firstChild;f;)f.xml?e.push(f.xml):window.XMLSerializer&&e.push((new XMLSerializer).serializeToString(f)),f=f.nextSibling;return e.length?e.join(""):null}}}(),function(){CKEDITOR.plugins.add("ajax",{requires:"xml"});CKEDITOR.ajax=function(){function b(){if(!CKEDITOR.env.ie||"file:"!=location.protocol)try{return new XMLHttpRequest}catch(a){}try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(b){}try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(e){}return null}function h(a,
+b){if(4!=a.readyState||!(200<=a.status&&300>a.status||304==a.status||0===a.status||1223==a.status))return null;switch(b){case "text":return a.responseText;case "xml":var e=a.responseXML;return new CKEDITOR.xml(e&&e.firstChild?e:a.responseText);case "arraybuffer":return a.response;default:return null}}function f(a,e,f){var m=!!e,c=b();if(!c)return null;m&&"text"!==f&&"xml"!==f&&(c.responseType=f);c.open("GET",a,m);m&&(c.onreadystatechange=function(){4==c.readyState&&(e(h(c,f)),c=null)});c.send(null);
+return m?"":h(c,f)}function e(a,e,f,m,c){var d=b();if(!d)return null;d.open("POST",a,!0);d.onreadystatechange=function(){4==d.readyState&&(m&&m(h(d,c)),d=null)};d.setRequestHeader("Content-type",f||"application/x-www-form-urlencoded; charset\x3dUTF-8");d.send(e)}return{load:function(a,b,e){return f(a,b,e||"text")},post:function(a,b,f,h){return e(a,b,f,h,"text")},loadXml:function(a,b){return f(a,b,"xml")},loadText:function(a,b){return f(a,b,"text")},loadBinary:function(a,b){return f(a,b,"arraybuffer")}}}()}(),
+function(){function b(a,b){return CKEDITOR.tools.array.filter(a,function(a){return a.canHandle(b)}).sort(function(a,b){return a.priority===b.priority?0:a.priority-b.priority})}function h(a,b){var c=a.shift();c&&c.handle(b,function(){h(a,b)})}function f(a){var b=CKEDITOR.tools.array.reduce(a,function(a,b){return CKEDITOR.tools.array.isArray(b.filters)?a.concat(b.filters):a},[]);return CKEDITOR.tools.array.filter(b,function(a,d){return CKEDITOR.tools.array.indexOf(b,a)===d})}function e(b,e){var c=0,
+d,g;if(!CKEDITOR.tools.array.isArray(b)||0===b.length)return!0;d=CKEDITOR.tools.array.filter(b,function(b){return-1===CKEDITOR.tools.array.indexOf(a,b)});if(0<d.length)for(g=0;g<d.length;g++)(function(b){CKEDITOR.scriptLoader.queue(b,function(g){g&&a.push(b);++c===d.length&&e()})})(d[g]);return 0===d.length}var a=[],k=CKEDITOR.tools.createClass({$:function(){this.handlers=[]},proto:{register:function(a){"number"!==typeof a.priority&&(a.priority=10);this.handlers.push(a)},addPasteListener:function(a){a.on("paste",
+function(k){var c=b(this.handlers,k),d;if(0!==c.length){d=f(c);d=e(d,function(){return a.fire("paste",k.data)});if(!d)return k.cancel();h(c,k)}},this,null,3)}}});CKEDITOR.plugins.add("pastetools",{requires:["clipboard","ajax"],beforeInit:function(a){a.pasteTools=new k;a.pasteTools.addPasteListener(a)}});CKEDITOR.plugins.pastetools={filters:{},loadFilters:e,createFilter:function(a){var b=CKEDITOR.tools.array.isArray(a.rules)?a.rules:[a.rules],c=a.additionalTransforms;return function(a,e){var f=new CKEDITOR.htmlParser.basicWriter,
+h=new CKEDITOR.htmlParser.filter,k;c&&(a=c(a,e));CKEDITOR.tools.array.forEach(b,function(b){h.addRules(b(a,e,h))});k=CKEDITOR.htmlParser.fragment.fromHtml(a);h.applyTo(k);k.writeHtml(f);return f.getHtml()}},getClipboardData:function(a,b){var c;return CKEDITOR.plugins.clipboard.isCustomDataTypesSupported||"text/html"===b?(c=a.dataTransfer.getData(b,!0))||"text/html"!==b?c:a.dataValue:null},getConfigValue:function(a,b){if(a&&a.config){var c=CKEDITOR.tools,d=a.config,e=c.object.keys(d),f=["pasteTools_"+
+b,"pasteFromWord_"+b,"pasteFromWord"+c.capitalize(b,!0)],f=c.array.find(f,function(a){return-1!==c.array.indexOf(e,a)});return d[f]}},getContentGeneratorName:function(a){if((a=/<meta\s+name=["']?generator["']?\s+content=["']?(\w+)/gi.exec(a))&&a.length)return a=a[1].toLowerCase(),0===a.indexOf("microsoft")?"microsoft":0===a.indexOf("libreoffice")?"libreoffice":"unknown"}};CKEDITOR.pasteFilters=CKEDITOR.plugins.pastetools.filters}(),function(){CKEDITOR.plugins.add("pastefromgdocs",{requires:"pastetools",
+init:function(b){var h=CKEDITOR.plugins.getPath("pastetools"),f=this.path;b.pasteTools.register({filters:[CKEDITOR.getUrl(h+"filter/common.js"),CKEDITOR.getUrl(f+"filter/default.js")],canHandle:function(b){return/id=(\"|\')?docs\-internal\-guid\-/.test(b.data.dataValue)},handle:function(e,a){var f=e.data,h=CKEDITOR.plugins.pastetools.getClipboardData(f,"text/html");f.dontFilter=!0;f.dataValue=CKEDITOR.pasteFilters.gdocs(h,b);!0===b.config.forcePasteAsPlainText&&(f.type="text");a()}})}})}(),function(){CKEDITOR.plugins.add("pastefromlibreoffice",
+{requires:"pastetools",isSupportedEnvironment:function(){var b=CKEDITOR.env.ie&&11>=CKEDITOR.env.version;return!(CKEDITOR.env.webkit&&!CKEDITOR.env.chrome)&&!b},init:function(b){if(this.isSupportedEnvironment()){var h=CKEDITOR.plugins.getPath("pastetools"),f=this.path;b.pasteTools.register({priority:100,filters:[CKEDITOR.getUrl(h+"filter/common.js"),CKEDITOR.getUrl(h+"filter/image.js"),CKEDITOR.getUrl(f+"filter/default.js")],canHandle:function(b){b=b.data;return(b=b.dataTransfer.getData("text/html",
+!0)||b.dataValue)?"libreoffice"===CKEDITOR.plugins.pastetools.getContentGeneratorName(b):!1},handle:function(e,a){var f=e.data,h=f.dataValue||CKEDITOR.plugins.pastetools.getClipboardData(f,"text/html");f.dontFilter=!0;h=CKEDITOR.pasteFilters.image(h,b,CKEDITOR.plugins.pastetools.getClipboardData(f,"text/rtf"));f.dataValue=CKEDITOR.pasteFilters.libreoffice(h,b);!0===b.config.forcePasteAsPlainText&&(f.type="text");a()}})}}})}(),function(){CKEDITOR.plugins.add("pastefromword",{requires:"pastetools",
+init:function(b){var h=0,f=CKEDITOR.plugins.getPath("pastetools"),e=this.path,a=void 0===b.config.pasteFromWord_inlineImages?!0:b.config.pasteFromWord_inlineImages,f=[CKEDITOR.getUrl(f+"filter/common.js"),CKEDITOR.getUrl(f+"filter/image.js"),CKEDITOR.getUrl(e+"filter/default.js")];b.addCommand("pastefromword",{canUndo:!1,async:!0,exec:function(a,b){h=1;a.execCommand("paste",{type:"html",notification:b&&"undefined"!==typeof b.notification?b.notification:!0})}});CKEDITOR.plugins.clipboard.addPasteButton(b,
+"PasteFromWord",{label:b.lang.pastefromword.toolbar,command:"pastefromword",toolbar:"clipboard,50"});b.pasteTools.register({filters:b.config.pasteFromWordCleanupFile?[b.config.pasteFromWordCleanupFile]:f,canHandle:function(a){a=CKEDITOR.plugins.pastetools.getClipboardData(a.data,"text/html");var b=CKEDITOR.plugins.pastetools.getContentGeneratorName(a),e=/(class="?Mso|style=["'][^"]*?\bmso\-|w:WordDocument|<o:\w+>|<\/font>)/,b=b?"microsoft"===b:e.test(a);return a&&(h||b)},handle:function(e,f){var m=
+e.data,c=CKEDITOR.plugins.pastetools.getClipboardData(m,"text/html"),d=CKEDITOR.plugins.pastetools.getClipboardData(m,"text/rtf"),c={dataValue:c,dataTransfer:{"text/rtf":d}};if(!1!==b.fire("pasteFromWord",c)||h){m.dontFilter=!0;if(h||!b.config.pasteFromWordPromptCleanup||confirm(b.lang.pastefromword.confirmCleanup))c.dataValue=CKEDITOR.cleanWord(c.dataValue,b),CKEDITOR.plugins.clipboard.isCustomDataTypesSupported&&a&&CKEDITOR.pasteFilters.image&&(c.dataValue=CKEDITOR.pasteFilters.image(c.dataValue,
+b,d)),b.fire("afterPasteFromWord",c),m.dataValue=c.dataValue,!0===b.config.forcePasteAsPlainText?m.type="text":CKEDITOR.plugins.clipboard.isCustomCopyCutSupported||"allow-word"!==b.config.forcePasteAsPlainText||(m.type="html");h=0;f()}}})}})}(),function(){var b={canUndo:!1,async:!0,exec:function(b,f){var e=b.lang,a=CKEDITOR.tools.keystrokeToString(e.common.keyboard,b.getCommandKeystroke(CKEDITOR.env.ie?b.commands.paste:this)),k=f&&"undefined"!==typeof f.notification?f.notification:!f||!f.from||"keystrokeHandler"===
+f.from&&CKEDITOR.env.ie,e=k&&"string"===typeof k?k:e.pastetext.pasteNotification.replace(/%1/,'\x3ckbd aria-label\x3d"'+a.aria+'"\x3e'+a.display+"\x3c/kbd\x3e");b.execCommand("paste",{type:"text",notification:k?e:!1})}};CKEDITOR.plugins.add("pastetext",{requires:"clipboard",init:function(h){var f=CKEDITOR.env.safari?CKEDITOR.CTRL+CKEDITOR.ALT+CKEDITOR.SHIFT+86:CKEDITOR.CTRL+CKEDITOR.SHIFT+86;h.addCommand("pastetext",b);h.setKeystroke(f,"pastetext");CKEDITOR.plugins.clipboard.addPasteButton(h,"PasteText",
+{label:h.lang.pastetext.button,command:"pastetext",toolbar:"clipboard,40"});if(h.config.forcePasteAsPlainText)h.on("beforePaste",function(b){"html"!=b.data.type&&(b.data.type="text")});h.on("pasteState",function(b){h.getCommand("pastetext").setState(b.data)})}})}(),CKEDITOR.plugins.add("removeformat",{init:function(b){b.addCommand("removeFormat",CKEDITOR.plugins.removeformat.commands.removeformat);b.ui.addButton&&b.ui.addButton("RemoveFormat",{label:b.lang.removeformat.toolbar,command:"removeFormat",
+toolbar:"cleanup,10"})}}),CKEDITOR.plugins.removeformat={commands:{removeformat:{exec:function(b){for(var h=b._.removeFormatRegex||(b._.removeFormatRegex=new RegExp("^(?:"+b.config.removeFormatTags.replace(/,/g,"|")+")$","i")),f=b._.removeAttributes||(b._.removeAttributes=b.config.removeFormatAttributes.split(",")),e=CKEDITOR.plugins.removeformat.filter,a=b.getSelection().getRanges(),k=a.createIterator(),l=function(a){return a.type==CKEDITOR.NODE_ELEMENT},m;m=k.getNextRange();){m.enlarge(CKEDITOR.ENLARGE_INLINE);
+var c=m.createBookmark(),d=c.startNode,g=c.endNode,n=function(a){for(var c=b.elementPath(a),d=c.elements,g=1,f;(f=d[g])&&!f.equals(c.block)&&!f.equals(c.blockLimit);g++)h.test(f.getName())&&e(b,f)&&a.breakParent(f)};n(d);if(g)for(n(g),d=d.getNextSourceNode(!0,CKEDITOR.NODE_ELEMENT);d&&!d.equals(g);)if(d.isReadOnly()){if(d.getPosition(g)&CKEDITOR.POSITION_CONTAINS)break;d=d.getNext(l)}else n=d.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT),"img"==d.getName()&&d.data("cke-realelement")||!e(b,d)||(h.test(d.getName())?
+d.remove(1):(d.removeAttributes(f),b.fire("removeFormatCleanup",d))),d=n;m.moveToBookmark(c)}b.forceNextSelectionCheck();b.getSelection().selectRanges(a)}}},filter:function(b,h){for(var f=b._.removeFormatFilters||[],e=0;e<f.length;e++)if(!1===f[e](h))return!1;return!0}},CKEDITOR.editor.prototype.addRemoveFormatFilter=function(b){this._.removeFormatFilters||(this._.removeFormatFilters=[]);this._.removeFormatFilters.push(b)},CKEDITOR.config.removeFormatTags="b,big,cite,code,del,dfn,em,font,i,ins,kbd,q,s,samp,small,span,strike,strong,sub,sup,tt,u,var",
+CKEDITOR.config.removeFormatAttributes="class,style,lang,width,height,align,hspace,valign",function(){function b(b,e,a){var k,l;if(a="string"==typeof a?CKEDITOR.document.getById(a):new CKEDITOR.dom.element(a))if(k=b.fire("uiSpace",{space:e,html:""}).html)b.on("uiSpace",function(a){a.data.space==e&&a.cancel()},null,null,1),l=a.append(CKEDITOR.dom.element.createFromHtml(h.output({id:b.id,name:b.name,langDir:b.lang.dir,langCode:b.langCode,space:e,spaceId:b.ui.spaceId(e),content:k}))),a.getCustomData("cke_hasshared")?
+l.hide():a.setCustomData("cke_hasshared",1),l.unselectable(),l.on("mousedown",function(a){a=a.data;a.getTarget().hasAscendant("a",1)||a.preventDefault()}),b.focusManager.add(l,1),b.on("focus",function(){for(var b=0,c,d=a.getChildren();c=d.getItem(b);b++)c.type==CKEDITOR.NODE_ELEMENT&&!c.equals(l)&&c.hasClass("cke_shared")&&c.hide();l.show()}),b.on("destroy",function(){l.remove()})}var h=CKEDITOR.addTemplate("sharedcontainer",'\x3cdiv id\x3d"cke_{name}" class\x3d"cke {id} cke_reset_all cke_chrome cke_editor_{name} cke_shared cke_detached cke_{langDir} '+
+CKEDITOR.env.cssClass+'" dir\x3d"{langDir}" title\x3d"'+(CKEDITOR.env.gecko?" ":"")+'" lang\x3d"{langCode}" role\x3d"presentation"\x3e\x3cdiv class\x3d"cke_inner"\x3e\x3cdiv id\x3d"{spaceId}" class\x3d"cke_{space}" role\x3d"presentation"\x3e{content}\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e');CKEDITOR.plugins.add("sharedspace",{init:function(f){f.on("loaded",function(){var e=f.config.sharedSpaces;if(e)for(var a in e)b(f,a,e[a])},null,null,9)}})}(),function(){var b={readOnly:1,preserveState:!0,editorFocus:!1,
+exec:function(b){this.toggleState();this.refresh(b)},refresh:function(b){if(b.document){var f=this.state!=CKEDITOR.TRISTATE_ON||b.elementMode==CKEDITOR.ELEMENT_MODE_INLINE&&!b.focusManager.hasFocus?"removeClass":"attachClass";b.editable()[f]("cke_show_blocks")}}};CKEDITOR.plugins.add("showblocks",{onLoad:function(){var b="p div pre address blockquote h1 h2 h3 h4 h5 h6".split(" "),f,e,a,k,l=CKEDITOR.getUrl(this.path),m=!(CKEDITOR.env.ie&&9>CKEDITOR.env.version),c=m?":not([contenteditable\x3dfalse]):not(.cke_show_blocks_off)":
+"",d,g;for(f=e=a=k="";d=b.pop();)g=b.length?",":"",f+=".cke_show_blocks "+d+c+g,a+=".cke_show_blocks.cke_contents_ltr "+d+c+g,k+=".cke_show_blocks.cke_contents_rtl "+d+c+g,e+=".cke_show_blocks "+d+c+"{background-image:url("+CKEDITOR.getUrl(l+"images/block_"+d+".png")+")}";CKEDITOR.addCss((f+"{background-repeat:no-repeat;border:1px dotted gray;padding-top:8px}").concat(e,a+"{background-position:top left;padding-left:8px}",k+"{background-position:top right;padding-right:8px}"));m||CKEDITOR.addCss(".cke_show_blocks [contenteditable\x3dfalse],.cke_show_blocks .cke_show_blocks_off{border:none;padding-top:0;background-image:none}.cke_show_blocks.cke_contents_rtl [contenteditable\x3dfalse],.cke_show_blocks.cke_contents_rtl .cke_show_blocks_off{padding-right:0}.cke_show_blocks.cke_contents_ltr [contenteditable\x3dfalse],.cke_show_blocks.cke_contents_ltr .cke_show_blocks_off{padding-left:0}")},
 init:function(h){function f(){e.refresh(h)}if(!h.blockless){var e=h.addCommand("showblocks",b);e.canUndo=!1;h.config.startupOutlineBlocks&&e.setState(CKEDITOR.TRISTATE_ON);h.ui.addButton&&h.ui.addButton("ShowBlocks",{label:h.lang.showblocks.toolbar,command:"showblocks",toolbar:"tools,20"});h.on("mode",function(){e.state!=CKEDITOR.TRISTATE_DISABLED&&e.refresh(h)});h.elementMode==CKEDITOR.ELEMENT_MODE_INLINE&&(h.on("focus",f),h.on("blur",f));h.on("contentDom",function(){e.state!=CKEDITOR.TRISTATE_DISABLED&&
 e.refresh(h)})}}})}(),function(){var b={preserveState:!0,editorFocus:!1,readOnly:1,exec:function(b){this.toggleState();this.refresh(b)},refresh:function(b){if(b.document){var f=this.state==CKEDITOR.TRISTATE_ON?"attachClass":"removeClass";b.editable()[f]("cke_show_borders")}}};CKEDITOR.plugins.add("showborders",{modes:{wysiwyg:1},onLoad:function(){var b;b=(CKEDITOR.env.ie6Compat?[".%1 table.%2,",".%1 table.%2 td, .%1 table.%2 th","{","border : #d3d3d3 1px dotted","}"]:".%1 table.%2,;.%1 table.%2 \x3e tr \x3e td, .%1 table.%2 \x3e tr \x3e th,;.%1 table.%2 \x3e tbody \x3e tr \x3e td, .%1 table.%2 \x3e tbody \x3e tr \x3e th,;.%1 table.%2 \x3e thead \x3e tr \x3e td, .%1 table.%2 \x3e thead \x3e tr \x3e th,;.%1 table.%2 \x3e tfoot \x3e tr \x3e td, .%1 table.%2 \x3e tfoot \x3e tr \x3e th;{;border : #d3d3d3 1px dotted;}".split(";")).join("").replace(/%2/g,
 "cke_show_border").replace(/%1/g,"cke_show_borders ");CKEDITOR.addCss(b)},init:function(h){var f=h.addCommand("showborders",b);f.canUndo=!1;!1!==h.config.startupShowBorders&&f.setState(CKEDITOR.TRISTATE_ON);h.on("mode",function(){f.state!=CKEDITOR.TRISTATE_DISABLED&&f.refresh(h)},null,null,100);h.on("contentDom",function(){f.state!=CKEDITOR.TRISTATE_DISABLED&&f.refresh(h)});h.on("removeFormatCleanup",function(b){b=b.data;h.getCommand("showborders").state==CKEDITOR.TRISTATE_ON&&b.is("table")&&(!b.hasAttribute("border")||
@@ -1121,95 +1133,97 @@ this.remove()}}})}(),CKEDITOR.plugins.sourcearea={commands:{source:{modes:{wysiw
 b.ui.addButton&&b.ui.addButton("Sourcedialog",{label:b.lang.sourcedialog.toolbar,command:"sourcedialog",toolbar:"mode,10"})}}),CKEDITOR.plugins.add("specialchar",{availableLangs:{af:1,ar:1,az:1,bg:1,ca:1,cs:1,cy:1,da:1,de:1,"de-ch":1,el:1,en:1,"en-au":1,"en-ca":1,"en-gb":1,eo:1,es:1,"es-mx":1,et:1,eu:1,fa:1,fi:1,fr:1,"fr-ca":1,gl:1,he:1,hr:1,hu:1,id:1,it:1,ja:1,km:1,ko:1,ku:1,lt:1,lv:1,nb:1,nl:1,no:1,oc:1,pl:1,pt:1,"pt-br":1,ro:1,ru:1,si:1,sk:1,sl:1,sq:1,sr:1,"sr-latn":1,sv:1,th:1,tr:1,tt:1,ug:1,
 uk:1,vi:1,zh:1,"zh-cn":1},requires:"dialog",init:function(b){var h=this;CKEDITOR.dialog.add("specialchar",this.path+"dialogs/specialchar.js");b.addCommand("specialchar",{exec:function(){var f=b.langCode,f=h.availableLangs[f]?f:h.availableLangs[f.replace(/-.*/,"")]?f.replace(/-.*/,""):"en";CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(h.path+"dialogs/lang/"+f+".js"),function(){CKEDITOR.tools.extend(b.lang.specialchar,h.langEntries[f]);b.openDialog("specialchar")})},modes:{wysiwyg:1},canUndo:!1});b.ui.addButton&&
 b.ui.addButton("SpecialChar",{label:b.lang.specialchar.toolbar,command:"specialchar",toolbar:"insert,50"})}}),CKEDITOR.config.specialChars="! \x26quot; # $ % \x26amp; ' ( ) * + - . / 0 1 2 3 4 5 6 7 8 9 : ; \x26lt; \x3d \x26gt; ? @ 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 { | } ~ \x26euro; \x26lsquo; \x26rsquo; \x26ldquo; \x26rdquo; \x26ndash; \x26mdash; \x26iexcl; \x26cent; \x26pound; \x26curren; \x26yen; \x26brvbar; \x26sect; \x26uml; \x26copy; \x26ordf; \x26laquo; \x26not; \x26reg; \x26macr; \x26deg; \x26sup2; \x26sup3; \x26acute; \x26micro; \x26para; \x26middot; \x26cedil; \x26sup1; \x26ordm; \x26raquo; \x26frac14; \x26frac12; \x26frac34; \x26iquest; \x26Agrave; \x26Aacute; \x26Acirc; \x26Atilde; \x26Auml; \x26Aring; \x26AElig; \x26Ccedil; \x26Egrave; \x26Eacute; \x26Ecirc; \x26Euml; \x26Igrave; \x26Iacute; \x26Icirc; \x26Iuml; \x26ETH; \x26Ntilde; \x26Ograve; \x26Oacute; \x26Ocirc; \x26Otilde; \x26Ouml; \x26times; \x26Oslash; \x26Ugrave; \x26Uacute; \x26Ucirc; \x26Uuml; \x26Yacute; \x26THORN; \x26szlig; \x26agrave; \x26aacute; \x26acirc; \x26atilde; \x26auml; \x26aring; \x26aelig; \x26ccedil; \x26egrave; \x26eacute; \x26ecirc; \x26euml; \x26igrave; \x26iacute; \x26icirc; \x26iuml; \x26eth; \x26ntilde; \x26ograve; \x26oacute; \x26ocirc; \x26otilde; \x26ouml; \x26divide; \x26oslash; \x26ugrave; \x26uacute; \x26ucirc; \x26uuml; \x26yacute; \x26thorn; \x26yuml; \x26OElig; \x26oelig; \x26#372; \x26#374 \x26#373 \x26#375; \x26sbquo; \x26#8219; \x26bdquo; \x26hellip; \x26trade; \x26#9658; \x26bull; \x26rarr; \x26rArr; \x26hArr; \x26diams; \x26asymp;".split(" "),
-function(){CKEDITOR.plugins.add("stylescombo",{requires:"richcombo",init:function(b){var h=b.config,f=b.lang.stylescombo,e={},a=[],m=[];b.on("stylesSet",function(f){if(f=f.data.styles){for(var l,c,d,g=0,n=f.length;g<n;g++)(l=f[g],b.blockless&&l.element in CKEDITOR.dtd.$block||"string"==typeof l.type&&!CKEDITOR.style.customHandlers[l.type]||(c=l.name,l=new CKEDITOR.style(l),b.filter.customConfig&&!b.filter.check(l)))||(l._name=c,l._.enterMode=h.enterMode,l._.type=d=l.assignedTo||l.type,l._.weight=
-g+1E3*(d==CKEDITOR.STYLE_OBJECT?1:d==CKEDITOR.STYLE_BLOCK?2:3),e[c]=l,a.push(l),m.push(l));a.sort(function(a,b){return a._.weight-b._.weight})}});b.on("stylesRemove",function(a){a=a.data&&a.data.type;var f=void 0===a,c;for(c in e){var d=e[c];(f||d.type===a)&&b.removeStyle(d)}});b.ui.addRichCombo("Styles",{label:f.label,title:f.panelTitle,toolbar:"styles,10",allowedContent:m,panel:{css:[CKEDITOR.skin.getPath("editor")].concat(h.contentsCss),multiSelect:!0,attributes:{"aria-label":f.panelTitle}},init:function(){var b,
+function(){CKEDITOR.plugins.add("stylescombo",{requires:"richcombo",init:function(b){var h=b.config,f=b.lang.stylescombo,e={},a=[],k=[];b.on("stylesSet",function(f){if(f=f.data.styles){for(var m,c,d,g=0,n=f.length;g<n;g++)(m=f[g],b.blockless&&m.element in CKEDITOR.dtd.$block||"string"==typeof m.type&&!CKEDITOR.style.customHandlers[m.type]||(c=m.name,m=new CKEDITOR.style(m),b.filter.customConfig&&!b.filter.check(m)))||(m._name=c,m._.enterMode=h.enterMode,m._.type=d=m.assignedTo||m.type,m._.weight=
+g+1E3*(d==CKEDITOR.STYLE_OBJECT?1:d==CKEDITOR.STYLE_BLOCK?2:3),e[c]=m,a.push(m),k.push(m));a.sort(function(a,b){return a._.weight-b._.weight})}});b.on("stylesRemove",function(a){a=a.data&&a.data.type;var f=void 0===a,c;for(c in e){var d=e[c];(f||d.type===a)&&b.removeStyle(d)}});b.ui.addRichCombo("Styles",{label:f.label,title:f.panelTitle,toolbar:"styles,10",allowedContent:k,panel:{css:[CKEDITOR.skin.getPath("editor")].concat(h.contentsCss),multiSelect:!0,attributes:{"aria-label":f.panelTitle}},init:function(){var b,
 e,c,d,g,h;g=0;for(h=a.length;g<h;g++)b=a[g],e=b._name,d=b._.type,d!=c&&(this.startGroup(f["panelTitle"+String(d)]),c=d),this.add(e,b.type==CKEDITOR.STYLE_OBJECT?e:b.buildPreview(),e);this.commit()},onClick:function(a){b.focus();b.fire("saveSnapshot");a=e[a];var f=b.elementPath();if(a.group&&a.removeStylesFromSameGroup(b))b.applyStyle(a);else b[a.checkActive(f,b)?"removeStyle":"applyStyle"](a);b.fire("saveSnapshot")},onRender:function(){b.on("selectionChange",function(a){var f=this.getValue();a=a.data.path.elements;
 for(var c=0,d=a.length,g;c<d;c++){g=a[c];for(var h in e)if(e[h].checkElementRemovable(g,!0,b)){h!=f&&this.setValue(h);return}}this.setValue("")},this)},onOpen:function(){var a=b.getSelection(),a=a.getSelectedElement()||a.getStartElement()||b.editable(),a=b.elementPath(a),h=[0,0,0,0];this.showAll();this.unmarkAll();for(var c in e){var d=e[c],g=d._.type;d.checkApplicable(a,b,b.activeFilter)?h[g]++:this.hideItem(c);d.checkActive(a,b)&&this.mark(c)}h[CKEDITOR.STYLE_BLOCK]||this.hideGroup(f["panelTitle"+
 String(CKEDITOR.STYLE_BLOCK)]);h[CKEDITOR.STYLE_INLINE]||this.hideGroup(f["panelTitle"+String(CKEDITOR.STYLE_INLINE)]);h[CKEDITOR.STYLE_OBJECT]||this.hideGroup(f["panelTitle"+String(CKEDITOR.STYLE_OBJECT)])},refresh:function(){var a=b.elementPath();if(a){for(var f in e)if(e[f].checkApplicable(a,b,b.activeFilter))return;this.setState(CKEDITOR.TRISTATE_DISABLED)}},reset:function(){e={};a=[]}})}})}(),function(){function b(a){return{editorFocus:!1,canUndo:!1,modes:{wysiwyg:1},exec:function(b){if(b.editable().hasFocus){var e=
 b.getSelection(),f;if(f=(new CKEDITOR.dom.elementPath(e.getCommonAncestor(),e.root)).contains({td:1,th:1},1)){var e=b.createRange(),c=CKEDITOR.tools.tryThese(function(){var b=f.getParent().$.cells[f.$.cellIndex+(a?-1:1)];b.parentNode.parentNode;return b},function(){var b=f.getParent(),b=b.getAscendant("table").$.rows[b.$.rowIndex+(a?-1:1)];return b.cells[a?b.cells.length-1:0]});if(c||a)if(c)c=new CKEDITOR.dom.element(c),e.moveToElementEditStart(c),e.checkStartOfBlock()&&e.checkEndOfBlock()||e.selectNodeContents(c);
-else return!0;else{for(var d=f.getAscendant("table").$,c=f.getParent().$.cells,d=new CKEDITOR.dom.element(d.insertRow(-1),b.document),g=0,h=c.length;g<h;g++)d.append((new CKEDITOR.dom.element(c[g],b.document)).clone(!1,!1)).appendBogus();e.moveToElementEditStart(d)}e.select(!0);return!0}}return!1}}}var h={editorFocus:!1,modes:{wysiwyg:1,source:1}},f={exec:function(a){a.container.focusNext(!0,a.tabIndex)}},e={exec:function(a){a.container.focusPrevious(!0,a.tabIndex)}};CKEDITOR.plugins.add("tab",{init:function(a){for(var m=
-!1!==a.config.enableTabKeyTools,k=a.config.tabSpaces||0,l="";k--;)l+=" ";if(l)a.on("key",function(b){9==b.data.keyCode&&(a.insertText(l),b.cancel())});if(m)a.on("key",function(b){(9==b.data.keyCode&&a.execCommand("selectNextCell")||b.data.keyCode==CKEDITOR.SHIFT+9&&a.execCommand("selectPreviousCell"))&&b.cancel()});a.addCommand("blur",CKEDITOR.tools.extend(f,h));a.addCommand("blurBack",CKEDITOR.tools.extend(e,h));a.addCommand("selectNextCell",b());a.addCommand("selectPreviousCell",b(!0))}})}(),CKEDITOR.dom.element.prototype.focusNext=
-function(b,h){var f=void 0===h?this.getTabIndex():h,e,a,m,k,l,c;if(0>=f)for(l=this.getNextSourceNode(b,CKEDITOR.NODE_ELEMENT);l;){if(l.isVisible()&&0===l.getTabIndex()){m=l;break}l=l.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT)}else for(l=this.getDocument().getBody().getFirst();l=l.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT);){if(!e)if(!a&&l.equals(this)){if(a=!0,b){if(!(l=l.getNextSourceNode(!0,CKEDITOR.NODE_ELEMENT)))break;e=1}}else a&&!this.contains(l)&&(e=1);if(l.isVisible()&&!(0>(c=l.getTabIndex()))){if(e&&
-c==f){m=l;break}c>f&&(!m||!k||c<k)?(m=l,k=c):m||0!==c||(m=l,k=c)}}m&&m.focus()},CKEDITOR.dom.element.prototype.focusPrevious=function(b,h){for(var f=void 0===h?this.getTabIndex():h,e,a,m,k=0,l,c=this.getDocument().getBody().getLast();c=c.getPreviousSourceNode(!1,CKEDITOR.NODE_ELEMENT);){if(!e)if(!a&&c.equals(this)){if(a=!0,b){if(!(c=c.getPreviousSourceNode(!0,CKEDITOR.NODE_ELEMENT)))break;e=1}}else a&&!this.contains(c)&&(e=1);if(c.isVisible()&&!(0>(l=c.getTabIndex())))if(0>=f){if(e&&0===l){m=c;break}l>
-k&&(m=c,k=l)}else{if(e&&l==f){m=c;break}l<f&&(!m||l>k)&&(m=c,k=l)}}m&&m.focus()},CKEDITOR.plugins.add("table",{requires:"dialog",init:function(b){function h(b){return CKEDITOR.tools.extend(b||{},{contextSensitive:1,refresh:function(a,b){this.setState(b.contains("table",1)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)}})}if(!b.blockless){var f=b.lang.table;b.addCommand("table",new CKEDITOR.dialogCommand("table",{context:"table",allowedContent:"table{width,height,border-collapse}[align,border,cellpadding,cellspacing,summary];caption tbody thead tfoot;th td tr[scope];td{border*,background-color,vertical-align,width,height}[colspan,rowspan];"+
+else return!0;else{for(var d=f.getAscendant("table").$,c=f.getParent().$.cells,d=new CKEDITOR.dom.element(d.insertRow(-1),b.document),g=0,h=c.length;g<h;g++)d.append((new CKEDITOR.dom.element(c[g],b.document)).clone(!1,!1)).appendBogus();e.moveToElementEditStart(d)}e.select(!0);return!0}}return!1}}}var h={editorFocus:!1,modes:{wysiwyg:1,source:1}},f={exec:function(a){a.container.focusNext(!0,a.tabIndex)}},e={exec:function(a){a.container.focusPrevious(!0,a.tabIndex)}};CKEDITOR.plugins.add("tab",{init:function(a){for(var k=
+!1!==a.config.enableTabKeyTools,l=a.config.tabSpaces||0,m="";l--;)m+=" ";if(m)a.on("key",function(b){9==b.data.keyCode&&(a.insertText(m),b.cancel())});if(k)a.on("key",function(b){(9==b.data.keyCode&&a.execCommand("selectNextCell")||b.data.keyCode==CKEDITOR.SHIFT+9&&a.execCommand("selectPreviousCell"))&&b.cancel()});a.addCommand("blur",CKEDITOR.tools.extend(f,h));a.addCommand("blurBack",CKEDITOR.tools.extend(e,h));a.addCommand("selectNextCell",b());a.addCommand("selectPreviousCell",b(!0))}})}(),CKEDITOR.dom.element.prototype.focusNext=
+function(b,h){var f=void 0===h?this.getTabIndex():h,e,a,k,l,m,c;if(0>=f)for(m=this.getNextSourceNode(b,CKEDITOR.NODE_ELEMENT);m;){if(m.isVisible()&&0===m.getTabIndex()){k=m;break}m=m.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT)}else for(m=this.getDocument().getBody().getFirst();m=m.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT);){if(!e)if(!a&&m.equals(this)){if(a=!0,b){if(!(m=m.getNextSourceNode(!0,CKEDITOR.NODE_ELEMENT)))break;e=1}}else a&&!this.contains(m)&&(e=1);if(m.isVisible()&&!(0>(c=m.getTabIndex()))){if(e&&
+c==f){k=m;break}c>f&&(!k||!l||c<l)?(k=m,l=c):k||0!==c||(k=m,l=c)}}k&&k.focus()},CKEDITOR.dom.element.prototype.focusPrevious=function(b,h){for(var f=void 0===h?this.getTabIndex():h,e,a,k,l=0,m,c=this.getDocument().getBody().getLast();c=c.getPreviousSourceNode(!1,CKEDITOR.NODE_ELEMENT);){if(!e)if(!a&&c.equals(this)){if(a=!0,b){if(!(c=c.getPreviousSourceNode(!0,CKEDITOR.NODE_ELEMENT)))break;e=1}}else a&&!this.contains(c)&&(e=1);if(c.isVisible()&&!(0>(m=c.getTabIndex())))if(0>=f){if(e&&0===m){k=c;break}m>
+l&&(k=c,l=m)}else{if(e&&m==f){k=c;break}m<f&&(!k||m>l)&&(k=c,l=m)}}k&&k.focus()},CKEDITOR.plugins.add("table",{requires:"dialog",init:function(b){function h(b){return CKEDITOR.tools.extend(b||{},{contextSensitive:1,refresh:function(a,b){this.setState(b.contains("table",1)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)}})}if(!b.blockless){var f=b.lang.table;b.addCommand("table",new CKEDITOR.dialogCommand("table",{context:"table",allowedContent:"table{width,height,border-collapse}[align,border,cellpadding,cellspacing,summary];caption tbody thead tfoot;th td tr[scope];td{border*,background-color,vertical-align,width,height}[colspan,rowspan];"+
 (b.plugins.dialogadvtab?"table"+b.plugins.dialogadvtab.allowedContent():""),requiredContent:"table",contentTransformations:[["table{width}: sizeToStyle","table[width]: sizeToAttribute"],["td: splitBorderShorthand"],[{element:"table",right:function(b){if(b.styles){var a;if(b.styles.border)a=CKEDITOR.tools.style.parse.border(b.styles.border);else if(CKEDITOR.env.ie&&8===CKEDITOR.env.version){var f=b.styles;f["border-left"]&&f["border-left"]===f["border-right"]&&f["border-right"]===f["border-top"]&&
 f["border-top"]===f["border-bottom"]&&(a=CKEDITOR.tools.style.parse.border(f["border-top"]))}a&&a.style&&"solid"===a.style&&a.width&&0!==parseFloat(a.width)&&(b.attributes.border=1);"collapse"==b.styles["border-collapse"]&&(b.attributes.cellspacing=0)}}}]]}));b.addCommand("tableProperties",new CKEDITOR.dialogCommand("tableProperties",h()));b.addCommand("tableDelete",h({exec:function(b){var a=b.elementPath().contains("table",1);if(a){var f=a.getParent(),h=b.editable();1!=f.getChildCount()||f.is("td",
 "th")||f.equals(h)||(a=f);b=b.createRange();b.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START);a.remove();b.select()}}}));b.ui.addButton&&b.ui.addButton("Table",{label:f.toolbar,command:"table",toolbar:"insert,30"});CKEDITOR.dialog.add("table",this.path+"dialogs/table.js");CKEDITOR.dialog.add("tableProperties",this.path+"dialogs/table.js");b.addMenuItems&&b.addMenuItems({table:{label:f.menu,command:"tableProperties",group:"table",order:5},tabledelete:{label:f.deleteTable,command:"tableDelete",group:"table",
-order:1}});b.on("doubleclick",function(b){b.data.element.is("table")&&(b.data.dialog="tableProperties")});b.contextMenu&&b.contextMenu.addListener(function(){return{tabledelete:CKEDITOR.TRISTATE_OFF,table:CKEDITOR.TRISTATE_OFF}})}}}),function(){function b(a,b){function c(a){return b?b.contains(a)&&a.getAscendant("table",!0).equals(b):!0}function d(a){var b=/^(?:td|th)$/;0<e.length||a.type!=CKEDITOR.NODE_ELEMENT||!b.test(a.getName())||a.getCustomData("selected_cell")||(CKEDITOR.dom.element.setMarker(f,
-a,"selected_cell",!0),e.push(a))}var e=[],f={};if(!a)return e;for(var g=a.getRanges(),h=0;h<g.length;h++){var k=g[h];if(k.collapsed)(k=k.getCommonAncestor().getAscendant({td:1,th:1},!0))&&c(k)&&e.push(k);else{var k=new CKEDITOR.dom.walker(k),l;for(k.guard=d;l=k.next();)l.type==CKEDITOR.NODE_ELEMENT&&l.is(CKEDITOR.dtd.table)||(l=l.getAscendant({td:1,th:1},!0))&&!l.getCustomData("selected_cell")&&c(l)&&(CKEDITOR.dom.element.setMarker(f,l,"selected_cell",!0),e.push(l))}}CKEDITOR.dom.element.clearAllMarkers(f);
-return e}function h(a,c){for(var d=p(a)?a:b(a),e=d[0],f=e.getAscendant("table"),e=e.getDocument(),g=d[0].getParent(),h=g.$.rowIndex,d=d[d.length-1],k=d.getParent().$.rowIndex+d.$.rowSpan-1,d=new CKEDITOR.dom.element(f.$.rows[k]),h=c?h:k,g=c?g:d,d=CKEDITOR.tools.buildTableMap(f),f=d[h],h=c?d[h-1]:d[h+1],d=d[0].length,e=e.createElement("tr"),k=0;f[k]&&k<d;k++){var l;1<f[k].rowSpan&&h&&f[k]==h[k]?(l=f[k],l.rowSpan+=1):(l=(new CKEDITOR.dom.element(f[k])).clone(),l.removeAttribute("rowSpan"),l.appendBogus(),
-e.append(l),l=l.$);k+=l.colSpan-1}c?e.insertBefore(g):e.insertAfter(g);return e}function f(a){if(a instanceof CKEDITOR.dom.selection){var c=a.getRanges(),d=b(a),e=d[0].getAscendant("table"),g=CKEDITOR.tools.buildTableMap(e),h=d[0].getParent().$.rowIndex,d=d[d.length-1],k=d.getParent().$.rowIndex+d.$.rowSpan-1,d=[];a.reset();for(a=h;a<=k;a++){for(var l=g[a],m=new CKEDITOR.dom.element(e.$.rows[a]),n=0;n<l.length;n++){var p=new CKEDITOR.dom.element(l[n]),w=p.getParent().$.rowIndex;1==p.$.rowSpan?p.remove():
-(--p.$.rowSpan,w==a&&(w=g[a+1],w[n-1]?p.insertAfter(new CKEDITOR.dom.element(w[n-1])):(new CKEDITOR.dom.element(e.$.rows[a+1])).append(p,1)));n+=p.$.colSpan-1}d.push(m)}g=e.$.rows;c[0].moveToPosition(e,CKEDITOR.POSITION_BEFORE_START);h=new CKEDITOR.dom.element(g[k+1]||(0<h?g[h-1]:null)||e.$.parentNode);for(a=d.length;0<=a;a--)f(d[a]);return e.$.parentNode?h:(c[0].select(),null)}a instanceof CKEDITOR.dom.element&&(e=a.getAscendant("table"),1==e.$.rows.length?e.remove():a.remove());return null}function e(a){for(var b=
-a.getParent().$.cells,c=0,d=0;d<b.length;d++){var e=b[d],c=c+e.colSpan;if(e==a.$)break}return c-1}function a(a,b){for(var c=b?Infinity:0,d=0;d<a.length;d++){var f=e(a[d]);if(b?f<c:f>c)c=f}return c}function m(c,d){for(var e=p(c)?c:b(c),f=e[0].getAscendant("table"),g=a(e,1),e=a(e),h=d?g:e,k=CKEDITOR.tools.buildTableMap(f),f=[],g=[],e=[],l=k.length,m=0;m<l;m++){var n=d?k[m][h-1]:k[m][h+1];f.push(k[m][h]);g.push(n)}for(m=0;m<l;m++)f[m]&&(1<f[m].colSpan&&g[m]==f[m]?(k=f[m],k.colSpan+=1):(h=new CKEDITOR.dom.element(f[m]),
-k=h.clone(),k.removeAttribute("colSpan"),k.appendBogus(),k[d?"insertBefore":"insertAfter"].call(k,h),e.push(k),k=k.$),m+=k.rowSpan-1);return e}function k(a){function c(a){var b=a.getRanges(),d,e;if(1!==b.length)return a;b=b[0];if(b.collapsed||0!==b.endOffset)return a;d=b.endContainer;e=d.getName().toLowerCase();if("td"!==e&&"th"!==e)return a;for((e=d.getPrevious())||(e=d.getParent().getPrevious().getLast());e.type!==CKEDITOR.NODE_TEXT&&"br"!==e.getName().toLowerCase();)if(e=e.getLast(),!e)return a;
-b.setEndAt(e,CKEDITOR.POSITION_BEFORE_END);return b.select()}CKEDITOR.env.webkit&&!a.isFake&&(a=c(a));var d=a.getRanges(),e=b(a),f=e[0],g=e[e.length-1],e=f.getAscendant("table"),h=CKEDITOR.tools.buildTableMap(e),k,l,m=[];a.reset();var n=0;for(a=h.length;n<a;n++)for(var p=0,w=h[n].length;p<w;p++)void 0===k&&h[n][p]==f.$&&(k=p),h[n][p]==g.$&&(l=p);for(n=k;n<=l;n++)for(p=0;p<h.length;p++)g=h[p],f=new CKEDITOR.dom.element(e.$.rows[p]),g=new CKEDITOR.dom.element(g[n]),g.$&&(1==g.$.colSpan?g.remove():--g.$.colSpan,
-p+=g.$.rowSpan-1,f.$.cells.length||m.push(f));k=h[0].length-1>l?new CKEDITOR.dom.element(h[0][l+1]):k&&-1!==h[0][k-1].cellIndex?new CKEDITOR.dom.element(h[0][k-1]):new CKEDITOR.dom.element(e.$.parentNode);m.length==a&&(d[0].moveToPosition(e,CKEDITOR.POSITION_AFTER_END),d[0].select(),e.remove());return k}function l(a,b){var c=a.getStartElement().getAscendant({td:1,th:1},!0);if(c){var d=c.clone();d.appendBogus();b?d.insertBefore(c):d.insertAfter(c)}}function c(a){if(a instanceof CKEDITOR.dom.selection){var e=
-a.getRanges(),f=b(a),g=f[0]&&f[0].getAscendant("table"),h;a:{var k=0;h=f.length-1;for(var l={},m,n;m=f[k++];)CKEDITOR.dom.element.setMarker(l,m,"delete_cell",!0);for(k=0;m=f[k++];)if((n=m.getPrevious())&&!n.getCustomData("delete_cell")||(n=m.getNext())&&!n.getCustomData("delete_cell")){CKEDITOR.dom.element.clearAllMarkers(l);h=n;break a}CKEDITOR.dom.element.clearAllMarkers(l);k=f[0].getParent();(k=k.getPrevious())?h=k.getLast():(k=f[h].getParent(),h=(k=k.getNext())?k.getChild(0):null)}a.reset();for(a=
-f.length-1;0<=a;a--)c(f[a]);h?d(h,!0):g&&(e[0].moveToPosition(g,CKEDITOR.POSITION_BEFORE_START),e[0].select(),g.remove())}else a instanceof CKEDITOR.dom.element&&(e=a.getParent(),1==e.getChildCount()?e.remove():a.remove())}function d(a,b){var c=a.getDocument(),d=CKEDITOR.document;CKEDITOR.env.ie&&10==CKEDITOR.env.version&&(d.focus(),c.focus());c=new CKEDITOR.dom.range(c);c["moveToElementEdit"+(b?"End":"Start")](a)||(c.selectNodeContents(a),c.collapse(b?!1:!0));c.select(!0)}function g(a,b,c){a=a[b];
-if("undefined"==typeof c)return a;for(b=0;a&&b<a.length;b++){if(c.is&&a[b]==c.$)return b;if(b==c)return new CKEDITOR.dom.element(a[b])}return c.is?-1:null}function n(a,c,d){var e=b(a),f;if((c?1!=e.length:2>e.length)||(f=a.getCommonAncestor())&&f.type==CKEDITOR.NODE_ELEMENT&&f.is("table"))return!1;a=e[0];f=a.getAscendant("table");var h=CKEDITOR.tools.buildTableMap(f),k=h.length,l=h[0].length,m=a.getParent().$.rowIndex,n=g(h,m,a),p;if(c){var w;try{var y=parseInt(a.getAttribute("rowspan"),10)||1;p=parseInt(a.getAttribute("colspan"),
-10)||1;w=h["up"==c?m-y:"down"==c?m+y:m]["left"==c?n-p:"right"==c?n+p:n]}catch(L){return!1}if(!w||a.$==w)return!1;e["up"==c||"left"==c?"unshift":"push"](new CKEDITOR.dom.element(w))}c=a.getDocument();var C=m,y=w=0,O=!d&&new CKEDITOR.dom.documentFragment(c),I=0;for(c=0;c<e.length;c++){p=e[c];var M=p.getParent(),Q=p.getFirst(),H=p.$.colSpan,G=p.$.rowSpan,M=M.$.rowIndex,P=g(h,M,p),I=I+H*G,y=Math.max(y,P-n+H);w=Math.max(w,M-m+G);d||(H=p,(G=H.getBogus())&&G.remove(),H.trim(),p.getChildren().count()&&(M==
-C||!Q||Q.isBlockBoundary&&Q.isBlockBoundary({br:1})||(C=O.getLast(CKEDITOR.dom.walker.whitespaces(!0)),!C||C.is&&C.is("br")||O.append("br")),p.moveChildren(O)),c?p.remove():p.setHtml(""));C=M}if(d)return w*y==I;O.moveChildren(a);a.appendBogus();y>=l?a.removeAttribute("rowSpan"):a.$.rowSpan=w;w>=k?a.removeAttribute("colSpan"):a.$.colSpan=y;d=new CKEDITOR.dom.nodeList(f.$.rows);e=d.count();for(c=e-1;0<=c;c--)f=d.getItem(c),f.$.cells.length||(f.remove(),e++);return a}function y(a,c){var d=b(a);if(1<
+order:1}});b.on("doubleclick",function(b){b.data.element.is("table")&&(b.data.dialog="tableProperties")});b.contextMenu&&b.contextMenu.addListener(function(){return{tabledelete:CKEDITOR.TRISTATE_OFF,table:CKEDITOR.TRISTATE_OFF}})}}}),function(){function b(a,b){function c(a){return b?b.contains(a)&&a.getAscendant("table",!0).equals(b):!0}function d(a){var b=/^(?:td|th)$/;0<e.length||a.type!=CKEDITOR.NODE_ELEMENT||!b.test(a.getName())||a.getCustomData("selected_cell")||(CKEDITOR.dom.element.setMarker(g,
+a,"selected_cell",!0),e.push(a))}var e=[],g={};if(!a)return e;for(var f=a.getRanges(),h=0;h<f.length;h++){var k=f[h];if(k.collapsed)(k=k.getCommonAncestor().getAscendant({td:1,th:1},!0))&&c(k)&&e.push(k);else{var k=new CKEDITOR.dom.walker(k),l;for(k.guard=d;l=k.next();)l.type==CKEDITOR.NODE_ELEMENT&&l.is(CKEDITOR.dtd.table)||(l=l.getAscendant({td:1,th:1},!0))&&!l.getCustomData("selected_cell")&&c(l)&&(CKEDITOR.dom.element.setMarker(g,l,"selected_cell",!0),e.push(l))}}CKEDITOR.dom.element.clearAllMarkers(g);
+return e}function h(a,c){for(var d=p(a)?a:b(a),e=d[0],g=e.getAscendant("table"),e=e.getDocument(),f=d[0].getParent(),h=f.$.rowIndex,d=d[d.length-1],k=d.getParent().$.rowIndex+d.$.rowSpan-1,d=new CKEDITOR.dom.element(g.$.rows[k]),h=c?h:k,f=c?f:d,d=CKEDITOR.tools.buildTableMap(g),g=d[h],h=c?d[h-1]:d[h+1],d=d[0].length,e=e.createElement("tr"),k=0;g[k]&&k<d;k++){var l;1<g[k].rowSpan&&h&&g[k]==h[k]?(l=g[k],l.rowSpan+=1):(l=(new CKEDITOR.dom.element(g[k])).clone(),l.removeAttribute("rowSpan"),l.appendBogus(),
+e.append(l),l=l.$);k+=l.colSpan-1}c?e.insertBefore(f):e.insertAfter(f);return e}function f(a){if(a instanceof CKEDITOR.dom.selection){var c=a.getRanges(),d=b(a),e=d[0].getAscendant("table"),g=CKEDITOR.tools.buildTableMap(e),h=d[0].getParent().$.rowIndex,d=d[d.length-1],k=d.getParent().$.rowIndex+d.$.rowSpan-1,d=[];a.reset();for(a=h;a<=k;a++){for(var l=g[a],m=new CKEDITOR.dom.element(e.$.rows[a]),n=0;n<l.length;n++){var p=new CKEDITOR.dom.element(l[n]),v=p.getParent().$.rowIndex;1==p.$.rowSpan?p.remove():
+(--p.$.rowSpan,v==a&&(v=g[a+1],v[n-1]?p.insertAfter(new CKEDITOR.dom.element(v[n-1])):(new CKEDITOR.dom.element(e.$.rows[a+1])).append(p,1)));n+=p.$.colSpan-1}d.push(m)}g=e.$.rows;c[0].moveToPosition(e,CKEDITOR.POSITION_BEFORE_START);h=new CKEDITOR.dom.element(g[k+1]||(0<h?g[h-1]:null)||e.$.parentNode);for(a=d.length;0<=a;a--)f(d[a]);return e.$.parentNode?h:(c[0].select(),null)}a instanceof CKEDITOR.dom.element&&(e=a.getAscendant("table"),1==e.$.rows.length?e.remove():a.remove());return null}function e(a){for(var b=
+a.getParent().$.cells,c=0,d=0;d<b.length;d++){var e=b[d],c=c+e.colSpan;if(e==a.$)break}return c-1}function a(a,b){for(var c=b?Infinity:0,d=0;d<a.length;d++){var g=e(a[d]);if(b?g<c:g>c)c=g}return c}function k(c,d){for(var e=p(c)?c:b(c),g=e[0].getAscendant("table"),f=a(e,1),e=a(e),h=d?f:e,k=CKEDITOR.tools.buildTableMap(g),g=[],f=[],e=[],l=k.length,m=0;m<l;m++){var n=d?k[m][h-1]:k[m][h+1];g.push(k[m][h]);f.push(n)}for(m=0;m<l;m++)g[m]&&(1<g[m].colSpan&&f[m]==g[m]?(k=g[m],k.colSpan+=1):(h=new CKEDITOR.dom.element(g[m]),
+k=h.clone(),k.removeAttribute("colSpan"),k.appendBogus(),k[d?"insertBefore":"insertAfter"].call(k,h),e.push(k),k=k.$),m+=k.rowSpan-1);return e}function l(a){function c(a){var b=a.getRanges(),d,e;if(1!==b.length)return a;b=b[0];if(b.collapsed||0!==b.endOffset)return a;d=b.endContainer;e=d.getName().toLowerCase();if("td"!==e&&"th"!==e)return a;for((e=d.getPrevious())||(e=d.getParent().getPrevious().getLast());e.type!==CKEDITOR.NODE_TEXT&&"br"!==e.getName().toLowerCase();)if(e=e.getLast(),!e)return a;
+b.setEndAt(e,CKEDITOR.POSITION_BEFORE_END);return b.select()}CKEDITOR.env.webkit&&!a.isFake&&(a=c(a));var d=a.getRanges(),e=b(a),g=e[0],f=e[e.length-1],e=g.getAscendant("table"),h=CKEDITOR.tools.buildTableMap(e),k,l,m=[];a.reset();var n=0;for(a=h.length;n<a;n++)for(var p=0,v=h[n].length;p<v;p++)void 0===k&&h[n][p]==g.$&&(k=p),h[n][p]==f.$&&(l=p);for(n=k;n<=l;n++)for(p=0;p<h.length;p++)f=h[p],g=new CKEDITOR.dom.element(e.$.rows[p]),f=new CKEDITOR.dom.element(f[n]),f.$&&(1==f.$.colSpan?f.remove():--f.$.colSpan,
+p+=f.$.rowSpan-1,g.$.cells.length||m.push(g));k=h[0].length-1>l?new CKEDITOR.dom.element(h[0][l+1]):k&&-1!==h[0][k-1].cellIndex?new CKEDITOR.dom.element(h[0][k-1]):new CKEDITOR.dom.element(e.$.parentNode);m.length==a&&(d[0].moveToPosition(e,CKEDITOR.POSITION_AFTER_END),d[0].select(),e.remove());return k}function m(a,b){var c=a.getStartElement().getAscendant({td:1,th:1},!0);if(c){var d=c.clone();d.appendBogus();b?d.insertBefore(c):d.insertAfter(c)}}function c(a){if(a instanceof CKEDITOR.dom.selection){var e=
+a.getRanges(),g=b(a),f=g[0]&&g[0].getAscendant("table"),h;a:{var k=0;h=g.length-1;for(var l={},m,n;m=g[k++];)CKEDITOR.dom.element.setMarker(l,m,"delete_cell",!0);for(k=0;m=g[k++];)if((n=m.getPrevious())&&!n.getCustomData("delete_cell")||(n=m.getNext())&&!n.getCustomData("delete_cell")){CKEDITOR.dom.element.clearAllMarkers(l);h=n;break a}CKEDITOR.dom.element.clearAllMarkers(l);k=g[0].getParent();(k=k.getPrevious())?h=k.getLast():(k=g[h].getParent(),h=(k=k.getNext())?k.getChild(0):null)}a.reset();for(a=
+g.length-1;0<=a;a--)c(g[a]);h?d(h,!0):f&&(e[0].moveToPosition(f,CKEDITOR.POSITION_BEFORE_START),e[0].select(),f.remove())}else a instanceof CKEDITOR.dom.element&&(e=a.getParent(),1==e.getChildCount()?e.remove():a.remove())}function d(a,b){var c=a.getDocument(),d=CKEDITOR.document;CKEDITOR.env.ie&&10==CKEDITOR.env.version&&(d.focus(),c.focus());c=new CKEDITOR.dom.range(c);c["moveToElementEdit"+(b?"End":"Start")](a)||(c.selectNodeContents(a),c.collapse(b?!1:!0));c.select(!0)}function g(a,b,c){a=a[b];
+if("undefined"==typeof c)return a;for(b=0;a&&b<a.length;b++){if(c.is&&a[b]==c.$)return b;if(b==c)return new CKEDITOR.dom.element(a[b])}return c.is?-1:null}function n(a,c,d){var e=b(a),f;if((c?1!=e.length:2>e.length)||(f=a.getCommonAncestor())&&f.type==CKEDITOR.NODE_ELEMENT&&f.is("table"))return!1;a=e[0];f=a.getAscendant("table");var h=CKEDITOR.tools.buildTableMap(f),k=h.length,l=h[0].length,m=a.getParent().$.rowIndex,n=g(h,m,a),p;if(c){var v;try{var y=parseInt(a.getAttribute("rowspan"),10)||1;p=parseInt(a.getAttribute("colspan"),
+10)||1;v=h["up"==c?m-y:"down"==c?m+y:m]["left"==c?n-p:"right"==c?n+p:n]}catch(M){return!1}if(!v||a.$==v)return!1;e["up"==c||"left"==c?"unshift":"push"](new CKEDITOR.dom.element(v))}c=a.getDocument();var D=m,y=v=0,N=!d&&new CKEDITOR.dom.documentFragment(c),I=0;for(c=0;c<e.length;c++){p=e[c];var L=p.getParent(),R=p.getFirst(),H=p.$.colSpan,G=p.$.rowSpan,L=L.$.rowIndex,O=g(h,L,p),I=I+H*G,y=Math.max(y,O-n+H);v=Math.max(v,L-m+G);d||(H=p,(G=H.getBogus())&&G.remove(),H.trim(),p.getChildren().count()&&(L==
+D||!R||R.isBlockBoundary&&R.isBlockBoundary({br:1})||(D=N.getLast(CKEDITOR.dom.walker.whitespaces(!0)),!D||D.is&&D.is("br")||N.append("br")),p.moveChildren(N)),c?p.remove():p.setHtml(""));D=L}if(d)return v*y==I;N.moveChildren(a);a.appendBogus();y>=l?a.removeAttribute("rowSpan"):a.$.rowSpan=v;v>=k?a.removeAttribute("colSpan"):a.$.colSpan=y;d=new CKEDITOR.dom.nodeList(f.$.rows);e=d.count();for(c=e-1;0<=c;c--)f=d.getItem(c),f.$.cells.length||(f.remove(),e++);return a}function y(a,c){var d=b(a);if(1<
 d.length)return!1;if(c)return!0;var d=d[0],e=d.getParent(),f=e.getAscendant("table"),h=CKEDITOR.tools.buildTableMap(f),k=e.$.rowIndex,l=g(h,k,d),m=d.$.rowSpan,n;if(1<m){n=Math.ceil(m/2);for(var m=Math.floor(m/2),e=k+n,f=new CKEDITOR.dom.element(f.$.rows[e]),h=g(h,e),p,e=d.clone(),k=0;k<h.length;k++)if(p=h[k],p.parentNode==f.$&&k>l){e.insertBefore(new CKEDITOR.dom.element(p));break}else p=null;p||f.append(e)}else for(m=n=1,f=e.clone(),f.insertAfter(e),f.append(e=d.clone()),p=g(h,k),l=0;l<p.length;l++)p[l].rowSpan++;
-e.appendBogus();d.$.rowSpan=n;e.$.rowSpan=m;1==n&&d.removeAttribute("rowSpan");1==m&&e.removeAttribute("rowSpan");return e}function w(a,c){var d=b(a);if(1<d.length)return!1;if(c)return!0;var d=d[0],e=d.getParent(),f=e.getAscendant("table"),f=CKEDITOR.tools.buildTableMap(f),h=g(f,e.$.rowIndex,d),k=d.$.colSpan;if(1<k)e=Math.ceil(k/2),k=Math.floor(k/2);else{for(var k=e=1,l=[],m=0;m<f.length;m++){var n=f[m];l.push(n[h]);1<n[h].rowSpan&&(m+=n[h].rowSpan-1)}for(f=0;f<l.length;f++)l[f].colSpan++}f=d.clone();
+e.appendBogus();d.$.rowSpan=n;e.$.rowSpan=m;1==n&&d.removeAttribute("rowSpan");1==m&&e.removeAttribute("rowSpan");return e}function v(a,c){var d=b(a);if(1<d.length)return!1;if(c)return!0;var d=d[0],e=d.getParent(),f=e.getAscendant("table"),f=CKEDITOR.tools.buildTableMap(f),h=g(f,e.$.rowIndex,d),k=d.$.colSpan;if(1<k)e=Math.ceil(k/2),k=Math.floor(k/2);else{for(var k=e=1,l=[],m=0;m<f.length;m++){var n=f[m];l.push(n[h]);1<n[h].rowSpan&&(m+=n[h].rowSpan-1)}for(f=0;f<l.length;f++)l[f].colSpan++}f=d.clone();
 f.insertAfter(d);f.appendBogus();d.$.colSpan=e;f.$.colSpan=k;1==e&&d.removeAttribute("colSpan");1==k&&f.removeAttribute("colSpan");return f}var p=CKEDITOR.tools.isArray;CKEDITOR.plugins.tabletools={requires:"table,dialog,contextmenu",init:function(a){function e(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)}})}function g(b,c){var d=a.addCommand(b,c);a.addFeature(d)}var p=a.lang.table,
-z=CKEDITOR.tools.style.parse,q="td{width} td{height} td{border-color} td{background-color} td{white-space} td{vertical-align} td{text-align} td[colspan] td[rowspan] th".split(" ");g("cellProperties",new CKEDITOR.dialogCommand("cellProperties",e({allowedContent:"td th{width,height,border-color,background-color,white-space,vertical-align,text-align}[colspan,rowspan]",requiredContent:q,contentTransformations:[[{element:"td",left:function(a){return a.styles.background&&z.background(a.styles.background).color},
+z=CKEDITOR.tools.style.parse,u="td{width} td{height} td{border-color} td{background-color} td{white-space} td{vertical-align} td{text-align} td[colspan] td[rowspan] th".split(" ");g("cellProperties",new CKEDITOR.dialogCommand("cellProperties",e({allowedContent:"td th{width,height,border-color,background-color,white-space,vertical-align,text-align}[colspan,rowspan]",requiredContent:u,contentTransformations:[[{element:"td",left:function(a){return a.styles.background&&z.background(a.styles.background).color},
 right:function(a){a.styles["background-color"]=z.background(a.styles.background).color}},{element:"td",check:"td{vertical-align}",left:function(a){return a.attributes&&a.attributes.valign},right:function(a){a.styles["vertical-align"]=a.attributes.valign;delete a.attributes.valign}}],[{element:"tr",check:"td{height}",left:function(a){return a.styles&&a.styles.height},right:function(a){CKEDITOR.tools.array.forEach(a.children,function(b){b.name in{td:1,th:1}&&(b.attributes["cke-row-height"]=a.styles.height)});
 delete a.styles.height}}],[{element:"td",check:"td{height}",left:function(a){return(a=a.attributes)&&a["cke-row-height"]},right:function(a){a.styles.height=a.attributes["cke-row-height"];delete a.attributes["cke-row-height"]}}]]})));CKEDITOR.dialog.add("cellProperties",this.path+"dialogs/tableCell.js");g("rowDelete",e({requiredContent:"table",exec:function(a){a=a.getSelection();(a=f(a))&&d(a)}}));g("rowInsertBefore",e({requiredContent:"table",exec:function(a){a=a.getSelection();a=b(a);h(a,!0)}}));
-g("rowInsertAfter",e({requiredContent:"table",exec:function(a){a=a.getSelection();a=b(a);h(a)}}));g("columnDelete",e({requiredContent:"table",exec:function(a){a=a.getSelection();(a=k(a))&&d(a,!0)}}));g("columnInsertBefore",e({requiredContent:"table",exec:function(a){a=a.getSelection();a=b(a);m(a,!0)}}));g("columnInsertAfter",e({requiredContent:"table",exec:function(a){a=a.getSelection();a=b(a);m(a)}}));g("cellDelete",e({requiredContent:"table",exec:function(a){a=a.getSelection();c(a)}}));g("cellMerge",
+g("rowInsertAfter",e({requiredContent:"table",exec:function(a){a=a.getSelection();a=b(a);h(a)}}));g("columnDelete",e({requiredContent:"table",exec:function(a){a=a.getSelection();(a=l(a))&&d(a,!0)}}));g("columnInsertBefore",e({requiredContent:"table",exec:function(a){a=a.getSelection();a=b(a);k(a,!0)}}));g("columnInsertAfter",e({requiredContent:"table",exec:function(a){a=a.getSelection();a=b(a);k(a)}}));g("cellDelete",e({requiredContent:"table",exec:function(a){a=a.getSelection();c(a)}}));g("cellMerge",
 e({allowedContent:"td[colspan,rowspan]",requiredContent:"td[colspan,rowspan]",exec:function(a,b){b.cell=n(a.getSelection());d(b.cell,!0)}}));g("cellMergeRight",e({allowedContent:"td[colspan]",requiredContent:"td[colspan]",exec:function(a,b){b.cell=n(a.getSelection(),"right");d(b.cell,!0)}}));g("cellMergeDown",e({allowedContent:"td[rowspan]",requiredContent:"td[rowspan]",exec:function(a,b){b.cell=n(a.getSelection(),"down");d(b.cell,!0)}}));g("cellVerticalSplit",e({allowedContent:"td[rowspan]",requiredContent:"td[rowspan]",
-exec:function(a){d(w(a.getSelection()))}}));g("cellHorizontalSplit",e({allowedContent:"td[colspan]",requiredContent:"td[colspan]",exec:function(a){d(y(a.getSelection()))}}));g("cellInsertBefore",e({requiredContent:"table",exec:function(a){a=a.getSelection();l(a,!0)}}));g("cellInsertAfter",e({requiredContent:"table",exec:function(a){a=a.getSelection();l(a)}}));a.addMenuItems&&a.addMenuItems({tablecell:{label:p.cell.menu,group:"tablecell",order:1,getItems:function(){var c=a.getSelection(),d=b(c),c=
-{tablecell_insertBefore:CKEDITOR.TRISTATE_OFF,tablecell_insertAfter:CKEDITOR.TRISTATE_OFF,tablecell_delete:CKEDITOR.TRISTATE_OFF,tablecell_merge:n(c,null,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_merge_right:n(c,"right",!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_merge_down:n(c,"down",!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_split_vertical:w(c,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_split_horizontal:y(c,!0)?CKEDITOR.TRISTATE_OFF:
-CKEDITOR.TRISTATE_DISABLED};a.filter.check(q)&&(c.tablecell_properties=0<d.length?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);return c}},tablecell_insertBefore:{label:p.cell.insertBefore,group:"tablecell",command:"cellInsertBefore",order:5},tablecell_insertAfter:{label:p.cell.insertAfter,group:"tablecell",command:"cellInsertAfter",order:10},tablecell_delete:{label:p.cell.deleteCell,group:"tablecell",command:"cellDelete",order:15},tablecell_merge:{label:p.cell.merge,group:"tablecell",command:"cellMerge",
+exec:function(a){d(v(a.getSelection()))}}));g("cellHorizontalSplit",e({allowedContent:"td[colspan]",requiredContent:"td[colspan]",exec:function(a){d(y(a.getSelection()))}}));g("cellInsertBefore",e({requiredContent:"table",exec:function(a){a=a.getSelection();m(a,!0)}}));g("cellInsertAfter",e({requiredContent:"table",exec:function(a){a=a.getSelection();m(a)}}));a.addMenuItems&&a.addMenuItems({tablecell:{label:p.cell.menu,group:"tablecell",order:1,getItems:function(){var c=a.getSelection(),d=b(c),c=
+{tablecell_insertBefore:CKEDITOR.TRISTATE_OFF,tablecell_insertAfter:CKEDITOR.TRISTATE_OFF,tablecell_delete:CKEDITOR.TRISTATE_OFF,tablecell_merge:n(c,null,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_merge_right:n(c,"right",!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_merge_down:n(c,"down",!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_split_vertical:v(c,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_split_horizontal:y(c,!0)?CKEDITOR.TRISTATE_OFF:
+CKEDITOR.TRISTATE_DISABLED};a.filter.check(u)&&(c.tablecell_properties=0<d.length?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);return c}},tablecell_insertBefore:{label:p.cell.insertBefore,group:"tablecell",command:"cellInsertBefore",order:5},tablecell_insertAfter:{label:p.cell.insertAfter,group:"tablecell",command:"cellInsertAfter",order:10},tablecell_delete:{label:p.cell.deleteCell,group:"tablecell",command:"cellDelete",order:15},tablecell_merge:{label:p.cell.merge,group:"tablecell",command:"cellMerge",
 order:16},tablecell_merge_right:{label:p.cell.mergeRight,group:"tablecell",command:"cellMergeRight",order:17},tablecell_merge_down:{label:p.cell.mergeDown,group:"tablecell",command:"cellMergeDown",order:18},tablecell_split_horizontal:{label:p.cell.splitHorizontal,group:"tablecell",command:"cellHorizontalSplit",order:19},tablecell_split_vertical:{label:p.cell.splitVertical,group:"tablecell",command:"cellVerticalSplit",order:20},tablecell_properties:{label:p.cell.title,group:"tablecellproperties",command:"cellProperties",
 order:21},tablerow:{label:p.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:p.row.insertBefore,group:"tablerow",command:"rowInsertBefore",order:5},tablerow_insertAfter:{label:p.row.insertAfter,group:"tablerow",command:"rowInsertAfter",order:10},tablerow_delete:{label:p.row.deleteRow,group:"tablerow",command:"rowDelete",order:15},
 tablecolumn:{label:p.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:p.column.insertBefore,group:"tablecolumn",command:"columnInsertBefore",order:5},tablecolumn_insertAfter:{label:p.column.insertAfter,group:"tablecolumn",command:"columnInsertAfter",order:10},tablecolumn_delete:{label:p.column.deleteColumn,group:"tablecolumn",
-command:"columnDelete",order:15}});a.contextMenu&&a.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})},getCellColIndex:e,insertRow:h,insertColumn:m,getSelectedCells:b};CKEDITOR.plugins.add("tabletools",CKEDITOR.plugins.tabletools)}(),CKEDITOR.tools.buildTableMap=function(b,h,f,e,a){b=b.$.rows;f=f||0;e="number"===typeof e?e:b.length-1;a="number"===typeof a?
-a:-1;var m=-1,k=[];for(h=h||0;h<=e;h++){m++;!k[m]&&(k[m]=[]);for(var l=-1,c=f;c<=(-1===a?b[h].cells.length-1:a);c++){var d=b[h].cells[c];if(!d)break;for(l++;k[m][l];)l++;for(var g=isNaN(d.colSpan)?1:d.colSpan,d=isNaN(d.rowSpan)?1:d.rowSpan,n=0;n<d&&!(h+n>e);n++){k[m+n]||(k[m+n]=[]);for(var y=0;y<g;y++)k[m+n][l+y]=b[h].cells[c]}l+=g-1;if(-1!==a&&l>=a)break}}return k},function(){function b(a){return CKEDITOR.env.ie?a.$.clientWidth:parseInt(a.getComputedStyle("width"),10)}function h(a,b){var e=a.getComputedStyle("border-"+
+command:"columnDelete",order:15}});a.contextMenu&&a.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})},getCellColIndex:e,insertRow:h,insertColumn:k,getSelectedCells:b};CKEDITOR.plugins.add("tabletools",CKEDITOR.plugins.tabletools)}(),CKEDITOR.tools.buildTableMap=function(b,h,f,e,a){b=b.$.rows;f=f||0;e="number"===typeof e?e:b.length-1;a="number"===typeof a?
+a:-1;var k=-1,l=[];for(h=h||0;h<=e;h++){k++;!l[k]&&(l[k]=[]);for(var m=-1,c=f;c<=(-1===a?b[h].cells.length-1:a);c++){var d=b[h].cells[c];if(!d)break;for(m++;l[k][m];)m++;for(var g=isNaN(d.colSpan)?1:d.colSpan,d=isNaN(d.rowSpan)?1:d.rowSpan,n=0;n<d&&!(h+n>e);n++){l[k+n]||(l[k+n]=[]);for(var y=0;y<g;y++)l[k+n][m+y]=b[h].cells[c]}m+=g-1;if(-1!==a&&m>=a)break}}return l},function(){function b(a){return CKEDITOR.env.ie?a.$.clientWidth:parseInt(a.getComputedStyle("width"),10)}function h(a,b){var e=a.getComputedStyle("border-"+
 b+"-width"),f={thin:"0px",medium:"1px",thick:"2px"};0>e.indexOf("px")&&(e=e in f&&"none"!=a.getComputedStyle("border-style")?f[e]:0);return parseFloat(e)}function f(a){var b=[],e={},f="rtl"===a.getComputedStyle("direction"),k=CKEDITOR.tools.array.zip((new CKEDITOR.dom.nodeList(a.$.rows)).toArray(),CKEDITOR.tools.buildTableMap(a));CKEDITOR.tools.array.forEach(k,function(k){var l=k[0].$;k=k[1];var m=-1,r=0,y=null;l?(r=new CKEDITOR.dom.element(l),y={height:r.$.offsetHeight,position:r.getDocumentPosition()}):
-y=void 0;for(var l=CKEDITOR.env.ie&&!CKEDITOR.env.edge,u="collapse"===a.getComputedStyle("border-collapse"),r=y.height,y=y.position,z=0;z<k.length;z++){var q=new CKEDITOR.dom.element(k[z]),v=k[z+1]&&new CKEDITOR.dom.element(k[z+1]),B,D,A=q.getDocumentPosition().x,m=m+(q.$.colSpan||1);f?D=A+h(q,"left"):B=A+q.$.offsetWidth-h(q,"right");v?(A=v.getDocumentPosition().x,f?B=A+v.$.offsetWidth-h(v,"right"):D=A+h(v,"left")):(A=a.getDocumentPosition().x,f?B=A:D=A+a.$.offsetWidth);q=Math.max(D-B,3);l&&u&&(B-=
-q,q=Math.max(D-B,3));q={table:a,index:m,x:B,y:y.y,width:q,height:r,rtl:f};e[m]=e[m]||[];e[m].push(q);q.alignedPillars=e[m];b.push(q)}});return b}function e(a){(a.data||a).preventDefault()}function a(a){function d(){x=0;r.setOpacity(0);z&&f();var a=p.table;setTimeout(function(){a.removeCustomData("_cke_table_pillars")},0);t.removeListener("dragstart",e)}function f(){for(var d=p.rtl,e=d?B.length:v.length,g=0,l=0;l<e;l++){var m=v[l],n=B[l],q=p.table;CKEDITOR.tools.setTimeout(function(b,f,h,l,m,n){b&&
-b.setStyle("width",k(Math.max(f+n,1)));h&&h.setStyle("width",k(Math.max(l-n,1)));m&&q.setStyle("width",k(m+n*(d?-1:1)));++g==e&&a.fire("saveSnapshot")},0,this,[m,m&&b(m),n,n&&b(n),(!m||!n)&&b(q)+h(q,"left")+h(q,"right"),z])}}function m(d){e(d);a.fire("saveSnapshot");d=p.index;for(var f=CKEDITOR.tools.buildTableMap(p.table),g=[],h=[],k=Number.MAX_VALUE,l=k,n=p.rtl,q=0,Q=f.length;q<Q;q++){var H=f[q],G=H[d+(n?1:0)],H=H[d+(n?0:1)],G=G&&new CKEDITOR.dom.element(G),H=H&&new CKEDITOR.dom.element(H);G&&H&&
-G.equals(H)||(G&&(k=Math.min(k,b(G))),H&&(l=Math.min(l,b(H))),g.push(G),h.push(H))}v=g;B=h;D=p.x-k;A=p.x+l;r.setOpacity(.5);u=parseInt(r.getStyle("left"),10);z=0;x=1;r.on("mousemove",w);t.on("dragstart",e);t.on("mouseup",y,this)}function y(a){a.removeListener();d()}function w(a){q(a.data.getPageOffset().x)}var p,t,r,x,u,z,q,v,B,D,A;t=a.document;r=CKEDITOR.dom.element.createFromHtml('\x3cdiv data-cke-temp\x3d1 contenteditable\x3dfalse unselectable\x3don style\x3d"position:absolute;cursor:col-resize;filter:alpha(opacity\x3d0);opacity:0;padding:0;background-color:#004;background-image:none;border:0px none;z-index:10000"\x3e\x3c/div\x3e',
-t);a.on("destroy",function(){r.remove()});l||t.getDocumentElement().append(r);this.attachTo=function(a){var b,c,d;x||(l&&(t.getBody().append(r),z=0),p=a,b=p.alignedPillars[0],c=p.alignedPillars[p.alignedPillars.length-1],d=b.y,b=c.height+c.y-b.y,r.setStyles({width:k(a.width),height:k(b),left:k(a.x),top:k(d)}),l&&r.setOpacity(.25),r.on("mousedown",m,this),t.getBody().setStyle("cursor","col-resize"),r.show())};q=this.move=function(a,b){if(!p)return 0;if(!(x||a>=p.x&&a<=p.x+p.width&&b>=p.y&&b<=p.y+p.height))return p=
-null,x=z=0,t.removeListener("mouseup",y),r.removeListener("mousedown",m),r.removeListener("mousemove",w),t.getBody().setStyle("cursor","auto"),l?r.remove():r.hide(),0;var c=a-Math.round(r.$.offsetWidth/2);if(x){if(c==D||c==A)return 1;c=Math.max(c,D);c=Math.min(c,A);z=c-u}r.setStyle("left",k(c));return 1}}function m(a){var b=a.data.getTarget();if("mouseout"==a.name){if(!b.is("table"))return;for(var e=new CKEDITOR.dom.element(a.data.$.relatedTarget||a.data.$.toElement);e&&e.$&&!e.equals(b)&&!e.is("body");)e=
-e.getParent();if(!e||e.equals(b))return}b.getAscendant("table",1).removeCustomData("_cke_table_pillars");a.removeListener()}var k=CKEDITOR.tools.cssLength,l=CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks);CKEDITOR.plugins.add("tableresize",{requires:"tabletools",init:function(b){b.on("contentDom",function(){var d,g=b.editable();g.attachListener(g.isInline()?g:b.document,"mousemove",function(g){g=g.data;var h=g.getTarget();if(h.type==CKEDITOR.NODE_ELEMENT){var k=g.getPageOffset().x,
-l=g.getPageOffset().y;if(d&&d.move(k,l))e(g);else if(h.is("table")||h.getAscendant({thead:1,tbody:1,tfoot:1},1))if(g=h.getAscendant("table",1),b.editable().contains(g)){(h=g.getCustomData("_cke_table_pillars"))||(g.setCustomData("_cke_table_pillars",h=f(g)),g.on("mouseout",m),g.on("mousedown",m));a:{g=h;for(var h=0,t=g.length;h<t;h++){var r=g[h];if(k>=r.x&&k<=r.x+r.width&&l>=r.y&&l<=r.y+r.height){k=r;break a}}k=null}k&&(!d&&(d=new a(b)),d.attachTo(k))}}})})}})}(),"use strict",function(){function b(a,
-b){return CKEDITOR.tools.array.reduce(b,function(a,b){return b(a)},a)}var h=[CKEDITOR.CTRL+90,CKEDITOR.CTRL+89,CKEDITOR.CTRL+CKEDITOR.SHIFT+90],f={8:1,46:1};CKEDITOR.plugins.add("undo",{init:function(a){function b(a){l.enabled&&!1!==a.data.command.canUndo&&l.save()}function f(){l.enabled=a.readOnly?!1:"wysiwyg"==a.mode;l.onChange()}var l=a.undoManager=new e(a),m=l.editingHandler=new k(l),w=a.addCommand("undo",{exec:function(){l.undo()&&(a.selectionChange(),this.fire("afterUndo"))},startDisabled:!0,
-canUndo:!1}),p=a.addCommand("redo",{exec:function(){l.redo()&&(a.selectionChange(),this.fire("afterRedo"))},startDisabled:!0,canUndo:!1});a.setKeystroke([[h[0],"undo"],[h[1],"redo"],[h[2],"redo"]]);l.onChange=function(){w.setState(l.undoable()?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);p.setState(l.redoable()?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)};a.on("beforeCommandExec",b);a.on("afterCommandExec",b);a.on("saveSnapshot",function(a){l.save(a.data&&a.data.contentOnly)});a.on("contentDom",
-m.attachListeners,m);a.on("instanceReady",function(){a.fire("saveSnapshot")});a.on("beforeModeUnload",function(){"wysiwyg"==a.mode&&l.save(!0)});a.on("mode",f);a.on("readOnly",f);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(){l.reset();a.fire("saveSnapshot")};a.on("updateSnapshot",function(){l.currentImage&&l.update()});a.on("lockSnapshot",function(a){a=
-a.data;l.lock(a&&a.dontUpdate,a&&a.forceUpdate)});a.on("unlockSnapshot",l.unlock,l)}});CKEDITOR.plugins.undo={};var e=CKEDITOR.plugins.undo.UndoManager=function(a){this.strokesRecorded=[0,0];this.locked=null;this.previousKeyGroup=-1;this.limit=a.config.undoStackSize||20;this.strokesLimit=25;this._filterRules=[];this.editor=a;this.reset();CKEDITOR.env.ie&&this.addFilterRule(function(a){return a.replace(/\s+data-cke-expando=".*?"/g,"")})};e.prototype={type:function(a,b){var f=e.getKeyGroup(a),h=this.strokesRecorded[f]+
-1;b=b||h>=this.strokesLimit;this.typing||(this.hasUndo=this.typing=!0,this.hasRedo=!1,this.onChange());b?(h=0,this.editor.fire("saveSnapshot")):this.editor.fire("change");this.strokesRecorded[f]=h;this.previousKeyGroup=f},keyGroupChanged:function(a){return e.getKeyGroup(a)!=this.previousKeyGroup},reset:function(){this.snapshots=[];this.index=-1;this.currentImage=null;this.hasRedo=this.hasUndo=!1;this.locked=null;this.resetType()},resetType:function(){this.strokesRecorded=[0,0];this.typing=!1;this.previousKeyGroup=
+y=void 0;for(var l=CKEDITOR.env.ie&&!CKEDITOR.env.edge,t="collapse"===a.getComputedStyle("border-collapse"),r=y.height,y=y.position,z=0;z<k.length;z++){var u=new CKEDITOR.dom.element(k[z]),w=k[z+1]&&new CKEDITOR.dom.element(k[z+1]),B,C,A=u.getDocumentPosition().x,m=m+(u.$.colSpan||1);f?C=A+h(u,"left"):B=A+u.$.offsetWidth-h(u,"right");w?(A=w.getDocumentPosition().x,f?B=A+w.$.offsetWidth-h(w,"right"):C=A+h(w,"left")):(A=a.getDocumentPosition().x,f?B=A:C=A+a.$.offsetWidth);u=Math.max(C-B,3);l&&t&&(B-=
+u,u=Math.max(C-B,3));u={table:a,index:m,x:B,y:y.y,width:u,height:r,rtl:f};e[m]=e[m]||[];e[m].push(u);u.alignedPillars=e[m];b.push(u)}});return b}function e(a){(a.data||a).preventDefault()}function a(a){function d(){x=0;r.setOpacity(0);z&&g();var a=p.table;setTimeout(function(){a.removeCustomData("_cke_table_pillars")},0);q.removeListener("dragstart",e)}function g(){for(var d=p.rtl,e=d?B.length:w.length,g=0,f=0;f<e;f++){var k=w[f],m=B[f],n=p.table;CKEDITOR.tools.setTimeout(function(b,f,h,k,m,p){b&&
+b.setStyle("width",l(Math.max(f+p,1)));h&&h.setStyle("width",l(Math.max(k-p,1)));m&&n.setStyle("width",l(m+p*(d?-1:1)));++g==e&&a.fire("saveSnapshot")},0,this,[k,k&&b(k),m,m&&b(m),(!k||!m)&&b(n)+h(n,"left")+h(n,"right"),z])}}function f(d){e(d);a.fire("saveSnapshot");d=p.index;for(var g=CKEDITOR.tools.buildTableMap(p.table),h=[],l=[],m=Number.MAX_VALUE,n=m,u=p.rtl,L=0,R=g.length;L<R;L++){var H=g[L],G=H[d+(u?1:0)],H=H[d+(u?0:1)],G=G&&new CKEDITOR.dom.element(G),H=H&&new CKEDITOR.dom.element(H);G&&H&&
+G.equals(H)||(G&&(m=Math.min(m,b(G))),H&&(n=Math.min(n,b(H))),h.push(G),l.push(H))}w=h;B=l;C=p.x-m;A=p.x+n;r.setOpacity(.5);t=parseInt(r.getStyle("left"),10);z=0;x=1;r.on("mousemove",v);q.on("dragstart",e);q.on("mouseup",k,this)}function k(a){a.removeListener();d()}function v(a){u(a.data.getPageOffset().x)}var p,q,r,x,t,z,u,w,B,C,A;q=a.document;r=CKEDITOR.dom.element.createFromHtml('\x3cdiv data-cke-temp\x3d1 contenteditable\x3dfalse unselectable\x3don style\x3d"position:absolute;cursor:col-resize;filter:alpha(opacity\x3d0);opacity:0;padding:0;background-color:#004;background-image:none;border:0px none;z-index:10000"\x3e\x3c/div\x3e',
+q);a.on("destroy",function(){r.remove()});m||q.getDocumentElement().append(r);this.attachTo=function(a){var b,c,d;x||(m&&(q.getBody().append(r),z=0),p=a,b=p.alignedPillars[0],c=p.alignedPillars[p.alignedPillars.length-1],d=b.y,b=c.height+c.y-b.y,r.setStyles({width:l(a.width),height:l(b),left:l(a.x),top:l(d)}),m&&r.setOpacity(.25),r.on("mousedown",f,this),q.getBody().setStyle("cursor","col-resize"),r.show())};u=this.move=function(a,b){if(!p)return 0;if(!(x||a>=p.x&&a<=p.x+p.width&&b>=p.y&&b<=p.y+p.height))return p=
+null,x=z=0,q.removeListener("mouseup",k),r.removeListener("mousedown",f),r.removeListener("mousemove",v),q.getBody().setStyle("cursor","auto"),m?r.remove():r.hide(),0;var c=a-Math.round(r.$.offsetWidth/2);if(x){if(c==C||c==A)return 1;c=Math.max(c,C);c=Math.min(c,A);z=c-t}r.setStyle("left",l(c));return 1}}function k(a){var b=a.data.getTarget();if("mouseout"==a.name){if(!b.is("table"))return;for(var e=new CKEDITOR.dom.element(a.data.$.relatedTarget||a.data.$.toElement);e&&e.$&&!e.equals(b)&&!e.is("body");)e=
+e.getParent();if(!e||e.equals(b))return}b.getAscendant("table",1).removeCustomData("_cke_table_pillars");a.removeListener()}var l=CKEDITOR.tools.cssLength,m=CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks);CKEDITOR.plugins.add("tableresize",{requires:"tabletools",init:function(b){b.on("contentDom",function(){var d,g=b.editable();g.attachListener(g.isInline()?g:b.document,"mousemove",function(g){g=g.data;var h=g.getTarget();if(h.type==CKEDITOR.NODE_ELEMENT){var l=g.getPageOffset().x,
+m=g.getPageOffset().y;if(d&&d.move(l,m))e(g);else if(h.is("table")||h.getAscendant({thead:1,tbody:1,tfoot:1},1))if(g=h.getAscendant("table",1),b.editable().contains(g)){(h=g.getCustomData("_cke_table_pillars"))||(g.setCustomData("_cke_table_pillars",h=f(g)),g.on("mouseout",k),g.on("mousedown",k));a:{g=h;for(var h=0,q=g.length;h<q;h++){var r=g[h];if(l>=r.x&&l<=r.x+r.width&&m>=r.y&&m<=r.y+r.height){l=r;break a}}l=null}l&&(!d&&(d=new a(b)),d.attachTo(l))}}})})}})}(),"use strict",function(){function b(a,
+b){return CKEDITOR.tools.array.reduce(b,function(a,b){return b(a)},a)}var h=[CKEDITOR.CTRL+90,CKEDITOR.CTRL+89,CKEDITOR.CTRL+CKEDITOR.SHIFT+90],f={8:1,46:1};CKEDITOR.plugins.add("undo",{init:function(a){function b(a){f.enabled&&!1!==a.data.command.canUndo&&f.save()}function g(){f.enabled=a.readOnly?!1:"wysiwyg"==a.mode;f.onChange()}var f=a.undoManager=new e(a),k=f.editingHandler=new l(f),m=a.addCommand("undo",{exec:function(){f.undo()&&(a.selectionChange(),this.fire("afterUndo"))},startDisabled:!0,
+canUndo:!1}),p=a.addCommand("redo",{exec:function(){f.redo()&&(a.selectionChange(),this.fire("afterRedo"))},startDisabled:!0,canUndo:!1});a.setKeystroke([[h[0],"undo"],[h[1],"redo"],[h[2],"redo"]]);f.onChange=function(){m.setState(f.undoable()?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);p.setState(f.redoable()?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)};a.on("beforeCommandExec",b);a.on("afterCommandExec",b);a.on("saveSnapshot",function(a){f.save(a.data&&a.data.contentOnly)});a.on("contentDom",
+k.attachListeners,k);a.on("instanceReady",function(){a.fire("saveSnapshot")});a.on("beforeModeUnload",function(){"wysiwyg"==a.mode&&f.save(!0)});a.on("mode",g);a.on("readOnly",g);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(){f.reset();a.fire("saveSnapshot")};a.on("updateSnapshot",function(){f.currentImage&&f.update()});a.on("lockSnapshot",function(a){a=
+a.data;f.lock(a&&a.dontUpdate,a&&a.forceUpdate)});a.on("unlockSnapshot",f.unlock,f)}});CKEDITOR.plugins.undo={};var e=CKEDITOR.plugins.undo.UndoManager=function(a){this.strokesRecorded=[0,0];this.locked=null;this.previousKeyGroup=-1;this.limit=a.config.undoStackSize||20;this.strokesLimit=25;this._filterRules=[];this.editor=a;this.reset();CKEDITOR.env.ie&&this.addFilterRule(function(a){return a.replace(/\s+data-cke-expando=".*?"/g,"")})};e.prototype={type:function(a,b){var g=e.getKeyGroup(a),f=this.strokesRecorded[g]+
+1;b=b||f>=this.strokesLimit;this.typing||(this.hasUndo=this.typing=!0,this.hasRedo=!1,this.onChange());b?(f=0,this.editor.fire("saveSnapshot")):this.editor.fire("change");this.strokesRecorded[g]=f;this.previousKeyGroup=g},keyGroupChanged:function(a){return e.getKeyGroup(a)!=this.previousKeyGroup},reset:function(){this.snapshots=[];this.index=-1;this.currentImage=null;this.hasRedo=this.hasUndo=!1;this.locked=null;this.resetType()},resetType:function(){this.strokesRecorded=[0,0];this.typing=!1;this.previousKeyGroup=
 -1},refreshState:function(){this.hasUndo=!!this.getNextImage(!0);this.hasRedo=!!this.getNextImage(!1);this.resetType();this.onChange()},save:function(b,d,e){var f=this.editor;if(this.locked||"ready"!=f.status||"wysiwyg"!=f.mode)return!1;var h=f.editable();if(!h||"ready"!=h.status)return!1;h=this.snapshots;d||(d=new a(f));if(!1===d.contents)return!1;if(this.currentImage)if(d.equalsContent(this.currentImage)){if(b||d.equalsSelection(this.currentImage))return!1}else!1!==e&&f.fire("change");h.splice(this.index+
 1,h.length-this.index-1);h.length==this.limit&&h.shift();this.index=h.push(d)-1;this.currentImage=d;!1!==e&&this.refreshState();return!0},restoreImage:function(a){var b=this.editor,e;a.bookmarks&&(b.focus(),e=b.getSelection());this.locked={level:999};this.editor.loadSnapshot(a.contents);a.bookmarks?e.selectBookmarks(a.bookmarks):CKEDITOR.env.ie&&(e=this.editor.document.getBody().$.createTextRange(),e.collapse(!0),e.select());this.locked=null;this.index=a.index;this.currentImage=this.snapshots[this.index];
 this.update();this.refreshState();b.fire("change")},getNextImage:function(a){var b=this.snapshots,e=this.currentImage,f;if(e)if(a)for(f=this.index-1;0<=f;f--){if(a=b[f],!e.equalsContent(a))return a.index=f,a}else for(f=this.index+1;f<b.length;f++)if(a=b[f],!e.equalsContent(a))return a.index=f,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(b){if(!this.locked){b||(b=new a(this.editor));for(var d=this.index,e=this.snapshots;0<d&&this.currentImage.equalsContent(e[d-1]);)--d;e.splice(d,this.index-d+1,b);this.index=d;this.currentImage=b}},updateSelection:function(a){if(!this.snapshots.length)return!1;var b=this.snapshots,e=b[b.length-1];return e.equalsContent(a)&&!e.equalsSelection(a)?
 (this.currentImage=b[b.length-1]=a,!0):!1},lock:function(b,d){if(this.locked)this.locked.level++;else if(b)this.locked={level:1};else{var e=null;if(d)e=!0;else{var f=new a(this.editor,!0);this.currentImage&&this.currentImage.equalsContent(f)&&(e=f)}this.locked={update:e,level:1}}},unlock:function(){if(this.locked&&!--this.locked.level){var b=this.locked.update;this.locked=null;if(!0===b)this.update();else if(b){var d=new a(this.editor,!0);b.equalsContent(d)||this.update()}}},addFilterRule:function(a){this._filterRules.push(a)}};
 e.navigationKeyCodes={37:1,38:1,39:1,40:1,36:1,35:1,33:1,34:1};e.keyGroups={PRINTABLE:0,FUNCTIONAL:1};e.isNavigationKey=function(a){return!!e.navigationKeyCodes[a]};e.getKeyGroup=function(a){var b=e.keyGroups;return f[a]?b.FUNCTIONAL:b.PRINTABLE};e.getOppositeKeyGroup=function(a){var b=e.keyGroups;return a==b.FUNCTIONAL?b.PRINTABLE:b.FUNCTIONAL};e.ieFunctionalKeysBug=function(a){return CKEDITOR.env.ie&&e.getKeyGroup(a)==e.keyGroups.FUNCTIONAL};var a=CKEDITOR.plugins.undo.Image=function(a,d){this.editor=
-a;a.fire("beforeUndoImage");var e=a.getSnapshot();e&&(this.contents=b(e,a.undoManager._filterRules));d||(this.bookmarks=(e=e&&a.getSelection())&&e.createBookmarks2(!0));a.fire("afterUndoImage")},m=/\b(?:href|src|name)="[^"]*?"/gi;a.prototype={equalsContent:function(a){var b=this.contents;a=a.contents;CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)&&(b=b.replace(m,""),a=a.replace(m,""));return b!=a?!1:!0},equalsSelection:function(a){var b=this.bookmarks;a=a.bookmarks;if(b||a){if(!b||
-!a||b.length!=a.length)return!1;for(var e=0;e<b.length;e++){var f=b[e],h=a[e];if(f.startOffset!=h.startOffset||f.endOffset!=h.endOffset||!CKEDITOR.tools.arrayCompare(f.start,h.start)||!CKEDITOR.tools.arrayCompare(f.end,h.end))return!1}}return!0}};var k=CKEDITOR.plugins.undo.NativeEditingHandler=function(a){this.undoManager=a;this.ignoreInputEvent=!1;this.keyEventsStack=new l;this.lastKeydownImage=null};k.prototype={onKeydown:function(b){var d=b.data.getKey();if(229!==d)if(-1<CKEDITOR.tools.indexOf(h,
+a;a.fire("beforeUndoImage");var e=a.getSnapshot();e&&(this.contents=b(e,a.undoManager._filterRules));d||(this.bookmarks=(e=e&&a.getSelection())&&e.createBookmarks2(!0));a.fire("afterUndoImage")},k=/\b(?:href|src|name)="[^"]*?"/gi;a.prototype={equalsContent:function(a){var b=this.contents;a=a.contents;CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)&&(b=b.replace(k,""),a=a.replace(k,""));return b!=a?!1:!0},equalsSelection:function(a){var b=this.bookmarks;a=a.bookmarks;if(b||a){if(!b||
+!a||b.length!=a.length)return!1;for(var e=0;e<b.length;e++){var f=b[e],h=a[e];if(f.startOffset!=h.startOffset||f.endOffset!=h.endOffset||!CKEDITOR.tools.arrayCompare(f.start,h.start)||!CKEDITOR.tools.arrayCompare(f.end,h.end))return!1}}return!0}};var l=CKEDITOR.plugins.undo.NativeEditingHandler=function(a){this.undoManager=a;this.ignoreInputEvent=!1;this.keyEventsStack=new m;this.lastKeydownImage=null};l.prototype={onKeydown:function(b){var d=b.data.getKey();if(229!==d)if(-1<CKEDITOR.tools.indexOf(h,
 b.data.getKeystroke()))b.data.preventDefault();else if(this.keyEventsStack.cleanUp(b),b=this.undoManager,this.keyEventsStack.getLast(d)||this.keyEventsStack.push(d),this.lastKeydownImage=new a(b.editor),e.isNavigationKey(d)||this.undoManager.keyGroupChanged(d))if(b.strokesRecorded[0]||b.strokesRecorded[1])b.save(!1,this.lastKeydownImage,!1),b.resetType()},onInput:function(){if(this.ignoreInputEvent)this.ignoreInputEvent=!1;else{var a=this.keyEventsStack.getLast();a||(a=this.keyEventsStack.push(0));
 this.keyEventsStack.increment(a.keyCode);this.keyEventsStack.getTotalInputs()>=this.undoManager.strokesLimit&&(this.undoManager.type(a.keyCode,!0),this.keyEventsStack.resetInputs())}},onKeyup:function(b){var d=this.undoManager;b=b.data.getKey();var f=this.keyEventsStack.getTotalInputs();this.keyEventsStack.remove(b);if(!(e.ieFunctionalKeysBug(b)&&this.lastKeydownImage&&this.lastKeydownImage.equalsContent(new a(d.editor,!0))))if(0<f)d.type(b);else if(e.isNavigationKey(b))this.onNavigationKey(!0)},
 onNavigationKey:function(b){var d=this.undoManager;!b&&d.save(!0,null,!1)||d.updateSelection(new a(d.editor));d.resetType()},ignoreInputEventListener:function(){this.ignoreInputEvent=!0},activateInputEventListener:function(){this.ignoreInputEvent=!1},attachListeners:function(){var a=this.undoManager.editor,b=a.editable(),f=this;b.attachListener(b,"keydown",function(a){f.onKeydown(a);if(e.ieFunctionalKeysBug(a.data.getKey()))f.onInput()},null,null,999);b.attachListener(b,CKEDITOR.env.ie?"keypress":
-"input",f.onInput,f,null,999);b.attachListener(b,"keyup",f.onKeyup,f,null,999);b.attachListener(b,"paste",f.ignoreInputEventListener,f,null,999);b.attachListener(b,"drop",f.ignoreInputEventListener,f,null,999);a.on("afterPaste",f.activateInputEventListener,f,null,999);b.attachListener(b.isInline()?b:a.document.getDocumentElement(),"click",function(){f.onNavigationKey()},null,null,999);b.attachListener(this.undoManager.editor,"blur",function(){f.keyEventsStack.remove(9)},null,null,999)}};var l=CKEDITOR.plugins.undo.KeyEventsStack=
-function(){this.stack=[]};l.prototype={push:function(a){a=this.stack.push({keyCode:a,inputs:0});return this.stack[a-1]},getLastIndex:function(a){if("number"!=typeof a)return this.stack.length-1;for(var b=this.stack.length;b--;)if(this.stack[b].keyCode==a)return b;return-1},getLast:function(a){a=this.getLastIndex(a);return-1!=a?this.stack[a]:null},increment:function(a){this.getLast(a).inputs++},remove:function(a){a=this.getLastIndex(a);-1!=a&&this.stack.splice(a,1)},resetInputs:function(a){if("number"==
+"input",f.onInput,f,null,999);b.attachListener(b,"keyup",f.onKeyup,f,null,999);b.attachListener(b,"paste",f.ignoreInputEventListener,f,null,999);b.attachListener(b,"drop",f.ignoreInputEventListener,f,null,999);a.on("afterPaste",f.activateInputEventListener,f,null,999);b.attachListener(b.isInline()?b:a.document.getDocumentElement(),"click",function(){f.onNavigationKey()},null,null,999);b.attachListener(this.undoManager.editor,"blur",function(){f.keyEventsStack.remove(9)},null,null,999)}};var m=CKEDITOR.plugins.undo.KeyEventsStack=
+function(){this.stack=[]};m.prototype={push:function(a){a=this.stack.push({keyCode:a,inputs:0});return this.stack[a-1]},getLastIndex:function(a){if("number"!=typeof a)return this.stack.length-1;for(var b=this.stack.length;b--;)if(this.stack[b].keyCode==a)return b;return-1},getLast:function(a){a=this.getLastIndex(a);return-1!=a?this.stack[a]:null},increment:function(a){this.getLast(a).inputs++},remove:function(a){a=this.getLastIndex(a);-1!=a&&this.stack.splice(a,1)},resetInputs:function(a){if("number"==
 typeof a)this.getLast(a).inputs=0;else for(a=this.stack.length;a--;)this.stack[a].inputs=0},getTotalInputs:function(){for(var a=this.stack.length,b=0;a--;)b+=this.stack[a].inputs;return b},cleanUp:function(a){a=a.data.$;a.ctrlKey||a.metaKey||this.remove(17);a.shiftKey||this.remove(16);a.altKey||this.remove(18)}}}(),function(){function b(a){function b(a){var c=!1;g.attachListener(g,"keydown",function(){var b=f.getBody().getElementsByTag(a);if(!c){for(var d=0;d<b.count();d++)b.getItem(d).setCustomData("retain",
 !0);c=!0}},null,null,1);g.attachListener(g,"keyup",function(){var b=f.getElementsByTag(a);c&&(1==b.count()&&!b.getItem(0).getCustomData("retain")&&CKEDITOR.tools.isEmpty(b.getItem(0).getAttributes())&&b.getItem(0).remove(1),c=!1)})}var e=this.editor;if(e&&!e.isDetached()){var f=a.document,c=f.body,d=f.getElementById("cke_actscrpt");d&&d.parentNode.removeChild(d);(d=f.getElementById("cke_shimscrpt"))&&d.parentNode.removeChild(d);(d=f.getElementById("cke_basetagscrpt"))&&d.parentNode.removeChild(d);
 c.contentEditable=!0;CKEDITOR.env.ie&&(c.hideFocus=!0,c.disabled=!0,c.removeAttribute("disabled"));delete this._.isLoadingData;this.$=c;f=new CKEDITOR.dom.document(f);this.setup();this.fixInitialSelection();var g=this;CKEDITOR.env.ie&&!CKEDITOR.env.edge&&f.getDocumentElement().addClass(f.$.compatMode);CKEDITOR.env.ie&&!CKEDITOR.env.edge&&e.enterMode!=CKEDITOR.ENTER_P?b("p"):CKEDITOR.env.edge&&15>CKEDITOR.env.version&&e.enterMode!=CKEDITOR.ENTER_DIV&&b("div");if(CKEDITOR.env.webkit||CKEDITOR.env.ie&&
 10<CKEDITOR.env.version)f.getDocumentElement().on("mousedown",function(a){a.data.getTarget().is("html")&&setTimeout(function(){e.editable().focus()})});h(e);try{e.document.$.execCommand("2D-position",!1,!0)}catch(n){}(CKEDITOR.env.gecko||CKEDITOR.env.ie&&"CSS1Compat"==e.document.$.compatMode)&&this.attachListener(this,"keydown",function(a){var b=a.data.getKeystroke();if(33==b||34==b)if(CKEDITOR.env.ie)setTimeout(function(){e.getSelection().scrollIntoView()},0);else if(e.window.$.innerHeight>this.$.offsetHeight){var c=
 e.createRange();c[33==b?"moveToElementEditStart":"moveToElementEditEnd"](this);c.select();a.data.preventDefault()}});CKEDITOR.env.ie&&this.attachListener(f,"blur",function(){try{f.$.selection.empty()}catch(a){}});CKEDITOR.env.iOS&&this.attachListener(f,"touchend",function(){a.focus()});c=e.document.getElementsByTag("title").getItem(0);c.data("cke-title",c.getText());CKEDITOR.env.ie&&(e.document.$.title=this._.docTitle);CKEDITOR.tools.setTimeout(function(){"unloaded"==this.status&&(this.status="ready");
 e.fire("contentDom");this._.isPendingFocus&&(e.focus(),this._.isPendingFocus=!1);setTimeout(function(){e.fire("dataReady")},0)},0,this)}}function h(a){function b(){var c;a.editable().attachListener(a,"selectionChange",function(){var b=a.getSelection().getSelectedElement();b&&(c&&(c.detachEvent("onresizestart",e),c=null),b.$.attachEvent("onresizestart",e),c=b.$)})}function e(a){a.returnValue=!1}if(CKEDITOR.env.gecko)try{var f=a.document.$;f.execCommand("enableObjectResizing",!1,!a.config.disableObjectResizing);
-f.execCommand("enableInlineTableEditing",!1,!a.config.disableNativeTableHandles)}catch(c){}else CKEDITOR.env.ie&&11>CKEDITOR.env.version&&a.config.disableObjectResizing&&b(a)}function f(){var a=[];if(8<=CKEDITOR.document.$.documentMode){a.push("html.CSS1Compat [contenteditable\x3dfalse]{min-height:0 !important}");var b=[],e;for(e in CKEDITOR.dtd.$removeEmpty)b.push("html.CSS1Compat "+e+"[contenteditable\x3dfalse]");a.push(b.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")}var e;CKEDITOR.plugins.add("wysiwygarea",{init:function(a){a.config.fullPage&&a.addFeature({allowedContent:"html head title; style [media,type]; body (*)[id]; meta link [*]",requiredContent:"body"});a.addMode("wysiwyg",function(b){function f(d){d&&d.removeListener();a.isDestroyed()||a.isDetached()||(a.editable(new e(a,
-c.$.contentWindow.document.body)),a.setData(a.getData(1),b))}var h="document.open();"+(CKEDITOR.env.ie?"("+CKEDITOR.tools.fixDomain+")();":"")+"document.close();",h=CKEDITOR.env.air?"javascript:void(0)":CKEDITOR.env.ie&&!CKEDITOR.env.edge?"javascript:void(function(){"+encodeURIComponent(h)+"}())":"",c=CKEDITOR.dom.element.createFromHtml('\x3ciframe src\x3d"'+h+'" frameBorder\x3d"0"\x3e\x3c/iframe\x3e');c.setStyles({width:"100%",height:"100%"});c.addClass("cke_wysiwyg_frame").addClass("cke_reset");
-h=a.ui.space("contents");h.append(c);var d=CKEDITOR.env.ie&&!CKEDITOR.env.edge||CKEDITOR.env.gecko;if(d)c.on("load",f);var g=a.title,n=a.fire("ariaEditorHelpLabel",{}).label;g&&(CKEDITOR.env.ie&&n&&(g+=", "+n),c.setAttribute("title",g));if(n){var g=CKEDITOR.tools.getNextId(),y=CKEDITOR.dom.element.createFromHtml('\x3cspan id\x3d"'+g+'" class\x3d"cke_voice_label"\x3e'+n+"\x3c/span\x3e");h.append(y,1);c.setAttribute("aria-describedby",g)}a.on("beforeModeUnload",function(a){a.removeListener();y&&y.remove()});
-c.setAttributes({tabIndex:a.tabIndex,allowTransparency:"true"});!d&&f();a.fire("ariaWidget",c)})}});CKEDITOR.editor.prototype.addContentsCss=function(a){var b=this.config,e=b.contentsCss;CKEDITOR.tools.isArray(e)||(b.contentsCss=e?[e]:[]);b.contentsCss.push(a)};e=CKEDITOR.tools.createClass({$:function(){this.base.apply(this,arguments);this._.frameLoadedHandler=CKEDITOR.tools.addFunction(function(a){CKEDITOR.tools.setTimeout(b,0,this,a)},this);this._.docTitle=this.getWindow().getFrame().getAttribute("title")},
-base:CKEDITOR.editable,proto:{setData:function(a,b){var e=this.editor;if(b)this.setHtml(a),this.fixInitialSelection(),e.fire("dataReady");else{this._.isLoadingData=!0;e._.dataStore={id:1};var h=e.config,c=h.fullPage,d=h.docType,g=CKEDITOR.tools.buildStyleHtml(f()).replace(/<style>/,'\x3cstyle data-cke-temp\x3d"1"\x3e');c||(g+=CKEDITOR.tools.buildStyleHtml(e.config.contentsCss));var n=h.baseHref?'\x3cbase href\x3d"'+h.baseHref+'" data-cke-temp\x3d"1" /\x3e':"";c&&(a=a.replace(/<!DOCTYPE[^>]*>/i,function(a){e.docType=
-d=a;return""}).replace(/<\?xml\s[^\?]*\?>/i,function(a){e.xmlDeclaration=a;return""}));a=e.dataProcessor.toHtml(a);c?(/<body[\s|>]/.test(a)||(a="\x3cbody\x3e"+a),/<html[\s|>]/.test(a)||(a="\x3chtml\x3e"+a+"\x3c/html\x3e"),/<head[\s|>]/.test(a)?/<title[\s|>]/.test(a)||(a=a.replace(/<head[^>]*>/,"$\x26\x3ctitle\x3e\x3c/title\x3e")):a=a.replace(/<html[^>]*>/,"$\x26\x3chead\x3e\x3ctitle\x3e\x3c/title\x3e\x3c/head\x3e"),n&&(a=a.replace(/<head[^>]*?>/,"$\x26"+n)),a=a.replace(/<\/head\s*>/,g+"$\x26"),a=
-d+a):a=h.docType+'\x3chtml dir\x3d"'+h.contentsLangDirection+'" lang\x3d"'+(h.contentsLanguage||e.langCode)+'"\x3e\x3chead\x3e\x3ctitle\x3e'+this._.docTitle+"\x3c/title\x3e"+n+g+"\x3c/head\x3e\x3cbody"+(h.bodyId?' id\x3d"'+h.bodyId+'"':"")+(h.bodyClass?' class\x3d"'+h.bodyClass+'"':"")+"\x3e"+a+"\x3c/body\x3e\x3c/html\x3e";CKEDITOR.env.gecko&&(a=a.replace(/<body/,'\x3cbody contenteditable\x3d"true" '),2E4>CKEDITOR.env.version&&(a=a.replace(/<body[^>]*>/,"$\x26\x3c!-- cke-content-start --\x3e")));
-h='\x3cscript id\x3d"cke_actscrpt" type\x3d"text/javascript"'+(CKEDITOR.env.ie?' defer\x3d"defer" ':"")+"\x3evar wasLoaded\x3d0;function onload(){if(!wasLoaded)window.parent.CKEDITOR.tools.callFunction("+this._.frameLoadedHandler+",window);wasLoaded\x3d1;}"+(CKEDITOR.env.ie?"onload();":'document.addEventListener("DOMContentLoaded", onload, false );')+"\x3c/script\x3e";CKEDITOR.env.ie&&9>CKEDITOR.env.version&&(h+='\x3cscript id\x3d"cke_shimscrpt"\x3ewindow.parent.CKEDITOR.tools.enableHtml5Elements(document)\x3c/script\x3e');
-n&&CKEDITOR.env.ie&&10>CKEDITOR.env.version&&(h+='\x3cscript id\x3d"cke_basetagscrpt"\x3evar baseTag \x3d document.querySelector( "base" );baseTag.href \x3d baseTag.href;\x3c/script\x3e');a=a.replace(/(?=\s*<\/(:?head)>)/,h);this.clearCustomData();this.clearListeners();e.fire("contentDomUnload");var y=this.getDocument();try{y.write(a)}catch(w){setTimeout(function(){y.write(a)},0)}}},getData:function(a){if(a)return this.getHtml();a=this.editor;var b=a.config,e=b.fullPage,f=e&&a.docType,c=e&&a.xmlDeclaration,
-d=this.getDocument(),e=e?d.getDocumentElement().getOuterHtml():d.getBody().getHtml();CKEDITOR.env.gecko&&b.enterMode!=CKEDITOR.ENTER_BR&&(e=e.replace(/<br>(?=\s*(:?$|<\/body>))/,""));e=a.dataProcessor.toDataFormat(e);c&&(e=c+"\n"+e);f&&(e=f+"\n"+e);return e},focus:function(){this._.isLoadingData?this._.isPendingFocus=!0:e.baseProto.focus.call(this)},detach:function(){var a=this.editor,b=a.document,a=a.container.findOne("iframe.cke_wysiwyg_frame");e.baseProto.detach.call(this);this.clearCustomData(this._.expandoNumber);
-b.getDocumentElement().clearCustomData();CKEDITOR.tools.removeFunction(this._.frameLoadedHandler);a&&(a.clearCustomData(),(b=a.removeCustomData("onResize"))&&b.removeListener(),a.isDetached()||a.remove())}}})}(),CKEDITOR.config.disableObjectResizing=!1,CKEDITOR.config.disableNativeTableHandles=!0,CKEDITOR.config.disableNativeSpellChecker=!0,CKEDITOR.config.plugins="dialogui,dialog,a11yhelp,about,autogrow,basicstyles,blockquote,notification,button,toolbar,clipboard,panel,floatpanel,menu,contextmenu,elementspath,enterkey,entities,popup,filetools,filebrowser,floatingspace,listblock,richcombo,format,horizontalrule,htmlwriter,lineutils,widgetselection,widget,image2,indent,indentlist,justify,menubutton,language,list,magicline,maximize,xml,ajax,pastetools,pastefromgdocs,pastefromlibreoffice,pastefromword,pastetext,removeformat,sharedspace,showblocks,showborders,sourcearea,sourcedialog,specialchar,stylescombo,tab,table,tabletools,tableresize,undo,wysiwygarea",
+f.execCommand("enableInlineTableEditing",!1,!a.config.disableNativeTableHandles)}catch(c){}else CKEDITOR.env.ie&&11>CKEDITOR.env.version&&a.config.disableObjectResizing&&b()}function f(){var a=[];if(8<=CKEDITOR.document.$.documentMode){a.push("html.CSS1Compat [contenteditable\x3dfalse]{min-height:0 !important}");var b=[],e;for(e in CKEDITOR.dtd.$removeEmpty)b.push("html.CSS1Compat "+e+"[contenteditable\x3dfalse]");a.push(b.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")}var e;CKEDITOR.plugins.add("wysiwygarea",{init:function(a){a.config.fullPage&&a.addFeature({allowedContent:"html head title; style [media,type]; body (*)[id]; meta link [*]",requiredContent:"body"});a.addMode("wysiwyg",function(b){function f(d){d&&d.removeListener();if(!a.isDestroyed()&&!a.isDetached()&&
+(a.editable(new e(a,v.getFrameDocument().getBody())),a.setData(a.getData(1),b),z)){if(t)a.on("mode",h,{iframe:v,editor:a,callback:b});a.on("mode",function(){a.status="ready"});c()}}function h(a){a&&a.removeListener();v.on("load",function(){x&&(x=!1,n())})}function c(){u=new MutationObserver(function(a){CKEDITOR.tools.array.forEach(a,d)});u.observe(a.config.observableParent,{childList:!0,subtree:!0})}function d(a){"childList"===a.type&&0!==a.addedNodes.length&&CKEDITOR.tools.array.forEach(a.addedNodes,
+g)}function g(b){b.contains&&b.contains(a.container.$)&&(t?x=!0:n())}function n(){var c=a.getData(!1),d;a.editable().preserveIframe=!0;a.editable(null);d=new e(a,v.getFrameDocument().getBody());a.editable(d);a.status="recreating";a.setData(c,{callback:b,internal:!1,noSnapshot:!1})}var y="document.open();"+(CKEDITOR.env.ie?"("+CKEDITOR.tools.fixDomain+")();":"")+"document.close();",y=CKEDITOR.env.air?"javascript:void(0)":CKEDITOR.env.ie&&!CKEDITOR.env.edge?"javascript:void(function(){"+encodeURIComponent(y)+
+"}())":"",v=CKEDITOR.dom.element.createFromHtml('\x3ciframe src\x3d"'+y+'" frameBorder\x3d"0"\x3e\x3c/iframe\x3e');v.setStyles({width:"100%",height:"100%"});v.addClass("cke_wysiwyg_frame").addClass("cke_reset");y=a.ui.space("contents");y.append(v);var p=CKEDITOR.env.ie&&!CKEDITOR.env.edge||CKEDITOR.env.gecko;if(p)v.on("load",f);var q=a.title,r=a.fire("ariaEditorHelpLabel",{}).label,x=!1,t=CKEDITOR.env.ie&&11===CKEDITOR.env.version,z=!!window.MutationObserver,u;q&&(CKEDITOR.env.ie&&r&&(q+=", "+r),
+v.setAttribute("title",q));if(r){var q=CKEDITOR.tools.getNextId(),w=CKEDITOR.dom.element.createFromHtml('\x3cspan id\x3d"'+q+'" class\x3d"cke_voice_label"\x3e'+r+"\x3c/span\x3e");y.append(w,1);v.setAttribute("aria-describedby",q)}a.on("beforeModeUnload",function(a){a.removeListener();w&&w.remove();z&&u.disconnect()});v.setAttributes({tabIndex:a.tabIndex,allowTransparency:"true"});!p&&f();a.fire("ariaWidget",v)})}});CKEDITOR.editor.prototype.addContentsCss=function(a){var b=this.config,e=b.contentsCss;
+CKEDITOR.tools.isArray(e)||(b.contentsCss=e?[e]:[]);b.contentsCss.push(a)};e=CKEDITOR.tools.createClass({$:function(){this.base.apply(this,arguments);this._.frameLoadedHandler=CKEDITOR.tools.addFunction(function(a){CKEDITOR.tools.setTimeout(b,0,this,a)},this);this._.docTitle=this.getWindow().getFrame().getAttribute("title")},base:CKEDITOR.editable,proto:{preserveIframe:!1,setData:function(a,b){var e=this.editor;if(b)this.setHtml(a),this.fixInitialSelection(),e.fire("dataReady");else{this._.isLoadingData=
+!0;e._.dataStore={id:1};var h=e.config,c=h.fullPage,d=h.docType,g=CKEDITOR.tools.buildStyleHtml(f()).replace(/<style>/,'\x3cstyle data-cke-temp\x3d"1"\x3e');c||(g+=CKEDITOR.tools.buildStyleHtml(e.config.contentsCss));var n=h.baseHref?'\x3cbase href\x3d"'+h.baseHref+'" data-cke-temp\x3d"1" /\x3e':"";c&&(a=a.replace(/<!DOCTYPE[^>]*>/i,function(a){e.docType=d=a;return""}).replace(/<\?xml\s[^\?]*\?>/i,function(a){e.xmlDeclaration=a;return""}));a=e.dataProcessor.toHtml(a);c?(/<body[\s|>]/.test(a)||(a=
+"\x3cbody\x3e"+a),/<html[\s|>]/.test(a)||(a="\x3chtml\x3e"+a+"\x3c/html\x3e"),/<head[\s|>]/.test(a)?/<title[\s|>]/.test(a)||(a=a.replace(/<head[^>]*>/,"$\x26\x3ctitle\x3e\x3c/title\x3e")):a=a.replace(/<html[^>]*>/,"$\x26\x3chead\x3e\x3ctitle\x3e\x3c/title\x3e\x3c/head\x3e"),n&&(a=a.replace(/<head[^>]*?>/,"$\x26"+n)),a=a.replace(/<\/head\s*>/,g+"$\x26"),a=d+a):a=h.docType+'\x3chtml dir\x3d"'+h.contentsLangDirection+'" lang\x3d"'+(h.contentsLanguage||e.langCode)+'"\x3e\x3chead\x3e\x3ctitle\x3e'+this._.docTitle+
+"\x3c/title\x3e"+n+g+"\x3c/head\x3e\x3cbody"+(h.bodyId?' id\x3d"'+h.bodyId+'"':"")+(h.bodyClass?' class\x3d"'+h.bodyClass+'"':"")+"\x3e"+a+"\x3c/body\x3e\x3c/html\x3e";CKEDITOR.env.gecko&&(a=a.replace(/<body/,'\x3cbody contenteditable\x3d"true" '),2E4>CKEDITOR.env.version&&(a=a.replace(/<body[^>]*>/,"$\x26\x3c!-- cke-content-start --\x3e")));h='\x3cscript id\x3d"cke_actscrpt" type\x3d"text/javascript"'+(CKEDITOR.env.ie?' defer\x3d"defer" ':"")+"\x3evar wasLoaded\x3d0;function onload(){if(!wasLoaded)window.parent.CKEDITOR \x26\x26 window.parent.CKEDITOR.tools.callFunction("+
+this._.frameLoadedHandler+",window);wasLoaded\x3d1;}"+(CKEDITOR.env.ie?"onload();":'document.addEventListener("DOMContentLoaded", onload, false );')+"\x3c/script\x3e";CKEDITOR.env.ie&&9>CKEDITOR.env.version&&(h+='\x3cscript id\x3d"cke_shimscrpt"\x3ewindow.parent.CKEDITOR.tools.enableHtml5Elements(document)\x3c/script\x3e');n&&CKEDITOR.env.ie&&10>CKEDITOR.env.version&&(h+='\x3cscript id\x3d"cke_basetagscrpt"\x3evar baseTag \x3d document.querySelector( "base" );baseTag.href \x3d baseTag.href;\x3c/script\x3e');
+a=a.replace(/(?=\s*<\/(:?head)>)/,h);this.clearCustomData();this.clearListeners();e.fire("contentDomUnload");var y=this.getDocument();try{y.write(a)}catch(v){setTimeout(function(){y.write(a)},0)}}},getData:function(a){if(a)return this.getHtml();a=this.editor;var b=a.config,e=b.fullPage,f=e&&a.docType,c=e&&a.xmlDeclaration,d=this.getDocument(),e=e?d.getDocumentElement().getOuterHtml():d.getBody().getHtml();CKEDITOR.env.gecko&&b.enterMode!=CKEDITOR.ENTER_BR&&(e=e.replace(/<br>(?=\s*(:?$|<\/body>))/,
+""));e=a.dataProcessor.toDataFormat(e);c&&(e=c+"\n"+e);f&&(e=f+"\n"+e);return e},focus:function(){this._.isLoadingData?this._.isPendingFocus=!0:e.baseProto.focus.call(this)},detach:function(){if(!this.preserveIframe){var a=this.editor,b=a.document,a=a.container.findOne("iframe.cke_wysiwyg_frame");e.baseProto.detach.call(this);this.clearCustomData(this._.expandoNumber);b.getDocumentElement().clearCustomData();CKEDITOR.tools.removeFunction(this._.frameLoadedHandler);a&&(a.clearCustomData(),(b=a.removeCustomData("onResize"))&&
+b.removeListener(),a.isDetached()||a.remove())}}}})}(),CKEDITOR.config.disableObjectResizing=!1,CKEDITOR.config.disableNativeTableHandles=!0,CKEDITOR.config.disableNativeSpellChecker=!0,CKEDITOR.config.observableParent=CKEDITOR.document.$,CKEDITOR.config.plugins="dialogui,dialog,a11yhelp,about,autogrow,basicstyles,blockquote,notification,button,toolbar,clipboard,panel,floatpanel,menu,contextmenu,elementspath,enterkey,entities,popup,filetools,filebrowser,floatingspace,listblock,richcombo,format,horizontalrule,htmlwriter,lineutils,widgetselection,widget,image2,indent,indentlist,justify,menubutton,language,list,magicline,maximize,xml,ajax,pastetools,pastefromgdocs,pastefromlibreoffice,pastefromword,pastetext,removeformat,sharedspace,showblocks,showborders,sourcearea,sourcedialog,specialchar,stylescombo,tab,table,tabletools,tableresize,undo,wysiwygarea",
 CKEDITOR.config.skin="moono-lisa",function(){var b=function(b,f){var e=CKEDITOR.getUrl("plugins/"+f);b=b.split(",");for(var a=0;a<b.length;a++)CKEDITOR.skin.icons[b[a]]={path:e,offset:-b[++a],bgsize:b[++a]}};CKEDITOR.env.hidpi?b("about,0,,bold,24,,italic,48,,strike,72,,subscript,96,,superscript,120,,underline,144,,blockquote,168,,copy-rtl,192,,copy,216,,cut-rtl,240,,cut,264,,paste-rtl,288,,paste,312,,horizontalrule,336,,image,360,,indent-rtl,384,,indent,408,,outdent-rtl,432,,outdent,456,,justifyblock,480,,justifycenter,504,,justifyleft,528,,justifyright,552,,language,576,,bulletedlist-rtl,600,,bulletedlist,624,,numberedlist-rtl,648,,numberedlist,672,,maximize,696,,pastefromword-rtl,720,,pastefromword,744,,pastetext-rtl,768,,pastetext,792,,removeformat,816,,showblocks-rtl,840,,showblocks,864,,source-rtl,888,,source,912,,sourcedialog-rtl,936,,sourcedialog,960,,specialchar,984,,table,1008,,redo-rtl,1032,,redo,1056,,undo-rtl,1080,,undo,1104,,simplebox,2256,auto",
 "icons_hidpi.png"):b("about,0,auto,bold,24,auto,italic,48,auto,strike,72,auto,subscript,96,auto,superscript,120,auto,underline,144,auto,blockquote,168,auto,copy-rtl,192,auto,copy,216,auto,cut-rtl,240,auto,cut,264,auto,paste-rtl,288,auto,paste,312,auto,horizontalrule,336,auto,image,360,auto,indent-rtl,384,auto,indent,408,auto,outdent-rtl,432,auto,outdent,456,auto,justifyblock,480,auto,justifycenter,504,auto,justifyleft,528,auto,justifyright,552,auto,language,576,auto,bulletedlist-rtl,600,auto,bulletedlist,624,auto,numberedlist-rtl,648,auto,numberedlist,672,auto,maximize,696,auto,pastefromword-rtl,720,auto,pastefromword,744,auto,pastetext-rtl,768,auto,pastetext,792,auto,removeformat,816,auto,showblocks-rtl,840,auto,showblocks,864,auto,source-rtl,888,auto,source,912,auto,sourcedialog-rtl,936,auto,sourcedialog,960,auto,specialchar,984,auto,table,1008,auto,redo-rtl,1032,auto,redo,1056,auto,undo-rtl,1080,auto,undo,1104,auto,simplebox,1128,auto",
 "icons.png")}())})();
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/af.js b/core/assets/vendor/ckeditor/lang/af.js
index 910c018b9ade..7be63469b732 100644
--- a/core/assets/vendor/ckeditor/lang/af.js
+++ b/core/assets/vendor/ckeditor/lang/af.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['af']={"widget":{"move":"Klik en trek on te beweeg","label":"%1 widget"},"undo":{"redo":"Oordoen","undo":"Ontdoen"},"toolbar":{"toolbarCollapse":"Verklein werkbalk","toolbarExpand":"Vergroot werkbalk","toolbarGroups":{"document":"Dokument","clipboard":"Knipbord/Undo","editing":"Verander","forms":"Vorms","basicstyles":"Eenvoudige Styl","paragraph":"Paragraaf","links":"Skakels","insert":"Toevoeg","styles":"Style","colors":"Kleure","tools":"Gereedskap"},"toolbars":"Werkbalke"},"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","heightUnit":"height unit","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"},"stylescombo":{"label":"Styl","panelTitle":"Vormaat style","panelTitle1":"Blok style","panelTitle2":"Inlyn style","panelTitle3":"Objek style"},"specialchar":{"options":"Spesiale karakter-opsies","title":"Kies spesiale karakter","toolbar":"Voeg spesiaale karakter in"},"sourcedialog":{"toolbar":"Bron","title":"Bron"},"sourcearea":{"toolbar":"Bron"},"showblocks":{"toolbar":"Toon blokke"},"removeformat":{"toolbar":"Verwyder opmaak"},"pastetext":{"button":"Voeg by as eenvoudige teks","pasteNotification":"Druk %1 om by te voeg. Jou leser ondersteun nie byvoeg deur die toolbar knoppie of die konteks kieslys nie","title":"Voeg by as eenvoudige teks"},"pastefromword":{"confirmCleanup":"Die teks wat u wil byvoeg lyk asof dit uit Word gekopiëer is. Wil u dit eers skoonmaak voordat dit bygevoeg word?","error":"Die bygevoegte teks kon nie skoongemaak word nie, weens 'n interne fout","title":"Uit Word byvoeg","toolbar":"Uit Word byvoeg"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maksimaliseer","minimize":"Minimaliseer"},"magicline":{"title":"Voeg paragraaf hier in"},"list":{"bulletedlist":"Ongenommerde lys","numberedlist":"Genommerde lys"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"Vergroot inspring","outdent":"Verklein inspring"},"image2":{"alt":"Alternatiewe teks","btnUpload":"Stuur na bediener","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Afbeelding informasie","lockRatio":"Vaste proporsie","menu":"Afbeelding eienskappe","pathName":"image","pathNameCaption":"caption","resetSize":"Herstel grootte","resizer":"Click and drag to resize","title":"Afbeelding eienskappe","uploadTab":"Oplaai","urlMissing":"Die URL na die afbeelding ontbreek.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Horisontale lyn invoeg"},"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"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elemente-pad","eleTitle":"%1 element"},"contextmenu":{"options":"Konteks Spyskaart-opsies"},"clipboard":{"copy":"Kopiëer","copyError":"U leser se sekuriteitsinstelling belet die kopiëringsaksie. Gebruik die sleutelbordkombinasie (Ctrl/Cmd+C).","cut":"Uitsnei","cutError":"U leser se sekuriteitsinstelling belet die outomatiese uitsnei-aksie. Gebruik die sleutelbordkombinasie (Ctrl/Cmd+X).","paste":"Byvoeg","pasteNotification":"Druk %1 om by te voeg. You leser ondersteun nie die toolbar knoppie of inoud kieslysie opsie nie. ","pasteArea":"Area byvoeg","pasteMsg":"Voeg jou inhoud in die gebied onder by en druk OK"},"blockquote":{"toolbar":"Sitaatblok"},"basicstyles":{"bold":"Vet","italic":"Skuins","strike":"Deurgestreep","subscript":"Onderskrif","superscript":"Bo-skrif","underline":"Onderstreep"},"about":{"copy":"Kopiereg &copy; $1. Alle regte voorbehou.","dlgTitle":"Meer oor CKEditor 4","moreInfo":"Vir lisensie-informasie, besoek asb. ons webwerf:"},"editor":"Woordverwerker","editorPanel":"Woordverwerkerpaneel","common":{"editorHelp":"Druk op ALT 0 vir hulp","browseServer":"Blaai op bediener","url":"URL","protocol":"Protokol","upload":"Oplaai","uploadSubmit":"Stuur aan die bediener","image":"Beeld","flash":"Flash","form":"Vorm","checkbox":"Merkhokkie","radio":"Radioknoppie","textField":"Teksveld","textarea":"Teksarea","hiddenField":"Versteekteveld","button":"Knop","select":"Keuseveld","imageButton":"Beeldknop","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":"Skalierung","generalTab":"Algemeen","advancedTab":"Gevorderd","validateNumberFailed":"Hierdie waarde is nie 'n nommer nie.","confirmNewPage":"Alle wysiginge sal verlore gaan. Is jy seker dat jy 'n nuwe bladsy wil laai?","confirmCancel":"Sommige opsies is gewysig. Is jy seker dat jy hierdie dialoogvenster wil sluit?","options":"Opsies","target":"Teiken","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":"Orienteerung","left":"Links","right":"Regs","center":"Middel","justify":"Eweredig","alignLeft":"Links oplyn","alignRight":"Regs oplyn","alignCenter":"Middel oplyn","alignTop":"Bo","alignMiddle":"Middel","alignBottom":"Onder","alignNone":"Geen","invalidValue":"Ongeldige waarde","invalidHeight":"Hoogte moet 'n getal wees","invalidWidth":"Breedte moet 'n getal wees.","invalidLength":"Die waarde vir die veld \"%1\" moet 'n  posetiewe nommer wees met of sonder die meeteenheid (%2).","invalidCssLength":"Die waarde vir die \"%1\" veld moet 'n posetiewe getal wees met of sonder 'n geldige CSS eenheid (px, %, in, cm, mm, em, ex, pt, of pc).","invalidHtmlLength":"Die waarde vir die  \"%1\" veld moet 'n posetiewe getal wees met of sonder 'n geldige HTML eenheid (px of %).","invalidInlineStyle":"Ongeldige CSS. Formaat is een of meer sleutel-wert paare, \"naam : wert\" met kommapunte gesky.","cssLengthTooltip":"Voeg 'n getal wert in pixel in, of 'n waarde met geldige CSS eenheid (px, %, in, cm, mm, em, ex, pt, of pc).","unavailable":"%1<span class=\"cke_accessibility\">, nie beskikbaar nie</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Skuif","17":"Ctrl","18":"Alt","32":"Spasie","35":"Einde","36":"Tuis","46":"Verwyder","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Bevel"},"keyboardShortcut":"Sleutel kombenasie","optionDefault":"Verstek"}};
\ No newline at end of file
+CKEDITOR.lang['af']={"widget":{"move":"Klik en trek on te beweeg","label":"%1 widget"},"undo":{"redo":"Oordoen","undo":"Ontdoen"},"toolbar":{"toolbarCollapse":"Verklein werkbalk","toolbarExpand":"Vergroot werkbalk","toolbarGroups":{"document":"Dokument","clipboard":"Knipbord/Undo","editing":"Verander","forms":"Vorms","basicstyles":"Eenvoudige Styl","paragraph":"Paragraaf","links":"Skakels","insert":"Toevoeg","styles":"Style","colors":"Kleure","tools":"Gereedskap"},"toolbars":"Werkbalke"},"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","heightUnit":"height unit","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"},"stylescombo":{"label":"Styl","panelTitle":"Vormaat style","panelTitle1":"Blok style","panelTitle2":"Inlyn style","panelTitle3":"Objek style"},"specialchar":{"options":"Spesiale karakter-opsies","title":"Kies spesiale karakter","toolbar":"Voeg spesiaale karakter in"},"sourcedialog":{"toolbar":"Bron","title":"Bron"},"sourcearea":{"toolbar":"Bron"},"showblocks":{"toolbar":"Toon blokke"},"removeformat":{"toolbar":"Verwyder opmaak"},"pastetext":{"button":"Voeg by as eenvoudige teks","pasteNotification":"Druk %1 om by te voeg. Jou leser ondersteun nie byvoeg deur die toolbar knoppie of die konteks kieslys nie","title":"Voeg by as eenvoudige teks"},"pastefromword":{"confirmCleanup":"Die teks wat u wil byvoeg lyk asof dit uit Word gekopiëer is. Wil u dit eers skoonmaak voordat dit bygevoeg word?","error":"Die bygevoegte teks kon nie skoongemaak word nie, weens 'n interne fout","title":"Uit Word byvoeg","toolbar":"Uit Word byvoeg"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maksimaliseer","minimize":"Minimaliseer"},"magicline":{"title":"Voeg paragraaf hier in"},"list":{"bulletedlist":"Ongenommerde lys","numberedlist":"Genommerde lys"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"Vergroot inspring","outdent":"Verklein inspring"},"image2":{"alt":"Alternatiewe teks","btnUpload":"Stuur na bediener","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Afbeelding informasie","lockRatio":"Vaste proporsie","menu":"Afbeelding eienskappe","pathName":"image","pathNameCaption":"caption","resetSize":"Herstel grootte","resizer":"Click and drag to resize","title":"Afbeelding eienskappe","uploadTab":"Oplaai","urlMissing":"Die URL na die afbeelding ontbreek.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Horisontale lyn invoeg"},"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"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elemente-pad","eleTitle":"%1 element"},"contextmenu":{"options":"Konteks Spyskaart-opsies"},"clipboard":{"copy":"Kopiëer","copyError":"U leser se sekuriteitsinstelling belet die kopiëringsaksie. Gebruik die sleutelbordkombinasie (Ctrl/Cmd+C).","cut":"Uitsnei","cutError":"U leser se sekuriteitsinstelling belet die outomatiese uitsnei-aksie. Gebruik die sleutelbordkombinasie (Ctrl/Cmd+X).","paste":"Byvoeg","pasteNotification":"Druk %1 om by te voeg. You leser ondersteun nie die toolbar knoppie of inoud kieslysie opsie nie. ","pasteArea":"Area byvoeg","pasteMsg":"Voeg jou inhoud in die gebied onder by en druk OK","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Sitaatblok"},"basicstyles":{"bold":"Vet","italic":"Skuins","strike":"Deurgestreep","subscript":"Onderskrif","superscript":"Bo-skrif","underline":"Onderstreep"},"about":{"copy":"Kopiereg &copy; $1. Alle regte voorbehou.","dlgTitle":"Meer oor CKEditor 4","moreInfo":"Vir lisensie-informasie, besoek asb. ons webwerf:"},"editor":"Woordverwerker","editorPanel":"Woordverwerkerpaneel","common":{"editorHelp":"Druk op ALT 0 vir hulp","browseServer":"Blaai op bediener","url":"URL","protocol":"Protokol","upload":"Oplaai","uploadSubmit":"Stuur aan die bediener","image":"Beeld","form":"Vorm","checkbox":"Merkhokkie","radio":"Radioknoppie","textField":"Teksveld","textarea":"Teksarea","hiddenField":"Versteekteveld","button":"Knop","select":"Keuseveld","imageButton":"Beeldknop","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":"Skalierung","generalTab":"Algemeen","advancedTab":"Gevorderd","validateNumberFailed":"Hierdie waarde is nie 'n nommer nie.","confirmNewPage":"Alle wysiginge sal verlore gaan. Is jy seker dat jy 'n nuwe bladsy wil laai?","confirmCancel":"Sommige opsies is gewysig. Is jy seker dat jy hierdie dialoogvenster wil sluit?","options":"Opsies","target":"Teiken","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":"Orienteerung","left":"Links","right":"Regs","center":"Middel","justify":"Eweredig","alignLeft":"Links oplyn","alignRight":"Regs oplyn","alignCenter":"Middel oplyn","alignTop":"Bo","alignMiddle":"Middel","alignBottom":"Onder","alignNone":"Geen","invalidValue":"Ongeldige waarde","invalidHeight":"Hoogte moet 'n getal wees","invalidWidth":"Breedte moet 'n getal wees.","invalidLength":"Die waarde vir die veld \"%1\" moet 'n  posetiewe nommer wees met of sonder die meeteenheid (%2).","invalidCssLength":"Die waarde vir die \"%1\" veld moet 'n posetiewe getal wees met of sonder 'n geldige CSS eenheid (px, %, in, cm, mm, em, ex, pt, of pc).","invalidHtmlLength":"Die waarde vir die  \"%1\" veld moet 'n posetiewe getal wees met of sonder 'n geldige HTML eenheid (px of %).","invalidInlineStyle":"Ongeldige CSS. Formaat is een of meer sleutel-wert paare, \"naam : wert\" met kommapunte gesky.","cssLengthTooltip":"Voeg 'n getal wert in pixel in, of 'n waarde met geldige CSS eenheid (px, %, in, cm, mm, em, ex, pt, of pc).","unavailable":"%1<span class=\"cke_accessibility\">, nie beskikbaar nie</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Skuif","17":"Ctrl","18":"Alt","32":"Spasie","35":"Einde","36":"Tuis","46":"Verwyder","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Bevel"},"keyboardShortcut":"Sleutel kombenasie","optionDefault":"Verstek"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/ar.js b/core/assets/vendor/ckeditor/lang/ar.js
index eada9eb5a142..af582955df44 100644
--- a/core/assets/vendor/ckeditor/lang/ar.js
+++ b/core/assets/vendor/ckeditor/lang/ar.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['ar']={"widget":{"move":"إضغط و إسحب للتحريك","label":"%1 widget"},"undo":{"redo":"إعادة","undo":"تراجع"},"toolbar":{"toolbarCollapse":"تقليص شريط الأدوت","toolbarExpand":"تمديد شريط الأدوات","toolbarGroups":{"document":"مستند","clipboard":"الحافظة/الرجوع","editing":"تحرير","forms":"نماذج","basicstyles":"نمط بسيط","paragraph":"فقرة","links":"روابط","insert":"إدراج","styles":"أنماط","colors":"ألوان","tools":"أدوات"},"toolbars":"أشرطة أدوات المحرر"},"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":"الصف الأول","heightUnit":"height unit","invalidBorder":"حجم الحد يجب أن يكون عدداً.","invalidCellPadding":"المسافة البادئة يجب أن تكون عدداً","invalidCellSpacing":"المسافة بين الخلايا يجب أن تكون عدداً.","invalidCols":"عدد الأعمدة يجب أن يكون عدداً أكبر من صفر.","invalidHeight":"ارتفاع الجدول يجب أن يكون عدداً.","invalidRows":"عدد الصفوف يجب أن يكون عدداً أكبر من صفر.","invalidWidth":"عرض الجدول يجب أن يكون عدداً.","menu":"خصائص الجدول","row":{"menu":"صف","insertBefore":"إدراج صف قبل","insertAfter":"إدراج صف بعد","deleteRow":"حذف صفوف"},"rows":"صفوف","summary":"الخلاصة","title":"خصائص الجدول","toolbar":"جدول","widthPc":"بالمئة","widthPx":"بكسل","widthUnit":"وحدة العرض"},"stylescombo":{"label":"أنماط","panelTitle":"أنماط التنسيق","panelTitle1":"أنماط الفقرة","panelTitle2":"أنماط مضمنة","panelTitle3":"أنماط الكائن"},"specialchar":{"options":"خيارات الأحرف الخاصة","title":"اختر حرف خاص","toolbar":"إدراج  حرف خاص"},"sourcedialog":{"toolbar":"المصدر","title":"المصدر"},"sourcearea":{"toolbar":"المصدر"},"showblocks":{"toolbar":"مخطط تفصيلي"},"removeformat":{"toolbar":"إزالة التنسيقات"},"pastetext":{"button":"لصق كنص بسيط","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"لصق كنص بسيط"},"pastefromword":{"confirmCleanup":"يبدو أن النص المراد لصقه منسوخ من برنامج وورد. هل تود تنظيفه قبل الشروع في عملية اللصق؟","error":"لم يتم مسح المعلومات الملصقة لخلل داخلي","title":"لصق من وورد","toolbar":"لصق من وورد"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"تكبير","minimize":"تصغير"},"magicline":{"title":"إدراج فقرة هنا"},"list":{"bulletedlist":"ادخال/حذف تعداد نقطي","numberedlist":"ادخال/حذف تعداد رقمي"},"language":{"button":"حدد اللغة","remove":"حذف اللغة"},"indent":{"indent":"زيادة المسافة البادئة","outdent":"إنقاص المسافة البادئة"},"image2":{"alt":"عنوان الصورة","btnUpload":"أرسلها للخادم","captioned":"صورة ذات اسم","captionPlaceholder":"تسمية","infoTab":"معلومات الصورة","lockRatio":"تناسق الحجم","menu":"خصائص الصورة","pathName":"صورة","pathNameCaption":"تسمية","resetSize":"إستعادة الحجم الأصلي","resizer":"انقر ثم اسحب للتحجيم","title":"خصائص الصورة","uploadTab":"رفع","urlMissing":"عنوان مصدر الصورة مفقود","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"خط فاصل"},"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":"منسّق"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"مسار العنصر","eleTitle":"عنصر 1%"},"contextmenu":{"options":"خصائص قائمة السياق"},"clipboard":{"copy":"نسخ","copyError":"الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع عمليات النسخ التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl/Cmd+C).","cut":"قص","cutError":"الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع القص التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl/Cmd+X).","paste":"لصق","pasteNotification":"اضغط %1 للصق. اللصق عن طريق شريط الادوات او القائمة غير مدعوم من المتصفح المستخدم من قبلك.","pasteArea":"منطقة اللصق","pasteMsg":"الصق المحتوى بداخل المساحة المخصصة ادناه ثم اضغط على OK"},"blockquote":{"toolbar":"اقتباس"},"basicstyles":{"bold":"عريض","italic":"مائل","strike":"يتوسطه خط","subscript":"منخفض","superscript":"مرتفع","underline":"تسطير"},"about":{"copy":"حقوق النشر &copy; $1. جميع الحقوق محفوظة.","dlgTitle":"عن CKEditor","moreInfo":"للحصول على معلومات الترخيص ، يرجى زيارة موقعنا:"},"editor":"محرر النص الغني","editorPanel":"لائحة محرر النص المنسق","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":"نافذة جديدة","targetTop":"النافذة الأعلى","targetSelf":"داخل النافذة","targetParent":"النافذة الأم","langDirLTR":"اليسار لليمين (LTR)","langDirRTL":"اليمين لليسار (RTL)","styles":"نمط","cssClasses":"فئات التنسيق","width":"العرض","height":"الإرتفاع","align":"محاذاة","left":"يسار","right":"يمين","center":"وسط","justify":"ضبط","alignLeft":"محاذاة إلى اليسار","alignRight":"محاذاة إلى اليمين","alignCenter":"Align Center","alignTop":"أعلى","alignMiddle":"وسط","alignBottom":"أسفل","alignNone":"None","invalidValue":"قيمة غير مفبولة.","invalidHeight":"الارتفاع يجب أن يكون عدداً.","invalidWidth":"العرض يجب أن يكون عدداً.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"قيمة الخانة المخصصة لـ \"%1\" يجب أن تكون رقما موجبا، باستخدام أو من غير استخدام وحدة CSS قياس مقبولة (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"قيمة الخانة المخصصة لـ \"%1\" يجب أن تكون رقما موجبا، باستخدام أو من غير استخدام وحدة HTML قياس مقبولة (px or %).","invalidInlineStyle":"قيمة الخانة المخصصة لـ  Inline Style يجب أن تختوي على مجموع واحد أو أكثر بالشكل التالي: \"name : value\", مفصولة بفاصلة منقزطة.","cssLengthTooltip":"أدخل رقما للقيمة بالبكسل أو رقما بوحدة CSS مقبولة (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, غير متاح</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
+CKEDITOR.lang['ar']={"widget":{"move":"إضغط و إسحب للتحريك","label":"%1 widget"},"undo":{"redo":"إعادة","undo":"تراجع"},"toolbar":{"toolbarCollapse":"تقليص شريط الأدوت","toolbarExpand":"تمديد شريط الأدوات","toolbarGroups":{"document":"مستند","clipboard":"الحافظة/الرجوع","editing":"تحرير","forms":"نماذج","basicstyles":"نمط بسيط","paragraph":"فقرة","links":"روابط","insert":"إدراج","styles":"أنماط","colors":"ألوان","tools":"أدوات"},"toolbars":"أشرطة أدوات المحرر"},"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":"الصف الأول","heightUnit":"height unit","invalidBorder":"حجم الحد يجب أن يكون عدداً.","invalidCellPadding":"المسافة البادئة يجب أن تكون عدداً","invalidCellSpacing":"المسافة بين الخلايا يجب أن تكون عدداً.","invalidCols":"عدد الأعمدة يجب أن يكون عدداً أكبر من صفر.","invalidHeight":"ارتفاع الجدول يجب أن يكون عدداً.","invalidRows":"عدد الصفوف يجب أن يكون عدداً أكبر من صفر.","invalidWidth":"عرض الجدول يجب أن يكون عدداً.","menu":"خصائص الجدول","row":{"menu":"صف","insertBefore":"إدراج صف قبل","insertAfter":"إدراج صف بعد","deleteRow":"حذف صفوف"},"rows":"صفوف","summary":"الخلاصة","title":"خصائص الجدول","toolbar":"جدول","widthPc":"بالمئة","widthPx":"بكسل","widthUnit":"وحدة العرض"},"stylescombo":{"label":"أنماط","panelTitle":"أنماط التنسيق","panelTitle1":"أنماط الفقرة","panelTitle2":"أنماط مضمنة","panelTitle3":"أنماط الكائن"},"specialchar":{"options":"خيارات الأحرف الخاصة","title":"اختر حرف خاص","toolbar":"إدراج  حرف خاص"},"sourcedialog":{"toolbar":"المصدر","title":"المصدر"},"sourcearea":{"toolbar":"المصدر"},"showblocks":{"toolbar":"مخطط تفصيلي"},"removeformat":{"toolbar":"إزالة التنسيقات"},"pastetext":{"button":"لصق كنص بسيط","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"لصق كنص بسيط"},"pastefromword":{"confirmCleanup":"يبدو أن النص المراد لصقه منسوخ من برنامج وورد. هل تود تنظيفه قبل الشروع في عملية اللصق؟","error":"لم يتم مسح المعلومات الملصقة لخلل داخلي","title":"لصق من وورد","toolbar":"لصق من وورد"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"تكبير","minimize":"تصغير"},"magicline":{"title":"إدراج فقرة هنا"},"list":{"bulletedlist":"ادخال/حذف تعداد نقطي","numberedlist":"ادخال/حذف تعداد رقمي"},"language":{"button":"حدد اللغة","remove":"حذف اللغة"},"indent":{"indent":"زيادة المسافة البادئة","outdent":"إنقاص المسافة البادئة"},"image2":{"alt":"عنوان الصورة","btnUpload":"أرسلها للخادم","captioned":"صورة ذات اسم","captionPlaceholder":"تسمية","infoTab":"معلومات الصورة","lockRatio":"تناسق الحجم","menu":"خصائص الصورة","pathName":"صورة","pathNameCaption":"تسمية","resetSize":"إستعادة الحجم الأصلي","resizer":"انقر ثم اسحب للتحجيم","title":"خصائص الصورة","uploadTab":"رفع","urlMissing":"عنوان مصدر الصورة مفقود","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"خط فاصل"},"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":"منسّق"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"مسار العنصر","eleTitle":"عنصر 1%"},"contextmenu":{"options":"خصائص قائمة السياق"},"clipboard":{"copy":"نسخ","copyError":"الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع عمليات النسخ التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl/Cmd+C).","cut":"قص","cutError":"الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع القص التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl/Cmd+X).","paste":"لصق","pasteNotification":"اضغط %1 للصق. اللصق عن طريق شريط الادوات او القائمة غير مدعوم من المتصفح المستخدم من قبلك.","pasteArea":"منطقة اللصق","pasteMsg":"الصق المحتوى بداخل المساحة المخصصة ادناه ثم اضغط على OK","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"اقتباس"},"basicstyles":{"bold":"عريض","italic":"مائل","strike":"يتوسطه خط","subscript":"منخفض","superscript":"مرتفع","underline":"تسطير"},"about":{"copy":"حقوق النشر &copy; $1. جميع الحقوق محفوظة.","dlgTitle":"عن CKEditor","moreInfo":"للحصول على معلومات الترخيص ، يرجى زيارة موقعنا:"},"editor":"محرر النص الغني","editorPanel":"لائحة محرر النص المنسق","common":{"editorHelp":"إضغط على ALT + 0 للحصول على المساعدة.","browseServer":"تصفح","url":"الرابط","protocol":"البروتوكول","upload":"رفع","uploadSubmit":"أرسل","image":"صورة","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":"نافذة جديدة","targetTop":"النافذة الأعلى","targetSelf":"داخل النافذة","targetParent":"النافذة الأم","langDirLTR":"اليسار لليمين (LTR)","langDirRTL":"اليمين لليسار (RTL)","styles":"نمط","cssClasses":"فئات التنسيق","width":"العرض","height":"الإرتفاع","align":"محاذاة","left":"يسار","right":"يمين","center":"وسط","justify":"ضبط","alignLeft":"محاذاة إلى اليسار","alignRight":"محاذاة إلى اليمين","alignCenter":"Align Center","alignTop":"أعلى","alignMiddle":"وسط","alignBottom":"أسفل","alignNone":"None","invalidValue":"قيمة غير مفبولة.","invalidHeight":"الارتفاع يجب أن يكون عدداً.","invalidWidth":"العرض يجب أن يكون عدداً.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"قيمة الخانة المخصصة لـ \"%1\" يجب أن تكون رقما موجبا، باستخدام أو من غير استخدام وحدة CSS قياس مقبولة (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"قيمة الخانة المخصصة لـ \"%1\" يجب أن تكون رقما موجبا، باستخدام أو من غير استخدام وحدة HTML قياس مقبولة (px or %).","invalidInlineStyle":"قيمة الخانة المخصصة لـ  Inline Style يجب أن تختوي على مجموع واحد أو أكثر بالشكل التالي: \"name : value\", مفصولة بفاصلة منقزطة.","cssLengthTooltip":"أدخل رقما للقيمة بالبكسل أو رقما بوحدة CSS مقبولة (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, غير متاح</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/az.js b/core/assets/vendor/ckeditor/lang/az.js
index 5783faafca96..b2a25fa1ecfb 100644
--- a/core/assets/vendor/ckeditor/lang/az.js
+++ b/core/assets/vendor/ckeditor/lang/az.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['az']={"widget":{"move":"Tıklayın və aparın","label":"%1 vidjet"},"undo":{"redo":"Təkrar et","undo":"İmtina et"},"toolbar":{"toolbarCollapse":"Paneli gizlət","toolbarExpand":"Paneli göstər","toolbarGroups":{"document":"Mətn","clipboard":"Mübadilə buferi/İmtina et","editing":"Redaktə edilməsi","forms":"Formalar","basicstyles":"Əsas üslublar","paragraph":"Abzas","links":"Link","insert":"Əlavə et","styles":"Üslublar","colors":"Rənqlər","tools":"Alətləri"},"toolbars":"Redaktorun panelləri"},"table":{"border":"Sərhədlərin eni","caption":"Cədvəlin başlığı","cell":{"menu":"Xana","insertBefore":"Burdan əvvələ xanası çək","insertAfter":"Burdan sonra xanası çək","deleteCell":"Xanaları sil","merge":"Xanaları birləşdir","mergeRight":"Sağdan birləşdir","mergeDown":"Soldan birləşdir","splitHorizontal":"Üfüqi böl","splitVertical":"Şaquli böl","title":"Xanaların seçimləri","cellType":"Xana növü","rowSpan":"Sətirləri birləşdir","colSpan":"Sütunları birləşdir","wordWrap":"Sətirlərin sınması","hAlign":"Üfüqi düzləndirmə","vAlign":"Şaquli düzləndirmə","alignBaseline":"Mətn xətti","bgColor":"Doldurma rəngi","borderColor":"Sərhədin rəngi","data":"Məlumatlar","header":"Başlıq","yes":"Bəli","no":"Xeyr","invalidWidth":"Xanasın eni rəqəm olmalıdır.","invalidHeight":"Xanasın hündürlüyü rəqəm olmalıdır.","invalidRowSpan":"Birləşdirdiyiniz sütun xanaların sayı tam və müsbət rəqəm olmalıdır.","invalidColSpan":"Birləşdirdiyiniz sətir xanaların sayı tam və müsbət rəqəm olmalıdır.","chooseColor":"Seç"},"cellPad":"Xanalardakı kənar boşluqlar","cellSpace":"Xanalararası interval","column":{"menu":"Sütun","insertBefore":"Sola sütun əlavə et","insertAfter":"Sağa sütun əlavə et","deleteColumn":"Sütunları sil"},"columns":"Sütunlar","deleteTable":"Cədvəli sil","headers":"Başlıqlar","headersBoth":"Hər ikisi","headersColumn":"Birinci sütun","headersNone":"yox","headersRow":"Birinci sətir","heightUnit":"height unit","invalidBorder":"Sərhədlərin eni müsbət rəqəm olmalıdır.","invalidCellPadding":"Xanalardakı kənar boşluqlar müsbət rəqəm olmalıdır.","invalidCellSpacing":"Xanalararası interval müsbət rəqəm olmalıdır.","invalidCols":"Sütunlarin sayı tam və müsbət olmalıdır.","invalidHeight":"Cədvəlin hündürlüyü rəqəm olmalıdır.","invalidRows":"Sətirlətin sayı tam və müsbət olmalıdır.","invalidWidth":"Cədvəlin eni rəqəm olmalıdır.","menu":"Cədvəl alətləri","row":{"menu":"Sətir","insertBefore":"Yuxarıya sətir əlavə et","insertAfter":"Aşağıya sətir əlavə et","deleteRow":"Sətirləri sil"},"rows":"Sətirlər","summary":"Xülasə","title":"Cədvəl alətləri","toolbar":"Cədvəl","widthPc":"faiz","widthPx":"piksel","widthUnit":"en vahidi"},"stylescombo":{"label":"Üslub","panelTitle":"Format üslubları","panelTitle1":"Blokların üslubları","panelTitle2":"Sözlərin üslubları","panelTitle3":"Obyektlərin üslubları"},"specialchar":{"options":"Xüsusi simvolların seçimləri","title":"Xüsusi simvolu seç","toolbar":"Xüsusi simvolu daxil et"},"sourcedialog":{"toolbar":"Mənbə","title":"Mənbə"},"sourcearea":{"toolbar":"HTML mənbəyini göstər"},"showblocks":{"toolbar":"Blokları göstər"},"removeformat":{"toolbar":"Formatı sil"},"pastetext":{"button":"Yalnız mətni saxla","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"Əlavə edilən mətn Word-dan köçürülənə oxşayır. Təmizləmək istəyirsinizmi?","error":"Daxili səhvə görə əlavə edilən məlumatların təmizlənməsi mümkün deyil","title":"Word-dan əlavəetmə","toolbar":"Word-dan əlavəetmə"},"notification":{"closed":"Xəbərdarlıq pəncərəsi bağlanıb"},"maximize":{"maximize":"Aşkarla","minimize":"Gizlət"},"magicline":{"title":"Abzası burada əlavə et"},"list":{"bulletedlist":"Markerlənmiş siyahını başlat/sil","numberedlist":"Nömrələnmiş siyahını başlat/sil"},"language":{"button":"Dilini təyin et","remove":"Dilini sil"},"indent":{"indent":"Sol boşluqu artır","outdent":"Sol boşluqu azalt"},"image2":{"alt":"Alternativ mətn","btnUpload":"Serverə göndər","captioned":"Altyazı olan şəkil","captionPlaceholder":"Altyazı","infoTab":"Şəkil haqqında məlumat","lockRatio":"Ölçülərin nisbəti saxla","menu":"Şəklin seçimləri","pathName":"Şəkil","pathNameCaption":"Altyazı","resetSize":"Ölçüləri qaytar","resizer":"Ölçülər dəyişmək üçün tıklayın və aparın","title":"Şəklin seçimləri","uploadTab":"Serverə yüklə","urlMissing":"Şəklin ünvanı yanlışdır.","altMissing":"Alternativ mətn tapılmayıb"},"horizontalrule":{"toolbar":"Sərhəd xətti yarat"},"format":{"label":"Format","panelTitle":"Abzasın formatı","tag_address":"Ünvan","tag_div":"Normal (DIV)","tag_h1":"Başlıq 1","tag_h2":"Başlıq 2","tag_h3":"Başlıq 3","tag_h4":"Başlıq 4","tag_h5":"Başlıq 5","tag_h6":"Başlıq 6","tag_p":"Normal","tag_pre":"Formatı saxla"},"filetools":{"loadError":"Faylını oxumaq mümkün deyil","networkError":"Xəta baş verdi.","httpError404":"Serverə göndərilməsinin zamanı xəta baş verdi (404 - fayl tapılmayıb)","httpError403":"Serverə göndərilməsinin zamanı xəta baş verdi (403 - gadağandır)","httpError":"Serverə göndərilməsinin zamanı xəta baş verdi (xətanın ststusu: %1)","noUrlError":"Yükləmə linki təyin edilməyib","responseError":"Serverin cavabı yanlışdır"},"elementspath":{"eleLabel":"Elementin izləri","eleTitle":"%1 element"},"contextmenu":{"options":"Əlavə əməliyyatlar"},"clipboard":{"copy":"Köçür","copyError":"Avtomatik köçürülməsi mümkün deyil. Ctrl+C basın.","cut":"Kəs","cutError":"Avtomatik kəsmə mümkün deyil. Ctrl+X basın.","paste":"Əlavə et","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Sitat bloku"},"basicstyles":{"bold":"Qalın","italic":"Kursiv","strike":"Üstüxətli","subscript":"Aşağı indeks","superscript":"Yuxarı indeks","underline":"Altdan xətt"},"about":{"copy":"Copyright &copy; $1. Bütün hüquqlar qorunur.","dlgTitle":"CKEditor haqqında","moreInfo":"Lisenziya informasiyası üçün zəhmət olmasa saytımızı ziyarət edin:"},"editor":"Mətn Redaktoru","editorPanel":"Mətn Redaktorun Paneli","common":{"editorHelp":"Yardım üçün ALT 0 düymələrini basın","browseServer":"Fayların siyahı","url":"URL","protocol":"Protokol","upload":"Serverə yüklə","uploadSubmit":"Göndər","image":"Şəkil","flash":"Flash","form":"Forma","checkbox":"Çekboks","radio":"Radio düyməsi","textField":"Mətn xanası","textarea":"Mətn","hiddenField":"Gizli xana","button":"Düymə","select":"Opsiyaların seçilməsi","imageButton":"Şəkil tipli düymə","notSet":"<seçilməmiş>","id":"Id","name":"Ad","langDir":"Yaziların istiqaməti","langDirLtr":"Soldan sağa (LTR)","langDirRtl":"Sağdan sola (RTL)","langCode":"Dilin kodu","longDescr":"URL-ın ətraflı izahı","cssClass":"CSS klassları","advisoryTitle":"Başlıq","cssStyle":"CSS","ok":"Tədbiq et","cancel":"İmtina et","close":"Bağla","preview":"Baxış","resize":"Eni dəyiş","generalTab":"Əsas","advancedTab":"Əlavə","validateNumberFailed":"Rəqəm deyil.","confirmNewPage":"Yadda saxlanılmamış dəyişikliklər itiriləcək. Davam etmək istədiyinizə əminsinizmi?","confirmCancel":"Dəyişikliklər edilib. Pəncərəni bağlamaq istəyirsizə əminsinizmi?","options":"Seçimlər","target":"Hədəf çərçivə","targetNew":"Yeni pəncərə (_blank)","targetTop":"Əsas pəncərə (_top)","targetSelf":"Carı pəncərə (_self)","targetParent":"Ana pəncərə (_parent)","langDirLTR":"Soldan sağa (LTR)","langDirRTL":"Sağdan sola (RTL)","styles":"Üslub","cssClasses":"Üslub klası","width":"En","height":"Uzunluq","align":"Yerləşmə","left":"Sol","right":"Sağ","center":"Mərkəz","justify":"Eninə görə","alignLeft":"Soldan düzləndir","alignRight":"Sağdan düzləndir","alignCenter":"Mərkəzə düzləndir","alignTop":"Yuxarı","alignMiddle":"Orta","alignBottom":"Aşağı","alignNone":"Yoxdur","invalidValue":"Yanlışdır.","invalidHeight":"Hündürlük rəqəm olmalıdır.","invalidWidth":"En rəqəm olmalıdır.","invalidLength":"\"%1\" xanasına, ölçü vahidinin (%2) göstərilməsindən asılı olmayaraq, müsbət ədəd qeyd olunmalıdır.","invalidCssLength":"\"%1\" xanasında göstərilən məzmun tam və müsbət olmalıdır, CSS-də olan ölçü vahidlərin (px, %, in, cm, mm, em, ex, pt, or pc) istifadısinə icazə verilir.","invalidHtmlLength":"\"%1\" xanasında göstərilən məzmun tam və müsbət olmalıdır HTML-də olan ölçü vahidlərin (px və ya %) istifadısinə icazə verilir.","invalidInlineStyle":"Teq içində olan üslub \"ad :  məzmun\" şəklidə, nöqtə-verqül işarəsi ilə bitməlidir","cssLengthTooltip":"Piksel sayı və ya digər CSS ölçü vahidləri (px, %, in, cm, mm, em, ex, pt, or pc) daxil edin.","unavailable":"%1<span class=\"cke_accessibility\">, mövcud deyil</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Boşluq","35":"Son","36":"Evə","46":"Sil","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Əmr"},"keyboardShortcut":"Qısayol düymələri","optionDefault":"Standart"}};
\ No newline at end of file
+CKEDITOR.lang['az']={"widget":{"move":"Tıklayın və aparın","label":"%1 vidjet"},"undo":{"redo":"Təkrar et","undo":"İmtina et"},"toolbar":{"toolbarCollapse":"Paneli gizlət","toolbarExpand":"Paneli göstər","toolbarGroups":{"document":"Mətn","clipboard":"Mübadilə buferi/İmtina et","editing":"Redaktə edilməsi","forms":"Formalar","basicstyles":"Əsas üslublar","paragraph":"Abzas","links":"Link","insert":"Əlavə et","styles":"Üslublar","colors":"Rənqlər","tools":"Alətləri"},"toolbars":"Redaktorun panelləri"},"table":{"border":"Sərhədlərin eni","caption":"Cədvəlin başlığı","cell":{"menu":"Xana","insertBefore":"Burdan əvvələ xanası çək","insertAfter":"Burdan sonra xanası çək","deleteCell":"Xanaları sil","merge":"Xanaları birləşdir","mergeRight":"Sağdan birləşdir","mergeDown":"Soldan birləşdir","splitHorizontal":"Üfüqi böl","splitVertical":"Şaquli böl","title":"Xanaların seçimləri","cellType":"Xana növü","rowSpan":"Sətirləri birləşdir","colSpan":"Sütunları birləşdir","wordWrap":"Sətirlərin sınması","hAlign":"Üfüqi düzləndirmə","vAlign":"Şaquli düzləndirmə","alignBaseline":"Mətn xətti","bgColor":"Doldurma rəngi","borderColor":"Sərhədin rəngi","data":"Məlumatlar","header":"Başlıq","yes":"Bəli","no":"Xeyr","invalidWidth":"Xanasın eni rəqəm olmalıdır.","invalidHeight":"Xanasın hündürlüyü rəqəm olmalıdır.","invalidRowSpan":"Birləşdirdiyiniz sütun xanaların sayı tam və müsbət rəqəm olmalıdır.","invalidColSpan":"Birləşdirdiyiniz sətir xanaların sayı tam və müsbət rəqəm olmalıdır.","chooseColor":"Seç"},"cellPad":"Xanalardakı kənar boşluqlar","cellSpace":"Xanalararası interval","column":{"menu":"Sütun","insertBefore":"Sola sütun əlavə et","insertAfter":"Sağa sütun əlavə et","deleteColumn":"Sütunları sil"},"columns":"Sütunlar","deleteTable":"Cədvəli sil","headers":"Başlıqlar","headersBoth":"Hər ikisi","headersColumn":"Birinci sütun","headersNone":"yox","headersRow":"Birinci sətir","heightUnit":"height unit","invalidBorder":"Sərhədlərin eni müsbət rəqəm olmalıdır.","invalidCellPadding":"Xanalardakı kənar boşluqlar müsbət rəqəm olmalıdır.","invalidCellSpacing":"Xanalararası interval müsbət rəqəm olmalıdır.","invalidCols":"Sütunlarin sayı tam və müsbət olmalıdır.","invalidHeight":"Cədvəlin hündürlüyü rəqəm olmalıdır.","invalidRows":"Sətirlətin sayı tam və müsbət olmalıdır.","invalidWidth":"Cədvəlin eni rəqəm olmalıdır.","menu":"Cədvəl alətləri","row":{"menu":"Sətir","insertBefore":"Yuxarıya sətir əlavə et","insertAfter":"Aşağıya sətir əlavə et","deleteRow":"Sətirləri sil"},"rows":"Sətirlər","summary":"Xülasə","title":"Cədvəl alətləri","toolbar":"Cədvəl","widthPc":"faiz","widthPx":"piksel","widthUnit":"en vahidi"},"stylescombo":{"label":"Üslub","panelTitle":"Format üslubları","panelTitle1":"Blokların üslubları","panelTitle2":"Sözlərin üslubları","panelTitle3":"Obyektlərin üslubları"},"specialchar":{"options":"Xüsusi simvolların seçimləri","title":"Xüsusi simvolu seç","toolbar":"Xüsusi simvolu daxil et"},"sourcedialog":{"toolbar":"Mənbə","title":"Mənbə"},"sourcearea":{"toolbar":"HTML mənbəyini göstər"},"showblocks":{"toolbar":"Blokları göstər"},"removeformat":{"toolbar":"Formatı sil"},"pastetext":{"button":"Yalnız mətni saxla","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"Əlavə edilən mətn Word-dan köçürülənə oxşayır. Təmizləmək istəyirsinizmi?","error":"Daxili səhvə görə əlavə edilən məlumatların təmizlənməsi mümkün deyil","title":"Word-dan əlavəetmə","toolbar":"Word-dan əlavəetmə"},"notification":{"closed":"Xəbərdarlıq pəncərəsi bağlanıb"},"maximize":{"maximize":"Aşkarla","minimize":"Gizlət"},"magicline":{"title":"Abzası burada əlavə et"},"list":{"bulletedlist":"Markerlənmiş siyahını başlat/sil","numberedlist":"Nömrələnmiş siyahını başlat/sil"},"language":{"button":"Dilini təyin et","remove":"Dilini sil"},"indent":{"indent":"Sol boşluqu artır","outdent":"Sol boşluqu azalt"},"image2":{"alt":"Alternativ mətn","btnUpload":"Serverə göndər","captioned":"Altyazı olan şəkil","captionPlaceholder":"Altyazı","infoTab":"Şəkil haqqında məlumat","lockRatio":"Ölçülərin nisbəti saxla","menu":"Şəklin seçimləri","pathName":"Şəkil","pathNameCaption":"Altyazı","resetSize":"Ölçüləri qaytar","resizer":"Ölçülər dəyişmək üçün tıklayın və aparın","title":"Şəklin seçimləri","uploadTab":"Serverə yüklə","urlMissing":"Şəklin ünvanı yanlışdır.","altMissing":"Alternativ mətn tapılmayıb"},"horizontalrule":{"toolbar":"Sərhəd xətti yarat"},"format":{"label":"Format","panelTitle":"Abzasın formatı","tag_address":"Ünvan","tag_div":"Normal (DIV)","tag_h1":"Başlıq 1","tag_h2":"Başlıq 2","tag_h3":"Başlıq 3","tag_h4":"Başlıq 4","tag_h5":"Başlıq 5","tag_h6":"Başlıq 6","tag_p":"Normal","tag_pre":"Formatı saxla"},"filetools":{"loadError":"Faylını oxumaq mümkün deyil","networkError":"Xəta baş verdi.","httpError404":"Serverə göndərilməsinin zamanı xəta baş verdi (404 - fayl tapılmayıb)","httpError403":"Serverə göndərilməsinin zamanı xəta baş verdi (403 - gadağandır)","httpError":"Serverə göndərilməsinin zamanı xəta baş verdi (xətanın ststusu: %1)","noUrlError":"Yükləmə linki təyin edilməyib","responseError":"Serverin cavabı yanlışdır"},"elementspath":{"eleLabel":"Elementin izləri","eleTitle":"%1 element"},"contextmenu":{"options":"Əlavə əməliyyatlar"},"clipboard":{"copy":"Köçür","copyError":"Avtomatik köçürülməsi mümkün deyil. Ctrl+C basın.","cut":"Kəs","cutError":"Avtomatik kəsmə mümkün deyil. Ctrl+X basın.","paste":"Əlavə et","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Sitat bloku"},"basicstyles":{"bold":"Qalın","italic":"Kursiv","strike":"Üstüxətli","subscript":"Aşağı indeks","superscript":"Yuxarı indeks","underline":"Altdan xətt"},"about":{"copy":"Copyright &copy; $1. Bütün hüquqlar qorunur.","dlgTitle":"CKEditor haqqında","moreInfo":"Lisenziya informasiyası üçün zəhmət olmasa saytımızı ziyarət edin:"},"editor":"Mətn Redaktoru","editorPanel":"Mətn Redaktorun Paneli","common":{"editorHelp":"Yardım üçün ALT 0 düymələrini basın","browseServer":"Fayların siyahı","url":"URL","protocol":"Protokol","upload":"Serverə yüklə","uploadSubmit":"Göndər","image":"Şəkil","form":"Forma","checkbox":"Çekboks","radio":"Radio düyməsi","textField":"Mətn xanası","textarea":"Mətn","hiddenField":"Gizli xana","button":"Düymə","select":"Opsiyaların seçilməsi","imageButton":"Şəkil tipli düymə","notSet":"<seçilməmiş>","id":"Id","name":"Ad","langDir":"Yaziların istiqaməti","langDirLtr":"Soldan sağa (LTR)","langDirRtl":"Sağdan sola (RTL)","langCode":"Dilin kodu","longDescr":"URL-ın ətraflı izahı","cssClass":"CSS klassları","advisoryTitle":"Başlıq","cssStyle":"CSS","ok":"Tədbiq et","cancel":"İmtina et","close":"Bağla","preview":"Baxış","resize":"Eni dəyiş","generalTab":"Əsas","advancedTab":"Əlavə","validateNumberFailed":"Rəqəm deyil.","confirmNewPage":"Yadda saxlanılmamış dəyişikliklər itiriləcək. Davam etmək istədiyinizə əminsinizmi?","confirmCancel":"Dəyişikliklər edilib. Pəncərəni bağlamaq istəyirsizə əminsinizmi?","options":"Seçimlər","target":"Hədəf çərçivə","targetNew":"Yeni pəncərə (_blank)","targetTop":"Əsas pəncərə (_top)","targetSelf":"Carı pəncərə (_self)","targetParent":"Ana pəncərə (_parent)","langDirLTR":"Soldan sağa (LTR)","langDirRTL":"Sağdan sola (RTL)","styles":"Üslub","cssClasses":"Üslub klası","width":"En","height":"Uzunluq","align":"Yerləşmə","left":"Sol","right":"Sağ","center":"Mərkəz","justify":"Eninə görə","alignLeft":"Soldan düzləndir","alignRight":"Sağdan düzləndir","alignCenter":"Mərkəzə düzləndir","alignTop":"Yuxarı","alignMiddle":"Orta","alignBottom":"Aşağı","alignNone":"Yoxdur","invalidValue":"Yanlışdır.","invalidHeight":"Hündürlük rəqəm olmalıdır.","invalidWidth":"En rəqəm olmalıdır.","invalidLength":"\"%1\" xanasına, ölçü vahidinin (%2) göstərilməsindən asılı olmayaraq, müsbət ədəd qeyd olunmalıdır.","invalidCssLength":"\"%1\" xanasında göstərilən məzmun tam və müsbət olmalıdır, CSS-də olan ölçü vahidlərin (px, %, in, cm, mm, em, ex, pt, or pc) istifadısinə icazə verilir.","invalidHtmlLength":"\"%1\" xanasında göstərilən məzmun tam və müsbət olmalıdır HTML-də olan ölçü vahidlərin (px və ya %) istifadısinə icazə verilir.","invalidInlineStyle":"Teq içində olan üslub \"ad :  məzmun\" şəklidə, nöqtə-verqül işarəsi ilə bitməlidir","cssLengthTooltip":"Piksel sayı və ya digər CSS ölçü vahidləri (px, %, in, cm, mm, em, ex, pt, or pc) daxil edin.","unavailable":"%1<span class=\"cke_accessibility\">, mövcud deyil</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Boşluq","35":"Son","36":"Evə","46":"Sil","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Əmr"},"keyboardShortcut":"Qısayol düymələri","optionDefault":"Standart"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/bg.js b/core/assets/vendor/ckeditor/lang/bg.js
index c4a629e9e104..0b2244d8559a 100644
--- a/core/assets/vendor/ckeditor/lang/bg.js
+++ b/core/assets/vendor/ckeditor/lang/bg.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['bg']={"widget":{"move":"Кликни и влачи, за да преместиш","label":"%1 приставка"},"undo":{"redo":"Пренаправи","undo":"Отмени"},"toolbar":{"toolbarCollapse":"Свиване на лентата с инструменти","toolbarExpand":"Разширяване на лентата с инструменти","toolbarGroups":{"document":"Документ","clipboard":"Клипборд/Отмяна","editing":"Редакция","forms":"Форми","basicstyles":"Базови стилове","paragraph":"Параграф","links":"Връзки","insert":"Вмъкване","styles":"Стилове","colors":"Цветове","tools":"Инструменти"},"toolbars":"Ленти с инструменти"},"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":"Първи ред","heightUnit":"height unit","invalidBorder":"Размерът на рамката трябва да е число.","invalidCellPadding":"Отстоянието на клетките трябва да е положително число.","invalidCellSpacing":"Интервалът в клетките трябва да е положително число.","invalidCols":"Броят колони трябва да е по-голям от 0.","invalidHeight":"Височината на таблицата трябва да е число.","invalidRows":"Броят редове трябва да е по-голям от 0.","invalidWidth":"Ширината на таблицата трябва да е число.","menu":"Настройки на таблицата","row":{"menu":"Ред","insertBefore":"Вмъкване на ред преди","insertAfter":"Вмъкване на ред след","deleteRow":"Изтриване на редове"},"rows":"Редове","summary":"Обща информация","title":"Настройки на таблицата","toolbar":"Таблица","widthPc":"процент","widthPx":"пиксела","widthUnit":"единица за ширина"},"stylescombo":{"label":"Стилове","panelTitle":"Стилове за форматиране","panelTitle1":"Блокови стилове","panelTitle2":"Поредови стилове","panelTitle3":"Обектни стилове"},"specialchar":{"options":"Опции за специален знак","title":"Избор на специален знак","toolbar":"Вмъкване на специален знак"},"sourcedialog":{"toolbar":"Източник","title":"Източник"},"sourcearea":{"toolbar":"Код"},"showblocks":{"toolbar":"Показва блокове"},"removeformat":{"toolbar":"Премахване на форматирането"},"pastetext":{"button":"Вмъкни като чист текст","pasteNotification":"Натиснете %1 за да поставите. Вашият браузър не поддържа поставяне с бутон от лентата с инструменти или контекстното меню.","title":"Вмъкни като чист текст"},"pastefromword":{"confirmCleanup":"Текстът, който искате да поставите, изглежда е копиран от Word. Искате ли да се почисти преди поставянето?","error":"Вмъкваните данни не могат да бъдат почистени поради вътрешна грешка","title":"Вмъкни от Word","toolbar":"Вмъкни от Word"},"notification":{"closed":"Известието е затворено."},"maximize":{"maximize":"Максимизиране","minimize":"Минимизиране"},"magicline":{"title":"Вмъкнете параграф тук"},"list":{"bulletedlist":"Вмъкване/премахване на точков списък","numberedlist":"Вмъкване/премахване на номериран списък"},"language":{"button":"Задай език","remove":"Премахни език"},"indent":{"indent":"Увеличаване на отстъпа","outdent":"Намаляване на отстъпа"},"image2":{"alt":"Алтернативен текст","btnUpload":"Изпрати на сървъра","captioned":"Надписано изображение","captionPlaceholder":"Надпис","infoTab":"Изображение","lockRatio":"Заключване на съотношението","menu":"Настройки на изображението","pathName":"изображение","pathNameCaption":"надпис","resetSize":"Нулиране на размер","resizer":"Кликни и влачи, за да преоразмериш","title":"Настройки на изображението","uploadTab":"Качване","urlMissing":"URL адреса на изображението липсва.","altMissing":"Липсва алтернативен текст."},"horizontalrule":{"toolbar":"Вмъкване на хоризонтална линия"},"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":"Форматиран"},"filetools":{"loadError":"Възникна грешка при четене на файла.","networkError":"Възникна мрежова грешка при качването на файла.","httpError404":"Възникна HTTP грешка при качване на файла (404: Файлът не е намерен).","httpError403":"Възникна HTTP грешка при качване на файла (403: Забранено).","httpError":"Възникна HTTP грешка при качване на файла (статус на грешката: %1).","noUrlError":"URL адресът за качване не е дефиниран.","responseError":"Неправилен отговор на сървъра."},"elementspath":{"eleLabel":"Път за елементите","eleTitle":"%1 елемент"},"contextmenu":{"options":"Опции на контекстното меню"},"clipboard":{"copy":"Копирай","copyError":"Настройките за сигурност на вашия бразуър не разрешават на редактора да изпълни действията по копиране. За целта използвайте клавиатурата (Ctrl+C).","cut":"Отрежи","cutError":"Настройките за сигурност на вашия браузър не позволяват на редактора автоматично да изъплни действията за отрязване. За целта използвайте клавиатурата (Ctrl+X).","paste":"Вмъкни","pasteNotification":"Натиснете %1 за да вмъкнете. Вашият браузър не поддържа поставяне с бутон от лентата с инструменти или от контекстното меню.","pasteArea":"Зона за поставяне","pasteMsg":"Поставете съдържанието в зоната отдолу и натиснете OK."},"blockquote":{"toolbar":"Блок за цитат"},"basicstyles":{"bold":"Удебелен","italic":"Наклонен","strike":"Зачертан текст","subscript":"Долен индекс","superscript":"Горен индекс","underline":"Подчертан"},"about":{"copy":"Авторско право &copy; $1. Всички права запазени.","dlgTitle":"Относно CKEditor 4","moreInfo":"За лицензионна информация моля посетете сайта ни:"},"editor":"Редактор за форматиран текст","editorPanel":"Панел на текстовия редактор","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","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":"Подравняване","left":"Ляво","right":"Дясно","center":"Център","justify":"Двустранно","alignLeft":"Подравни ляво","alignRight":"Подравни дясно","alignCenter":"Подравни център","alignTop":"Горе","alignMiddle":"По средата","alignBottom":"Долу","alignNone":"Без подравняване","invalidValue":"Невалидна стойност.","invalidHeight":"Височината трябва да е число.","invalidWidth":"Ширина трябва да е число.","invalidLength":"Стойността на полето \"%1\" трябва да е положително число с или без валидна мерна единица (%2).","invalidCssLength":"Стойността на полето \"%1\" трябва да е положително число с или без валидна CSS мерна единица (px, %, in, cm, mm, em, ex, pt, или pc).","invalidHtmlLength":"Стойността на полето \"%1\" трябва да е положително число с или без валидна HTML мерна единица (px или %).","invalidInlineStyle":"Стойността на стилa трябва да съдържат една или повече двойки във формат \"name : value\", разделени с двоеточие.","cssLengthTooltip":"Въведете числена стойност в пиксели или друга валидна CSS единица (px, %, in, cm, mm, em, ex, pt, или pc).","unavailable":"%1<span class=\"cke_accessibility\">, недостъпно</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Клавишна комбинация","optionDefault":"По подразбиране"}};
\ No newline at end of file
+CKEDITOR.lang['bg']={"widget":{"move":"Кликни и влачи, за да преместиш","label":"%1 приставка"},"undo":{"redo":"Пренаправи","undo":"Отмени"},"toolbar":{"toolbarCollapse":"Свиване на лентата с инструменти","toolbarExpand":"Разширяване на лентата с инструменти","toolbarGroups":{"document":"Документ","clipboard":"Клипборд/Отмяна","editing":"Редакция","forms":"Форми","basicstyles":"Базови стилове","paragraph":"Параграф","links":"Връзки","insert":"Вмъкване","styles":"Стилове","colors":"Цветове","tools":"Инструменти"},"toolbars":"Ленти с инструменти"},"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":"Първи ред","heightUnit":"height unit","invalidBorder":"Размерът на рамката трябва да е число.","invalidCellPadding":"Отстоянието на клетките трябва да е положително число.","invalidCellSpacing":"Интервалът в клетките трябва да е положително число.","invalidCols":"Броят колони трябва да е по-голям от 0.","invalidHeight":"Височината на таблицата трябва да е число.","invalidRows":"Броят редове трябва да е по-голям от 0.","invalidWidth":"Ширината на таблицата трябва да е число.","menu":"Настройки на таблицата","row":{"menu":"Ред","insertBefore":"Вмъкване на ред преди","insertAfter":"Вмъкване на ред след","deleteRow":"Изтриване на редове"},"rows":"Редове","summary":"Обща информация","title":"Настройки на таблицата","toolbar":"Таблица","widthPc":"процент","widthPx":"пиксела","widthUnit":"единица за ширина"},"stylescombo":{"label":"Стилове","panelTitle":"Стилове за форматиране","panelTitle1":"Блокови стилове","panelTitle2":"Поредови стилове","panelTitle3":"Обектни стилове"},"specialchar":{"options":"Опции за специален знак","title":"Избор на специален знак","toolbar":"Вмъкване на специален знак"},"sourcedialog":{"toolbar":"Източник","title":"Източник"},"sourcearea":{"toolbar":"Код"},"showblocks":{"toolbar":"Показва блокове"},"removeformat":{"toolbar":"Премахване на форматирането"},"pastetext":{"button":"Вмъкни като чист текст","pasteNotification":"Натиснете %1 за да поставите. Вашият браузър не поддържа поставяне с бутон от лентата с инструменти или контекстното меню.","title":"Вмъкни като чист текст"},"pastefromword":{"confirmCleanup":"Текстът, който искате да поставите, изглежда е копиран от Word. Искате ли да се почисти преди поставянето?","error":"Вмъкваните данни не могат да бъдат почистени поради вътрешна грешка","title":"Вмъкни от Word","toolbar":"Вмъкни от Word"},"notification":{"closed":"Известието е затворено."},"maximize":{"maximize":"Максимизиране","minimize":"Минимизиране"},"magicline":{"title":"Вмъкнете параграф тук"},"list":{"bulletedlist":"Вмъкване/премахване на точков списък","numberedlist":"Вмъкване/премахване на номериран списък"},"language":{"button":"Задай език","remove":"Премахни език"},"indent":{"indent":"Увеличаване на отстъпа","outdent":"Намаляване на отстъпа"},"image2":{"alt":"Алтернативен текст","btnUpload":"Изпрати на сървъра","captioned":"Надписано изображение","captionPlaceholder":"Надпис","infoTab":"Изображение","lockRatio":"Заключване на съотношението","menu":"Настройки на изображението","pathName":"изображение","pathNameCaption":"надпис","resetSize":"Нулиране на размер","resizer":"Кликни и влачи, за да преоразмериш","title":"Настройки на изображението","uploadTab":"Качване","urlMissing":"URL адреса на изображението липсва.","altMissing":"Липсва алтернативен текст."},"horizontalrule":{"toolbar":"Вмъкване на хоризонтална линия"},"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":"Форматиран"},"filetools":{"loadError":"Възникна грешка при четене на файла.","networkError":"Възникна мрежова грешка при качването на файла.","httpError404":"Възникна HTTP грешка при качване на файла (404: Файлът не е намерен).","httpError403":"Възникна HTTP грешка при качване на файла (403: Забранено).","httpError":"Възникна HTTP грешка при качване на файла (статус на грешката: %1).","noUrlError":"URL адресът за качване не е дефиниран.","responseError":"Неправилен отговор на сървъра."},"elementspath":{"eleLabel":"Път за елементите","eleTitle":"%1 елемент"},"contextmenu":{"options":"Опции на контекстното меню"},"clipboard":{"copy":"Копирай","copyError":"Настройките за сигурност на вашия бразуър не разрешават на редактора да изпълни действията по копиране. За целта използвайте клавиатурата (Ctrl+C).","cut":"Отрежи","cutError":"Настройките за сигурност на вашия браузър не позволяват на редактора автоматично да изъплни действията за отрязване. За целта използвайте клавиатурата (Ctrl+X).","paste":"Вмъкни","pasteNotification":"Натиснете %1 за да вмъкнете. Вашият браузър не поддържа поставяне с бутон от лентата с инструменти или от контекстното меню.","pasteArea":"Зона за поставяне","pasteMsg":"Поставете съдържанието в зоната отдолу и натиснете OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Блок за цитат"},"basicstyles":{"bold":"Удебелен","italic":"Наклонен","strike":"Зачертан текст","subscript":"Долен индекс","superscript":"Горен индекс","underline":"Подчертан"},"about":{"copy":"Авторско право &copy; $1. Всички права запазени.","dlgTitle":"Относно CKEditor 4","moreInfo":"За лицензионна информация моля посетете сайта ни:"},"editor":"Редактор за форматиран текст","editorPanel":"Панел на текстовия редактор","common":{"editorHelp":"натиснете ALT+0 за помощ","browseServer":"Избор от сървъра","url":"URL адрес","protocol":"Протокол","upload":"Качване","uploadSubmit":"Изпращане към сървъра","image":"Изображение","form":"Форма","checkbox":"Поле за избор","radio":"Радио бутон","textField":"Текстово поле","textarea":"Текстова зона","hiddenField":"Скрито поле","button":"Бутон","select":"Поле за избор","imageButton":"Бутон за изображение","notSet":"<не е избрано>","id":"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":"Подравняване","left":"Ляво","right":"Дясно","center":"Център","justify":"Двустранно","alignLeft":"Подравни ляво","alignRight":"Подравни дясно","alignCenter":"Подравни център","alignTop":"Горе","alignMiddle":"По средата","alignBottom":"Долу","alignNone":"Без подравняване","invalidValue":"Невалидна стойност.","invalidHeight":"Височината трябва да е число.","invalidWidth":"Ширина трябва да е число.","invalidLength":"Стойността на полето \"%1\" трябва да е положително число с или без валидна мерна единица (%2).","invalidCssLength":"Стойността на полето \"%1\" трябва да е положително число с или без валидна CSS мерна единица (px, %, in, cm, mm, em, ex, pt, или pc).","invalidHtmlLength":"Стойността на полето \"%1\" трябва да е положително число с или без валидна HTML мерна единица (px или %).","invalidInlineStyle":"Стойността на стилa трябва да съдържат една или повече двойки във формат \"name : value\", разделени с двоеточие.","cssLengthTooltip":"Въведете числена стойност в пиксели или друга валидна CSS единица (px, %, in, cm, mm, em, ex, pt, или pc).","unavailable":"%1<span class=\"cke_accessibility\">, недостъпно</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Клавишна комбинация","optionDefault":"По подразбиране"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/bn.js b/core/assets/vendor/ckeditor/lang/bn.js
index d5a9ca52881d..d8476c71250b 100644
--- a/core/assets/vendor/ckeditor/lang/bn.js
+++ b/core/assets/vendor/ckeditor/lang/bn.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['bn']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"পুনরায়  করি","undo":"আনডু"},"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"},"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":"পৃষ্ঠতলের রং","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","heightUnit":"height unit","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"},"stylescombo":{"label":"ধরন","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"বিশেষ ক্যারেক্টার বাছাই কর","toolbar":"বিশেষ অক্ষর যুক্ত কর"},"sourcedialog":{"toolbar":"উৎস","title":"সোর্স"},"sourcearea":{"toolbar":"উৎস"},"showblocks":{"toolbar":"Show Blocks"},"removeformat":{"toolbar":"ধরন-প্রকৃতি অপসারণ করি"},"pastetext":{"button":"সাধারণ টেক্সট হিসেবে পেইস্ট করি","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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":"পেস্ট (শব্দ)"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"বুলেটেড তালিকা প্রবেশ/অপসারন করি","numberedlist":"সাংখ্যিক লিস্টের লেবেল"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"ইনডেন্ট বাড়াই","outdent":"ইনডেন্ট কমাও"},"image2":{"alt":"বিকল্প টেক্সট","btnUpload":"ইহাকে সার্ভারে প্রেরন কর","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"ছবির তথ্য","lockRatio":"অনুপাত লক কর","menu":"ছবির প্রোপার্টি","pathName":"image","pathNameCaption":"caption","resetSize":"সাইজ পূর্বাবস্থায় ফিরিয়ে দাও","resizer":"Click and drag to resize","title":"ছবির প্রোপার্টি","uploadTab":"আপলোড","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"অনুভূমিক লাইন যোগ করি"},"format":{"label":"ধরন-প্রকৃতি","panelTitle":"ফন্ট ফরমেট","tag_address":"ঠিকানা","tag_div":"শীর্ষক (DIV)","tag_h1":"শীর্ষক ১","tag_h2":"শীর্ষক ২","tag_h3":"শীর্ষক ৩","tag_h4":"শীর্ষক ৪","tag_h5":"শীর্ষক ৫","tag_h6":"শীর্ষক ৬","tag_p":"সাধারণ","tag_pre":"ফর্মেটেড"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"কপি","copyError":"আপনার ব্রাউজারের নিরাপত্তা সেটিংসমূহ এডিটরকে স্বয়ংক্রিয়ভাবে কপি করার প্রক্রিয়া চালনা করার অনুমতি দেয় না। অনুগ্রহপূর্বক এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl/Cmd+C)।","cut":"কাট","cutError":"আপনার ব্রাউজারের সুরক্ষা সেটিংস এডিটরকে অটোমেটিক কাট করার অনুমতি দেয়নি। দয়া করে এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl/Cmd+X)।","paste":"পেস্ট","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"বোল্ড","italic":"বাঁকা","strike":"স্ট্রাইক থ্রু","subscript":"অধোলেখ","superscript":"অভিলেখ","underline":"আন্ডারলাইন"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","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":"You have changed some options. Are you sure you want to close the dialog window?","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":"এলাইন","left":"বামে","right":"ডানে","center":"মাঝখানে","justify":"ব্লক জাস্টিফাই","alignLeft":"বা দিকে ঘেঁষা","alignRight":"ডান দিকে ঘেঁষা","alignCenter":"Align Center","alignTop":"উপর","alignMiddle":"মধ্য","alignBottom":"নীচে","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
+CKEDITOR.lang['bn']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"পুনরায়  করি","undo":"আনডু"},"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"},"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":"পৃষ্ঠতলের রং","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","heightUnit":"height unit","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"},"stylescombo":{"label":"ধরন","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"বিশেষ ক্যারেক্টার বাছাই কর","toolbar":"বিশেষ অক্ষর যুক্ত কর"},"sourcedialog":{"toolbar":"উৎস","title":"সোর্স"},"sourcearea":{"toolbar":"উৎস"},"showblocks":{"toolbar":"Show Blocks"},"removeformat":{"toolbar":"ধরন-প্রকৃতি অপসারণ করি"},"pastetext":{"button":"সাধারণ টেক্সট হিসেবে পেইস্ট করি","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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":"পেস্ট (শব্দ)"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"বুলেটেড তালিকা প্রবেশ/অপসারন করি","numberedlist":"সাংখ্যিক লিস্টের লেবেল"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"ইনডেন্ট বাড়াই","outdent":"ইনডেন্ট কমাও"},"image2":{"alt":"বিকল্প টেক্সট","btnUpload":"ইহাকে সার্ভারে প্রেরন কর","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"ছবির তথ্য","lockRatio":"অনুপাত লক কর","menu":"ছবির প্রোপার্টি","pathName":"image","pathNameCaption":"caption","resetSize":"সাইজ পূর্বাবস্থায় ফিরিয়ে দাও","resizer":"Click and drag to resize","title":"ছবির প্রোপার্টি","uploadTab":"আপলোড","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"অনুভূমিক লাইন যোগ করি"},"format":{"label":"ধরন-প্রকৃতি","panelTitle":"ফন্ট ফরমেট","tag_address":"ঠিকানা","tag_div":"শীর্ষক (DIV)","tag_h1":"শীর্ষক ১","tag_h2":"শীর্ষক ২","tag_h3":"শীর্ষক ৩","tag_h4":"শীর্ষক ৪","tag_h5":"শীর্ষক ৫","tag_h6":"শীর্ষক ৬","tag_p":"সাধারণ","tag_pre":"ফর্মেটেড"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"কপি","copyError":"আপনার ব্রাউজারের নিরাপত্তা সেটিংসমূহ এডিটরকে স্বয়ংক্রিয়ভাবে কপি করার প্রক্রিয়া চালনা করার অনুমতি দেয় না। অনুগ্রহপূর্বক এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl/Cmd+C)।","cut":"কাট","cutError":"আপনার ব্রাউজারের সুরক্ষা সেটিংস এডিটরকে অটোমেটিক কাট করার অনুমতি দেয়নি। দয়া করে এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl/Cmd+X)।","paste":"পেস্ট","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"বোল্ড","italic":"বাঁকা","strike":"স্ট্রাইক থ্রু","subscript":"অধোলেখ","superscript":"অভিলেখ","underline":"আন্ডারলাইন"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"ব্রাউজ সার্ভার","url":"URL","protocol":"প্রোটোকল","upload":"আপলোড","uploadSubmit":"ইহাকে সার্ভারে প্রেরন কর","image":"ছবির লেবেল যুক্ত কর","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":"You have changed some options. Are you sure you want to close the dialog window?","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":"এলাইন","left":"বামে","right":"ডানে","center":"মাঝখানে","justify":"ব্লক জাস্টিফাই","alignLeft":"বা দিকে ঘেঁষা","alignRight":"ডান দিকে ঘেঁষা","alignCenter":"Align Center","alignTop":"উপর","alignMiddle":"মধ্য","alignBottom":"নীচে","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/bs.js b/core/assets/vendor/ckeditor/lang/bs.js
index d581b75843a8..4ecd3fcdbf68 100644
--- a/core/assets/vendor/ckeditor/lang/bs.js
+++ b/core/assets/vendor/ckeditor/lang/bs.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['bs']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"Ponovi","undo":"Vrati"},"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"},"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","heightUnit":"height unit","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"},"stylescombo":{"label":"Stil","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Izaberi specijalni karakter","toolbar":"Ubaci specijalni karater"},"sourcedialog":{"toolbar":"HTML kôd","title":"HTML kôd"},"sourcearea":{"toolbar":"HTML kôd"},"showblocks":{"toolbar":"Show Blocks"},"removeformat":{"toolbar":"Poništi format"},"pastetext":{"button":"Zalijepi kao obièan tekst","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Lista","numberedlist":"Numerisana lista"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"Poveæaj uvod","outdent":"Smanji uvod"},"image2":{"alt":"Tekst na slici","btnUpload":"Šalji na server","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Info slike","lockRatio":"Zakljuèaj odnos","menu":"Svojstva slike","pathName":"image","pathNameCaption":"caption","resetSize":"Resetuj dimenzije","resizer":"Click and drag to resize","title":"Svojstva slike","uploadTab":"Šalji","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Ubaci horizontalnu liniju"},"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"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"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","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Boldiraj","italic":"Ukosi","strike":"Precrtaj","subscript":"Subscript","superscript":"Superscript","underline":"Podvuci"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","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":"You have changed some options. Are you sure you want to close the dialog window?","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","left":"Lijevo","right":"Desno","center":"Centar","justify":"Puno poravnanje","alignLeft":"Lijevo poravnanje","alignRight":"Desno poravnanje","alignCenter":"Align Center","alignTop":"Vrh","alignMiddle":"Sredina","alignBottom":"Dno","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
+CKEDITOR.lang['bs']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"Ponovi","undo":"Vrati"},"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"},"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","heightUnit":"height unit","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"},"stylescombo":{"label":"Stil","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Izaberi specijalni karakter","toolbar":"Ubaci specijalni karater"},"sourcedialog":{"toolbar":"HTML kôd","title":"HTML kôd"},"sourcearea":{"toolbar":"HTML kôd"},"showblocks":{"toolbar":"Show Blocks"},"removeformat":{"toolbar":"Poništi format"},"pastetext":{"button":"Zalijepi kao obièan tekst","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Lista","numberedlist":"Numerisana lista"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"Poveæaj uvod","outdent":"Smanji uvod"},"image2":{"alt":"Tekst na slici","btnUpload":"Šalji na server","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Info slike","lockRatio":"Zakljuèaj odnos","menu":"Svojstva slike","pathName":"image","pathNameCaption":"caption","resetSize":"Resetuj dimenzije","resizer":"Click and drag to resize","title":"Svojstva slike","uploadTab":"Šalji","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Ubaci horizontalnu liniju"},"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"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"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","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Boldiraj","italic":"Ukosi","strike":"Precrtaj","subscript":"Subscript","superscript":"Superscript","underline":"Podvuci"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protokol","upload":"Šalji","uploadSubmit":"Šalji na server","image":"Slika","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":"You have changed some options. Are you sure you want to close the dialog window?","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","left":"Lijevo","right":"Desno","center":"Centar","justify":"Puno poravnanje","alignLeft":"Lijevo poravnanje","alignRight":"Desno poravnanje","alignCenter":"Align Center","alignTop":"Vrh","alignMiddle":"Sredina","alignBottom":"Dno","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/ca.js b/core/assets/vendor/ckeditor/lang/ca.js
index 567a7380b3c4..d33c89a19b4a 100644
--- a/core/assets/vendor/ckeditor/lang/ca.js
+++ b/core/assets/vendor/ckeditor/lang/ca.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['ca']={"widget":{"move":"Clicar i arrossegar per moure","label":"%1 widget"},"undo":{"redo":"Refés","undo":"Desfés"},"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"},"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","heightUnit":"height unit","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"},"stylescombo":{"label":"Estil","panelTitle":"Estils de format","panelTitle1":"Estils de bloc","panelTitle2":"Estils incrustats","panelTitle3":"Estils d'objecte"},"specialchar":{"options":"Opcions de caràcters especials","title":"Selecciona el caràcter especial","toolbar":"Insereix caràcter especial"},"sourcedialog":{"toolbar":"Codi font","title":"Codi font"},"sourcearea":{"toolbar":"Codi font"},"showblocks":{"toolbar":"Mostra els blocs"},"removeformat":{"toolbar":"Elimina Format"},"pastetext":{"button":"Enganxa com a text no formatat","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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"},"notification":{"closed":"Notificació tancada."},"maximize":{"maximize":"Maximitza","minimize":"Minimitza"},"magicline":{"title":"Insereix el paràgraf aquí"},"list":{"bulletedlist":"Llista de pics","numberedlist":"Llista numerada"},"language":{"button":"Definir l'idioma","remove":"Eliminar idioma"},"indent":{"indent":"Augmenta el sagnat","outdent":"Redueix el sagnat"},"image2":{"alt":"Text alternatiu","btnUpload":"Envia-la al servidor","captioned":"Imatge amb subtítol","captionPlaceholder":"Títol","infoTab":"Informació de la imatge","lockRatio":"Bloqueja les proporcions","menu":"Propietats de la imatge","pathName":"imatge","pathNameCaption":"subtítol","resetSize":"Restaura la mida","resizer":"Clicar i arrossegar per redimensionar","title":"Propietats de la imatge","uploadTab":"Puja","urlMissing":"Falta la URL de la imatge.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Insereix línia horitzontal"},"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"},"filetools":{"loadError":"S'ha produït un error durant la lectura del fitxer.","networkError":"S'ha produït un error de xarxa durant la càrrega del fitxer.","httpError404":"S'ha produït un error HTTP durant la càrrega del fitxer (404: Fitxer no trobat).","httpError403":"S'ha produït un error HTTP durant la càrrega del fitxer (403: Permís denegat).","httpError":"S'ha produït un error HTTP durant la càrrega del fitxer (estat d'error: %1).","noUrlError":"La URL de càrrega no està definida.","responseError":"Resposta incorrecte del servidor"},"elementspath":{"eleLabel":"Ruta dels elements","eleTitle":"%1 element"},"contextmenu":{"options":"Opcions del menú contextual"},"clipboard":{"copy":"Copiar","copyError":"La configuració de seguretat del vostre navegador no permet executar automàticament les operacions de copiar. Si us plau, utilitzeu el teclat (Ctrl/Cmd+C).","cut":"Retallar","cutError":"La configuració de seguretat del vostre navegador no permet executar automàticament les operacions de retallar. Si us plau, utilitzeu el teclat (Ctrl/Cmd+X).","paste":"Enganxar","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Àrea d'enganxat","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Bloc de cita"},"basicstyles":{"bold":"Negreta","italic":"Cursiva","strike":"Ratllat","subscript":"Subíndex","superscript":"Superíndex","underline":"Subratllat"},"about":{"copy":"Copyright &copy; $1. Tots els drets reservats.","dlgTitle":"Quant al CKEditor 4","moreInfo":"Per informació sobre llicències visiteu el nostre lloc web:"},"editor":"Editor de text enriquit","editorPanel":"Panell de l'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 el quadre de diàleg?","options":"Opcions","target":"Destí","targetNew":"Nova finestra (_blank)","targetTop":"Finestra superior (_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ó","left":"Ajusta a l'esquerra","right":"Ajusta a la dreta","center":"Centre","justify":"Justificat","alignLeft":"Alinea a l'esquerra","alignRight":"Alinea a la dreta","alignCenter":"Align Center","alignTop":"Superior","alignMiddle":"Centre","alignBottom":"Inferior","alignNone":"Cap","invalidValue":"Valor no vàlid.","invalidHeight":"L'alçada ha de ser un número.","invalidWidth":"L'amplada ha de ser un número.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Retrocés","13":"Intro","16":"Majúscules","17":"Ctrl","18":"Alt","32":"Space","35":"Fi","36":"Inici","46":"Eliminar","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
+CKEDITOR.lang['ca']={"widget":{"move":"Clicar i arrossegar per moure","label":"%1 widget"},"undo":{"redo":"Refés","undo":"Desfés"},"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"},"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","heightUnit":"height unit","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"},"stylescombo":{"label":"Estil","panelTitle":"Estils de format","panelTitle1":"Estils de bloc","panelTitle2":"Estils incrustats","panelTitle3":"Estils d'objecte"},"specialchar":{"options":"Opcions de caràcters especials","title":"Selecciona el caràcter especial","toolbar":"Insereix caràcter especial"},"sourcedialog":{"toolbar":"Codi font","title":"Codi font"},"sourcearea":{"toolbar":"Codi font"},"showblocks":{"toolbar":"Mostra els blocs"},"removeformat":{"toolbar":"Elimina Format"},"pastetext":{"button":"Enganxa com a text no formatat","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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"},"notification":{"closed":"Notificació tancada."},"maximize":{"maximize":"Maximitza","minimize":"Minimitza"},"magicline":{"title":"Insereix el paràgraf aquí"},"list":{"bulletedlist":"Llista de pics","numberedlist":"Llista numerada"},"language":{"button":"Definir l'idioma","remove":"Eliminar idioma"},"indent":{"indent":"Augmenta el sagnat","outdent":"Redueix el sagnat"},"image2":{"alt":"Text alternatiu","btnUpload":"Envia-la al servidor","captioned":"Imatge amb subtítol","captionPlaceholder":"Títol","infoTab":"Informació de la imatge","lockRatio":"Bloqueja les proporcions","menu":"Propietats de la imatge","pathName":"imatge","pathNameCaption":"subtítol","resetSize":"Restaura la mida","resizer":"Clicar i arrossegar per redimensionar","title":"Propietats de la imatge","uploadTab":"Puja","urlMissing":"Falta la URL de la imatge.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Insereix línia horitzontal"},"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"},"filetools":{"loadError":"S'ha produït un error durant la lectura del fitxer.","networkError":"S'ha produït un error de xarxa durant la càrrega del fitxer.","httpError404":"S'ha produït un error HTTP durant la càrrega del fitxer (404: Fitxer no trobat).","httpError403":"S'ha produït un error HTTP durant la càrrega del fitxer (403: Permís denegat).","httpError":"S'ha produït un error HTTP durant la càrrega del fitxer (estat d'error: %1).","noUrlError":"La URL de càrrega no està definida.","responseError":"Resposta incorrecte del servidor"},"elementspath":{"eleLabel":"Ruta dels elements","eleTitle":"%1 element"},"contextmenu":{"options":"Opcions del menú contextual"},"clipboard":{"copy":"Copiar","copyError":"La configuració de seguretat del vostre navegador no permet executar automàticament les operacions de copiar. Si us plau, utilitzeu el teclat (Ctrl/Cmd+C).","cut":"Retallar","cutError":"La configuració de seguretat del vostre navegador no permet executar automàticament les operacions de retallar. Si us plau, utilitzeu el teclat (Ctrl/Cmd+X).","paste":"Enganxar","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Àrea d'enganxat","pasteMsg":"Paste your content inside the area below and press OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Bloc de cita"},"basicstyles":{"bold":"Negreta","italic":"Cursiva","strike":"Ratllat","subscript":"Subíndex","superscript":"Superíndex","underline":"Subratllat"},"about":{"copy":"Copyright &copy; $1. Tots els drets reservats.","dlgTitle":"Quant al CKEditor 4","moreInfo":"Per informació sobre llicències visiteu el nostre lloc web:"},"editor":"Editor de text enriquit","editorPanel":"Panell de l'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","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 el quadre de diàleg?","options":"Opcions","target":"Destí","targetNew":"Nova finestra (_blank)","targetTop":"Finestra superior (_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ó","left":"Ajusta a l'esquerra","right":"Ajusta a la dreta","center":"Centre","justify":"Justificat","alignLeft":"Alinea a l'esquerra","alignRight":"Alinea a la dreta","alignCenter":"Align Center","alignTop":"Superior","alignMiddle":"Centre","alignBottom":"Inferior","alignNone":"Cap","invalidValue":"Valor no vàlid.","invalidHeight":"L'alçada ha de ser un número.","invalidWidth":"L'amplada ha de ser un número.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Retrocés","13":"Intro","16":"Majúscules","17":"Ctrl","18":"Alt","32":"Space","35":"Fi","36":"Inici","46":"Eliminar","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/cs.js b/core/assets/vendor/ckeditor/lang/cs.js
index bf7a6eb05374..451733c55e4a 100644
--- a/core/assets/vendor/ckeditor/lang/cs.js
+++ b/core/assets/vendor/ckeditor/lang/cs.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['cs']={"widget":{"move":"Klepněte a táhněte pro přesunutí","label":"Ovládací prvek %1"},"undo":{"redo":"Znovu","undo":"Zpět"},"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"},"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","heightUnit":"jednotka výšky","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"},"stylescombo":{"label":"Styl","panelTitle":"Formátovací styly","panelTitle1":"Blokové styly","panelTitle2":"Řádkové styly","panelTitle3":"Objektové styly"},"specialchar":{"options":"Nastavení speciálních znaků","title":"Výběr speciálního znaku","toolbar":"Vložit speciální znaky"},"sourcedialog":{"toolbar":"Zdroj","title":"Zdroj"},"sourcearea":{"toolbar":"Zdroj"},"showblocks":{"toolbar":"Ukázat bloky"},"removeformat":{"toolbar":"Odstranit formátování"},"pastetext":{"button":"Vložit jako čistý text","pasteNotification":"Stiskněte %1 pro vložení. Váš prohlížeč nepodporuje vkládání pomocí tlačítka na panelu nástrojů nebo volby kontextového menu.","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"},"notification":{"closed":"Oznámení zavřeno."},"maximize":{"maximize":"Maximalizovat","minimize":"Minimalizovat"},"magicline":{"title":"zde vložit odstavec"},"list":{"bulletedlist":"Odrážky","numberedlist":"Číslování"},"language":{"button":"Nastavit jazyk","remove":"Odstranit jazyk"},"indent":{"indent":"Zvětšit odsazení","outdent":"Zmenšit odsazení"},"image2":{"alt":"Alternativní text","btnUpload":"Odeslat na server","captioned":"Obrázek s popisem","captionPlaceholder":"Popis","infoTab":"Informace o obrázku","lockRatio":"Zámek","menu":"Vlastnosti obrázku","pathName":"Obrázek","pathNameCaption":"Popis","resetSize":"Původní velikost","resizer":"Klepněte a táhněte pro změnu velikosti","title":"Vlastnosti obrázku","uploadTab":"Odeslat","urlMissing":"Zadané URL zdroje obrázku nebylo nalezeno.","altMissing":"Alternativní text chybí."},"horizontalrule":{"toolbar":"Vložit vodorovnou linku"},"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"},"filetools":{"loadError":"Při čtení souboru došlo k chybě.","networkError":"Při nahrávání souboru došlo k chybě v síti.","httpError404":"Při nahrávání souboru došlo k chybě HTTP (404: Soubor nenalezen).","httpError403":"Při nahrávání souboru došlo k chybě HTTP (403: Zakázáno).","httpError":"Při nahrávání souboru došlo k chybě HTTP (chybový stav: %1).","noUrlError":"URL pro nahrání není zadána.","responseError":"Nesprávná odpověď serveru."},"elementspath":{"eleLabel":"Cesta objektu","eleTitle":"%1 objekt"},"contextmenu":{"options":"Nastavení kontextové nabídky"},"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","pasteNotification":"Stiskněte %1 pro vložení. Váš prohlížeč nepodporuje vkládání pomocí tlačítka na panelu nástrojů nebo volby kontextového menu.","pasteArea":"Oblast vkládání","pasteMsg":"Vložte svůj obsah do oblasti níže a stiskněte OK."},"blockquote":{"toolbar":"Citace"},"basicstyles":{"bold":"Tučné","italic":"Kurzíva","strike":"Přeškrtnuté","subscript":"Dolní index","superscript":"Horní index","underline":"Podtržené"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"O aplikaci CKEditor 4","moreInfo":"Pro informace o lincenci navštivte naši webovou stránku:"},"editor":"Textový editor","editorPanel":"Panel textového editoru","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í","left":"Vlevo","right":"Vpravo","center":"Na střed","justify":"Zarovnat do bloku","alignLeft":"Zarovnat vlevo","alignRight":"Zarovnat vpravo","alignCenter":"Zarovnat na střed","alignTop":"Nahoru","alignMiddle":"Na střed","alignBottom":"Dolů","alignNone":"Žádné","invalidValue":"Neplatná hodnota.","invalidHeight":"Zadaná výška musí být číslo.","invalidWidth":"Šířka musí být číslo.","invalidLength":"Hodnota určená pro pole \"%1\" musí být kladné číslo bez nebo s platnou jednotkou míry (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Mezerník","35":"Konec","36":"Domů","46":"Smazat","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Klávesová zkratka","optionDefault":"Výchozí"}};
\ No newline at end of file
+CKEDITOR.lang['cs']={"widget":{"move":"Klepněte a táhněte pro přesunutí","label":"Ovládací prvek %1"},"undo":{"redo":"Znovu","undo":"Zpět"},"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"},"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","heightUnit":"jednotka výšky","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"},"stylescombo":{"label":"Styl","panelTitle":"Formátovací styly","panelTitle1":"Blokové styly","panelTitle2":"Řádkové styly","panelTitle3":"Objektové styly"},"specialchar":{"options":"Nastavení speciálních znaků","title":"Výběr speciálního znaku","toolbar":"Vložit speciální znaky"},"sourcedialog":{"toolbar":"Zdroj","title":"Zdroj"},"sourcearea":{"toolbar":"Zdroj"},"showblocks":{"toolbar":"Ukázat bloky"},"removeformat":{"toolbar":"Odstranit formátování"},"pastetext":{"button":"Vložit jako čistý text","pasteNotification":"Stiskněte %1 pro vložení. Váš prohlížeč nepodporuje vkládání pomocí tlačítka na panelu nástrojů nebo volby kontextového menu.","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"},"notification":{"closed":"Oznámení zavřeno."},"maximize":{"maximize":"Maximalizovat","minimize":"Minimalizovat"},"magicline":{"title":"zde vložit odstavec"},"list":{"bulletedlist":"Odrážky","numberedlist":"Číslování"},"language":{"button":"Nastavit jazyk","remove":"Odstranit jazyk"},"indent":{"indent":"Zvětšit odsazení","outdent":"Zmenšit odsazení"},"image2":{"alt":"Alternativní text","btnUpload":"Odeslat na server","captioned":"Obrázek s popisem","captionPlaceholder":"Popis","infoTab":"Informace o obrázku","lockRatio":"Zámek","menu":"Vlastnosti obrázku","pathName":"Obrázek","pathNameCaption":"Popis","resetSize":"Původní velikost","resizer":"Klepněte a táhněte pro změnu velikosti","title":"Vlastnosti obrázku","uploadTab":"Odeslat","urlMissing":"Zadané URL zdroje obrázku nebylo nalezeno.","altMissing":"Alternativní text chybí."},"horizontalrule":{"toolbar":"Vložit vodorovnou linku"},"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"},"filetools":{"loadError":"Při čtení souboru došlo k chybě.","networkError":"Při nahrávání souboru došlo k chybě v síti.","httpError404":"Při nahrávání souboru došlo k chybě HTTP (404: Soubor nenalezen).","httpError403":"Při nahrávání souboru došlo k chybě HTTP (403: Zakázáno).","httpError":"Při nahrávání souboru došlo k chybě HTTP (chybový stav: %1).","noUrlError":"URL pro nahrání není zadána.","responseError":"Nesprávná odpověď serveru."},"elementspath":{"eleLabel":"Cesta objektu","eleTitle":"%1 objekt"},"contextmenu":{"options":"Nastavení kontextové nabídky"},"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","pasteNotification":"Stiskněte %1 pro vložení. Váš prohlížeč nepodporuje vkládání pomocí tlačítka na panelu nástrojů nebo volby kontextového menu.","pasteArea":"Oblast vkládání","pasteMsg":"Vložte svůj obsah do oblasti níže a stiskněte OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Citace"},"basicstyles":{"bold":"Tučné","italic":"Kurzíva","strike":"Přeškrtnuté","subscript":"Dolní index","superscript":"Horní index","underline":"Podtržené"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"O aplikaci CKEditor 4","moreInfo":"Pro informace o lincenci navštivte naši webovou stránku:"},"editor":"Textový editor","editorPanel":"Panel textového editoru","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","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í","left":"Vlevo","right":"Vpravo","center":"Na střed","justify":"Zarovnat do bloku","alignLeft":"Zarovnat vlevo","alignRight":"Zarovnat vpravo","alignCenter":"Zarovnat na střed","alignTop":"Nahoru","alignMiddle":"Na střed","alignBottom":"Dolů","alignNone":"Žádné","invalidValue":"Neplatná hodnota.","invalidHeight":"Zadaná výška musí být číslo.","invalidWidth":"Šířka musí být číslo.","invalidLength":"Hodnota určená pro pole \"%1\" musí být kladné číslo bez nebo s platnou jednotkou míry (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Mezerník","35":"Konec","36":"Domů","46":"Smazat","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Klávesová zkratka","optionDefault":"Výchozí"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/cy.js b/core/assets/vendor/ckeditor/lang/cy.js
index 17c41e7116c4..318a7c128be3 100644
--- a/core/assets/vendor/ckeditor/lang/cy.js
+++ b/core/assets/vendor/ckeditor/lang/cy.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['cy']={"widget":{"move":"Clcio a llusgo i symud","label":"%1 widget"},"undo":{"redo":"Ailwneud","undo":"Dadwneud"},"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 y golygydd"},"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":"Dewis"},"cellPad":"Padio'r gell","cellSpace":"Bylchiad y 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","heightUnit":"height unit","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":"Priodweddau'r Tabl","row":{"menu":"Rhes","insertBefore":"Mewnosod Rhes Cyn","insertAfter":"Mewnosod Rhes Ar Ôl","deleteRow":"Dileu Rhesi"},"rows":"Rhesi","summary":"Crynodeb","title":"Priodweddau'r Tabl","toolbar":"Tabl","widthPc":"y cant","widthPx":"picsel","widthUnit":"uned lled"},"stylescombo":{"label":"Arddulliau","panelTitle":"Arddulliau Fformatio","panelTitle1":"Arddulliau Bloc","panelTitle2":"Arddulliau Mewnol","panelTitle3":"Arddulliau Gwrthrych"},"specialchar":{"options":"Opsiynau Nodau Arbennig","title":"Dewis Nod Arbennig","toolbar":"Mewnosod Nod Arbennig"},"sourcedialog":{"toolbar":"HTML","title":"HTML"},"sourcearea":{"toolbar":"HTML"},"showblocks":{"toolbar":"Dangos Blociau"},"removeformat":{"toolbar":"Tynnu Fformat"},"pastetext":{"button":"Gludo fel testun plaen","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Mwyhau","minimize":"Lleihau"},"magicline":{"title":"Mewnosod paragraff yma"},"list":{"bulletedlist":"Mewnosod/Tynnu Rhestr Bwled","numberedlist":"Mewnosod/Tynnu Rhestr Rhifol"},"language":{"button":"Gosod iaith","remove":"Tynnu iaith"},"indent":{"indent":"Cynyddu'r Mewnoliad","outdent":"Lleihau'r Mewnoliad"},"image2":{"alt":"Testun Amgen","btnUpload":"Anfon i'r Gweinydd","captioned":"Delwedd â phennawd","captionPlaceholder":"Caption","infoTab":"Gwyb Delwedd","lockRatio":"Cloi Cymhareb","menu":"Priodweddau Delwedd","pathName":"delwedd","pathNameCaption":"pennawd","resetSize":"Ailosod Maint","resizer":"Clicio a llusgo i ail-meintio","title":"Priodweddau Delwedd","uploadTab":"Lanlwytho","urlMissing":"URL gwreiddiol y ddelwedd ar goll.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Mewnosod Llinell Lorweddol"},"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"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Llwybr elfennau","eleTitle":"Elfen %1"},"contextmenu":{"options":"Opsiynau Dewislen Cyd-destun"},"clipboard":{"copy":"Copïo","copyError":"'Dyw gosodiadau diogelwch eich porwr ddim 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","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Ardal Gludo","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Dyfyniad bloc"},"basicstyles":{"bold":"Bras","italic":"Italig","strike":"Llinell Trwyddo","subscript":"Is-sgript","superscript":"Uwchsgript","underline":"Tanlinellu"},"about":{"copy":"Hawlfraint &copy; $1. Cedwir pob hawl.","dlgTitle":"About CKEditor 4","moreInfo":"Am wybodaeth ynghylch trwyddedau, ewch i'n gwefan:"},"editor":"Golygydd Testun Cyfoethog","editorPanel":"Panel 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":"Dosbarthiadau Dalen Arddull","advisoryTitle":"Teitl Cynghorol","cssStyle":"Arddull","ok":"Iawn","cancel":"Diddymu","close":"Cau","preview":"Rhagolwg","resize":"Ailfeintio","generalTab":"Cyffredinol","advancedTab":"Uwch","validateNumberFailed":"'Dyw'r gwerth hwn ddim yn rhif.","confirmNewPage":"Byddwch chi'n colli unrhyw newidiadau i'r cynnwys sydd heb eu cadw. Ydych am barhau i lwytho tudalen newydd?","confirmCancel":"Cafodd rhai o'r opsiynau eu newid. Ydych chi 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 Dalen Arddull","width":"Lled","height":"Uchder","align":"Alinio","left":"Chwith","right":"Dde","center":"Canol","justify":"Unioni","alignLeft":"Alinio i'r Chwith","alignRight":"Alinio i'r Dde","alignCenter":"Align Center","alignTop":"Brig","alignMiddle":"Canol","alignBottom":"Gwaelod","alignNone":"None","invalidValue":"Gwerth annilys.","invalidHeight":"Mae'n rhaid i'r uchder fod yn rhif.","invalidWidth":"Mae'n rhaid i'r lled fod yn rhif.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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 am werth 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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
+CKEDITOR.lang['cy']={"widget":{"move":"Clcio a llusgo i symud","label":"%1 widget"},"undo":{"redo":"Ailwneud","undo":"Dadwneud"},"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 y golygydd"},"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":"Dewis"},"cellPad":"Padio'r gell","cellSpace":"Bylchiad y 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","heightUnit":"height unit","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":"Priodweddau'r Tabl","row":{"menu":"Rhes","insertBefore":"Mewnosod Rhes Cyn","insertAfter":"Mewnosod Rhes Ar Ôl","deleteRow":"Dileu Rhesi"},"rows":"Rhesi","summary":"Crynodeb","title":"Priodweddau'r Tabl","toolbar":"Tabl","widthPc":"y cant","widthPx":"picsel","widthUnit":"uned lled"},"stylescombo":{"label":"Arddulliau","panelTitle":"Arddulliau Fformatio","panelTitle1":"Arddulliau Bloc","panelTitle2":"Arddulliau Mewnol","panelTitle3":"Arddulliau Gwrthrych"},"specialchar":{"options":"Opsiynau Nodau Arbennig","title":"Dewis Nod Arbennig","toolbar":"Mewnosod Nod Arbennig"},"sourcedialog":{"toolbar":"HTML","title":"HTML"},"sourcearea":{"toolbar":"HTML"},"showblocks":{"toolbar":"Dangos Blociau"},"removeformat":{"toolbar":"Tynnu Fformat"},"pastetext":{"button":"Gludo fel testun plaen","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Mwyhau","minimize":"Lleihau"},"magicline":{"title":"Mewnosod paragraff yma"},"list":{"bulletedlist":"Mewnosod/Tynnu Rhestr Bwled","numberedlist":"Mewnosod/Tynnu Rhestr Rhifol"},"language":{"button":"Gosod iaith","remove":"Tynnu iaith"},"indent":{"indent":"Cynyddu'r Mewnoliad","outdent":"Lleihau'r Mewnoliad"},"image2":{"alt":"Testun Amgen","btnUpload":"Anfon i'r Gweinydd","captioned":"Delwedd â phennawd","captionPlaceholder":"Caption","infoTab":"Gwyb Delwedd","lockRatio":"Cloi Cymhareb","menu":"Priodweddau Delwedd","pathName":"delwedd","pathNameCaption":"pennawd","resetSize":"Ailosod Maint","resizer":"Clicio a llusgo i ail-meintio","title":"Priodweddau Delwedd","uploadTab":"Lanlwytho","urlMissing":"URL gwreiddiol y ddelwedd ar goll.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Mewnosod Llinell Lorweddol"},"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"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Llwybr elfennau","eleTitle":"Elfen %1"},"contextmenu":{"options":"Opsiynau Dewislen Cyd-destun"},"clipboard":{"copy":"Copïo","copyError":"'Dyw gosodiadau diogelwch eich porwr ddim 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","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Ardal Gludo","pasteMsg":"Paste your content inside the area below and press OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Dyfyniad bloc"},"basicstyles":{"bold":"Bras","italic":"Italig","strike":"Llinell Trwyddo","subscript":"Is-sgript","superscript":"Uwchsgript","underline":"Tanlinellu"},"about":{"copy":"Hawlfraint &copy; $1. Cedwir pob hawl.","dlgTitle":"About CKEditor 4","moreInfo":"Am wybodaeth ynghylch trwyddedau, ewch i'n gwefan:"},"editor":"Golygydd Testun Cyfoethog","editorPanel":"Panel 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","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":"Dosbarthiadau Dalen Arddull","advisoryTitle":"Teitl Cynghorol","cssStyle":"Arddull","ok":"Iawn","cancel":"Diddymu","close":"Cau","preview":"Rhagolwg","resize":"Ailfeintio","generalTab":"Cyffredinol","advancedTab":"Uwch","validateNumberFailed":"'Dyw'r gwerth hwn ddim yn rhif.","confirmNewPage":"Byddwch chi'n colli unrhyw newidiadau i'r cynnwys sydd heb eu cadw. Ydych am barhau i lwytho tudalen newydd?","confirmCancel":"Cafodd rhai o'r opsiynau eu newid. Ydych chi 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 Dalen Arddull","width":"Lled","height":"Uchder","align":"Alinio","left":"Chwith","right":"Dde","center":"Canol","justify":"Unioni","alignLeft":"Alinio i'r Chwith","alignRight":"Alinio i'r Dde","alignCenter":"Align Center","alignTop":"Brig","alignMiddle":"Canol","alignBottom":"Gwaelod","alignNone":"None","invalidValue":"Gwerth annilys.","invalidHeight":"Mae'n rhaid i'r uchder fod yn rhif.","invalidWidth":"Mae'n rhaid i'r lled fod yn rhif.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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 am werth 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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/da.js b/core/assets/vendor/ckeditor/lang/da.js
index 4ab153a5c70c..6c93e4af8a71 100644
--- a/core/assets/vendor/ckeditor/lang/da.js
+++ b/core/assets/vendor/ckeditor/lang/da.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['da']={"widget":{"move":"Klik og træk for at flytte","label":"%1 widget"},"undo":{"redo":"Annullér fortryd","undo":"Fortryd"},"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"},"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","heightUnit":"højde enhed","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"},"stylescombo":{"label":"Typografi","panelTitle":"Formatering på stylesheet","panelTitle1":"Blok typografi","panelTitle2":"Inline typografi","panelTitle3":"Objekt typografi"},"specialchar":{"options":"Muligheder for specielle karakterer","title":"Vælg specielle karakterer","toolbar":"Indsæt specielle karakterer"},"sourcedialog":{"toolbar":"Kilde","title":"Kilde"},"sourcearea":{"toolbar":"Kilde"},"showblocks":{"toolbar":"Vis afsnitsmærker"},"removeformat":{"toolbar":"Fjern formatering"},"pastetext":{"button":"Indsæt som ikke-formateret tekst","pasteNotification":"Klik %1 for at indsætte. Din browser understøtter ikke indsæt med tastatur eller kontekstmenu-valg.","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"},"notification":{"closed":"Notifikation lukket."},"maximize":{"maximize":"Maksimér","minimize":"Minimér"},"magicline":{"title":"Indsæt afsnit"},"list":{"bulletedlist":"Punktopstilling","numberedlist":"Talopstilling"},"language":{"button":"Vælg sprog","remove":"Fjern sprog"},"indent":{"indent":"Forøg indrykning","outdent":"Formindsk indrykning"},"image2":{"alt":"Alternativ tekst","btnUpload":"Upload fil til serveren","captioned":"Tekstet billede","captionPlaceholder":"Tekst","infoTab":"Generelt","lockRatio":"Lås størrelsesforhold","menu":"Egenskaber for billede","pathName":"billede","pathNameCaption":"tekst","resetSize":"Nulstil størrelse","resizer":"Klik og træk for at ændre størrelsen","title":"Egenskaber for billede","uploadTab":"Upload","urlMissing":"Kilde på billed-URL mangler","altMissing":"Alternativ-tekst mangler."},"horizontalrule":{"toolbar":"Indsæt vandret streg"},"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"},"filetools":{"loadError":"Der skete en fejl ved indlæsningen af filen.","networkError":"Der skete en netværks fejl under uploadingen.","httpError404":"Der skete en HTTP fejl under uploadingen (404: File not found).","httpError403":"Der skete en HTTP fejl under uploadingen (403: Forbidden).","httpError":"Der skete en HTTP fejl under uploadingen (error status: %1).","noUrlError":"Upload URL er ikke defineret.","responseError":"Ikke korrekt server svar."},"elementspath":{"eleLabel":"Sti på element","eleTitle":"%1 element"},"contextmenu":{"options":"Muligheder for hjælpemenu"},"clipboard":{"copy":"Kopiér","copyError":"Din browsers sikkerhedsindstillinger tillader ikke editoren at få automatisk adgang til udklipsholderen. 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. Brug i stedet tastaturet til at klippe teksten (Ctrl/Cmd+X).","paste":"Indsæt","pasteNotification":"Tryk %1 for at sætte ind. Din browser understøtter ikke indsættelse med værktøjslinje knappen eller kontekst menuen.","pasteArea":"Indsættelses område","pasteMsg":"Indsæt dit indhold i området nedenfor og tryk OK."},"blockquote":{"toolbar":"Blokcitat"},"basicstyles":{"bold":"Fed","italic":"Kursiv","strike":"Gennemstreget","subscript":"Sænket skrift","superscript":"Hævet skrift","underline":"Understreget"},"about":{"copy":"Copyright &copy; $1. Alle rettigheder forbeholdes.","dlgTitle":"Om CKEditor 4","moreInfo":"For informationer omkring licens, se venligst vores hjemmeside (på engelsk):"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","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","left":"Venstre","right":"Højre","center":"Center","justify":"Lige margener","alignLeft":"Venstrestillet","alignRight":"Højrestillet","alignCenter":"Centreret","alignTop":"Øverst","alignMiddle":"Centreret","alignBottom":"Nederst","alignNone":"Ingen","invalidValue":"Ugyldig værdi.","invalidHeight":"Højde skal være et tal.","invalidWidth":"Bredde skal være et tal.","invalidLength":"Værdien angivet for feltet \"%1\" skal være et positivt heltal med eller uden en gyldig måleenhed (%2).","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, eller pc).","unavailable":"%1<span class=\"cke_accessibility\">, ikke tilgængelig</span>","keyboard":{"8":"Backspace","13":"Retur","16":"Shift","17":"Ctrl","18":"Alt","32":"Mellemrum","35":"Slut","36":"Hjem","46":"Slet","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Kommando"},"keyboardShortcut":"Tastatur genvej","optionDefault":"Standard"}};
\ No newline at end of file
+CKEDITOR.lang['da']={"widget":{"move":"Klik og træk for at flytte","label":"%1 widget"},"undo":{"redo":"Annullér fortryd","undo":"Fortryd"},"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"},"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","heightUnit":"højde enhed","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"},"stylescombo":{"label":"Typografi","panelTitle":"Formatering på stylesheet","panelTitle1":"Blok typografi","panelTitle2":"Inline typografi","panelTitle3":"Objekt typografi"},"specialchar":{"options":"Muligheder for specielle karakterer","title":"Vælg specielle karakterer","toolbar":"Indsæt specielle karakterer"},"sourcedialog":{"toolbar":"Kilde","title":"Kilde"},"sourcearea":{"toolbar":"Kilde"},"showblocks":{"toolbar":"Vis afsnitsmærker"},"removeformat":{"toolbar":"Fjern formatering"},"pastetext":{"button":"Indsæt som ikke-formateret tekst","pasteNotification":"Klik %1 for at indsætte. Din browser understøtter ikke indsæt med tastatur eller kontekstmenu-valg.","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"},"notification":{"closed":"Notifikation lukket."},"maximize":{"maximize":"Maksimér","minimize":"Minimér"},"magicline":{"title":"Indsæt afsnit"},"list":{"bulletedlist":"Punktopstilling","numberedlist":"Talopstilling"},"language":{"button":"Vælg sprog","remove":"Fjern sprog"},"indent":{"indent":"Forøg indrykning","outdent":"Formindsk indrykning"},"image2":{"alt":"Alternativ tekst","btnUpload":"Upload fil til serveren","captioned":"Tekstet billede","captionPlaceholder":"Tekst","infoTab":"Generelt","lockRatio":"Lås størrelsesforhold","menu":"Egenskaber for billede","pathName":"billede","pathNameCaption":"tekst","resetSize":"Nulstil størrelse","resizer":"Klik og træk for at ændre størrelsen","title":"Egenskaber for billede","uploadTab":"Upload","urlMissing":"Kilde på billed-URL mangler","altMissing":"Alternativ-tekst mangler."},"horizontalrule":{"toolbar":"Indsæt vandret streg"},"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"},"filetools":{"loadError":"Der skete en fejl ved indlæsningen af filen.","networkError":"Der skete en netværks fejl under uploadingen.","httpError404":"Der skete en HTTP fejl under uploadingen (404: File not found).","httpError403":"Der skete en HTTP fejl under uploadingen (403: Forbidden).","httpError":"Der skete en HTTP fejl under uploadingen (error status: %1).","noUrlError":"Upload URL er ikke defineret.","responseError":"Ikke korrekt server svar."},"elementspath":{"eleLabel":"Sti på element","eleTitle":"%1 element"},"contextmenu":{"options":"Muligheder for hjælpemenu"},"clipboard":{"copy":"Kopiér","copyError":"Din browsers sikkerhedsindstillinger tillader ikke editoren at få automatisk adgang til udklipsholderen. 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. Brug i stedet tastaturet til at klippe teksten (Ctrl/Cmd+X).","paste":"Indsæt","pasteNotification":"Tryk %1 for at sætte ind. Din browser understøtter ikke indsættelse med værktøjslinje knappen eller kontekst menuen.","pasteArea":"Indsættelses område","pasteMsg":"Indsæt dit indhold i området nedenfor og tryk OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Blokcitat"},"basicstyles":{"bold":"Fed","italic":"Kursiv","strike":"Gennemstreget","subscript":"Sænket skrift","superscript":"Hævet skrift","underline":"Understreget"},"about":{"copy":"Copyright &copy; $1. Alle rettigheder forbeholdes.","dlgTitle":"Om CKEditor 4","moreInfo":"For informationer omkring licens, se venligst vores hjemmeside (på engelsk):"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Tryk ALT 0 for hjælp","browseServer":"Gennemse...","url":"URL","protocol":"Protokol","upload":"Upload","uploadSubmit":"Upload","image":"Indsæt billede","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","left":"Venstre","right":"Højre","center":"Center","justify":"Lige margener","alignLeft":"Venstrestillet","alignRight":"Højrestillet","alignCenter":"Centreret","alignTop":"Øverst","alignMiddle":"Centreret","alignBottom":"Nederst","alignNone":"Ingen","invalidValue":"Ugyldig værdi.","invalidHeight":"Højde skal være et tal.","invalidWidth":"Bredde skal være et tal.","invalidLength":"Værdien angivet for feltet \"%1\" skal være et positivt heltal med eller uden en gyldig måleenhed (%2).","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, eller pc).","unavailable":"%1<span class=\"cke_accessibility\">, ikke tilgængelig</span>","keyboard":{"8":"Backspace","13":"Retur","16":"Shift","17":"Ctrl","18":"Alt","32":"Mellemrum","35":"Slut","36":"Hjem","46":"Slet","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Kommando"},"keyboardShortcut":"Tastatur genvej","optionDefault":"Standard"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/de-ch.js b/core/assets/vendor/ckeditor/lang/de-ch.js
index bdfbdfedcf4b..78b013d50022 100644
--- a/core/assets/vendor/ckeditor/lang/de-ch.js
+++ b/core/assets/vendor/ckeditor/lang/de-ch.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['de-ch']={"widget":{"move":"Zum Verschieben anwählen und ziehen","label":"%1 Steuerelement"},"undo":{"redo":"Wiederherstellen","undo":"Rückgängig"},"toolbar":{"toolbarCollapse":"Werkzeugleiste einklappen","toolbarExpand":"Werkzeugleiste ausklappen","toolbarGroups":{"document":"Dokument","clipboard":"Zwischenablage/Rückgängig","editing":"Editieren","forms":"Formulare","basicstyles":"Grundstile","paragraph":"Absatz","links":"Links","insert":"Einfügen","styles":"Stile","colors":"Farben","tools":"Werkzeuge"},"toolbars":"Editor Werkzeugleisten"},"table":{"border":"Rahmengrösse","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":"Zelleneigenschaften","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 muss eine Zahl sein.","invalidHeight":"Zellenhöhe muss 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 aussen","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","heightUnit":"Höheneinheit","invalidBorder":"Die Rahmenbreite muss eine Zahl sein.","invalidCellPadding":"Der Zellenabstand innen muss eine positive Zahl sein.","invalidCellSpacing":"Der Zellenabstand aussen muss eine positive Zahl sein.","invalidCols":"Die Anzahl der Spalten muss grösser als 0 sein..","invalidHeight":"Die Tabellenbreite muss eine Zahl sein.","invalidRows":"Die Anzahl der Zeilen muss grösser 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":"Breiteneinheit"},"stylescombo":{"label":"Stil","panelTitle":"Formatierungsstile","panelTitle1":"Blockstile","panelTitle2":"Inline Stilart","panelTitle3":"Objektstile"},"specialchar":{"options":"Sonderzeichenoptionen","title":"Sonderzeichen auswählen","toolbar":"Sonderzeichen einfügen"},"sourcedialog":{"toolbar":"Quellcode","title":"Quellcode"},"sourcearea":{"toolbar":"Quellcode"},"showblocks":{"toolbar":"Blöcke anzeigen"},"removeformat":{"toolbar":"Formatierung entfernen"},"pastetext":{"button":"Als Klartext einfügen","pasteNotification":"Drücken Sie %1 zum Einfügen. Ihr Browser unterstützt nicht das Einfügen über dem Knopf in der Werkzeugleiste oder dem Kontextmenü.","title":"Als Klartext 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 Word einfügen","toolbar":"Aus Word einfügen"},"notification":{"closed":"Benachrichtigung geschlossen."},"maximize":{"maximize":"Maximieren","minimize":"Minimieren"},"magicline":{"title":"Absatz hier einfügen"},"list":{"bulletedlist":"Liste","numberedlist":"Nummerierte Liste einfügen/entfernen"},"language":{"button":"Sprache festlegen","remove":"Sprache entfernen"},"indent":{"indent":"Einzug vergrössern","outdent":"Einzug verkleinern"},"image2":{"alt":"Alternativer Text","btnUpload":"Zum Server senden","captioned":"Bild mit Überschrift","captionPlaceholder":"Überschrift","infoTab":"Bildinfo","lockRatio":"Grössenverhältnis beibehalten","menu":"Bildeigenschaften","pathName":"Bild","pathNameCaption":"Überschrift","resetSize":"Grösse zurücksetzen","resizer":"Zum Vergrössern auswählen und ziehen","title":"Bild-Eigenschaften","uploadTab":"Hochladen","urlMissing":"Bildquellen-URL fehlt.","altMissing":"Alternativer Text fehlt."},"horizontalrule":{"toolbar":"Horizontale Linie einfügen"},"format":{"label":"Format","panelTitle":"Absatzformat","tag_address":"Adresse","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"},"filetools":{"loadError":"Während dem Lesen der Datei ist ein Fehler aufgetreten.","networkError":"Während dem Hochladen der Datei ist ein Netzwerkfehler aufgetreten.","httpError404":"Während dem Hochladen der Datei ist ein HTTP-Fehler aufgetreten (404: Datei nicht gefunden).","httpError403":"Während dem Hochladen der Datei ist ein HTTP-Fehler aufgetreten (403: Verboten).","httpError":"Während dem Hochladen der Datei ist ein HTTP-Fehler aufgetreten (Fehlerstatus: %1).","noUrlError":"Hochlade-URL ist nicht definiert.","responseError":"Falsche Antwort des Servers."},"elementspath":{"eleLabel":"Elementepfad","eleTitle":"%1 Element"},"contextmenu":{"options":"Kontextmenüoptionen"},"clipboard":{"copy":"Kopieren","copyError":"Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch zu 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","pasteNotification":"Drücken Sie %1 zum Einfügen. Ihr Browser unterstützt nicht das Einfügen über dem Knopf in der Werkzeugleiste oder dem Kontextmenü.","pasteArea":"Einfügebereich","pasteMsg":"Fügen Sie den Inhalt in den unteren Bereich ein und drücken Sie OK."},"blockquote":{"toolbar":"Zitatblock"},"basicstyles":{"bold":"Fett","italic":"Kursiv","strike":"Durchgestrichen","subscript":"Tiefgestellt","superscript":"Hochgestellt","underline":"Unterstrichen"},"about":{"copy":"Copyright &copy; $1. Alle Rechte vorbehalten.","dlgTitle":"Über CKEditor 4","moreInfo":"Für Informationen über unsere Lizenzbestimmungen besuchen Sie bitte unsere Webseite:"},"editor":"WYSIWYG-Editor","editorPanel":"WYSIWYG-Editor-Leiste","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":"Kontrollbox","radio":"Optionsfeld","textField":"Textfeld","textarea":"Textfeld","hiddenField":"Verstecktes Feld","button":"Schaltfläche","select":"Auswahlfeld","imageButton":"Bildschaltfläche","notSet":"<nicht festgelegt>","id":"Kennung","name":"Name","langDir":"Schreibrichtung","langDirLtr":"Links nach Rechts (LTR)","langDirRtl":"Rechts nach Links (RTL)","langCode":"Sprachcode","longDescr":"Langbeschreibungs-URL","cssClass":"Formatvorlagenklassen","advisoryTitle":"Titel Beschreibung","cssStyle":"Stil","ok":"OK","cancel":"Abbrechen","close":"Schliessen","preview":"Vorschau","resize":"Grösse ändern","generalTab":"Allgemein","advancedTab":"Erweitert","validateNumberFailed":"Dieser Wert ist keine Nummer.","confirmNewPage":"Alle nicht gespeicherten Änderungen gehen verloren. Sind Sie sicher, die neue Seite zu laden?","confirmCancel":"Einige Optionen wurden geändert. Wollen Sie den Dialog dennoch schliessen?","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","left":"Links","right":"Rechts","center":"Zentriert","justify":"Blocksatz","alignLeft":"Linksbündig","alignRight":"Rechtsbündig","alignCenter":"Zentriert","alignTop":"Oben","alignMiddle":"Mitte","alignBottom":"Unten","alignNone":"Keine","invalidValue":"Ungültiger Wert.","invalidHeight":"Höhe muss eine Zahl sein.","invalidWidth":"Breite muss eine Zahl sein.","invalidLength":"Wert spezifiziert für \"%1\" Feld muss ein positiver numerischer Wert sein mit oder ohne korrekter HTML-Masseinheit (px oder %).","invalidCssLength":"Wert spezifiziert für \"%1\" Feld muss ein positiver numerischer Wert sein mit oder ohne korrekter CSS-Masseinheit (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 korrekter HTML-Masseinheit (px oder %).","invalidInlineStyle":"Wert spezifiziert für inline Stilart muss enthalten ein oder mehr Wertepaare mit dem Format \"Name : Wert\" getrennt durch Semikolons.","cssLengthTooltip":"Geben Sie eine Zahl ein für ein Wert in Pixel oder eine Zahl mit einer korrekten CSS-Masseinheit (px, %, in, cm, mm, em, ex, pt oder pc).","unavailable":"%1<span class=\"cke_accessibility\">, nicht verfügbar</span>","keyboard":{"8":"Rücktaste","13":"Eingabe","16":"Umschalt","17":"Strg","18":"Alt","32":"Leertaste","35":"Ende","36":"Pos1","46":"Entfernen","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Befehl"},"keyboardShortcut":"Tastaturkürzel","optionDefault":"Standard"}};
\ No newline at end of file
+CKEDITOR.lang['de-ch']={"widget":{"move":"Zum Verschieben anwählen und ziehen","label":"%1 Steuerelement"},"undo":{"redo":"Wiederherstellen","undo":"Rückgängig"},"toolbar":{"toolbarCollapse":"Werkzeugleiste einklappen","toolbarExpand":"Werkzeugleiste ausklappen","toolbarGroups":{"document":"Dokument","clipboard":"Zwischenablage/Rückgängig","editing":"Editieren","forms":"Formulare","basicstyles":"Grundstile","paragraph":"Absatz","links":"Links","insert":"Einfügen","styles":"Stile","colors":"Farben","tools":"Werkzeuge"},"toolbars":"Editor Werkzeugleisten"},"table":{"border":"Rahmengrösse","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":"Zelleneigenschaften","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 muss eine Zahl sein.","invalidHeight":"Zellenhöhe muss 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 aussen","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","heightUnit":"Höheneinheit","invalidBorder":"Die Rahmenbreite muss eine Zahl sein.","invalidCellPadding":"Der Zellenabstand innen muss eine positive Zahl sein.","invalidCellSpacing":"Der Zellenabstand aussen muss eine positive Zahl sein.","invalidCols":"Die Anzahl der Spalten muss grösser als 0 sein..","invalidHeight":"Die Tabellenbreite muss eine Zahl sein.","invalidRows":"Die Anzahl der Zeilen muss grösser 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":"Breiteneinheit"},"stylescombo":{"label":"Stil","panelTitle":"Formatierungsstile","panelTitle1":"Blockstile","panelTitle2":"Inline Stilart","panelTitle3":"Objektstile"},"specialchar":{"options":"Sonderzeichenoptionen","title":"Sonderzeichen auswählen","toolbar":"Sonderzeichen einfügen"},"sourcedialog":{"toolbar":"Quellcode","title":"Quellcode"},"sourcearea":{"toolbar":"Quellcode"},"showblocks":{"toolbar":"Blöcke anzeigen"},"removeformat":{"toolbar":"Formatierung entfernen"},"pastetext":{"button":"Als Klartext einfügen","pasteNotification":"Drücken Sie %1 zum Einfügen. Ihr Browser unterstützt nicht das Einfügen über dem Knopf in der Werkzeugleiste oder dem Kontextmenü.","title":"Als Klartext 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 Word einfügen","toolbar":"Aus Word einfügen"},"notification":{"closed":"Benachrichtigung geschlossen."},"maximize":{"maximize":"Maximieren","minimize":"Minimieren"},"magicline":{"title":"Absatz hier einfügen"},"list":{"bulletedlist":"Liste","numberedlist":"Nummerierte Liste einfügen/entfernen"},"language":{"button":"Sprache festlegen","remove":"Sprache entfernen"},"indent":{"indent":"Einzug vergrössern","outdent":"Einzug verkleinern"},"image2":{"alt":"Alternativer Text","btnUpload":"Zum Server senden","captioned":"Bild mit Überschrift","captionPlaceholder":"Überschrift","infoTab":"Bildinfo","lockRatio":"Grössenverhältnis beibehalten","menu":"Bildeigenschaften","pathName":"Bild","pathNameCaption":"Überschrift","resetSize":"Grösse zurücksetzen","resizer":"Zum Vergrössern auswählen und ziehen","title":"Bild-Eigenschaften","uploadTab":"Hochladen","urlMissing":"Bildquellen-URL fehlt.","altMissing":"Alternativer Text fehlt."},"horizontalrule":{"toolbar":"Horizontale Linie einfügen"},"format":{"label":"Format","panelTitle":"Absatzformat","tag_address":"Adresse","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"},"filetools":{"loadError":"Während dem Lesen der Datei ist ein Fehler aufgetreten.","networkError":"Während dem Hochladen der Datei ist ein Netzwerkfehler aufgetreten.","httpError404":"Während dem Hochladen der Datei ist ein HTTP-Fehler aufgetreten (404: Datei nicht gefunden).","httpError403":"Während dem Hochladen der Datei ist ein HTTP-Fehler aufgetreten (403: Verboten).","httpError":"Während dem Hochladen der Datei ist ein HTTP-Fehler aufgetreten (Fehlerstatus: %1).","noUrlError":"Hochlade-URL ist nicht definiert.","responseError":"Falsche Antwort des Servers."},"elementspath":{"eleLabel":"Elementepfad","eleTitle":"%1 Element"},"contextmenu":{"options":"Kontextmenüoptionen"},"clipboard":{"copy":"Kopieren","copyError":"Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch zu 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","pasteNotification":"Drücken Sie %1 zum Einfügen. Ihr Browser unterstützt nicht das Einfügen über dem Knopf in der Werkzeugleiste oder dem Kontextmenü.","pasteArea":"Einfügebereich","pasteMsg":"Fügen Sie den Inhalt in den unteren Bereich ein und drücken Sie OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Zitatblock"},"basicstyles":{"bold":"Fett","italic":"Kursiv","strike":"Durchgestrichen","subscript":"Tiefgestellt","superscript":"Hochgestellt","underline":"Unterstrichen"},"about":{"copy":"Copyright &copy; $1. Alle Rechte vorbehalten.","dlgTitle":"Über CKEditor 4","moreInfo":"Für Informationen über unsere Lizenzbestimmungen besuchen Sie bitte unsere Webseite:"},"editor":"WYSIWYG-Editor","editorPanel":"WYSIWYG-Editor-Leiste","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","form":"Formular","checkbox":"Kontrollbox","radio":"Optionsfeld","textField":"Textfeld","textarea":"Textfeld","hiddenField":"Verstecktes Feld","button":"Schaltfläche","select":"Auswahlfeld","imageButton":"Bildschaltfläche","notSet":"<nicht festgelegt>","id":"Kennung","name":"Name","langDir":"Schreibrichtung","langDirLtr":"Links nach Rechts (LTR)","langDirRtl":"Rechts nach Links (RTL)","langCode":"Sprachcode","longDescr":"Langbeschreibungs-URL","cssClass":"Formatvorlagenklassen","advisoryTitle":"Titel Beschreibung","cssStyle":"Stil","ok":"OK","cancel":"Abbrechen","close":"Schliessen","preview":"Vorschau","resize":"Grösse ändern","generalTab":"Allgemein","advancedTab":"Erweitert","validateNumberFailed":"Dieser Wert ist keine Nummer.","confirmNewPage":"Alle nicht gespeicherten Änderungen gehen verloren. Sind Sie sicher, die neue Seite zu laden?","confirmCancel":"Einige Optionen wurden geändert. Wollen Sie den Dialog dennoch schliessen?","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","left":"Links","right":"Rechts","center":"Zentriert","justify":"Blocksatz","alignLeft":"Linksbündig","alignRight":"Rechtsbündig","alignCenter":"Zentriert","alignTop":"Oben","alignMiddle":"Mitte","alignBottom":"Unten","alignNone":"Keine","invalidValue":"Ungültiger Wert.","invalidHeight":"Höhe muss eine Zahl sein.","invalidWidth":"Breite muss eine Zahl sein.","invalidLength":"Wert spezifiziert für \"%1\" Feld muss ein positiver numerischer Wert sein mit oder ohne korrekter HTML-Masseinheit (px oder %).","invalidCssLength":"Wert spezifiziert für \"%1\" Feld muss ein positiver numerischer Wert sein mit oder ohne korrekter CSS-Masseinheit (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 korrekter HTML-Masseinheit (px oder %).","invalidInlineStyle":"Wert spezifiziert für inline Stilart muss enthalten ein oder mehr Wertepaare mit dem Format \"Name : Wert\" getrennt durch Semikolons.","cssLengthTooltip":"Geben Sie eine Zahl ein für ein Wert in Pixel oder eine Zahl mit einer korrekten CSS-Masseinheit (px, %, in, cm, mm, em, ex, pt oder pc).","unavailable":"%1<span class=\"cke_accessibility\">, nicht verfügbar</span>","keyboard":{"8":"Rücktaste","13":"Eingabe","16":"Umschalt","17":"Strg","18":"Alt","32":"Leertaste","35":"Ende","36":"Pos1","46":"Entfernen","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Befehl"},"keyboardShortcut":"Tastaturkürzel","optionDefault":"Standard"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/de.js b/core/assets/vendor/ckeditor/lang/de.js
index a687d6ec40f4..d841acf785f1 100644
--- a/core/assets/vendor/ckeditor/lang/de.js
+++ b/core/assets/vendor/ckeditor/lang/de.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['de']={"widget":{"move":"Zum Verschieben anwählen und ziehen","label":"%1 Steuerelement"},"undo":{"redo":"Wiederherstellen","undo":"Rückgängig"},"toolbar":{"toolbarCollapse":"Werkzeugleiste einklappen","toolbarExpand":"Werkzeugleiste ausklappen","toolbarGroups":{"document":"Dokument","clipboard":"Zwischenablage/Rückgängig","editing":"Editieren","forms":"Formulare","basicstyles":"Grundstile","paragraph":"Absatz","links":"Links","insert":"Einfügen","styles":"Stile","colors":"Farben","tools":"Werkzeuge"},"toolbars":"Editor Werkzeugleisten"},"table":{"border":"Rahmengröße","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":"Zelleneigenschaften","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 muss eine Zahl sein.","invalidHeight":"Zellenhöhe muss 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","heightUnit":"Höheneinheit","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"},"stylescombo":{"label":"Stil","panelTitle":"Formatierungsstile","panelTitle1":"Blockstile","panelTitle2":"Inline Stilart","panelTitle3":"Objektstile"},"specialchar":{"options":"Sonderzeichenoptionen","title":"Sonderzeichen auswählen","toolbar":"Sonderzeichen einfügen"},"sourcedialog":{"toolbar":"Quellcode","title":"Quellcode"},"sourcearea":{"toolbar":"Quellcode"},"showblocks":{"toolbar":"Blöcke anzeigen"},"removeformat":{"toolbar":"Formatierung entfernen"},"pastetext":{"button":"Als Klartext einfügen","pasteNotification":"Drücken Sie %1 zum Einfügen. Ihr Browser unterstützt nicht das Einfügen über den Knopf in der Toolbar oder dem Kontextmenü.","title":"Als Klartext 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 Word einfügen","toolbar":"Aus Word einfügen"},"notification":{"closed":"Benachrichtigung geschlossen."},"maximize":{"maximize":"Maximieren","minimize":"Minimieren"},"magicline":{"title":"Absatz hier einfügen"},"list":{"bulletedlist":"Liste","numberedlist":"Nummerierte Liste einfügen/entfernen"},"language":{"button":"Sprache festlegen","remove":"Sprache entfernen"},"indent":{"indent":"Einzug vergrößern","outdent":"Einzug verkleinern"},"image2":{"alt":"Alternativer Text","btnUpload":"Zum Server senden","captioned":"Bild mit Überschrift","captionPlaceholder":"Überschrift","infoTab":"Bildinfo","lockRatio":"Größenverhältnis beibehalten","menu":"Bildeigenschaften","pathName":"Bild","pathNameCaption":"Überschrift","resetSize":"Größe zurücksetzen","resizer":"Zum Vergrößern auswählen und ziehen","title":"Bild-Eigenschaften","uploadTab":"Hochladen","urlMissing":"Bildquellen-URL fehlt.","altMissing":"Alternativer Text fehlt."},"horizontalrule":{"toolbar":"Horizontale Linie einfügen"},"format":{"label":"Format","panelTitle":"Absatzformat","tag_address":"Adresse","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"},"filetools":{"loadError":"Während des Lesens der Datei ist ein Fehler aufgetreten.","networkError":"Während des Hochladens der Datei ist ein Netzwerkfehler aufgetreten.","httpError404":"Während des Hochladens der Datei ist ein HTTP-Fehler aufgetreten (404: Datei nicht gefunden).","httpError403":"Während des Hochladens der Datei ist ein HTTP-Fehler aufgetreten (403: Verboten).","httpError":"Während des Hochladens der Datei ist ein HTTP-Fehler aufgetreten (Fehlerstatus: %1).","noUrlError":"Hochlade-URL ist nicht definiert.","responseError":"Falsche Antwort des Servers."},"elementspath":{"eleLabel":"Elementepfad","eleTitle":"%1 Element"},"contextmenu":{"options":"Kontextmenüoptionen"},"clipboard":{"copy":"Kopieren","copyError":"Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch zu 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","pasteNotification":"Drücken Sie %1 zum Einfügen. Ihr Browser unterstützt nicht das Einfügen über den Knopf in der Toolbar oder dem Kontextmenü.","pasteArea":"Einfügebereich","pasteMsg":"Fügen Sie den Inhalt in den unteren Bereich ein und drücken Sie OK."},"blockquote":{"toolbar":"Zitatblock"},"basicstyles":{"bold":"Fett","italic":"Kursiv","strike":"Durchgestrichen","subscript":"Tiefgestellt","superscript":"Hochgestellt","underline":"Unterstrichen"},"about":{"copy":"Copyright &copy; $1. Alle Rechte vorbehalten.","dlgTitle":"Über CKEditor 4","moreInfo":"Für Informationen über unsere Lizenzbestimmungen besuchen sie bitte unsere Webseite:"},"editor":"WYSIWYG-Editor","editorPanel":"WYSIWYG-Editor-Leiste","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":"Kontrollbox","radio":"Optionsfeld","textField":"Textfeld","textarea":"Textfeld","hiddenField":"Verstecktes Feld","button":"Schaltfläche","select":"Auswahlfeld","imageButton":"Bildschaltfläche","notSet":"<nicht festgelegt>","id":"Kennung","name":"Name","langDir":"Schreibrichtung","langDirLtr":"Links nach Rechts (LTR)","langDirRtl":"Rechts nach Links (RTL)","langCode":"Sprachcode","longDescr":"Langbeschreibungs-URL","cssClass":"Formatvorlagenklassen","advisoryTitle":"Titel Beschreibung","cssStyle":"Stil","ok":"OK","cancel":"Abbrechen","close":"Schließen","preview":"Vorschau","resize":"Größe ändern","generalTab":"Allgemein","advancedTab":"Erweitert","validateNumberFailed":"Dieser Wert ist keine Nummer.","confirmNewPage":"Alle nicht gespeicherten Änderungen gehen verloren. 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","left":"Links","right":"Rechts","center":"Zentriert","justify":"Blocksatz","alignLeft":"Linksbündig","alignRight":"Rechtsbündig","alignCenter":"Zentriert","alignTop":"Oben","alignMiddle":"Mitte","alignBottom":"Unten","alignNone":"Keine","invalidValue":"Ungültiger Wert.","invalidHeight":"Höhe muss eine Zahl sein.","invalidWidth":"Breite muss eine Zahl sein.","invalidLength":"Der für das Feld \"%1\" angegebene Wert muss eine positive Zahl mit oder ohne gültige Maßeinheit (%2) 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>","keyboard":{"8":"Rücktaste","13":"Eingabe","16":"Umschalt","17":"Strg","18":"Alt","32":"Leer","35":"Ende","36":"Pos1","46":"Entfernen","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Befehl"},"keyboardShortcut":"Tastaturkürzel","optionDefault":"Standard"}};
\ No newline at end of file
+CKEDITOR.lang['de']={"widget":{"move":"Zum Verschieben anwählen und ziehen","label":"%1 Steuerelement"},"undo":{"redo":"Wiederherstellen","undo":"Rückgängig"},"toolbar":{"toolbarCollapse":"Werkzeugleiste einklappen","toolbarExpand":"Werkzeugleiste ausklappen","toolbarGroups":{"document":"Dokument","clipboard":"Zwischenablage/Rückgängig","editing":"Editieren","forms":"Formulare","basicstyles":"Grundstile","paragraph":"Absatz","links":"Links","insert":"Einfügen","styles":"Stile","colors":"Farben","tools":"Werkzeuge"},"toolbars":"Editor Werkzeugleisten"},"table":{"border":"Rahmengröße","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":"Zelleneigenschaften","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 muss eine Zahl sein.","invalidHeight":"Zellenhöhe muss 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","heightUnit":"Höheneinheit","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"},"stylescombo":{"label":"Stil","panelTitle":"Formatierungsstile","panelTitle1":"Blockstile","panelTitle2":"Inline Stilart","panelTitle3":"Objektstile"},"specialchar":{"options":"Sonderzeichenoptionen","title":"Sonderzeichen auswählen","toolbar":"Sonderzeichen einfügen"},"sourcedialog":{"toolbar":"Quellcode","title":"Quellcode"},"sourcearea":{"toolbar":"Quellcode"},"showblocks":{"toolbar":"Blöcke anzeigen"},"removeformat":{"toolbar":"Formatierung entfernen"},"pastetext":{"button":"Als Klartext einfügen","pasteNotification":"Drücken Sie %1 zum Einfügen. Ihr Browser unterstützt nicht das Einfügen über den Knopf in der Toolbar oder dem Kontextmenü.","title":"Als Klartext 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 Word einfügen","toolbar":"Aus Word einfügen"},"notification":{"closed":"Benachrichtigung geschlossen."},"maximize":{"maximize":"Maximieren","minimize":"Minimieren"},"magicline":{"title":"Absatz hier einfügen"},"list":{"bulletedlist":"Liste","numberedlist":"Nummerierte Liste einfügen/entfernen"},"language":{"button":"Sprache festlegen","remove":"Sprache entfernen"},"indent":{"indent":"Einzug vergrößern","outdent":"Einzug verkleinern"},"image2":{"alt":"Alternativer Text","btnUpload":"Zum Server senden","captioned":"Bild mit Überschrift","captionPlaceholder":"Überschrift","infoTab":"Bildinfo","lockRatio":"Größenverhältnis beibehalten","menu":"Bildeigenschaften","pathName":"Bild","pathNameCaption":"Überschrift","resetSize":"Größe zurücksetzen","resizer":"Zum Vergrößern auswählen und ziehen","title":"Bild-Eigenschaften","uploadTab":"Hochladen","urlMissing":"Bildquellen-URL fehlt.","altMissing":"Alternativer Text fehlt."},"horizontalrule":{"toolbar":"Horizontale Linie einfügen"},"format":{"label":"Format","panelTitle":"Absatzformat","tag_address":"Adresse","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"},"filetools":{"loadError":"Während des Lesens der Datei ist ein Fehler aufgetreten.","networkError":"Während des Hochladens der Datei ist ein Netzwerkfehler aufgetreten.","httpError404":"Während des Hochladens der Datei ist ein HTTP-Fehler aufgetreten (404: Datei nicht gefunden).","httpError403":"Während des Hochladens der Datei ist ein HTTP-Fehler aufgetreten (403: Verboten).","httpError":"Während des Hochladens der Datei ist ein HTTP-Fehler aufgetreten (Fehlerstatus: %1).","noUrlError":"Hochlade-URL ist nicht definiert.","responseError":"Falsche Antwort des Servers."},"elementspath":{"eleLabel":"Elementepfad","eleTitle":"%1 Element"},"contextmenu":{"options":"Kontextmenüoptionen"},"clipboard":{"copy":"Kopieren","copyError":"Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch zu 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","pasteNotification":"Drücken Sie %1 zum Einfügen. Ihr Browser unterstützt nicht das Einfügen über den Knopf in der Toolbar oder dem Kontextmenü.","pasteArea":"Einfügebereich","pasteMsg":"Fügen Sie den Inhalt in den unteren Bereich ein und drücken Sie OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Zitatblock"},"basicstyles":{"bold":"Fett","italic":"Kursiv","strike":"Durchgestrichen","subscript":"Tiefgestellt","superscript":"Hochgestellt","underline":"Unterstrichen"},"about":{"copy":"Copyright &copy; $1. Alle Rechte vorbehalten.","dlgTitle":"Über CKEditor 4","moreInfo":"Für Informationen über unsere Lizenzbestimmungen besuchen sie bitte unsere Webseite:"},"editor":"WYSIWYG-Editor","editorPanel":"WYSIWYG-Editor-Leiste","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","form":"Formular","checkbox":"Kontrollbox","radio":"Optionsfeld","textField":"Textfeld","textarea":"Textfeld","hiddenField":"Verstecktes Feld","button":"Schaltfläche","select":"Auswahlfeld","imageButton":"Bildschaltfläche","notSet":"<nicht festgelegt>","id":"Kennung","name":"Name","langDir":"Schreibrichtung","langDirLtr":"Links nach Rechts (LTR)","langDirRtl":"Rechts nach Links (RTL)","langCode":"Sprachcode","longDescr":"Langbeschreibungs-URL","cssClass":"Formatvorlagenklassen","advisoryTitle":"Titel Beschreibung","cssStyle":"Stil","ok":"OK","cancel":"Abbrechen","close":"Schließen","preview":"Vorschau","resize":"Größe ändern","generalTab":"Allgemein","advancedTab":"Erweitert","validateNumberFailed":"Dieser Wert ist keine Nummer.","confirmNewPage":"Alle nicht gespeicherten Änderungen gehen verloren. 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","left":"Links","right":"Rechts","center":"Zentriert","justify":"Blocksatz","alignLeft":"Linksbündig","alignRight":"Rechtsbündig","alignCenter":"Zentriert","alignTop":"Oben","alignMiddle":"Mitte","alignBottom":"Unten","alignNone":"Keine","invalidValue":"Ungültiger Wert.","invalidHeight":"Höhe muss eine Zahl sein.","invalidWidth":"Breite muss eine Zahl sein.","invalidLength":"Der für das Feld \"%1\" angegebene Wert muss eine positive Zahl mit oder ohne gültige Maßeinheit (%2) 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>","keyboard":{"8":"Rücktaste","13":"Eingabe","16":"Umschalt","17":"Strg","18":"Alt","32":"Leer","35":"Ende","36":"Pos1","46":"Entfernen","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Befehl"},"keyboardShortcut":"Tastaturkürzel","optionDefault":"Standard"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/el.js b/core/assets/vendor/ckeditor/lang/el.js
index cce9ecba53ab..3c7c0c17808e 100644
--- a/core/assets/vendor/ckeditor/lang/el.js
+++ b/core/assets/vendor/ckeditor/lang/el.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['el']={"widget":{"move":"Κάνετε κλικ και σύρετε το ποντίκι για να μετακινήστε","label":"%1 widget"},"undo":{"redo":"Επανάληψη","undo":"Αναίρεση"},"toolbar":{"toolbarCollapse":"Σύμπτυξη Εργαλειοθήκης","toolbarExpand":"Ανάπτυξη Εργαλειοθήκης","toolbarGroups":{"document":"Έγγραφο","clipboard":"Πρόχειρο/Αναίρεση","editing":"Επεξεργασία","forms":"Φόρμες","basicstyles":"Βασικά Στυλ","paragraph":"Παράγραφος","links":"Σύνδεσμοι","insert":"Εισαγωγή","styles":"Στυλ","colors":"Χρώματα","tools":"Εργαλεία"},"toolbars":"Εργαλειοθήκες επεξεργαστή"},"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":"Πρώτη Γραμμή","heightUnit":"height unit","invalidBorder":"Το πάχος του περιγράμματος πρέπει να είναι ένας αριθμός.","invalidCellPadding":"Η αναπλήρωση των κελιών πρέπει να είναι θετικός αριθμός.","invalidCellSpacing":"Η απόσταση μεταξύ των κελιών πρέπει να είναι ένας θετικός αριθμός.","invalidCols":"Ο αριθμός των στηλών πρέπει να είναι μεγαλύτερος από 0.","invalidHeight":"Το ύψος του πίνακα πρέπει να είναι αριθμός.","invalidRows":"Ο αριθμός των σειρών πρέπει να είναι μεγαλύτερος από 0.","invalidWidth":"Το πλάτος του πίνακα πρέπει να είναι ένας αριθμός.","menu":"Ιδιότητες Πίνακα","row":{"menu":"Γραμμή","insertBefore":"Εισαγωγή Γραμμής Πριν","insertAfter":"Εισαγωγή Γραμμής Μετά","deleteRow":"Διαγραφή Γραμμών"},"rows":"Γραμμές","summary":"Περίληψη","title":"Ιδιότητες Πίνακα","toolbar":"Πίνακας","widthPc":"τοις εκατό","widthPx":"pixel","widthUnit":"μονάδα πλάτους"},"stylescombo":{"label":"Μορφές","panelTitle":"Στυλ Μορφοποίησης","panelTitle1":"Στυλ Τμημάτων","panelTitle2":"Στυλ Εν Σειρά","panelTitle3":"Στυλ Αντικειμένων"},"specialchar":{"options":"Επιλογές Ειδικών Χαρακτήρων","title":"Επιλέξτε Έναν Ειδικό Χαρακτήρα","toolbar":"Εισαγωγή Ειδικού Χαρακτήρα"},"sourcedialog":{"toolbar":"Κώδικας","title":"Κώδικας"},"sourcearea":{"toolbar":"Κώδικας"},"showblocks":{"toolbar":"Προβολή Τμημάτων"},"removeformat":{"toolbar":"Εκκαθάριση Μορφοποίησης"},"pastetext":{"button":"Επικόλληση ως απλό κείμενο","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Επικόλληση ως απλό κείμενο"},"pastefromword":{"confirmCleanup":"Το κείμενο που επικολλάται φαίνεται να είναι αντιγραμμένο από το Word. Μήπως θα θέλατε να καθαριστεί προτού επικολληθεί;","error":"Δεν ήταν δυνατό να καθαριστούν τα δεδομένα λόγω ενός εσωτερικού σφάλματος","title":"Επικόλληση από το Word","toolbar":"Επικόλληση από το Word"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Μεγιστοποίηση","minimize":"Ελαχιστοποίηση"},"magicline":{"title":"Εισάγετε παράγραφο εδώ"},"list":{"bulletedlist":"Εισαγωγή/Απομάκρυνση Λίστας Κουκκίδων","numberedlist":"Εισαγωγή/Απομάκρυνση Αριθμημένης Λίστας"},"language":{"button":"Θέση γλώσσας","remove":"Αφαίρεση γλώσσας"},"indent":{"indent":"Αύξηση Εσοχής","outdent":"Μείωση Εσοχής"},"image2":{"alt":"Εναλλακτικό Κείμενο","btnUpload":"Αποστολή στον Διακομιστή","captioned":"Εικόνα με λεζάντα","captionPlaceholder":"Λεζάντα","infoTab":"Πληροφορίες Εικόνας","lockRatio":"Κλείδωμα Αναλογίας","menu":"Ιδιότητες Εικόνας","pathName":"εικόνα","pathNameCaption":"λεζάντα","resetSize":"Επαναφορά Αρχικού Μεγέθους","resizer":"Κάνετε κλικ και σύρετε το ποντίκι για να αλλάξετε το μέγεθος","title":"Ιδιότητες Εικόνας","uploadTab":"Αποστολή","urlMissing":"Λείπει το πηγαίο URL της εικόνας.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Εισαγωγή Οριζόντιας Γραμμής"},"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":"Προ-μορφοποιημένη"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Διαδρομή Στοιχείων","eleTitle":"Στοιχείο %1"},"contextmenu":{"options":"Επιλογές Αναδυόμενου Μενού"},"clipboard":{"copy":"Αντιγραφή","copyError":"Οι ρυθμίσεις ασφαλείας του περιηγητή σας δεν επιτρέπουν την επιλεγμένη εργασία αντιγραφής. Παρακαλώ χρησιμοποιείστε το πληκτρολόγιο (Ctrl/Cmd+C).","cut":"Αποκοπή","cutError":"Οι ρυθμίσεις ασφαλείας του περιηγητή σας δεν επιτρέπουν την επιλεγμένη εργασία αποκοπής. Παρακαλώ χρησιμοποιείστε το πληκτρολόγιο (Ctrl/Cmd+X).","paste":"Επικόλληση","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Περιοχή Επικόλλησης","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Περιοχή Παράθεσης"},"basicstyles":{"bold":"Έντονη","italic":"Πλάγια","strike":"Διακριτή Διαγραφή","subscript":"Δείκτης","superscript":"Εκθέτης","underline":"Υπογράμμιση"},"about":{"copy":"Πνευματικά δικαιώματα &copy; $1 Με επιφύλαξη παντός δικαιώματος.","dlgTitle":"Περί του CKEditor 4","moreInfo":"Για πληροφορίες σχετικές με την άδεια χρήσης, παρακαλούμε επισκεφθείτε την ιστοσελίδα μας:"},"editor":"Επεξεργαστής Πλούσιου Κειμένου","editorPanel":"Πίνακας Επεξεργαστή Πλούσιου Κειμένου","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":"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":"Στοίχιση","left":"Αριστερά","right":"Δεξιά","center":"Κέντρο","justify":"Πλήρης Στοίχιση","alignLeft":"Στοίχιση Αριστερά","alignRight":"Στοίχιση Δεξιά","alignCenter":"Align Center","alignTop":"Πάνω","alignMiddle":"Μέση","alignBottom":"Κάτω","alignNone":"Χωρίς","invalidValue":"Μη έγκυρη τιμή.","invalidHeight":"Το ύψος πρέπει να είναι ένας αριθμός.","invalidWidth":"Το πλάτος πρέπει να είναι ένας αριθμός.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Η τιμή που ορίζεται για το πεδίο \"%1\" πρέπει να είναι ένας θετικός αριθμός με ή χωρίς μια έγκυρη μονάδα μέτρησης CSS (px, %, in, cm, mm, em, ex, pt, ή pc).","invalidHtmlLength":"Η τιμή που ορίζεται για το πεδίο \"%1\" πρέπει να είναι ένας θετικός αριθμός με ή χωρίς μια έγκυρη μονάδα μέτρησης HTML (px ή %).","invalidInlineStyle":"Η τιμή για το εν σειρά στυλ πρέπει να περιέχει ένα ή περισσότερα ζεύγη με την μορφή \"όνομα: τιμή\" διαχωρισμένα με Ελληνικό ερωτηματικό.","cssLengthTooltip":"Εισάγεται μια τιμή σε pixel ή έναν αριθμό μαζί με μια έγκυρη μονάδα μέτρησης CSS (px, %, in, cm, mm, em, ex, pt, ή pc).","unavailable":"%1<span class=\"cke_accessibility\">, δεν είναι διαθέσιμο</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Κενό","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Εντολή"},"keyboardShortcut":"Συντόμευση πληκτρολογίου","optionDefault":"Default"}};
\ No newline at end of file
+CKEDITOR.lang['el']={"widget":{"move":"Κάνετε κλικ και σύρετε το ποντίκι για να μετακινήστε","label":"%1 widget"},"undo":{"redo":"Επανάληψη","undo":"Αναίρεση"},"toolbar":{"toolbarCollapse":"Σύμπτυξη Εργαλειοθήκης","toolbarExpand":"Ανάπτυξη Εργαλειοθήκης","toolbarGroups":{"document":"Έγγραφο","clipboard":"Πρόχειρο/Αναίρεση","editing":"Επεξεργασία","forms":"Φόρμες","basicstyles":"Βασικά Στυλ","paragraph":"Παράγραφος","links":"Σύνδεσμοι","insert":"Εισαγωγή","styles":"Στυλ","colors":"Χρώματα","tools":"Εργαλεία"},"toolbars":"Εργαλειοθήκες επεξεργαστή"},"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":"Πρώτη Γραμμή","heightUnit":"height unit","invalidBorder":"Το πάχος του περιγράμματος πρέπει να είναι ένας αριθμός.","invalidCellPadding":"Η αναπλήρωση των κελιών πρέπει να είναι θετικός αριθμός.","invalidCellSpacing":"Η απόσταση μεταξύ των κελιών πρέπει να είναι ένας θετικός αριθμός.","invalidCols":"Ο αριθμός των στηλών πρέπει να είναι μεγαλύτερος από 0.","invalidHeight":"Το ύψος του πίνακα πρέπει να είναι αριθμός.","invalidRows":"Ο αριθμός των σειρών πρέπει να είναι μεγαλύτερος από 0.","invalidWidth":"Το πλάτος του πίνακα πρέπει να είναι ένας αριθμός.","menu":"Ιδιότητες Πίνακα","row":{"menu":"Γραμμή","insertBefore":"Εισαγωγή Γραμμής Πριν","insertAfter":"Εισαγωγή Γραμμής Μετά","deleteRow":"Διαγραφή Γραμμών"},"rows":"Γραμμές","summary":"Περίληψη","title":"Ιδιότητες Πίνακα","toolbar":"Πίνακας","widthPc":"τοις εκατό","widthPx":"pixel","widthUnit":"μονάδα πλάτους"},"stylescombo":{"label":"Μορφές","panelTitle":"Στυλ Μορφοποίησης","panelTitle1":"Στυλ Τμημάτων","panelTitle2":"Στυλ Εν Σειρά","panelTitle3":"Στυλ Αντικειμένων"},"specialchar":{"options":"Επιλογές Ειδικών Χαρακτήρων","title":"Επιλέξτε Έναν Ειδικό Χαρακτήρα","toolbar":"Εισαγωγή Ειδικού Χαρακτήρα"},"sourcedialog":{"toolbar":"Κώδικας","title":"Κώδικας"},"sourcearea":{"toolbar":"Κώδικας"},"showblocks":{"toolbar":"Προβολή Τμημάτων"},"removeformat":{"toolbar":"Εκκαθάριση Μορφοποίησης"},"pastetext":{"button":"Επικόλληση ως απλό κείμενο","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Επικόλληση ως απλό κείμενο"},"pastefromword":{"confirmCleanup":"Το κείμενο που επικολλάται φαίνεται να είναι αντιγραμμένο από το Word. Μήπως θα θέλατε να καθαριστεί προτού επικολληθεί;","error":"Δεν ήταν δυνατό να καθαριστούν τα δεδομένα λόγω ενός εσωτερικού σφάλματος","title":"Επικόλληση από το Word","toolbar":"Επικόλληση από το Word"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Μεγιστοποίηση","minimize":"Ελαχιστοποίηση"},"magicline":{"title":"Εισάγετε παράγραφο εδώ"},"list":{"bulletedlist":"Εισαγωγή/Απομάκρυνση Λίστας Κουκκίδων","numberedlist":"Εισαγωγή/Απομάκρυνση Αριθμημένης Λίστας"},"language":{"button":"Θέση γλώσσας","remove":"Αφαίρεση γλώσσας"},"indent":{"indent":"Αύξηση Εσοχής","outdent":"Μείωση Εσοχής"},"image2":{"alt":"Εναλλακτικό Κείμενο","btnUpload":"Αποστολή στον Διακομιστή","captioned":"Εικόνα με λεζάντα","captionPlaceholder":"Λεζάντα","infoTab":"Πληροφορίες Εικόνας","lockRatio":"Κλείδωμα Αναλογίας","menu":"Ιδιότητες Εικόνας","pathName":"εικόνα","pathNameCaption":"λεζάντα","resetSize":"Επαναφορά Αρχικού Μεγέθους","resizer":"Κάνετε κλικ και σύρετε το ποντίκι για να αλλάξετε το μέγεθος","title":"Ιδιότητες Εικόνας","uploadTab":"Αποστολή","urlMissing":"Λείπει το πηγαίο URL της εικόνας.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Εισαγωγή Οριζόντιας Γραμμής"},"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":"Προ-μορφοποιημένη"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Διαδρομή Στοιχείων","eleTitle":"Στοιχείο %1"},"contextmenu":{"options":"Επιλογές Αναδυόμενου Μενού"},"clipboard":{"copy":"Αντιγραφή","copyError":"Οι ρυθμίσεις ασφαλείας του περιηγητή σας δεν επιτρέπουν την επιλεγμένη εργασία αντιγραφής. Παρακαλώ χρησιμοποιείστε το πληκτρολόγιο (Ctrl/Cmd+C).","cut":"Αποκοπή","cutError":"Οι ρυθμίσεις ασφαλείας του περιηγητή σας δεν επιτρέπουν την επιλεγμένη εργασία αποκοπής. Παρακαλώ χρησιμοποιείστε το πληκτρολόγιο (Ctrl/Cmd+X).","paste":"Επικόλληση","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Περιοχή Επικόλλησης","pasteMsg":"Paste your content inside the area below and press OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Περιοχή Παράθεσης"},"basicstyles":{"bold":"Έντονη","italic":"Πλάγια","strike":"Διακριτή Διαγραφή","subscript":"Δείκτης","superscript":"Εκθέτης","underline":"Υπογράμμιση"},"about":{"copy":"Πνευματικά δικαιώματα &copy; $1 Με επιφύλαξη παντός δικαιώματος.","dlgTitle":"Περί του CKEditor 4","moreInfo":"Για πληροφορίες σχετικές με την άδεια χρήσης, παρακαλούμε επισκεφθείτε την ιστοσελίδα μας:"},"editor":"Επεξεργαστής Πλούσιου Κειμένου","editorPanel":"Πίνακας Επεξεργαστή Πλούσιου Κειμένου","common":{"editorHelp":"Πατήστε το ALT 0 για βοήθεια","browseServer":"Εξερεύνηση Διακομιστή","url":"URL","protocol":"Πρωτόκολλο","upload":"Αποστολή","uploadSubmit":"Αποστολή στον Διακομιστή","image":"Εικόνα","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":"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":"Στοίχιση","left":"Αριστερά","right":"Δεξιά","center":"Κέντρο","justify":"Πλήρης Στοίχιση","alignLeft":"Στοίχιση Αριστερά","alignRight":"Στοίχιση Δεξιά","alignCenter":"Align Center","alignTop":"Πάνω","alignMiddle":"Μέση","alignBottom":"Κάτω","alignNone":"Χωρίς","invalidValue":"Μη έγκυρη τιμή.","invalidHeight":"Το ύψος πρέπει να είναι ένας αριθμός.","invalidWidth":"Το πλάτος πρέπει να είναι ένας αριθμός.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Η τιμή που ορίζεται για το πεδίο \"%1\" πρέπει να είναι ένας θετικός αριθμός με ή χωρίς μια έγκυρη μονάδα μέτρησης CSS (px, %, in, cm, mm, em, ex, pt, ή pc).","invalidHtmlLength":"Η τιμή που ορίζεται για το πεδίο \"%1\" πρέπει να είναι ένας θετικός αριθμός με ή χωρίς μια έγκυρη μονάδα μέτρησης HTML (px ή %).","invalidInlineStyle":"Η τιμή για το εν σειρά στυλ πρέπει να περιέχει ένα ή περισσότερα ζεύγη με την μορφή \"όνομα: τιμή\" διαχωρισμένα με Ελληνικό ερωτηματικό.","cssLengthTooltip":"Εισάγεται μια τιμή σε pixel ή έναν αριθμό μαζί με μια έγκυρη μονάδα μέτρησης CSS (px, %, in, cm, mm, em, ex, pt, ή pc).","unavailable":"%1<span class=\"cke_accessibility\">, δεν είναι διαθέσιμο</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Κενό","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Εντολή"},"keyboardShortcut":"Συντόμευση πληκτρολογίου","optionDefault":"Default"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/en-au.js b/core/assets/vendor/ckeditor/lang/en-au.js
index 4c78b350ceed..ff2673949971 100644
--- a/core/assets/vendor/ckeditor/lang/en-au.js
+++ b/core/assets/vendor/ckeditor/lang/en-au.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['en-au']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"Redo","undo":"Undo"},"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"},"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","heightUnit":"height unit","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"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"sourcedialog":{"toolbar":"Source","title":"Source"},"sourcearea":{"toolbar":"Source"},"showblocks":{"toolbar":"Show Blocks"},"removeformat":{"toolbar":"Remove Format"},"pastetext":{"button":"Paste as plain text","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maximise","minimize":"Minimise"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"image2":{"alt":"Alternative Text","btnUpload":"Send it to the Server","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Image Info","lockRatio":"Lock Ratio","menu":"Image Properties","pathName":"image","pathNameCaption":"caption","resetSize":"Reset Size","resizer":"Click and drag to resize","title":"Image Properties","uploadTab":"Upload","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"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"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"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","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","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":"You have changed some options. Are you sure you want to close the dialog window?","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","left":"Left","right":"Right","center":"Centre","justify":"Justify","alignLeft":"Align Left","alignRight":"Align Right","alignCenter":"Align Centre","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
+CKEDITOR.lang['en-au']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"Redo","undo":"Undo"},"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"},"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","heightUnit":"height unit","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"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"sourcedialog":{"toolbar":"Source","title":"Source"},"sourcearea":{"toolbar":"Source"},"showblocks":{"toolbar":"Show Blocks"},"removeformat":{"toolbar":"Remove Format"},"pastetext":{"button":"Paste as plain text","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maximise","minimize":"Minimise"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"image2":{"alt":"Alternative Text","btnUpload":"Send it to the Server","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Image Info","lockRatio":"Lock Ratio","menu":"Image Properties","pathName":"image","pathNameCaption":"caption","resetSize":"Reset Size","resizer":"Click and drag to resize","title":"Image Properties","uploadTab":"Upload","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"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"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"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","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","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":"You have changed some options. Are you sure you want to close the dialog window?","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","left":"Left","right":"Right","center":"Centre","justify":"Justify","alignLeft":"Align Left","alignRight":"Align Right","alignCenter":"Align Centre","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/en-ca.js b/core/assets/vendor/ckeditor/lang/en-ca.js
index ffa97abafd29..7b138fd525b0 100644
--- a/core/assets/vendor/ckeditor/lang/en-ca.js
+++ b/core/assets/vendor/ckeditor/lang/en-ca.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['en-ca']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"Redo","undo":"Undo"},"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"},"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","heightUnit":"height unit","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"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"sourcedialog":{"toolbar":"Source","title":"Source"},"sourcearea":{"toolbar":"Source"},"showblocks":{"toolbar":"Show Blocks"},"removeformat":{"toolbar":"Remove Format"},"pastetext":{"button":"Paste as plain text","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"image2":{"alt":"Alternative Text","btnUpload":"Send it to the Server","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Image Info","lockRatio":"Lock Ratio","menu":"Image Properties","pathName":"image","pathNameCaption":"caption","resetSize":"Reset Size","resizer":"Click and drag to resize","title":"Image Properties","uploadTab":"Upload","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"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"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"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","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","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":"You have changed some options. Are you sure you want to close the dialog window?","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","left":"Left","right":"Right","center":"Centre","justify":"Justify","alignLeft":"Align Left","alignRight":"Align Right","alignCenter":"Align Center","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
+CKEDITOR.lang['en-ca']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"Redo","undo":"Undo"},"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"},"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","heightUnit":"height unit","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"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"sourcedialog":{"toolbar":"Source","title":"Source"},"sourcearea":{"toolbar":"Source"},"showblocks":{"toolbar":"Show Blocks"},"removeformat":{"toolbar":"Remove Format"},"pastetext":{"button":"Paste as plain text","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"image2":{"alt":"Alternative Text","btnUpload":"Send it to the Server","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Image Info","lockRatio":"Lock Ratio","menu":"Image Properties","pathName":"image","pathNameCaption":"caption","resetSize":"Reset Size","resizer":"Click and drag to resize","title":"Image Properties","uploadTab":"Upload","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"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"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"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","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","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":"You have changed some options. Are you sure you want to close the dialog window?","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","left":"Left","right":"Right","center":"Centre","justify":"Justify","alignLeft":"Align Left","alignRight":"Align Right","alignCenter":"Align Center","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/en-gb.js b/core/assets/vendor/ckeditor/lang/en-gb.js
index 14401e65b464..72d4c0984947 100644
--- a/core/assets/vendor/ckeditor/lang/en-gb.js
+++ b/core/assets/vendor/ckeditor/lang/en-gb.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['en-gb']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"Redo","undo":"Undo"},"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"},"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","heightUnit":"height unit","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"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"sourcedialog":{"toolbar":"Source","title":"Source"},"sourcearea":{"toolbar":"Source"},"showblocks":{"toolbar":"Show Blocks"},"removeformat":{"toolbar":"Remove Format"},"pastetext":{"button":"Paste as plain text","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maximise","minimize":"Minimise"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"image2":{"alt":"Alternative Text","btnUpload":"Send it to the Server","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Image Info","lockRatio":"Lock Ratio","menu":"Image Properties","pathName":"image","pathNameCaption":"caption","resetSize":"Reset Size","resizer":"Click and drag to resize","title":"Image Properties","uploadTab":"Upload","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"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"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"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","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","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":"You have changed some options. Are you sure you want to close the dialogue window?","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","left":"Left","right":"Right","center":"Center","justify":"Justify","alignLeft":"Align Left","alignRight":"Align Right","alignCenter":"Align Center","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
+CKEDITOR.lang['en-gb']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"Redo","undo":"Undo"},"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"},"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","heightUnit":"height unit","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"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"sourcedialog":{"toolbar":"Source","title":"Source"},"sourcearea":{"toolbar":"Source"},"showblocks":{"toolbar":"Show Blocks"},"removeformat":{"toolbar":"Remove Format"},"pastetext":{"button":"Paste as plain text","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maximise","minimize":"Minimise"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"image2":{"alt":"Alternative Text","btnUpload":"Send it to the Server","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Image Info","lockRatio":"Lock Ratio","menu":"Image Properties","pathName":"image","pathNameCaption":"caption","resetSize":"Reset Size","resizer":"Click and drag to resize","title":"Image Properties","uploadTab":"Upload","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"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"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"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","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","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":"You have changed some options. Are you sure you want to close the dialogue window?","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","left":"Left","right":"Right","center":"Center","justify":"Justify","alignLeft":"Align Left","alignRight":"Align Right","alignCenter":"Align Center","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/en.js b/core/assets/vendor/ckeditor/lang/en.js
index bec2b3d9af5f..e2e1f7268ef6 100644
--- a/core/assets/vendor/ckeditor/lang/en.js
+++ b/core/assets/vendor/ckeditor/lang/en.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['en']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"Redo","undo":"Undo"},"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"},"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","heightUnit":"height unit","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"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"sourcedialog":{"toolbar":"Source","title":"Source"},"sourcearea":{"toolbar":"Source"},"showblocks":{"toolbar":"Show Blocks"},"removeformat":{"toolbar":"Remove Format"},"pastetext":{"button":"Paste as plain text","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"image2":{"alt":"Alternative Text","btnUpload":"Send it to the Server","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Image Info","lockRatio":"Lock Ratio","menu":"Image Properties","pathName":"image","pathNameCaption":"caption","resetSize":"Reset Size","resizer":"Click and drag to resize","title":"Image Properties","uploadTab":"Upload","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"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"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"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","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strikethrough","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","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":"You have changed some options. Are you sure you want to close the dialog window?","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","left":"Left","right":"Right","center":"Center","justify":"Justify","alignLeft":"Align Left","alignRight":"Align Right","alignCenter":"Align Center","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
+CKEDITOR.lang['en']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"Redo","undo":"Undo"},"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"},"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","heightUnit":"height unit","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"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"sourcedialog":{"toolbar":"Source","title":"Source"},"sourcearea":{"toolbar":"Source"},"showblocks":{"toolbar":"Show Blocks"},"removeformat":{"toolbar":"Remove Format"},"pastetext":{"button":"Paste as plain text","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"image2":{"alt":"Alternative Text","btnUpload":"Send it to the Server","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Image Info","lockRatio":"Lock Ratio","menu":"Image Properties","pathName":"image","pathNameCaption":"caption","resetSize":"Reset Size","resizer":"Click and drag to resize","title":"Image Properties","uploadTab":"Upload","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"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"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"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","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strikethrough","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","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":"You have changed some options. Are you sure you want to close the dialog window?","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","left":"Left","right":"Right","center":"Center","justify":"Justify","alignLeft":"Align Left","alignRight":"Align Right","alignCenter":"Align Center","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/eo.js b/core/assets/vendor/ckeditor/lang/eo.js
index 9833b4bb8499..f746849735b6 100644
--- a/core/assets/vendor/ckeditor/lang/eo.js
+++ b/core/assets/vendor/ckeditor/lang/eo.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['eo']={"widget":{"move":"klaki kaj treni por movi","label":"%1 fenestraĵo"},"undo":{"redo":"Refari","undo":"Malfari"},"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"},"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","heightUnit":"height unit","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"},"stylescombo":{"label":"Stiloj","panelTitle":"Stiloj pri enpaĝigo","panelTitle1":"Stiloj de blokoj","panelTitle2":"Enliniaj Stiloj","panelTitle3":"Stiloj de objektoj"},"specialchar":{"options":"Opcioj pri Specialaj Signoj","title":"Selekti Specialan Signon","toolbar":"Enmeti Specialan Signon"},"sourcedialog":{"toolbar":"Fonto","title":"Fonto"},"sourcearea":{"toolbar":"Fonto"},"showblocks":{"toolbar":"Montri la blokojn"},"removeformat":{"toolbar":"Forigi Formaton"},"pastetext":{"button":"Interglui kiel platan tekston","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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"},"notification":{"closed":"Sciigo fermita"},"maximize":{"maximize":"Pligrandigi","minimize":"Malgrandigi"},"magicline":{"title":"Enmeti paragrafon ĉi-tien"},"list":{"bulletedlist":"Bula Listo","numberedlist":"Numera Listo"},"language":{"button":"Instali lingvon","remove":"Forigi lingvon"},"indent":{"indent":"Pligrandigi Krommarĝenon","outdent":"Malpligrandigi Krommarĝenon"},"image2":{"alt":"Anstataŭiga Teksto","btnUpload":"Sendu al Servilo","captioned":"Bildo kun apudskribo","captionPlaceholder":"Apudskribo","infoTab":"Informoj pri Bildo","lockRatio":"Konservi Proporcion","menu":"Atributoj de Bildo","pathName":"bildo","pathNameCaption":"apudskribo","resetSize":"Origina Grando","resizer":"Kliki kaj treni por ŝanĝi la grandon","title":"Atributoj de Bildo","uploadTab":"Alŝuti","urlMissing":"La fontretadreso de la bildo mankas.","altMissing":"Alternativa teksto mankas."},"horizontalrule":{"toolbar":"Enmeti Horizontalan Linion"},"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"},"filetools":{"loadError":"Eraro okazis dum la dosiera legado.","networkError":"Reta eraro okazis dum la dosiera alŝuto.","httpError404":"HTTP eraro okazis dum la dosiera alŝuto (404: dosiero ne trovita).","httpError403":"HTTP eraro okazis dum la dosiera alŝuto (403: malpermesita).","httpError":"HTTP eraro okazis dum la dosiera alŝuto (erara stato: %1).","noUrlError":"Alŝuta URL ne estas difinita.","responseError":"Malĝusta respondo de la servilo."},"elementspath":{"eleLabel":"Vojo al Elementoj","eleTitle":"%1 elementoj"},"contextmenu":{"options":"Opcioj de Kunteksta Menuo"},"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","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Intergluoareo","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Citaĵo"},"basicstyles":{"bold":"Grasa","italic":"Kursiva","strike":"Trastreko","subscript":"Suba indico","superscript":"Supra indico","underline":"Substreko"},"about":{"copy":"Copyright &copy; $1. Ĉiuj rajtoj rezervitaj.","dlgTitle":"Pri CKEditor 4","moreInfo":"Por informoj pri licenco, bonvolu viziti nian retpaĝaron:"},"editor":"RiĉTeksta Redaktilo","editorPanel":"Panelo de la RiĉTeksta Redaktilo","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","left":"Maldekstre","right":"Dekstre","center":"Centre","justify":"Ĝisrandigi Ambaŭflanke","alignLeft":"Ĝisrandigi maldekstren","alignRight":"Ĝisrandigi dekstren","alignCenter":"Align Center","alignTop":"Supre","alignMiddle":"Centre","alignBottom":"Malsupre","alignNone":"Neniu","invalidValue":"Nevalida Valoro","invalidHeight":"Alto devas esti nombro.","invalidWidth":"Larĝo devas esti nombro.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Retropaŝo","13":"Enigi","16":"Registrumo","17":"Stirklavo","18":"Alt-klavo","32":"Spaco","35":"Fino","36":"Hejmo","46":"Forigi","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Komando"},"keyboardShortcut":"Fulmoklavo","optionDefault":"Defaŭlta"}};
\ No newline at end of file
+CKEDITOR.lang['eo']={"widget":{"move":"klaki kaj treni por movi","label":"%1 fenestraĵo"},"undo":{"redo":"Refari","undo":"Malfari"},"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"},"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","heightUnit":"height unit","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"},"stylescombo":{"label":"Stiloj","panelTitle":"Stiloj pri enpaĝigo","panelTitle1":"Stiloj de blokoj","panelTitle2":"Enliniaj Stiloj","panelTitle3":"Stiloj de objektoj"},"specialchar":{"options":"Opcioj pri Specialaj Signoj","title":"Selekti Specialan Signon","toolbar":"Enmeti Specialan Signon"},"sourcedialog":{"toolbar":"Fonto","title":"Fonto"},"sourcearea":{"toolbar":"Fonto"},"showblocks":{"toolbar":"Montri la blokojn"},"removeformat":{"toolbar":"Forigi Formaton"},"pastetext":{"button":"Interglui kiel platan tekston","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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"},"notification":{"closed":"Sciigo fermita"},"maximize":{"maximize":"Pligrandigi","minimize":"Malgrandigi"},"magicline":{"title":"Enmeti paragrafon ĉi-tien"},"list":{"bulletedlist":"Bula Listo","numberedlist":"Numera Listo"},"language":{"button":"Instali lingvon","remove":"Forigi lingvon"},"indent":{"indent":"Pligrandigi Krommarĝenon","outdent":"Malpligrandigi Krommarĝenon"},"image2":{"alt":"Anstataŭiga Teksto","btnUpload":"Sendu al Servilo","captioned":"Bildo kun apudskribo","captionPlaceholder":"Apudskribo","infoTab":"Informoj pri Bildo","lockRatio":"Konservi Proporcion","menu":"Atributoj de Bildo","pathName":"bildo","pathNameCaption":"apudskribo","resetSize":"Origina Grando","resizer":"Kliki kaj treni por ŝanĝi la grandon","title":"Atributoj de Bildo","uploadTab":"Alŝuti","urlMissing":"La fontretadreso de la bildo mankas.","altMissing":"Alternativa teksto mankas."},"horizontalrule":{"toolbar":"Enmeti Horizontalan Linion"},"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"},"filetools":{"loadError":"Eraro okazis dum la dosiera legado.","networkError":"Reta eraro okazis dum la dosiera alŝuto.","httpError404":"HTTP eraro okazis dum la dosiera alŝuto (404: dosiero ne trovita).","httpError403":"HTTP eraro okazis dum la dosiera alŝuto (403: malpermesita).","httpError":"HTTP eraro okazis dum la dosiera alŝuto (erara stato: %1).","noUrlError":"Alŝuta URL ne estas difinita.","responseError":"Malĝusta respondo de la servilo."},"elementspath":{"eleLabel":"Vojo al Elementoj","eleTitle":"%1 elementoj"},"contextmenu":{"options":"Opcioj de Kunteksta Menuo"},"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","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Intergluoareo","pasteMsg":"Paste your content inside the area below and press OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Citaĵo"},"basicstyles":{"bold":"Grasa","italic":"Kursiva","strike":"Trastreko","subscript":"Suba indico","superscript":"Supra indico","underline":"Substreko"},"about":{"copy":"Copyright &copy; $1. Ĉiuj rajtoj rezervitaj.","dlgTitle":"Pri CKEditor 4","moreInfo":"Por informoj pri licenco, bonvolu viziti nian retpaĝaron:"},"editor":"RiĉTeksta Redaktilo","editorPanel":"Panelo de la RiĉTeksta Redaktilo","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","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","left":"Maldekstre","right":"Dekstre","center":"Centre","justify":"Ĝisrandigi Ambaŭflanke","alignLeft":"Ĝisrandigi maldekstren","alignRight":"Ĝisrandigi dekstren","alignCenter":"Align Center","alignTop":"Supre","alignMiddle":"Centre","alignBottom":"Malsupre","alignNone":"Neniu","invalidValue":"Nevalida Valoro","invalidHeight":"Alto devas esti nombro.","invalidWidth":"Larĝo devas esti nombro.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Retropaŝo","13":"Enigi","16":"Registrumo","17":"Stirklavo","18":"Alt-klavo","32":"Spaco","35":"Fino","36":"Hejmo","46":"Forigi","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Komando"},"keyboardShortcut":"Fulmoklavo","optionDefault":"Defaŭlta"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/es-mx.js b/core/assets/vendor/ckeditor/lang/es-mx.js
index cd5876f70731..422f30a613cf 100644
--- a/core/assets/vendor/ckeditor/lang/es-mx.js
+++ b/core/assets/vendor/ckeditor/lang/es-mx.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['es-mx']={"widget":{"move":"Presiona y arrastra para mover","label":"%1 widget"},"undo":{"redo":"Rehacer","undo":"Deshacer"},"toolbar":{"toolbarCollapse":"Colapsar barra de herramientas","toolbarExpand":"Expandir barra de herramientas","toolbarGroups":{"document":"Documento","clipboard":"Portapapeles/deshacer","editing":"Editando","forms":"Formularios","basicstyles":"Estilo básico","paragraph":"Párrafo","links":"Enlaces","insert":"Insertar","styles":"Estilos","colors":"Colores","tools":"Herramientas"},"toolbars":"Editor de barra de herramientas"},"table":{"border":"Tamaño del borde","caption":"Subtítulo","cell":{"menu":"Celda","insertBefore":"Insertar una celda antes","insertAfter":"Insertar una celda despues","deleteCell":"Borrar celdas","merge":"Unir celdas","mergeRight":"Unir a la derecha","mergeDown":"Unir abajo","splitHorizontal":"Dividir celda horizontalmente","splitVertical":"Dividir celda verticalmente","title":"Propiedades de la celda","cellType":"Tipo de celda","rowSpan":"Extensión de las filas","colSpan":"Extensión de las columnas","wordWrap":"Ajuste de línea","hAlign":"Alineación horizontal","vAlign":"Alineación vertical","alignBaseline":"Base","bgColor":"Color de fondo","borderColor":"Color de borde","data":"Datos","header":"Encabezado","yes":"Si","no":"No","invalidWidth":"El ancho de la celda debe ser un número entero.","invalidHeight":"El alto de la celda debe ser un número entero.","invalidRowSpan":"El intervalo de filas debe ser un número entero.","invalidColSpan":"El intervalo de columnas debe ser un número entero.","chooseColor":"Escoger"},"cellPad":"relleno de celda","cellSpace":"Espacio de celda","column":{"menu":"Columna","insertBefore":"Insertar columna antes","insertAfter":"Insertar columna después","deleteColumn":"Borrar columnas"},"columns":"Columnas","deleteTable":"Borrar tabla","headers":"Encabezados","headersBoth":"Ambos","headersColumn":"Primera columna","headersNone":"Ninguna","headersRow":"Primera fila","heightUnit":"height unit","invalidBorder":"El tamaño del borde debe ser un número entero.","invalidCellPadding":"El relleno de la celda debe ser un número positivo.","invalidCellSpacing":"El espacio de la celda debe ser un número positivo.","invalidCols":"El número de columnas debe ser un número mayo que 0.","invalidHeight":"La altura de la tabla debe ser un número.","invalidRows":"El número de filas debe ser mayor a 0.","invalidWidth":"El ancho de la tabla debe ser un número.","menu":"Propiedades de la tabla","row":{"menu":"Fila","insertBefore":"Inserta una fila antes","insertAfter":"Inserta una fila después","deleteRow":"Borrar filas"},"rows":"Filas","summary":"Resumen","title":"Propiedades de la tabla","toolbar":"Tabla","widthPc":"porcentaje","widthPx":"pixeles","widthUnit":"Unidad de ancho"},"stylescombo":{"label":"Estilos","panelTitle":"Estilos de formatos","panelTitle1":"Estilos de bloques","panelTitle2":"Estilos de líneas","panelTitle3":"Estilo de objetos"},"specialchar":{"options":"Opciones de carácteres especiales","title":"Seleccione un carácter especial","toolbar":"Inserta un carácter especial"},"sourcedialog":{"toolbar":"Fuente","title":"Fuente"},"sourcearea":{"toolbar":"Fuente"},"showblocks":{"toolbar":"Mostrar bloques"},"removeformat":{"toolbar":"Remover formato"},"pastetext":{"button":"Pegar como texto plano","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"El texto que desea pegar parece estar copiado de Word. ¿Quieres limpiarlo antes de pegarlo?","error":"No fue posible limpiar los datos pegados debido a un error interno","title":"Pegar desde word","toolbar":"Pegar desde word"},"notification":{"closed":"Notificación cerrada."},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"magicline":{"title":"Insertar un párrafo aquí"},"list":{"bulletedlist":"Insertar/Remover Lista con viñetas","numberedlist":"Insertar/Remover Lista numerada"},"language":{"button":"Establecer idioma","remove":"Remover idioma"},"indent":{"indent":"Incrementar sangría","outdent":"Decrementar sangría"},"image2":{"alt":"Texto alternativo","btnUpload":"Enviar al servidor","captioned":"Imagen subtitulada","captionPlaceholder":"Subtítulo","infoTab":"Información de la imagen","lockRatio":"Bloquear aspecto","menu":"Propiedades de la imagen","pathName":"imagen","pathNameCaption":"subtítulo","resetSize":"Reiniciar tamaño","resizer":"Presiona y arrastra para redimensionar","title":"Propiedades de imagen","uploadTab":"Cargar","urlMissing":"Falta la URL de origen de la imagen.","altMissing":"Falta texto alternativo."},"horizontalrule":{"toolbar":"Insertar una línea horizontal"},"format":{"label":"Formato","panelTitle":"Formato de párrafo","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":"Formateado"},"filetools":{"loadError":"Ha ocurrido un error al leer el archivo","networkError":"Ha ocurrido un error de red durante la carga del archivo.","httpError404":"Se ha producido un error HTTP durante la subida de archivos (404: archivo no encontrado).","httpError403":"Se ha producido un error HTTP durante la subida de archivos (403: Prohibido).","httpError":"Se ha producido un error HTTP durante la subida de archivos (error: %1).","noUrlError":"La URL de subida no está definida.","responseError":"Respuesta incorrecta del servidor."},"elementspath":{"eleLabel":"Ruta de los elementos","eleTitle":"%1 elemento"},"contextmenu":{"options":"Opciones del menú contextual"},"clipboard":{"copy":"Copiar","copyError":"La configuración de seguridad de su navegador no permite al editor ejecutar automáticamente operaciones de copiado. Por favor, utilice el teclado para (Ctrl/Cmd+C).","cut":"Cortar","cutError":"La configuración de seguridad de su navegador no permite al editor ejecutar automáticamente operaciones de corte. Por favor, utilice el teclado para (Ctrl/Cmd+X).","paste":"Pegar","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Entrecomillado"},"basicstyles":{"bold":"Negrita","italic":"Cursiva","strike":"Tachado","subscript":"subíndice","superscript":"Sobrescrito","underline":"Subrayada"},"about":{"copy":"Derechos reservados &copy; $1. Todos los derechos reservados","dlgTitle":"Acerca de CKEditor 4","moreInfo":"Para información sobre la licencia por favor visita nuestro sitio web:"},"editor":"Editor de texto enriquecido","editorPanel":"Panel del editor de texto","common":{"editorHelp":"Presiona ALT + 0 para ayuda","browseServer":"Examinar servidor","url":"URL","protocol":"Protocolo","upload":"Subir","uploadSubmit":"Enviar al servidor","image":"Imagen","flash":"Flash","form":"Formulario","checkbox":"Casilla de verificación","radio":"Botón de opción","textField":"Campo de texto","textarea":"Área de texto","hiddenField":"Campo oculto","button":"Botón","select":"Campo de selección","imageButton":"Botón de imagen","notSet":"<not set>","id":"Id","name":"Nombre","langDir":"Dirección de idiomas","langDirLtr":"Izquierda a derecha (LTR)","langDirRtl":"Derecha a izquierda (RTL)","langCode":"Código de lenguaje","longDescr":"URL descripción larga","cssClass":"Clases de hoja de estilo","advisoryTitle":"Título del anuncio","cssStyle":"Estilo","ok":"OK","cancel":"Cancelar","close":"Cerrar","preview":"Vista previa","resize":"Redimensionar","generalTab":"General","advancedTab":"Avanzada","validateNumberFailed":"Este valor no es un número.","confirmNewPage":"Se perderán todos los cambios no guardados en este contenido. ¿Seguro que quieres cargar nueva página?","confirmCancel":"Ha cambiado algunas opciones. ¿Está seguro de que desea cerrar la ventana de diálogo?","options":"Opciones","target":"Objetivo","targetNew":"Nueva ventana (_blank)","targetTop":"Ventana superior (_top)","targetSelf":"Misma ventana (_self)","targetParent":"Ventana principal (_parent)","langDirLTR":"Izquierda a Derecha (LTR)","langDirRTL":"Derecha a Izquierda (RTL)","styles":"Estilo","cssClasses":"Clases de hojas de estilo","width":"Ancho","height":"Alto","align":"Alineación","left":"Izquierda","right":"Derecha","center":"Centrado","justify":"Justificado","alignLeft":"Alinear a la izquierda","alignRight":"Alinear a la derecha","alignCenter":"Align Center","alignTop":"Arriba","alignMiddle":"En medio","alignBottom":"Abajo","alignNone":"Ninguno","invalidValue":"Valor inválido","invalidHeight":"La altura debe ser un número.","invalidWidth":"La anchura debe ser un número.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"El valor especificado para el campo \"% 1\" debe ser un número positivo con o sin una unidad de medida CSS válida (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"El valor especificado para el campo \"% 1\" debe ser un número positivo con o sin una unidad de medición HTML válida (px or %).","invalidInlineStyle":"El valor especificado para el estilo en línea debe constar de una o más tuplas con el formato de \"nombre: valor\", separados por punto y coma","cssLengthTooltip":"Introduzca un número para un valor en píxeles o un número con una unidad CSS válida  (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, no disponible</span>","keyboard":{"8":"Retroceso","13":"Intro","16":"Shift","17":"Ctrl","18":"Alt","32":"Espacio","35":"Fin","36":"Inicio","46":"Borrar","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Comando"},"keyboardShortcut":"Atajo de teclado","optionDefault":"Default"}};
\ No newline at end of file
+CKEDITOR.lang['es-mx']={"widget":{"move":"Presiona y arrastra para mover","label":"%1 widget"},"undo":{"redo":"Rehacer","undo":"Deshacer"},"toolbar":{"toolbarCollapse":"Colapsar barra de herramientas","toolbarExpand":"Expandir barra de herramientas","toolbarGroups":{"document":"Documento","clipboard":"Portapapeles/deshacer","editing":"Editando","forms":"Formularios","basicstyles":"Estilo básico","paragraph":"Párrafo","links":"Enlaces","insert":"Insertar","styles":"Estilos","colors":"Colores","tools":"Herramientas"},"toolbars":"Editor de barra de herramientas"},"table":{"border":"Tamaño del borde","caption":"Subtítulo","cell":{"menu":"Celda","insertBefore":"Insertar una celda antes","insertAfter":"Insertar una celda despues","deleteCell":"Borrar celdas","merge":"Unir celdas","mergeRight":"Unir a la derecha","mergeDown":"Unir abajo","splitHorizontal":"Dividir celda horizontalmente","splitVertical":"Dividir celda verticalmente","title":"Propiedades de la celda","cellType":"Tipo de celda","rowSpan":"Extensión de las filas","colSpan":"Extensión de las columnas","wordWrap":"Ajuste de línea","hAlign":"Alineación horizontal","vAlign":"Alineación vertical","alignBaseline":"Base","bgColor":"Color de fondo","borderColor":"Color de borde","data":"Datos","header":"Encabezado","yes":"Si","no":"No","invalidWidth":"El ancho de la celda debe ser un número entero.","invalidHeight":"El alto de la celda debe ser un número entero.","invalidRowSpan":"El intervalo de filas debe ser un número entero.","invalidColSpan":"El intervalo de columnas debe ser un número entero.","chooseColor":"Escoger"},"cellPad":"relleno de celda","cellSpace":"Espacio de celda","column":{"menu":"Columna","insertBefore":"Insertar columna antes","insertAfter":"Insertar columna después","deleteColumn":"Borrar columnas"},"columns":"Columnas","deleteTable":"Borrar tabla","headers":"Encabezados","headersBoth":"Ambos","headersColumn":"Primera columna","headersNone":"Ninguna","headersRow":"Primera fila","heightUnit":"height unit","invalidBorder":"El tamaño del borde debe ser un número entero.","invalidCellPadding":"El relleno de la celda debe ser un número positivo.","invalidCellSpacing":"El espacio de la celda debe ser un número positivo.","invalidCols":"El número de columnas debe ser un número mayo que 0.","invalidHeight":"La altura de la tabla debe ser un número.","invalidRows":"El número de filas debe ser mayor a 0.","invalidWidth":"El ancho de la tabla debe ser un número.","menu":"Propiedades de la tabla","row":{"menu":"Fila","insertBefore":"Inserta una fila antes","insertAfter":"Inserta una fila después","deleteRow":"Borrar filas"},"rows":"Filas","summary":"Resumen","title":"Propiedades de la tabla","toolbar":"Tabla","widthPc":"porcentaje","widthPx":"pixeles","widthUnit":"Unidad de ancho"},"stylescombo":{"label":"Estilos","panelTitle":"Estilos de formatos","panelTitle1":"Estilos de bloques","panelTitle2":"Estilos de líneas","panelTitle3":"Estilo de objetos"},"specialchar":{"options":"Opciones de carácteres especiales","title":"Seleccione un carácter especial","toolbar":"Inserta un carácter especial"},"sourcedialog":{"toolbar":"Fuente","title":"Fuente"},"sourcearea":{"toolbar":"Fuente"},"showblocks":{"toolbar":"Mostrar bloques"},"removeformat":{"toolbar":"Remover formato"},"pastetext":{"button":"Pegar como texto plano","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"El texto que desea pegar parece estar copiado de Word. ¿Quieres limpiarlo antes de pegarlo?","error":"No fue posible limpiar los datos pegados debido a un error interno","title":"Pegar desde word","toolbar":"Pegar desde word"},"notification":{"closed":"Notificación cerrada."},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"magicline":{"title":"Insertar un párrafo aquí"},"list":{"bulletedlist":"Insertar/Remover Lista con viñetas","numberedlist":"Insertar/Remover Lista numerada"},"language":{"button":"Establecer idioma","remove":"Remover idioma"},"indent":{"indent":"Incrementar sangría","outdent":"Decrementar sangría"},"image2":{"alt":"Texto alternativo","btnUpload":"Enviar al servidor","captioned":"Imagen subtitulada","captionPlaceholder":"Subtítulo","infoTab":"Información de la imagen","lockRatio":"Bloquear aspecto","menu":"Propiedades de la imagen","pathName":"imagen","pathNameCaption":"subtítulo","resetSize":"Reiniciar tamaño","resizer":"Presiona y arrastra para redimensionar","title":"Propiedades de imagen","uploadTab":"Cargar","urlMissing":"Falta la URL de origen de la imagen.","altMissing":"Falta texto alternativo."},"horizontalrule":{"toolbar":"Insertar una línea horizontal"},"format":{"label":"Formato","panelTitle":"Formato de párrafo","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":"Formateado"},"filetools":{"loadError":"Ha ocurrido un error al leer el archivo","networkError":"Ha ocurrido un error de red durante la carga del archivo.","httpError404":"Se ha producido un error HTTP durante la subida de archivos (404: archivo no encontrado).","httpError403":"Se ha producido un error HTTP durante la subida de archivos (403: Prohibido).","httpError":"Se ha producido un error HTTP durante la subida de archivos (error: %1).","noUrlError":"La URL de subida no está definida.","responseError":"Respuesta incorrecta del servidor."},"elementspath":{"eleLabel":"Ruta de los elementos","eleTitle":"%1 elemento"},"contextmenu":{"options":"Opciones del menú contextual"},"clipboard":{"copy":"Copiar","copyError":"La configuración de seguridad de su navegador no permite al editor ejecutar automáticamente operaciones de copiado. Por favor, utilice el teclado para (Ctrl/Cmd+C).","cut":"Cortar","cutError":"La configuración de seguridad de su navegador no permite al editor ejecutar automáticamente operaciones de corte. Por favor, utilice el teclado para (Ctrl/Cmd+X).","paste":"Pegar","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Entrecomillado"},"basicstyles":{"bold":"Negrita","italic":"Cursiva","strike":"Tachado","subscript":"subíndice","superscript":"Sobrescrito","underline":"Subrayada"},"about":{"copy":"Derechos reservados &copy; $1. Todos los derechos reservados","dlgTitle":"Acerca de CKEditor 4","moreInfo":"Para información sobre la licencia por favor visita nuestro sitio web:"},"editor":"Editor de texto enriquecido","editorPanel":"Panel del editor de texto","common":{"editorHelp":"Presiona ALT + 0 para ayuda","browseServer":"Examinar servidor","url":"URL","protocol":"Protocolo","upload":"Subir","uploadSubmit":"Enviar al servidor","image":"Imagen","form":"Formulario","checkbox":"Casilla de verificación","radio":"Botón de opción","textField":"Campo de texto","textarea":"Área de texto","hiddenField":"Campo oculto","button":"Botón","select":"Campo de selección","imageButton":"Botón de imagen","notSet":"<not set>","id":"Id","name":"Nombre","langDir":"Dirección de idiomas","langDirLtr":"Izquierda a derecha (LTR)","langDirRtl":"Derecha a izquierda (RTL)","langCode":"Código de lenguaje","longDescr":"URL descripción larga","cssClass":"Clases de hoja de estilo","advisoryTitle":"Título del anuncio","cssStyle":"Estilo","ok":"OK","cancel":"Cancelar","close":"Cerrar","preview":"Vista previa","resize":"Redimensionar","generalTab":"General","advancedTab":"Avanzada","validateNumberFailed":"Este valor no es un número.","confirmNewPage":"Se perderán todos los cambios no guardados en este contenido. ¿Seguro que quieres cargar nueva página?","confirmCancel":"Ha cambiado algunas opciones. ¿Está seguro de que desea cerrar la ventana de diálogo?","options":"Opciones","target":"Objetivo","targetNew":"Nueva ventana (_blank)","targetTop":"Ventana superior (_top)","targetSelf":"Misma ventana (_self)","targetParent":"Ventana principal (_parent)","langDirLTR":"Izquierda a Derecha (LTR)","langDirRTL":"Derecha a Izquierda (RTL)","styles":"Estilo","cssClasses":"Clases de hojas de estilo","width":"Ancho","height":"Alto","align":"Alineación","left":"Izquierda","right":"Derecha","center":"Centrado","justify":"Justificado","alignLeft":"Alinear a la izquierda","alignRight":"Alinear a la derecha","alignCenter":"Align Center","alignTop":"Arriba","alignMiddle":"En medio","alignBottom":"Abajo","alignNone":"Ninguno","invalidValue":"Valor inválido","invalidHeight":"La altura debe ser un número.","invalidWidth":"La anchura debe ser un número.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"El valor especificado para el campo \"% 1\" debe ser un número positivo con o sin una unidad de medida CSS válida (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"El valor especificado para el campo \"% 1\" debe ser un número positivo con o sin una unidad de medición HTML válida (px or %).","invalidInlineStyle":"El valor especificado para el estilo en línea debe constar de una o más tuplas con el formato de \"nombre: valor\", separados por punto y coma","cssLengthTooltip":"Introduzca un número para un valor en píxeles o un número con una unidad CSS válida  (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, no disponible</span>","keyboard":{"8":"Retroceso","13":"Intro","16":"Shift","17":"Ctrl","18":"Alt","32":"Espacio","35":"Fin","36":"Inicio","46":"Borrar","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Comando"},"keyboardShortcut":"Atajo de teclado","optionDefault":"Default"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/es.js b/core/assets/vendor/ckeditor/lang/es.js
index 6e7e6273a94c..f23343230bf4 100644
--- a/core/assets/vendor/ckeditor/lang/es.js
+++ b/core/assets/vendor/ckeditor/lang/es.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['es']={"widget":{"move":"Dar clic y arrastrar para mover","label":"reproductor %1"},"undo":{"redo":"Rehacer","undo":"Deshacer"},"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"},"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","heightUnit":"height unit","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"},"stylescombo":{"label":"Estilo","panelTitle":"Estilos para formatear","panelTitle1":"Estilos de párrafo","panelTitle2":"Estilos de carácter","panelTitle3":"Estilos de objeto"},"specialchar":{"options":"Opciones de caracteres especiales","title":"Seleccione un caracter especial","toolbar":"Insertar Caracter Especial"},"sourcedialog":{"toolbar":"Fuente HTML","title":"Fuente HTML"},"sourcearea":{"toolbar":"Fuente HTML"},"showblocks":{"toolbar":"Mostrar bloques"},"removeformat":{"toolbar":"Eliminar Formato"},"pastetext":{"button":"Pegar como Texto Plano","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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"},"notification":{"closed":"Notificación cerrada."},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"magicline":{"title":"Insertar párrafo aquí"},"list":{"bulletedlist":"Viñetas","numberedlist":"Numeración"},"language":{"button":"Fijar lenguaje","remove":"Quitar lenguaje"},"indent":{"indent":"Aumentar Sangría","outdent":"Disminuir Sangría"},"image2":{"alt":"Texto Alternativo","btnUpload":"Enviar al Servidor","captioned":"Imagen subtitulada","captionPlaceholder":"Leyenda","infoTab":"Información de Imagen","lockRatio":"Proporcional","menu":"Propiedades de Imagen","pathName":"image","pathNameCaption":"subtítulo","resetSize":"Tamaño Original","resizer":"Dar clic y arrastrar para cambiar tamaño","title":"Propiedades de Imagen","uploadTab":"Cargar","urlMissing":"Debe indicar la URL de la imagen.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Insertar Línea Horizontal"},"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"},"filetools":{"loadError":"Ha ocurrido un error durante la lectura del archivo.","networkError":"Error de red ocurrido durante carga de archivo.","httpError404":"Un error HTTP ha ocurrido durante la carga del archivo (404: Archivo no encontrado).","httpError403":"Un error HTTP ha ocurrido durante la carga del archivo (403: Prohibido).","httpError":"Error HTTP ocurrido durante la carga del archivo (Estado del error: %1).","noUrlError":"URL cargada no está definida.","responseError":"Respueta del servidor incorrecta."},"elementspath":{"eleLabel":"Ruta de los elementos","eleTitle":"%1 elemento"},"contextmenu":{"options":"Opciones del menú contextual"},"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","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Zona de pegado","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Cita"},"basicstyles":{"bold":"Negrita","italic":"Cursiva","strike":"Tachado","subscript":"Subíndice","superscript":"Superíndice","underline":"Subrayado"},"about":{"copy":"Copyright &copy; $1. Todos los derechos reservados.","dlgTitle":"Acerca de CKEditor 4","moreInfo":"Para información de licencia, por favor visite nuestro sitio web:"},"editor":"Editor de Texto Enriquecido","editorPanel":"Panel del 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","left":"Izquierda","right":"Derecha","center":"Centrado","justify":"Justificado","alignLeft":"Alinear a Izquierda","alignRight":"Alinear a Derecha","alignCenter":"Centrar","alignTop":"Tope","alignMiddle":"Centro","alignBottom":"Pie","alignNone":"Ninguno","invalidValue":"Valor no válido","invalidHeight":"Altura debe ser un número.","invalidWidth":"Anchura debe ser un número.","invalidLength":"El valor especificado para el campo \"%1\" debe ser un número positivo, incluyendo opcionalmente una unidad de medida válida (%2).","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>","keyboard":{"8":"Retroceso","13":"Ingresar","16":"Mayús.","17":"Ctrl","18":"Alt","32":"Espacio","35":"Fin","36":"Inicio","46":"Suprimir","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Comando"},"keyboardShortcut":"Atajos de teclado","optionDefault":"Default"}};
\ No newline at end of file
+CKEDITOR.lang['es']={"widget":{"move":"Dar clic y arrastrar para mover","label":"reproductor %1"},"undo":{"redo":"Rehacer","undo":"Deshacer"},"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"},"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","heightUnit":"height unit","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"},"stylescombo":{"label":"Estilo","panelTitle":"Estilos para formatear","panelTitle1":"Estilos de párrafo","panelTitle2":"Estilos de carácter","panelTitle3":"Estilos de objeto"},"specialchar":{"options":"Opciones de caracteres especiales","title":"Seleccione un caracter especial","toolbar":"Insertar Caracter Especial"},"sourcedialog":{"toolbar":"Fuente HTML","title":"Fuente HTML"},"sourcearea":{"toolbar":"Fuente HTML"},"showblocks":{"toolbar":"Mostrar bloques"},"removeformat":{"toolbar":"Eliminar Formato"},"pastetext":{"button":"Pegar como Texto Plano","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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"},"notification":{"closed":"Notificación cerrada."},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"magicline":{"title":"Insertar párrafo aquí"},"list":{"bulletedlist":"Viñetas","numberedlist":"Numeración"},"language":{"button":"Fijar lenguaje","remove":"Quitar lenguaje"},"indent":{"indent":"Aumentar Sangría","outdent":"Disminuir Sangría"},"image2":{"alt":"Texto Alternativo","btnUpload":"Enviar al Servidor","captioned":"Imagen subtitulada","captionPlaceholder":"Leyenda","infoTab":"Información de Imagen","lockRatio":"Proporcional","menu":"Propiedades de Imagen","pathName":"image","pathNameCaption":"subtítulo","resetSize":"Tamaño Original","resizer":"Dar clic y arrastrar para cambiar tamaño","title":"Propiedades de Imagen","uploadTab":"Cargar","urlMissing":"Debe indicar la URL de la imagen.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Insertar Línea Horizontal"},"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"},"filetools":{"loadError":"Ha ocurrido un error durante la lectura del archivo.","networkError":"Error de red ocurrido durante carga de archivo.","httpError404":"Un error HTTP ha ocurrido durante la carga del archivo (404: Archivo no encontrado).","httpError403":"Un error HTTP ha ocurrido durante la carga del archivo (403: Prohibido).","httpError":"Error HTTP ocurrido durante la carga del archivo (Estado del error: %1).","noUrlError":"URL cargada no está definida.","responseError":"Respueta del servidor incorrecta."},"elementspath":{"eleLabel":"Ruta de los elementos","eleTitle":"%1 elemento"},"contextmenu":{"options":"Opciones del menú contextual"},"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","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Zona de pegado","pasteMsg":"Paste your content inside the area below and press OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Cita"},"basicstyles":{"bold":"Negrita","italic":"Cursiva","strike":"Tachado","subscript":"Subíndice","superscript":"Superíndice","underline":"Subrayado"},"about":{"copy":"Copyright &copy; $1. Todos los derechos reservados.","dlgTitle":"Acerca de CKEditor 4","moreInfo":"Para información de licencia, por favor visite nuestro sitio web:"},"editor":"Editor de Texto Enriquecido","editorPanel":"Panel del 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","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","left":"Izquierda","right":"Derecha","center":"Centrado","justify":"Justificado","alignLeft":"Alinear a Izquierda","alignRight":"Alinear a Derecha","alignCenter":"Centrar","alignTop":"Tope","alignMiddle":"Centro","alignBottom":"Pie","alignNone":"Ninguno","invalidValue":"Valor no válido","invalidHeight":"Altura debe ser un número.","invalidWidth":"Anchura debe ser un número.","invalidLength":"El valor especificado para el campo \"%1\" debe ser un número positivo, incluyendo opcionalmente una unidad de medida válida (%2).","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>","keyboard":{"8":"Retroceso","13":"Ingresar","16":"Mayús.","17":"Ctrl","18":"Alt","32":"Espacio","35":"Fin","36":"Inicio","46":"Suprimir","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Comando"},"keyboardShortcut":"Atajos de teclado","optionDefault":"Default"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/et.js b/core/assets/vendor/ckeditor/lang/et.js
index 66a936b2e76a..8b37bdc31e1b 100644
--- a/core/assets/vendor/ckeditor/lang/et.js
+++ b/core/assets/vendor/ckeditor/lang/et.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['et']={"widget":{"move":"Liigutamiseks klõpsa ja lohista","label":"%1 vidin"},"undo":{"redo":"Toimingu kordamine","undo":"Tagasivõtmine"},"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"},"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","heightUnit":"kõrgusühik","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"},"stylescombo":{"label":"Stiil","panelTitle":"Vormindusstiilid","panelTitle1":"Blokkstiilid","panelTitle2":"Reasisesed stiilid","panelTitle3":"Objektistiilid"},"specialchar":{"options":"Erimärkide valikud","title":"Erimärgi valimine","toolbar":"Erimärgi sisestamine"},"sourcedialog":{"toolbar":"Lähtekood","title":"Lähtekood"},"sourcearea":{"toolbar":"Lähtekood"},"showblocks":{"toolbar":"Blokkide näitamine"},"removeformat":{"toolbar":"Vormingu eemaldamine"},"pastetext":{"button":"Asetamine tavalise tekstina","pasteNotification":"Asetamiseks vajuta %1. Sinu brauser ei toeta asetamist tööriistariba nupu või kontekstimenüü valikuga.","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"},"notification":{"closed":"Teavitused on suletud."},"maximize":{"maximize":"Maksimeerimine","minimize":"Minimeerimine"},"magicline":{"title":"Sisesta siia lõigu tekst"},"list":{"bulletedlist":"Punktloend","numberedlist":"Numberloend"},"language":{"button":"Määra keel","remove":"Eemalda keel"},"indent":{"indent":"Taande suurendamine","outdent":"Taande vähendamine"},"image2":{"alt":"Alternatiivne tekst","btnUpload":"Saada serverisse","captioned":"Pealkirjaga pilt","captionPlaceholder":"Pealkiri","infoTab":"Pildi info","lockRatio":"Lukusta kuvasuhe","menu":"Pildi omadused","pathName":"pilt","pathNameCaption":"pealkiri","resetSize":"Lähtesta suurus","resizer":"Suuruse muutmiseks klõpsa ja lohista","title":"Pildi omadused","uploadTab":"Lae üles","urlMissing":"Pildi lähte-URL on puudu.","altMissing":"Alternatiivtekst puudub."},"horizontalrule":{"toolbar":"Horisontaaljoone sisestamine"},"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"},"filetools":{"loadError":"Faili lugemisel esines viga.","networkError":"Faili üleslaadimisel esines võrgu viga.","httpError404":"Faili üleslaadimisel esines HTTP viga (404: faili ei leitud).","httpError403":"Faili üleslaadimisel esines HTTP viga (403: keelatud).","httpError":"Faili üleslaadimisel esines HTTP viga (veakood: %1).","noUrlError":"Üleslaadimise URL ei ole määratud.","responseError":"Vigane serveri vastus."},"elementspath":{"eleLabel":"Elementide asukoht","eleTitle":"%1 element"},"contextmenu":{"options":"Kontekstimenüü valikud"},"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","pasteNotification":"Asetamiseks vajuta %1. Sinu brauser ei toeta asetamist tööriistariba nupu või kontekstimenüü valikuga.","pasteArea":"Asetamise ala","pasteMsg":"Aseta sisu alumisse kasti ja vajuta OK nupule."},"blockquote":{"toolbar":"Blokktsitaat"},"basicstyles":{"bold":"Paks","italic":"Kursiiv","strike":"Läbijoonitud","subscript":"Allindeks","superscript":"Ülaindeks","underline":"Allajoonitud"},"about":{"copy":"Copyright &copy; $1. Kõik õigused kaitstud.","dlgTitle":"CKEditor 4st lähemalt","moreInfo":"Litsentsi andmed leiab meie veebilehelt:"},"editor":"Rikkalik tekstiredaktor","editorPanel":"Rikkaliku tekstiredaktori paneel","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":"Olgu","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","left":"Vasak","right":"Paremale","center":"Kesk","justify":"Rööpjoondus","alignLeft":"Vasakjoondus","alignRight":"Paremjoondus","alignCenter":"Keskjoondus","alignTop":"Üles","alignMiddle":"Keskele","alignBottom":"Alla","alignNone":"Pole","invalidValue":"Vigane väärtus.","invalidHeight":"Kõrgus peab olema number.","invalidWidth":"Laius peab olema number.","invalidLength":"Välja \"%1\" väärtus peab olema positiivne arv korrektse ühikuga (%2) või ilma.","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Tühik","35":"End","36":"Home","46":"Kustuta","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Kiirklahv","optionDefault":"Vaikeväärtus"}};
\ No newline at end of file
+CKEDITOR.lang['et']={"widget":{"move":"Liigutamiseks klõpsa ja lohista","label":"%1 vidin"},"undo":{"redo":"Toimingu kordamine","undo":"Tagasivõtmine"},"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"},"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","heightUnit":"kõrgusühik","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"},"stylescombo":{"label":"Stiil","panelTitle":"Vormindusstiilid","panelTitle1":"Blokkstiilid","panelTitle2":"Reasisesed stiilid","panelTitle3":"Objektistiilid"},"specialchar":{"options":"Erimärkide valikud","title":"Erimärgi valimine","toolbar":"Erimärgi sisestamine"},"sourcedialog":{"toolbar":"Lähtekood","title":"Lähtekood"},"sourcearea":{"toolbar":"Lähtekood"},"showblocks":{"toolbar":"Blokkide näitamine"},"removeformat":{"toolbar":"Vormingu eemaldamine"},"pastetext":{"button":"Asetamine tavalise tekstina","pasteNotification":"Asetamiseks vajuta %1. Sinu brauser ei toeta asetamist tööriistariba nupu või kontekstimenüü valikuga.","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"},"notification":{"closed":"Teavitused on suletud."},"maximize":{"maximize":"Maksimeerimine","minimize":"Minimeerimine"},"magicline":{"title":"Sisesta siia lõigu tekst"},"list":{"bulletedlist":"Punktloend","numberedlist":"Numberloend"},"language":{"button":"Määra keel","remove":"Eemalda keel"},"indent":{"indent":"Taande suurendamine","outdent":"Taande vähendamine"},"image2":{"alt":"Alternatiivne tekst","btnUpload":"Saada serverisse","captioned":"Pealkirjaga pilt","captionPlaceholder":"Pealkiri","infoTab":"Pildi info","lockRatio":"Lukusta kuvasuhe","menu":"Pildi omadused","pathName":"pilt","pathNameCaption":"pealkiri","resetSize":"Lähtesta suurus","resizer":"Suuruse muutmiseks klõpsa ja lohista","title":"Pildi omadused","uploadTab":"Lae üles","urlMissing":"Pildi lähte-URL on puudu.","altMissing":"Alternatiivtekst puudub."},"horizontalrule":{"toolbar":"Horisontaaljoone sisestamine"},"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"},"filetools":{"loadError":"Faili lugemisel esines viga.","networkError":"Faili üleslaadimisel esines võrgu viga.","httpError404":"Faili üleslaadimisel esines HTTP viga (404: faili ei leitud).","httpError403":"Faili üleslaadimisel esines HTTP viga (403: keelatud).","httpError":"Faili üleslaadimisel esines HTTP viga (veakood: %1).","noUrlError":"Üleslaadimise URL ei ole määratud.","responseError":"Vigane serveri vastus."},"elementspath":{"eleLabel":"Elementide asukoht","eleTitle":"%1 element"},"contextmenu":{"options":"Kontekstimenüü valikud"},"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","pasteNotification":"Asetamiseks vajuta %1. Sinu brauser ei toeta asetamist tööriistariba nupu või kontekstimenüü valikuga.","pasteArea":"Asetamise ala","pasteMsg":"Aseta sisu alumisse kasti ja vajuta OK nupule.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Blokktsitaat"},"basicstyles":{"bold":"Paks","italic":"Kursiiv","strike":"Läbijoonitud","subscript":"Allindeks","superscript":"Ülaindeks","underline":"Allajoonitud"},"about":{"copy":"Copyright &copy; $1. Kõik õigused kaitstud.","dlgTitle":"CKEditor 4st lähemalt","moreInfo":"Litsentsi andmed leiab meie veebilehelt:"},"editor":"Rikkalik tekstiredaktor","editorPanel":"Rikkaliku tekstiredaktori paneel","common":{"editorHelp":"Abi saamiseks vajuta ALT 0","browseServer":"Serveri sirvimine","url":"URL","protocol":"Protokoll","upload":"Laadi üles","uploadSubmit":"Saada serverisse","image":"Pilt","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":"Olgu","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","left":"Vasak","right":"Paremale","center":"Kesk","justify":"Rööpjoondus","alignLeft":"Vasakjoondus","alignRight":"Paremjoondus","alignCenter":"Keskjoondus","alignTop":"Üles","alignMiddle":"Keskele","alignBottom":"Alla","alignNone":"Pole","invalidValue":"Vigane väärtus.","invalidHeight":"Kõrgus peab olema number.","invalidWidth":"Laius peab olema number.","invalidLength":"Välja \"%1\" väärtus peab olema positiivne arv korrektse ühikuga (%2) või ilma.","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Tühik","35":"End","36":"Home","46":"Kustuta","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Kiirklahv","optionDefault":"Vaikeväärtus"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/eu.js b/core/assets/vendor/ckeditor/lang/eu.js
index c9f7405f7d60..5aa3b680dbaa 100644
--- a/core/assets/vendor/ckeditor/lang/eu.js
+++ b/core/assets/vendor/ckeditor/lang/eu.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['eu']={"widget":{"move":"Klikatu eta arrastatu lekuz aldatzeko","label":"%1 widget"},"undo":{"redo":"Berregin","undo":"Desegin"},"toolbar":{"toolbarCollapse":"Tolestu tresna-barra","toolbarExpand":"Zabaldu tresna-barra","toolbarGroups":{"document":"Dokumentua","clipboard":"Arbela/Desegin","editing":"Editatu","forms":"Formularioak","basicstyles":"Oinarrizko estiloak","paragraph":"Paragrafoa","links":"Estekak","insert":"Txertatu","styles":"Estiloak","colors":"Koloreak","tools":"Tresnak"},"toolbars":"Editorearen tresna-barrak"},"table":{"border":"Ertzaren zabalera","caption":"Epigrafea","cell":{"menu":"Gelaxka","insertBefore":"Txertatu gelaxka aurretik","insertAfter":"Txertatu gelaxka ondoren","deleteCell":"Ezabatu gelaxkak","merge":"Batu gelaxkak","mergeRight":"Batu eskuinetara","mergeDown":"Batu behera","splitHorizontal":"Banatu gelaxka horizontalki","splitVertical":"Banatu gelaxka bertikalki","title":"Gelaxkaren propietateak","cellType":"Gelaxka-mota","rowSpan":"Errenkaden hedadura","colSpan":"Zutabeen hedadura","wordWrap":"Itzulbira","hAlign":"Lerrokatze horizontala","vAlign":"Lerrokatze bertikala","alignBaseline":"Oinarri-lerroan","bgColor":"Atzeko planoaren 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":"Errenkaden hedadura zenbaki osoa izan behar da.","invalidColSpan":"Zutabeen hedadura zenbaki osoa izan behar da.","chooseColor":"Aukeratu"},"cellPad":"Gelaxken betegarria","cellSpace":"Gelaxka arteko tartea","column":{"menu":"Zutabea","insertBefore":"Txertatu zutabea aurretik","insertAfter":"Txertatu zutabea ondoren","deleteColumn":"Ezabatu zutabeak"},"columns":"Zutabeak","deleteTable":"Ezabatu taula","headers":"Goiburuak","headersBoth":"Biak","headersColumn":"Lehen zutabea","headersNone":"Bat ere ez","headersRow":"Lehen errenkada","heightUnit":"height unit","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":"Errenkada kopurua 0 baino handiagoa den zenbakia izan behar da.","invalidWidth":"Taularen zabalera zenbaki bat izan behar da.","menu":"Taularen propietateak","row":{"menu":"Errenkada","insertBefore":"Txertatu errenkada aurretik","insertAfter":"Txertatu errenkada ondoren","deleteRow":"Ezabatu errenkadak"},"rows":"Errenkadak","summary":"Laburpena","title":"Taularen propietateak","toolbar":"Taula","widthPc":"ehuneko","widthPx":"pixel","widthUnit":"zabalera unitatea"},"stylescombo":{"label":"Estiloak","panelTitle":"Formatu estiloak","panelTitle1":"Bloke estiloak","panelTitle2":"Lineako estiloak","panelTitle3":"Objektu estiloak"},"specialchar":{"options":"Karaktere berezien aukerak","title":"Hautatu karaktere berezia","toolbar":"Txertatu karaktere berezia"},"sourcedialog":{"toolbar":"Iturburua","title":"Iturburua"},"sourcearea":{"toolbar":"Iturburua"},"showblocks":{"toolbar":"Erakutsi blokeak"},"removeformat":{"toolbar":"Kendu formatua"},"pastetext":{"button":"Itsatsi testu arrunta bezala","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Itsatsi testu arrunta bezala"},"pastefromword":{"confirmCleanup":"Itsatsi nahi duzun testua Word-etik kopiatua dela dirudi. Itsatsi baino lehen garbitu nahi duzu?","error":"Barne-errore bat dela eta ezin izan da itsatsitako testua garbitu","title":"Itsatsi Word-etik","toolbar":"Itsatsi Word-etik"},"notification":{"closed":"Jakinarazpena itxita."},"maximize":{"maximize":"Maximizatu","minimize":"Minimizatu"},"magicline":{"title":"Txertatu paragrafoa hemen"},"list":{"bulletedlist":"Buletdun Zerrenda","numberedlist":"Zenbakidun Zerrenda"},"language":{"button":"Ezarri hizkuntza","remove":"Kendu hizkuntza"},"indent":{"indent":"Handitu koska","outdent":"Txikitu koska"},"image2":{"alt":"Ordezko testua","btnUpload":"Bidali zerbitzarira","captioned":"Argazki oina","captionPlaceholder":"Argazki oina","infoTab":"Irudiaren informazioa","lockRatio":"Blokeatu erlazioa","menu":"Irudiaren propietateak","pathName":"Irudia","pathNameCaption":"Argazki oina","resetSize":"Berrezarri tamaina","resizer":"Klikatu eta arrastatu tamainaz aldatzeko","title":"Irudiaren propietateak","uploadTab":"Kargatu","urlMissing":"Irudiaren iturburuaren URLa falta da.","altMissing":"Ordezko testua falta da."},"horizontalrule":{"toolbar":"Txertatu marra horizontala"},"format":{"label":"Formatua","panelTitle":"Paragrafoaren formatua","tag_address":"Helbidea","tag_div":"Normala (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":"Normala","tag_pre":"Formatuduna"},"filetools":{"loadError":"Errorea gertatu da fitxategia irakurtzean.","networkError":"Sareko errorea gertatu da fitxategia kargatzean.","httpError404":"HTTP errorea gertatu da fitxategia kargatzean (404: Fitxategia ez da aurkitu).","httpError403":"HTTP errorea gertatu da fitxategia kargatzean (403: Debekatuta).","httpError":"HTTP errorea gertatu da fitxategia kargatzean (errore-egoera: %1).","noUrlError":"Kargatzeko URLa definitu gabe.","responseError":"Zerbitzariaren erantzun okerra."},"elementspath":{"eleLabel":"Elementuen bidea","eleTitle":"%1 elementua"},"contextmenu":{"options":"Testuinguru-menuaren aukerak"},"clipboard":{"copy":"Kopiatu","copyError":"Zure web nabigatzailearen segurtasun ezarpenek ez dute baimentzen testuak automatikoki kopiatzea. Mesedez teklatua erabil ezazu (Ctrl/Cmd+C).","cut":"Ebaki","cutError":"Zure web nabigatzailearen segurtasun ezarpenek ez dute baimentzen testuak automatikoki moztea. Mesedez teklatua erabil ezazu (Ctrl/Cmd+X).","paste":"Itsatsi","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Itsasteko area","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Aipamen blokea"},"basicstyles":{"bold":"Lodia","italic":"Etzana","strike":"Marratua","subscript":"Azpi-indizea","superscript":"Goi-indizea","underline":"Azpimarratu"},"about":{"copy":"Copyright &copy; $1. Eskubide guztiak erreserbaturik.","dlgTitle":"CKEditor 4ri buruz","moreInfo":"Lizentziari buruzko informazioa gure webgunean:"},"editor":"Testu aberastuaren editorea","editorPanel":"Testu aberastuaren editorearen panela","common":{"editorHelp":"Sakatu ALT 0 laguntza jasotzeko","browseServer":"Arakatu zerbitzaria","url":"URLa","protocol":"Protokoloa","upload":"Kargatu","uploadSubmit":"Bidali zerbitzarira","image":"Irudia","flash":"Flash","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 eskuinera (LTR)","langDirRtl":"Eskuinetik ezkerrera (RTL)","langCode":"Hizkuntzaren kodea","longDescr":"URLaren deskribapen luzea","cssClass":"Estilo-orriko klaseak","advisoryTitle":"Aholkatutako izenburua","cssStyle":"Estiloa","ok":"Ados","cancel":"Utzi","close":"Itxi","preview":"Aurrebista","resize":"Aldatu tamainaz","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 dituzu. Ziur zaude elkarrizketa-koadroa itxi nahi duzula?","options":"Aukerak","target":"Helburua","targetNew":"Leiho berria (_blank)","targetTop":"Goieneko leihoan (_top)","targetSelf":"Leiho berean (_self)","targetParent":"Leiho gurasoan (_parent)","langDirLTR":"Ezkerretik eskuinera (LTR)","langDirRTL":"Eskuinetik ezkerrera (RTL)","styles":"Estiloa","cssClasses":"Estilo-orriko klaseak","width":"Zabalera","height":"Altuera","align":"Lerrokatzea","left":"Ezkerrean","right":"Eskuinean","center":"Erdian","justify":"Justifikatu","alignLeft":"Lerrokatu ezkerrean","alignRight":"Lerrokatu eskuinean","alignCenter":"Align Center","alignTop":"Goian","alignMiddle":"Erdian","alignBottom":"Behean","alignNone":"Bat ere ez","invalidValue":"Balio desegokia.","invalidHeight":"Altuera zenbaki bat izan behar da.","invalidWidth":"Zabalera zenbaki bat izan behar da.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"\"%1\" eremurako zehaztutako balioak zenbaki positibo bat izan behar du, CSS neurri unitate batekin edo gabe (px, %, in, cm, mm, em, ex, pt edo pc).","invalidHtmlLength":"\"%1\" eremurako zehaztutako balioak zenbaki positibo bat izan behar du, HTML neurri unitate batekin edo gabe (px edo %).","invalidInlineStyle":"Lineako estiloan zehaztutako balioak \"izen : balio\" formatuko tupla bat edo gehiago izan behar dira, komaz bereiztuak.","cssLengthTooltip":"Sartu zenbaki bat edo zenbaki bat baliozko CSS unitate batekin (px, %, in, cm, mm, em, ex, pt, edo pc).","unavailable":"%1<span class=\"cke_accessibility\">, erabilezina</span>","keyboard":{"8":"Atzera tekla","13":"Sartu","16":"Maius","17":"Ktrl","18":"Alt","32":"Zuriunea","35":"Buka","36":"Etxea","46":"Ezabatu","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Komandoa"},"keyboardShortcut":"Laster-tekla","optionDefault":"Lehenetsia"}};
\ No newline at end of file
+CKEDITOR.lang['eu']={"widget":{"move":"Klikatu eta arrastatu lekuz aldatzeko","label":"%1 widget"},"undo":{"redo":"Berregin","undo":"Desegin"},"toolbar":{"toolbarCollapse":"Tolestu tresna-barra","toolbarExpand":"Zabaldu tresna-barra","toolbarGroups":{"document":"Dokumentua","clipboard":"Arbela/Desegin","editing":"Editatu","forms":"Formularioak","basicstyles":"Oinarrizko estiloak","paragraph":"Paragrafoa","links":"Estekak","insert":"Txertatu","styles":"Estiloak","colors":"Koloreak","tools":"Tresnak"},"toolbars":"Editorearen tresna-barrak"},"table":{"border":"Ertzaren zabalera","caption":"Epigrafea","cell":{"menu":"Gelaxka","insertBefore":"Txertatu gelaxka aurretik","insertAfter":"Txertatu gelaxka ondoren","deleteCell":"Ezabatu gelaxkak","merge":"Batu gelaxkak","mergeRight":"Batu eskuinetara","mergeDown":"Batu behera","splitHorizontal":"Banatu gelaxka horizontalki","splitVertical":"Banatu gelaxka bertikalki","title":"Gelaxkaren propietateak","cellType":"Gelaxka-mota","rowSpan":"Errenkaden hedadura","colSpan":"Zutabeen hedadura","wordWrap":"Itzulbira","hAlign":"Lerrokatze horizontala","vAlign":"Lerrokatze bertikala","alignBaseline":"Oinarri-lerroan","bgColor":"Atzeko planoaren 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":"Errenkaden hedadura zenbaki osoa izan behar da.","invalidColSpan":"Zutabeen hedadura zenbaki osoa izan behar da.","chooseColor":"Aukeratu"},"cellPad":"Gelaxken betegarria","cellSpace":"Gelaxka arteko tartea","column":{"menu":"Zutabea","insertBefore":"Txertatu zutabea aurretik","insertAfter":"Txertatu zutabea ondoren","deleteColumn":"Ezabatu zutabeak"},"columns":"Zutabeak","deleteTable":"Ezabatu taula","headers":"Goiburuak","headersBoth":"Biak","headersColumn":"Lehen zutabea","headersNone":"Bat ere ez","headersRow":"Lehen errenkada","heightUnit":"height unit","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":"Errenkada kopurua 0 baino handiagoa den zenbakia izan behar da.","invalidWidth":"Taularen zabalera zenbaki bat izan behar da.","menu":"Taularen propietateak","row":{"menu":"Errenkada","insertBefore":"Txertatu errenkada aurretik","insertAfter":"Txertatu errenkada ondoren","deleteRow":"Ezabatu errenkadak"},"rows":"Errenkadak","summary":"Laburpena","title":"Taularen propietateak","toolbar":"Taula","widthPc":"ehuneko","widthPx":"pixel","widthUnit":"zabalera unitatea"},"stylescombo":{"label":"Estiloak","panelTitle":"Formatu estiloak","panelTitle1":"Bloke estiloak","panelTitle2":"Lineako estiloak","panelTitle3":"Objektu estiloak"},"specialchar":{"options":"Karaktere berezien aukerak","title":"Hautatu karaktere berezia","toolbar":"Txertatu karaktere berezia"},"sourcedialog":{"toolbar":"Iturburua","title":"Iturburua"},"sourcearea":{"toolbar":"Iturburua"},"showblocks":{"toolbar":"Erakutsi blokeak"},"removeformat":{"toolbar":"Kendu formatua"},"pastetext":{"button":"Itsatsi testu arrunta bezala","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Itsatsi testu arrunta bezala"},"pastefromword":{"confirmCleanup":"Itsatsi nahi duzun testua Word-etik kopiatua dela dirudi. Itsatsi baino lehen garbitu nahi duzu?","error":"Barne-errore bat dela eta ezin izan da itsatsitako testua garbitu","title":"Itsatsi Word-etik","toolbar":"Itsatsi Word-etik"},"notification":{"closed":"Jakinarazpena itxita."},"maximize":{"maximize":"Maximizatu","minimize":"Minimizatu"},"magicline":{"title":"Txertatu paragrafoa hemen"},"list":{"bulletedlist":"Buletdun Zerrenda","numberedlist":"Zenbakidun Zerrenda"},"language":{"button":"Ezarri hizkuntza","remove":"Kendu hizkuntza"},"indent":{"indent":"Handitu koska","outdent":"Txikitu koska"},"image2":{"alt":"Ordezko testua","btnUpload":"Bidali zerbitzarira","captioned":"Argazki oina","captionPlaceholder":"Argazki oina","infoTab":"Irudiaren informazioa","lockRatio":"Blokeatu erlazioa","menu":"Irudiaren propietateak","pathName":"Irudia","pathNameCaption":"Argazki oina","resetSize":"Berrezarri tamaina","resizer":"Klikatu eta arrastatu tamainaz aldatzeko","title":"Irudiaren propietateak","uploadTab":"Kargatu","urlMissing":"Irudiaren iturburuaren URLa falta da.","altMissing":"Ordezko testua falta da."},"horizontalrule":{"toolbar":"Txertatu marra horizontala"},"format":{"label":"Formatua","panelTitle":"Paragrafoaren formatua","tag_address":"Helbidea","tag_div":"Normala (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":"Normala","tag_pre":"Formatuduna"},"filetools":{"loadError":"Errorea gertatu da fitxategia irakurtzean.","networkError":"Sareko errorea gertatu da fitxategia kargatzean.","httpError404":"HTTP errorea gertatu da fitxategia kargatzean (404: Fitxategia ez da aurkitu).","httpError403":"HTTP errorea gertatu da fitxategia kargatzean (403: Debekatuta).","httpError":"HTTP errorea gertatu da fitxategia kargatzean (errore-egoera: %1).","noUrlError":"Kargatzeko URLa definitu gabe.","responseError":"Zerbitzariaren erantzun okerra."},"elementspath":{"eleLabel":"Elementuen bidea","eleTitle":"%1 elementua"},"contextmenu":{"options":"Testuinguru-menuaren aukerak"},"clipboard":{"copy":"Kopiatu","copyError":"Zure web nabigatzailearen segurtasun ezarpenek ez dute baimentzen testuak automatikoki kopiatzea. Mesedez teklatua erabil ezazu (Ctrl/Cmd+C).","cut":"Ebaki","cutError":"Zure web nabigatzailearen segurtasun ezarpenek ez dute baimentzen testuak automatikoki moztea. Mesedez teklatua erabil ezazu (Ctrl/Cmd+X).","paste":"Itsatsi","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Itsasteko area","pasteMsg":"Paste your content inside the area below and press OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Aipamen blokea"},"basicstyles":{"bold":"Lodia","italic":"Etzana","strike":"Marratua","subscript":"Azpi-indizea","superscript":"Goi-indizea","underline":"Azpimarratu"},"about":{"copy":"Copyright &copy; $1. Eskubide guztiak erreserbaturik.","dlgTitle":"CKEditor 4ri buruz","moreInfo":"Lizentziari buruzko informazioa gure webgunean:"},"editor":"Testu aberastuaren editorea","editorPanel":"Testu aberastuaren editorearen panela","common":{"editorHelp":"Sakatu ALT 0 laguntza jasotzeko","browseServer":"Arakatu zerbitzaria","url":"URLa","protocol":"Protokoloa","upload":"Kargatu","uploadSubmit":"Bidali zerbitzarira","image":"Irudia","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 eskuinera (LTR)","langDirRtl":"Eskuinetik ezkerrera (RTL)","langCode":"Hizkuntzaren kodea","longDescr":"URLaren deskribapen luzea","cssClass":"Estilo-orriko klaseak","advisoryTitle":"Aholkatutako izenburua","cssStyle":"Estiloa","ok":"Ados","cancel":"Utzi","close":"Itxi","preview":"Aurrebista","resize":"Aldatu tamainaz","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 dituzu. Ziur zaude elkarrizketa-koadroa itxi nahi duzula?","options":"Aukerak","target":"Helburua","targetNew":"Leiho berria (_blank)","targetTop":"Goieneko leihoan (_top)","targetSelf":"Leiho berean (_self)","targetParent":"Leiho gurasoan (_parent)","langDirLTR":"Ezkerretik eskuinera (LTR)","langDirRTL":"Eskuinetik ezkerrera (RTL)","styles":"Estiloa","cssClasses":"Estilo-orriko klaseak","width":"Zabalera","height":"Altuera","align":"Lerrokatzea","left":"Ezkerrean","right":"Eskuinean","center":"Erdian","justify":"Justifikatu","alignLeft":"Lerrokatu ezkerrean","alignRight":"Lerrokatu eskuinean","alignCenter":"Align Center","alignTop":"Goian","alignMiddle":"Erdian","alignBottom":"Behean","alignNone":"Bat ere ez","invalidValue":"Balio desegokia.","invalidHeight":"Altuera zenbaki bat izan behar da.","invalidWidth":"Zabalera zenbaki bat izan behar da.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"\"%1\" eremurako zehaztutako balioak zenbaki positibo bat izan behar du, CSS neurri unitate batekin edo gabe (px, %, in, cm, mm, em, ex, pt edo pc).","invalidHtmlLength":"\"%1\" eremurako zehaztutako balioak zenbaki positibo bat izan behar du, HTML neurri unitate batekin edo gabe (px edo %).","invalidInlineStyle":"Lineako estiloan zehaztutako balioak \"izen : balio\" formatuko tupla bat edo gehiago izan behar dira, komaz bereiztuak.","cssLengthTooltip":"Sartu zenbaki bat edo zenbaki bat baliozko CSS unitate batekin (px, %, in, cm, mm, em, ex, pt, edo pc).","unavailable":"%1<span class=\"cke_accessibility\">, erabilezina</span>","keyboard":{"8":"Atzera tekla","13":"Sartu","16":"Maius","17":"Ktrl","18":"Alt","32":"Zuriunea","35":"Buka","36":"Etxea","46":"Ezabatu","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Komandoa"},"keyboardShortcut":"Laster-tekla","optionDefault":"Lehenetsia"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/fa.js b/core/assets/vendor/ckeditor/lang/fa.js
index 219e1836a73d..4946683411bc 100644
--- a/core/assets/vendor/ckeditor/lang/fa.js
+++ b/core/assets/vendor/ckeditor/lang/fa.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['fa']={"widget":{"move":"کلیک و کشیدن برای جابجایی","label":"ابزارک %1"},"undo":{"redo":"بازچیدن","undo":"واچیدن"},"toolbar":{"toolbarCollapse":"بستن نوار ابزار","toolbarExpand":"بازکردن نوار ابزار","toolbarGroups":{"document":"سند","clipboard":"حافظه موقت/برگشت","editing":"در حال ویرایش","forms":"فرم​ها","basicstyles":"سبک‌های پایه","paragraph":"بند","links":"پیوندها","insert":"ورود","styles":"سبک‌ها","colors":"رنگ​ها","tools":"ابزارها"},"toolbars":"نوار ابزارهای ویرایش‌گر"},"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":"اولین ردیف","heightUnit":"واحد ارتفاع","invalidBorder":"مقدار اندازه خطوط باید یک عدد باشد.","invalidCellPadding":"بالشتک سلول باید یک عدد باشد.","invalidCellSpacing":"مقدار فاصلهگذاری سلول باید یک عدد باشد.","invalidCols":"تعداد ستونها باید یک عدد بزرگتر از 0 باشد.","invalidHeight":"مقدار ارتفاع  جدول باید یک عدد باشد.","invalidRows":"تعداد ردیفها باید یک عدد بزرگتر از 0 باشد.","invalidWidth":"مقدار پهنای جدول باید یک عدد باشد.","menu":"ویژگیهای جدول","row":{"menu":"سطر","insertBefore":"افزودن سطر قبل از","insertAfter":"افزودن سطر بعد از","deleteRow":"حذف سطرها"},"rows":"سطرها","summary":"خلاصه","title":"ویژگیهای جدول","toolbar":"جدول","widthPc":"درصد","widthPx":"پیکسل","widthUnit":"واحد پهنا"},"stylescombo":{"label":"سبک","panelTitle":"سبکهای قالببندی","panelTitle1":"سبکهای بلوک","panelTitle2":"سبکهای درونخطی","panelTitle3":"سبکهای شیء"},"specialchar":{"options":"گزینه‌های نویسه‌های ویژه","title":"گزینش نویسه‌ی ویژه","toolbar":"گنجاندن نویسه‌ی ویژه"},"sourcedialog":{"toolbar":"منبع","title":"منبع"},"sourcearea":{"toolbar":"منبع"},"showblocks":{"toolbar":"نمایش بلوک‌ها"},"removeformat":{"toolbar":"برداشتن فرمت"},"pastetext":{"button":"چسباندن به عنوان متن ساده","pasteNotification":"1% را فشاردهید تا بچسبد. مرورگر شما از چسباندن با دکمه نوارابزار یا گزینه منوی زمینه پشتیبانی نمیکند","title":"چسباندن به عنوان متن ساده"},"pastefromword":{"confirmCleanup":"متنی که میخواهید بچسبانید به نظر میرسد که از Word کپی شده است. آیا میخواهید قبل از چسباندن آن را پاکسازی کنید؟","error":"به دلیل بروز خطای داخلی امکان پاکسازی اطلاعات بازنشانی شده وجود ندارد.","title":"چسباندن از Word","toolbar":"چسباندن از Word"},"notification":{"closed":"آگاه‌سازی بسته شد"},"maximize":{"maximize":"بیشنه کردن","minimize":"کمینه کردن"},"magicline":{"title":"قرار دادن بند در اینجا"},"list":{"bulletedlist":"فهرست نقطه​ای","numberedlist":"فهرست شماره​دار"},"language":{"button":"تعیین زبان","remove":"حذف زبان"},"indent":{"indent":"افزایش تورفتگی","outdent":"کاهش تورفتگی"},"image2":{"alt":"متن جایگزین","btnUpload":"به سرور بفرست","captioned":"تصویر زیرنویس شده","captionPlaceholder":"عنوان","infoTab":"اطلاعات تصویر","lockRatio":"قفل کردن نسبت","menu":"ویژگی​های تصویر","pathName":"تصویر","pathNameCaption":"عنوان","resetSize":"بازنشانی اندازه","resizer":"کلیک و کشیدن برای تغییر اندازه","title":"ویژگی​های تصویر","uploadTab":"بالاگذاری","urlMissing":"آدرس URL اصلی تصویر یافت نشد.","altMissing":"متن جایگزین یافت نشد."},"horizontalrule":{"toolbar":"گنجاندن خط افقی"},"format":{"label":"قالب","panelTitle":"قالب بند","tag_address":"نشانی","tag_div":"بند","tag_h1":"سرنویس ۱","tag_h2":"سرنویس ۲","tag_h3":"سرنویس ۳","tag_h4":"سرنویس ۴","tag_h5":"سرنویس ۵","tag_h6":"سرنویس ۶","tag_p":"معمولی","tag_pre":"قالب‌دار"},"filetools":{"loadError":"هنگام خواندن فایل، خطایی رخ داد.","networkError":"هنگام آپلود فایل خطای شبکه رخ داد.","httpError404":"هنگام آپلود فایل خطای HTTP رخ داد (404: فایل یافت نشد).","httpError403":"هنگام آپلود فایل، خطای HTTP رخ داد  (403: ممنوع).","httpError":"خطای HTTP در آپلود فایل رخ داده است (وضعیت خطا: %1).","noUrlError":"آدرس آپلود تعریف نشده است.","responseError":"پاسخ نادرست سرور."},"elementspath":{"eleLabel":"مسیر عناصر","eleTitle":"%1 عنصر"},"contextmenu":{"options":"گزینه​های منوی زمینه"},"clipboard":{"copy":"رونوشت","copyError":"تنظیمات امنیتی مرورگر شما اجازه نمیدهد که ویرایشگر به طور خودکار عملکردهای کپی کردن را انجام دهد. لطفا با دکمههای صفحه کلید این کار را انجام دهید (Ctrl/Cmd+C).","cut":"برش","cutError":"تنظیمات امنیتی مرورگر شما اجازه نمیدهد که ویرایشگر به طور خودکار عملکردهای برش را انجام دهد. لطفا با دکمههای صفحه کلید این کار را انجام دهید (Ctrl/Cmd+X).","paste":"چسباندن","pasteNotification":"1% را فشاردهید تا قرار داده شود. مرورگر شما از قراردهی با دکمه نوارابزار یا گزینه منوی زمینه پشتیبانی نمیکند","pasteArea":"محل چسباندن","pasteMsg":"محتوای خود را در ناحیه زیر قرار دهید و OK را فشار دهید"},"blockquote":{"toolbar":"بلوک نقل قول"},"basicstyles":{"bold":"درشت","italic":"خمیده","strike":"خط‌خورده","subscript":"زیرنویس","superscript":"بالانویس","underline":"زیرخط‌دار"},"about":{"copy":"حق نشر &copy; $1. کلیه حقوق محفوظ است.","dlgTitle":"درباره CKEditor","moreInfo":"برای کسب اطلاعات مجوز لطفا به وب سایت ما مراجعه کنید:"},"editor":"ویرایش‌گر متن غنی","editorPanel":"پنل ویرایشگر متن غنی","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":"چپ به راست","langDirRtl":"راست به چپ","langCode":"کد زبان","longDescr":"URL توصیف طولانی","cssClass":"کلاس​های شیوه​نامه (Stylesheet)","advisoryTitle":"عنوان کمکی","cssStyle":"سبک","ok":"پذیرش","cancel":"انصراف","close":"بستن","preview":"پیش‌نمایش","resize":"تغییر اندازه","generalTab":"عمومی","advancedTab":"پیش‌رفته","validateNumberFailed":"این مقدار یک عدد نیست.","confirmNewPage":"هر تغییر ایجاد شده​ی ذخیره نشده از بین خواهد رفت. آیا اطمینان دارید که قصد بارگیری صفحه جدیدی را دارید؟","confirmCancel":"برخی از گزینه‌ها تغییر کرده‌اند. آیا واقعا قصد بستن این پنجره را دارید؟","options":"گزینه​ها","target":"مقصد","targetNew":"پنجره جدید","targetTop":"بالاترین پنجره","targetSelf":"همان پنجره","targetParent":"پنجره والد","langDirLTR":"چپ به راست","langDirRTL":"راست به چپ","styles":"سبک","cssClasses":"کلاس‌های سبک‌نامه","width":"عرض","height":"طول","align":"چینش","left":"چپ","right":"راست","center":"وسط","justify":"بلوک چین","alignLeft":"چپ چین","alignRight":"راست چین","alignCenter":"مرکز قرار بده","alignTop":"بالا","alignMiddle":"میانه","alignBottom":"پائین","alignNone":"هیچ","invalidValue":"مقدار نامعتبر.","invalidHeight":"ارتفاع باید یک عدد باشد.","invalidWidth":"عرض باید یک عدد باشد.","invalidLength":"عدد تعیین شده برای فیلد \"%1\" باید یک عدد مثبت با یا بدون یک واحد اندازه گیری معتبر (\"%2\") باشد.","invalidCssLength":"عدد تعیین شده برای فیلد \"%1\" باید یک عدد مثبت با یا بدون یک واحد اندازه گیری CSS معتبر باشد (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"عدد تعیین شده برای فیلد \"%1\" باید یک عدد مثبت با یا بدون یک واحد اندازه گیری HTML معتبر باشد (px or %).","invalidInlineStyle":"عدد تعیین شده برای سبک درون​خطی -Inline Style- باید دارای یک یا چند چندتایی با شکلی شبیه \"name : value\" که باید با یک \";\" از هم جدا شوند.","cssLengthTooltip":"یک عدد برای یک مقدار بر حسب پیکسل و یا یک عدد با یک واحد CSS معتبر وارد کنید (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">، غیر قابل دسترس</span>","keyboard":{"8":"عقبگرد","13":"ورود","16":"تعویض","17":"کنترل","18":"دگرساز","32":"فاصله","35":"پایان","36":"خانه","46":"حذف","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"فرمان"},"keyboardShortcut":"میانبر صفحه کلید","optionDefault":"پیش فرض"}};
\ No newline at end of file
+CKEDITOR.lang['fa']={"widget":{"move":"کلیک و کشیدن برای جابجایی","label":"ابزارک %1"},"undo":{"redo":"بازچیدن","undo":"واچیدن"},"toolbar":{"toolbarCollapse":"بستن نوار ابزار","toolbarExpand":"بازکردن نوار ابزار","toolbarGroups":{"document":"سند","clipboard":"حافظه موقت/برگشت","editing":"در حال ویرایش","forms":"فرم​ها","basicstyles":"سبک‌های پایه","paragraph":"بند","links":"پیوندها","insert":"ورود","styles":"سبک‌ها","colors":"رنگ​ها","tools":"ابزارها"},"toolbars":"نوار ابزارهای ویرایش‌گر"},"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":"اولین ردیف","heightUnit":"واحد ارتفاع","invalidBorder":"مقدار اندازه خطوط باید یک عدد باشد.","invalidCellPadding":"بالشتک سلول باید یک عدد باشد.","invalidCellSpacing":"مقدار فاصلهگذاری سلول باید یک عدد باشد.","invalidCols":"تعداد ستونها باید یک عدد بزرگتر از 0 باشد.","invalidHeight":"مقدار ارتفاع  جدول باید یک عدد باشد.","invalidRows":"تعداد ردیفها باید یک عدد بزرگتر از 0 باشد.","invalidWidth":"مقدار پهنای جدول باید یک عدد باشد.","menu":"ویژگیهای جدول","row":{"menu":"سطر","insertBefore":"افزودن سطر قبل از","insertAfter":"افزودن سطر بعد از","deleteRow":"حذف سطرها"},"rows":"سطرها","summary":"خلاصه","title":"ویژگیهای جدول","toolbar":"جدول","widthPc":"درصد","widthPx":"پیکسل","widthUnit":"واحد پهنا"},"stylescombo":{"label":"سبک","panelTitle":"سبکهای قالببندی","panelTitle1":"سبکهای بلوک","panelTitle2":"سبکهای درونخطی","panelTitle3":"سبکهای شیء"},"specialchar":{"options":"گزینه‌های نویسه‌های ویژه","title":"گزینش نویسه‌ی ویژه","toolbar":"گنجاندن نویسه‌ی ویژه"},"sourcedialog":{"toolbar":"منبع","title":"منبع"},"sourcearea":{"toolbar":"منبع"},"showblocks":{"toolbar":"نمایش بلوک‌ها"},"removeformat":{"toolbar":"برداشتن فرمت"},"pastetext":{"button":"چسباندن به عنوان متن ساده","pasteNotification":"1% را فشاردهید تا بچسبد. مرورگر شما از چسباندن با دکمه نوارابزار یا گزینه منوی زمینه پشتیبانی نمیکند","title":"چسباندن به عنوان متن ساده"},"pastefromword":{"confirmCleanup":"متنی که میخواهید بچسبانید به نظر میرسد که از Word کپی شده است. آیا میخواهید قبل از چسباندن آن را پاکسازی کنید؟","error":"به دلیل بروز خطای داخلی امکان پاکسازی اطلاعات بازنشانی شده وجود ندارد.","title":"چسباندن از Word","toolbar":"چسباندن از Word"},"notification":{"closed":"آگاه‌سازی بسته شد"},"maximize":{"maximize":"بیشنه کردن","minimize":"کمینه کردن"},"magicline":{"title":"قرار دادن بند در اینجا"},"list":{"bulletedlist":"فهرست نقطه​ای","numberedlist":"فهرست شماره​دار"},"language":{"button":"تعیین زبان","remove":"حذف زبان"},"indent":{"indent":"افزایش تورفتگی","outdent":"کاهش تورفتگی"},"image2":{"alt":"متن جایگزین","btnUpload":"به سرور بفرست","captioned":"تصویر زیرنویس شده","captionPlaceholder":"عنوان","infoTab":"اطلاعات تصویر","lockRatio":"قفل کردن نسبت","menu":"ویژگی​های تصویر","pathName":"تصویر","pathNameCaption":"عنوان","resetSize":"بازنشانی اندازه","resizer":"کلیک و کشیدن برای تغییر اندازه","title":"ویژگی​های تصویر","uploadTab":"بالاگذاری","urlMissing":"آدرس URL اصلی تصویر یافت نشد.","altMissing":"متن جایگزین یافت نشد."},"horizontalrule":{"toolbar":"گنجاندن خط افقی"},"format":{"label":"قالب","panelTitle":"قالب بند","tag_address":"نشانی","tag_div":"بند","tag_h1":"سرنویس ۱","tag_h2":"سرنویس ۲","tag_h3":"سرنویس ۳","tag_h4":"سرنویس ۴","tag_h5":"سرنویس ۵","tag_h6":"سرنویس ۶","tag_p":"معمولی","tag_pre":"قالب‌دار"},"filetools":{"loadError":"هنگام خواندن فایل، خطایی رخ داد.","networkError":"هنگام آپلود فایل خطای شبکه رخ داد.","httpError404":"هنگام آپلود فایل خطای HTTP رخ داد (404: فایل یافت نشد).","httpError403":"هنگام آپلود فایل، خطای HTTP رخ داد  (403: ممنوع).","httpError":"خطای HTTP در آپلود فایل رخ داده است (وضعیت خطا: %1).","noUrlError":"آدرس آپلود تعریف نشده است.","responseError":"پاسخ نادرست سرور."},"elementspath":{"eleLabel":"مسیر عناصر","eleTitle":"%1 عنصر"},"contextmenu":{"options":"گزینه​های منوی زمینه"},"clipboard":{"copy":"رونوشت","copyError":"تنظیمات امنیتی مرورگر شما اجازه نمیدهد که ویرایشگر به طور خودکار عملکردهای کپی کردن را انجام دهد. لطفا با دکمههای صفحه کلید این کار را انجام دهید (Ctrl/Cmd+C).","cut":"برش","cutError":"تنظیمات امنیتی مرورگر شما اجازه نمیدهد که ویرایشگر به طور خودکار عملکردهای برش را انجام دهد. لطفا با دکمههای صفحه کلید این کار را انجام دهید (Ctrl/Cmd+X).","paste":"چسباندن","pasteNotification":"1% را فشاردهید تا قرار داده شود. مرورگر شما از قراردهی با دکمه نوارابزار یا گزینه منوی زمینه پشتیبانی نمیکند","pasteArea":"محل چسباندن","pasteMsg":"محتوای خود را در ناحیه زیر قرار دهید و OK را فشار دهید","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"بلوک نقل قول"},"basicstyles":{"bold":"درشت","italic":"خمیده","strike":"خط‌خورده","subscript":"زیرنویس","superscript":"بالانویس","underline":"زیرخط‌دار"},"about":{"copy":"حق نشر &copy; $1. کلیه حقوق محفوظ است.","dlgTitle":"درباره CKEditor","moreInfo":"برای کسب اطلاعات مجوز لطفا به وب سایت ما مراجعه کنید:"},"editor":"ویرایش‌گر متن غنی","editorPanel":"پنل ویرایشگر متن غنی","common":{"editorHelp":"کلید Alt+0 را برای راهنمایی بفشارید","browseServer":"فهرست​نمایی سرور","url":"URL","protocol":"قرارداد","upload":"بالاگذاری","uploadSubmit":"به سرور بفرست","image":"تصویر","form":"فرم","checkbox":"چک‌باکس","radio":"دکمه‌ی رادیویی","textField":"فیلد متنی","textarea":"ناحیهٴ متنی","hiddenField":"فیلد پنهان","button":"دکمه","select":"فیلد انتخاب چند گزینه​ای","imageButton":"دکمه‌ی تصویری","notSet":"<تعیین‌نشده>","id":"شناسه","name":"نام","langDir":"جهت زبان","langDirLtr":"چپ به راست","langDirRtl":"راست به چپ","langCode":"کد زبان","longDescr":"URL توصیف طولانی","cssClass":"کلاس​های شیوه​نامه (Stylesheet)","advisoryTitle":"عنوان کمکی","cssStyle":"سبک","ok":"پذیرش","cancel":"انصراف","close":"بستن","preview":"پیش‌نمایش","resize":"تغییر اندازه","generalTab":"عمومی","advancedTab":"پیش‌رفته","validateNumberFailed":"این مقدار یک عدد نیست.","confirmNewPage":"هر تغییر ایجاد شده​ی ذخیره نشده از بین خواهد رفت. آیا اطمینان دارید که قصد بارگیری صفحه جدیدی را دارید؟","confirmCancel":"برخی از گزینه‌ها تغییر کرده‌اند. آیا واقعا قصد بستن این پنجره را دارید؟","options":"گزینه​ها","target":"مقصد","targetNew":"پنجره جدید","targetTop":"بالاترین پنجره","targetSelf":"همان پنجره","targetParent":"پنجره والد","langDirLTR":"چپ به راست","langDirRTL":"راست به چپ","styles":"سبک","cssClasses":"کلاس‌های سبک‌نامه","width":"عرض","height":"طول","align":"چینش","left":"چپ","right":"راست","center":"وسط","justify":"بلوک چین","alignLeft":"چپ چین","alignRight":"راست چین","alignCenter":"مرکز قرار بده","alignTop":"بالا","alignMiddle":"میانه","alignBottom":"پائین","alignNone":"هیچ","invalidValue":"مقدار نامعتبر.","invalidHeight":"ارتفاع باید یک عدد باشد.","invalidWidth":"عرض باید یک عدد باشد.","invalidLength":"عدد تعیین شده برای فیلد \"%1\" باید یک عدد مثبت با یا بدون یک واحد اندازه گیری معتبر (\"%2\") باشد.","invalidCssLength":"عدد تعیین شده برای فیلد \"%1\" باید یک عدد مثبت با یا بدون یک واحد اندازه گیری CSS معتبر باشد (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"عدد تعیین شده برای فیلد \"%1\" باید یک عدد مثبت با یا بدون یک واحد اندازه گیری HTML معتبر باشد (px or %).","invalidInlineStyle":"عدد تعیین شده برای سبک درون​خطی -Inline Style- باید دارای یک یا چند چندتایی با شکلی شبیه \"name : value\" که باید با یک \";\" از هم جدا شوند.","cssLengthTooltip":"یک عدد برای یک مقدار بر حسب پیکسل و یا یک عدد با یک واحد CSS معتبر وارد کنید (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">، غیر قابل دسترس</span>","keyboard":{"8":"عقبگرد","13":"ورود","16":"تعویض","17":"کنترل","18":"دگرساز","32":"فاصله","35":"پایان","36":"خانه","46":"حذف","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"فرمان"},"keyboardShortcut":"میانبر صفحه کلید","optionDefault":"پیش فرض"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/fi.js b/core/assets/vendor/ckeditor/lang/fi.js
index af5dd73bd17a..edbced7d1695 100644
--- a/core/assets/vendor/ckeditor/lang/fi.js
+++ b/core/assets/vendor/ckeditor/lang/fi.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['fi']={"widget":{"move":"Siirrä klikkaamalla ja raahaamalla","label":"%1 widget"},"undo":{"redo":"Toista","undo":"Kumoa"},"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"},"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","heightUnit":"height unit","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ö"},"stylescombo":{"label":"Tyyli","panelTitle":"Muotoilujen tyylit","panelTitle1":"Lohkojen tyylit","panelTitle2":"Rivinsisäiset tyylit","panelTitle3":"Objektien tyylit"},"specialchar":{"options":"Erikoismerkin ominaisuudet","title":"Valitse erikoismerkki","toolbar":"Lisää erikoismerkki"},"sourcedialog":{"toolbar":"Koodi","title":"Koodi"},"sourcearea":{"toolbar":"Koodi"},"showblocks":{"toolbar":"Näytä elementit"},"removeformat":{"toolbar":"Poista muotoilu"},"pastetext":{"button":"Liitä tekstinä","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Suurenna","minimize":"Pienennä"},"magicline":{"title":"Lisää kappale tähän."},"list":{"bulletedlist":"Luettelomerkit","numberedlist":"Numerointi"},"language":{"button":"Aseta kieli","remove":"Poista kieli"},"indent":{"indent":"Suurenna sisennystä","outdent":"Pienennä sisennystä"},"image2":{"alt":"Vaihtoehtoinen teksti","btnUpload":"Lähetä palvelimelle","captioned":"Kuva kuvatekstillä","captionPlaceholder":"Kuvateksti","infoTab":"Kuvan tiedot","lockRatio":"Lukitse suhteet","menu":"Kuvan ominaisuudet","pathName":"kuva","pathNameCaption":"kuvateksti","resetSize":"Alkuperäinen koko","resizer":"Klikkaa ja raahaa muuttaaksesi kokoa","title":"Kuvan ominaisuudet","uploadTab":"Lisää tiedosto","urlMissing":"Kuvan lähdeosoite puuttuu.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Lisää murtoviiva"},"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"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elementin polku","eleTitle":"%1 elementti"},"contextmenu":{"options":"Pikavalikon ominaisuudet"},"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ä","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Leikealue","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Lainaus"},"basicstyles":{"bold":"Lihavoitu","italic":"Kursivoitu","strike":"Yliviivattu","subscript":"Alaindeksi","superscript":"Yläindeksi","underline":"Alleviivattu"},"about":{"copy":"Copyright &copy; $1. Kaikki oikeuden pidätetään.","dlgTitle":"Tietoa CKEditorista","moreInfo":"Lisenssitiedot löytyvät kotisivuiltamme:"},"editor":"Rikastekstieditori","editorPanel":"Rikastekstieditoripaneeli","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","left":"Vasemmalle","right":"Oikealle","center":"Keskelle","justify":"Tasaa molemmat reunat","alignLeft":"Tasaa vasemmat reunat","alignRight":"Tasaa oikeat reunat","alignCenter":"Align Center","alignTop":"Ylös","alignMiddle":"Keskelle","alignBottom":"Alas","alignNone":"Ei asetettu","invalidValue":"Virheellinen arvo.","invalidHeight":"Korkeuden täytyy olla numero.","invalidWidth":"Leveyden täytyy olla numero.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
+CKEDITOR.lang['fi']={"widget":{"move":"Siirrä klikkaamalla ja raahaamalla","label":"%1 widget"},"undo":{"redo":"Toista","undo":"Kumoa"},"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"},"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","heightUnit":"height unit","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ö"},"stylescombo":{"label":"Tyyli","panelTitle":"Muotoilujen tyylit","panelTitle1":"Lohkojen tyylit","panelTitle2":"Rivinsisäiset tyylit","panelTitle3":"Objektien tyylit"},"specialchar":{"options":"Erikoismerkin ominaisuudet","title":"Valitse erikoismerkki","toolbar":"Lisää erikoismerkki"},"sourcedialog":{"toolbar":"Koodi","title":"Koodi"},"sourcearea":{"toolbar":"Koodi"},"showblocks":{"toolbar":"Näytä elementit"},"removeformat":{"toolbar":"Poista muotoilu"},"pastetext":{"button":"Liitä tekstinä","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Suurenna","minimize":"Pienennä"},"magicline":{"title":"Lisää kappale tähän."},"list":{"bulletedlist":"Luettelomerkit","numberedlist":"Numerointi"},"language":{"button":"Aseta kieli","remove":"Poista kieli"},"indent":{"indent":"Suurenna sisennystä","outdent":"Pienennä sisennystä"},"image2":{"alt":"Vaihtoehtoinen teksti","btnUpload":"Lähetä palvelimelle","captioned":"Kuva kuvatekstillä","captionPlaceholder":"Kuvateksti","infoTab":"Kuvan tiedot","lockRatio":"Lukitse suhteet","menu":"Kuvan ominaisuudet","pathName":"kuva","pathNameCaption":"kuvateksti","resetSize":"Alkuperäinen koko","resizer":"Klikkaa ja raahaa muuttaaksesi kokoa","title":"Kuvan ominaisuudet","uploadTab":"Lisää tiedosto","urlMissing":"Kuvan lähdeosoite puuttuu.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Lisää murtoviiva"},"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"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elementin polku","eleTitle":"%1 elementti"},"contextmenu":{"options":"Pikavalikon ominaisuudet"},"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ä","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Leikealue","pasteMsg":"Paste your content inside the area below and press OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Lainaus"},"basicstyles":{"bold":"Lihavoitu","italic":"Kursivoitu","strike":"Yliviivattu","subscript":"Alaindeksi","superscript":"Yläindeksi","underline":"Alleviivattu"},"about":{"copy":"Copyright &copy; $1. Kaikki oikeuden pidätetään.","dlgTitle":"Tietoa CKEditorista","moreInfo":"Lisenssitiedot löytyvät kotisivuiltamme:"},"editor":"Rikastekstieditori","editorPanel":"Rikastekstieditoripaneeli","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","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","left":"Vasemmalle","right":"Oikealle","center":"Keskelle","justify":"Tasaa molemmat reunat","alignLeft":"Tasaa vasemmat reunat","alignRight":"Tasaa oikeat reunat","alignCenter":"Align Center","alignTop":"Ylös","alignMiddle":"Keskelle","alignBottom":"Alas","alignNone":"Ei asetettu","invalidValue":"Virheellinen arvo.","invalidHeight":"Korkeuden täytyy olla numero.","invalidWidth":"Leveyden täytyy olla numero.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/fo.js b/core/assets/vendor/ckeditor/lang/fo.js
index 2d32b25a12c4..2a1f070293b7 100644
--- a/core/assets/vendor/ckeditor/lang/fo.js
+++ b/core/assets/vendor/ckeditor/lang/fo.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['fo']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"Vend aftur","undo":"Angra"},"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"},"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ð","heightUnit":"height unit","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"},"stylescombo":{"label":"Typografi","panelTitle":"Formatterings stílir","panelTitle1":"Blokk stílir","panelTitle2":"Inline stílir","panelTitle3":"Object stílir"},"specialchar":{"options":"Møguleikar við serteknum","title":"Vel sertekn","toolbar":"Set inn sertekn"},"sourcedialog":{"toolbar":"Kelda","title":"Kelda"},"sourcearea":{"toolbar":"Kelda"},"showblocks":{"toolbar":"Vís blokkar"},"removeformat":{"toolbar":"Strika sniðgeving"},"pastetext":{"button":"Innrita som reinan tekst","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maksimera","minimize":"Minimera"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Punktmerktur listi","numberedlist":"Talmerktur listi"},"language":{"button":"Velja tungumál","remove":"Remove language"},"indent":{"indent":"Økja reglubrotarinntriv","outdent":"Minka reglubrotarinntriv"},"image2":{"alt":"Alternativur tekstur","btnUpload":"Send til ambætaran","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Myndaupplýsingar","lockRatio":"Læs lutfallið","menu":"Myndaeginleikar","pathName":"image","pathNameCaption":"caption","resetSize":"Upprunastødd","resizer":"Click and drag to resize","title":"Myndaeginleikar","uploadTab":"Send til ambætaran","urlMissing":"URL til mynd manglar.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Ger vatnrætta linju"},"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ð"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Slóð til elementir","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"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","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Avritingarumráði","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Blockquote"},"basicstyles":{"bold":"Feit skrift","italic":"Skráskrift","strike":"Yvirstrikað","subscript":"Lækkað skrift","superscript":"Hækkað skrift","underline":"Undirstrikað"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"Um CKEditor 4","moreInfo":"Licens upplýsingar finnast á heimasíðu okkara:"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","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ýs","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","left":"Vinstra","right":"Høgra","center":"Miðsett","justify":"Javnir tekstkantar","alignLeft":"Vinstrasett","alignRight":"Høgrasett","alignCenter":"Align Center","alignTop":"Ovast","alignMiddle":"Miðja","alignBottom":"Botnur","alignNone":"Eingin","invalidValue":"Invalid value.","invalidHeight":"Hædd má vera eitt tal.","invalidWidth":"Breidd má vera eitt tal.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
+CKEDITOR.lang['fo']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"Vend aftur","undo":"Angra"},"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"},"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ð","heightUnit":"height unit","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"},"stylescombo":{"label":"Typografi","panelTitle":"Formatterings stílir","panelTitle1":"Blokk stílir","panelTitle2":"Inline stílir","panelTitle3":"Object stílir"},"specialchar":{"options":"Møguleikar við serteknum","title":"Vel sertekn","toolbar":"Set inn sertekn"},"sourcedialog":{"toolbar":"Kelda","title":"Kelda"},"sourcearea":{"toolbar":"Kelda"},"showblocks":{"toolbar":"Vís blokkar"},"removeformat":{"toolbar":"Strika sniðgeving"},"pastetext":{"button":"Innrita som reinan tekst","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maksimera","minimize":"Minimera"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Punktmerktur listi","numberedlist":"Talmerktur listi"},"language":{"button":"Velja tungumál","remove":"Remove language"},"indent":{"indent":"Økja reglubrotarinntriv","outdent":"Minka reglubrotarinntriv"},"image2":{"alt":"Alternativur tekstur","btnUpload":"Send til ambætaran","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Myndaupplýsingar","lockRatio":"Læs lutfallið","menu":"Myndaeginleikar","pathName":"image","pathNameCaption":"caption","resetSize":"Upprunastødd","resizer":"Click and drag to resize","title":"Myndaeginleikar","uploadTab":"Send til ambætaran","urlMissing":"URL til mynd manglar.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Ger vatnrætta linju"},"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ð"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Slóð til elementir","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"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","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Avritingarumráði","pasteMsg":"Paste your content inside the area below and press OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Blockquote"},"basicstyles":{"bold":"Feit skrift","italic":"Skráskrift","strike":"Yvirstrikað","subscript":"Lækkað skrift","superscript":"Hækkað skrift","underline":"Undirstrikað"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"Um CKEditor 4","moreInfo":"Licens upplýsingar finnast á heimasíðu okkara:"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","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","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ýs","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","left":"Vinstra","right":"Høgra","center":"Miðsett","justify":"Javnir tekstkantar","alignLeft":"Vinstrasett","alignRight":"Høgrasett","alignCenter":"Align Center","alignTop":"Ovast","alignMiddle":"Miðja","alignBottom":"Botnur","alignNone":"Eingin","invalidValue":"Invalid value.","invalidHeight":"Hædd má vera eitt tal.","invalidWidth":"Breidd má vera eitt tal.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/fr-ca.js b/core/assets/vendor/ckeditor/lang/fr-ca.js
index b69bf94ba004..f0e44dddad41 100644
--- a/core/assets/vendor/ckeditor/lang/fr-ca.js
+++ b/core/assets/vendor/ckeditor/lang/fr-ca.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['fr-ca']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"Refaire","undo":"Annuler"},"toolbar":{"toolbarCollapse":"Enrouler la barre d'outils","toolbarExpand":"Dérouler la barre d'outils","toolbarGroups":{"document":"Document","clipboard":"Presse papier/Annuler","editing":"Édition","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"},"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":"Propriétés de la cellule","cellType":"Type de cellule","rowSpan":"Fusion de lignes","colSpan":"Fusion de colonnes","wordWrap":"Retour à la ligne","hAlign":"Alignement horizontal","vAlign":"Alignement vertical","alignBaseline":"Bas du texte","bgColor":"Couleur d'arrière plan","borderColor":"Couleur de bordure","data":"Données","header":"En-tê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":"Sélectionner"},"cellPad":"Marge interne des cellules","cellSpace":"Espacement des cellules","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":"En-têtes","headersBoth":"Les deux.","headersColumn":"Première colonne","headersNone":"Aucun","headersRow":"Première ligne","heightUnit":"height unit","invalidBorder":"La taille de bordure doit être un nombre.","invalidCellPadding":"La marge interne 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 des lignes"},"rows":"Lignes","summary":"Résumé","title":"Propriétés du tableau","toolbar":"Tableau","widthPc":"pourcentage","widthPx":"pixels","widthUnit":"unité de largeur"},"stylescombo":{"label":"Styles","panelTitle":"Styles de formattage","panelTitle1":"Styles de block","panelTitle2":"Styles en ligne","panelTitle3":"Styles d'objet"},"specialchar":{"options":"Option des caractères spéciaux","title":"Sélectionner un caractère spécial","toolbar":"Insérer un caractère spécial"},"sourcedialog":{"toolbar":"Source","title":"Source"},"sourcearea":{"toolbar":"Source"},"showblocks":{"toolbar":"Afficher les blocs"},"removeformat":{"toolbar":"Supprimer le formatage"},"pastetext":{"button":"Coller comme texte","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Coller comme texte"},"pastefromword":{"confirmCleanup":"Le texte que vous tentez de 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 du à une erreur interne","title":"Coller de Word","toolbar":"Coller de Word"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maximizer","minimize":"Minimizer"},"magicline":{"title":"Insérer le paragraphe ici"},"list":{"bulletedlist":"Liste à puces","numberedlist":"Liste numérotée"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"Augmenter le retrait","outdent":"Diminuer le retrait"},"image2":{"alt":"Texte alternatif","btnUpload":"Envoyer sur le serveur","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Informations sur l'image2","lockRatio":"Verrouiller les proportions","menu":"Propriétés de l'image2","pathName":"image","pathNameCaption":"caption","resetSize":"Taille originale","resizer":"Click and drag to resize","title":"Propriétés de l'image2","uploadTab":"Téléverser","urlMissing":"L'URL de la source de l'image est manquant.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Insérer un séparateur horizontale"},"format":{"label":"Format","panelTitle":"Format de paragraphe","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é"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Chemin d'éléments","eleTitle":"element %1"},"contextmenu":{"options":"Options du menu contextuel"},"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","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Coller la zone","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Citation"},"basicstyles":{"bold":"Gras","italic":"Italique","strike":"Barré","subscript":"Indice","superscript":"Exposant","underline":"Souligné"},"about":{"copy":"Copyright &copy; $1. Tous droits réservés.","dlgTitle":"À propos de CKEditor 4","moreInfo":"Pour les informations de licence, consulter notre site internet:"},"editor":"Éditeur de texte enrichi","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Appuyez sur 0 pour de l'aide","browseServer":"Parcourir le serveur","url":"URL","protocol":"Protocole","upload":"Envoyer","uploadSubmit":"Envoyer au 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":"Liste déroulante","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 CSS","advisoryTitle":"Titre","cssStyle":"Style","ok":"OK","cancel":"Annuler","close":"Fermer","preview":"Aperçu","resize":"Redimensionner","generalTab":"Général","advancedTab":"Avancé","validateNumberFailed":"Cette valeur n'est pas un nombre.","confirmNewPage":"Les changements non sauvegardés seront perdus. Êtes-vous certain de vouloir charger une nouvelle page?","confirmCancel":"Certaines options ont été modifiées.  Êtes-vous certain de vouloir fermer?","options":"Options","target":"Cible","targetNew":"Nouvelle fenêtre (_blank)","targetTop":"Fenêtre supérieur (_top)","targetSelf":"Cette fenêtre (_self)","targetParent":"Fenêtre parent (_parent)","langDirLTR":"De gauche à droite (LTR)","langDirRTL":"De droite à gauche (RTL)","styles":"Style","cssClasses":"Classe CSS","width":"Largeur","height":"Hauteur","align":"Alignement","left":"Gauche","right":"Droite","center":"Centré","justify":"Justifié","alignLeft":"Aligner à gauche","alignRight":"Aligner à Droite","alignCenter":"Align Center","alignTop":"Haut","alignMiddle":"Milieu","alignBottom":"Bas","alignNone":"None","invalidValue":"Valeur invalide.","invalidHeight":"La hauteur doit être un nombre.","invalidWidth":"La largeur doit être un nombre.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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, ou 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 ou %).","invalidInlineStyle":"La valeur spécifiée pour le style intégré 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 la valeur en pixel ou un nombre avec une unité CSS valide (px, %, in, cm, mm, em, ex, pt, ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, indisponible</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
+CKEDITOR.lang['fr-ca']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"Refaire","undo":"Annuler"},"toolbar":{"toolbarCollapse":"Enrouler la barre d'outils","toolbarExpand":"Dérouler la barre d'outils","toolbarGroups":{"document":"Document","clipboard":"Presse papier/Annuler","editing":"Édition","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"},"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":"Propriétés de la cellule","cellType":"Type de cellule","rowSpan":"Fusion de lignes","colSpan":"Fusion de colonnes","wordWrap":"Retour à la ligne","hAlign":"Alignement horizontal","vAlign":"Alignement vertical","alignBaseline":"Bas du texte","bgColor":"Couleur d'arrière plan","borderColor":"Couleur de bordure","data":"Données","header":"En-tê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":"Sélectionner"},"cellPad":"Marge interne des cellules","cellSpace":"Espacement des cellules","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":"En-têtes","headersBoth":"Les deux.","headersColumn":"Première colonne","headersNone":"Aucun","headersRow":"Première ligne","heightUnit":"height unit","invalidBorder":"La taille de bordure doit être un nombre.","invalidCellPadding":"La marge interne 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 des lignes"},"rows":"Lignes","summary":"Résumé","title":"Propriétés du tableau","toolbar":"Tableau","widthPc":"pourcentage","widthPx":"pixels","widthUnit":"unité de largeur"},"stylescombo":{"label":"Styles","panelTitle":"Styles de formattage","panelTitle1":"Styles de block","panelTitle2":"Styles en ligne","panelTitle3":"Styles d'objet"},"specialchar":{"options":"Option des caractères spéciaux","title":"Sélectionner un caractère spécial","toolbar":"Insérer un caractère spécial"},"sourcedialog":{"toolbar":"Source","title":"Source"},"sourcearea":{"toolbar":"Source"},"showblocks":{"toolbar":"Afficher les blocs"},"removeformat":{"toolbar":"Supprimer le formatage"},"pastetext":{"button":"Coller comme texte","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Coller comme texte"},"pastefromword":{"confirmCleanup":"Le texte que vous tentez de 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 du à une erreur interne","title":"Coller de Word","toolbar":"Coller de Word"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maximizer","minimize":"Minimizer"},"magicline":{"title":"Insérer le paragraphe ici"},"list":{"bulletedlist":"Liste à puces","numberedlist":"Liste numérotée"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"Augmenter le retrait","outdent":"Diminuer le retrait"},"image2":{"alt":"Texte alternatif","btnUpload":"Envoyer sur le serveur","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Informations sur l'image2","lockRatio":"Verrouiller les proportions","menu":"Propriétés de l'image2","pathName":"image","pathNameCaption":"caption","resetSize":"Taille originale","resizer":"Click and drag to resize","title":"Propriétés de l'image2","uploadTab":"Téléverser","urlMissing":"L'URL de la source de l'image est manquant.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Insérer un séparateur horizontale"},"format":{"label":"Format","panelTitle":"Format de paragraphe","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é"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Chemin d'éléments","eleTitle":"element %1"},"contextmenu":{"options":"Options du menu contextuel"},"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","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Coller la zone","pasteMsg":"Paste your content inside the area below and press OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Citation"},"basicstyles":{"bold":"Gras","italic":"Italique","strike":"Barré","subscript":"Indice","superscript":"Exposant","underline":"Souligné"},"about":{"copy":"Copyright &copy; $1. Tous droits réservés.","dlgTitle":"À propos de CKEditor 4","moreInfo":"Pour les informations de licence, consulter notre site internet:"},"editor":"Éditeur de texte enrichi","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Appuyez sur 0 pour de l'aide","browseServer":"Parcourir le serveur","url":"URL","protocol":"Protocole","upload":"Envoyer","uploadSubmit":"Envoyer au serveur","image":"Image","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":"<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 CSS","advisoryTitle":"Titre","cssStyle":"Style","ok":"OK","cancel":"Annuler","close":"Fermer","preview":"Aperçu","resize":"Redimensionner","generalTab":"Général","advancedTab":"Avancé","validateNumberFailed":"Cette valeur n'est pas un nombre.","confirmNewPage":"Les changements non sauvegardés seront perdus. Êtes-vous certain de vouloir charger une nouvelle page?","confirmCancel":"Certaines options ont été modifiées.  Êtes-vous certain de vouloir fermer?","options":"Options","target":"Cible","targetNew":"Nouvelle fenêtre (_blank)","targetTop":"Fenêtre supérieur (_top)","targetSelf":"Cette fenêtre (_self)","targetParent":"Fenêtre parent (_parent)","langDirLTR":"De gauche à droite (LTR)","langDirRTL":"De droite à gauche (RTL)","styles":"Style","cssClasses":"Classe CSS","width":"Largeur","height":"Hauteur","align":"Alignement","left":"Gauche","right":"Droite","center":"Centré","justify":"Justifié","alignLeft":"Aligner à gauche","alignRight":"Aligner à Droite","alignCenter":"Align Center","alignTop":"Haut","alignMiddle":"Milieu","alignBottom":"Bas","alignNone":"None","invalidValue":"Valeur invalide.","invalidHeight":"La hauteur doit être un nombre.","invalidWidth":"La largeur doit être un nombre.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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, ou 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 ou %).","invalidInlineStyle":"La valeur spécifiée pour le style intégré 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 la valeur en pixel ou un nombre avec une unité CSS valide (px, %, in, cm, mm, em, ex, pt, ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, indisponible</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/fr.js b/core/assets/vendor/ckeditor/lang/fr.js
index f397ccb9e81d..128b14b6b27c 100644
--- a/core/assets/vendor/ckeditor/lang/fr.js
+++ b/core/assets/vendor/ckeditor/lang/fr.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['fr']={"widget":{"move":"Cliquer et glisser pour déplacer","label":"Élément %1"},"undo":{"redo":"Rétablir","undo":"Annuler"},"toolbar":{"toolbarCollapse":"Enrouler la barre d'outils","toolbarExpand":"Dérouler la barre d'outils","toolbarGroups":{"document":"Document","clipboard":"Presse-papier/Défaire","editing":"Édition","forms":"Formulaires","basicstyles":"Styles de base","paragraph":"Paragraphe","links":"Liens","insert":"Insérer","styles":"Styles","colors":"Couleurs","tools":"Outils"},"toolbars":"Barres d'outils de l'éditeur"},"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 vers la droite","mergeDown":"Fusionner vers le bas","splitHorizontal":"Scinder la cellule horizontalement","splitVertical":"Scinder la cellule verticalement","title":"Propriétés de la cellule","cellType":"Type de cellule","rowSpan":"Lignes occupées","colSpan":"Colonnes occupées","wordWrap":"Césure","hAlign":"Alignement horizontal","vAlign":"Alignement vertical","alignBaseline":"Ligne de base","bgColor":"Couleur d'arrière-plan","borderColor":"Couleur de bordure","data":"Données","header":"En-tête","yes":"Oui","no":"Non","invalidWidth":"La largeur de la cellule doit être un nombre.","invalidHeight":"La hauteur de la cellule doit être un nombre.","invalidRowSpan":"Le nombre de colonnes occupées doit être un nombre entier.","invalidColSpan":"Le nombre de colonnes occupées doit être un nombre entier.","chooseColor":"Choisir"},"cellPad":"Marge interne des cellules","cellSpace":"Espacement entre les cellules","column":{"menu":"Colonne","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":"Aucun","headersRow":"Première ligne","heightUnit":"unité de hauteur","invalidBorder":"La taille de la bordure doit être un nombre.","invalidCellPadding":"La marge interne des cellules doit être un nombre positif.","invalidCellSpacing":"L'espacement entre les 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":"pour cent","widthPx":"pixels","widthUnit":"unité de largeur"},"stylescombo":{"label":"Styles","panelTitle":"Styles de mise en forme","panelTitle1":"Styles de bloc","panelTitle2":"Styles en ligne","panelTitle3":"Styles d'objet"},"specialchar":{"options":"Options des caractères spéciaux","title":"Sélectionner un caractère","toolbar":"Insérer un caractère spécial"},"sourcedialog":{"toolbar":"Source","title":"Source"},"sourcearea":{"toolbar":"Source"},"showblocks":{"toolbar":"Afficher les blocs"},"removeformat":{"toolbar":"Supprimer la mise en forme"},"pastetext":{"button":"Coller comme texte brut","pasteNotification":"Utilisez le raccourci %1 pour coller. Votre navigateur n'accepte pas de coller à l'aide du bouton ou du menu contextuel.","title":"Coller comme texte brut"},"pastefromword":{"confirmCleanup":"Le texte à coller semble provenir de Word. Désirez-vous le nettoyer avant de coller ?","error":"Les données collées n'ont pas pu être nettoyées à cause d'une erreur interne","title":"Coller depuis Word","toolbar":"Coller depuis Word"},"notification":{"closed":"Notification fermée."},"maximize":{"maximize":"Agrandir","minimize":"Réduire"},"magicline":{"title":"Insérer un paragraphe ici"},"list":{"bulletedlist":"Insérer/Supprimer une liste à puces","numberedlist":"Insérer/Supprimer une liste numérotée"},"language":{"button":"Définir la langue","remove":"Supprimer la langue"},"indent":{"indent":"Augmenter le retrait","outdent":"Diminuer le retrait"},"image2":{"alt":"Texte alternatif","btnUpload":"Envoyer sur le serveur","captioned":"Image légendée","captionPlaceholder":"Légende","infoTab":"Informations sur l'image","lockRatio":"Conserver les proportions","menu":"Propriétés de l'image","pathName":"image","pathNameCaption":"légende","resetSize":"Réinitialiser la taille","resizer":"Cliquer et glisser pour redimensionner","title":"Propriétés de l'image","uploadTab":"Téléverser","urlMissing":"L'URL source de l'image est manquante.","altMissing":"Vous n'avez pas indiqué de texte de remplacement."},"horizontalrule":{"toolbar":"Ligne horizontale"},"format":{"label":"Format","panelTitle":"Format de paragraphe","tag_address":"Adresse","tag_div":"Division","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":"Préformaté"},"filetools":{"loadError":"Une erreur est survenue lors de la lecture du fichier.","networkError":"Une erreur réseau est survenue lors du téléversement du fichier.","httpError404":"Une erreur HTTP est survenue durant le téléversement du fichier (404 : fichier non trouvé).","httpError403":"Une erreur HTTP est survenue durant le téléversement du fichier (403 : accès refusé).","httpError":"Une erreur HTTP est survenue durant le téléversement du fichier (erreur : %1).","noUrlError":"L'URL de téléversement n'est pas spécifiée.","responseError":"Réponse du serveur incorrecte."},"elementspath":{"eleLabel":"Chemin des éléments","eleTitle":"Élément %1"},"contextmenu":{"options":"Options du menu contextuel"},"clipboard":{"copy":"Copier","copyError":"Les paramètres de sécurité de votre navigateur n'autorisent pas l'éditeur à exécuter automatiquement l'opération « Copier ». Veuillez utiliser le raccourci clavier à cet effet (Ctrl/Cmd+C).","cut":"Couper","cutError":"Les paramètres de sécurité de votre navigateur n'autorisent pas l'éditeur à exécuter automatiquement l'opération « Couper ». Veuillez utiliser le raccourci clavier à cet effet (Ctrl/Cmd+X).","paste":"Coller","pasteNotification":"Utilisez le raccourci %1 pour coller. Votre navigateur n'accepte pas de coller à l'aide du bouton ou du menu contextuel.","pasteArea":"Coller la zone","pasteMsg":"Collez votre contenu dans la zone de saisie ci-dessous et cliquez OK."},"blockquote":{"toolbar":"Citation"},"basicstyles":{"bold":"Gras","italic":"Italique","strike":"Barré","subscript":"Indice","superscript":"Exposant","underline":"Souligné"},"about":{"copy":"Copyright &copy; $1. Tous droits réservés.","dlgTitle":"À propos de CKEditor 4","moreInfo":"Pour les informations de licence, veuillez visiter notre site web :"},"editor":"Éditeur de texte enrichi","editorPanel":"Tableau de bord de l'éditeur de texte enrichi","common":{"editorHelp":"Utilisez le raccourci Alt-0 pour obtenir de l'aide","browseServer":"Parcourir le serveur","url":"URL","protocol":"Protocole","upload":"Télécharger","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 invisible","button":"Bouton","select":"Liste déroulante","imageButton":"Bouton avec image","notSet":"<indé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","cssClass":"Classes de style","advisoryTitle":"Infobulle","cssStyle":"Style","ok":"OK","cancel":"Annuler","close":"Fermer","preview":"Aperçu","resize":"Redimensionner","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","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","left":"Gauche","right":"Droite","center":"Centrer","justify":"Justifier","alignLeft":"Aligner à gauche","alignRight":"Aligner à droite","alignCenter":"Aligner au centre","alignTop":"Haut","alignMiddle":"Milieu","alignBottom":"Bas","alignNone":"Aucun","invalidValue":"Valeur invalide.","invalidHeight":"La hauteur doit être un nombre.","invalidWidth":"La largeur doit être un nombre.","invalidLength":"La valeur de \"%1\" doit être un nombre positif avec ou sans unité de mesure (%2).","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, ou 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 ou %).","invalidInlineStyle":"La valeur spécifiée pour le style en ligne doit être composée d'un ou plusieurs couples au format « nom : valeur », séparé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, ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, indisponible</span>","keyboard":{"8":"Retour arrière","13":"Entrée","16":"Majuscule","17":"Ctrl","18":"Alt","32":"Espace","35":"Fin","36":"Origine","46":"Supprimer","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Commande"},"keyboardShortcut":"Raccourci clavier","optionDefault":"Par défaut"}};
\ No newline at end of file
+CKEDITOR.lang['fr']={"widget":{"move":"Cliquer et glisser pour déplacer","label":"Élément %1"},"undo":{"redo":"Rétablir","undo":"Annuler"},"toolbar":{"toolbarCollapse":"Enrouler la barre d'outils","toolbarExpand":"Dérouler la barre d'outils","toolbarGroups":{"document":"Document","clipboard":"Presse-papier/Défaire","editing":"Édition","forms":"Formulaires","basicstyles":"Styles de base","paragraph":"Paragraphe","links":"Liens","insert":"Insérer","styles":"Styles","colors":"Couleurs","tools":"Outils"},"toolbars":"Barres d'outils de l'éditeur"},"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 vers la droite","mergeDown":"Fusionner vers le bas","splitHorizontal":"Scinder la cellule horizontalement","splitVertical":"Scinder la cellule verticalement","title":"Propriétés de la cellule","cellType":"Type de cellule","rowSpan":"Lignes occupées","colSpan":"Colonnes occupées","wordWrap":"Césure","hAlign":"Alignement horizontal","vAlign":"Alignement vertical","alignBaseline":"Ligne de base","bgColor":"Couleur d'arrière-plan","borderColor":"Couleur de bordure","data":"Données","header":"En-tête","yes":"Oui","no":"Non","invalidWidth":"La largeur de la cellule doit être un nombre.","invalidHeight":"La hauteur de la cellule doit être un nombre.","invalidRowSpan":"Le nombre de colonnes occupées doit être un nombre entier.","invalidColSpan":"Le nombre de colonnes occupées doit être un nombre entier.","chooseColor":"Choisir"},"cellPad":"Marge interne des cellules","cellSpace":"Espacement entre les cellules","column":{"menu":"Colonne","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":"Aucun","headersRow":"Première ligne","heightUnit":"unité de hauteur","invalidBorder":"La taille de la bordure doit être un nombre.","invalidCellPadding":"La marge interne des cellules doit être un nombre positif.","invalidCellSpacing":"L'espacement entre les 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":"pour cent","widthPx":"pixels","widthUnit":"unité de largeur"},"stylescombo":{"label":"Styles","panelTitle":"Styles de mise en forme","panelTitle1":"Styles de bloc","panelTitle2":"Styles en ligne","panelTitle3":"Styles d'objet"},"specialchar":{"options":"Options des caractères spéciaux","title":"Sélectionner un caractère","toolbar":"Insérer un caractère spécial"},"sourcedialog":{"toolbar":"Source","title":"Source"},"sourcearea":{"toolbar":"Source"},"showblocks":{"toolbar":"Afficher les blocs"},"removeformat":{"toolbar":"Supprimer la mise en forme"},"pastetext":{"button":"Coller comme texte brut","pasteNotification":"Utilisez le raccourci %1 pour coller. Votre navigateur n'accepte pas de coller à l'aide du bouton ou du menu contextuel.","title":"Coller comme texte brut"},"pastefromword":{"confirmCleanup":"Le texte à coller semble provenir de Word. Désirez-vous le nettoyer avant de coller ?","error":"Les données collées n'ont pas pu être nettoyées à cause d'une erreur interne","title":"Coller depuis Word","toolbar":"Coller depuis Word"},"notification":{"closed":"Notification fermée."},"maximize":{"maximize":"Agrandir","minimize":"Réduire"},"magicline":{"title":"Insérer un paragraphe ici"},"list":{"bulletedlist":"Insérer/Supprimer une liste à puces","numberedlist":"Insérer/Supprimer une liste numérotée"},"language":{"button":"Définir la langue","remove":"Supprimer la langue"},"indent":{"indent":"Augmenter le retrait","outdent":"Diminuer le retrait"},"image2":{"alt":"Texte alternatif","btnUpload":"Envoyer sur le serveur","captioned":"Image légendée","captionPlaceholder":"Légende","infoTab":"Informations sur l'image","lockRatio":"Conserver les proportions","menu":"Propriétés de l'image","pathName":"image","pathNameCaption":"légende","resetSize":"Réinitialiser la taille","resizer":"Cliquer et glisser pour redimensionner","title":"Propriétés de l'image","uploadTab":"Téléverser","urlMissing":"L'URL source de l'image est manquante.","altMissing":"Vous n'avez pas indiqué de texte de remplacement."},"horizontalrule":{"toolbar":"Ligne horizontale"},"format":{"label":"Format","panelTitle":"Format de paragraphe","tag_address":"Adresse","tag_div":"Division","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":"Préformaté"},"filetools":{"loadError":"Une erreur est survenue lors de la lecture du fichier.","networkError":"Une erreur réseau est survenue lors du téléversement du fichier.","httpError404":"Une erreur HTTP est survenue durant le téléversement du fichier (404 : fichier non trouvé).","httpError403":"Une erreur HTTP est survenue durant le téléversement du fichier (403 : accès refusé).","httpError":"Une erreur HTTP est survenue durant le téléversement du fichier (erreur : %1).","noUrlError":"L'URL de téléversement n'est pas spécifiée.","responseError":"Réponse du serveur incorrecte."},"elementspath":{"eleLabel":"Chemin des éléments","eleTitle":"Élément %1"},"contextmenu":{"options":"Options du menu contextuel"},"clipboard":{"copy":"Copier","copyError":"Les paramètres de sécurité de votre navigateur n'autorisent pas l'éditeur à exécuter automatiquement l'opération « Copier ». Veuillez utiliser le raccourci clavier à cet effet (Ctrl/Cmd+C).","cut":"Couper","cutError":"Les paramètres de sécurité de votre navigateur n'autorisent pas l'éditeur à exécuter automatiquement l'opération « Couper ». Veuillez utiliser le raccourci clavier à cet effet (Ctrl/Cmd+X).","paste":"Coller","pasteNotification":"Utilisez le raccourci %1 pour coller. Votre navigateur n'accepte pas de coller à l'aide du bouton ou du menu contextuel.","pasteArea":"Coller la zone","pasteMsg":"Collez votre contenu dans la zone de saisie ci-dessous et cliquez OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Citation"},"basicstyles":{"bold":"Gras","italic":"Italique","strike":"Barré","subscript":"Indice","superscript":"Exposant","underline":"Souligné"},"about":{"copy":"Copyright &copy; $1. Tous droits réservés.","dlgTitle":"À propos de CKEditor 4","moreInfo":"Pour les informations de licence, veuillez visiter notre site web :"},"editor":"Éditeur de texte enrichi","editorPanel":"Tableau de bord de l'éditeur de texte enrichi","common":{"editorHelp":"Utilisez le raccourci Alt-0 pour obtenir de l'aide","browseServer":"Parcourir le serveur","url":"URL","protocol":"Protocole","upload":"Télécharger","uploadSubmit":"Envoyer sur le serveur","image":"Image","form":"Formulaire","checkbox":"Case à cocher","radio":"Bouton radio","textField":"Champ texte","textarea":"Zone de texte","hiddenField":"Champ invisible","button":"Bouton","select":"Liste déroulante","imageButton":"Bouton avec image","notSet":"<indé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","cssClass":"Classes de style","advisoryTitle":"Infobulle","cssStyle":"Style","ok":"OK","cancel":"Annuler","close":"Fermer","preview":"Aperçu","resize":"Redimensionner","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","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","left":"Gauche","right":"Droite","center":"Centrer","justify":"Justifier","alignLeft":"Aligner à gauche","alignRight":"Aligner à droite","alignCenter":"Aligner au centre","alignTop":"Haut","alignMiddle":"Milieu","alignBottom":"Bas","alignNone":"Aucun","invalidValue":"Valeur invalide.","invalidHeight":"La hauteur doit être un nombre.","invalidWidth":"La largeur doit être un nombre.","invalidLength":"La valeur de \"%1\" doit être un nombre positif avec ou sans unité de mesure (%2).","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, ou 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 ou %).","invalidInlineStyle":"La valeur spécifiée pour le style en ligne doit être composée d'un ou plusieurs couples au format « nom : valeur », séparé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, ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, indisponible</span>","keyboard":{"8":"Retour arrière","13":"Entrée","16":"Majuscule","17":"Ctrl","18":"Alt","32":"Espace","35":"Fin","36":"Origine","46":"Supprimer","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Commande"},"keyboardShortcut":"Raccourci clavier","optionDefault":"Par défaut"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/gl.js b/core/assets/vendor/ckeditor/lang/gl.js
index 5948085ab021..bfb358c2f6d1 100644
--- a/core/assets/vendor/ckeditor/lang/gl.js
+++ b/core/assets/vendor/ckeditor/lang/gl.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['gl']={"widget":{"move":"Prema e arrastre para mover","label":"Trebello %1"},"undo":{"redo":"Refacer","undo":"Desfacer"},"toolbar":{"toolbarCollapse":"Contraer a barra de ferramentas","toolbarExpand":"Expandir a barra de ferramentas","toolbarGroups":{"document":"Documento","clipboard":"Portapapeis/desfacer","editing":"Edición","forms":"Formularios","basicstyles":"Estilos básicos","paragraph":"Paragrafo","links":"Ligazóns","insert":"Inserir","styles":"Estilos","colors":"Cores","tools":"Ferramentas"},"toolbars":"Barras de ferramentas do editor"},"table":{"border":"Tamaño do bordo","caption":"Título","cell":{"menu":"Cela","insertBefore":"Inserir a cela á esquerda","insertAfter":"Inserir a cela á dereita","deleteCell":"Eliminar celas","merge":"Combinar celas","mergeRight":"Combinar á dereita","mergeDown":"Combinar cara abaixo","splitHorizontal":"Dividir a cela en horizontal","splitVertical":"Dividir a cela en vertical","title":"Propiedades da cela","cellType":"Tipo de cela","rowSpan":"Expandir filas","colSpan":"Expandir columnas","wordWrap":"Axustar ao contido","hAlign":"Aliñación horizontal","vAlign":"Aliñación vertical","alignBaseline":"Liña de base","bgColor":"Cor do fondo","borderColor":"Cor do bordo","data":"Datos","header":"Cabeceira","yes":"Si","no":"Non","invalidWidth":"O largo da cela debe ser un número.","invalidHeight":"O alto da cela debe ser un número.","invalidRowSpan":"A expansión de filas debe ser un número enteiro.","invalidColSpan":"A expansión de columnas debe ser un número enteiro.","chooseColor":"Escoller"},"cellPad":"Marxe interior da cela","cellSpace":"Marxe entre celas","column":{"menu":"Columna","insertBefore":"Inserir a columna á esquerda","insertAfter":"Inserir a columna á dereita","deleteColumn":"Borrar Columnas"},"columns":"Columnas","deleteTable":"Borrar Táboa","headers":"Cabeceiras","headersBoth":"Ambas","headersColumn":"Primeira columna","headersNone":"Ningún","headersRow":"Primeira fila","heightUnit":"unidade do alto","invalidBorder":"O tamaño do bordo debe ser un número.","invalidCellPadding":"A marxe interior debe ser un número positivo.","invalidCellSpacing":"A marxe entre celas debe ser un número positivo.","invalidCols":"O número de columnas debe ser un número maior que 0.","invalidHeight":"O alto da táboa debe ser un número.","invalidRows":"O número de filas debe ser un número maior que 0","invalidWidth":"O largo da táboa debe ser un número.","menu":"Propiedades da táboa","row":{"menu":"Fila","insertBefore":"Inserir a fila por riba","insertAfter":"Inserir a fila por baixo","deleteRow":"Eliminar filas"},"rows":"Filas","summary":"Resumo","title":"Propiedades da táboa","toolbar":"Taboa","widthPc":"porcentaxe","widthPx":"píxeles","widthUnit":"unidade do largo"},"stylescombo":{"label":"Estilos","panelTitle":"Estilos de formatando","panelTitle1":"Estilos de bloque","panelTitle2":"Estilos de liña","panelTitle3":"Estilos de obxecto"},"specialchar":{"options":"Opcións de caracteres especiais","title":"Seleccione un carácter especial","toolbar":"Inserir un carácter especial"},"sourcedialog":{"toolbar":"Orixe","title":"Orixe"},"sourcearea":{"toolbar":"Orixe"},"showblocks":{"toolbar":"Amosar os bloques"},"removeformat":{"toolbar":"Retirar o formato"},"pastetext":{"button":"Pegar como texto simple","pasteNotification":"Prema %1 para pegar. O seu navegador non admite pegar co botón da barra de ferramentas ou coa opción do menú contextual.","title":"Pegar como texto simple"},"pastefromword":{"confirmCleanup":"O texto que quere pegar semella ser copiado desde o Word. Quere depuralo antes de pegalo?","error":"Non foi posíbel depurar os datos pegados por mor dun erro interno","title":"Pegar desde Word","toolbar":"Pegar desde Word"},"notification":{"closed":"Notificación pechada."},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"magicline":{"title":"Inserir aquí o parágrafo"},"list":{"bulletedlist":"Inserir/retirar lista viñeteada","numberedlist":"Inserir/retirar lista numerada"},"language":{"button":"Estabelezer o idioma","remove":"Retirar o idioma"},"indent":{"indent":"Aumentar a sangría","outdent":"Reducir a sangría"},"image2":{"alt":"Texto alternativo","btnUpload":"Enviar ao servidor","captioned":"Imaxe con lenda","captionPlaceholder":"Lenda","infoTab":"Información da imaxe","lockRatio":"Proporcional","menu":"Propiedades da imaxe","pathName":"Imaxe","pathNameCaption":"lenda","resetSize":"Tamaño orixinal","resizer":"Prema e arrastre para axustar o tamaño","title":"Propiedades da imaxe","uploadTab":"Cargar","urlMissing":"Non se atopa o URL da imaxe.","altMissing":"Non foi posíbel atopar o texto alternativo."},"horizontalrule":{"toolbar":"Inserir unha liña horizontal"},"format":{"label":"Formato","panelTitle":"Formato do parágrafo","tag_address":"Enderezo","tag_div":"Normal  (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":"Formatado"},"filetools":{"loadError":"Produciuse un erro durante a lectura do ficheiro.","networkError":"Produciuse un erro na rede durante o envío do ficheiro.","httpError404":"Produciuse un erro HTTP durante o envío do ficheiro (404: Ficheiro non atopado).","httpError403":"Produciuse un erro HTTP durante o envío do ficheiro (403: Acceso denegado).","httpError":"Produciuse un erro HTTP durante o envío do ficheiro (erro de estado: %1).","noUrlError":"Non foi definido o URL para o envío.","responseError":"Resposta incorrecta do servidor."},"elementspath":{"eleLabel":"Ruta dos elementos","eleTitle":"Elemento %1"},"contextmenu":{"options":"Opcións do menú contextual"},"clipboard":{"copy":"Copiar","copyError":"Os axustes de seguranza do seu navegador non permiten que o editor realice automaticamente as tarefas de copia. Use o teclado para iso (Ctrl/Cmd+C).","cut":"Cortar","cutError":"Os axustes de seguranza do seu navegador non permiten que o editor realice automaticamente as tarefas de corte. Use o teclado para iso (Ctrl/Cmd+X).","paste":"Pegar","pasteNotification":"Prema %1 para pegar. O seu navegador non admite pegar co botón da barra de ferramentas ou coa opción do menú contextual.","pasteArea":"Zona de pegado","pasteMsg":"Pegue o contido dentro da área de abaixo e prema Aceptar."},"blockquote":{"toolbar":"Cita"},"basicstyles":{"bold":"Negra","italic":"Cursiva","strike":"Riscado","subscript":"Subíndice","superscript":"Superíndice","underline":"Subliñado"},"about":{"copy":"Copyright &copy; $1. Todos os dereitos reservados.","dlgTitle":"Sobre o CKEditor 4","moreInfo":"Para obter  información sobre a licenza, visite o noso sitio web:"},"editor":"Editor de texto mellorado","editorPanel":"Panel do editor de texto mellorado","common":{"editorHelp":"Prema ALT 0 para obter axuda","browseServer":"Examinar o servidor","url":"URL","protocol":"Protocolo","upload":"Enviar","uploadSubmit":"Enviar ao servidor","image":"Imaxe","flash":"Flash","form":"Formulario","checkbox":"Caixa de selección","radio":"Botón de opción","textField":"Campo de texto","textarea":"Área de texto","hiddenField":"Campo agochado","button":"Botón","select":"Campo de selección","imageButton":"Botón de imaxe","notSet":"<sen estabelecer>","id":"ID","name":"Nome","langDir":"Dirección de escritura do idioma","langDirLtr":"Esquerda a dereita (LTR)","langDirRtl":"Dereita a esquerda (RTL)","langCode":"Código do idioma","longDescr":"Descrición completa do URL","cssClass":"Clases da folla de estilos","advisoryTitle":"Título","cssStyle":"Estilo","ok":"Aceptar","cancel":"Cancelar","close":"Pechar","preview":"Vista previa","resize":"Redimensionar","generalTab":"Xeral","advancedTab":"Avanzado","validateNumberFailed":"Este valor non é un número.","confirmNewPage":"Calquera cambio que non gardara neste contido perderase.\r\nConfirma que quere cargar unha páxina nova?","confirmCancel":"Algunhas das opcións foron cambiadas.\r\nConfirma que quere pechar o diálogo?","options":"Opcións","target":"Destino","targetNew":"Nova xanela (_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":"Largo","height":"Alto","align":"Aliñamento","left":"Esquerda","right":"Dereita","center":"Centro","justify":"Xustificado","alignLeft":"Aliñar á esquerda","alignRight":"Aliñar á dereita","alignCenter":"Aliñar ao centro","alignTop":"Arriba","alignMiddle":"Centro","alignBottom":"Abaixo","alignNone":"Ningún","invalidValue":"Valor incorrecto.","invalidHeight":"O alto debe ser un número.","invalidWidth":"O largo debe ser un número.","invalidLength":"O valor especificado para o campo «%1» debe ser un número positivo con ou sen unha unidade de medida correcta (%2).","invalidCssLength":"O valor especificado para o campo «%1» debe ser un número positivo con ou sen unha unidade de medida CSS correcta (px, %, in, cm, mm, em, ex, pt, ou pc).","invalidHtmlLength":"O valor especificado para o campo «%1» debe ser un número positivo con ou sen unha unidade de medida HTML correcta (px ou %).","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 cunha unidade CSS correcta (px, %, in, cm, mm, em, ex, pt, ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, non dispoñíbel</span>","keyboard":{"8":"Ir atrás","13":"Intro","16":"Maiús","17":"Ctrl","18":"Alt","32":"Espazo","35":"Fin","36":"Inicio","46":"Supr","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Orde"},"keyboardShortcut":"Atallo de teclado","optionDefault":"Predeterminado"}};
\ No newline at end of file
+CKEDITOR.lang['gl']={"widget":{"move":"Prema e arrastre para mover","label":"Trebello %1"},"undo":{"redo":"Refacer","undo":"Desfacer"},"toolbar":{"toolbarCollapse":"Contraer a barra de ferramentas","toolbarExpand":"Expandir a barra de ferramentas","toolbarGroups":{"document":"Documento","clipboard":"Portapapeis/desfacer","editing":"Edición","forms":"Formularios","basicstyles":"Estilos básicos","paragraph":"Paragrafo","links":"Ligazóns","insert":"Inserir","styles":"Estilos","colors":"Cores","tools":"Ferramentas"},"toolbars":"Barras de ferramentas do editor"},"table":{"border":"Tamaño do bordo","caption":"Título","cell":{"menu":"Cela","insertBefore":"Inserir a cela á esquerda","insertAfter":"Inserir a cela á dereita","deleteCell":"Eliminar celas","merge":"Combinar celas","mergeRight":"Combinar á dereita","mergeDown":"Combinar cara abaixo","splitHorizontal":"Dividir a cela en horizontal","splitVertical":"Dividir a cela en vertical","title":"Propiedades da cela","cellType":"Tipo de cela","rowSpan":"Expandir filas","colSpan":"Expandir columnas","wordWrap":"Axustar ao contido","hAlign":"Aliñación horizontal","vAlign":"Aliñación vertical","alignBaseline":"Liña de base","bgColor":"Cor do fondo","borderColor":"Cor do bordo","data":"Datos","header":"Cabeceira","yes":"Si","no":"Non","invalidWidth":"O largo da cela debe ser un número.","invalidHeight":"O alto da cela debe ser un número.","invalidRowSpan":"A expansión de filas debe ser un número enteiro.","invalidColSpan":"A expansión de columnas debe ser un número enteiro.","chooseColor":"Escoller"},"cellPad":"Marxe interior da cela","cellSpace":"Marxe entre celas","column":{"menu":"Columna","insertBefore":"Inserir a columna á esquerda","insertAfter":"Inserir a columna á dereita","deleteColumn":"Borrar Columnas"},"columns":"Columnas","deleteTable":"Borrar Táboa","headers":"Cabeceiras","headersBoth":"Ambas","headersColumn":"Primeira columna","headersNone":"Ningún","headersRow":"Primeira fila","heightUnit":"unidade do alto","invalidBorder":"O tamaño do bordo debe ser un número.","invalidCellPadding":"A marxe interior debe ser un número positivo.","invalidCellSpacing":"A marxe entre celas debe ser un número positivo.","invalidCols":"O número de columnas debe ser un número maior que 0.","invalidHeight":"O alto da táboa debe ser un número.","invalidRows":"O número de filas debe ser un número maior que 0","invalidWidth":"O largo da táboa debe ser un número.","menu":"Propiedades da táboa","row":{"menu":"Fila","insertBefore":"Inserir a fila por riba","insertAfter":"Inserir a fila por baixo","deleteRow":"Eliminar filas"},"rows":"Filas","summary":"Resumo","title":"Propiedades da táboa","toolbar":"Taboa","widthPc":"porcentaxe","widthPx":"píxeles","widthUnit":"unidade do largo"},"stylescombo":{"label":"Estilos","panelTitle":"Estilos de formatando","panelTitle1":"Estilos de bloque","panelTitle2":"Estilos de liña","panelTitle3":"Estilos de obxecto"},"specialchar":{"options":"Opcións de caracteres especiais","title":"Seleccione un carácter especial","toolbar":"Inserir un carácter especial"},"sourcedialog":{"toolbar":"Orixe","title":"Orixe"},"sourcearea":{"toolbar":"Orixe"},"showblocks":{"toolbar":"Amosar os bloques"},"removeformat":{"toolbar":"Retirar o formato"},"pastetext":{"button":"Pegar como texto simple","pasteNotification":"Prema %1 para pegar. O seu navegador non admite pegar co botón da barra de ferramentas ou coa opción do menú contextual.","title":"Pegar como texto simple"},"pastefromword":{"confirmCleanup":"O texto que quere pegar semella ser copiado desde o Word. Quere depuralo antes de pegalo?","error":"Non foi posíbel depurar os datos pegados por mor dun erro interno","title":"Pegar desde Word","toolbar":"Pegar desde Word"},"notification":{"closed":"Notificación pechada."},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"magicline":{"title":"Inserir aquí o parágrafo"},"list":{"bulletedlist":"Inserir/retirar lista viñeteada","numberedlist":"Inserir/retirar lista numerada"},"language":{"button":"Estabelezer o idioma","remove":"Retirar o idioma"},"indent":{"indent":"Aumentar a sangría","outdent":"Reducir a sangría"},"image2":{"alt":"Texto alternativo","btnUpload":"Enviar ao servidor","captioned":"Imaxe con lenda","captionPlaceholder":"Lenda","infoTab":"Información da imaxe","lockRatio":"Proporcional","menu":"Propiedades da imaxe","pathName":"Imaxe","pathNameCaption":"lenda","resetSize":"Tamaño orixinal","resizer":"Prema e arrastre para axustar o tamaño","title":"Propiedades da imaxe","uploadTab":"Cargar","urlMissing":"Non se atopa o URL da imaxe.","altMissing":"Non foi posíbel atopar o texto alternativo."},"horizontalrule":{"toolbar":"Inserir unha liña horizontal"},"format":{"label":"Formato","panelTitle":"Formato do parágrafo","tag_address":"Enderezo","tag_div":"Normal  (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":"Formatado"},"filetools":{"loadError":"Produciuse un erro durante a lectura do ficheiro.","networkError":"Produciuse un erro na rede durante o envío do ficheiro.","httpError404":"Produciuse un erro HTTP durante o envío do ficheiro (404: Ficheiro non atopado).","httpError403":"Produciuse un erro HTTP durante o envío do ficheiro (403: Acceso denegado).","httpError":"Produciuse un erro HTTP durante o envío do ficheiro (erro de estado: %1).","noUrlError":"Non foi definido o URL para o envío.","responseError":"Resposta incorrecta do servidor."},"elementspath":{"eleLabel":"Ruta dos elementos","eleTitle":"Elemento %1"},"contextmenu":{"options":"Opcións do menú contextual"},"clipboard":{"copy":"Copiar","copyError":"Os axustes de seguranza do seu navegador non permiten que o editor realice automaticamente as tarefas de copia. Use o teclado para iso (Ctrl/Cmd+C).","cut":"Cortar","cutError":"Os axustes de seguranza do seu navegador non permiten que o editor realice automaticamente as tarefas de corte. Use o teclado para iso (Ctrl/Cmd+X).","paste":"Pegar","pasteNotification":"Prema %1 para pegar. O seu navegador non admite pegar co botón da barra de ferramentas ou coa opción do menú contextual.","pasteArea":"Zona de pegado","pasteMsg":"Pegue o contido dentro da área de abaixo e prema Aceptar.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Cita"},"basicstyles":{"bold":"Negra","italic":"Cursiva","strike":"Riscado","subscript":"Subíndice","superscript":"Superíndice","underline":"Subliñado"},"about":{"copy":"Copyright &copy; $1. Todos os dereitos reservados.","dlgTitle":"Sobre o CKEditor 4","moreInfo":"Para obter  información sobre a licenza, visite o noso sitio web:"},"editor":"Editor de texto mellorado","editorPanel":"Panel do editor de texto mellorado","common":{"editorHelp":"Prema ALT 0 para obter axuda","browseServer":"Examinar o servidor","url":"URL","protocol":"Protocolo","upload":"Enviar","uploadSubmit":"Enviar ao servidor","image":"Imaxe","form":"Formulario","checkbox":"Caixa de selección","radio":"Botón de opción","textField":"Campo de texto","textarea":"Área de texto","hiddenField":"Campo agochado","button":"Botón","select":"Campo de selección","imageButton":"Botón de imaxe","notSet":"<sen estabelecer>","id":"ID","name":"Nome","langDir":"Dirección de escritura do idioma","langDirLtr":"Esquerda a dereita (LTR)","langDirRtl":"Dereita a esquerda (RTL)","langCode":"Código do idioma","longDescr":"Descrición completa do URL","cssClass":"Clases da folla de estilos","advisoryTitle":"Título","cssStyle":"Estilo","ok":"Aceptar","cancel":"Cancelar","close":"Pechar","preview":"Vista previa","resize":"Redimensionar","generalTab":"Xeral","advancedTab":"Avanzado","validateNumberFailed":"Este valor non é un número.","confirmNewPage":"Calquera cambio que non gardara neste contido perderase.\r\nConfirma que quere cargar unha páxina nova?","confirmCancel":"Algunhas das opcións foron cambiadas.\r\nConfirma que quere pechar o diálogo?","options":"Opcións","target":"Destino","targetNew":"Nova xanela (_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":"Largo","height":"Alto","align":"Aliñamento","left":"Esquerda","right":"Dereita","center":"Centro","justify":"Xustificado","alignLeft":"Aliñar á esquerda","alignRight":"Aliñar á dereita","alignCenter":"Aliñar ao centro","alignTop":"Arriba","alignMiddle":"Centro","alignBottom":"Abaixo","alignNone":"Ningún","invalidValue":"Valor incorrecto.","invalidHeight":"O alto debe ser un número.","invalidWidth":"O largo debe ser un número.","invalidLength":"O valor especificado para o campo «%1» debe ser un número positivo con ou sen unha unidade de medida correcta (%2).","invalidCssLength":"O valor especificado para o campo «%1» debe ser un número positivo con ou sen unha unidade de medida CSS correcta (px, %, in, cm, mm, em, ex, pt, ou pc).","invalidHtmlLength":"O valor especificado para o campo «%1» debe ser un número positivo con ou sen unha unidade de medida HTML correcta (px ou %).","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 cunha unidade CSS correcta (px, %, in, cm, mm, em, ex, pt, ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, non dispoñíbel</span>","keyboard":{"8":"Ir atrás","13":"Intro","16":"Maiús","17":"Ctrl","18":"Alt","32":"Espazo","35":"Fin","36":"Inicio","46":"Supr","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Orde"},"keyboardShortcut":"Atallo de teclado","optionDefault":"Predeterminado"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/gu.js b/core/assets/vendor/ckeditor/lang/gu.js
index 443607561e88..d2d920c25b38 100644
--- a/core/assets/vendor/ckeditor/lang/gu.js
+++ b/core/assets/vendor/ckeditor/lang/gu.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['gu']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"રિડૂ; પછી હતી એવી સ્થિતિ પાછી લાવવી","undo":"રદ કરવું; પહેલાં હતી એવી સ્થિતિ પાછી લાવવી"},"toolbar":{"toolbarCollapse":"ટૂલબાર નાનું કરવું","toolbarExpand":"ટૂલબાર મોટું કરવું","toolbarGroups":{"document":"દસ્તાવેજ","clipboard":"ક્લિપબોર્ડ/અન","editing":"એડીટ કરવું","forms":"ફોર્મ","basicstyles":"બેસિક્ સ્ટાઇલ","paragraph":"ફકરો","links":"લીંક","insert":"ઉમેરવું","styles":"સ્ટાઇલ","colors":"રંગ","tools":"ટૂલ્સ"},"toolbars":"એડીટર ટૂલ બાર"},"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":"પહેલી  કટાર","heightUnit":"height unit","invalidBorder":"બોર્ડર એક આંકડો હોવો જોઈએ","invalidCellPadding":"સેલની અંદરની જગ્યા સુન્ય કરતા વધારે હોવી જોઈએ.","invalidCellSpacing":"સેલ વચ્ચેની જગ્યા સુન્ય કરતા વધારે હોવી જોઈએ.","invalidCols":"ઉભી કટાર, 0 કરતા વધારે હોવી જોઈએ.","invalidHeight":"ટેબલની ઊંચાઈ આંકડો હોવો જોઈએ.","invalidRows":"આડી કટાર, 0 કરતા વધારે હોવી જોઈએ.","invalidWidth":"ટેબલની પોહલાઈ આંકડો હોવો જોઈએ.","menu":"ટેબલ, કોઠાનું મથાળું","row":{"menu":"પંક્તિના ખાના","insertBefore":"પહેલાં પંક્તિ ઉમેરવી","insertAfter":"પછી પંક્તિ ઉમેરવી","deleteRow":"પંક્તિઓ ડિલીટ/કાઢી નાખવી"},"rows":"પંક્તિના ખાના","summary":"ટૂંકો એહેવાલ","title":"ટેબલ, કોઠાનું મથાળું","toolbar":"ટેબલ, કોઠો","widthPc":"પ્રતિશત","widthPx":"પિકસલ","widthUnit":"પોહાલાઈ એકમ"},"stylescombo":{"label":"શૈલી/રીત","panelTitle":"ફોર્મેટ ","panelTitle1":"બ્લોક ","panelTitle2":"ઈનલાઈન ","panelTitle3":"ઓબ્જેક્ટ પદ્ધતિ"},"specialchar":{"options":"સ્પેશિઅલ કરેક્ટરના વિકલ્પો","title":"સ્પેશિઅલ વિશિષ્ટ અક્ષર પસંદ કરો","toolbar":"વિશિષ્ટ અક્ષર ઇન્સર્ટ/દાખલ કરવું"},"sourcedialog":{"toolbar":"મૂળ કે પ્રાથમિક દસ્તાવેજ","title":"મૂળ કે પ્રાથમિક દસ્તાવેજ"},"sourcearea":{"toolbar":"મૂળ કે પ્રાથમિક દસ્તાવેજ"},"showblocks":{"toolbar":"બ્લૉક બતાવવું"},"removeformat":{"toolbar":"ફૉર્મટ કાઢવું"},"pastetext":{"button":"પેસ્ટ (ટેક્સ્ટ)","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"પેસ્ટ (ટેક્સ્ટ)"},"pastefromword":{"confirmCleanup":"તમે જે ટેક્ષ્ત્ કોપી કરી રહ્યા છો ટે વર્ડ ની છે. કોપી કરતા પેહલા સાફ કરવી છે?","error":"પેસ્ટ કરેલો ડેટા ઇન્ટરનલ એરર ના લીથે સાફ કરી શકાયો નથી.","title":"પેસ્ટ (વડૅ ટેક્સ્ટ)","toolbar":"પેસ્ટ (વડૅ ટેક્સ્ટ)"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"મોટું કરવું","minimize":"નાનું કરવું"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"બુલેટ સૂચિ","numberedlist":"સંખ્યાંકન સૂચિ"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"ઇન્ડેન્ટ, લીટીના આરંભમાં જગ્યા વધારવી","outdent":"ઇન્ડેન્ટ લીટીના આરંભમાં જગ્યા ઘટાડવી"},"image2":{"alt":"ઑલ્ટર્નટ ટેક્સ્ટ","btnUpload":"આ સર્વરને મોકલવું","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"ચિત્ર ની જાણકારી","lockRatio":"લૉક ગુણોત્તર","menu":"ચિત્રના ગુણ","pathName":"image","pathNameCaption":"caption","resetSize":"રીસેટ સાઇઝ","resizer":"Click and drag to resize","title":"ચિત્રના ગુણ","uploadTab":"અપલોડ","urlMissing":"ઈમેજની મૂળ URL છે નહી.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"સમસ્તરીય રેખા ઇન્સર્ટ/દાખલ કરવી"},"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":"ફૉર્મટેડ"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"એલીમેન્ટ્સ નો ","eleTitle":"એલીમેન્ટ %1"},"contextmenu":{"options":"કોન્તેક્ષ્ત્ મેનુના વિકલ્પો"},"clipboard":{"copy":"નકલ","copyError":"તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસ કોપી કરવાની પરવાનગી નથી આપતી.  (Ctrl/Cmd+C) का प्रयोग करें।","cut":"કાપવું","cutError":"તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસ કટ કરવાની પરવાનગી નથી આપતી. (Ctrl/Cmd+X) નો ઉપયોગ કરો.","paste":"પેસ્ટ","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"પેસ્ટ કરવાની જગ્યા","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"બ્લૉક-કોટ, અવતરણચિહ્નો"},"basicstyles":{"bold":"બોલ્ડ/સ્પષ્ટ","italic":"ઇટેલિક, ત્રાંસા","strike":"છેકી નાખવું","subscript":"એક ચિહ્નની નીચે કરેલું બીજું ચિહ્ન","superscript":"એક ચિહ્ન ઉપર કરેલું બીજું ચિહ્ન.","underline":"અન્ડર્લાઇન, નીચે લીટી"},"about":{"copy":"કોપીરાઈટ &copy; $1. ઓલ રાઈટ્સ ","dlgTitle":"CKEditor વિષે","moreInfo":"લાયસનસની માહિતી માટે અમારી વેબ સાઈટ"},"editor":"રીચ ટેક્ષ્ત્ એડીટર","editorPanel":"વધુ વિકલ્પ વાળુ એડિટર","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":"લાઇનદોરીમાં ગોઠવવું","left":"ડાબી બાજુ ગોઠવવું","right":"જમણી","center":"મધ્ય સેન્ટર","justify":"બ્લૉક, અંતરાય જસ્ટિફાઇ","alignLeft":"ડાબી બાજુએ/બાજુ તરફ","alignRight":"જમણી બાજુએ/બાજુ તરફ","alignCenter":"Align Center","alignTop":"ઉપર","alignMiddle":"વચ્ચે","alignBottom":"નીચે","alignNone":"કઇ નહી","invalidValue":"અનુચિત મૂલ્ય","invalidHeight":"ઉંચાઈ એક આંકડો હોવો જોઈએ.","invalidWidth":"પોહળ ઈ એક આંકડો હોવો જોઈએ.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Backspace કી","13":"Enter કી","16":"Shift કી","17":"Ctrl કી","18":"Alt કી","32":"Space કી","35":"End કી","36":"Home કી","46":"Delete કી","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command કી"},"keyboardShortcut":"કીબોર્ડ શૉર્ટકટ","optionDefault":"Default"}};
\ No newline at end of file
+CKEDITOR.lang['gu']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"રિડૂ; પછી હતી એવી સ્થિતિ પાછી લાવવી","undo":"રદ કરવું; પહેલાં હતી એવી સ્થિતિ પાછી લાવવી"},"toolbar":{"toolbarCollapse":"ટૂલબાર નાનું કરવું","toolbarExpand":"ટૂલબાર મોટું કરવું","toolbarGroups":{"document":"દસ્તાવેજ","clipboard":"ક્લિપબોર્ડ/અન","editing":"એડીટ કરવું","forms":"ફોર્મ","basicstyles":"બેસિક્ સ્ટાઇલ","paragraph":"ફકરો","links":"લીંક","insert":"ઉમેરવું","styles":"સ્ટાઇલ","colors":"રંગ","tools":"ટૂલ્સ"},"toolbars":"એડીટર ટૂલ બાર"},"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":"પહેલી  કટાર","heightUnit":"height unit","invalidBorder":"બોર્ડર એક આંકડો હોવો જોઈએ","invalidCellPadding":"સેલની અંદરની જગ્યા સુન્ય કરતા વધારે હોવી જોઈએ.","invalidCellSpacing":"સેલ વચ્ચેની જગ્યા સુન્ય કરતા વધારે હોવી જોઈએ.","invalidCols":"ઉભી કટાર, 0 કરતા વધારે હોવી જોઈએ.","invalidHeight":"ટેબલની ઊંચાઈ આંકડો હોવો જોઈએ.","invalidRows":"આડી કટાર, 0 કરતા વધારે હોવી જોઈએ.","invalidWidth":"ટેબલની પોહલાઈ આંકડો હોવો જોઈએ.","menu":"ટેબલ, કોઠાનું મથાળું","row":{"menu":"પંક્તિના ખાના","insertBefore":"પહેલાં પંક્તિ ઉમેરવી","insertAfter":"પછી પંક્તિ ઉમેરવી","deleteRow":"પંક્તિઓ ડિલીટ/કાઢી નાખવી"},"rows":"પંક્તિના ખાના","summary":"ટૂંકો એહેવાલ","title":"ટેબલ, કોઠાનું મથાળું","toolbar":"ટેબલ, કોઠો","widthPc":"પ્રતિશત","widthPx":"પિકસલ","widthUnit":"પોહાલાઈ એકમ"},"stylescombo":{"label":"શૈલી/રીત","panelTitle":"ફોર્મેટ ","panelTitle1":"બ્લોક ","panelTitle2":"ઈનલાઈન ","panelTitle3":"ઓબ્જેક્ટ પદ્ધતિ"},"specialchar":{"options":"સ્પેશિઅલ કરેક્ટરના વિકલ્પો","title":"સ્પેશિઅલ વિશિષ્ટ અક્ષર પસંદ કરો","toolbar":"વિશિષ્ટ અક્ષર ઇન્સર્ટ/દાખલ કરવું"},"sourcedialog":{"toolbar":"મૂળ કે પ્રાથમિક દસ્તાવેજ","title":"મૂળ કે પ્રાથમિક દસ્તાવેજ"},"sourcearea":{"toolbar":"મૂળ કે પ્રાથમિક દસ્તાવેજ"},"showblocks":{"toolbar":"બ્લૉક બતાવવું"},"removeformat":{"toolbar":"ફૉર્મટ કાઢવું"},"pastetext":{"button":"પેસ્ટ (ટેક્સ્ટ)","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"પેસ્ટ (ટેક્સ્ટ)"},"pastefromword":{"confirmCleanup":"તમે જે ટેક્ષ્ત્ કોપી કરી રહ્યા છો ટે વર્ડ ની છે. કોપી કરતા પેહલા સાફ કરવી છે?","error":"પેસ્ટ કરેલો ડેટા ઇન્ટરનલ એરર ના લીથે સાફ કરી શકાયો નથી.","title":"પેસ્ટ (વડૅ ટેક્સ્ટ)","toolbar":"પેસ્ટ (વડૅ ટેક્સ્ટ)"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"મોટું કરવું","minimize":"નાનું કરવું"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"બુલેટ સૂચિ","numberedlist":"સંખ્યાંકન સૂચિ"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"ઇન્ડેન્ટ, લીટીના આરંભમાં જગ્યા વધારવી","outdent":"ઇન્ડેન્ટ લીટીના આરંભમાં જગ્યા ઘટાડવી"},"image2":{"alt":"ઑલ્ટર્નટ ટેક્સ્ટ","btnUpload":"આ સર્વરને મોકલવું","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"ચિત્ર ની જાણકારી","lockRatio":"લૉક ગુણોત્તર","menu":"ચિત્રના ગુણ","pathName":"image","pathNameCaption":"caption","resetSize":"રીસેટ સાઇઝ","resizer":"Click and drag to resize","title":"ચિત્રના ગુણ","uploadTab":"અપલોડ","urlMissing":"ઈમેજની મૂળ URL છે નહી.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"સમસ્તરીય રેખા ઇન્સર્ટ/દાખલ કરવી"},"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":"ફૉર્મટેડ"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"એલીમેન્ટ્સ નો ","eleTitle":"એલીમેન્ટ %1"},"contextmenu":{"options":"કોન્તેક્ષ્ત્ મેનુના વિકલ્પો"},"clipboard":{"copy":"નકલ","copyError":"તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસ કોપી કરવાની પરવાનગી નથી આપતી.  (Ctrl/Cmd+C) का प्रयोग करें।","cut":"કાપવું","cutError":"તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસ કટ કરવાની પરવાનગી નથી આપતી. (Ctrl/Cmd+X) નો ઉપયોગ કરો.","paste":"પેસ્ટ","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"પેસ્ટ કરવાની જગ્યા","pasteMsg":"Paste your content inside the area below and press OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"બ્લૉક-કોટ, અવતરણચિહ્નો"},"basicstyles":{"bold":"બોલ્ડ/સ્પષ્ટ","italic":"ઇટેલિક, ત્રાંસા","strike":"છેકી નાખવું","subscript":"એક ચિહ્નની નીચે કરેલું બીજું ચિહ્ન","superscript":"એક ચિહ્ન ઉપર કરેલું બીજું ચિહ્ન.","underline":"અન્ડર્લાઇન, નીચે લીટી"},"about":{"copy":"કોપીરાઈટ &copy; $1. ઓલ રાઈટ્સ ","dlgTitle":"CKEditor વિષે","moreInfo":"લાયસનસની માહિતી માટે અમારી વેબ સાઈટ"},"editor":"રીચ ટેક્ષ્ત્ એડીટર","editorPanel":"વધુ વિકલ્પ વાળુ એડિટર","common":{"editorHelp":"મદદ માટ ALT 0 દબાવો","browseServer":"સર્વર બ્રાઉઝ કરો","url":"URL","protocol":"પ્રોટોકૉલ","upload":"અપલોડ","uploadSubmit":"આ સર્વરને મોકલવું","image":"ચિત્ર","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":"લાઇનદોરીમાં ગોઠવવું","left":"ડાબી બાજુ ગોઠવવું","right":"જમણી","center":"મધ્ય સેન્ટર","justify":"બ્લૉક, અંતરાય જસ્ટિફાઇ","alignLeft":"ડાબી બાજુએ/બાજુ તરફ","alignRight":"જમણી બાજુએ/બાજુ તરફ","alignCenter":"Align Center","alignTop":"ઉપર","alignMiddle":"વચ્ચે","alignBottom":"નીચે","alignNone":"કઇ નહી","invalidValue":"અનુચિત મૂલ્ય","invalidHeight":"ઉંચાઈ એક આંકડો હોવો જોઈએ.","invalidWidth":"પોહળ ઈ એક આંકડો હોવો જોઈએ.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Backspace કી","13":"Enter કી","16":"Shift કી","17":"Ctrl કી","18":"Alt કી","32":"Space કી","35":"End કી","36":"Home કી","46":"Delete કી","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command કી"},"keyboardShortcut":"કીબોર્ડ શૉર્ટકટ","optionDefault":"Default"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/he.js b/core/assets/vendor/ckeditor/lang/he.js
index 2420b56946cb..f7e6fedd71c5 100644
--- a/core/assets/vendor/ckeditor/lang/he.js
+++ b/core/assets/vendor/ckeditor/lang/he.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['he']={"widget":{"move":"לחץ וגרור להזזה","label":"%1 widget"},"undo":{"redo":"חזרה על צעד אחרון","undo":"ביטול צעד אחרון"},"toolbar":{"toolbarCollapse":"מזעור סרגל כלים","toolbarExpand":"הרחבת סרגל כלים","toolbarGroups":{"document":"מסמך","clipboard":"לוח הגזירים (Clipboard)/צעד אחרון","editing":"עריכה","forms":"טפסים","basicstyles":"עיצוב בסיסי","paragraph":"פסקה","links":"קישורים","insert":"הכנסה","styles":"עיצוב","colors":"צבעים","tools":"כלים"},"toolbars":"סרגלי כלים של העורך"},"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":"שורה ראשונה","heightUnit":"height unit","invalidBorder":"שדה גודל המסגרת חייב להיות מספר.","invalidCellPadding":"שדה ריפוד התאים חייב להיות מספר חיובי.","invalidCellSpacing":"שדה ריווח התאים חייב להיות מספר חיובי.","invalidCols":"שדה מספר העמודות חייב להיות מספר גדול מ 0.","invalidHeight":"שדה גובה הטבלה חייב להיות מספר.","invalidRows":"שדה מספר השורות חייב להיות מספר גדול מ 0.","invalidWidth":"שדה רוחב הטבלה חייב להיות מספר.","menu":"מאפייני טבלה","row":{"menu":"שורה","insertBefore":"הוספת שורה לפני","insertAfter":"הוספת שורה אחרי","deleteRow":"מחיקת שורות"},"rows":"שורות","summary":"תקציר","title":"מאפייני טבלה","toolbar":"טבלה","widthPc":"אחוז","widthPx":"פיקסלים","widthUnit":"יחידת רוחב"},"stylescombo":{"label":"סגנון","panelTitle":"סגנונות פורמט","panelTitle1":"סגנונות בלוק","panelTitle2":"סגנונות רצף","panelTitle3":"סגנונות אובייקט"},"specialchar":{"options":"אפשרויות תווים מיוחדים","title":"בחירת תו מיוחד","toolbar":"הוספת תו מיוחד"},"sourcedialog":{"toolbar":"מקור","title":"מקור"},"sourcearea":{"toolbar":"מקור"},"showblocks":{"toolbar":"הצגת בלוקים"},"removeformat":{"toolbar":"הסרת העיצוב"},"pastetext":{"button":"הדבקה כטקסט פשוט","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"הדבקה כטקסט פשוט"},"pastefromword":{"confirmCleanup":"נראה הטקסט שבכוונתך להדביק מקורו בקובץ וורד. האם ברצונך לנקות אותו טרם ההדבקה?","error":"לא ניתן היה לנקות את המידע בשל תקלה פנימית.","title":"הדבקה מ-Word","toolbar":"הדבקה מ-Word"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"הגדלה למקסימום","minimize":"הקטנה למינימום"},"magicline":{"title":"הכנס פסקה כאן"},"list":{"bulletedlist":"רשימת נקודות","numberedlist":"רשימה ממוספרת"},"language":{"button":"צור שפה","remove":"הסר שפה"},"indent":{"indent":"הגדלת הזחה","outdent":"הקטנת הזחה"},"image2":{"alt":"טקסט חלופי","btnUpload":"שליחה לשרת","captioned":"כותרת תמונה","captionPlaceholder":"כותרת","infoTab":"מידע על התמונה","lockRatio":"נעילת היחס","menu":"תכונות התמונה","pathName":"תמונה","pathNameCaption":"כותרת","resetSize":"איפוס הגודל","resizer":"לחץ וגרור לשינוי הגודל","title":"מאפייני התמונה","uploadTab":"העלאה","urlMissing":"כתובת התמונה חסרה.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"הוספת קו אופקי"},"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":"קוד"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"עץ האלמנטים","eleTitle":"%1 אלמנט"},"contextmenu":{"options":"אפשרויות תפריט ההקשר"},"clipboard":{"copy":"העתקה","copyError":"הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות העתקה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl/Cmd+C).","cut":"גזירה","cutError":"הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות גזירה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl/Cmd+X).","paste":"הדבקה","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"איזור הדבקה","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"בלוק ציטוט"},"basicstyles":{"bold":"מודגש","italic":"נטוי","strike":"כתיב מחוק","subscript":"כתיב תחתון","superscript":"כתיב עליון","underline":"קו תחתון"},"about":{"copy":"Copyright &copy; $1. כל הזכויות שמורות.","dlgTitle":"אודות CKEditor","moreInfo":"למידע נוסף בקרו באתרנו:"},"editor":"עורך טקסט עשיר","editorPanel":"Rich Text Editor panel","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":"יישור","left":"לשמאל","right":"לימין","center":"מרכז","justify":"יישור לשוליים","alignLeft":"יישור לשמאל","alignRight":"יישור לימין","alignCenter":"Align Center","alignTop":"למעלה","alignMiddle":"לאמצע","alignBottom":"לתחתית","alignNone":"None","invalidValue":"ערך לא חוקי.","invalidHeight":"הגובה חייב להיות מספר.","invalidWidth":"הרוחב חייב להיות מספר.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"הערך שצוין לשדה \"%1\" חייב להיות מספר חיובי עם או ללא יחידת מידה חוקית של CSS (px, %, in, cm, mm, em, ex, pt, או pc).","invalidHtmlLength":"הערך שצוין לשדה \"%1\" חייב להיות מספר חיובי עם או ללא יחידת מידה חוקית של HTML (px או %).","invalidInlineStyle":"הערך שצויין לשדה הסגנון חייב להכיל זוג ערכים אחד או יותר בפורמט \"שם : ערך\", מופרדים על ידי נקודה-פסיק.","cssLengthTooltip":"יש להכניס מספר המייצג פיקסלים או מספר עם יחידת גליונות סגנון תקינה (px, %, in, cm, mm, em, ex, pt, או pc).","unavailable":"%1<span class=\"cke_accessibility\">, לא זמין</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"מחק","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
+CKEDITOR.lang['he']={"widget":{"move":"לחץ וגרור להזזה","label":"%1 widget"},"undo":{"redo":"חזרה על צעד אחרון","undo":"ביטול צעד אחרון"},"toolbar":{"toolbarCollapse":"מזעור סרגל כלים","toolbarExpand":"הרחבת סרגל כלים","toolbarGroups":{"document":"מסמך","clipboard":"לוח הגזירים (Clipboard)/צעד אחרון","editing":"עריכה","forms":"טפסים","basicstyles":"עיצוב בסיסי","paragraph":"פסקה","links":"קישורים","insert":"הכנסה","styles":"עיצוב","colors":"צבעים","tools":"כלים"},"toolbars":"סרגלי כלים של העורך"},"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":"שורה ראשונה","heightUnit":"height unit","invalidBorder":"שדה גודל המסגרת חייב להיות מספר.","invalidCellPadding":"שדה ריפוד התאים חייב להיות מספר חיובי.","invalidCellSpacing":"שדה ריווח התאים חייב להיות מספר חיובי.","invalidCols":"שדה מספר העמודות חייב להיות מספר גדול מ 0.","invalidHeight":"שדה גובה הטבלה חייב להיות מספר.","invalidRows":"שדה מספר השורות חייב להיות מספר גדול מ 0.","invalidWidth":"שדה רוחב הטבלה חייב להיות מספר.","menu":"מאפייני טבלה","row":{"menu":"שורה","insertBefore":"הוספת שורה לפני","insertAfter":"הוספת שורה אחרי","deleteRow":"מחיקת שורות"},"rows":"שורות","summary":"תקציר","title":"מאפייני טבלה","toolbar":"טבלה","widthPc":"אחוז","widthPx":"פיקסלים","widthUnit":"יחידת רוחב"},"stylescombo":{"label":"סגנון","panelTitle":"סגנונות פורמט","panelTitle1":"סגנונות בלוק","panelTitle2":"סגנונות רצף","panelTitle3":"סגנונות אובייקט"},"specialchar":{"options":"אפשרויות תווים מיוחדים","title":"בחירת תו מיוחד","toolbar":"הוספת תו מיוחד"},"sourcedialog":{"toolbar":"מקור","title":"מקור"},"sourcearea":{"toolbar":"מקור"},"showblocks":{"toolbar":"הצגת בלוקים"},"removeformat":{"toolbar":"הסרת העיצוב"},"pastetext":{"button":"הדבקה כטקסט פשוט","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"הדבקה כטקסט פשוט"},"pastefromword":{"confirmCleanup":"נראה הטקסט שבכוונתך להדביק מקורו בקובץ וורד. האם ברצונך לנקות אותו טרם ההדבקה?","error":"לא ניתן היה לנקות את המידע בשל תקלה פנימית.","title":"הדבקה מ-Word","toolbar":"הדבקה מ-Word"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"הגדלה למקסימום","minimize":"הקטנה למינימום"},"magicline":{"title":"הכנס פסקה כאן"},"list":{"bulletedlist":"רשימת נקודות","numberedlist":"רשימה ממוספרת"},"language":{"button":"צור שפה","remove":"הסר שפה"},"indent":{"indent":"הגדלת הזחה","outdent":"הקטנת הזחה"},"image2":{"alt":"טקסט חלופי","btnUpload":"שליחה לשרת","captioned":"כותרת תמונה","captionPlaceholder":"כותרת","infoTab":"מידע על התמונה","lockRatio":"נעילת היחס","menu":"תכונות התמונה","pathName":"תמונה","pathNameCaption":"כותרת","resetSize":"איפוס הגודל","resizer":"לחץ וגרור לשינוי הגודל","title":"מאפייני התמונה","uploadTab":"העלאה","urlMissing":"כתובת התמונה חסרה.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"הוספת קו אופקי"},"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":"קוד"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"עץ האלמנטים","eleTitle":"%1 אלמנט"},"contextmenu":{"options":"אפשרויות תפריט ההקשר"},"clipboard":{"copy":"העתקה","copyError":"הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות העתקה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl/Cmd+C).","cut":"גזירה","cutError":"הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות גזירה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl/Cmd+X).","paste":"הדבקה","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"איזור הדבקה","pasteMsg":"Paste your content inside the area below and press OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"בלוק ציטוט"},"basicstyles":{"bold":"מודגש","italic":"נטוי","strike":"כתיב מחוק","subscript":"כתיב תחתון","superscript":"כתיב עליון","underline":"קו תחתון"},"about":{"copy":"Copyright &copy; $1. כל הזכויות שמורות.","dlgTitle":"אודות CKEditor","moreInfo":"למידע נוסף בקרו באתרנו:"},"editor":"עורך טקסט עשיר","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"לחץ אלט ALT + 0 לעזרה","browseServer":"סייר השרת","url":"כתובת (URL)","protocol":"פרוטוקול","upload":"העלאה","uploadSubmit":"שליחה לשרת","image":"תמונה","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":"יישור","left":"לשמאל","right":"לימין","center":"מרכז","justify":"יישור לשוליים","alignLeft":"יישור לשמאל","alignRight":"יישור לימין","alignCenter":"Align Center","alignTop":"למעלה","alignMiddle":"לאמצע","alignBottom":"לתחתית","alignNone":"None","invalidValue":"ערך לא חוקי.","invalidHeight":"הגובה חייב להיות מספר.","invalidWidth":"הרוחב חייב להיות מספר.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"הערך שצוין לשדה \"%1\" חייב להיות מספר חיובי עם או ללא יחידת מידה חוקית של CSS (px, %, in, cm, mm, em, ex, pt, או pc).","invalidHtmlLength":"הערך שצוין לשדה \"%1\" חייב להיות מספר חיובי עם או ללא יחידת מידה חוקית של HTML (px או %).","invalidInlineStyle":"הערך שצויין לשדה הסגנון חייב להכיל זוג ערכים אחד או יותר בפורמט \"שם : ערך\", מופרדים על ידי נקודה-פסיק.","cssLengthTooltip":"יש להכניס מספר המייצג פיקסלים או מספר עם יחידת גליונות סגנון תקינה (px, %, in, cm, mm, em, ex, pt, או pc).","unavailable":"%1<span class=\"cke_accessibility\">, לא זמין</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"מחק","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/hi.js b/core/assets/vendor/ckeditor/lang/hi.js
index 218eb6fabb36..a918cf04a797 100644
--- a/core/assets/vendor/ckeditor/lang/hi.js
+++ b/core/assets/vendor/ckeditor/lang/hi.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['hi']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"रीडू","undo":"अन्डू"},"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":"एडिटर टूलबार"},"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","heightUnit":"height unit","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"},"stylescombo":{"label":"स्टाइल","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"विशेष चरित्र विकल्प","title":"विशेष करॅक्टर चुनें","toolbar":"विशेष करॅक्टर इन्सर्ट करें"},"sourcedialog":{"toolbar":"सोर्स","title":"सोर्स"},"sourcearea":{"toolbar":"सोर्स"},"showblocks":{"toolbar":"ब्लॉक दिखायें"},"removeformat":{"toolbar":"फ़ॉर्मैट हटायें"},"pastetext":{"button":"पेस्ट (सादा टॅक्स्ट)","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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":"पेस्ट (वर्ड से)"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"मेक्सिमाईज़","minimize":"मिनिमाईज़"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"बुलॅट सूची","numberedlist":"अंकीय सूची"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"इन्डॅन्ट बढ़ायें","outdent":"इन्डॅन्ट कम करें"},"image2":{"alt":"वैकल्पिक टेक्स्ट","btnUpload":"इसे सर्वर को भेजें","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"तस्वीर की जानकारी","lockRatio":"लॉक अनुपात","menu":"तस्वीर प्रॉपर्टीज़","pathName":"image","pathNameCaption":"caption","resetSize":"रीसॅट साइज़","resizer":"Click and drag to resize","title":"तस्वीर प्रॉपर्टीज़","uploadTab":"अपलोड","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"हॉरिज़ॉन्टल रेखा इन्सर्ट करें"},"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":"फ़ॉर्मैटॅड"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"कॉपी","copyError":"आपके ब्राआउज़र की सुरक्षा सॅटिन्ग्स ने कॉपी करने की अनुमति नहीं प्रदान की है। (Ctrl/Cmd+C) का प्रयोग करें।","cut":"कट","cutError":"आपके ब्राउज़र की सुरक्षा सॅटिन्ग्स ने कट करने की अनुमति नहीं प्रदान की है। (Ctrl/Cmd+X) का प्रयोग करें।","paste":"पेस्ट","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"ब्लॉक-कोट"},"basicstyles":{"bold":"बोल्ड","italic":"इटैलिक","strike":"स्ट्राइक थ्रू","subscript":"अधोलेख","superscript":"अभिलेख","underline":"रेखांकण"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"editor":"रिच टेक्स्ट एडिटर","editorPanel":"Rich Text Editor panel","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":"You have changed some options. Are you sure you want to close the dialog window?","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":"ऍलाइन","left":"दायें","right":"दायें","center":"बीच में","justify":"ब्लॉक जस्टीफ़ाई","alignLeft":"बायीं तरफ","alignRight":"दायीं तरफ","alignCenter":"Align Center","alignTop":"ऊपर","alignMiddle":"मध्य","alignBottom":"नीचे","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
+CKEDITOR.lang['hi']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"रीडू","undo":"अन्डू"},"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":"एडिटर टूलबार"},"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","heightUnit":"height unit","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"},"stylescombo":{"label":"स्टाइल","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"विशेष चरित्र विकल्प","title":"विशेष करॅक्टर चुनें","toolbar":"विशेष करॅक्टर इन्सर्ट करें"},"sourcedialog":{"toolbar":"सोर्स","title":"सोर्स"},"sourcearea":{"toolbar":"सोर्स"},"showblocks":{"toolbar":"ब्लॉक दिखायें"},"removeformat":{"toolbar":"फ़ॉर्मैट हटायें"},"pastetext":{"button":"पेस्ट (सादा टॅक्स्ट)","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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":"पेस्ट (वर्ड से)"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"मेक्सिमाईज़","minimize":"मिनिमाईज़"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"बुलॅट सूची","numberedlist":"अंकीय सूची"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"इन्डॅन्ट बढ़ायें","outdent":"इन्डॅन्ट कम करें"},"image2":{"alt":"वैकल्पिक टेक्स्ट","btnUpload":"इसे सर्वर को भेजें","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"तस्वीर की जानकारी","lockRatio":"लॉक अनुपात","menu":"तस्वीर प्रॉपर्टीज़","pathName":"image","pathNameCaption":"caption","resetSize":"रीसॅट साइज़","resizer":"Click and drag to resize","title":"तस्वीर प्रॉपर्टीज़","uploadTab":"अपलोड","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"हॉरिज़ॉन्टल रेखा इन्सर्ट करें"},"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":"फ़ॉर्मैटॅड"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"कॉपी","copyError":"आपके ब्राआउज़र की सुरक्षा सॅटिन्ग्स ने कॉपी करने की अनुमति नहीं प्रदान की है। (Ctrl/Cmd+C) का प्रयोग करें।","cut":"कट","cutError":"आपके ब्राउज़र की सुरक्षा सॅटिन्ग्स ने कट करने की अनुमति नहीं प्रदान की है। (Ctrl/Cmd+X) का प्रयोग करें।","paste":"पेस्ट","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"ब्लॉक-कोट"},"basicstyles":{"bold":"बोल्ड","italic":"इटैलिक","strike":"स्ट्राइक थ्रू","subscript":"अधोलेख","superscript":"अभिलेख","underline":"रेखांकण"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"editor":"रिच टेक्स्ट एडिटर","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"मदद के लिये ALT 0 दबाए","browseServer":"सर्वर ब्राउज़ करें","url":"URL","protocol":"प्रोटोकॉल","upload":"अपलोड","uploadSubmit":"इसे सर्वर को भेजें","image":"तस्वीर","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":"You have changed some options. Are you sure you want to close the dialog window?","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":"ऍलाइन","left":"दायें","right":"दायें","center":"बीच में","justify":"ब्लॉक जस्टीफ़ाई","alignLeft":"बायीं तरफ","alignRight":"दायीं तरफ","alignCenter":"Align Center","alignTop":"ऊपर","alignMiddle":"मध्य","alignBottom":"नीचे","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/hr.js b/core/assets/vendor/ckeditor/lang/hr.js
index 3a92bc8166b8..cb835cee0f14 100644
--- a/core/assets/vendor/ckeditor/lang/hr.js
+++ b/core/assets/vendor/ckeditor/lang/hr.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['hr']={"widget":{"move":"Klikni i povuci za pomicanje","label":"%1 widget"},"undo":{"redo":"Ponovi","undo":"Poništi"},"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"},"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","heightUnit":"height unit","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"},"stylescombo":{"label":"Stil","panelTitle":"Stilovi formatiranja","panelTitle1":"Block stilovi","panelTitle2":"Inline stilovi","panelTitle3":"Object stilovi"},"specialchar":{"options":"Opcije specijalnih znakova","title":"Odaberite posebni karakter","toolbar":"Ubaci posebni znak"},"sourcedialog":{"toolbar":"Kôd","title":"Kôd"},"sourcearea":{"toolbar":"Kôd"},"showblocks":{"toolbar":"Prikaži blokove"},"removeformat":{"toolbar":"Ukloni formatiranje"},"pastetext":{"button":"Zalijepi kao čisti tekst","pasteNotification":"Vaš preglednik Vam ne dozvoljava lijepljenje običnog teksta na ovaj način. Za lijepljenje, pritisnite %1.","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"},"notification":{"closed":"Obavijest zatvorena."},"maximize":{"maximize":"Povećaj","minimize":"Smanji"},"magicline":{"title":"Ubaci paragraf ovdje"},"list":{"bulletedlist":"Obična lista","numberedlist":"Brojčana lista"},"language":{"button":"Namjesti jezik","remove":"Makni jezik"},"indent":{"indent":"Pomakni udesno","outdent":"Pomakni ulijevo"},"image2":{"alt":"Alternativni tekst","btnUpload":"Pošalji na server","captioned":"Titl slike","captionPlaceholder":"Titl","infoTab":"Info slike","lockRatio":"Zaključaj odnos","menu":"Svojstva slika","pathName":"slika","pathNameCaption":"titl","resetSize":"Obriši veličinu","resizer":"Odaberi i povuci za promjenu veličine","title":"Svojstva slika","uploadTab":"Pošalji","urlMissing":"Nedostaje URL slike.","altMissing":"Nedostaje alternativni tekst."},"horizontalrule":{"toolbar":"Ubaci vodoravnu liniju"},"format":{"label":"Format","panelTitle":"Format paragrafa","tag_address":"Adresa","tag_div":"Normalno (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":"Normalno","tag_pre":"Formatirano"},"filetools":{"loadError":"Greška prilikom čitanja datoteke.","networkError":"Mrežna greška prilikom slanja datoteke.","httpError404":"HTTP greška tijekom slanja datoteke (404: datoteka nije pronađena).","httpError403":"HTTP greška tijekom slanja datoteke  (403: Zabranjeno).","httpError":"HTTP greška tijekom slanja datoteke (greška status: %1).","noUrlError":"URL za slanje nije podešen.","responseError":"Neispravni odgovor servera."},"elementspath":{"eleLabel":"Putanje elemenata","eleTitle":"%1 element"},"contextmenu":{"options":"Opcije izbornika"},"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","pasteNotification":"Vaš preglednik Vam ne dozvoljava lijepljenje običnog teksta na ovaj način. Za lijepljenje, pritisnite %1.","pasteArea":"Okvir za lijepljenje","pasteMsg":"Zalijepite vaš sadržaj u okvir ispod i pritisnite OK."},"blockquote":{"toolbar":"Citat"},"basicstyles":{"bold":"Podebljano","italic":"Ukošeno","strike":"Precrtano","subscript":"Subscript","superscript":"Superscript","underline":"Potcrtano"},"about":{"copy":"Autorsko pravo &copy; $1. Sva prava pridržana.","dlgTitle":"O CKEditoru 4","moreInfo":"Za informacije o licencama posjetite našu web stranicu:"},"editor":"Bogati uređivač teksta, %1","editorPanel":"Ploča Bogatog Uređivača 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":"Forma","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":"Klase stilova","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":"Poravnanje","left":"Lijevo","right":"Desno","center":"Središnje","justify":"Blok poravnanje","alignLeft":"Lijevo poravnanje","alignRight":"Desno poravnanje","alignCenter":"Align Center","alignTop":"Vrh","alignMiddle":"Sredina","alignBottom":"Dolje","alignNone":"Bez poravnanja","invalidValue":"Neispravna vrijednost.","invalidHeight":"Visina mora biti broj.","invalidWidth":"Širina mora biti broj.","invalidLength":"Naznačena vrijednost polja \"%1\" mora biti pozitivni broj sa ili bez važeće mjerne jedinice (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Prečica na tipkovnici","optionDefault":"Zadano"}};
\ No newline at end of file
+CKEDITOR.lang['hr']={"widget":{"move":"Klikni i povuci za pomicanje","label":"%1 widget"},"undo":{"redo":"Ponovi","undo":"Poništi"},"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"},"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","heightUnit":"height unit","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"},"stylescombo":{"label":"Stil","panelTitle":"Stilovi formatiranja","panelTitle1":"Block stilovi","panelTitle2":"Inline stilovi","panelTitle3":"Object stilovi"},"specialchar":{"options":"Opcije specijalnih znakova","title":"Odaberite posebni karakter","toolbar":"Ubaci posebni znak"},"sourcedialog":{"toolbar":"Kôd","title":"Kôd"},"sourcearea":{"toolbar":"Kôd"},"showblocks":{"toolbar":"Prikaži blokove"},"removeformat":{"toolbar":"Ukloni formatiranje"},"pastetext":{"button":"Zalijepi kao čisti tekst","pasteNotification":"Vaš preglednik Vam ne dozvoljava lijepljenje običnog teksta na ovaj način. Za lijepljenje, pritisnite %1.","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"},"notification":{"closed":"Obavijest zatvorena."},"maximize":{"maximize":"Povećaj","minimize":"Smanji"},"magicline":{"title":"Ubaci paragraf ovdje"},"list":{"bulletedlist":"Obična lista","numberedlist":"Brojčana lista"},"language":{"button":"Namjesti jezik","remove":"Makni jezik"},"indent":{"indent":"Pomakni udesno","outdent":"Pomakni ulijevo"},"image2":{"alt":"Alternativni tekst","btnUpload":"Pošalji na server","captioned":"Titl slike","captionPlaceholder":"Titl","infoTab":"Info slike","lockRatio":"Zaključaj odnos","menu":"Svojstva slika","pathName":"slika","pathNameCaption":"titl","resetSize":"Obriši veličinu","resizer":"Odaberi i povuci za promjenu veličine","title":"Svojstva slika","uploadTab":"Pošalji","urlMissing":"Nedostaje URL slike.","altMissing":"Nedostaje alternativni tekst."},"horizontalrule":{"toolbar":"Ubaci vodoravnu liniju"},"format":{"label":"Format","panelTitle":"Format paragrafa","tag_address":"Adresa","tag_div":"Normalno (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":"Normalno","tag_pre":"Formatirano"},"filetools":{"loadError":"Greška prilikom čitanja datoteke.","networkError":"Mrežna greška prilikom slanja datoteke.","httpError404":"HTTP greška tijekom slanja datoteke (404: datoteka nije pronađena).","httpError403":"HTTP greška tijekom slanja datoteke  (403: Zabranjeno).","httpError":"HTTP greška tijekom slanja datoteke (greška status: %1).","noUrlError":"URL za slanje nije podešen.","responseError":"Neispravni odgovor servera."},"elementspath":{"eleLabel":"Putanje elemenata","eleTitle":"%1 element"},"contextmenu":{"options":"Opcije izbornika"},"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","pasteNotification":"Vaš preglednik Vam ne dozvoljava lijepljenje običnog teksta na ovaj način. Za lijepljenje, pritisnite %1.","pasteArea":"Okvir za lijepljenje","pasteMsg":"Zalijepite vaš sadržaj u okvir ispod i pritisnite OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Citat"},"basicstyles":{"bold":"Podebljano","italic":"Ukošeno","strike":"Precrtano","subscript":"Subscript","superscript":"Superscript","underline":"Potcrtano"},"about":{"copy":"Autorsko pravo &copy; $1. Sva prava pridržana.","dlgTitle":"O CKEditoru 4","moreInfo":"Za informacije o licencama posjetite našu web stranicu:"},"editor":"Bogati uređivač teksta, %1","editorPanel":"Ploča Bogatog Uređivača 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","form":"Forma","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":"Klase stilova","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":"Poravnanje","left":"Lijevo","right":"Desno","center":"Središnje","justify":"Blok poravnanje","alignLeft":"Lijevo poravnanje","alignRight":"Desno poravnanje","alignCenter":"Align Center","alignTop":"Vrh","alignMiddle":"Sredina","alignBottom":"Dolje","alignNone":"Bez poravnanja","invalidValue":"Neispravna vrijednost.","invalidHeight":"Visina mora biti broj.","invalidWidth":"Širina mora biti broj.","invalidLength":"Naznačena vrijednost polja \"%1\" mora biti pozitivni broj sa ili bez važeće mjerne jedinice (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Prečica na tipkovnici","optionDefault":"Zadano"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/hu.js b/core/assets/vendor/ckeditor/lang/hu.js
index 05e7c68edc38..77c10d54f4c6 100644
--- a/core/assets/vendor/ckeditor/lang/hu.js
+++ b/core/assets/vendor/ckeditor/lang/hu.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['hu']={"widget":{"move":"Kattints és húzd a mozgatáshoz","label":"%1 modul"},"undo":{"redo":"Ismétlés","undo":"Visszavonás"},"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"},"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","heightUnit":"Magasság egység","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"},"stylescombo":{"label":"Stílus","panelTitle":"Formázási stílusok","panelTitle1":"Blokk stílusok","panelTitle2":"Inline stílusok","panelTitle3":"Objektum stílusok"},"specialchar":{"options":"Speciális karakter opciók","title":"Speciális karakter választása","toolbar":"Speciális karakter beillesztése"},"sourcedialog":{"toolbar":"Forráskód","title":"Forráskód"},"sourcearea":{"toolbar":"Forráskód"},"showblocks":{"toolbar":"Blokkok megjelenítése"},"removeformat":{"toolbar":"Formázás eltávolítása"},"pastetext":{"button":"Beillesztés formázatlan szövegként","pasteNotification":"Nyomja meg a %1 gombot a beillesztéshez. A böngésző nem támogatja a beillesztést az eszköztár gombbal vagy a menüből.","title":"Beillesztés formázatlan szövegként"},"pastefromword":{"confirmCleanup":"Úgy tűnik a beillesztett szöveget Word-ből másolta á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"},"notification":{"closed":"Értesítés bezárva."},"maximize":{"maximize":"Teljes méret","minimize":"Kis méret"},"magicline":{"title":"Szúrja be a bekezdést ide"},"list":{"bulletedlist":"Felsorolás","numberedlist":"Számozás"},"language":{"button":"Nyelv beállítása","remove":"Nyelv eltávolítása"},"indent":{"indent":"Behúzás növelése","outdent":"Behúzás csökkentése"},"image2":{"alt":"Alternatív szöveg","btnUpload":"Küldés a szerverre","captioned":"Feliratozott kép","captionPlaceholder":"Képfelirat","infoTab":"Alaptulajdonságok","lockRatio":"Arány megtartása","menu":"Kép tulajdonságai","pathName":"kép","pathNameCaption":"felirat","resetSize":"Eredeti méret","resizer":"Kattintson és húzza az átméretezéshez","title":"Kép tulajdonságai","uploadTab":"Feltöltés","urlMissing":"Hiányzik a kép URL-je","altMissing":"Az alternatív szöveg hiányzik."},"horizontalrule":{"toolbar":"Elválasztóvonal beillesztése"},"format":{"label":"Formátum","panelTitle":"Bekezdés 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"},"filetools":{"loadError":"Hiba történt a fájl olvasása közben.","networkError":"Hálózati hiba történt a fájl feltöltése közben.","httpError404":"HTTP hiba történt a fájl feltöltése alatt (404: A fájl nem található).","httpError403":"HTTP hiba történt a fájl feltöltése alatt (403: Tiltott).","httpError":"HTTP hiba történt a fájl feltöltése alatt (hiba státusz: %1).","noUrlError":"Feltöltési URL nincs megadva.","responseError":"Helytelen szerver válasz."},"elementspath":{"eleLabel":"Elem utak","eleTitle":"%1 elem"},"contextmenu":{"options":"Helyi menü opciók"},"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","pasteNotification":"Nyomja meg a %1 gombot a beillesztéshez. A böngésző nem támogatja a beillesztést az eszköztárról vagy a menüből.","pasteArea":"Beillesztési terület","pasteMsg":"Illessze be a tartalmat az alábbi mezőbe, és nyomja meg az OK-t."},"blockquote":{"toolbar":"Idézet blokk"},"basicstyles":{"bold":"Félkövér","italic":"Dőlt","strike":"Áthúzott","subscript":"Alsó index","superscript":"Felső index","underline":"Aláhúzott"},"about":{"copy":"Copyright &copy; $1. Minden jog fenntartva.","dlgTitle":"A CKEditor 4-ről","moreInfo":"Licenszelési információkért kérjük látogassa meg weboldalunkat:"},"editor":"HTML szerkesztő","editorPanel":"HTML szerkesztő panel","common":{"editorHelp":"Segítségért nyomjon ALT 0-t","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":"Rejtett mező","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":"CSS osztályok","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":"Speciális","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":"Pár beállítást megváltoztatott. Biztosan be szeretné zárni az ablakot?","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","left":"Bal","right":"Jobbra","center":"Középre","justify":"Sorkizárt","alignLeft":"Balra","alignRight":"Jobbra","alignCenter":"Középre igazítás","alignTop":"Tetejére","alignMiddle":"Középre","alignBottom":"Aljára","alignNone":"Semmi","invalidValue":"Érvénytelen érték.","invalidHeight":"A magasság mezőbe csak számokat írhat.","invalidWidth":"A szélesség mezőbe csak számokat írhat.","invalidLength":"A megadott értéknek a \"%1\" mezőben pozitív számnak kell lennie, egy érvényes mértékegységgel vagy anélkül (%2).","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":"Az inline stílusnak megadott értéknek tartalmaznia kell egy vagy több rekordot a \"name : value\" formátumban, pontosvesszővel elválasztva.","cssLengthTooltip":"Adjon meg egy számot értéknek pixelekben vagy egy számot érvényes CSS mértékegységben (px, %, in, cm, mm, em, ex, pt, vagy pc).","unavailable":"%1<span class=\"cke_accessibility\">, nem elérhető</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Gyorsbillentyű","optionDefault":"Alapértelmezett"}};
\ No newline at end of file
+CKEDITOR.lang['hu']={"widget":{"move":"Kattints és húzd a mozgatáshoz","label":"%1 modul"},"undo":{"redo":"Ismétlés","undo":"Visszavonás"},"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"},"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","heightUnit":"Magasság egység","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"},"stylescombo":{"label":"Stílus","panelTitle":"Formázási stílusok","panelTitle1":"Blokk stílusok","panelTitle2":"Inline stílusok","panelTitle3":"Objektum stílusok"},"specialchar":{"options":"Speciális karakter opciók","title":"Speciális karakter választása","toolbar":"Speciális karakter beillesztése"},"sourcedialog":{"toolbar":"Forráskód","title":"Forráskód"},"sourcearea":{"toolbar":"Forráskód"},"showblocks":{"toolbar":"Blokkok megjelenítése"},"removeformat":{"toolbar":"Formázás eltávolítása"},"pastetext":{"button":"Beillesztés formázatlan szövegként","pasteNotification":"Nyomja meg a %1 gombot a beillesztéshez. A böngésző nem támogatja a beillesztést az eszköztár gombbal vagy a menüből.","title":"Beillesztés formázatlan szövegként"},"pastefromword":{"confirmCleanup":"Úgy tűnik a beillesztett szöveget Word-ből másolta á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"},"notification":{"closed":"Értesítés bezárva."},"maximize":{"maximize":"Teljes méret","minimize":"Kis méret"},"magicline":{"title":"Szúrja be a bekezdést ide"},"list":{"bulletedlist":"Felsorolás","numberedlist":"Számozás"},"language":{"button":"Nyelv beállítása","remove":"Nyelv eltávolítása"},"indent":{"indent":"Behúzás növelése","outdent":"Behúzás csökkentése"},"image2":{"alt":"Alternatív szöveg","btnUpload":"Küldés a szerverre","captioned":"Feliratozott kép","captionPlaceholder":"Képfelirat","infoTab":"Alaptulajdonságok","lockRatio":"Arány megtartása","menu":"Kép tulajdonságai","pathName":"kép","pathNameCaption":"felirat","resetSize":"Eredeti méret","resizer":"Kattintson és húzza az átméretezéshez","title":"Kép tulajdonságai","uploadTab":"Feltöltés","urlMissing":"Hiányzik a kép URL-je","altMissing":"Az alternatív szöveg hiányzik."},"horizontalrule":{"toolbar":"Elválasztóvonal beillesztése"},"format":{"label":"Formátum","panelTitle":"Bekezdés 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"},"filetools":{"loadError":"Hiba történt a fájl olvasása közben.","networkError":"Hálózati hiba történt a fájl feltöltése közben.","httpError404":"HTTP hiba történt a fájl feltöltése alatt (404: A fájl nem található).","httpError403":"HTTP hiba történt a fájl feltöltése alatt (403: Tiltott).","httpError":"HTTP hiba történt a fájl feltöltése alatt (hiba státusz: %1).","noUrlError":"Feltöltési URL nincs megadva.","responseError":"Helytelen szerver válasz."},"elementspath":{"eleLabel":"Elem utak","eleTitle":"%1 elem"},"contextmenu":{"options":"Helyi menü opciók"},"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","pasteNotification":"Nyomja meg a %1 gombot a beillesztéshez. A böngésző nem támogatja a beillesztést az eszköztárról vagy a menüből.","pasteArea":"Beillesztési terület","pasteMsg":"Illessze be a tartalmat az alábbi mezőbe, és nyomja meg az OK-t.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Idézet blokk"},"basicstyles":{"bold":"Félkövér","italic":"Dőlt","strike":"Áthúzott","subscript":"Alsó index","superscript":"Felső index","underline":"Aláhúzott"},"about":{"copy":"Copyright &copy; $1. Minden jog fenntartva.","dlgTitle":"A CKEditor 4-ről","moreInfo":"Licenszelési információkért kérjük látogassa meg weboldalunkat:"},"editor":"HTML szerkesztő","editorPanel":"HTML szerkesztő panel","common":{"editorHelp":"Segítségért nyomjon ALT 0-t","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","form":"Űrlap","checkbox":"Jelölőnégyzet","radio":"Választógomb","textField":"Szövegmező","textarea":"Szövegterület","hiddenField":"Rejtett mező","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":"CSS osztályok","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":"Speciális","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":"Pár beállítást megváltoztatott. Biztosan be szeretné zárni az ablakot?","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","left":"Bal","right":"Jobbra","center":"Középre","justify":"Sorkizárt","alignLeft":"Balra","alignRight":"Jobbra","alignCenter":"Középre igazítás","alignTop":"Tetejére","alignMiddle":"Középre","alignBottom":"Aljára","alignNone":"Semmi","invalidValue":"Érvénytelen érték.","invalidHeight":"A magasság mezőbe csak számokat írhat.","invalidWidth":"A szélesség mezőbe csak számokat írhat.","invalidLength":"A megadott értéknek a \"%1\" mezőben pozitív számnak kell lennie, egy érvényes mértékegységgel vagy anélkül (%2).","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":"Az inline stílusnak megadott értéknek tartalmaznia kell egy vagy több rekordot a \"name : value\" formátumban, pontosvesszővel elválasztva.","cssLengthTooltip":"Adjon meg egy számot értéknek pixelekben vagy egy számot érvényes CSS mértékegységben (px, %, in, cm, mm, em, ex, pt, vagy pc).","unavailable":"%1<span class=\"cke_accessibility\">, nem elérhető</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Gyorsbillentyű","optionDefault":"Alapértelmezett"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/id.js b/core/assets/vendor/ckeditor/lang/id.js
index 216b5d23e1c0..96322291284b 100644
--- a/core/assets/vendor/ckeditor/lang/id.js
+++ b/core/assets/vendor/ckeditor/lang/id.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['id']={"widget":{"move":"Tekan dan geser untuk memindahkan","label":"%1 widget"},"undo":{"redo":"Kembali lakukan","undo":"Batalkan perlakuan"},"toolbar":{"toolbarCollapse":"Ciutkan Toolbar","toolbarExpand":"Bentangkan Toolbar","toolbarGroups":{"document":"Dokumen","clipboard":"Papan klip / Kembalikan perlakuan","editing":"Sunting","forms":"Formulir","basicstyles":"Gaya Dasar","paragraph":"Paragraf","links":"Tautan","insert":"Sisip","styles":"Gaya","colors":"Warna","tools":"Alat"},"toolbars":"Toolbar Penyunting"},"table":{"border":"Ukuran batas","caption":"Judul halaman","cell":{"menu":"Sel","insertBefore":"Sisip Sel Sebelum","insertAfter":"Sisip Sel Setelah","deleteCell":"Hapus Sel","merge":"Gabungkan Sel","mergeRight":"Gabungkan ke Kanan","mergeDown":"Gabungkan ke Bawah","splitHorizontal":"Pisahkan Sel Secara Horisontal","splitVertical":"Pisahkan Sel Secara Vertikal","title":"Properti Sel","cellType":"Tipe Sel","rowSpan":"Rentang antar baris","colSpan":"Rentang antar kolom","wordWrap":"Word Wrap","hAlign":"Jajaran Horisontal","vAlign":"Jajaran Vertikal","alignBaseline":"Dasar","bgColor":"Warna Latar Belakang","borderColor":"Warna Batasan","data":"Data","header":"Header","yes":"Ya","no":"Tidak","invalidWidth":"Lebar sel harus sebuah angka.","invalidHeight":"Tinggi sel harus sebuah angka","invalidRowSpan":"Rentang antar baris harus angka seluruhnya.","invalidColSpan":"Rentang antar kolom harus angka seluruhnya","chooseColor":"Pilih"},"cellPad":"Sel spasi dalam","cellSpace":"Spasi antar sel","column":{"menu":"Kolom","insertBefore":"Sisip Kolom Sebelum","insertAfter":"Sisip Kolom Sesudah","deleteColumn":"Hapus Kolom"},"columns":"Kolom","deleteTable":"Hapus Tabel","headers":"Headers","headersBoth":"Keduanya","headersColumn":"Kolom pertama","headersNone":"Tidak ada","headersRow":"Baris Pertama","heightUnit":"height unit","invalidBorder":"Ukuran batasan harus sebuah angka","invalidCellPadding":"'Spasi dalam' sel harus angka positif.","invalidCellSpacing":"Spasi antar sel harus angka positif.","invalidCols":"Jumlah kolom harus sebuah angka lebih besar dari 0","invalidHeight":"Tinggi tabel harus sebuah angka.","invalidRows":"Jumlah barus harus sebuah angka dan lebih besar dari 0.","invalidWidth":"Lebar tabel harus sebuah angka.","menu":"Properti Tabel","row":{"menu":"Baris","insertBefore":"Sisip Baris Sebelum","insertAfter":"Sisip Baris Sesudah","deleteRow":"Hapus Baris"},"rows":"Baris","summary":"Intisari","title":"Properti Tabel","toolbar":"Tabe","widthPc":"persen","widthPx":"piksel","widthUnit":"lebar satuan"},"stylescombo":{"label":"Gaya","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Opsi spesial karakter","title":"Pilih spesial karakter","toolbar":"Sisipkan spesial karakter"},"sourcedialog":{"toolbar":"Sumber","title":"Sumber"},"sourcearea":{"toolbar":"Sumber"},"showblocks":{"toolbar":"Perlihatkan Blok"},"removeformat":{"toolbar":"Hapus Format"},"pastetext":{"button":"Tempel sebagai teks polos","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Tempel sebagai Teks Polos"},"pastefromword":{"confirmCleanup":"Teks yang ingin anda tempel sepertinya di salin dari Word. Apakah anda mau membersihkannya sebelum menempel?","error":"Tidak mungkin membersihkan data yang ditempel dikerenakan kesalahan internal","title":"Tempel dari Word","toolbar":"Tempel dari Word"},"notification":{"closed":"Pemberitahuan ditutup"},"maximize":{"maximize":"Memperbesar","minimize":"Memperkecil"},"magicline":{"title":"Masukkan paragraf disini"},"list":{"bulletedlist":"Sisip/Hapus Daftar Bullet","numberedlist":"Sisip/Hapus Daftar Bernomor"},"language":{"button":"Atur Bahasa","remove":"Hapus Bahasa"},"indent":{"indent":"Tingkatkan Lekuk","outdent":"Kurangi Lekuk"},"image2":{"alt":"Teks alternatif","btnUpload":"Kirim ke Server","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Info Gambar","lockRatio":"Lock Ratio","menu":"Image Properties","pathName":"image","pathNameCaption":"caption","resetSize":"Atur Ulang Ukuran","resizer":"Click and drag to resize","title":"Image Properties","uploadTab":"Unggah","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Sisip Garis Horisontal"},"format":{"label":"Bentuk","panelTitle":"Bentuk Paragraf","tag_address":"Alamat","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":"Membentuk"},"filetools":{"loadError":"Error terjadi ketika berkas dibaca","networkError":"Jaringan error terjadi ketika mengunggah berkas","httpError404":"HTTP error terjadi ketika mengunggah berkas (404: Berkas tidak ditemukan)","httpError403":"HTTP error terjadi ketika mengunggah berkas (403: Gangguan)","httpError":"HTTP error terjadi ketika mengunggah berkas (status error: %1)","noUrlError":"Unggahan URL tidak terdefinisi","responseError":"Respon server tidak sesuai"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Opsi Konteks Pilihan"},"clipboard":{"copy":"Salin","copyError":"Pengaturan keamanan peramban anda tidak mengizinkan editor untuk mengeksekusi operasi menyalin secara otomatis. Mohon gunakan papan tuts (Ctrl/Cmd+C)","cut":"Potong","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":"Tempel","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Area Tempel","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Kutipan Blok"},"basicstyles":{"bold":"Huruf Tebal","italic":"Huruf Miring","strike":"Strikethrough","subscript":"Subscript","superscript":"Superscript","underline":"Garis Bawah"},"about":{"copy":"Hak cipta &copy; $1. All rights reserved.","dlgTitle":"Tentang CKEditor 4","moreInfo":"Untuk informasi lisensi silahkan kunjungi web site kami:"},"editor":"Rich Text Editor","editorPanel":"Panel Rich Text Editor","common":{"editorHelp":"Tekan ALT 0 untuk bantuan.","browseServer":"Jelajah Server","url":"URL","protocol":"Protokol","upload":"Unggah","uploadSubmit":"Kirim ke Server","image":"Gambar","flash":"Flash","form":"Formulir","checkbox":"Kotak Cek","radio":"Tombol Radio","textField":"Kolom Teks","textarea":"Area Teks","hiddenField":"Kolom Tersembunyi","button":"Tombol","select":"Kolom Seleksi","imageButton":"Tombol Gambar","notSet":"<tidak diatur>","id":"Id","name":"Nama","langDir":"Arah Bahasa","langDirLtr":"Kiri ke Kanan (LTR)","langDirRtl":"Kanan ke Kiri","langCode":"Kode Bahasa","longDescr":"Deskripsi URL Panjang","cssClass":"Kelas Stylesheet","advisoryTitle":"Penasehat Judul","cssStyle":"Gaya","ok":"OK","cancel":"Batal","close":"Tutup","preview":"Pratinjau","resize":"Ubah ukuran","generalTab":"Umum","advancedTab":"Lebih Lanjut","validateNumberFailed":"Nilai ini tidak sebuah angka","confirmNewPage":"Semua perubahan yang tidak disimpan di konten ini akan hilang. Apakah anda yakin ingin memuat halaman baru?","confirmCancel":"Beberapa opsi telah berubah. Apakah anda yakin ingin menutup dialog?","options":"Opsi","target":"Sasaran","targetNew":"Jendela Baru (_blank)","targetTop":"Laman Atas (_top)","targetSelf":"Jendela yang Sama (_self)","targetParent":"Jendela Induk (_parent)","langDirLTR":"Kiri ke Kanan (LTR)","langDirRTL":"Kanan ke Kiri (RTL)","styles":"Gaya","cssClasses":"Kelas Stylesheet","width":"Lebar","height":"Tinggi","align":"Penjajaran","left":"Kiri","right":"Kanan","center":"Tengah","justify":"Rata kiri-kanan","alignLeft":"Align Left","alignRight":"Align Right","alignCenter":"Align Center","alignTop":"Atas","alignMiddle":"Tengah","alignBottom":"Bawah","alignNone":"Tidak ada","invalidValue":"Nilai tidak sah.","invalidHeight":"Tinggi harus sebuah angka.","invalidWidth":"Lebar harus sebuah angka.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Nilai untuk \"%1\" harus sebuah angkat positif dengan atau tanpa pengukuran unit CSS yang sah (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Nilai yang dispesifikasian untuk kolom \"%1\" harus sebuah angka positif dengan atau tanpa sebuah unit pengukuran HTML (px atau %) yang valid.","invalidInlineStyle":"Nilai pada inline style merupakan pasangan nama dan nilai dengan format \"nama : nilai\", yang dipisahkan dengan titik dua.","cssLengthTooltip":"Masukkan sebuah angka untuk sebuah nilai dalam pixel atau sebuah angka dengan unit CSS yang sah (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, tidak tersedia</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Spasi","35":"End","36":"Home","46":"Hapus","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Pintasan Keyboard","optionDefault":"Default"}};
\ No newline at end of file
+CKEDITOR.lang['id']={"widget":{"move":"Tekan dan geser untuk memindahkan","label":"%1 widget"},"undo":{"redo":"Kembali lakukan","undo":"Batalkan perlakuan"},"toolbar":{"toolbarCollapse":"Ciutkan Toolbar","toolbarExpand":"Bentangkan Toolbar","toolbarGroups":{"document":"Dokumen","clipboard":"Papan klip / Kembalikan perlakuan","editing":"Sunting","forms":"Formulir","basicstyles":"Gaya Dasar","paragraph":"Paragraf","links":"Tautan","insert":"Sisip","styles":"Gaya","colors":"Warna","tools":"Alat"},"toolbars":"Toolbar Penyunting"},"table":{"border":"Ukuran batas","caption":"Judul halaman","cell":{"menu":"Sel","insertBefore":"Sisip Sel Sebelum","insertAfter":"Sisip Sel Setelah","deleteCell":"Hapus Sel","merge":"Gabungkan Sel","mergeRight":"Gabungkan ke Kanan","mergeDown":"Gabungkan ke Bawah","splitHorizontal":"Pisahkan Sel Secara Horisontal","splitVertical":"Pisahkan Sel Secara Vertikal","title":"Properti Sel","cellType":"Tipe Sel","rowSpan":"Rentang antar baris","colSpan":"Rentang antar kolom","wordWrap":"Word Wrap","hAlign":"Jajaran Horisontal","vAlign":"Jajaran Vertikal","alignBaseline":"Dasar","bgColor":"Warna Latar Belakang","borderColor":"Warna Batasan","data":"Data","header":"Header","yes":"Ya","no":"Tidak","invalidWidth":"Lebar sel harus sebuah angka.","invalidHeight":"Tinggi sel harus sebuah angka","invalidRowSpan":"Rentang antar baris harus angka seluruhnya.","invalidColSpan":"Rentang antar kolom harus angka seluruhnya","chooseColor":"Pilih"},"cellPad":"Sel spasi dalam","cellSpace":"Spasi antar sel","column":{"menu":"Kolom","insertBefore":"Sisip Kolom Sebelum","insertAfter":"Sisip Kolom Sesudah","deleteColumn":"Hapus Kolom"},"columns":"Kolom","deleteTable":"Hapus Tabel","headers":"Headers","headersBoth":"Keduanya","headersColumn":"Kolom pertama","headersNone":"Tidak ada","headersRow":"Baris Pertama","heightUnit":"height unit","invalidBorder":"Ukuran batasan harus sebuah angka","invalidCellPadding":"'Spasi dalam' sel harus angka positif.","invalidCellSpacing":"Spasi antar sel harus angka positif.","invalidCols":"Jumlah kolom harus sebuah angka lebih besar dari 0","invalidHeight":"Tinggi tabel harus sebuah angka.","invalidRows":"Jumlah barus harus sebuah angka dan lebih besar dari 0.","invalidWidth":"Lebar tabel harus sebuah angka.","menu":"Properti Tabel","row":{"menu":"Baris","insertBefore":"Sisip Baris Sebelum","insertAfter":"Sisip Baris Sesudah","deleteRow":"Hapus Baris"},"rows":"Baris","summary":"Intisari","title":"Properti Tabel","toolbar":"Tabe","widthPc":"persen","widthPx":"piksel","widthUnit":"lebar satuan"},"stylescombo":{"label":"Gaya","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Opsi spesial karakter","title":"Pilih spesial karakter","toolbar":"Sisipkan spesial karakter"},"sourcedialog":{"toolbar":"Sumber","title":"Sumber"},"sourcearea":{"toolbar":"Sumber"},"showblocks":{"toolbar":"Perlihatkan Blok"},"removeformat":{"toolbar":"Hapus Format"},"pastetext":{"button":"Tempel sebagai teks polos","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Tempel sebagai Teks Polos"},"pastefromword":{"confirmCleanup":"Teks yang ingin anda tempel sepertinya di salin dari Word. Apakah anda mau membersihkannya sebelum menempel?","error":"Tidak mungkin membersihkan data yang ditempel dikerenakan kesalahan internal","title":"Tempel dari Word","toolbar":"Tempel dari Word"},"notification":{"closed":"Pemberitahuan ditutup"},"maximize":{"maximize":"Memperbesar","minimize":"Memperkecil"},"magicline":{"title":"Masukkan paragraf disini"},"list":{"bulletedlist":"Sisip/Hapus Daftar Bullet","numberedlist":"Sisip/Hapus Daftar Bernomor"},"language":{"button":"Atur Bahasa","remove":"Hapus Bahasa"},"indent":{"indent":"Tingkatkan Lekuk","outdent":"Kurangi Lekuk"},"image2":{"alt":"Teks alternatif","btnUpload":"Kirim ke Server","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Info Gambar","lockRatio":"Lock Ratio","menu":"Image Properties","pathName":"image","pathNameCaption":"caption","resetSize":"Atur Ulang Ukuran","resizer":"Click and drag to resize","title":"Image Properties","uploadTab":"Unggah","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Sisip Garis Horisontal"},"format":{"label":"Bentuk","panelTitle":"Bentuk Paragraf","tag_address":"Alamat","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":"Membentuk"},"filetools":{"loadError":"Error terjadi ketika berkas dibaca","networkError":"Jaringan error terjadi ketika mengunggah berkas","httpError404":"HTTP error terjadi ketika mengunggah berkas (404: Berkas tidak ditemukan)","httpError403":"HTTP error terjadi ketika mengunggah berkas (403: Gangguan)","httpError":"HTTP error terjadi ketika mengunggah berkas (status error: %1)","noUrlError":"Unggahan URL tidak terdefinisi","responseError":"Respon server tidak sesuai"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Opsi Konteks Pilihan"},"clipboard":{"copy":"Salin","copyError":"Pengaturan keamanan peramban anda tidak mengizinkan editor untuk mengeksekusi operasi menyalin secara otomatis. Mohon gunakan papan tuts (Ctrl/Cmd+C)","cut":"Potong","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":"Tempel","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Area Tempel","pasteMsg":"Paste your content inside the area below and press OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Kutipan Blok"},"basicstyles":{"bold":"Huruf Tebal","italic":"Huruf Miring","strike":"Strikethrough","subscript":"Subscript","superscript":"Superscript","underline":"Garis Bawah"},"about":{"copy":"Hak cipta &copy; $1. All rights reserved.","dlgTitle":"Tentang CKEditor 4","moreInfo":"Untuk informasi lisensi silahkan kunjungi web site kami:"},"editor":"Rich Text Editor","editorPanel":"Panel Rich Text Editor","common":{"editorHelp":"Tekan ALT 0 untuk bantuan.","browseServer":"Jelajah Server","url":"URL","protocol":"Protokol","upload":"Unggah","uploadSubmit":"Kirim ke Server","image":"Gambar","form":"Formulir","checkbox":"Kotak Cek","radio":"Tombol Radio","textField":"Kolom Teks","textarea":"Area Teks","hiddenField":"Kolom Tersembunyi","button":"Tombol","select":"Kolom Seleksi","imageButton":"Tombol Gambar","notSet":"<tidak diatur>","id":"Id","name":"Nama","langDir":"Arah Bahasa","langDirLtr":"Kiri ke Kanan (LTR)","langDirRtl":"Kanan ke Kiri","langCode":"Kode Bahasa","longDescr":"Deskripsi URL Panjang","cssClass":"Kelas Stylesheet","advisoryTitle":"Penasehat Judul","cssStyle":"Gaya","ok":"OK","cancel":"Batal","close":"Tutup","preview":"Pratinjau","resize":"Ubah ukuran","generalTab":"Umum","advancedTab":"Lebih Lanjut","validateNumberFailed":"Nilai ini tidak sebuah angka","confirmNewPage":"Semua perubahan yang tidak disimpan di konten ini akan hilang. Apakah anda yakin ingin memuat halaman baru?","confirmCancel":"Beberapa opsi telah berubah. Apakah anda yakin ingin menutup dialog?","options":"Opsi","target":"Sasaran","targetNew":"Jendela Baru (_blank)","targetTop":"Laman Atas (_top)","targetSelf":"Jendela yang Sama (_self)","targetParent":"Jendela Induk (_parent)","langDirLTR":"Kiri ke Kanan (LTR)","langDirRTL":"Kanan ke Kiri (RTL)","styles":"Gaya","cssClasses":"Kelas Stylesheet","width":"Lebar","height":"Tinggi","align":"Penjajaran","left":"Kiri","right":"Kanan","center":"Tengah","justify":"Rata kiri-kanan","alignLeft":"Rata Kiri","alignRight":"Rata Kanan","alignCenter":"Rata Tengah","alignTop":"Atas","alignMiddle":"Tengah","alignBottom":"Bawah","alignNone":"Tidak ada","invalidValue":"Nilai tidak sah.","invalidHeight":"Tinggi harus sebuah angka.","invalidWidth":"Lebar harus sebuah angka.","invalidLength":"Nilai untuk \"%1\" harus bernilai positif dengan atau tanpa disertai dengan satuan ukur yang tepat (%2)","invalidCssLength":"Nilai untuk \"%1\" harus sebuah angkat positif dengan atau tanpa pengukuran unit CSS yang sah (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Nilai yang dispesifikasian untuk kolom \"%1\" harus sebuah angka positif dengan atau tanpa sebuah unit pengukuran HTML (px atau %) yang valid.","invalidInlineStyle":"Nilai pada inline style merupakan pasangan nama dan nilai dengan format \"nama : nilai\", yang dipisahkan dengan titik dua.","cssLengthTooltip":"Masukkan sebuah angka untuk sebuah nilai dalam pixel atau sebuah angka dengan unit CSS yang sah (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, tidak tersedia</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Spasi","35":"End","36":"Home","46":"Hapus","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Pintasan Keyboard","optionDefault":"Default"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/is.js b/core/assets/vendor/ckeditor/lang/is.js
index 22bd643e059d..ddf2cf2cb1ff 100644
--- a/core/assets/vendor/ckeditor/lang/is.js
+++ b/core/assets/vendor/ckeditor/lang/is.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['is']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"Hætta við afturköllun","undo":"Afturkalla"},"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"},"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öð","heightUnit":"height unit","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"},"stylescombo":{"label":"Stílflokkur","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Velja tákn","toolbar":"Setja inn merki"},"sourcedialog":{"toolbar":"Kóði","title":"Kóði"},"sourcearea":{"toolbar":"Kóði"},"showblocks":{"toolbar":"Sýna blokkir"},"removeformat":{"toolbar":"Fjarlægja snið"},"pastetext":{"button":"Líma sem ósniðinn texta","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Punktalisti","numberedlist":"Númeraður listi"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"Minnka inndrátt","outdent":"Auka inndrátt"},"image2":{"alt":"Baklægur texti","btnUpload":"Hlaða upp","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Almennt","lockRatio":"Festa stærðarhlutfall","menu":"Eigindi myndar","pathName":"image","pathNameCaption":"caption","resetSize":"Reikna stærð","resizer":"Click and drag to resize","title":"Eigindi myndar","uploadTab":"Senda upp","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Lóðrétt lína"},"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ð"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"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","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Inndráttur"},"basicstyles":{"bold":"Feitletrað","italic":"Skáletrað","strike":"Yfirstrikað","subscript":"Niðurskrifað","superscript":"Uppskrifað","underline":"Undirstrikað"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","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":"You have changed some options. Are you sure you want to close the dialog window?","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","left":"Vinstri","right":"Hægri","center":"Miðjað","justify":"Jafna báðum megin","alignLeft":"Vinstrijöfnun","alignRight":"Hægrijöfnun","alignCenter":"Align Center","alignTop":"Efst","alignMiddle":"Miðjuð","alignBottom":"Neðst","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
+CKEDITOR.lang['is']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"Hætta við afturköllun","undo":"Afturkalla"},"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"},"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öð","heightUnit":"height unit","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"},"stylescombo":{"label":"Stílflokkur","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Velja tákn","toolbar":"Setja inn merki"},"sourcedialog":{"toolbar":"Kóði","title":"Kóði"},"sourcearea":{"toolbar":"Kóði"},"showblocks":{"toolbar":"Sýna blokkir"},"removeformat":{"toolbar":"Fjarlægja snið"},"pastetext":{"button":"Líma sem ósniðinn texta","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Punktalisti","numberedlist":"Númeraður listi"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"Minnka inndrátt","outdent":"Auka inndrátt"},"image2":{"alt":"Baklægur texti","btnUpload":"Hlaða upp","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Almennt","lockRatio":"Festa stærðarhlutfall","menu":"Eigindi myndar","pathName":"image","pathNameCaption":"caption","resetSize":"Reikna stærð","resizer":"Click and drag to resize","title":"Eigindi myndar","uploadTab":"Senda upp","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Lóðrétt lína"},"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ð"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"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","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Inndráttur"},"basicstyles":{"bold":"Feitletrað","italic":"Skáletrað","strike":"Yfirstrikað","subscript":"Niðurskrifað","superscript":"Uppskrifað","underline":"Undirstrikað"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","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","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":"You have changed some options. Are you sure you want to close the dialog window?","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","left":"Vinstri","right":"Hægri","center":"Miðjað","justify":"Jafna báðum megin","alignLeft":"Vinstrijöfnun","alignRight":"Hægrijöfnun","alignCenter":"Align Center","alignTop":"Efst","alignMiddle":"Miðjuð","alignBottom":"Neðst","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/it.js b/core/assets/vendor/ckeditor/lang/it.js
index 7c138bb10f11..a604e27f39a7 100644
--- a/core/assets/vendor/ckeditor/lang/it.js
+++ b/core/assets/vendor/ckeditor/lang/it.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['it']={"widget":{"move":"Fare clic e trascinare per spostare","label":"Widget %1"},"undo":{"redo":"Ripristina","undo":"Annulla"},"toolbar":{"toolbarCollapse":"Minimizza Toolbar","toolbarExpand":"Espandi Toolbar","toolbarGroups":{"document":"Documento","clipboard":"Copia negli appunti/Annulla","editing":"Modifica","forms":"Form","basicstyles":"Stili di base","paragraph":"Paragrafo","links":"Link","insert":"Inserisci","styles":"Stili","colors":"Colori","tools":"Strumenti"},"toolbars":"Editor toolbar"},"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","heightUnit":"unità altezza","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"},"stylescombo":{"label":"Stili","panelTitle":"Stili di formattazione","panelTitle1":"Stili per blocchi","panelTitle2":"Stili in linea","panelTitle3":"Stili per oggetti"},"specialchar":{"options":"Opzioni carattere speciale","title":"Seleziona carattere speciale","toolbar":"Inserisci carattere speciale"},"sourcedialog":{"toolbar":"Sorgente","title":"Sorgente"},"sourcearea":{"toolbar":"Sorgente"},"showblocks":{"toolbar":"Visualizza Blocchi"},"removeformat":{"toolbar":"Elimina formattazione"},"pastetext":{"button":"Incolla come testo semplice","pasteNotification":"Premere %1 per incollare. Il tuo browser non permette di incollare tramite il pulsante della barra degli strumenti o tramite la voce del menu contestuale.","title":"Incolla come testo semplice"},"pastefromword":{"confirmCleanup":"Il testo da incollare sembra provenire da Word. Desideri pulirlo prima di incollare?","error":"Non è stato possibile eliminare il testo incollato a causa di un errore interno.","title":"Incolla da Word","toolbar":"Incolla da Word"},"notification":{"closed":"Notifica chiusa."},"maximize":{"maximize":"Massimizza","minimize":"Minimizza"},"magicline":{"title":"Inserisci paragrafo qui"},"list":{"bulletedlist":"Inserisci/Rimuovi Elenco Puntato","numberedlist":"Inserisci/Rimuovi Elenco Numerato"},"language":{"button":"Imposta lingua","remove":"Rimuovi lingua"},"indent":{"indent":"Aumenta rientro","outdent":"Riduci rientro"},"image2":{"alt":"Testo alternativo","btnUpload":"Invia al server","captioned":"Immagine con didascalia","captionPlaceholder":"Didascalia","infoTab":"Informazioni immagine","lockRatio":"Blocca rapporto","menu":"Proprietà immagine","pathName":"immagine","pathNameCaption":"didascalia","resetSize":"Reimposta dimensione","resizer":"Fare clic e trascinare per ridimensionare","title":"Proprietà immagine","uploadTab":"Carica","urlMissing":"Manca l'URL dell'immagine.","altMissing":"Testo alternativo mancante."},"horizontalrule":{"toolbar":"Inserisci riga orizzontale"},"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"},"filetools":{"loadError":"Si è verificato un errore durante la lettura del file.","networkError":"Si è verificato un errore di rete durante il caricamento del file.","httpError404":"Si è verificato un errore HTTP durante il caricamento del file (404: file non trovato).","httpError403":"Si è verificato un errore HTTP durante il caricamento del file (403: accesso negato).","httpError":"Si è verificato un errore HTTP durante il caricamento del file (stato dell'errore: %1).","noUrlError":"L'URL per il caricamento non è stato definito.","responseError":"La risposta del server non è corretta."},"elementspath":{"eleLabel":"Percorso degli elementi","eleTitle":"%1 elemento"},"contextmenu":{"options":"Opzioni del menù contestuale"},"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","pasteNotification":"Premere %1 per incollare. Il tuo browser non permette di incollare tramite il pulsante della barra degli strumenti o tramite la voce del menu contestuale.","pasteArea":"Area dove incollare","pasteMsg":"Incollare il proprio contenuto all'interno dell'area sottostante e premere OK."},"blockquote":{"toolbar":"Citazione"},"basicstyles":{"bold":"Grassetto","italic":"Corsivo","strike":"Barrato","subscript":"Pedice","superscript":"Apice","underline":"Sottolineato"},"about":{"copy":"Copyright &copy; $1. Tutti i diritti riservati.","dlgTitle":"Informazioni su CKEditor 4","moreInfo":"Per le informazioni sulla licenza si prega di visitare il nostro sito:"},"editor":"Rich Text Editor","editorPanel":"Pannello 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","left":"Sinistra","right":"Destra","center":"Centrato","justify":"Giustifica","alignLeft":"Allinea a sinistra","alignRight":"Allinea a destra","alignCenter":"Allinea al centro","alignTop":"In Alto","alignMiddle":"Centrato","alignBottom":"In Basso","alignNone":"Nessuno","invalidValue":"Valore non valido.","invalidHeight":"L'altezza dev'essere un numero","invalidWidth":"La Larghezza dev'essere un numero","invalidLength":"Il valore specificato per il campo \"%1\" deve essere un numero positivo con o senza un'unità di misura valida (%2).","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>","keyboard":{"8":"Backspace","13":"Invio","16":"Maiusc","17":"Ctrl","18":"Alt","32":"Spazio","35":"Fine","36":"Inizio","46":"Canc","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Comando"},"keyboardShortcut":"Scorciatoia da tastiera","optionDefault":"Predefinito"}};
\ No newline at end of file
+CKEDITOR.lang['it']={"widget":{"move":"Fare clic e trascinare per spostare","label":"Widget %1"},"undo":{"redo":"Ripristina","undo":"Annulla"},"toolbar":{"toolbarCollapse":"Minimizza Toolbar","toolbarExpand":"Espandi Toolbar","toolbarGroups":{"document":"Documento","clipboard":"Copia negli appunti/Annulla","editing":"Modifica","forms":"Form","basicstyles":"Stili di base","paragraph":"Paragrafo","links":"Link","insert":"Inserisci","styles":"Stili","colors":"Colori","tools":"Strumenti"},"toolbars":"Editor toolbar"},"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","heightUnit":"unità altezza","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"},"stylescombo":{"label":"Stili","panelTitle":"Stili di formattazione","panelTitle1":"Stili per blocchi","panelTitle2":"Stili in linea","panelTitle3":"Stili per oggetti"},"specialchar":{"options":"Opzioni carattere speciale","title":"Seleziona carattere speciale","toolbar":"Inserisci carattere speciale"},"sourcedialog":{"toolbar":"Sorgente","title":"Sorgente"},"sourcearea":{"toolbar":"Sorgente"},"showblocks":{"toolbar":"Visualizza Blocchi"},"removeformat":{"toolbar":"Elimina formattazione"},"pastetext":{"button":"Incolla come testo semplice","pasteNotification":"Premere %1 per incollare. Il tuo browser non permette di incollare tramite il pulsante della barra degli strumenti o tramite la voce del menu contestuale.","title":"Incolla come testo semplice"},"pastefromword":{"confirmCleanup":"Il testo da incollare sembra provenire da Word. Desideri pulirlo prima di incollare?","error":"Non è stato possibile eliminare il testo incollato a causa di un errore interno.","title":"Incolla da Word","toolbar":"Incolla da Word"},"notification":{"closed":"Notifica chiusa."},"maximize":{"maximize":"Massimizza","minimize":"Minimizza"},"magicline":{"title":"Inserisci paragrafo qui"},"list":{"bulletedlist":"Inserisci/Rimuovi Elenco Puntato","numberedlist":"Inserisci/Rimuovi Elenco Numerato"},"language":{"button":"Imposta lingua","remove":"Rimuovi lingua"},"indent":{"indent":"Aumenta rientro","outdent":"Riduci rientro"},"image2":{"alt":"Testo alternativo","btnUpload":"Invia al server","captioned":"Immagine con didascalia","captionPlaceholder":"Didascalia","infoTab":"Informazioni immagine","lockRatio":"Blocca rapporto","menu":"Proprietà immagine","pathName":"immagine","pathNameCaption":"didascalia","resetSize":"Reimposta dimensione","resizer":"Fare clic e trascinare per ridimensionare","title":"Proprietà immagine","uploadTab":"Carica","urlMissing":"Manca l'URL dell'immagine.","altMissing":"Testo alternativo mancante."},"horizontalrule":{"toolbar":"Inserisci riga orizzontale"},"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"},"filetools":{"loadError":"Si è verificato un errore durante la lettura del file.","networkError":"Si è verificato un errore di rete durante il caricamento del file.","httpError404":"Si è verificato un errore HTTP durante il caricamento del file (404: file non trovato).","httpError403":"Si è verificato un errore HTTP durante il caricamento del file (403: accesso negato).","httpError":"Si è verificato un errore HTTP durante il caricamento del file (stato dell'errore: %1).","noUrlError":"L'URL per il caricamento non è stato definito.","responseError":"La risposta del server non è corretta."},"elementspath":{"eleLabel":"Percorso degli elementi","eleTitle":"%1 elemento"},"contextmenu":{"options":"Opzioni del menù contestuale"},"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","pasteNotification":"Premere %1 per incollare. Il tuo browser non permette di incollare tramite il pulsante della barra degli strumenti o tramite la voce del menu contestuale.","pasteArea":"Area dove incollare","pasteMsg":"Incollare il proprio contenuto all'interno dell'area sottostante e premere OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Citazione"},"basicstyles":{"bold":"Grassetto","italic":"Corsivo","strike":"Barrato","subscript":"Pedice","superscript":"Apice","underline":"Sottolineato"},"about":{"copy":"Copyright &copy; $1. Tutti i diritti riservati.","dlgTitle":"Informazioni su CKEditor 4","moreInfo":"Per le informazioni sulla licenza si prega di visitare il nostro sito:"},"editor":"Rich Text Editor","editorPanel":"Pannello 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","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","left":"Sinistra","right":"Destra","center":"Centrato","justify":"Giustifica","alignLeft":"Allinea a sinistra","alignRight":"Allinea a destra","alignCenter":"Allinea al centro","alignTop":"In Alto","alignMiddle":"Centrato","alignBottom":"In Basso","alignNone":"Nessuno","invalidValue":"Valore non valido.","invalidHeight":"L'altezza dev'essere un numero","invalidWidth":"La Larghezza dev'essere un numero","invalidLength":"Il valore specificato per il campo \"%1\" deve essere un numero positivo con o senza un'unità di misura valida (%2).","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>","keyboard":{"8":"Backspace","13":"Invio","16":"Maiusc","17":"Ctrl","18":"Alt","32":"Spazio","35":"Fine","36":"Inizio","46":"Canc","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Comando"},"keyboardShortcut":"Scorciatoia da tastiera","optionDefault":"Predefinito"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/ja.js b/core/assets/vendor/ckeditor/lang/ja.js
index 3406ca24d8ed..682e3ff66e0e 100644
--- a/core/assets/vendor/ckeditor/lang/ja.js
+++ b/core/assets/vendor/ckeditor/lang/ja.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['ja']={"widget":{"move":"ドラッグして移動","label":"%1 ウィジェット"},"undo":{"redo":"やり直す","undo":"元に戻す"},"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":"編集ツールバー"},"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":"ヘッダ","yes":"はい","no":"いいえ","invalidWidth":"セル幅は数値で入力してください。","invalidHeight":"セル高さは数値で入力してください。","invalidRowSpan":"縦幅(行数)は数値で入力してください。","invalidColSpan":"横幅(列数)は数値で入力してください。","chooseColor":"色の選択"},"cellPad":"セル内間隔","cellSpace":"セル内余白","column":{"menu":"列","insertBefore":"列を左に挿入","insertAfter":"列を右に挿入","deleteColumn":"列を削除"},"columns":"列数","deleteTable":"表を削除","headers":"ヘッダ (th)","headersBoth":"両方","headersColumn":"最初の列のみ","headersNone":"なし","headersRow":"最初の行のみ","heightUnit":"height unit","invalidBorder":"枠線の幅は数値で入力してください。","invalidCellPadding":"セル内余白は数値で入力してください。","invalidCellSpacing":"セル間余白は数値で入力してください。","invalidCols":"列数は0より大きな数値を入力してください。","invalidHeight":"高さは数値で入力してください。","invalidRows":"行数は0より大きな数値を入力してください。","invalidWidth":"幅は数値で入力してください。","menu":"表のプロパティ","row":{"menu":"行","insertBefore":"行を上に挿入","insertAfter":"行を下に挿入","deleteRow":"行を削除"},"rows":"行数","summary":"表の概要","title":"表のプロパティ","toolbar":"表","widthPc":"パーセント","widthPx":"ピクセル","widthUnit":"幅の単位"},"stylescombo":{"label":"スタイル","panelTitle":"スタイル","panelTitle1":"ブロックスタイル","panelTitle2":"インラインスタイル","panelTitle3":"オブジェクトスタイル"},"specialchar":{"options":"特殊文字オプション","title":"特殊文字の選択","toolbar":"特殊文字を挿入"},"sourcedialog":{"toolbar":"ソース","title":"ソース"},"sourcearea":{"toolbar":"ソース"},"showblocks":{"toolbar":"ブロック表示"},"removeformat":{"toolbar":"書式を解除"},"pastetext":{"button":"プレーンテキストとして貼り付け","pasteNotification":"%1 を押して貼り付けます。 ブラウザは、ツールバーボタンまたはコンテキストメニューオプションを使用した貼り付けをサポートしていません。","title":"プレーンテキストとして貼り付け"},"pastefromword":{"confirmCleanup":"貼り付けを行うテキストはワード文章からコピーされようとしています。貼り付ける前にクリーニングを行いますか?","error":"内部エラーにより貼り付けたデータをクリアできませんでした","title":"ワード文章から貼り付け","toolbar":"ワード文章から貼り付け"},"notification":{"closed":"通知を閉じました。"},"maximize":{"maximize":"最大化","minimize":"最小化"},"magicline":{"title":"ここに段落を挿入"},"list":{"bulletedlist":"番号無しリスト","numberedlist":"番号付きリスト"},"language":{"button":"言語を設定","remove":"言語を削除"},"indent":{"indent":"インデント","outdent":"インデント解除"},"image2":{"alt":"代替テキスト","btnUpload":"サーバーに送信","captioned":"キャプションを付ける","captionPlaceholder":"キャプション","infoTab":"画像情報","lockRatio":"比率を固定","menu":"画像のプロパティ","pathName":"image","pathNameCaption":"caption","resetSize":"サイズをリセット","resizer":"ドラッグしてリサイズ","title":"画像のプロパティ","uploadTab":"アップロード","urlMissing":"画像のURLを入力してください。","altMissing":"代替テキストを入力してください。"},"horizontalrule":{"toolbar":"水平線"},"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":"書式付き"},"filetools":{"loadError":"ファイルの読み込み中にエラーが発生しました。","networkError":"ファイルのアップロード中にネットワークエラーが発生しました。","httpError404":"ファイルのアップロード中にHTTPエラーが発生しました。(404: File not found)","httpError403":"ファイルのアップロード中にHTTPエラーが発生しました。(403: Forbidden)","httpError":"ファイルのアップロード中にHTTPエラーが発生しました。(error status: %1)","noUrlError":"アップロードURLが定義されていません。","responseError":"サーバーの応答が不正です。"},"elementspath":{"eleLabel":"要素パス","eleTitle":"%1 要素"},"contextmenu":{"options":"コンテキストメニューオプション"},"clipboard":{"copy":"コピー","copyError":"ブラウザーのセキュリティ設定によりエディタのコピー操作を自動で実行することができません。実行するには手動でキーボードの(Ctrl/Cmd+C)を使用してください。","cut":"切り取り","cutError":"ブラウザーのセキュリティ設定によりエディタの切り取り操作を自動で実行することができません。実行するには手動でキーボードの(Ctrl/Cmd+X)を使用してください。","paste":"貼り付け","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"貼り付け場所","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"ブロック引用文"},"basicstyles":{"bold":"太字","italic":"斜体","strike":"打ち消し線","subscript":"下付き","superscript":"上付き","underline":"下線"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"CKEditorについて","moreInfo":"ライセンス情報の詳細はウェブサイトにて確認してください:"},"editor":"リッチテキストエディタ","editorPanel":"リッチテキストエディタパネル","common":{"editorHelp":"ヘルプは ALT 0 を押してください","browseServer":"サーバブラウザ","url":"URL","protocol":"プロトコル","upload":"アップロード","uploadSubmit":"サーバーに送信","image":"イメージ","flash":"Flash","form":"フォーム","checkbox":"チェックボックス","radio":"ラジオボタン","textField":"1行テキスト","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":"新しいウインドウ (_blank)","targetTop":"最上部ウィンドウ (_top)","targetSelf":"同じウィンドウ (_self)","targetParent":"親ウィンドウ (_parent)","langDirLTR":"左から右 (LTR)","langDirRTL":"右から左 (RTL)","styles":"スタイル","cssClasses":"スタイルシートクラス","width":"幅","height":"高さ","align":"行揃え","left":"左","right":"右","center":"中央","justify":"両端揃え","alignLeft":"左揃え","alignRight":"右揃え","alignCenter":"Align Center","alignTop":"上","alignMiddle":"中央","alignBottom":"下","alignNone":"なし","invalidValue":"不正な値です。","invalidHeight":"高さは数値で入力してください。","invalidWidth":"幅は数値で入力してください。","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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,or pc)","unavailable":"%1<span class=\"cke_accessibility\">, 利用不可能</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"キーボードショートカット","optionDefault":"Default"}};
\ No newline at end of file
+CKEDITOR.lang['ja']={"widget":{"move":"ドラッグして移動","label":"%1 ウィジェット"},"undo":{"redo":"やり直す","undo":"元に戻す"},"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":"編集ツールバー"},"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":"ヘッダ","yes":"はい","no":"いいえ","invalidWidth":"セル幅は数値で入力してください。","invalidHeight":"セル高さは数値で入力してください。","invalidRowSpan":"縦幅(行数)は数値で入力してください。","invalidColSpan":"横幅(列数)は数値で入力してください。","chooseColor":"色の選択"},"cellPad":"セル内間隔","cellSpace":"セル内余白","column":{"menu":"列","insertBefore":"列を左に挿入","insertAfter":"列を右に挿入","deleteColumn":"列を削除"},"columns":"列数","deleteTable":"表を削除","headers":"ヘッダ (th)","headersBoth":"両方","headersColumn":"最初の列のみ","headersNone":"なし","headersRow":"最初の行のみ","heightUnit":"height unit","invalidBorder":"枠線の幅は数値で入力してください。","invalidCellPadding":"セル内余白は数値で入力してください。","invalidCellSpacing":"セル間余白は数値で入力してください。","invalidCols":"列数は0より大きな数値を入力してください。","invalidHeight":"高さは数値で入力してください。","invalidRows":"行数は0より大きな数値を入力してください。","invalidWidth":"幅は数値で入力してください。","menu":"表のプロパティ","row":{"menu":"行","insertBefore":"行を上に挿入","insertAfter":"行を下に挿入","deleteRow":"行を削除"},"rows":"行数","summary":"表の概要","title":"表のプロパティ","toolbar":"表","widthPc":"パーセント","widthPx":"ピクセル","widthUnit":"幅の単位"},"stylescombo":{"label":"スタイル","panelTitle":"スタイル","panelTitle1":"ブロックスタイル","panelTitle2":"インラインスタイル","panelTitle3":"オブジェクトスタイル"},"specialchar":{"options":"特殊文字オプション","title":"特殊文字の選択","toolbar":"特殊文字を挿入"},"sourcedialog":{"toolbar":"ソース","title":"ソース"},"sourcearea":{"toolbar":"ソース"},"showblocks":{"toolbar":"ブロック表示"},"removeformat":{"toolbar":"書式を解除"},"pastetext":{"button":"プレーンテキストとして貼り付け","pasteNotification":"%1 を押して貼り付けます。 ブラウザは、ツールバーボタンまたはコンテキストメニューオプションを使用した貼り付けをサポートしていません。","title":"プレーンテキストとして貼り付け"},"pastefromword":{"confirmCleanup":"貼り付けを行うテキストはワード文章からコピーされようとしています。貼り付ける前にクリーニングを行いますか?","error":"内部エラーにより貼り付けたデータをクリアできませんでした","title":"ワード文章から貼り付け","toolbar":"ワード文章から貼り付け"},"notification":{"closed":"通知を閉じました。"},"maximize":{"maximize":"最大化","minimize":"最小化"},"magicline":{"title":"ここに段落を挿入"},"list":{"bulletedlist":"番号無しリスト","numberedlist":"番号付きリスト"},"language":{"button":"言語を設定","remove":"言語を削除"},"indent":{"indent":"インデント","outdent":"インデント解除"},"image2":{"alt":"代替テキスト","btnUpload":"サーバーに送信","captioned":"キャプションを付ける","captionPlaceholder":"キャプション","infoTab":"画像情報","lockRatio":"比率を固定","menu":"画像のプロパティ","pathName":"image","pathNameCaption":"caption","resetSize":"サイズをリセット","resizer":"ドラッグしてリサイズ","title":"画像のプロパティ","uploadTab":"アップロード","urlMissing":"画像のURLを入力してください。","altMissing":"代替テキストを入力してください。"},"horizontalrule":{"toolbar":"水平線"},"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":"書式付き"},"filetools":{"loadError":"ファイルの読み込み中にエラーが発生しました。","networkError":"ファイルのアップロード中にネットワークエラーが発生しました。","httpError404":"ファイルのアップロード中にHTTPエラーが発生しました。(404: File not found)","httpError403":"ファイルのアップロード中にHTTPエラーが発生しました。(403: Forbidden)","httpError":"ファイルのアップロード中にHTTPエラーが発生しました。(error status: %1)","noUrlError":"アップロードURLが定義されていません。","responseError":"サーバーの応答が不正です。"},"elementspath":{"eleLabel":"要素パス","eleTitle":"%1 要素"},"contextmenu":{"options":"コンテキストメニューオプション"},"clipboard":{"copy":"コピー","copyError":"ブラウザーのセキュリティ設定によりエディタのコピー操作を自動で実行することができません。実行するには手動でキーボードの(Ctrl/Cmd+C)を使用してください。","cut":"切り取り","cutError":"ブラウザーのセキュリティ設定によりエディタの切り取り操作を自動で実行することができません。実行するには手動でキーボードの(Ctrl/Cmd+X)を使用してください。","paste":"貼り付け","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"貼り付け場所","pasteMsg":"Paste your content inside the area below and press OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"ブロック引用文"},"basicstyles":{"bold":"太字","italic":"斜体","strike":"打ち消し線","subscript":"下付き","superscript":"上付き","underline":"下線"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"CKEditorについて","moreInfo":"ライセンス情報の詳細はウェブサイトにて確認してください:"},"editor":"リッチテキストエディタ","editorPanel":"リッチテキストエディタパネル","common":{"editorHelp":"ヘルプは ALT 0 を押してください","browseServer":"サーバブラウザ","url":"URL","protocol":"プロトコル","upload":"アップロード","uploadSubmit":"サーバーに送信","image":"イメージ","form":"フォーム","checkbox":"チェックボックス","radio":"ラジオボタン","textField":"1行テキスト","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":"新しいウインドウ (_blank)","targetTop":"最上部ウィンドウ (_top)","targetSelf":"同じウィンドウ (_self)","targetParent":"親ウィンドウ (_parent)","langDirLTR":"左から右 (LTR)","langDirRTL":"右から左 (RTL)","styles":"スタイル","cssClasses":"スタイルシートクラス","width":"幅","height":"高さ","align":"行揃え","left":"左","right":"右","center":"中央","justify":"両端揃え","alignLeft":"左揃え","alignRight":"右揃え","alignCenter":"Align Center","alignTop":"上","alignMiddle":"中央","alignBottom":"下","alignNone":"なし","invalidValue":"不正な値です。","invalidHeight":"高さは数値で入力してください。","invalidWidth":"幅は数値で入力してください。","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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,or pc)","unavailable":"%1<span class=\"cke_accessibility\">, 利用不可能</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"キーボードショートカット","optionDefault":"Default"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/ka.js b/core/assets/vendor/ckeditor/lang/ka.js
index ae03b59e18f4..c0d187d0f2a9 100644
--- a/core/assets/vendor/ckeditor/lang/ka.js
+++ b/core/assets/vendor/ckeditor/lang/ka.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['ka']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"გამეორება","undo":"გაუქმება"},"toolbar":{"toolbarCollapse":"ხელსაწყოთა ზოლის შეწევა","toolbarExpand":"ხელსაწყოთა ზოლის გამოწევა","toolbarGroups":{"document":"დოკუმენტი","clipboard":"Clipboard/გაუქმება","editing":"რედაქტირება","forms":"ფორმები","basicstyles":"ძირითადი სტილები","paragraph":"აბზაცი","links":"ბმულები","insert":"ჩასმა","styles":"სტილები","colors":"ფერები","tools":"ხელსაწყოები"},"toolbars":"Editor toolbars"},"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":"პირველი სტრიქონი","heightUnit":"height unit","invalidBorder":"ჩარჩოს ზომა რიცხვით უდნა იყოს წარმოდგენილი.","invalidCellPadding":"უჯრის კიდე (padding) რიცხვით უნდა იყოს წარმოდგენილი.","invalidCellSpacing":"უჯრის სივრცე (spacing) რიცხვით უნდა იყოს წარმოდგენილი.","invalidCols":"სვეტების რაოდენობა დადებითი რიცხვი უნდა იყოს.","invalidHeight":"ცხრილის სიმაღლე რიცხვით უნდა იყოს წარმოდგენილი.","invalidRows":"სტრიქონების რაოდენობა დადებითი რიცხვი უნდა იყოს.","invalidWidth":"ცხრილის სიგანე რიცხვით უნდა იყოს წარმოდგენილი.","menu":"ცხრილის პარამეტრები","row":{"menu":"სტრიქონი","insertBefore":"სტრიქონის ჩამატება წინ","insertAfter":"სტრიქონის ჩამატება მერე","deleteRow":"სტრიქონების წაშლა"},"rows":"სტრიქონი","summary":"შეჯამება","title":"ცხრილის პარამეტრები","toolbar":"ცხრილი","widthPc":"პროცენტი","widthPx":"წერტილი","widthUnit":"საზომი ერთეული"},"stylescombo":{"label":"სტილები","panelTitle":"ფორმატირების სტილები","panelTitle1":"არის სტილები","panelTitle2":"თანდართული სტილები","panelTitle3":"ობიექტის სტილები"},"specialchar":{"options":"სპეციალური სიმბოლოს პარამეტრები","title":"სპეციალური სიმბოლოს არჩევა","toolbar":"სპეციალური სიმბოლოს ჩასმა"},"sourcedialog":{"toolbar":"კოდები","title":"კოდები"},"sourcearea":{"toolbar":"კოდები"},"showblocks":{"toolbar":"არეების ჩვენება"},"removeformat":{"toolbar":"ფორმატირების მოხსნა"},"pastetext":{"button":"მხოლოდ ტექსტის ჩასმა","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"მხოლოდ ტექსტის ჩასმა"},"pastefromword":{"confirmCleanup":"ჩასასმელი ტექსტი ვორდიდან გადმოტანილს გავს - გინდათ მისი წინასწარ გაწმენდა?","error":"შიდა შეცდომის გამო ვერ მოხერხდა ტექსტის გაწმენდა","title":"ვორდიდან ჩასმა","toolbar":"ვორდიდან ჩასმა"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"გადიდება","minimize":"დაპატარავება"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"ღილიანი სია","numberedlist":"გადანომრილი სია"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"მეტად შეწევა","outdent":"ნაკლებად შეწევა"},"image2":{"alt":"სანაცვლო ტექსტი","btnUpload":"სერვერისთვის გაგზავნა","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"სურათის ინფორმცია","lockRatio":"პროპორციის შენარჩუნება","menu":"სურათის პარამეტრები","pathName":"image","pathNameCaption":"caption","resetSize":"ზომის დაბრუნება","resizer":"Click and drag to resize","title":"სურათის პარამეტრები","uploadTab":"აქაჩვა","urlMissing":"სურათის URL არაა შევსებული.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"ჰორიზონტალური ხაზის ჩასმა"},"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":"ფორმატირებული"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"ელემეტის გზა","eleTitle":"%1 ელემენტი"},"contextmenu":{"options":"კონტექსტური მენიუს პარამეტრები"},"clipboard":{"copy":"ასლი","copyError":"თქვენი ბროუზერის უსაფრთხოების პარამეტრები არ იძლევა ასლის ოპერაციის ავტომატურად განხორციელების საშუალებას. გამოიყენეთ კლავიატურა ამისთვის (Ctrl/Cmd+C).","cut":"ამოჭრა","cutError":"თქვენი ბროუზერის უსაფრთხოების პარამეტრები არ იძლევა ამოჭრის ოპერაციის ავტომატურად განხორციელების საშუალებას. გამოიყენეთ კლავიატურა ამისთვის (Ctrl/Cmd+X).","paste":"ჩასმა","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"ჩასმის არე","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"ციტატა"},"basicstyles":{"bold":"მსხვილი","italic":"დახრილი","strike":"გადახაზული","subscript":"ინდექსი","superscript":"ხარისხი","underline":"გახაზული"},"about":{"copy":"Copyright &copy; $1. ყველა უფლება დაცულია.","dlgTitle":"CKEditor-ის შესახებ","moreInfo":"ლიცენზიის ინფორმაციისთვის ეწვიეთ ჩვენს საიტს:"},"editor":"ტექსტის რედაქტორი","editorPanel":"Rich Text Editor panel","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":"სწორება","left":"მარცხენა","right":"მარჯვენა","center":"შუა","justify":"両端揃え","alignLeft":"მარცხნივ სწორება","alignRight":"მარჯვნივ სწორება","alignCenter":"Align Center","alignTop":"ზემოთა","alignMiddle":"შუა","alignBottom":"ქვემოთა","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"სიმაღლე რიცხვით უნდა იყოს წარმოდგენილი.","invalidWidth":"სიგანე რიცხვით უნდა იყოს წარმოდგენილი.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
+CKEDITOR.lang['ka']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"გამეორება","undo":"გაუქმება"},"toolbar":{"toolbarCollapse":"ხელსაწყოთა ზოლის შეწევა","toolbarExpand":"ხელსაწყოთა ზოლის გამოწევა","toolbarGroups":{"document":"დოკუმენტი","clipboard":"Clipboard/გაუქმება","editing":"რედაქტირება","forms":"ფორმები","basicstyles":"ძირითადი სტილები","paragraph":"აბზაცი","links":"ბმულები","insert":"ჩასმა","styles":"სტილები","colors":"ფერები","tools":"ხელსაწყოები"},"toolbars":"Editor toolbars"},"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":"პირველი სტრიქონი","heightUnit":"height unit","invalidBorder":"ჩარჩოს ზომა რიცხვით უდნა იყოს წარმოდგენილი.","invalidCellPadding":"უჯრის კიდე (padding) რიცხვით უნდა იყოს წარმოდგენილი.","invalidCellSpacing":"უჯრის სივრცე (spacing) რიცხვით უნდა იყოს წარმოდგენილი.","invalidCols":"სვეტების რაოდენობა დადებითი რიცხვი უნდა იყოს.","invalidHeight":"ცხრილის სიმაღლე რიცხვით უნდა იყოს წარმოდგენილი.","invalidRows":"სტრიქონების რაოდენობა დადებითი რიცხვი უნდა იყოს.","invalidWidth":"ცხრილის სიგანე რიცხვით უნდა იყოს წარმოდგენილი.","menu":"ცხრილის პარამეტრები","row":{"menu":"სტრიქონი","insertBefore":"სტრიქონის ჩამატება წინ","insertAfter":"სტრიქონის ჩამატება მერე","deleteRow":"სტრიქონების წაშლა"},"rows":"სტრიქონი","summary":"შეჯამება","title":"ცხრილის პარამეტრები","toolbar":"ცხრილი","widthPc":"პროცენტი","widthPx":"წერტილი","widthUnit":"საზომი ერთეული"},"stylescombo":{"label":"სტილები","panelTitle":"ფორმატირების სტილები","panelTitle1":"არის სტილები","panelTitle2":"თანდართული სტილები","panelTitle3":"ობიექტის სტილები"},"specialchar":{"options":"სპეციალური სიმბოლოს პარამეტრები","title":"სპეციალური სიმბოლოს არჩევა","toolbar":"სპეციალური სიმბოლოს ჩასმა"},"sourcedialog":{"toolbar":"კოდები","title":"კოდები"},"sourcearea":{"toolbar":"კოდები"},"showblocks":{"toolbar":"არეების ჩვენება"},"removeformat":{"toolbar":"ფორმატირების მოხსნა"},"pastetext":{"button":"მხოლოდ ტექსტის ჩასმა","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"მხოლოდ ტექსტის ჩასმა"},"pastefromword":{"confirmCleanup":"ჩასასმელი ტექსტი ვორდიდან გადმოტანილს გავს - გინდათ მისი წინასწარ გაწმენდა?","error":"შიდა შეცდომის გამო ვერ მოხერხდა ტექსტის გაწმენდა","title":"ვორდიდან ჩასმა","toolbar":"ვორდიდან ჩასმა"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"გადიდება","minimize":"დაპატარავება"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"ღილიანი სია","numberedlist":"გადანომრილი სია"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"მეტად შეწევა","outdent":"ნაკლებად შეწევა"},"image2":{"alt":"სანაცვლო ტექსტი","btnUpload":"სერვერისთვის გაგზავნა","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"სურათის ინფორმცია","lockRatio":"პროპორციის შენარჩუნება","menu":"სურათის პარამეტრები","pathName":"image","pathNameCaption":"caption","resetSize":"ზომის დაბრუნება","resizer":"Click and drag to resize","title":"სურათის პარამეტრები","uploadTab":"აქაჩვა","urlMissing":"სურათის URL არაა შევსებული.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"ჰორიზონტალური ხაზის ჩასმა"},"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":"ფორმატირებული"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"ელემეტის გზა","eleTitle":"%1 ელემენტი"},"contextmenu":{"options":"კონტექსტური მენიუს პარამეტრები"},"clipboard":{"copy":"ასლი","copyError":"თქვენი ბროუზერის უსაფრთხოების პარამეტრები არ იძლევა ასლის ოპერაციის ავტომატურად განხორციელების საშუალებას. გამოიყენეთ კლავიატურა ამისთვის (Ctrl/Cmd+C).","cut":"ამოჭრა","cutError":"თქვენი ბროუზერის უსაფრთხოების პარამეტრები არ იძლევა ამოჭრის ოპერაციის ავტომატურად განხორციელების საშუალებას. გამოიყენეთ კლავიატურა ამისთვის (Ctrl/Cmd+X).","paste":"ჩასმა","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"ჩასმის არე","pasteMsg":"Paste your content inside the area below and press OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"ციტატა"},"basicstyles":{"bold":"მსხვილი","italic":"დახრილი","strike":"გადახაზული","subscript":"ინდექსი","superscript":"ხარისხი","underline":"გახაზული"},"about":{"copy":"Copyright &copy; $1. ყველა უფლება დაცულია.","dlgTitle":"CKEditor-ის შესახებ","moreInfo":"ლიცენზიის ინფორმაციისთვის ეწვიეთ ჩვენს საიტს:"},"editor":"ტექსტის რედაქტორი","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"დააჭირეთ ALT 0-ს დახმარების მისაღებად","browseServer":"სერვერზე დათვალიერება","url":"URL","protocol":"პროტოკოლი","upload":"ატვირთვა","uploadSubmit":"სერვერზე გაგზავნა","image":"სურათი","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":"სწორება","left":"მარცხენა","right":"მარჯვენა","center":"შუა","justify":"両端揃え","alignLeft":"მარცხნივ სწორება","alignRight":"მარჯვნივ სწორება","alignCenter":"Align Center","alignTop":"ზემოთა","alignMiddle":"შუა","alignBottom":"ქვემოთა","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"სიმაღლე რიცხვით უნდა იყოს წარმოდგენილი.","invalidWidth":"სიგანე რიცხვით უნდა იყოს წარმოდგენილი.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/km.js b/core/assets/vendor/ckeditor/lang/km.js
index 0bf5194b8eec..543b0fa82409 100644
--- a/core/assets/vendor/ckeditor/lang/km.js
+++ b/core/assets/vendor/ckeditor/lang/km.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['km']={"widget":{"move":"ចុច​ហើយ​ទាញ​ដើម្បី​ផ្លាស់​ទី","label":"%1 widget"},"undo":{"redo":"ធ្វើ​ឡើង​វិញ","undo":"មិន​ធ្វើ​វិញ"},"toolbar":{"toolbarCollapse":"បង្រួម​របារ​ឧបករណ៍","toolbarExpand":"ពង្រីក​របារ​ឧបករណ៍","toolbarGroups":{"document":"ឯកសារ","clipboard":"Clipboard/មិន​ធ្វើ​វិញ","editing":"ការ​កែ​សម្រួល","forms":"បែបបទ","basicstyles":"រចនាបថ​មូលដ្ឋាន","paragraph":"កថាខណ្ឌ","links":"តំណ","insert":"បញ្ចូល","styles":"រចនាបថ","colors":"ពណ៌","tools":"ឧបករណ៍"},"toolbars":"របារ​ឧបករណ៍​កែ​សម្រួល"},"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":"ជួរ​ដេក​ដំបូង","heightUnit":"height unit","invalidBorder":"ទំហំ​បន្ទាត់​ស៊ុម​ត្រូវ​តែ​ជា​លេខ។","invalidCellPadding":"ចន្លោះ​ក្រឡា​ត្រូវ​តែជា​លេខ​វិជ្ជមាន។","invalidCellSpacing":"គម្លាត​ក្រឡា​ត្រូវ​តែ​ជា​លេខ​វិជ្ជមាន។","invalidCols":"ចំនួន​ជួរ​ឈរ​ត្រូវ​តែ​ជា​លេខ​ធំ​ជាង 0។","invalidHeight":"កម្ពស់​តារាង​ត្រូវ​តែ​ជា​លេខ","invalidRows":"ចំនួន​ជួរ​ដេក​ត្រូវ​តែ​ជា​លេខ​ធំ​ជាង 0។","invalidWidth":"ទទឹង​តារាង​ត្រូវ​តែ​ជា​លេខ។","menu":"លក្ខណៈ​តារាង","row":{"menu":"ជួរ​ដេក","insertBefore":"បញ្ចូល​ជួរ​ដេក​ពីមុខ","insertAfter":"បញ្ចូល​ជួរ​ដេក​ពី​ក្រោយ","deleteRow":"លុប​ជួរ​ដេក"},"rows":"ជួរ​ដេក","summary":"សេចក្តី​សង្ខេប","title":"លក្ខណៈ​តារាង","toolbar":"តារាង","widthPc":"ភាគរយ","widthPx":"ភីកសែល","widthUnit":"ឯកតា​ទទឹង"},"stylescombo":{"label":"រចនាបថ","panelTitle":"ទ្រង់ទ្រាយ​រចនាបថ","panelTitle1":"រចនាបថ​ប្លក់","panelTitle2":"រចនាបថ​ក្នុង​ជួរ","panelTitle3":"រចនាបថ​វត្ថុ"},"specialchar":{"options":"ជម្រើស​តួ​អក្សរ​ពិសេស","title":"រើស​តួអក្សរ​ពិសេស","toolbar":"បន្ថែមអក្សរពិសេស"},"sourcedialog":{"toolbar":"អក្សរ​កូដ","title":"អក្សរ​កូដ"},"sourcearea":{"toolbar":"អក្សរ​កូដ"},"showblocks":{"toolbar":"បង្ហាញ​ប្លក់"},"removeformat":{"toolbar":"ជម្រះ​ទ្រង់​ទ្រាយ"},"pastetext":{"button":"បិទ​ភ្ជាប់​ជា​អត្ថបទ​ធម្មតា","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"បិទ​ភ្ជាប់​ជា​អត្ថបទ​ធម្មតា"},"pastefromword":{"confirmCleanup":"អត្ថបទ​ដែល​អ្នក​ចង់​បិទ​ភ្ជាប់​នេះ ទំនង​ដូច​ជា​ចម្លង​មក​ពី Word។ តើ​អ្នក​ចង់​សម្អាត​វា​មុន​បិទ​ភ្ជាប់​ទេ?","error":"ដោយ​សារ​មាន​បញ្ហា​ផ្នែក​ក្នុង​ធ្វើ​ឲ្យ​មិន​អាច​សម្អាត​ទិន្នន័យ​ដែល​បាន​បិទ​ភ្ជាប់","title":"បិទ​ភ្ជាប់​ពី Word","toolbar":"បិទ​ភ្ជាប់​ពី Word"},"notification":{"closed":"បាន​បិទ​ការ​ផ្ដល់​ដំណឹង។"},"maximize":{"maximize":"ពង្រីក​អតិបរមា","minimize":"បង្រួម​អប្បបរមា"},"magicline":{"title":"បញ្ចូល​កថាខណ្ឌ​នៅ​ទីនេះ"},"list":{"bulletedlist":"បញ្ចូល / លុប​បញ្ជី​ជា​ចំណុច​មូល","numberedlist":"បញ្ចូល / លុប​បញ្ជី​ជា​លេខ"},"language":{"button":"កំណត់​ភាសា","remove":"លុប​ភាសា"},"indent":{"indent":"បន្ថែមការចូលបន្ទាត់","outdent":"បន្ថយការចូលបន្ទាត់"},"image2":{"alt":"អត្ថបទជំនួស","btnUpload":"បញ្ជូនទៅកាន់ម៉ាស៊ីនផ្តល់សេវា","captioned":"រូប​ដែល​មាន​ចំណង​ជើង","captionPlaceholder":"Caption","infoTab":"ពត៌មានអំពីរូបភាព","lockRatio":"ចាក់​សោ​ផល​ធៀប","menu":"លក្ខណៈ​សម្បត្តិ​រូប​ភាព","pathName":"រូបភាព","pathNameCaption":"ចំណងជើង","resetSize":"កំណត់ទំហំឡើងវិញ","resizer":"ចុច​ហើយ​ទាញ​ដើម្បី​ប្ដូរ​ទំហំ","title":"លក្ខណៈ​សម្បត្តិ​រូប​ភាប","uploadTab":"ផ្ទុក​ឡើង","urlMissing":"ខ្វះ URL ប្រភព​រូប​ភាព។","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"បន្ថែមបន្ទាត់ផ្តេក"},"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":"Formatted"},"filetools":{"loadError":"មាន​បញ្ហា​កើតឡើង​ក្នុង​ពេល​អាន​ឯកសារ។","networkError":"មាន​បញ្ហា​បណ្ដាញ​កើត​ឡើង​ក្នុង​ពេល​ផ្ទុកឡើង​ឯកសារ។","httpError404":"មាន​បញ្ហា HTTP កើត​ឡើង​ក្នុង​ពេល​ផ្ទុកឡើង​ឯកសារ (404៖ រក​ឯកសារ​មិន​ឃើញ)។","httpError403":"មាន​បញ្ហា HTTP កើត​ឡើង​ក្នុង​ពេល​ផ្ទុកឡើង​ឯកសារ (403៖ ហាមឃាត់)។","httpError":"មាន​បញ្ហា HTTP កើត​ឡើង​ក្នុង​ពេល​ផ្ទុកឡើង​ឯកសារ (ស្ថានភាព​កំហុស៖ %1)។","noUrlError":"មិន​មាន​បញ្ជាក់ URL ផ្ទុក​ឡើង។","responseError":"ការ​ឆ្លើយតប​របស់​ម៉ាស៊ីនបម្រើ មិន​ត្រឹមត្រូវ។"},"elementspath":{"eleLabel":"ទីតាំង​ធាតុ","eleTitle":"ធាតុ %1"},"contextmenu":{"options":"ជម្រើស​ម៉ឺនុយ​បរិបទ"},"clipboard":{"copy":"ចម្លង","copyError":"ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះ​មិនអាចធ្វើកម្មវិធីតាក់តែងអត្ថបទ ចំលងអត្ថបទយកដោយស្វ័យប្រវត្តបានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនេះ (Ctrl/Cmd+C)។","cut":"កាត់យក","cutError":"ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះ​មិនអាចធ្វើកម្មវិធីតាក់តែងអត្ថបទ កាត់អត្ថបទយកដោយស្វ័យប្រវត្តបានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនេះ  (Ctrl/Cmd+X) ។","paste":"បិទ​ភ្ជាប់","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"តំបន់​បិទ​ភ្ជាប់","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"ប្លក់​ពាក្យ​សម្រង់"},"basicstyles":{"bold":"ដិត","italic":"ទ្រេត","strike":"គូស​បន្ទាត់​ចំ​កណ្ដាល","subscript":"អក្សរតូចក្រោម","superscript":"អក្សរតូចលើ","underline":"គូស​បន្ទាត់​ក្រោម"},"about":{"copy":"រក្សាសិទ្ធិ &copy; $1។ រក្សា​សិទ្ធិ​គ្រប់​បែប​យ៉ាង។","dlgTitle":"អំពី CKEditor","moreInfo":"សម្រាប់​ព័ត៌មាន​អំពី​អាជ្ញាបណញណ សូម​មើល​ក្នុង​គេហទំព័រ​របស់​យើង៖"},"editor":"ឧបករណ៍​សរសេរ​អត្ថបទ​សម្បូរ​បែប","editorPanel":"ផ្ទាំង​ឧបករណ៍​សរសេរ​អត្ថបទ​សម្បូរ​បែប","common":{"editorHelp":"ចុច ALT 0 សម្រាប់​ជំនួយ","browseServer":"រក​មើល​ក្នុង​ម៉ាស៊ីន​បម្រើ","url":"URL","protocol":"ពិធីការ","upload":"ផ្ទុក​ឡើង","uploadSubmit":"បញ្ជូនទៅកាន់ម៉ាស៊ីន​បម្រើ","image":"រូបភាព","flash":"Flash","form":"បែបបទ","checkbox":"ប្រអប់​ធីក","radio":"ប៊ូតុង​មូល","textField":"វាល​អត្ថបទ","textarea":"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":"បិទ","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":"កំណត់​ទីតាំង","left":"ខាងឆ្វង","right":"ខាងស្តាំ","center":"កណ្តាល","justify":"តំរឹមសងខាង","alignLeft":"តម្រឹម​ឆ្វេង","alignRight":"តម្រឹម​ស្ដាំ","alignCenter":"Align Center","alignTop":"ខាងលើ","alignMiddle":"កណ្តាល","alignBottom":"ខាងក្រោម","alignNone":"គ្មាន","invalidValue":"តម្លៃ​មិន​ត្រឹម​ត្រូវ។","invalidHeight":"តម្លៃ​កំពស់​ត្រូវ​តែ​ជា​លេខ។","invalidWidth":"តម្លៃ​ទទឹង​ត្រូវ​តែ​ជា​លេខ។","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"លុបថយក្រោយ","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"ចុង","36":"ផ្ទះ","46":"លុប","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
+CKEDITOR.lang['km']={"widget":{"move":"ចុច​ហើយ​ទាញ​ដើម្បី​ផ្លាស់​ទី","label":"%1 widget"},"undo":{"redo":"ធ្វើ​ឡើង​វិញ","undo":"មិន​ធ្វើ​វិញ"},"toolbar":{"toolbarCollapse":"បង្រួម​របារ​ឧបករណ៍","toolbarExpand":"ពង្រីក​របារ​ឧបករណ៍","toolbarGroups":{"document":"ឯកសារ","clipboard":"Clipboard/មិន​ធ្វើ​វិញ","editing":"ការ​កែ​សម្រួល","forms":"បែបបទ","basicstyles":"រចនាបថ​មូលដ្ឋាន","paragraph":"កថាខណ្ឌ","links":"តំណ","insert":"បញ្ចូល","styles":"រចនាបថ","colors":"ពណ៌","tools":"ឧបករណ៍"},"toolbars":"របារ​ឧបករណ៍​កែ​សម្រួល"},"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":"ជួរ​ដេក​ដំបូង","heightUnit":"height unit","invalidBorder":"ទំហំ​បន្ទាត់​ស៊ុម​ត្រូវ​តែ​ជា​លេខ។","invalidCellPadding":"ចន្លោះ​ក្រឡា​ត្រូវ​តែជា​លេខ​វិជ្ជមាន។","invalidCellSpacing":"គម្លាត​ក្រឡា​ត្រូវ​តែ​ជា​លេខ​វិជ្ជមាន។","invalidCols":"ចំនួន​ជួរ​ឈរ​ត្រូវ​តែ​ជា​លេខ​ធំ​ជាង 0។","invalidHeight":"កម្ពស់​តារាង​ត្រូវ​តែ​ជា​លេខ","invalidRows":"ចំនួន​ជួរ​ដេក​ត្រូវ​តែ​ជា​លេខ​ធំ​ជាង 0។","invalidWidth":"ទទឹង​តារាង​ត្រូវ​តែ​ជា​លេខ។","menu":"លក្ខណៈ​តារាង","row":{"menu":"ជួរ​ដេក","insertBefore":"បញ្ចូល​ជួរ​ដេក​ពីមុខ","insertAfter":"បញ្ចូល​ជួរ​ដេក​ពី​ក្រោយ","deleteRow":"លុប​ជួរ​ដេក"},"rows":"ជួរ​ដេក","summary":"សេចក្តី​សង្ខេប","title":"លក្ខណៈ​តារាង","toolbar":"តារាង","widthPc":"ភាគរយ","widthPx":"ភីកសែល","widthUnit":"ឯកតា​ទទឹង"},"stylescombo":{"label":"រចនាបថ","panelTitle":"ទ្រង់ទ្រាយ​រចនាបថ","panelTitle1":"រចនាបថ​ប្លក់","panelTitle2":"រចនាបថ​ក្នុង​ជួរ","panelTitle3":"រចនាបថ​វត្ថុ"},"specialchar":{"options":"ជម្រើស​តួ​អក្សរ​ពិសេស","title":"រើស​តួអក្សរ​ពិសេស","toolbar":"បន្ថែមអក្សរពិសេស"},"sourcedialog":{"toolbar":"អក្សរ​កូដ","title":"អក្សរ​កូដ"},"sourcearea":{"toolbar":"អក្សរ​កូដ"},"showblocks":{"toolbar":"បង្ហាញ​ប្លក់"},"removeformat":{"toolbar":"ជម្រះ​ទ្រង់​ទ្រាយ"},"pastetext":{"button":"បិទ​ភ្ជាប់​ជា​អត្ថបទ​ធម្មតា","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"បិទ​ភ្ជាប់​ជា​អត្ថបទ​ធម្មតា"},"pastefromword":{"confirmCleanup":"អត្ថបទ​ដែល​អ្នក​ចង់​បិទ​ភ្ជាប់​នេះ ទំនង​ដូច​ជា​ចម្លង​មក​ពី Word។ តើ​អ្នក​ចង់​សម្អាត​វា​មុន​បិទ​ភ្ជាប់​ទេ?","error":"ដោយ​សារ​មាន​បញ្ហា​ផ្នែក​ក្នុង​ធ្វើ​ឲ្យ​មិន​អាច​សម្អាត​ទិន្នន័យ​ដែល​បាន​បិទ​ភ្ជាប់","title":"បិទ​ភ្ជាប់​ពី Word","toolbar":"បិទ​ភ្ជាប់​ពី Word"},"notification":{"closed":"បាន​បិទ​ការ​ផ្ដល់​ដំណឹង។"},"maximize":{"maximize":"ពង្រីក​អតិបរមា","minimize":"បង្រួម​អប្បបរមា"},"magicline":{"title":"បញ្ចូល​កថាខណ្ឌ​នៅ​ទីនេះ"},"list":{"bulletedlist":"បញ្ចូល / លុប​បញ្ជី​ជា​ចំណុច​មូល","numberedlist":"បញ្ចូល / លុប​បញ្ជី​ជា​លេខ"},"language":{"button":"កំណត់​ភាសា","remove":"លុប​ភាសា"},"indent":{"indent":"បន្ថែមការចូលបន្ទាត់","outdent":"បន្ថយការចូលបន្ទាត់"},"image2":{"alt":"អត្ថបទជំនួស","btnUpload":"បញ្ជូនទៅកាន់ម៉ាស៊ីនផ្តល់សេវា","captioned":"រូប​ដែល​មាន​ចំណង​ជើង","captionPlaceholder":"Caption","infoTab":"ពត៌មានអំពីរូបភាព","lockRatio":"ចាក់​សោ​ផល​ធៀប","menu":"លក្ខណៈ​សម្បត្តិ​រូប​ភាព","pathName":"រូបភាព","pathNameCaption":"ចំណងជើង","resetSize":"កំណត់ទំហំឡើងវិញ","resizer":"ចុច​ហើយ​ទាញ​ដើម្បី​ប្ដូរ​ទំហំ","title":"លក្ខណៈ​សម្បត្តិ​រូប​ភាប","uploadTab":"ផ្ទុក​ឡើង","urlMissing":"ខ្វះ URL ប្រភព​រូប​ភាព។","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"បន្ថែមបន្ទាត់ផ្តេក"},"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":"Formatted"},"filetools":{"loadError":"មាន​បញ្ហា​កើតឡើង​ក្នុង​ពេល​អាន​ឯកសារ។","networkError":"មាន​បញ្ហា​បណ្ដាញ​កើត​ឡើង​ក្នុង​ពេល​ផ្ទុកឡើង​ឯកសារ។","httpError404":"មាន​បញ្ហា HTTP កើត​ឡើង​ក្នុង​ពេល​ផ្ទុកឡើង​ឯកសារ (404៖ រក​ឯកសារ​មិន​ឃើញ)។","httpError403":"មាន​បញ្ហា HTTP កើត​ឡើង​ក្នុង​ពេល​ផ្ទុកឡើង​ឯកសារ (403៖ ហាមឃាត់)។","httpError":"មាន​បញ្ហា HTTP កើត​ឡើង​ក្នុង​ពេល​ផ្ទុកឡើង​ឯកសារ (ស្ថានភាព​កំហុស៖ %1)។","noUrlError":"មិន​មាន​បញ្ជាក់ URL ផ្ទុក​ឡើង។","responseError":"ការ​ឆ្លើយតប​របស់​ម៉ាស៊ីនបម្រើ មិន​ត្រឹមត្រូវ។"},"elementspath":{"eleLabel":"ទីតាំង​ធាតុ","eleTitle":"ធាតុ %1"},"contextmenu":{"options":"ជម្រើស​ម៉ឺនុយ​បរិបទ"},"clipboard":{"copy":"ចម្លង","copyError":"ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះ​មិនអាចធ្វើកម្មវិធីតាក់តែងអត្ថបទ ចំលងអត្ថបទយកដោយស្វ័យប្រវត្តបានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនេះ (Ctrl/Cmd+C)។","cut":"កាត់យក","cutError":"ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះ​មិនអាចធ្វើកម្មវិធីតាក់តែងអត្ថបទ កាត់អត្ថបទយកដោយស្វ័យប្រវត្តបានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនេះ  (Ctrl/Cmd+X) ។","paste":"បិទ​ភ្ជាប់","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"តំបន់​បិទ​ភ្ជាប់","pasteMsg":"Paste your content inside the area below and press OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"ប្លក់​ពាក្យ​សម្រង់"},"basicstyles":{"bold":"ដិត","italic":"ទ្រេត","strike":"គូស​បន្ទាត់​ចំ​កណ្ដាល","subscript":"អក្សរតូចក្រោម","superscript":"អក្សរតូចលើ","underline":"គូស​បន្ទាត់​ក្រោម"},"about":{"copy":"រក្សាសិទ្ធិ &copy; $1។ រក្សា​សិទ្ធិ​គ្រប់​បែប​យ៉ាង។","dlgTitle":"អំពី CKEditor","moreInfo":"សម្រាប់​ព័ត៌មាន​អំពី​អាជ្ញាបណញណ សូម​មើល​ក្នុង​គេហទំព័រ​របស់​យើង៖"},"editor":"ឧបករណ៍​សរសេរ​អត្ថបទ​សម្បូរ​បែប","editorPanel":"ផ្ទាំង​ឧបករណ៍​សរសេរ​អត្ថបទ​សម្បូរ​បែប","common":{"editorHelp":"ចុច ALT 0 សម្រាប់​ជំនួយ","browseServer":"រក​មើល​ក្នុង​ម៉ាស៊ីន​បម្រើ","url":"URL","protocol":"ពិធីការ","upload":"ផ្ទុក​ឡើង","uploadSubmit":"បញ្ជូនទៅកាន់ម៉ាស៊ីន​បម្រើ","image":"រូបភាព","form":"បែបបទ","checkbox":"ប្រអប់​ធីក","radio":"ប៊ូតុង​មូល","textField":"វាល​អត្ថបទ","textarea":"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":"បិទ","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":"កំណត់​ទីតាំង","left":"ខាងឆ្វង","right":"ខាងស្តាំ","center":"កណ្តាល","justify":"តំរឹមសងខាង","alignLeft":"តម្រឹម​ឆ្វេង","alignRight":"តម្រឹម​ស្ដាំ","alignCenter":"Align Center","alignTop":"ខាងលើ","alignMiddle":"កណ្តាល","alignBottom":"ខាងក្រោម","alignNone":"គ្មាន","invalidValue":"តម្លៃ​មិន​ត្រឹម​ត្រូវ។","invalidHeight":"តម្លៃ​កំពស់​ត្រូវ​តែ​ជា​លេខ។","invalidWidth":"តម្លៃ​ទទឹង​ត្រូវ​តែ​ជា​លេខ។","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"លុបថយក្រោយ","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"ចុង","36":"ផ្ទះ","46":"លុប","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/ko.js b/core/assets/vendor/ckeditor/lang/ko.js
index 05cfc6ad37ef..99f651d71ef1 100644
--- a/core/assets/vendor/ckeditor/lang/ko.js
+++ b/core/assets/vendor/ckeditor/lang/ko.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['ko']={"widget":{"move":"움직이려면 클릭 후 드래그 하세요","label":"%1 위젯"},"undo":{"redo":"다시 실행","undo":"실행 취소"},"toolbar":{"toolbarCollapse":"툴바 줄이기","toolbarExpand":"툴바 확장","toolbarGroups":{"document":"문서","clipboard":"클립보드/실행 취소","editing":"편집","forms":"폼","basicstyles":"기본 스타일","paragraph":"단락","links":"링크","insert":"삽입","styles":"스타일","colors":"색상","tools":"도구"},"toolbars":"에디터 툴바"},"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":"첫 행","heightUnit":"height unit","invalidBorder":"테두리 두께는 숫자여야 합니다.","invalidCellPadding":"셀 여백은 0 이상이어야 합니다.","invalidCellSpacing":"셀 간격은 0 이상이어야 합니다.","invalidCols":"열 번호는 0보다 커야 합니다.","invalidHeight":"표 높이는 숫자여야 합니다.","invalidRows":"행 번호는 0보다 커야 합니다.","invalidWidth":"표의 너비는 숫자여야 합니다.","menu":"표 속성","row":{"menu":"행","insertBefore":"위에 행 삽입","insertAfter":"아래에 행 삽입","deleteRow":"행 삭제"},"rows":"행","summary":"요약","title":"표 속성","toolbar":"표","widthPc":"백분율","widthPx":"픽셀","widthUnit":"너비 단위"},"stylescombo":{"label":"스타일","panelTitle":"전체 구성 스타일","panelTitle1":"블록 스타일","panelTitle2":"인라인 스타일","panelTitle3":"객체 스타일"},"specialchar":{"options":"특수문자 옵션","title":"특수문자 선택","toolbar":"특수문자 삽입"},"sourcedialog":{"toolbar":"소스","title":"소스"},"sourcearea":{"toolbar":"소스"},"showblocks":{"toolbar":"블록 보기"},"removeformat":{"toolbar":"형식 지우기"},"pastetext":{"button":"텍스트로 붙여넣기","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"텍스트로 붙여넣기"},"pastefromword":{"confirmCleanup":"붙여 넣을 내용은 MS Word에서 복사 한 것입니다. 붙여 넣기 전에 정리 하시겠습니까?","error":"내부 오류로 붙여 넣은 데이터를 정리 할 수 없습니다.","title":"MS Word 에서 붙여넣기","toolbar":"MS Word 에서 붙여넣기"},"notification":{"closed":"알림이 닫힘."},"maximize":{"maximize":"최대화","minimize":"최소화"},"magicline":{"title":"여기에 단락 삽입"},"list":{"bulletedlist":"순서 없는 목록","numberedlist":"순서 있는 목록"},"language":{"button":"언어 설정","remove":"언어 설정 지우기"},"indent":{"indent":"들여쓰기","outdent":"내어쓰기"},"image2":{"alt":"대체 문자열","btnUpload":"서버로 전송","captioned":"이미지 설명 넣기","captionPlaceholder":"설명","infoTab":"이미지 정보","lockRatio":"비율 유지","menu":"이미지 속성","pathName":"이미지","pathNameCaption":"설명","resetSize":"원래 크기로","resizer":"크기를 조절하려면 클릭 후 드래그 하세요","title":"이미지 속성","uploadTab":"업로드","urlMissing":"이미지 원본 주소(URL)가 없습니다.","altMissing":"대체 문자가 없습니다."},"horizontalrule":{"toolbar":"가로 줄 삽입"},"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":"정형 문단"},"filetools":{"loadError":"파일을 읽는 중 오류가 발생했습니다.","networkError":"파일 업로드 중 네트워크 오류가 발생했습니다.","httpError404":"파일 업로드중 HTTP 오류가 발생했습니다 (404: 파일 찾을수 없음).","httpError403":"파일 업로드중 HTTP 오류가 발생했습니다 (403: 권한 없음).","httpError":"파일 업로드중 HTTP 오류가 발생했습니다 (오류 코드 %1).","noUrlError":"업로드 주소가 정의되어 있지 않습니다.","responseError":"잘못된 서버 응답."},"elementspath":{"eleLabel":"요소 경로","eleTitle":"%1 요소"},"contextmenu":{"options":"컨텍스트 메뉴 옵션"},"clipboard":{"copy":"복사","copyError":"브라우저의 보안설정 때문에 복사할 수 없습니다. 키보드(Ctrl/Cmd+C)를 이용해서 복사하십시오.","cut":"잘라내기","cutError":"브라우저의 보안설정 때문에 잘라내기 기능을 실행할 수 없습니다. 키보드(Ctrl/Cmd+X)를 이용해서 잘라내기 하십시오","paste":"붙여넣기","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"붙여넣기 범위","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"인용 단락"},"basicstyles":{"bold":"굵게","italic":"기울임꼴","strike":"취소선","subscript":"아래 첨자","superscript":"위 첨자","underline":"밑줄"},"about":{"copy":"저작권 &copy; $1 . 판권 소유.","dlgTitle":"CKEditor 에 대하여","moreInfo":"라이선스에 대한 정보는 저희 웹 사이트를 참고하세요:"},"editor":"리치 텍스트 편집기","editorPanel":"리치 텍스트 편집기 패널","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":"스타일 시트 클래스","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":"정렬","left":"왼쪽","right":"오른쪽","center":"중앙","justify":"양쪽 정렬","alignLeft":"왼쪽 정렬","alignRight":"오른쪽 정렬","alignCenter":"중앙 정렬","alignTop":"위","alignMiddle":"중간","alignBottom":"아래","alignNone":"기본","invalidValue":"잘못된 값.","invalidHeight":"높이는 숫자여야 합니다.","invalidWidth":"넓이는 숫자여야 합니다.","invalidLength":"\"%1\" 값은 유효한 측정단위(%2)를 포함하거나 포함하지 않은 양수여야 합니다.","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>","keyboard":{"8":"백스페이스","13":"엔터","16":"시프트","17":"컨트롤","18":"알트","32":"간격","35":"엔드","36":"홈","46":"딜리트","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"커맨드"},"keyboardShortcut":"키보드 단축키","optionDefault":"기본값"}};
\ No newline at end of file
+CKEDITOR.lang['ko']={"widget":{"move":"움직이려면 클릭 후 드래그 하세요","label":"%1 위젯"},"undo":{"redo":"다시 실행","undo":"실행 취소"},"toolbar":{"toolbarCollapse":"툴바 줄이기","toolbarExpand":"툴바 확장","toolbarGroups":{"document":"문서","clipboard":"클립보드/실행 취소","editing":"편집","forms":"폼","basicstyles":"기본 스타일","paragraph":"단락","links":"링크","insert":"삽입","styles":"스타일","colors":"색상","tools":"도구"},"toolbars":"에디터 툴바"},"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":"첫 행","heightUnit":"height unit","invalidBorder":"테두리 두께는 숫자여야 합니다.","invalidCellPadding":"셀 여백은 0 이상이어야 합니다.","invalidCellSpacing":"셀 간격은 0 이상이어야 합니다.","invalidCols":"열 번호는 0보다 커야 합니다.","invalidHeight":"표 높이는 숫자여야 합니다.","invalidRows":"행 번호는 0보다 커야 합니다.","invalidWidth":"표의 너비는 숫자여야 합니다.","menu":"표 속성","row":{"menu":"행","insertBefore":"위에 행 삽입","insertAfter":"아래에 행 삽입","deleteRow":"행 삭제"},"rows":"행","summary":"요약","title":"표 속성","toolbar":"표","widthPc":"백분율","widthPx":"픽셀","widthUnit":"너비 단위"},"stylescombo":{"label":"스타일","panelTitle":"전체 구성 스타일","panelTitle1":"블록 스타일","panelTitle2":"인라인 스타일","panelTitle3":"객체 스타일"},"specialchar":{"options":"특수문자 옵션","title":"특수문자 선택","toolbar":"특수문자 삽입"},"sourcedialog":{"toolbar":"소스","title":"소스"},"sourcearea":{"toolbar":"소스"},"showblocks":{"toolbar":"블록 보기"},"removeformat":{"toolbar":"형식 지우기"},"pastetext":{"button":"텍스트로 붙여넣기","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"텍스트로 붙여넣기"},"pastefromword":{"confirmCleanup":"붙여 넣을 내용은 MS Word에서 복사 한 것입니다. 붙여 넣기 전에 정리 하시겠습니까?","error":"내부 오류로 붙여 넣은 데이터를 정리 할 수 없습니다.","title":"MS Word 에서 붙여넣기","toolbar":"MS Word 에서 붙여넣기"},"notification":{"closed":"알림이 닫힘."},"maximize":{"maximize":"최대화","minimize":"최소화"},"magicline":{"title":"여기에 단락 삽입"},"list":{"bulletedlist":"순서 없는 목록","numberedlist":"순서 있는 목록"},"language":{"button":"언어 설정","remove":"언어 설정 지우기"},"indent":{"indent":"들여쓰기","outdent":"내어쓰기"},"image2":{"alt":"대체 문자열","btnUpload":"서버로 전송","captioned":"이미지 설명 넣기","captionPlaceholder":"설명","infoTab":"이미지 정보","lockRatio":"비율 유지","menu":"이미지 속성","pathName":"이미지","pathNameCaption":"설명","resetSize":"원래 크기로","resizer":"크기를 조절하려면 클릭 후 드래그 하세요","title":"이미지 속성","uploadTab":"업로드","urlMissing":"이미지 원본 주소(URL)가 없습니다.","altMissing":"대체 문자가 없습니다."},"horizontalrule":{"toolbar":"가로 줄 삽입"},"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":"정형 문단"},"filetools":{"loadError":"파일을 읽는 중 오류가 발생했습니다.","networkError":"파일 업로드 중 네트워크 오류가 발생했습니다.","httpError404":"파일 업로드중 HTTP 오류가 발생했습니다 (404: 파일 찾을수 없음).","httpError403":"파일 업로드중 HTTP 오류가 발생했습니다 (403: 권한 없음).","httpError":"파일 업로드중 HTTP 오류가 발생했습니다 (오류 코드 %1).","noUrlError":"업로드 주소가 정의되어 있지 않습니다.","responseError":"잘못된 서버 응답."},"elementspath":{"eleLabel":"요소 경로","eleTitle":"%1 요소"},"contextmenu":{"options":"컨텍스트 메뉴 옵션"},"clipboard":{"copy":"복사","copyError":"브라우저의 보안설정 때문에 복사할 수 없습니다. 키보드(Ctrl/Cmd+C)를 이용해서 복사하십시오.","cut":"잘라내기","cutError":"브라우저의 보안설정 때문에 잘라내기 기능을 실행할 수 없습니다. 키보드(Ctrl/Cmd+X)를 이용해서 잘라내기 하십시오","paste":"붙여넣기","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"붙여넣기 범위","pasteMsg":"Paste your content inside the area below and press OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"인용 단락"},"basicstyles":{"bold":"굵게","italic":"기울임꼴","strike":"취소선","subscript":"아래 첨자","superscript":"위 첨자","underline":"밑줄"},"about":{"copy":"저작권 &copy; $1 . 판권 소유.","dlgTitle":"CKEditor 에 대하여","moreInfo":"라이선스에 대한 정보는 저희 웹 사이트를 참고하세요:"},"editor":"리치 텍스트 편집기","editorPanel":"리치 텍스트 편집기 패널","common":{"editorHelp":"도움이 필요하면 ALT 0 을 누르세요","browseServer":"서버 탐색","url":"URL","protocol":"프로토콜","upload":"업로드","uploadSubmit":"서버로 전송","image":"이미지","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":"정렬","left":"왼쪽","right":"오른쪽","center":"중앙","justify":"양쪽 정렬","alignLeft":"왼쪽 정렬","alignRight":"오른쪽 정렬","alignCenter":"중앙 정렬","alignTop":"위","alignMiddle":"중간","alignBottom":"아래","alignNone":"기본","invalidValue":"잘못된 값.","invalidHeight":"높이는 숫자여야 합니다.","invalidWidth":"넓이는 숫자여야 합니다.","invalidLength":"\"%1\" 값은 유효한 측정단위(%2)를 포함하거나 포함하지 않은 양수여야 합니다.","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>","keyboard":{"8":"백스페이스","13":"엔터","16":"시프트","17":"컨트롤","18":"알트","32":"간격","35":"엔드","36":"홈","46":"딜리트","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"커맨드"},"keyboardShortcut":"키보드 단축키","optionDefault":"기본값"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/ku.js b/core/assets/vendor/ckeditor/lang/ku.js
index 95bd51683b8d..c22a8f595269 100644
--- a/core/assets/vendor/ckeditor/lang/ku.js
+++ b/core/assets/vendor/ckeditor/lang/ku.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['ku']={"widget":{"move":"کرتەبکە و ڕایبکێشە بۆ جوڵاندن","label":"%1 ویجێت"},"undo":{"redo":"هەڵگەڕاندنەوە","undo":"پووچکردنەوە"},"toolbar":{"toolbarCollapse":"شاردنەوی هێڵی تووڵامراز","toolbarExpand":"نیشاندانی هێڵی تووڵامراز","toolbarGroups":{"document":"پەڕه","clipboard":"بڕین/پووچکردنەوە","editing":"چاکسازی","forms":"داڕشتە","basicstyles":"شێوازی بنچینەیی","paragraph":"بڕگە","links":"بەستەر","insert":"خستنە ناو","styles":"شێواز","colors":"ڕەنگەکان","tools":"ئامرازەکان"},"toolbars":"تووڵامرازی دەسکاریکەر"},"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":"یەکەم ڕیز","heightUnit":"یەکەی بەرز","invalidBorder":"ژمارەی پەراوێز دەبێت تەنها ژماره بێت.","invalidCellPadding":"ناوپۆشی خانه دەبێت ژمارەکی درووست بێت.","invalidCellSpacing":"بۆشایی خانه دەبێت ژمارەکی درووست بێت.","invalidCols":"ژمارەی ئەستوونی دەبێت گەورەتر بێت لەژمارەی 0.","invalidHeight":"درێژی خشته دهبێت تهنها ژماره بێت.","invalidRows":"ژمارەی ڕیز دەبێت گەورەتر بێت لەژمارەی 0.","invalidWidth":"پانی خشته دەبێت تەنها ژماره بێت.","menu":"خاسیەتی خشتە","row":{"menu":"ڕیز","insertBefore":"دانانی ڕیز لەپێش","insertAfter":"دانانی ڕیز لەپاش","deleteRow":"سڕینەوەی ڕیز"},"rows":"ڕیز","summary":"کورتە","title":"خاسیەتی خشتە","toolbar":"خشتە","widthPc":"لەسەدا","widthPx":"وێنەخاڵ - پیکسل","widthUnit":"پانی یەکە"},"stylescombo":{"label":"شێواز","panelTitle":"شێوازی ڕازاندنەوە","panelTitle1":"شێوازی خشت","panelTitle2":"شێوازی ناوهێڵ","panelTitle3":"شێوازی بەرکار"},"specialchar":{"options":"هەڵبژاردەی نووسەی تایبەتی","title":"هەڵبژاردنی نووسەی تایبەتی","toolbar":"دانانی نووسەی تایبەتی"},"sourcedialog":{"toolbar":"سەرچاوە","title":"سەرچاوە"},"sourcearea":{"toolbar":"سەرچاوە"},"showblocks":{"toolbar":"نیشاندانی بەربەستەکان"},"removeformat":{"toolbar":"لابردنی داڕشتەکە"},"pastetext":{"button":"لکاندنی وەك دەقی ڕوون","pasteNotification":"کلیک بکە لەسەر %1 بۆ لکاندنی. وێبگەڕەکەت پشتیوانی لکاندن ناکات بە دوگمەی تولامراز یان ئامرازی ناوەڕۆکی لیستە - کلیکی دەستی ڕاست","title":"لکاندنی وەك دەقی ڕوون"},"pastefromword":{"confirmCleanup":"ئەم دەقەی بەتەمای بیلکێنی پێدەچێت له word هێنرابێت. دەتەوێت پاکی بکەیوه پێش ئەوەی بیلکێنی؟","error":"هیچ ڕێگەیەك نەبوو لەلکاندنی دەقەکه بەهۆی هەڵەیەکی ناوەخۆیی","title":"لکاندنی لەلایەن Word","toolbar":"لکاندنی لەڕێی Word"},"notification":{"closed":"ئاگادارکەرەوەکە داخرا."},"maximize":{"maximize":"ئەوپەڕی گەورەیی","minimize":"ئەوپەڕی بچووکی"},"magicline":{"title":"بڕگە لێرە دابنێ"},"list":{"bulletedlist":"دانان/لابردنی خاڵی لیست","numberedlist":"دانان/لابردنی ژمارەی لیست"},"language":{"button":"جێگیرکردنی زمان","remove":"لابردنی زمان"},"indent":{"indent":"زیادکردنی بۆشایی","outdent":"کەمکردنەوەی بۆشایی"},"image2":{"alt":"جێگرەوەی دەق","btnUpload":"ناردنی بۆ ڕاژه","captioned":"وێنەی بەسەردێر","captionPlaceholder":"سەردێر","infoTab":"زانیاری وێنه","lockRatio":"داخستنی ڕێژه","menu":"خاسیەتی وێنه","pathName":"وێنە","pathNameCaption":"سەردێر","resetSize":"ڕێکخستنەوەی قەباره","resizer":"کرتەبکە و ڕایبکێشە بۆ قەبارە گۆڕین","title":"خاسیەتی وێنه","uploadTab":"بارکردن","urlMissing":"سەرچاوەی بەستەری وێنه بزره","altMissing":"جێگرەوەی دەق لەدەست چووە."},"horizontalrule":{"toolbar":"دانانی هێلی ئاسۆیی"},"format":{"label":"ڕازاندنەوە","panelTitle":"بەشی ڕازاندنەوه","tag_address":"ناونیشان","tag_div":"(DIV)-ی ئاسایی","tag_h1":"سەرنووسەی ١","tag_h2":"سەرنووسەی ٢","tag_h3":"سەرنووسەی ٣","tag_h4":"سەرنووسەی ٤","tag_h5":"سەرنووسەی ٥","tag_h6":"سەرنووسەی ٦","tag_p":"ئاسایی","tag_pre":"شێوازکراو"},"filetools":{"loadError":"هەڵەیەک ڕوویدا لە ماوەی خوێندنەوەی پەڕگەکە.","networkError":"هەڵەیەکی ڕایەڵە ڕوویدا لە ماوەی بارکردنی پەڕگەکە.","httpError404":"هەڵەیەک ڕوویدا لە ماوەی بارکردنی پەڕگەکە (404: پەڕگەکە نەدۆزراوە).","httpError403":"هەڵەیەک ڕوویدا لە ماوەی بارکردنی پەڕگەکە  (403: قەدەغەکراو).","httpError":"هەڵەیەک ڕوویدا لە ماوەی بارکردنی پەڕگەکە (دۆخی هەڵە: %1).","noUrlError":"بەستەری پەڕگەکە پێناسە نەکراوە.","responseError":"وەڵامێکی نادروستی سێرڤەر."},"elementspath":{"eleLabel":"ڕێڕەوی توخمەکان","eleTitle":"%1 توخم"},"contextmenu":{"options":"هەڵبژاردەی لیستەی کلیکی دەستی ڕاست"},"clipboard":{"copy":"لەبەرگرتنەوە","copyError":"پارێزی وێبگەڕەکەت ڕێگەنادات بەسەرنووسەکە لە لکاندنی دەقی خۆکارارنە. تکایە لەبری ئەمە ئەم فەرمانە بەکاربهێنە بەداگرتنی کلیلی (Ctrl/Cmd+C).","cut":"بڕین","cutError":"پارێزی وێبگەڕەکەت ڕێگەنادات بە سەرنووسەکە لەبڕینی خۆکارانە. تکایە لەبری ئەمە ئەم فەرمانە بەکاربهێنە بەداگرتنی کلیلی (Ctrl/Cmd+X).","paste":"لکاندن","pasteNotification":"کلیک بکە لەسەر %1 بۆ لکاندنی. وێبگەڕەکەت پشتیوانی لکاندن ناکات بە دوگمەی تولامراز یان ئامرازی ناوەڕۆکی لیستە -  کلیکی دەستی ڕاست. ","pasteArea":"ناوچەی لکاندن","pasteMsg":"ناوەڕۆکەکەت لەم پانتایی خوارەوە بلکێنە"},"blockquote":{"toolbar":"بەربەستکردنی ووتەی وەرگیراو"},"basicstyles":{"bold":"قەڵەو","italic":"لار","strike":"لێدان","subscript":"ژێرنووس","superscript":"سەرنووس","underline":"ژێرهێڵ"},"about":{"copy":"مافی لەبەرگەرتنەوەی &copy; $1. گشتی پارێزراوه. ورگێڕانی بۆ کوردی لەلایەن هۆژە کۆیی.","dlgTitle":"دەربارەی CKEditor 4","moreInfo":"بۆ زانیاری زیاتر دەربارەی مۆڵەتی بەکارهێنان، تکایه سەردانی ماڵپەڕەکەمان بکه:"},"editor":"سەرنووسەی دەقی تەواو","editorPanel":"بڕگەی سەرنووسەی دەقی تەواو","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":"ڕێککەرەوە","left":"چەپ","right":"ڕاست","center":"ناوەڕاست","justify":"هاوستوونی","alignLeft":"بەهێڵ کردنی چەپ","alignRight":"بەهێڵ کردنی ڕاست","alignCenter":"بەهێڵ کردنی ناوەڕاست","alignTop":"سەرەوە","alignMiddle":"ناوەند","alignBottom":"ژێرەوە","alignNone":"هیچ","invalidValue":"نرخێکی نادرووست.","invalidHeight":"درێژی دەبێت ژمارە بێت.","invalidWidth":"پانی دەبێت ژمارە بێت.","invalidLength":"ئەم نرخەی دراوە بۆ خانەی \"%1\" دەبێت ژمارەکی درووست لەگەڵ بێت یان بە بێ پێوانەی یەکەی ( %2)","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"فەرمان"},"keyboardShortcut":"کورتبڕی تەختەکلیل","optionDefault":"هەمیشەیی"}};
\ No newline at end of file
+CKEDITOR.lang['ku']={"widget":{"move":"کرتەبکە و ڕایبکێشە بۆ جوڵاندن","label":"%1 ویجێت"},"undo":{"redo":"هەڵگەڕاندنەوە","undo":"پووچکردنەوە"},"toolbar":{"toolbarCollapse":"شاردنەوی هێڵی تووڵامراز","toolbarExpand":"نیشاندانی هێڵی تووڵامراز","toolbarGroups":{"document":"پەڕه","clipboard":"بڕین/پووچکردنەوە","editing":"چاکسازی","forms":"داڕشتە","basicstyles":"شێوازی بنچینەیی","paragraph":"بڕگە","links":"بەستەر","insert":"خستنە ناو","styles":"شێواز","colors":"ڕەنگەکان","tools":"ئامرازەکان"},"toolbars":"تووڵامرازی دەسکاریکەر"},"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":"یەکەم ڕیز","heightUnit":"یەکەی بەرز","invalidBorder":"ژمارەی پەراوێز دەبێت تەنها ژماره بێت.","invalidCellPadding":"ناوپۆشی خانه دەبێت ژمارەکی درووست بێت.","invalidCellSpacing":"بۆشایی خانه دەبێت ژمارەکی درووست بێت.","invalidCols":"ژمارەی ئەستوونی دەبێت گەورەتر بێت لەژمارەی 0.","invalidHeight":"درێژی خشته دهبێت تهنها ژماره بێت.","invalidRows":"ژمارەی ڕیز دەبێت گەورەتر بێت لەژمارەی 0.","invalidWidth":"پانی خشته دەبێت تەنها ژماره بێت.","menu":"خاسیەتی خشتە","row":{"menu":"ڕیز","insertBefore":"دانانی ڕیز لەپێش","insertAfter":"دانانی ڕیز لەپاش","deleteRow":"سڕینەوەی ڕیز"},"rows":"ڕیز","summary":"کورتە","title":"خاسیەتی خشتە","toolbar":"خشتە","widthPc":"لەسەدا","widthPx":"وێنەخاڵ - پیکسل","widthUnit":"پانی یەکە"},"stylescombo":{"label":"شێواز","panelTitle":"شێوازی ڕازاندنەوە","panelTitle1":"شێوازی خشت","panelTitle2":"شێوازی ناوهێڵ","panelTitle3":"شێوازی بەرکار"},"specialchar":{"options":"هەڵبژاردەی نووسەی تایبەتی","title":"هەڵبژاردنی نووسەی تایبەتی","toolbar":"دانانی نووسەی تایبەتی"},"sourcedialog":{"toolbar":"سەرچاوە","title":"سەرچاوە"},"sourcearea":{"toolbar":"سەرچاوە"},"showblocks":{"toolbar":"نیشاندانی بەربەستەکان"},"removeformat":{"toolbar":"لابردنی داڕشتەکە"},"pastetext":{"button":"لکاندنی وەك دەقی ڕوون","pasteNotification":"کلیک بکە لەسەر %1 بۆ لکاندنی. وێبگەڕەکەت پشتیوانی لکاندن ناکات بە دوگمەی تولامراز یان ئامرازی ناوەڕۆکی لیستە - کلیکی دەستی ڕاست","title":"لکاندنی وەك دەقی ڕوون"},"pastefromword":{"confirmCleanup":"ئەم دەقەی بەتەمای بیلکێنی پێدەچێت له word هێنرابێت. دەتەوێت پاکی بکەیوه پێش ئەوەی بیلکێنی؟","error":"هیچ ڕێگەیەك نەبوو لەلکاندنی دەقەکه بەهۆی هەڵەیەکی ناوەخۆیی","title":"لکاندنی لەلایەن Word","toolbar":"لکاندنی لەڕێی Word"},"notification":{"closed":"ئاگادارکەرەوەکە داخرا."},"maximize":{"maximize":"ئەوپەڕی گەورەیی","minimize":"ئەوپەڕی بچووکی"},"magicline":{"title":"بڕگە لێرە دابنێ"},"list":{"bulletedlist":"دانان/لابردنی خاڵی لیست","numberedlist":"دانان/لابردنی ژمارەی لیست"},"language":{"button":"جێگیرکردنی زمان","remove":"لابردنی زمان"},"indent":{"indent":"زیادکردنی بۆشایی","outdent":"کەمکردنەوەی بۆشایی"},"image2":{"alt":"جێگرەوەی دەق","btnUpload":"ناردنی بۆ ڕاژه","captioned":"وێنەی بەسەردێر","captionPlaceholder":"سەردێر","infoTab":"زانیاری وێنه","lockRatio":"داخستنی ڕێژه","menu":"خاسیەتی وێنه","pathName":"وێنە","pathNameCaption":"سەردێر","resetSize":"ڕێکخستنەوەی قەباره","resizer":"کرتەبکە و ڕایبکێشە بۆ قەبارە گۆڕین","title":"خاسیەتی وێنه","uploadTab":"بارکردن","urlMissing":"سەرچاوەی بەستەری وێنه بزره","altMissing":"جێگرەوەی دەق لەدەست چووە."},"horizontalrule":{"toolbar":"دانانی هێلی ئاسۆیی"},"format":{"label":"ڕازاندنەوە","panelTitle":"بەشی ڕازاندنەوه","tag_address":"ناونیشان","tag_div":"(DIV)-ی ئاسایی","tag_h1":"سەرنووسەی ١","tag_h2":"سەرنووسەی ٢","tag_h3":"سەرنووسەی ٣","tag_h4":"سەرنووسەی ٤","tag_h5":"سەرنووسەی ٥","tag_h6":"سەرنووسەی ٦","tag_p":"ئاسایی","tag_pre":"شێوازکراو"},"filetools":{"loadError":"هەڵەیەک ڕوویدا لە ماوەی خوێندنەوەی پەڕگەکە.","networkError":"هەڵەیەکی ڕایەڵە ڕوویدا لە ماوەی بارکردنی پەڕگەکە.","httpError404":"هەڵەیەک ڕوویدا لە ماوەی بارکردنی پەڕگەکە (404: پەڕگەکە نەدۆزراوە).","httpError403":"هەڵەیەک ڕوویدا لە ماوەی بارکردنی پەڕگەکە  (403: قەدەغەکراو).","httpError":"هەڵەیەک ڕوویدا لە ماوەی بارکردنی پەڕگەکە (دۆخی هەڵە: %1).","noUrlError":"بەستەری پەڕگەکە پێناسە نەکراوە.","responseError":"وەڵامێکی نادروستی سێرڤەر."},"elementspath":{"eleLabel":"ڕێڕەوی توخمەکان","eleTitle":"%1 توخم"},"contextmenu":{"options":"هەڵبژاردەی لیستەی کلیکی دەستی ڕاست"},"clipboard":{"copy":"لەبەرگرتنەوە","copyError":"پارێزی وێبگەڕەکەت ڕێگەنادات بەسەرنووسەکە لە لکاندنی دەقی خۆکارارنە. تکایە لەبری ئەمە ئەم فەرمانە بەکاربهێنە بەداگرتنی کلیلی (Ctrl/Cmd+C).","cut":"بڕین","cutError":"پارێزی وێبگەڕەکەت ڕێگەنادات بە سەرنووسەکە لەبڕینی خۆکارانە. تکایە لەبری ئەمە ئەم فەرمانە بەکاربهێنە بەداگرتنی کلیلی (Ctrl/Cmd+X).","paste":"لکاندن","pasteNotification":"کلیک بکە لەسەر %1 بۆ لکاندنی. وێبگەڕەکەت پشتیوانی لکاندن ناکات بە دوگمەی تولامراز یان ئامرازی ناوەڕۆکی لیستە -  کلیکی دەستی ڕاست. ","pasteArea":"ناوچەی لکاندن","pasteMsg":"ناوەڕۆکەکەت لەم پانتایی خوارەوە بلکێنە","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"بەربەستکردنی ووتەی وەرگیراو"},"basicstyles":{"bold":"قەڵەو","italic":"لار","strike":"لێدان","subscript":"ژێرنووس","superscript":"سەرنووس","underline":"ژێرهێڵ"},"about":{"copy":"مافی لەبەرگەرتنەوەی &copy; $1. گشتی پارێزراوه. ورگێڕانی بۆ کوردی لەلایەن هۆژە کۆیی.","dlgTitle":"دەربارەی CKEditor 4","moreInfo":"بۆ زانیاری زیاتر دەربارەی مۆڵەتی بەکارهێنان، تکایه سەردانی ماڵپەڕەکەمان بکه:"},"editor":"سەرنووسەی دەقی تەواو","editorPanel":"بڕگەی سەرنووسەی دەقی تەواو","common":{"editorHelp":"کلیکی ALT لەگەڵ 0 بکه‌ بۆ یارمەتی","browseServer":"هێنانی ڕاژە","url":"ناونیشانی بەستەر","protocol":"پڕۆتۆکۆڵ","upload":"بارکردن","uploadSubmit":"ناردنی بۆ ڕاژە","image":"وێنە","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":"ڕێککەرەوە","left":"چەپ","right":"ڕاست","center":"ناوەڕاست","justify":"هاوستوونی","alignLeft":"بەهێڵ کردنی چەپ","alignRight":"بەهێڵ کردنی ڕاست","alignCenter":"بەهێڵ کردنی ناوەڕاست","alignTop":"سەرەوە","alignMiddle":"ناوەند","alignBottom":"ژێرەوە","alignNone":"هیچ","invalidValue":"نرخێکی نادرووست.","invalidHeight":"درێژی دەبێت ژمارە بێت.","invalidWidth":"پانی دەبێت ژمارە بێت.","invalidLength":"ئەم نرخەی دراوە بۆ خانەی \"%1\" دەبێت ژمارەکی درووست لەگەڵ بێت یان بە بێ پێوانەی یەکەی ( %2)","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"فەرمان"},"keyboardShortcut":"کورتبڕی تەختەکلیل","optionDefault":"هەمیشەیی"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/lt.js b/core/assets/vendor/ckeditor/lang/lt.js
index 0b1c65d2c8cd..efebb03917c1 100644
--- a/core/assets/vendor/ckeditor/lang/lt.js
+++ b/core/assets/vendor/ckeditor/lang/lt.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['lt']={"widget":{"move":"Paspauskite ir tempkite kad perkeltumėte","label":"%1 valdiklis"},"undo":{"redo":"Atstatyti","undo":"Atšaukti"},"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"},"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":"Tarpas 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ė","heightUnit":"height unit","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"},"stylescombo":{"label":"Stilius","panelTitle":"Stilių formatavimas","panelTitle1":"Blokų stiliai","panelTitle2":"Vidiniai stiliai","panelTitle3":"Objektų stiliai"},"specialchar":{"options":"Specialaus simbolio nustatymai","title":"Pasirinkite specialų simbolį","toolbar":"Įterpti specialų simbolį"},"sourcedialog":{"toolbar":"Šaltinis","title":"Šaltinis"},"sourcearea":{"toolbar":"Šaltinis"},"showblocks":{"toolbar":"Rodyti blokus"},"removeformat":{"toolbar":"Panaikinti formatą"},"pastetext":{"button":"Įdėti kaip gryną tekstą","pasteNotification":"Spauskite %1 kad įklijuotumėte. Jūsų naršyklė nepalaiko įklijavimo mygtuko arba kontekstinio meniu šiam veiksmui.","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"},"notification":{"closed":"Pranešimas uždarytas."},"maximize":{"maximize":"Išdidinti","minimize":"Sumažinti"},"magicline":{"title":"Įterpti pastraipą čia"},"list":{"bulletedlist":"Suženklintas sąrašas","numberedlist":"Numeruotas sąrašas"},"language":{"button":"Nustatyti kalbą","remove":"Pašalinti kalbą"},"indent":{"indent":"Padidinti įtrauką","outdent":"Sumažinti įtrauką"},"image2":{"alt":"Alternatyvus Tekstas","btnUpload":"Siųsti į serverį","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Vaizdo informacija","lockRatio":"Išlaikyti proporciją","menu":"Vaizdo savybės","pathName":"image","pathNameCaption":"caption","resetSize":"Atstatyti dydį","resizer":"Click and drag to resize","title":"Vaizdo savybės","uploadTab":"Siųsti","urlMissing":"Paveiksliuko nuorodos nėra.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Įterpti horizontalią liniją"},"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"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elemento kelias","eleTitle":"%1 elementas"},"contextmenu":{"options":"Kontekstinio meniu parametrai"},"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","pasteNotification":"Spauskite %1 kad įkliuotumėte. Jūsų naršyklė nepalaiko įklijavimo paspaudus mygtuką arba kontekstinio menių galimybės.","pasteArea":"Įkelti dalį","pasteMsg":"Įklijuokite savo turinį į žemiau esantį lauką ir paspauskite OK."},"blockquote":{"toolbar":"Citata"},"basicstyles":{"bold":"Pusjuodis","italic":"Kursyvas","strike":"Perbrauktas","subscript":"Apatinis indeksas","superscript":"Viršutinis indeksas","underline":"Pabrauktas"},"about":{"copy":"Copyright &copy; $1. Visos teiss saugomos.","dlgTitle":"Apie CKEditor 4","moreInfo":"Dėl licencijavimo apsilankykite mūsų svetainėje:"},"editor":"Pilnas redaktorius","editorPanel":"Pilno redagtoriaus skydelis","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","left":"Kairę","right":"Dešinę","center":"Centrą","justify":"Lygiuoti abi puses","alignLeft":"Lygiuoti kairę","alignRight":"Lygiuoti dešinę","alignCenter":"Align Center","alignTop":"Viršūnę","alignMiddle":"Vidurį","alignBottom":"Apačią","alignNone":"Niekas","invalidValue":"Neteisinga reikšmė.","invalidHeight":"Aukštis turi būti nurodytas skaičiais.","invalidWidth":"Plotis turi būti nurodytas skaičiais.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Tarpas","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Spartusis klavišas","optionDefault":"Numatytasis"}};
\ No newline at end of file
+CKEDITOR.lang['lt']={"widget":{"move":"Paspauskite ir tempkite kad perkeltumėte","label":"%1 valdiklis"},"undo":{"redo":"Atstatyti","undo":"Atšaukti"},"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"},"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":"Tarpas 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ė","heightUnit":"height unit","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"},"stylescombo":{"label":"Stilius","panelTitle":"Stilių formatavimas","panelTitle1":"Blokų stiliai","panelTitle2":"Vidiniai stiliai","panelTitle3":"Objektų stiliai"},"specialchar":{"options":"Specialaus simbolio nustatymai","title":"Pasirinkite specialų simbolį","toolbar":"Įterpti specialų simbolį"},"sourcedialog":{"toolbar":"Šaltinis","title":"Šaltinis"},"sourcearea":{"toolbar":"Šaltinis"},"showblocks":{"toolbar":"Rodyti blokus"},"removeformat":{"toolbar":"Panaikinti formatą"},"pastetext":{"button":"Įdėti kaip gryną tekstą","pasteNotification":"Spauskite %1 kad įklijuotumėte. Jūsų naršyklė nepalaiko įklijavimo mygtuko arba kontekstinio meniu šiam veiksmui.","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"},"notification":{"closed":"Pranešimas uždarytas."},"maximize":{"maximize":"Išdidinti","minimize":"Sumažinti"},"magicline":{"title":"Įterpti pastraipą čia"},"list":{"bulletedlist":"Suženklintas sąrašas","numberedlist":"Numeruotas sąrašas"},"language":{"button":"Nustatyti kalbą","remove":"Pašalinti kalbą"},"indent":{"indent":"Padidinti įtrauką","outdent":"Sumažinti įtrauką"},"image2":{"alt":"Alternatyvus Tekstas","btnUpload":"Siųsti į serverį","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Vaizdo informacija","lockRatio":"Išlaikyti proporciją","menu":"Vaizdo savybės","pathName":"image","pathNameCaption":"caption","resetSize":"Atstatyti dydį","resizer":"Click and drag to resize","title":"Vaizdo savybės","uploadTab":"Siųsti","urlMissing":"Paveiksliuko nuorodos nėra.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Įterpti horizontalią liniją"},"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"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elemento kelias","eleTitle":"%1 elementas"},"contextmenu":{"options":"Kontekstinio meniu parametrai"},"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","pasteNotification":"Spauskite %1 kad įkliuotumėte. Jūsų naršyklė nepalaiko įklijavimo paspaudus mygtuką arba kontekstinio menių galimybės.","pasteArea":"Įkelti dalį","pasteMsg":"Įklijuokite savo turinį į žemiau esantį lauką ir paspauskite OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Citata"},"basicstyles":{"bold":"Pusjuodis","italic":"Kursyvas","strike":"Perbrauktas","subscript":"Apatinis indeksas","superscript":"Viršutinis indeksas","underline":"Pabrauktas"},"about":{"copy":"Copyright &copy; $1. Visos teiss saugomos.","dlgTitle":"Apie CKEditor 4","moreInfo":"Dėl licencijavimo apsilankykite mūsų svetainėje:"},"editor":"Pilnas redaktorius","editorPanel":"Pilno redagtoriaus skydelis","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","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","left":"Kairę","right":"Dešinę","center":"Centrą","justify":"Lygiuoti abi puses","alignLeft":"Lygiuoti kairę","alignRight":"Lygiuoti dešinę","alignCenter":"Align Center","alignTop":"Viršūnę","alignMiddle":"Vidurį","alignBottom":"Apačią","alignNone":"Niekas","invalidValue":"Neteisinga reikšmė.","invalidHeight":"Aukštis turi būti nurodytas skaičiais.","invalidWidth":"Plotis turi būti nurodytas skaičiais.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Tarpas","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Spartusis klavišas","optionDefault":"Numatytasis"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/lv.js b/core/assets/vendor/ckeditor/lang/lv.js
index bb85a376dab3..d2c3f70cd9b3 100644
--- a/core/assets/vendor/ckeditor/lang/lv.js
+++ b/core/assets/vendor/ckeditor/lang/lv.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['lv']={"widget":{"move":"Klikšķina un velc, lai pārvietotu","label":"logrīks %1"},"undo":{"redo":"Atkārtot","undo":"Atcelt"},"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"},"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","heightUnit":"height unit","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"},"stylescombo":{"label":"Stils","panelTitle":"Formatēšanas stili","panelTitle1":"Bloka stili","panelTitle2":"iekļautie stili","panelTitle3":"Objekta stili"},"specialchar":{"options":"Speciālo simbolu uzstādījumi","title":"Ievietot īpašu simbolu","toolbar":"Ievietot speciālo simbolu"},"sourcedialog":{"toolbar":"HTML kods","title":"HTML kods"},"sourcearea":{"toolbar":"HTML kods"},"showblocks":{"toolbar":"Parādīt blokus"},"removeformat":{"toolbar":"Noņemt stilus"},"pastetext":{"button":"Ievietot kā vienkāršu tekstu","pasteNotification":"Nospied %1 lai ielīmētu. Tavs pārlūks neatbalsta ielīmēšanu ar rīkjoslas pogām vai uznirstošās izvēlnes opciju.","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"},"notification":{"closed":"Paziņojums aizvērts."},"maximize":{"maximize":"Maksimizēt","minimize":"Minimizēt"},"magicline":{"title":"Ievietot šeit rindkopu"},"list":{"bulletedlist":"Ievietot/noņemt sarakstu ar aizzīmēm","numberedlist":"Ievietot/noņemt numurētu sarakstu"},"language":{"button":"Uzstādīt valodu","remove":"Noņemt valodu"},"indent":{"indent":"Palielināt atkāpi","outdent":"Samazināt atkāpi"},"image2":{"alt":"Alternatīvais teksts","btnUpload":"Nosūtīt serverim","captioned":"Attēls ar parakstu","captionPlaceholder":"Paraksts","infoTab":"Informācija par attēlu","lockRatio":"Nemainīga Augstuma/Platuma attiecība","menu":"Attēla īpašības","pathName":"Attēls","pathNameCaption":"paraksts","resetSize":"Atjaunot sākotnējo izmēru","resizer":"Noklikšķini un pavelc lai mērogotu","title":"Attēla īpašības","uploadTab":"Augšupielādēt","urlMissing":"Trūkst attēla atrašanās adrese.","altMissing":"Trūkst alternatīvais teksts"},"horizontalrule":{"toolbar":"Ievietot horizontālu Atdalītājsvītru"},"format":{"label":"Formāts","panelTitle":"Rindkopas formāts","tag_address":"Adrese","tag_div":"Parastais (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":"Parastais","tag_pre":"Formatēts"},"filetools":{"loadError":"Radās kļūda nolasot failu.","networkError":"Radās tīkla kļūda, kamēr tika ielādēts fails.","httpError404":"Ielādējot failu, radās HTTP kļūda (404: Fails nav atrasts)","httpError403":"Ielādējot failu, radās HTTP kļūda (403: Pieeja liegta)","httpError":"Ielādējot failu, radās HTTP kļūda (kļūdas statuss: %1)","noUrlError":"Augšupielādes adrese nav norādīta.","responseError":"Nekorekta servera atbilde."},"elementspath":{"eleLabel":"Elementa ceļš","eleTitle":"%1 elements"},"contextmenu":{"options":"Uznirstošās izvēlnes uzstādījumi"},"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","pasteNotification":"Nospied %1 lai ielīmētu. Tavs pārlūks neatbalsta ielīmēšanu ar rīkjoslas pogām vai uznirstošās izvēlnes opciju.","pasteArea":"Ielīmēšanas zona","pasteMsg":"Ielīmē saturu zemāk esošajā laukā un nospied OK."},"blockquote":{"toolbar":"Bloka citāts"},"basicstyles":{"bold":"Treknraksts","italic":"Slīpraksts","strike":"Pārsvītrojums","subscript":"Apakšraksts","superscript":"Augšraksts","underline":"Pasvītrojums"},"about":{"copy":"Kopēšanas tiesības &copy; $1. Visas tiesības rezervētas.","dlgTitle":"Par CKEditor 4","moreInfo":"Informācijai par licenzēšanu apmeklējiet mūsu mājas lapu:"},"editor":"Bagātinātā teksta redaktors","editorPanel":"Bagātinātā teksta redaktora panelis","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","left":"Pa kreisi","right":"Pa labi","center":"Centrēti","justify":"Izlīdzināt malas","alignLeft":"Izlīdzināt pa kreisi","alignRight":"Izlīdzināt pa labi","alignCenter":"Centrēt","alignTop":"Augšā","alignMiddle":"Vertikāli centrēts","alignBottom":"Apakšā","alignNone":"Nekas","invalidValue":"Nekorekta vērtība","invalidHeight":"Augstumam jābūt skaitlim.","invalidWidth":"Platumam jābūt skaitlim","invalidLength":"Laukam \"%1\" norādītajai vērtībai jābūt pozitīvam skaitlim ar vai bez korektām mērvienībām (%2).","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 formā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>","keyboard":{"8":" atkāpšanās taustiņš","13":"Ievadīt","16":"pārslēgšanas taustiņš","17":"vadīšanas taustiņš","18":"alternēšanas taustiņš","32":"Atstarpe","35":"Beigas","36":"Mājup","46":"Dzēst","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Komanda"},"keyboardShortcut":"Klaviatūras saīsne","optionDefault":"Noklusēts"}};
\ No newline at end of file
+CKEDITOR.lang['lv']={"widget":{"move":"Klikšķina un velc, lai pārvietotu","label":"logrīks %1"},"undo":{"redo":"Atkārtot","undo":"Atcelt"},"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"},"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","heightUnit":"height unit","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"},"stylescombo":{"label":"Stils","panelTitle":"Formatēšanas stili","panelTitle1":"Bloka stili","panelTitle2":"iekļautie stili","panelTitle3":"Objekta stili"},"specialchar":{"options":"Speciālo simbolu uzstādījumi","title":"Ievietot īpašu simbolu","toolbar":"Ievietot speciālo simbolu"},"sourcedialog":{"toolbar":"HTML kods","title":"HTML kods"},"sourcearea":{"toolbar":"HTML kods"},"showblocks":{"toolbar":"Parādīt blokus"},"removeformat":{"toolbar":"Noņemt stilus"},"pastetext":{"button":"Ievietot kā vienkāršu tekstu","pasteNotification":"Nospied %1 lai ielīmētu. Tavs pārlūks neatbalsta ielīmēšanu ar rīkjoslas pogām vai uznirstošās izvēlnes opciju.","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"},"notification":{"closed":"Paziņojums aizvērts."},"maximize":{"maximize":"Maksimizēt","minimize":"Minimizēt"},"magicline":{"title":"Ievietot šeit rindkopu"},"list":{"bulletedlist":"Ievietot/noņemt sarakstu ar aizzīmēm","numberedlist":"Ievietot/noņemt numurētu sarakstu"},"language":{"button":"Uzstādīt valodu","remove":"Noņemt valodu"},"indent":{"indent":"Palielināt atkāpi","outdent":"Samazināt atkāpi"},"image2":{"alt":"Alternatīvais teksts","btnUpload":"Nosūtīt serverim","captioned":"Attēls ar parakstu","captionPlaceholder":"Paraksts","infoTab":"Informācija par attēlu","lockRatio":"Nemainīga Augstuma/Platuma attiecība","menu":"Attēla īpašības","pathName":"Attēls","pathNameCaption":"paraksts","resetSize":"Atjaunot sākotnējo izmēru","resizer":"Noklikšķini un pavelc lai mērogotu","title":"Attēla īpašības","uploadTab":"Augšupielādēt","urlMissing":"Trūkst attēla atrašanās adrese.","altMissing":"Trūkst alternatīvais teksts"},"horizontalrule":{"toolbar":"Ievietot horizontālu Atdalītājsvītru"},"format":{"label":"Formāts","panelTitle":"Rindkopas formāts","tag_address":"Adrese","tag_div":"Parastais (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":"Parastais","tag_pre":"Formatēts"},"filetools":{"loadError":"Radās kļūda nolasot failu.","networkError":"Radās tīkla kļūda, kamēr tika ielādēts fails.","httpError404":"Ielādējot failu, radās HTTP kļūda (404: Fails nav atrasts)","httpError403":"Ielādējot failu, radās HTTP kļūda (403: Pieeja liegta)","httpError":"Ielādējot failu, radās HTTP kļūda (kļūdas statuss: %1)","noUrlError":"Augšupielādes adrese nav norādīta.","responseError":"Nekorekta servera atbilde."},"elementspath":{"eleLabel":"Elementa ceļš","eleTitle":"%1 elements"},"contextmenu":{"options":"Uznirstošās izvēlnes uzstādījumi"},"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","pasteNotification":"Nospied %1 lai ielīmētu. Tavs pārlūks neatbalsta ielīmēšanu ar rīkjoslas pogām vai uznirstošās izvēlnes opciju.","pasteArea":"Ielīmēšanas zona","pasteMsg":"Ielīmē saturu zemāk esošajā laukā un nospied OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Bloka citāts"},"basicstyles":{"bold":"Treknraksts","italic":"Slīpraksts","strike":"Pārsvītrojums","subscript":"Apakšraksts","superscript":"Augšraksts","underline":"Pasvītrojums"},"about":{"copy":"Kopēšanas tiesības &copy; $1. Visas tiesības rezervētas.","dlgTitle":"Par CKEditor 4","moreInfo":"Informācijai par licenzēšanu apmeklējiet mūsu mājas lapu:"},"editor":"Bagātinātā teksta redaktors","editorPanel":"Bagātinātā teksta redaktora panelis","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","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","left":"Pa kreisi","right":"Pa labi","center":"Centrēti","justify":"Izlīdzināt malas","alignLeft":"Izlīdzināt pa kreisi","alignRight":"Izlīdzināt pa labi","alignCenter":"Centrēt","alignTop":"Augšā","alignMiddle":"Vertikāli centrēts","alignBottom":"Apakšā","alignNone":"Nekas","invalidValue":"Nekorekta vērtība","invalidHeight":"Augstumam jābūt skaitlim.","invalidWidth":"Platumam jābūt skaitlim","invalidLength":"Laukam \"%1\" norādītajai vērtībai jābūt pozitīvam skaitlim ar vai bez korektām mērvienībām (%2).","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 formā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>","keyboard":{"8":" atkāpšanās taustiņš","13":"Ievadīt","16":"pārslēgšanas taustiņš","17":"vadīšanas taustiņš","18":"alternēšanas taustiņš","32":"Atstarpe","35":"Beigas","36":"Mājup","46":"Dzēst","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Komanda"},"keyboardShortcut":"Klaviatūras saīsne","optionDefault":"Noklusēts"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/mk.js b/core/assets/vendor/ckeditor/lang/mk.js
index 25f90a9cc331..71e986ae71b3 100644
--- a/core/assets/vendor/ckeditor/lang/mk.js
+++ b/core/assets/vendor/ckeditor/lang/mk.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['mk']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"Redo","undo":"Undo"},"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"},"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","heightUnit":"height unit","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"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"sourcedialog":{"toolbar":"Source","title":"Source"},"sourcearea":{"toolbar":"Source"},"showblocks":{"toolbar":"Show Blocks"},"removeformat":{"toolbar":"Remove Format"},"pastetext":{"button":"Paste as plain text","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"image2":{"alt":"Алтернативен текст","btnUpload":"Прикачи на сервер","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Информации за сликата","lockRatio":"Зачувај пропорција","menu":"Својства на сликата","pathName":"image","pathNameCaption":"caption","resetSize":"Ресетирај големина","resizer":"Click and drag to resize","title":"Својства на сликата","uploadTab":"Прикачи","urlMissing":"Недостасува URL-то на сликата.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"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"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Контекст-мени опции"},"clipboard":{"copy":"Копирај (Copy)","copyError":"Опциите за безбедност на вашиот прелистувач не дозволуваат уредувачот автоматски да изврши копирање. Ве молиме употребете ја тастатурата. (Ctrl/Cmd+C)","cut":"Исечи (Cut)","cutError":"Опциите за безбедност на вашиот прелистувач не дозволуваат уредувачот автоматски да изврши сечење. Ве молиме употребете ја тастатурата. (Ctrl/Cmd+C)","paste":"Залепи (Paste)","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Простор за залепување","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Одвоен цитат"},"basicstyles":{"bold":"Здебелено","italic":"Накривено","strike":"Прецртано","subscript":"Долен индекс","superscript":"Горен индекс","underline":"Подвлечено"},"about":{"copy":"Авторски права &copy; $1. Сите права се задржани.","dlgTitle":"За CKEditor 4","moreInfo":"За информации околу лиценцата, ве молиме посетете го нашиот веб-сајт: "},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Притисни ALT 0 за помош","browseServer":"Пребарај низ серверот","url":"URL","protocol":"Протокол","upload":"Прикачи","uploadSubmit":"Прикачи на сервер","image":"Слика","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Поле за текст","textarea":"Големо поле за текст","hiddenField":"Скриено поле","button":"Button","select":"Selection Field","imageButton":"Копче-слика","notSet":"<not set>","id":"Id","name":"Name","langDir":"Насока на јазик","langDirLtr":"Лево кон десно","langDirRtl":"Десно кон лево","langCode":"Код на јазик","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Стил","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":"You have changed some options. Are you sure you want to close the dialog window?","options":"Опции","target":"Target","targetNew":"Нов прозорец (_blank)","targetTop":"Најгорниот прозорец (_top)","targetSelf":"Истиот прозорец (_self)","targetParent":"Прозорец-родител (_parent)","langDirLTR":"Лево кон десно","langDirRTL":"Десно кон лево","styles":"Стил","cssClasses":"Stylesheet Classes","width":"Широчина","height":"Височина","align":"Alignment","left":"Лево","right":"Десно","center":"Во средина","justify":"Justify","alignLeft":"Align Left","alignRight":"Align Right","alignCenter":"Align Center","alignTop":"Горе","alignMiddle":"Средина","alignBottom":"Доле","alignNone":"Никое","invalidValue":"Невалидна вредност","invalidHeight":"Височината мора да биде број.","invalidWidth":"Широчината мора да биде број.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
+CKEDITOR.lang['mk']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"Redo","undo":"Undo"},"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"},"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","heightUnit":"height unit","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"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"sourcedialog":{"toolbar":"Source","title":"Source"},"sourcearea":{"toolbar":"Source"},"showblocks":{"toolbar":"Show Blocks"},"removeformat":{"toolbar":"Remove Format"},"pastetext":{"button":"Paste as plain text","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"image2":{"alt":"Алтернативен текст","btnUpload":"Прикачи на сервер","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Информации за сликата","lockRatio":"Зачувај пропорција","menu":"Својства на сликата","pathName":"image","pathNameCaption":"caption","resetSize":"Ресетирај големина","resizer":"Click and drag to resize","title":"Својства на сликата","uploadTab":"Прикачи","urlMissing":"Недостасува URL-то на сликата.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"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"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Контекст-мени опции"},"clipboard":{"copy":"Копирај (Copy)","copyError":"Опциите за безбедност на вашиот прелистувач не дозволуваат уредувачот автоматски да изврши копирање. Ве молиме употребете ја тастатурата. (Ctrl/Cmd+C)","cut":"Исечи (Cut)","cutError":"Опциите за безбедност на вашиот прелистувач не дозволуваат уредувачот автоматски да изврши сечење. Ве молиме употребете ја тастатурата. (Ctrl/Cmd+C)","paste":"Залепи (Paste)","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Простор за залепување","pasteMsg":"Paste your content inside the area below and press OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Одвоен цитат"},"basicstyles":{"bold":"Здебелено","italic":"Накривено","strike":"Прецртано","subscript":"Долен индекс","superscript":"Горен индекс","underline":"Подвлечено"},"about":{"copy":"Авторски права &copy; $1. Сите права се задржани.","dlgTitle":"За CKEditor 4","moreInfo":"За информации околу лиценцата, ве молиме посетете го нашиот веб-сајт: "},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Притисни ALT 0 за помош","browseServer":"Пребарај низ серверот","url":"URL","protocol":"Протокол","upload":"Прикачи","uploadSubmit":"Прикачи на сервер","image":"Слика","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Поле за текст","textarea":"Големо поле за текст","hiddenField":"Скриено поле","button":"Button","select":"Selection Field","imageButton":"Копче-слика","notSet":"<not set>","id":"Id","name":"Name","langDir":"Насока на јазик","langDirLtr":"Лево кон десно","langDirRtl":"Десно кон лево","langCode":"Код на јазик","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Стил","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":"You have changed some options. Are you sure you want to close the dialog window?","options":"Опции","target":"Target","targetNew":"Нов прозорец (_blank)","targetTop":"Најгорниот прозорец (_top)","targetSelf":"Истиот прозорец (_self)","targetParent":"Прозорец-родител (_parent)","langDirLTR":"Лево кон десно","langDirRTL":"Десно кон лево","styles":"Стил","cssClasses":"Stylesheet Classes","width":"Широчина","height":"Височина","align":"Alignment","left":"Лево","right":"Десно","center":"Во средина","justify":"Justify","alignLeft":"Align Left","alignRight":"Align Right","alignCenter":"Align Center","alignTop":"Горе","alignMiddle":"Средина","alignBottom":"Доле","alignNone":"Никое","invalidValue":"Невалидна вредност","invalidHeight":"Височината мора да биде број.","invalidWidth":"Широчината мора да биде број.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/mn.js b/core/assets/vendor/ckeditor/lang/mn.js
index 6fec22910baa..f5b45f2e3b86 100644
--- a/core/assets/vendor/ckeditor/lang/mn.js
+++ b/core/assets/vendor/ckeditor/lang/mn.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['mn']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"Өмнөх үйлдлээ сэргээх","undo":"Хүчингүй болгох"},"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":"Болосруулагчийн хэрэгслийн самбар"},"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","heightUnit":"height unit","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":"өргөний нэгж"},"stylescombo":{"label":"Загвар","panelTitle":"Загвар хэлбэржүүлэх","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Онцгой тэмдэгт сонгох","toolbar":"Онцгой тэмдэгт оруулах"},"sourcedialog":{"toolbar":"Код","title":"Код"},"sourcearea":{"toolbar":"Код"},"showblocks":{"toolbar":"Хавтангуудыг харуулах"},"removeformat":{"toolbar":"Параргафын загварыг авч хаях"},"pastetext":{"button":"Энгийн бичвэрээр буулгах","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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-оос буулгах"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Дэлгэц дүүргэх","minimize":"Цонхыг багсгаж харуулах"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Цэгтэй жагсаалт","numberedlist":"Дугаарлагдсан жагсаалт"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"Догол мөр хасах","outdent":"Догол мөр нэмэх"},"image2":{"alt":"Зургийг орлох бичвэр","btnUpload":"Үүнийг сервэррүү илгээ","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Зурагны мэдээлэл","lockRatio":"Радио түгжих","menu":"Зураг","pathName":"image","pathNameCaption":"caption","resetSize":"хэмжээ дахин оноох","resizer":"Click and drag to resize","title":"Зураг","uploadTab":"Илгээж ачаалах","urlMissing":"Зургийн эх сурвалжийн хаяг (URL) байхгүй байна.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Хөндлөн зураас оруулах"},"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"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Хуулах","copyError":"Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хуулах үйлдэлийг зөвшөөрөхгүй байна. (Ctrl/Cmd+C) товчны хослолыг ашиглана уу.","cut":"Хайчлах","cutError":"Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хайчлах үйлдэлийг зөвшөөрөхгүй байна. (Ctrl/Cmd+X) товчны хослолыг ашиглана уу.","paste":"Буулгах","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Ишлэл хэсэг"},"basicstyles":{"bold":"Тод бүдүүн","italic":"Налуу","strike":"Дундуур нь зураастай болгох","subscript":"Суурь болгох","superscript":"Зэрэг болгох","underline":"Доогуур нь зураастай болгох"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"editor":"Хэлбэрт бичвэр боловсруулагч","editorPanel":"Rich Text Editor panel","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":"Урт тайлбарын вэб хаяг","cssClass":"Хэлбэрийн хуудасны ангиуд","advisoryTitle":"Зөвлөх гарчиг","cssStyle":"Загвар","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":"You have changed some options. Are you sure you want to close the dialog window?","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":"Эгнээ","left":"Зүүн","right":"Баруун","center":"Төвд","justify":"Тэгшлэх","alignLeft":"Зүүн талд тулгах","alignRight":"Баруун талд тулгах","alignCenter":"Align Center","alignTop":"Дээд талд","alignMiddle":"Дунд","alignBottom":"Доод талд","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Өндөр нь тоо байх ёстой.","invalidWidth":"Өргөн нь тоо байх ёстой.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
+CKEDITOR.lang['mn']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"Өмнөх үйлдлээ сэргээх","undo":"Хүчингүй болгох"},"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":"Болосруулагчийн хэрэгслийн самбар"},"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","heightUnit":"height unit","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":"өргөний нэгж"},"stylescombo":{"label":"Загвар","panelTitle":"Загвар хэлбэржүүлэх","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Онцгой тэмдэгт сонгох","toolbar":"Онцгой тэмдэгт оруулах"},"sourcedialog":{"toolbar":"Код","title":"Код"},"sourcearea":{"toolbar":"Код"},"showblocks":{"toolbar":"Хавтангуудыг харуулах"},"removeformat":{"toolbar":"Параргафын загварыг авч хаях"},"pastetext":{"button":"Энгийн бичвэрээр буулгах","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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-оос буулгах"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Дэлгэц дүүргэх","minimize":"Цонхыг багсгаж харуулах"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Цэгтэй жагсаалт","numberedlist":"Дугаарлагдсан жагсаалт"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"Догол мөр хасах","outdent":"Догол мөр нэмэх"},"image2":{"alt":"Зургийг орлох бичвэр","btnUpload":"Үүнийг сервэррүү илгээ","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Зурагны мэдээлэл","lockRatio":"Радио түгжих","menu":"Зураг","pathName":"image","pathNameCaption":"caption","resetSize":"хэмжээ дахин оноох","resizer":"Click and drag to resize","title":"Зураг","uploadTab":"Илгээж ачаалах","urlMissing":"Зургийн эх сурвалжийн хаяг (URL) байхгүй байна.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Хөндлөн зураас оруулах"},"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"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Хуулах","copyError":"Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хуулах үйлдэлийг зөвшөөрөхгүй байна. (Ctrl/Cmd+C) товчны хослолыг ашиглана уу.","cut":"Хайчлах","cutError":"Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хайчлах үйлдэлийг зөвшөөрөхгүй байна. (Ctrl/Cmd+X) товчны хослолыг ашиглана уу.","paste":"Буулгах","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Ишлэл хэсэг"},"basicstyles":{"bold":"Тод бүдүүн","italic":"Налуу","strike":"Дундуур нь зураастай болгох","subscript":"Суурь болгох","superscript":"Зэрэг болгох","underline":"Доогуур нь зураастай болгох"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"editor":"Хэлбэрт бичвэр боловсруулагч","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Үйлчлэгч тооцоолуур (сервэр)-ийг үзэх","url":"цахим хуудасны хаяг (URL)","protocol":"Протокол","upload":"Илгээж ачаалах","uploadSubmit":"Үүнийг үйлчлэгч тооцоолуур (сервер) лүү илгээх","image":"Зураг","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":"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":"You have changed some options. Are you sure you want to close the dialog window?","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":"Эгнээ","left":"Зүүн","right":"Баруун","center":"Төвд","justify":"Тэгшлэх","alignLeft":"Зүүн талд тулгах","alignRight":"Баруун талд тулгах","alignCenter":"Align Center","alignTop":"Дээд талд","alignMiddle":"Дунд","alignBottom":"Доод талд","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Өндөр нь тоо байх ёстой.","invalidWidth":"Өргөн нь тоо байх ёстой.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/ms.js b/core/assets/vendor/ckeditor/lang/ms.js
index 135d76fa8781..a2e2eebcd210 100644
--- a/core/assets/vendor/ckeditor/lang/ms.js
+++ b/core/assets/vendor/ckeditor/lang/ms.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['ms']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"Ulangkan","undo":"Batalkan"},"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"},"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","heightUnit":"height unit","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"},"stylescombo":{"label":"Stail","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Sila pilih huruf istimewa","toolbar":"Masukkan Huruf Istimewa"},"sourcedialog":{"toolbar":"Sumber","title":"Sumber"},"sourcearea":{"toolbar":"Sumber"},"showblocks":{"toolbar":"Show Blocks"},"removeformat":{"toolbar":"Buang Format"},"pastetext":{"button":"Tampal sebagai text biasa","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Senarai tidak bernombor","numberedlist":"Senarai bernombor"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"Tambahkan Inden","outdent":"Kurangkan Inden"},"image2":{"alt":"Text Alternatif","btnUpload":"Hantar ke Server","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Info Imej","lockRatio":"Tetapkan Nisbah","menu":"Ciri-ciri Imej","pathName":"image","pathNameCaption":"caption","resetSize":"Saiz Set Semula","resizer":"Click and drag to resize","title":"Ciri-ciri Imej","uploadTab":"Muat Naik","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Masukkan Garisan Membujur"},"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"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"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","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","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":"Tutup","preview":"Prebiu","resize":"Resize","generalTab":"Umum","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":"You have changed some options. Are you sure you want to close the dialog window?","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","left":"Kiri","right":"Kanan","center":"Tengah","justify":"Jajaran Blok","alignLeft":"Jajaran Kiri","alignRight":"Jajaran Kanan","alignCenter":"Align Center","alignTop":"Atas","alignMiddle":"Pertengahan","alignBottom":"Bawah","alignNone":"None","invalidValue":"Nilai tidak sah.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
+CKEDITOR.lang['ms']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"Ulangkan","undo":"Batalkan"},"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"},"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","heightUnit":"height unit","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"},"stylescombo":{"label":"Stail","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"Sila pilih huruf istimewa","toolbar":"Masukkan Huruf Istimewa"},"sourcedialog":{"toolbar":"Sumber","title":"Sumber"},"sourcearea":{"toolbar":"Sumber"},"showblocks":{"toolbar":"Show Blocks"},"removeformat":{"toolbar":"Buang Format"},"pastetext":{"button":"Tampal sebagai text biasa","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"Senarai tidak bernombor","numberedlist":"Senarai bernombor"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"Tambahkan Inden","outdent":"Kurangkan Inden"},"image2":{"alt":"Text Alternatif","btnUpload":"Hantar ke Server","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"Info Imej","lockRatio":"Tetapkan Nisbah","menu":"Ciri-ciri Imej","pathName":"image","pathNameCaption":"caption","resetSize":"Saiz Set Semula","resizer":"Click and drag to resize","title":"Ciri-ciri Imej","uploadTab":"Muat Naik","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Masukkan Garisan Membujur"},"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"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"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","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protokol","upload":"Muat Naik","uploadSubmit":"Hantar ke Server","image":"Gambar","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":"Tutup","preview":"Prebiu","resize":"Resize","generalTab":"Umum","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":"You have changed some options. Are you sure you want to close the dialog window?","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","left":"Kiri","right":"Kanan","center":"Tengah","justify":"Jajaran Blok","alignLeft":"Jajaran Kiri","alignRight":"Jajaran Kanan","alignCenter":"Align Center","alignTop":"Atas","alignMiddle":"Pertengahan","alignBottom":"Bawah","alignNone":"None","invalidValue":"Nilai tidak sah.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/nb.js b/core/assets/vendor/ckeditor/lang/nb.js
index 34c681ebc286..699fec015165 100644
--- a/core/assets/vendor/ckeditor/lang/nb.js
+++ b/core/assets/vendor/ckeditor/lang/nb.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['nb']={"widget":{"move":"Klikk og dra for å flytte","label":"Widget %1"},"undo":{"redo":"Gjør om","undo":"Angre"},"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"},"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","heightUnit":"height unit","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"},"stylescombo":{"label":"Stil","panelTitle":"Stilformater","panelTitle1":"Blokkstiler","panelTitle2":"Inlinestiler","panelTitle3":"Objektstiler"},"specialchar":{"options":"Alternativer for spesialtegn","title":"Velg spesialtegn","toolbar":"Sett inn spesialtegn"},"sourcedialog":{"toolbar":"Kilde","title":"Kilde"},"sourcearea":{"toolbar":"Kilde"},"showblocks":{"toolbar":"Vis blokker"},"removeformat":{"toolbar":"Fjern formatering"},"pastetext":{"button":"Lim inn som ren tekst","pasteNotification":"Trykk %1 for å lime inn. Nettleseren din støtter ikke å lime inn med knappen i verktøylinjen eller høyreklikkmenyen.","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"},"notification":{"closed":"Varsling lukket."},"maximize":{"maximize":"Maksimer","minimize":"Minimer"},"magicline":{"title":"Sett inn nytt avsnitt her"},"list":{"bulletedlist":"Legg til / fjern punktliste","numberedlist":"Legg til / fjern nummerert liste"},"language":{"button":"Sett språk","remove":"Fjern språk"},"indent":{"indent":"Øk innrykk","outdent":"Reduser innrykk"},"image2":{"alt":"Alternativ tekst","btnUpload":"Send det til serveren","captioned":"Bilde med bildetekst","captionPlaceholder":"Bildetekst","infoTab":"Bildeinformasjon","lockRatio":"Lås forhold","menu":"Bildeegenskaper","pathName":"bilde","pathNameCaption":"bildetekst","resetSize":"Tilbakestill størrelse","resizer":"Klikk og dra for å endre størrelse","title":"Bildeegenskaper","uploadTab":"Last opp","urlMissing":"Bildets adresse mangler.","altMissing":"Alternativ tekst mangler."},"horizontalrule":{"toolbar":"Sett inn horisontal linje"},"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"},"filetools":{"loadError":"Feil oppsto under filinnlesing.","networkError":"Nettverksfeil oppsto under filopplasting.","httpError404":"HTTP-feil oppsto under filopplasting (404: Fant ikke filen).","httpError403":"HTTP-feil oppsto under filopplasting (403: Ikke tillatt).","httpError":"HTTP-feil oppsto under filopplasting (feilstatus: %1).","noUrlError":"URL for opplasting er ikke oppgitt.","responseError":"Ukorrekt svar fra serveren."},"elementspath":{"eleLabel":"Element-sti","eleTitle":"%1 element"},"contextmenu":{"options":"Alternativer for høyreklikkmeny"},"clipboard":{"copy":"Kopier","copyError":"Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst bruk tastatursnarveien (Ctrl/Cmd+C).","cut":"Klipp ut","cutError":"Din nettlesers sikkerhetsinstillinger tillater ikke automatisk utklipping av tekst. Vennligst bruk tastatursnarveien (Ctrl/Cmd+X).","paste":"Lim inn","pasteNotification":"Trykk %1 for å lime inn. Nettleseren din støtter ikke å lime inn med knappen i verktøylinjen eller høyreklikkmenyen.","pasteArea":"Innlimingsområde","pasteMsg":"Lim inn innholdet i området nedenfor og klikk OK."},"blockquote":{"toolbar":"Blokksitat"},"basicstyles":{"bold":"Fet","italic":"Kursiv","strike":"Gjennomstreking","subscript":"Senket skrift","superscript":"Hevet skrift","underline":"Understreking"},"about":{"copy":"Copyright &copy; $1. Alle rettigheter reservert.","dlgTitle":"Om CKEditor 4","moreInfo":"For lisensieringsinformasjon, vennligst besøk vårt nettsted:"},"editor":"Rikteksteditor","editorPanel":"Panel for rikteksteditor","common":{"editorHelp":"Trykk ALT 0 for hjelp","browseServer":"Bla gjennom tjener","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 (LTR)","langDirRtl":"Høyre til venstre (RTL)","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 gå tapt. Er du sikker på at du vil laste en ny side?","confirmCancel":"Du har endret noen alternativer. Er du sikker på at du vil lukke dialogvinduet?","options":"Valg","target":"Mål","targetNew":"Nytt vindu (_blank)","targetTop":"Hele vinduet (_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","left":"Venstre","right":"Høyre","center":"Midtstill","justify":"Blokkjuster","alignLeft":"Venstrejuster","alignRight":"Høyrejuster","alignCenter":"Midtstill","alignTop":"Topp","alignMiddle":"Midten","alignBottom":"Bunn","alignNone":"Ingen","invalidValue":"Ugyldig verdi.","invalidHeight":"Høyde må være et tall.","invalidWidth":"Bredde må være et tall.","invalidLength":"Den angitte verdien for feltet \"%1\" må være et positivt tall med eller uten en gyldig måleenhet (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Mellomrom","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Tastatursnarvei","optionDefault":"Standard"}};
\ No newline at end of file
+CKEDITOR.lang['nb']={"widget":{"move":"Klikk og dra for å flytte","label":"Widget %1"},"undo":{"redo":"Gjør om","undo":"Angre"},"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"},"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","heightUnit":"height unit","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"},"stylescombo":{"label":"Stil","panelTitle":"Stilformater","panelTitle1":"Blokkstiler","panelTitle2":"Inlinestiler","panelTitle3":"Objektstiler"},"specialchar":{"options":"Alternativer for spesialtegn","title":"Velg spesialtegn","toolbar":"Sett inn spesialtegn"},"sourcedialog":{"toolbar":"Kilde","title":"Kilde"},"sourcearea":{"toolbar":"Kilde"},"showblocks":{"toolbar":"Vis blokker"},"removeformat":{"toolbar":"Fjern formatering"},"pastetext":{"button":"Lim inn som ren tekst","pasteNotification":"Trykk %1 for å lime inn. Nettleseren din støtter ikke å lime inn med knappen i verktøylinjen eller høyreklikkmenyen.","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"},"notification":{"closed":"Varsling lukket."},"maximize":{"maximize":"Maksimer","minimize":"Minimer"},"magicline":{"title":"Sett inn nytt avsnitt her"},"list":{"bulletedlist":"Legg til / fjern punktliste","numberedlist":"Legg til / fjern nummerert liste"},"language":{"button":"Sett språk","remove":"Fjern språk"},"indent":{"indent":"Øk innrykk","outdent":"Reduser innrykk"},"image2":{"alt":"Alternativ tekst","btnUpload":"Send det til serveren","captioned":"Bilde med bildetekst","captionPlaceholder":"Bildetekst","infoTab":"Bildeinformasjon","lockRatio":"Lås forhold","menu":"Bildeegenskaper","pathName":"bilde","pathNameCaption":"bildetekst","resetSize":"Tilbakestill størrelse","resizer":"Klikk og dra for å endre størrelse","title":"Bildeegenskaper","uploadTab":"Last opp","urlMissing":"Bildets adresse mangler.","altMissing":"Alternativ tekst mangler."},"horizontalrule":{"toolbar":"Sett inn horisontal linje"},"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"},"filetools":{"loadError":"Feil oppsto under filinnlesing.","networkError":"Nettverksfeil oppsto under filopplasting.","httpError404":"HTTP-feil oppsto under filopplasting (404: Fant ikke filen).","httpError403":"HTTP-feil oppsto under filopplasting (403: Ikke tillatt).","httpError":"HTTP-feil oppsto under filopplasting (feilstatus: %1).","noUrlError":"URL for opplasting er ikke oppgitt.","responseError":"Ukorrekt svar fra serveren."},"elementspath":{"eleLabel":"Element-sti","eleTitle":"%1 element"},"contextmenu":{"options":"Alternativer for høyreklikkmeny"},"clipboard":{"copy":"Kopier","copyError":"Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst bruk tastatursnarveien (Ctrl/Cmd+C).","cut":"Klipp ut","cutError":"Din nettlesers sikkerhetsinstillinger tillater ikke automatisk utklipping av tekst. Vennligst bruk tastatursnarveien (Ctrl/Cmd+X).","paste":"Lim inn","pasteNotification":"Trykk %1 for å lime inn. Nettleseren din støtter ikke å lime inn med knappen i verktøylinjen eller høyreklikkmenyen.","pasteArea":"Innlimingsområde","pasteMsg":"Lim inn innholdet i området nedenfor og klikk OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Blokksitat"},"basicstyles":{"bold":"Fet","italic":"Kursiv","strike":"Gjennomstreking","subscript":"Senket skrift","superscript":"Hevet skrift","underline":"Understreking"},"about":{"copy":"Copyright &copy; $1. Alle rettigheter reservert.","dlgTitle":"Om CKEditor 4","moreInfo":"For lisensieringsinformasjon, vennligst besøk vårt nettsted:"},"editor":"Rikteksteditor","editorPanel":"Panel for rikteksteditor","common":{"editorHelp":"Trykk ALT 0 for hjelp","browseServer":"Bla gjennom tjener","url":"URL","protocol":"Protokoll","upload":"Last opp","uploadSubmit":"Send det til serveren","image":"Bilde","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 (LTR)","langDirRtl":"Høyre til venstre (RTL)","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 gå tapt. Er du sikker på at du vil laste en ny side?","confirmCancel":"Du har endret noen alternativer. Er du sikker på at du vil lukke dialogvinduet?","options":"Valg","target":"Mål","targetNew":"Nytt vindu (_blank)","targetTop":"Hele vinduet (_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","left":"Venstre","right":"Høyre","center":"Midtstill","justify":"Blokkjuster","alignLeft":"Venstrejuster","alignRight":"Høyrejuster","alignCenter":"Midtstill","alignTop":"Topp","alignMiddle":"Midten","alignBottom":"Bunn","alignNone":"Ingen","invalidValue":"Ugyldig verdi.","invalidHeight":"Høyde må være et tall.","invalidWidth":"Bredde må være et tall.","invalidLength":"Den angitte verdien for feltet \"%1\" må være et positivt tall med eller uten en gyldig måleenhet (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Mellomrom","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Tastatursnarvei","optionDefault":"Standard"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/nl.js b/core/assets/vendor/ckeditor/lang/nl.js
index 3b835b625a06..75e89404f5c7 100644
--- a/core/assets/vendor/ckeditor/lang/nl.js
+++ b/core/assets/vendor/ckeditor/lang/nl.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['nl']={"widget":{"move":"Klik en sleep om te verplaatsen","label":"%1 widget"},"undo":{"redo":"Opnieuw uitvoeren","undo":"Ongedaan maken"},"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"},"table":{"border":"Randdikte","caption":"Bijschrift","cell":{"menu":"Cel","insertBefore":"Voeg cel in voor","insertAfter":"Voeg cel in na","deleteCell":"Cellen verwijderen","merge":"Cellen samenvoegen","mergeRight":"Voeg samen naar rechts","mergeDown":"Voeg samen naar beneden","splitHorizontal":"Splits cel horizontaal","splitVertical":"Splits cel vertikaal","title":"Celeigenschappen","cellType":"Celtype","rowSpan":"Rijen samenvoegen","colSpan":"Kolommen samenvoegen","wordWrap":"Automatische terugloop","hAlign":"Horizontale uitlijning","vAlign":"Verticale uitlijning","alignBaseline":"Tekstregel","bgColor":"Achtergrondkleur","borderColor":"Randkleur","data":"Gegevens","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":"Celopvulling","cellSpace":"Celafstand","column":{"menu":"Kolom","insertBefore":"Voeg kolom in voor","insertAfter":"Voeg kolom in na","deleteColumn":"Kolommen verwijderen"},"columns":"Kolommen","deleteTable":"Tabel verwijderen","headers":"Koppen","headersBoth":"Beide","headersColumn":"Eerste kolom","headersNone":"Geen","headersRow":"Eerste rij","heightUnit":"height unit","invalidBorder":"De randdikte moet een getal zijn.","invalidCellPadding":"Celopvulling moet een getal zijn.","invalidCellSpacing":"Celafstand 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":"Tabeleigenschappen","row":{"menu":"Rij","insertBefore":"Voeg rij in voor","insertAfter":"Voeg rij in na","deleteRow":"Rijen verwijderen"},"rows":"Rijen","summary":"Samenvatting","title":"Tabeleigenschappen","toolbar":"Tabel","widthPc":"procent","widthPx":"pixels","widthUnit":"eenheid breedte"},"stylescombo":{"label":"Stijl","panelTitle":"Opmaakstijlen","panelTitle1":"Blok stijlen","panelTitle2":"Inline stijlen","panelTitle3":"Object stijlen"},"specialchar":{"options":"Speciale tekens opties","title":"Selecteer speciaal teken","toolbar":"Speciaal teken invoegen"},"sourcedialog":{"toolbar":"Broncode","title":"Broncode"},"sourcearea":{"toolbar":"Broncode"},"showblocks":{"toolbar":"Toon blokken"},"removeformat":{"toolbar":"Opmaak verwijderen"},"pastetext":{"button":"Plakken als platte tekst","pasteNotification":"Plakken met de knop in de werkbalk wordt niet ondersteund door de browser. Gebruik de sneltoets %1 van het toetsenbord.","title":"Plakken als platte tekst"},"pastefromword":{"confirmCleanup":"De tekst die u wilt plakken 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 vanuit Word","toolbar":"Plakken vanuit Word"},"notification":{"closed":"Melding gesloten."},"maximize":{"maximize":"Maximaliseren","minimize":"Minimaliseren"},"magicline":{"title":"Hier paragraaf invoeren"},"list":{"bulletedlist":"Opsomming invoegen","numberedlist":"Genummerde lijst invoegen"},"language":{"button":"Taal instellen","remove":"Taal verwijderen"},"indent":{"indent":"Inspringing vergroten","outdent":"Inspringing verkleinen"},"image2":{"alt":"Alternatieve tekst","btnUpload":"Naar server verzenden","captioned":"Afbeelding met onderschrift","captionPlaceholder":"Onderschrift","infoTab":"Afbeeldingsinformatie","lockRatio":"Verhouding vergrendelen","menu":"Eigenschappen afbeelding","pathName":"afbeelding","pathNameCaption":"onderschrift","resetSize":"Afmetingen herstellen","resizer":"Klik en sleep om te herschalen","title":"Afbeeldingseigenschappen","uploadTab":"Uploaden","urlMissing":"De URL naar de afbeelding ontbreekt.","altMissing":"Alternatieve tekst ontbreekt."},"horizontalrule":{"toolbar":"Horizontale lijn invoegen"},"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"},"filetools":{"loadError":"Fout tijdens lezen van bestand.","networkError":"Netwerkfout tijdens uploaden van bestand.","httpError404":"HTTP fout tijdens uploaden van bestand (404: Bestand niet gevonden).","httpError403":"HTTP fout tijdens uploaden van bestand (403: Verboden).","httpError":"HTTP fout tijdens uploaden van bestand (fout status: %1).","noUrlError":"Upload URL is niet gedefinieerd.","responseError":"Ongeldig antwoord van server."},"elementspath":{"eleLabel":"Elementenpad","eleTitle":"%1 element"},"contextmenu":{"options":"Contextmenu opties"},"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","pasteNotification":"Plakken met de knop in de werkbalk wordt niet ondersteund door de browser. Gebruik de sneltoets %1 van het toetsenbord.","pasteArea":"Plakgebied","pasteMsg":"Plak de inhoud in het vak hieronder en druk op OK."},"blockquote":{"toolbar":"Citaatblok"},"basicstyles":{"bold":"Vet","italic":"Cursief","strike":"Doorhalen","subscript":"Subscript","superscript":"Superscript","underline":"Onderstrepen"},"about":{"copy":"Copyright &copy; $1. Alle rechten voorbehouden.","dlgTitle":"Over CKEditor 4","moreInfo":"Bezoek onze website voor licentieinformatie:"},"editor":"Tekstverwerker","editorPanel":"Tekstverwerker beheerpaneel","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":"Selectievinkje","radio":"Keuzerondje","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","left":"Links","right":"Rechts","center":"Centreren","justify":"Uitvullen","alignLeft":"Links uitlijnen","alignRight":"Rechts uitlijnen","alignCenter":"Centreren","alignTop":"Boven","alignMiddle":"Midden","alignBottom":"Onder","alignNone":"Geen","invalidValue":"Ongeldige waarde.","invalidHeight":"De hoogte moet een getal zijn.","invalidWidth":"De breedte moet een getal zijn.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Spatie","35":"End","36":"Home","46":"Verwijderen","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Sneltoets","optionDefault":"Standaard"}};
\ No newline at end of file
+CKEDITOR.lang['nl']={"widget":{"move":"Klik en sleep om te verplaatsen","label":"%1 widget"},"undo":{"redo":"Opnieuw uitvoeren","undo":"Ongedaan maken"},"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"},"table":{"border":"Randdikte","caption":"Bijschrift","cell":{"menu":"Cel","insertBefore":"Voeg cel in voor","insertAfter":"Voeg cel in na","deleteCell":"Cellen verwijderen","merge":"Cellen samenvoegen","mergeRight":"Voeg samen naar rechts","mergeDown":"Voeg samen naar beneden","splitHorizontal":"Splits cel horizontaal","splitVertical":"Splits cel vertikaal","title":"Celeigenschappen","cellType":"Celtype","rowSpan":"Rijen samenvoegen","colSpan":"Kolommen samenvoegen","wordWrap":"Automatische terugloop","hAlign":"Horizontale uitlijning","vAlign":"Verticale uitlijning","alignBaseline":"Tekstregel","bgColor":"Achtergrondkleur","borderColor":"Randkleur","data":"Gegevens","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":"Celopvulling","cellSpace":"Celafstand","column":{"menu":"Kolom","insertBefore":"Voeg kolom in voor","insertAfter":"Voeg kolom in na","deleteColumn":"Kolommen verwijderen"},"columns":"Kolommen","deleteTable":"Tabel verwijderen","headers":"Koppen","headersBoth":"Beide","headersColumn":"Eerste kolom","headersNone":"Geen","headersRow":"Eerste rij","heightUnit":"height unit","invalidBorder":"De randdikte moet een getal zijn.","invalidCellPadding":"Celopvulling moet een getal zijn.","invalidCellSpacing":"Celafstand 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":"Tabeleigenschappen","row":{"menu":"Rij","insertBefore":"Voeg rij in voor","insertAfter":"Voeg rij in na","deleteRow":"Rijen verwijderen"},"rows":"Rijen","summary":"Samenvatting","title":"Tabeleigenschappen","toolbar":"Tabel","widthPc":"procent","widthPx":"pixels","widthUnit":"eenheid breedte"},"stylescombo":{"label":"Stijl","panelTitle":"Opmaakstijlen","panelTitle1":"Blok stijlen","panelTitle2":"Inline stijlen","panelTitle3":"Object stijlen"},"specialchar":{"options":"Speciale tekens opties","title":"Selecteer speciaal teken","toolbar":"Speciaal teken invoegen"},"sourcedialog":{"toolbar":"Broncode","title":"Broncode"},"sourcearea":{"toolbar":"Broncode"},"showblocks":{"toolbar":"Toon blokken"},"removeformat":{"toolbar":"Opmaak verwijderen"},"pastetext":{"button":"Plakken als platte tekst","pasteNotification":"Plakken met de knop in de werkbalk wordt niet ondersteund door de browser. Gebruik de sneltoets %1 van het toetsenbord.","title":"Plakken als platte tekst"},"pastefromword":{"confirmCleanup":"De tekst die u wilt plakken 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 vanuit Word","toolbar":"Plakken vanuit Word"},"notification":{"closed":"Melding gesloten."},"maximize":{"maximize":"Maximaliseren","minimize":"Minimaliseren"},"magicline":{"title":"Hier paragraaf invoeren"},"list":{"bulletedlist":"Opsomming invoegen","numberedlist":"Genummerde lijst invoegen"},"language":{"button":"Taal instellen","remove":"Taal verwijderen"},"indent":{"indent":"Inspringing vergroten","outdent":"Inspringing verkleinen"},"image2":{"alt":"Alternatieve tekst","btnUpload":"Naar server verzenden","captioned":"Afbeelding met onderschrift","captionPlaceholder":"Onderschrift","infoTab":"Afbeeldingsinformatie","lockRatio":"Verhouding vergrendelen","menu":"Eigenschappen afbeelding","pathName":"afbeelding","pathNameCaption":"onderschrift","resetSize":"Afmetingen herstellen","resizer":"Klik en sleep om te herschalen","title":"Afbeeldingseigenschappen","uploadTab":"Uploaden","urlMissing":"De URL naar de afbeelding ontbreekt.","altMissing":"Alternatieve tekst ontbreekt."},"horizontalrule":{"toolbar":"Horizontale lijn invoegen"},"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"},"filetools":{"loadError":"Fout tijdens lezen van bestand.","networkError":"Netwerkfout tijdens uploaden van bestand.","httpError404":"HTTP fout tijdens uploaden van bestand (404: Bestand niet gevonden).","httpError403":"HTTP fout tijdens uploaden van bestand (403: Verboden).","httpError":"HTTP fout tijdens uploaden van bestand (fout status: %1).","noUrlError":"Upload URL is niet gedefinieerd.","responseError":"Ongeldig antwoord van server."},"elementspath":{"eleLabel":"Elementenpad","eleTitle":"%1 element"},"contextmenu":{"options":"Contextmenu opties"},"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","pasteNotification":"Plakken met de knop in de werkbalk wordt niet ondersteund door de browser. Gebruik de sneltoets %1 van het toetsenbord.","pasteArea":"Plakgebied","pasteMsg":"Plak de inhoud in het vak hieronder en druk op OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Citaatblok"},"basicstyles":{"bold":"Vet","italic":"Cursief","strike":"Doorhalen","subscript":"Subscript","superscript":"Superscript","underline":"Onderstrepen"},"about":{"copy":"Copyright &copy; $1. Alle rechten voorbehouden.","dlgTitle":"Over CKEditor 4","moreInfo":"Bezoek onze website voor licentieinformatie:"},"editor":"Tekstverwerker","editorPanel":"Tekstverwerker beheerpaneel","common":{"editorHelp":"Druk ALT 0 voor hulp","browseServer":"Bladeren op server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Naar server verzenden","image":"Afbeelding","form":"Formulier","checkbox":"Selectievinkje","radio":"Keuzerondje","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","left":"Links","right":"Rechts","center":"Centreren","justify":"Uitvullen","alignLeft":"Links uitlijnen","alignRight":"Rechts uitlijnen","alignCenter":"Centreren","alignTop":"Boven","alignMiddle":"Midden","alignBottom":"Onder","alignNone":"Geen","invalidValue":"Ongeldige waarde.","invalidHeight":"De hoogte moet een getal zijn.","invalidWidth":"De breedte moet een getal zijn.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Spatie","35":"End","36":"Home","46":"Verwijderen","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Sneltoets","optionDefault":"Standaard"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/no.js b/core/assets/vendor/ckeditor/lang/no.js
index 31401f2c4afb..8958acf7f393 100644
--- a/core/assets/vendor/ckeditor/lang/no.js
+++ b/core/assets/vendor/ckeditor/lang/no.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['no']={"widget":{"move":"Klikk og dra for å flytte","label":"Widget %1"},"undo":{"redo":"Gjør om","undo":"Angre"},"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"},"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","heightUnit":"height unit","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"},"stylescombo":{"label":"Stil","panelTitle":"Stilformater","panelTitle1":"Blokkstiler","panelTitle2":"Inlinestiler","panelTitle3":"Objektstiler"},"specialchar":{"options":"Alternativer for spesialtegn","title":"Velg spesialtegn","toolbar":"Sett inn spesialtegn"},"sourcedialog":{"toolbar":"Kilde","title":"Kilde"},"sourcearea":{"toolbar":"Kilde"},"showblocks":{"toolbar":"Vis blokker"},"removeformat":{"toolbar":"Fjern formatering"},"pastetext":{"button":"Lim inn som ren tekst","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maksimer","minimize":"Minimer"},"magicline":{"title":"Sett inn nytt avsnitt her"},"list":{"bulletedlist":"Legg til/Fjern punktmerket liste","numberedlist":"Legg til/Fjern nummerert liste"},"language":{"button":"Sett språk","remove":"Fjern språk"},"indent":{"indent":"Øk innrykk","outdent":"Reduser innrykk"},"image2":{"alt":"Alternativ tekst","btnUpload":"Send det til serveren","captioned":"Bilde med bildetekst","captionPlaceholder":"Billedtekst","infoTab":"Bildeinformasjon","lockRatio":"Lås forhold","menu":"Bildeegenskaper","pathName":"bilde","pathNameCaption":"bildetekst","resetSize":"Tilbakestill størrelse","resizer":"Klikk og dra for å endre størrelse","title":"Bildeegenskaper","uploadTab":"Last opp","urlMissing":"Bildets adresse mangler.","altMissing":"Alternativ tekst mangler."},"horizontalrule":{"toolbar":"Sett inn horisontal linje"},"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"},"filetools":{"loadError":"Det oppstod en feil under lesing av filen.","networkError":"Det oppstod en nettverksfeil under opplasting av filen.","httpError404":"En HTTP-feil oppstod under opplasting av filen (404: Filen finnes ikke).","httpError403":"En HTTP-feil oppstod under opplasting av filen (403: Ingen tilgang).","httpError":"En HTTP-feil oppstod under opplasting av filen (feilkode: %1).","noUrlError":"Opplastings-URL er ikke definert.","responseError":"Feil svar fra serveren."},"elementspath":{"eleLabel":"Element-sti","eleTitle":"%1 element"},"contextmenu":{"options":"Alternativer for høyreklikkmeny"},"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","pasteNotification":"Trykk %1 for å lime inn. På grunn av manglende støtte i nettleseren din, kan du ikke lime inn via knapperaden eller kontekstmenyen.","pasteArea":"Innlimingsområde","pasteMsg":"Lim inn innholdet i området nedenfor og trykk OK."},"blockquote":{"toolbar":"Blokksitat"},"basicstyles":{"bold":"Fet","italic":"Kursiv","strike":"Gjennomstreking","subscript":"Senket skrift","superscript":"Hevet skrift","underline":"Understreking"},"about":{"copy":"Copyright &copy; $1. Alle rettigheter reservert.","dlgTitle":"Om CKEditor 4","moreInfo":"For lisensieringsinformasjon, vennligst besøk vårt nettsted:"},"editor":"Rikteksteditor","editorPanel":"Panel for 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","left":"Venstre","right":"Høyre","center":"Midtjuster","justify":"Blokkjuster","alignLeft":"Venstrejuster","alignRight":"Høyrejuster","alignCenter":"Midtjustér","alignTop":"Topp","alignMiddle":"Midten","alignBottom":"Bunn","alignNone":"Ingen","invalidValue":"Ugyldig verdi.","invalidHeight":"Høyde må være et tall.","invalidWidth":"Bredde må være et tall.","invalidLength":"Verdien i \"%1\"-feltet må være et positivt tall med eller uten en gyldig måleenhet (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Mellomrom","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Kommando"},"keyboardShortcut":"Hurtigtast","optionDefault":"Standard"}};
\ No newline at end of file
+CKEDITOR.lang['no']={"widget":{"move":"Klikk og dra for å flytte","label":"Widget %1"},"undo":{"redo":"Gjør om","undo":"Angre"},"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"},"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","heightUnit":"height unit","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"},"stylescombo":{"label":"Stil","panelTitle":"Stilformater","panelTitle1":"Blokkstiler","panelTitle2":"Inlinestiler","panelTitle3":"Objektstiler"},"specialchar":{"options":"Alternativer for spesialtegn","title":"Velg spesialtegn","toolbar":"Sett inn spesialtegn"},"sourcedialog":{"toolbar":"Kilde","title":"Kilde"},"sourcearea":{"toolbar":"Kilde"},"showblocks":{"toolbar":"Vis blokker"},"removeformat":{"toolbar":"Fjern formatering"},"pastetext":{"button":"Lim inn som ren tekst","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maksimer","minimize":"Minimer"},"magicline":{"title":"Sett inn nytt avsnitt her"},"list":{"bulletedlist":"Legg til/Fjern punktmerket liste","numberedlist":"Legg til/Fjern nummerert liste"},"language":{"button":"Sett språk","remove":"Fjern språk"},"indent":{"indent":"Øk innrykk","outdent":"Reduser innrykk"},"image2":{"alt":"Alternativ tekst","btnUpload":"Send det til serveren","captioned":"Bilde med bildetekst","captionPlaceholder":"Billedtekst","infoTab":"Bildeinformasjon","lockRatio":"Lås forhold","menu":"Bildeegenskaper","pathName":"bilde","pathNameCaption":"bildetekst","resetSize":"Tilbakestill størrelse","resizer":"Klikk og dra for å endre størrelse","title":"Bildeegenskaper","uploadTab":"Last opp","urlMissing":"Bildets adresse mangler.","altMissing":"Alternativ tekst mangler."},"horizontalrule":{"toolbar":"Sett inn horisontal linje"},"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"},"filetools":{"loadError":"Det oppstod en feil under lesing av filen.","networkError":"Det oppstod en nettverksfeil under opplasting av filen.","httpError404":"En HTTP-feil oppstod under opplasting av filen (404: Filen finnes ikke).","httpError403":"En HTTP-feil oppstod under opplasting av filen (403: Ingen tilgang).","httpError":"En HTTP-feil oppstod under opplasting av filen (feilkode: %1).","noUrlError":"Opplastings-URL er ikke definert.","responseError":"Feil svar fra serveren."},"elementspath":{"eleLabel":"Element-sti","eleTitle":"%1 element"},"contextmenu":{"options":"Alternativer for høyreklikkmeny"},"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","pasteNotification":"Trykk %1 for å lime inn. På grunn av manglende støtte i nettleseren din, kan du ikke lime inn via knapperaden eller kontekstmenyen.","pasteArea":"Innlimingsområde","pasteMsg":"Lim inn innholdet i området nedenfor og trykk OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Blokksitat"},"basicstyles":{"bold":"Fet","italic":"Kursiv","strike":"Gjennomstreking","subscript":"Senket skrift","superscript":"Hevet skrift","underline":"Understreking"},"about":{"copy":"Copyright &copy; $1. Alle rettigheter reservert.","dlgTitle":"Om CKEditor 4","moreInfo":"For lisensieringsinformasjon, vennligst besøk vårt nettsted:"},"editor":"Rikteksteditor","editorPanel":"Panel for 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","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","left":"Venstre","right":"Høyre","center":"Midtjuster","justify":"Blokkjuster","alignLeft":"Venstrejuster","alignRight":"Høyrejuster","alignCenter":"Midtjustér","alignTop":"Topp","alignMiddle":"Midten","alignBottom":"Bunn","alignNone":"Ingen","invalidValue":"Ugyldig verdi.","invalidHeight":"Høyde må være et tall.","invalidWidth":"Bredde må være et tall.","invalidLength":"Verdien i \"%1\"-feltet må være et positivt tall med eller uten en gyldig måleenhet (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Mellomrom","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Kommando"},"keyboardShortcut":"Hurtigtast","optionDefault":"Standard"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/oc.js b/core/assets/vendor/ckeditor/lang/oc.js
index c9756e4a37e0..9b919492b8d4 100644
--- a/core/assets/vendor/ckeditor/lang/oc.js
+++ b/core/assets/vendor/ckeditor/lang/oc.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['oc']={"widget":{"move":"Clicar e lisar per desplaçar","label":"Element %1"},"undo":{"redo":"Refar","undo":"Restablir"},"toolbar":{"toolbarCollapse":"Enrotlar la barra d'aisinas","toolbarExpand":"Desenrotlar la barra d'aisinas","toolbarGroups":{"document":"Document","clipboard":"Quichapapièr/Desfar","editing":"Edicion","forms":"Formularis","basicstyles":"Estils de basa","paragraph":"Paragraf","links":"Ligams","insert":"Inserir","styles":"Estils","colors":"Colors","tools":"Aisinas"},"toolbars":"Barras d'aisinas de l'editor"},"table":{"border":"Talha de la bordadura","caption":"Títol del tablèu","cell":{"menu":"Cellula","insertBefore":"Inserir una cellula abans","insertAfter":"Inserir una cellula aprèp","deleteCell":"Suprimir las cellulas","merge":"Fusionar las cellulas","mergeRight":"Fusionar cap a dreita","mergeDown":"Fusionar cap aval","splitHorizontal":"Separar la cellula orizontalament","splitVertical":"Separar la cellula verticalament","title":"Proprietats de la cellula","cellType":"Tipe de cellula","rowSpan":"Linhas ocupadas","colSpan":"Colomnas ocupadas","wordWrap":"Cesura","hAlign":"Alinhament orizontal","vAlign":"Alinhament vertical","alignBaseline":"Linha de basa","bgColor":"Color de rèireplan","borderColor":"Color de bordadura","data":"Donadas","header":"Entèsta","yes":"Òc","no":"Non","invalidWidth":"La largor de la cellula deu èsser un nombre.","invalidHeight":"La nautor de la cellula deu èsser un nombre.","invalidRowSpan":"Lo nombre de linhas ocupadas deu èsser un nombre entièr.","invalidColSpan":"Lo nombre de colomnas ocupadas deu èsser un nombre entièr.","chooseColor":"Causir"},"cellPad":"Marge intèrne de las cellulas","cellSpace":"Espaçament entre las cellulas","column":{"menu":"Colomna","insertBefore":"Inserir una colomna abans","insertAfter":"Inserir una colomna aprèp","deleteColumn":"Suprimir las colomnas"},"columns":"Colomnas","deleteTable":"Suprimir lo tablèu","headers":"Entèstas","headersBoth":"Los dos","headersColumn":"Primièra colomna","headersNone":"Pas cap","headersRow":"Primièra linha","heightUnit":"height unit","invalidBorder":"La talha de la bordadura deu èsser un nombre.","invalidCellPadding":"Lo marge intèrne de las cellulas deu èsser un nombre positiu.","invalidCellSpacing":"L'espaçament entre las cellulas deu èsser un nombre positiu.","invalidCols":"Lo nombre de colomnas deu èsser superior a 0.","invalidHeight":"La nautor del tablèu deu èsser un nombre.","invalidRows":"Lo nombre de linhas deu èsser superior a 0.","invalidWidth":"La largor del tablèu deu èsser un nombre.","menu":"Proprietats del tablèu","row":{"menu":"Linha","insertBefore":"Inserir una linha abans","insertAfter":"Inserir una linha aprèp","deleteRow":"Suprimir las linhas"},"rows":"Linhas","summary":"Resumit (descripcion)","title":"Proprietats del tablèu","toolbar":"Tablèu","widthPc":"per cent","widthPx":"pixèls","widthUnit":"unitat de largor"},"stylescombo":{"label":"Estils","panelTitle":"Estils de mesa en pagina","panelTitle1":"Estils de blòt","panelTitle2":"Estils en linha","panelTitle3":"Estils d'objècte"},"specialchar":{"options":"Opcions dels caractèrs especials","title":"Seleccionar un caractèr","toolbar":"Inserir un caractèr especial"},"sourcedialog":{"toolbar":"Font","title":"Font"},"sourcearea":{"toolbar":"Font"},"showblocks":{"toolbar":"Afichar los blòts"},"removeformat":{"toolbar":"Suprimir la mesa en forma"},"pastetext":{"button":"Pegar coma tèxte brut","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"Sembla que lo tèxte de pegar proven de Word. Lo volètz netejar abans de lo pegar ?","error":"Las donadas pegadas an pas pogut èsser netejadas a causa d'una error intèrna","title":"Pegar dempuèi Word","toolbar":"Pegar dempuèi Word"},"notification":{"closed":"Notificacion tampada."},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"magicline":{"title":"Inserir un paragraf aicí"},"list":{"bulletedlist":"Inserir/Suprimir una lista amb de piuses","numberedlist":"Inserir/Suprimir una lista numerotada"},"language":{"button":"Definir la lenga","remove":"Suprimir la lenga"},"indent":{"indent":"Aumentar l'alinèa","outdent":"Dmesir l'alinèa"},"image2":{"alt":"Tèxte alternatiu","btnUpload":"Mandar sul servidor","captioned":"Imatge amb legenda","captionPlaceholder":"Legenda","infoTab":"Informacions sus l'imatge","lockRatio":"Conservar las proporcions","menu":"Proprietats de l'imatge","pathName":"imatge","pathNameCaption":"legenda","resetSize":"Reïnicializar la talha","resizer":"Clicar e lisar per redimensionar","title":"Proprietats de l'imatge","uploadTab":"Mandar","urlMissing":"L'URL font de l'imatge es mancanta.","altMissing":"Lo tèxte alternatiu es mancant."},"horizontalrule":{"toolbar":"Inserir una linha orizontala"},"format":{"label":"Format","panelTitle":"Format de paragraf","tag_address":"Adreça","tag_div":"Division (DIV)","tag_h1":"Títol 1","tag_h2":"Títol 2","tag_h3":"Títol 3","tag_h4":"Títol 4","tag_h5":"Títol 5","tag_h6":"Títol 6","tag_p":"Normal","tag_pre":"Preformatat"},"filetools":{"loadError":"Una error s'es produita pendent la lectura del fichièr.","networkError":"Una error de ret s'es produita pendent lo mandadís del fichièr.","httpError404":"Una error HTTP s'es produita pendent lo mandadís del fichièr (404 : fichièr pas trobat).","httpError403":"Una error HTTP s'es produita pendent lo mandadís del fichièr (403 : accès refusat).","httpError":"Una error HTTP s'es produita pendent lo mandadís del fichièr (error : %1).","noUrlError":"L'URL de mandadís es pas especificada.","responseError":"Responsa del servidor incorrècta."},"elementspath":{"eleLabel":"Camin dels elements","eleTitle":"Element %1"},"contextmenu":{"options":"Opcions del menú contextual"},"clipboard":{"copy":"Copiar","copyError":"Los paramètres de seguretat de vòstre navigador autorizan pas l'editor a executar automaticament l'operacion « Copiar ». Utilizatz l'acorchi de clavièr a aqueste efièit (Ctrl/Cmd+C).","cut":"Talhar","cutError":"Los paramètres de seguretat de vòstre navigador autorizan pas l'editor a executar automaticament l'operacion « Talhar ». Utilizatz l'acorchi de clavièr a aqueste efièit (Ctrl/Cmd+X).","paste":"Pegar","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Citacion"},"basicstyles":{"bold":"Gras","italic":"Italica","strike":"Raiat","subscript":"Indici","superscript":"Exponent","underline":"Solinhat"},"about":{"copy":"Copyright &copy; $1. Totes los dreits reservats.","dlgTitle":"A prepaus de CKEditor 4","moreInfo":"Per las informacions de licéncia, visitatz nòstre site web :"},"editor":"Editor de tèxte enriquit","editorPanel":"Tablèu de bòrd de l'editor de tèxte enriquit","common":{"editorHelp":"Utilisatz l'acorchi Alt-0 per obténer d'ajuda","browseServer":"Percórrer lo servidor","url":"URL","protocol":"Protocòl","upload":"Mandar","uploadSubmit":"Mandar sul servidor","image":"Imatge","flash":"Flash","form":"Formulari","checkbox":"Casa de marcar","radio":"Boton ràdio","textField":"Camp  tèxte","textarea":"Zòna de tèxte","hiddenField":"Camp invisible","button":"Boton","select":"Lista desenrotlanta","imageButton":"Boton amb imatge","notSet":"<indefinit>","id":"Id","name":"Nom","langDir":"Sens d'escritura","langDirLtr":"Esquèrra a dreita (LTR)","langDirRtl":"Dreita a esquèrra (RTL)","langCode":"Còdi de lenga","longDescr":"URL de descripcion longa","cssClass":"Classas d'estil","advisoryTitle":"Infobulla","cssStyle":"Estil","ok":"D'acòrdi","cancel":"Anullar","close":"Tampar","preview":"Previsualizar","resize":"Redimensionar","generalTab":"General","advancedTab":"Avançat","validateNumberFailed":"Aquesta valor es pas un nombre.","confirmNewPage":"Los cambiaments pas salvats seràn perduts. Sètz segur que volètz cargar una novèla pagina ?","confirmCancel":"Certanas opcions son estadas modificadas. Sètz segur que volètz tampar ?","options":"Opcions","target":"Cibla","targetNew":"Novèla fenèstra (_blank)","targetTop":"Fenèstra superiora (_top)","targetSelf":"Meteissa fenèstra (_self)","targetParent":"Fenèstra parent (_parent)","langDirLTR":"Esquèrra a dreita (LTR)","langDirRTL":"Dreita a esquèrra (RTL)","styles":"Estil","cssClasses":"Classas d'estil","width":"Largor","height":"Nautor","align":"Alinhament","left":"Esquèrra","right":"Dreita","center":"Centrar","justify":"Justificar","alignLeft":"Alinhar a esquèrra","alignRight":"Alinhar a dreita","alignCenter":"Align Center","alignTop":"Naut","alignMiddle":"Mitan","alignBottom":"Bas","alignNone":"Pas cap","invalidValue":"Valor invalida.","invalidHeight":"La nautor deu èsser un nombre.","invalidWidth":"La largor deu èsser un nombre.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"La valor especificada pel camp « %1 » deu èsser un nombre positiu amb o sens unitat de mesura CSS valid (px, %, in, cm, mm, em, ex, pt, o pc).","invalidHtmlLength":"La valor especificada pel camp « %1 » deu èsser un nombre positiu amb o sens unitat de mesura HTML valid (px o %).","invalidInlineStyle":"La valor especificada per l'estil en linha deu èsser compausada d'un o mantun parelh al format « nom : valor », separats per de punts-virgulas.","cssLengthTooltip":"Entrar un nombre per una valor en pixèls o un nombre amb una unitat de mesura CSS valida (px, %, in, cm, mm, em, ex, pt, o pc).","unavailable":"%1<span class=\"cke_accessibility\">, indisponible</span>","keyboard":{"8":"Retorn","13":"Entrada","16":"Majuscula","17":"Ctrl","18":"Alt","32":"Espaci","35":"Fin","36":"Origina","46":"Suprimir","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Comanda"},"keyboardShortcut":"Acorchi de clavièr","optionDefault":"Default"}};
\ No newline at end of file
+CKEDITOR.lang['oc']={"widget":{"move":"Clicar e lisar per desplaçar","label":"Element %1"},"undo":{"redo":"Refar","undo":"Restablir"},"toolbar":{"toolbarCollapse":"Enrotlar la barra d'aisinas","toolbarExpand":"Desenrotlar la barra d'aisinas","toolbarGroups":{"document":"Document","clipboard":"Quichapapièr/Desfar","editing":"Edicion","forms":"Formularis","basicstyles":"Estils de basa","paragraph":"Paragraf","links":"Ligams","insert":"Inserir","styles":"Estils","colors":"Colors","tools":"Aisinas"},"toolbars":"Barras d'aisinas de l'editor"},"table":{"border":"Talha de la bordadura","caption":"Títol del tablèu","cell":{"menu":"Cellula","insertBefore":"Inserir una cellula abans","insertAfter":"Inserir una cellula aprèp","deleteCell":"Suprimir las cellulas","merge":"Fusionar las cellulas","mergeRight":"Fusionar cap a dreita","mergeDown":"Fusionar cap aval","splitHorizontal":"Separar la cellula orizontalament","splitVertical":"Separar la cellula verticalament","title":"Proprietats de la cellula","cellType":"Tipe de cellula","rowSpan":"Linhas ocupadas","colSpan":"Colomnas ocupadas","wordWrap":"Cesura","hAlign":"Alinhament orizontal","vAlign":"Alinhament vertical","alignBaseline":"Linha de basa","bgColor":"Color de rèireplan","borderColor":"Color de bordadura","data":"Donadas","header":"Entèsta","yes":"Òc","no":"Non","invalidWidth":"La largor de la cellula deu èsser un nombre.","invalidHeight":"La nautor de la cellula deu èsser un nombre.","invalidRowSpan":"Lo nombre de linhas ocupadas deu èsser un nombre entièr.","invalidColSpan":"Lo nombre de colomnas ocupadas deu èsser un nombre entièr.","chooseColor":"Causir"},"cellPad":"Marge intèrne de las cellulas","cellSpace":"Espaçament entre las cellulas","column":{"menu":"Colomna","insertBefore":"Inserir una colomna abans","insertAfter":"Inserir una colomna aprèp","deleteColumn":"Suprimir las colomnas"},"columns":"Colomnas","deleteTable":"Suprimir lo tablèu","headers":"Entèstas","headersBoth":"Los dos","headersColumn":"Primièra colomna","headersNone":"Pas cap","headersRow":"Primièra linha","heightUnit":"height unit","invalidBorder":"La talha de la bordadura deu èsser un nombre.","invalidCellPadding":"Lo marge intèrne de las cellulas deu èsser un nombre positiu.","invalidCellSpacing":"L'espaçament entre las cellulas deu èsser un nombre positiu.","invalidCols":"Lo nombre de colomnas deu èsser superior a 0.","invalidHeight":"La nautor del tablèu deu èsser un nombre.","invalidRows":"Lo nombre de linhas deu èsser superior a 0.","invalidWidth":"La largor del tablèu deu èsser un nombre.","menu":"Proprietats del tablèu","row":{"menu":"Linha","insertBefore":"Inserir una linha abans","insertAfter":"Inserir una linha aprèp","deleteRow":"Suprimir las linhas"},"rows":"Linhas","summary":"Resumit (descripcion)","title":"Proprietats del tablèu","toolbar":"Tablèu","widthPc":"per cent","widthPx":"pixèls","widthUnit":"unitat de largor"},"stylescombo":{"label":"Estils","panelTitle":"Estils de mesa en pagina","panelTitle1":"Estils de blòt","panelTitle2":"Estils en linha","panelTitle3":"Estils d'objècte"},"specialchar":{"options":"Opcions dels caractèrs especials","title":"Seleccionar un caractèr","toolbar":"Inserir un caractèr especial"},"sourcedialog":{"toolbar":"Font","title":"Font"},"sourcearea":{"toolbar":"Font"},"showblocks":{"toolbar":"Afichar los blòts"},"removeformat":{"toolbar":"Suprimir la mesa en forma"},"pastetext":{"button":"Pegar coma tèxte brut","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"Sembla que lo tèxte de pegar proven de Word. Lo volètz netejar abans de lo pegar ?","error":"Las donadas pegadas an pas pogut èsser netejadas a causa d'una error intèrna","title":"Pegar dempuèi Word","toolbar":"Pegar dempuèi Word"},"notification":{"closed":"Notificacion tampada."},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"magicline":{"title":"Inserir un paragraf aicí"},"list":{"bulletedlist":"Inserir/Suprimir una lista amb de piuses","numberedlist":"Inserir/Suprimir una lista numerotada"},"language":{"button":"Definir la lenga","remove":"Suprimir la lenga"},"indent":{"indent":"Aumentar l'alinèa","outdent":"Dmesir l'alinèa"},"image2":{"alt":"Tèxte alternatiu","btnUpload":"Mandar sul servidor","captioned":"Imatge amb legenda","captionPlaceholder":"Legenda","infoTab":"Informacions sus l'imatge","lockRatio":"Conservar las proporcions","menu":"Proprietats de l'imatge","pathName":"imatge","pathNameCaption":"legenda","resetSize":"Reïnicializar la talha","resizer":"Clicar e lisar per redimensionar","title":"Proprietats de l'imatge","uploadTab":"Mandar","urlMissing":"L'URL font de l'imatge es mancanta.","altMissing":"Lo tèxte alternatiu es mancant."},"horizontalrule":{"toolbar":"Inserir una linha orizontala"},"format":{"label":"Format","panelTitle":"Format de paragraf","tag_address":"Adreça","tag_div":"Division (DIV)","tag_h1":"Títol 1","tag_h2":"Títol 2","tag_h3":"Títol 3","tag_h4":"Títol 4","tag_h5":"Títol 5","tag_h6":"Títol 6","tag_p":"Normal","tag_pre":"Preformatat"},"filetools":{"loadError":"Una error s'es produita pendent la lectura del fichièr.","networkError":"Una error de ret s'es produita pendent lo mandadís del fichièr.","httpError404":"Una error HTTP s'es produita pendent lo mandadís del fichièr (404 : fichièr pas trobat).","httpError403":"Una error HTTP s'es produita pendent lo mandadís del fichièr (403 : accès refusat).","httpError":"Una error HTTP s'es produita pendent lo mandadís del fichièr (error : %1).","noUrlError":"L'URL de mandadís es pas especificada.","responseError":"Responsa del servidor incorrècta."},"elementspath":{"eleLabel":"Camin dels elements","eleTitle":"Element %1"},"contextmenu":{"options":"Opcions del menú contextual"},"clipboard":{"copy":"Copiar","copyError":"Los paramètres de seguretat de vòstre navigador autorizan pas l'editor a executar automaticament l'operacion « Copiar ». Utilizatz l'acorchi de clavièr a aqueste efièit (Ctrl/Cmd+C).","cut":"Talhar","cutError":"Los paramètres de seguretat de vòstre navigador autorizan pas l'editor a executar automaticament l'operacion « Talhar ». Utilizatz l'acorchi de clavièr a aqueste efièit (Ctrl/Cmd+X).","paste":"Pegar","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Citacion"},"basicstyles":{"bold":"Gras","italic":"Italica","strike":"Raiat","subscript":"Indici","superscript":"Exponent","underline":"Solinhat"},"about":{"copy":"Copyright &copy; $1. Totes los dreits reservats.","dlgTitle":"A prepaus de CKEditor 4","moreInfo":"Per las informacions de licéncia, visitatz nòstre site web :"},"editor":"Editor de tèxte enriquit","editorPanel":"Tablèu de bòrd de l'editor de tèxte enriquit","common":{"editorHelp":"Utilisatz l'acorchi Alt-0 per obténer d'ajuda","browseServer":"Percórrer lo servidor","url":"URL","protocol":"Protocòl","upload":"Mandar","uploadSubmit":"Mandar sul servidor","image":"Imatge","form":"Formulari","checkbox":"Casa de marcar","radio":"Boton ràdio","textField":"Camp  tèxte","textarea":"Zòna de tèxte","hiddenField":"Camp invisible","button":"Boton","select":"Lista desenrotlanta","imageButton":"Boton amb imatge","notSet":"<indefinit>","id":"Id","name":"Nom","langDir":"Sens d'escritura","langDirLtr":"Esquèrra a dreita (LTR)","langDirRtl":"Dreita a esquèrra (RTL)","langCode":"Còdi de lenga","longDescr":"URL de descripcion longa","cssClass":"Classas d'estil","advisoryTitle":"Infobulla","cssStyle":"Estil","ok":"D'acòrdi","cancel":"Anullar","close":"Tampar","preview":"Previsualizar","resize":"Redimensionar","generalTab":"General","advancedTab":"Avançat","validateNumberFailed":"Aquesta valor es pas un nombre.","confirmNewPage":"Los cambiaments pas salvats seràn perduts. Sètz segur que volètz cargar una novèla pagina ?","confirmCancel":"Certanas opcions son estadas modificadas. Sètz segur que volètz tampar ?","options":"Opcions","target":"Cibla","targetNew":"Novèla fenèstra (_blank)","targetTop":"Fenèstra superiora (_top)","targetSelf":"Meteissa fenèstra (_self)","targetParent":"Fenèstra parent (_parent)","langDirLTR":"Esquèrra a dreita (LTR)","langDirRTL":"Dreita a esquèrra (RTL)","styles":"Estil","cssClasses":"Classas d'estil","width":"Largor","height":"Nautor","align":"Alinhament","left":"Esquèrra","right":"Dreita","center":"Centrar","justify":"Justificar","alignLeft":"Alinhar a esquèrra","alignRight":"Alinhar a dreita","alignCenter":"Align Center","alignTop":"Naut","alignMiddle":"Mitan","alignBottom":"Bas","alignNone":"Pas cap","invalidValue":"Valor invalida.","invalidHeight":"La nautor deu èsser un nombre.","invalidWidth":"La largor deu èsser un nombre.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"La valor especificada pel camp « %1 » deu èsser un nombre positiu amb o sens unitat de mesura CSS valid (px, %, in, cm, mm, em, ex, pt, o pc).","invalidHtmlLength":"La valor especificada pel camp « %1 » deu èsser un nombre positiu amb o sens unitat de mesura HTML valid (px o %).","invalidInlineStyle":"La valor especificada per l'estil en linha deu èsser compausada d'un o mantun parelh al format « nom : valor », separats per de punts-virgulas.","cssLengthTooltip":"Entrar un nombre per una valor en pixèls o un nombre amb una unitat de mesura CSS valida (px, %, in, cm, mm, em, ex, pt, o pc).","unavailable":"%1<span class=\"cke_accessibility\">, indisponible</span>","keyboard":{"8":"Retorn","13":"Entrada","16":"Majuscula","17":"Ctrl","18":"Alt","32":"Espaci","35":"Fin","36":"Origina","46":"Suprimir","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Comanda"},"keyboardShortcut":"Acorchi de clavièr","optionDefault":"Default"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/pl.js b/core/assets/vendor/ckeditor/lang/pl.js
index 474fe76dd0dd..3f9669244559 100644
--- a/core/assets/vendor/ckeditor/lang/pl.js
+++ b/core/assets/vendor/ckeditor/lang/pl.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['pl']={"widget":{"move":"Kliknij i przeciągnij, by przenieść.","label":"Widget %1"},"undo":{"redo":"Ponów","undo":"Cofnij"},"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"},"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","heightUnit":"jednostka wysokości","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"},"stylescombo":{"label":"Styl","panelTitle":"Style formatujące","panelTitle1":"Style blokowe","panelTitle2":"Style liniowe","panelTitle3":"Style obiektowe"},"specialchar":{"options":"Opcje znaków specjalnych","title":"Wybierz znak specjalny","toolbar":"Wstaw znak specjalny"},"sourcedialog":{"toolbar":"Źródło dokumentu","title":"Źródło dokumentu"},"sourcearea":{"toolbar":"Źródło dokumentu"},"showblocks":{"toolbar":"Pokaż bloki"},"removeformat":{"toolbar":"Usuń formatowanie"},"pastetext":{"button":"Wklej jako czysty tekst","pasteNotification":"Naciśnij %1 by wkleić tekst. Twoja przeglądarka nie obsługuje wklejania za pomocą przycisku paska narzędzi lub opcji menu kontekstowego.","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"},"notification":{"closed":"Powiadomienie zostało zamknięte."},"maximize":{"maximize":"Maksymalizuj","minimize":"Minimalizuj"},"magicline":{"title":"Wstaw nowy akapit"},"list":{"bulletedlist":"Lista wypunktowana","numberedlist":"Lista numerowana"},"language":{"button":"Ustaw język","remove":"Usuń język"},"indent":{"indent":"Zwiększ wcięcie","outdent":"Zmniejsz wcięcie"},"image2":{"alt":"Tekst zastępczy","btnUpload":"Wyślij","captioned":"Obrazek z podpisem","captionPlaceholder":"Podpis","infoTab":"Informacje o obrazku","lockRatio":"Zablokuj proporcje","menu":"Właściwości obrazka","pathName":"obrazek","pathNameCaption":"podpis","resetSize":"Przywróć rozmiar","resizer":"Kliknij i przeciągnij, by zmienić rozmiar.","title":"Właściwości obrazka","uploadTab":"Wyślij","urlMissing":"Podaj adres URL obrazka.","altMissing":"Podaj tekst zastępczy obrazka."},"horizontalrule":{"toolbar":"Wstaw poziomą linię"},"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"},"filetools":{"loadError":"Błąd podczas odczytu pliku.","networkError":"W trakcie wysyłania pliku pojawił się błąd sieciowy.","httpError404":"Błąd HTTP w trakcie wysyłania pliku (404: Nie znaleziono pliku).","httpError403":"Błąd HTTP w trakcie wysyłania pliku (403: Zabroniony).","httpError":"Błąd HTTP w trakcie wysyłania pliku (status błędu: %1).","noUrlError":"Nie zdefiniowano adresu URL do przesłania pliku.","responseError":"Niepoprawna odpowiedź serwera."},"elementspath":{"eleLabel":"Ścieżka elementów","eleTitle":"element %1"},"contextmenu":{"options":"Opcje menu kontekstowego"},"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","pasteNotification":"Naciśnij %1 by wkleić tekst. Twoja przeglądarka nie pozwala na wklejanie za pomocą przycisku paska narzędzi lub opcji menu kontekstowego.","pasteArea":"Miejsce do wklejenia treści","pasteMsg":"Wklej treść do obszaru poniżej i naciśnij OK."},"blockquote":{"toolbar":"Cytat"},"basicstyles":{"bold":"Pogrubienie","italic":"Kursywa","strike":"Przekreślenie","subscript":"Indeks dolny","superscript":"Indeks górny","underline":"Podkreślenie"},"about":{"copy":"Copyright &copy; $1. Wszelkie prawa zastrzeżone.","dlgTitle":"Informacje o programie CKEditor 4","moreInfo":"Informacje na temat licencji można znaleźć na naszej stronie:"},"editor":"Edytor tekstu sformatowanego","editorPanel":"Panel edytora 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","left":"Do lewej","right":"Do prawej","center":"Do środka","justify":"Wyjustuj","alignLeft":"Wyrównaj do lewej","alignRight":"Wyrównaj do prawej","alignCenter":"Wyśrodkuj","alignTop":"Do góry","alignMiddle":"Do środka","alignBottom":"Do dołu","alignNone":"Brak","invalidValue":"Nieprawidłowa wartość.","invalidHeight":"Wysokość musi być liczbą.","invalidWidth":"Szerokość musi być liczbą.","invalidLength":"Wartość podana dla pola \"%1\" musi być liczbą dodatnią bez jednostki lub z poprawną jednostką długości (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"spacja","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Skrót klawiszowy","optionDefault":"Domyślny"}};
\ No newline at end of file
+CKEDITOR.lang['pl']={"widget":{"move":"Kliknij i przeciągnij, by przenieść.","label":"Widget %1"},"undo":{"redo":"Ponów","undo":"Cofnij"},"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"},"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","heightUnit":"jednostka wysokości","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"},"stylescombo":{"label":"Styl","panelTitle":"Style formatujące","panelTitle1":"Style blokowe","panelTitle2":"Style liniowe","panelTitle3":"Style obiektowe"},"specialchar":{"options":"Opcje znaków specjalnych","title":"Wybierz znak specjalny","toolbar":"Wstaw znak specjalny"},"sourcedialog":{"toolbar":"Źródło dokumentu","title":"Źródło dokumentu"},"sourcearea":{"toolbar":"Źródło dokumentu"},"showblocks":{"toolbar":"Pokaż bloki"},"removeformat":{"toolbar":"Usuń formatowanie"},"pastetext":{"button":"Wklej jako czysty tekst","pasteNotification":"Naciśnij %1 by wkleić tekst. Twoja przeglądarka nie obsługuje wklejania za pomocą przycisku paska narzędzi lub opcji menu kontekstowego.","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"},"notification":{"closed":"Powiadomienie zostało zamknięte."},"maximize":{"maximize":"Maksymalizuj","minimize":"Minimalizuj"},"magicline":{"title":"Wstaw nowy akapit"},"list":{"bulletedlist":"Lista wypunktowana","numberedlist":"Lista numerowana"},"language":{"button":"Ustaw język","remove":"Usuń język"},"indent":{"indent":"Zwiększ wcięcie","outdent":"Zmniejsz wcięcie"},"image2":{"alt":"Tekst zastępczy","btnUpload":"Wyślij","captioned":"Obrazek z podpisem","captionPlaceholder":"Podpis","infoTab":"Informacje o obrazku","lockRatio":"Zablokuj proporcje","menu":"Właściwości obrazka","pathName":"obrazek","pathNameCaption":"podpis","resetSize":"Przywróć rozmiar","resizer":"Kliknij i przeciągnij, by zmienić rozmiar.","title":"Właściwości obrazka","uploadTab":"Wyślij","urlMissing":"Podaj adres URL obrazka.","altMissing":"Podaj tekst zastępczy obrazka."},"horizontalrule":{"toolbar":"Wstaw poziomą linię"},"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"},"filetools":{"loadError":"Błąd podczas odczytu pliku.","networkError":"W trakcie wysyłania pliku pojawił się błąd sieciowy.","httpError404":"Błąd HTTP w trakcie wysyłania pliku (404: Nie znaleziono pliku).","httpError403":"Błąd HTTP w trakcie wysyłania pliku (403: Zabroniony).","httpError":"Błąd HTTP w trakcie wysyłania pliku (status błędu: %1).","noUrlError":"Nie zdefiniowano adresu URL do przesłania pliku.","responseError":"Niepoprawna odpowiedź serwera."},"elementspath":{"eleLabel":"Ścieżka elementów","eleTitle":"element %1"},"contextmenu":{"options":"Opcje menu kontekstowego"},"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","pasteNotification":"Naciśnij %1 by wkleić tekst. Twoja przeglądarka nie pozwala na wklejanie za pomocą przycisku paska narzędzi lub opcji menu kontekstowego.","pasteArea":"Miejsce do wklejenia treści","pasteMsg":"Wklej treść do obszaru poniżej i naciśnij OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Cytat"},"basicstyles":{"bold":"Pogrubienie","italic":"Kursywa","strike":"Przekreślenie","subscript":"Indeks dolny","superscript":"Indeks górny","underline":"Podkreślenie"},"about":{"copy":"Copyright &copy; $1. Wszelkie prawa zastrzeżone.","dlgTitle":"Informacje o programie CKEditor 4","moreInfo":"Informacje na temat licencji można znaleźć na naszej stronie:"},"editor":"Edytor tekstu sformatowanego","editorPanel":"Panel edytora 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","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","left":"Do lewej","right":"Do prawej","center":"Do środka","justify":"Wyjustuj","alignLeft":"Wyrównaj do lewej","alignRight":"Wyrównaj do prawej","alignCenter":"Wyśrodkuj","alignTop":"Do góry","alignMiddle":"Do środka","alignBottom":"Do dołu","alignNone":"Brak","invalidValue":"Nieprawidłowa wartość.","invalidHeight":"Wysokość musi być liczbą.","invalidWidth":"Szerokość musi być liczbą.","invalidLength":"Wartość podana dla pola \"%1\" musi być liczbą dodatnią bez jednostki lub z poprawną jednostką długości (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"spacja","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Skrót klawiszowy","optionDefault":"Domyślny"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/pt-br.js b/core/assets/vendor/ckeditor/lang/pt-br.js
index f3dd8cfb40dd..276712789a27 100644
--- a/core/assets/vendor/ckeditor/lang/pt-br.js
+++ b/core/assets/vendor/ckeditor/lang/pt-br.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['pt-br']={"widget":{"move":"Click e arraste para mover","label":"%1 widget"},"undo":{"redo":"Refazer","undo":"Desfazer"},"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"},"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","heightUnit":"Unidade para altura","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"},"stylescombo":{"label":"Estilo","panelTitle":"Estilos de Formatação","panelTitle1":"Estilos de bloco","panelTitle2":"Estilos de texto corrido","panelTitle3":"Estilos de objeto"},"specialchar":{"options":"Opções de Caractere Especial","title":"Selecione um Caractere Especial","toolbar":"Inserir Caractere Especial"},"sourcedialog":{"toolbar":"Código-Fonte","title":"Código-Fonte"},"sourcearea":{"toolbar":"Código-Fonte"},"showblocks":{"toolbar":"Mostrar blocos de código"},"removeformat":{"toolbar":"Remover Formatação"},"pastetext":{"button":"Colar como Texto sem Formatação","pasteNotification":"Pressione %1 para colar. Seu navegador não suporta colar a partir do botão da barra de ferramentas ou do menu de contexto.","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"},"notification":{"closed":"Notificação fechada."},"maximize":{"maximize":"Maximizar","minimize":"Minimize"},"magicline":{"title":"Inserir um parágrafo aqui"},"list":{"bulletedlist":"Lista sem números","numberedlist":"Lista numerada"},"language":{"button":"Configure o Idioma","remove":"Remover Idioma"},"indent":{"indent":"Aumentar Recuo","outdent":"Diminuir Recuo"},"image2":{"alt":"Texto Alternativo","btnUpload":"Enviar para o Servidor","captioned":"Legenda da Imagem","captionPlaceholder":"Legenda","infoTab":"Informações da Imagem","lockRatio":"Travar Proporções","menu":"Formatar Imagem","pathName":"Imagem","pathNameCaption":"Legenda","resetSize":"Redefinir para o Tamanho Original","resizer":"Click e arraste para redimensionar","title":"Formatar Imagem","uploadTab":"Enviar ao Servidor","urlMissing":"URL da imagem está faltando.","altMissing":"Texto alternativo não informado."},"horizontalrule":{"toolbar":"Inserir Linha Horizontal"},"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"},"filetools":{"loadError":"Um erro ocorreu durante a leitura do arquivo.","networkError":"Um erro de rede ocorreu durante o envio do arquivo.","httpError404":"Um erro HTTP ocorreu durante o envio do arquivo (404: Arquivo não encontrado).","httpError403":"Um erro HTTP ocorreu durante o envio do arquivo (403: Proibido).","httpError":"Um erro HTTP ocorreu durante o envio do arquivo (status do erro: %1)","noUrlError":"A URL de upload não está definida.","responseError":"Resposta incorreta do servidor."},"elementspath":{"eleLabel":"Caminho dos Elementos","eleTitle":"Elemento %1"},"contextmenu":{"options":"Opções Menu de Contexto"},"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","pasteNotification":"Pressione %1 para colar. Seu navegador não permite colar pelos botões da barra de tarefas ou pelo menu de contexto.","pasteArea":"Área para Colar","pasteMsg":"Cole o conteúdo na área abaixo e pressione OK."},"blockquote":{"toolbar":"Citação"},"basicstyles":{"bold":"Negrito","italic":"Itálico","strike":"Tachado","subscript":"Subscrito","superscript":"Sobrescrito","underline":"Sublinhado"},"about":{"copy":"Copyright &copy; $1. Todos os direitos reservados.","dlgTitle":"Sobre o CKEditor 4","moreInfo":"Para informações sobre a licença por favor visite o nosso site:"},"editor":"Editor de Rich Text","editorPanel":"Painel do editor de Rich Text","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","left":"Esquerda","right":"Direita","center":"Centralizado","justify":"Justificar","alignLeft":"Alinhar Esquerda","alignRight":"Alinhar Direita","alignCenter":"Centralizar","alignTop":"Superior","alignMiddle":"Centralizado","alignBottom":"Inferior","alignNone":"Nenhum","invalidValue":"Valor inválido.","invalidHeight":"A altura tem que ser um número","invalidWidth":"A largura tem que ser um número.","invalidLength":"Valor especifico para o campo \"%1\" deve ser um número positivo com ou sem uma unidade mensurável (%2) válida.","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 ou 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 ou %).","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 ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, indisponível</span>","keyboard":{"8":"Tecla Retroceder","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Tecla Espaço","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Comando"},"keyboardShortcut":"Atalho do teclado","optionDefault":"Padrão"}};
\ No newline at end of file
+CKEDITOR.lang['pt-br']={"widget":{"move":"Click e arraste para mover","label":"%1 widget"},"undo":{"redo":"Refazer","undo":"Desfazer"},"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"},"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","heightUnit":"Unidade para altura","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"},"stylescombo":{"label":"Estilo","panelTitle":"Estilos de Formatação","panelTitle1":"Estilos de bloco","panelTitle2":"Estilos de texto corrido","panelTitle3":"Estilos de objeto"},"specialchar":{"options":"Opções de Caractere Especial","title":"Selecione um Caractere Especial","toolbar":"Inserir Caractere Especial"},"sourcedialog":{"toolbar":"Código-Fonte","title":"Código-Fonte"},"sourcearea":{"toolbar":"Código-Fonte"},"showblocks":{"toolbar":"Mostrar blocos de código"},"removeformat":{"toolbar":"Remover Formatação"},"pastetext":{"button":"Colar como Texto sem Formatação","pasteNotification":"Pressione %1 para colar. Seu navegador não suporta colar a partir do botão da barra de ferramentas ou do menu de contexto.","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"},"notification":{"closed":"Notificação fechada."},"maximize":{"maximize":"Maximizar","minimize":"Minimize"},"magicline":{"title":"Inserir um parágrafo aqui"},"list":{"bulletedlist":"Lista sem números","numberedlist":"Lista numerada"},"language":{"button":"Configure o Idioma","remove":"Remover Idioma"},"indent":{"indent":"Aumentar Recuo","outdent":"Diminuir Recuo"},"image2":{"alt":"Texto Alternativo","btnUpload":"Enviar para o Servidor","captioned":"Legenda da Imagem","captionPlaceholder":"Legenda","infoTab":"Informações da Imagem","lockRatio":"Travar Proporções","menu":"Formatar Imagem","pathName":"Imagem","pathNameCaption":"Legenda","resetSize":"Redefinir para o Tamanho Original","resizer":"Click e arraste para redimensionar","title":"Formatar Imagem","uploadTab":"Enviar ao Servidor","urlMissing":"URL da imagem está faltando.","altMissing":"Texto alternativo não informado."},"horizontalrule":{"toolbar":"Inserir Linha Horizontal"},"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"},"filetools":{"loadError":"Um erro ocorreu durante a leitura do arquivo.","networkError":"Um erro de rede ocorreu durante o envio do arquivo.","httpError404":"Um erro HTTP ocorreu durante o envio do arquivo (404: Arquivo não encontrado).","httpError403":"Um erro HTTP ocorreu durante o envio do arquivo (403: Proibido).","httpError":"Um erro HTTP ocorreu durante o envio do arquivo (status do erro: %1)","noUrlError":"A URL de upload não está definida.","responseError":"Resposta incorreta do servidor."},"elementspath":{"eleLabel":"Caminho dos Elementos","eleTitle":"Elemento %1"},"contextmenu":{"options":"Opções Menu de Contexto"},"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","pasteNotification":"Pressione %1 para colar. Seu navegador não permite colar pelos botões da barra de tarefas ou pelo menu de contexto.","pasteArea":"Área para Colar","pasteMsg":"Cole o conteúdo na área abaixo e pressione OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Citação"},"basicstyles":{"bold":"Negrito","italic":"Itálico","strike":"Tachado","subscript":"Subscrito","superscript":"Sobrescrito","underline":"Sublinhado"},"about":{"copy":"Copyright &copy; $1. Todos os direitos reservados.","dlgTitle":"Sobre o CKEditor 4","moreInfo":"Para informações sobre a licença por favor visite o nosso site:"},"editor":"Editor de Rich Text","editorPanel":"Painel do editor de Rich Text","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","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","left":"Esquerda","right":"Direita","center":"Centralizado","justify":"Justificar","alignLeft":"Alinhar Esquerda","alignRight":"Alinhar Direita","alignCenter":"Centralizar","alignTop":"Superior","alignMiddle":"Centralizado","alignBottom":"Inferior","alignNone":"Nenhum","invalidValue":"Valor inválido.","invalidHeight":"A altura tem que ser um número","invalidWidth":"A largura tem que ser um número.","invalidLength":"Valor especifico para o campo \"%1\" deve ser um número positivo com ou sem uma unidade mensurável (%2) válida.","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 ou 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 ou %).","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 ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, indisponível</span>","keyboard":{"8":"Tecla Retroceder","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Tecla Espaço","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Comando"},"keyboardShortcut":"Atalho do teclado","optionDefault":"Padrão"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/pt.js b/core/assets/vendor/ckeditor/lang/pt.js
index 7d054994966b..41984cc37632 100644
--- a/core/assets/vendor/ckeditor/lang/pt.js
+++ b/core/assets/vendor/ckeditor/lang/pt.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['pt']={"widget":{"move":"Clique e arraste para mover","label":"%1 widget"},"undo":{"redo":"Refazer","undo":"Anular"},"toolbar":{"toolbarCollapse":"Ocultar barra de ferramentas","toolbarExpand":"Expandir barra de ferramentas","toolbarGroups":{"document":"Documento","clipboard":"Área de transferência/Anular","editing":"Edição","forms":"Formulários","basicstyles":"Estilos básicos","paragraph":"Parágrafo","links":"Hiperligações","insert":"Inserir","styles":"Estilos","colors":"Cores","tools":"Ferramentas"},"toolbars":"Editor de barras de ferramentas"},"table":{"border":"Tamanho do contorno","caption":"Legenda","cell":{"menu":"Célula","insertBefore":"Inserir célula antes","insertAfter":"Inserir célula depois","deleteCell":"Apagar células","merge":"Unir células","mergeRight":"Unir à direita","mergeDown":"Fundir abaixo","splitHorizontal":"Dividir célula horizontalmente","splitVertical":"Dividir célula verticalmente","title":"Propriedades da célula","cellType":"Tipo de célula","rowSpan":"Linhas na célula","colSpan":"Colunas na célula","wordWrap":"Moldar texto","hAlign":"Alinhamento horizontal","vAlign":"Alinhamento vertical","alignBaseline":"Linha base","bgColor":"Cor de fundo","borderColor":"Cor da margem","data":"Dados","header":"Cabeçalho","yes":"Sim","no":"Não","invalidWidth":"A largura da célula deve ser um número.","invalidHeight":"A altura da célula deve ser um número.","invalidRowSpan":"As linhas da célula devem ser um número inteiro.","invalidColSpan":"As colunas da célula devem ter um número inteiro.","chooseColor":"Escolher"},"cellPad":"Espaço interior","cellSpace":"Espaçamento de célula","column":{"menu":"Coluna","insertBefore":"Inserir coluna antes","insertAfter":"Inserir coluna depois","deleteColumn":"Apagar colunas"},"columns":"Colunas","deleteTable":"Apagar tabela","headers":"Cabeçalhos","headersBoth":"Ambos","headersColumn":"Primeira coluna","headersNone":"Nenhum","headersRow":"Primeira linha","heightUnit":"height unit","invalidBorder":"O tamanho da margem tem de ser um número.","invalidCellPadding":"A criação do espaço na célula deve ser um número positivo.","invalidCellSpacing":"O espaçamento da célula deve ser um número positivo.","invalidCols":"O número de colunas tem de ser um número maior que 0.","invalidHeight":"A altura da tabela tem de ser um número.","invalidRows":"O número de linhas tem de ser maior que 0.","invalidWidth":"A largura da tabela tem de ser um número.","menu":"Propriedades da tabela","row":{"menu":"Linha","insertBefore":"Inserir linha antes","insertAfter":"Inserir linha depois","deleteRow":"Apagar linhas"},"rows":"Linhas","summary":"Resumo","title":"Propriedades da tabela","toolbar":"Tabela","widthPc":"percentagem","widthPx":"píxeis","widthUnit":"unidade da largura"},"stylescombo":{"label":"Estilos","panelTitle":"Estilos de formatação","panelTitle1":"Estilos de bloco","panelTitle2":"Estilos nas etiquetas","panelTitle3":"Estilos em objeto"},"specialchar":{"options":"Opções de caracteres especiais","title":"Selecione um caracter especial","toolbar":"Inserir carácter especial"},"sourcedialog":{"toolbar":"Fonte","title":"Fonte"},"sourcearea":{"toolbar":"Fonte"},"showblocks":{"toolbar":"Exibir blocos"},"removeformat":{"toolbar":"Limpar formatação"},"pastetext":{"button":"Colar como texto simples","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Colar como texto simples"},"pastefromword":{"confirmCleanup":"O texto que pretende colar parece ter sido copiado do Word. Deseja limpar o código antes de o colar?","error":"Não foi possível limpar a informação colada devido a um erro interno.","title":"Colar do Word","toolbar":"Colar do Word"},"notification":{"closed":"Notificação encerrada."},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"magicline":{"title":"Inserir parágrafo aqui"},"list":{"bulletedlist":"Marcas","numberedlist":"Numeração"},"language":{"button":"Definir Idioma","remove":"Remover idioma"},"indent":{"indent":"Aumentar avanço","outdent":"Diminuir avanço"},"image2":{"alt":"Texto alternativo","btnUpload":"Enviar para o servidor","captioned":"Imagem legendada","captionPlaceholder":"Legenda","infoTab":"Informação da imagem","lockRatio":"Proporcional","menu":"Propriedades da imagem","pathName":"imagem","pathNameCaption":"legenda","resetSize":"Tamanho original","resizer":"Clique e arraste para redimensionar","title":"Propriedades da imagem","uploadTab":"Carregar","urlMissing":"O URL de origem da imagem está em falta.","altMissing":"Texto alternativo em falta."},"horizontalrule":{"toolbar":"Inserir linha horizontal"},"format":{"label":"Formatar","panelTitle":"Formatar Parágrafo","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"},"filetools":{"loadError":"Ocorreu um erro ao ler o ficheiro","networkError":"Ocorreu um erro de rede ao carregar o ficheiro.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Caminho dos elementos","eleTitle":"Elemento %1"},"contextmenu":{"options":"Menu de opções de contexto"},"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","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Área de colagem","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Bloco de citação"},"basicstyles":{"bold":"Negrito","italic":"Itálico","strike":"Rasurado","subscript":"Superior à linha","superscript":"Superior à linha","underline":"Sublinhado"},"about":{"copy":"Direitos de Autor &copy; $1. Todos os direitos reservados.","dlgTitle":"Sobre o CKEditor 4","moreInfo":"Para informação sobre licenciamento visite o nosso sítio web:"},"editor":"Editor de texto enriquecido","editorPanel":"Painel do editor de texto enriquecido","common":{"editorHelp":"Pressione ALT+0 para ajuda","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","textField":"Campo de texto","textarea":"Área de texto","hiddenField":"Campo oculto","button":"Botão","select":"Campo de seleção","imageButton":"Botão da imagem","notSet":"<Não definido>","id":"ID","name":"Nome","langDir":"Direção do idioma","langDirLtr":"Esquerda para a Direita (EPD)","langDirRtl":"Direita para a Esquerda (DPE)","langCode":"Código do idioma","longDescr":"Descrição completa do URL","cssClass":"Classes de estilo das folhas","advisoryTitle":"Título consultivo","cssStyle":"Estilo","ok":"CONFIRMAR","cancel":"Cancelar","close":"Fechar","preview":"Pré-visualização","resize":"Redimensionar","generalTab":"Geral","advancedTab":"Avançado","validateNumberFailed":"Este valor não é um numero.","confirmNewPage":"Irão ser perdidas quaisquer alterações não guardadas. Tem a certeza que deseja carregar a nova página?","confirmCancel":"Foram alteradas algumas das opções. Tem a certeza que deseja fechar a janela?","options":"Opções","target":"Destino","targetNew":"Nova janela (_blank)","targetTop":"Janela superior (_top)","targetSelf":"Mesma janela (_self)","targetParent":"Janela dependente (_parent)","langDirLTR":"Esquerda para a Direita (EPD)","langDirRTL":"Direita para a Esquerda (DPE)","styles":"Estilo","cssClasses":"Classes de folhas de estilo","width":"Largura","height":"Altura","align":"Alinhamento","left":"Esquerda","right":"Direita","center":"Centrado","justify":"Justificado","alignLeft":"Alinhar à esquerda","alignRight":"Alinhar à direita","alignCenter":"Centrado","alignTop":"Topo","alignMiddle":"Meio","alignBottom":"Base","alignNone":"Nenhum","invalidValue":"Valor inválido.","invalidHeight":"A altura deve ser um número.","invalidWidth":"A largura deve ser um número. ","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"O valor especificado para o campo \"1%\" deve ser um número positivo, com ou sem uma unidade de medida CSS válida (px, %, in, cm, mm, em, ex, pt, ou pc).","invalidHtmlLength":"O valor especificado para o campo \"1%\" deve ser um número positivo, com ou sem uma unidade de medida HTML válida (px ou %).","invalidInlineStyle":"O valor especificado para o estilo em linha deve constituir um ou mais conjuntos de valores com o formato de \"nome : valor\", separados por ponto e vírgula.","cssLengthTooltip":"Insira um número para um valor em píxeis ou um número com uma unidade CSS válida (px, %, in, cm, mm, em, ex, pt, ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, indisponível</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Espaço","35":"Fim","36":"Entrada","46":"Eliminar","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Comando"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Padrão"}};
\ No newline at end of file
+CKEDITOR.lang['pt']={"widget":{"move":"Clique e arraste para mover","label":"%1 widget"},"undo":{"redo":"Refazer","undo":"Anular"},"toolbar":{"toolbarCollapse":"Ocultar barra de ferramentas","toolbarExpand":"Expandir barra de ferramentas","toolbarGroups":{"document":"Documento","clipboard":"Área de transferência/Anular","editing":"Edição","forms":"Formulários","basicstyles":"Estilos básicos","paragraph":"Parágrafo","links":"Hiperligações","insert":"Inserir","styles":"Estilos","colors":"Cores","tools":"Ferramentas"},"toolbars":"Editor de barras de ferramentas"},"table":{"border":"Tamanho do contorno","caption":"Legenda","cell":{"menu":"Célula","insertBefore":"Inserir célula antes","insertAfter":"Inserir célula depois","deleteCell":"Apagar células","merge":"Unir células","mergeRight":"Unir à direita","mergeDown":"Fundir abaixo","splitHorizontal":"Dividir célula horizontalmente","splitVertical":"Dividir célula verticalmente","title":"Propriedades da célula","cellType":"Tipo de célula","rowSpan":"Linhas na célula","colSpan":"Colunas na célula","wordWrap":"Moldar texto","hAlign":"Alinhamento horizontal","vAlign":"Alinhamento vertical","alignBaseline":"Linha base","bgColor":"Cor de fundo","borderColor":"Cor da margem","data":"Dados","header":"Cabeçalho","yes":"Sim","no":"Não","invalidWidth":"A largura da célula deve ser um número.","invalidHeight":"A altura da célula deve ser um número.","invalidRowSpan":"As linhas da célula devem ser um número inteiro.","invalidColSpan":"As colunas da célula devem ter um número inteiro.","chooseColor":"Escolher"},"cellPad":"Espaço interior","cellSpace":"Espaçamento de célula","column":{"menu":"Coluna","insertBefore":"Inserir coluna antes","insertAfter":"Inserir coluna depois","deleteColumn":"Apagar colunas"},"columns":"Colunas","deleteTable":"Apagar tabela","headers":"Cabeçalhos","headersBoth":"Ambos","headersColumn":"Primeira coluna","headersNone":"Nenhum","headersRow":"Primeira linha","heightUnit":"height unit","invalidBorder":"O tamanho da margem tem de ser um número.","invalidCellPadding":"A criação do espaço na célula deve ser um número positivo.","invalidCellSpacing":"O espaçamento da célula deve ser um número positivo.","invalidCols":"O número de colunas tem de ser um número maior que 0.","invalidHeight":"A altura da tabela tem de ser um número.","invalidRows":"O número de linhas tem de ser maior que 0.","invalidWidth":"A largura da tabela tem de ser um número.","menu":"Propriedades da tabela","row":{"menu":"Linha","insertBefore":"Inserir linha antes","insertAfter":"Inserir linha depois","deleteRow":"Apagar linhas"},"rows":"Linhas","summary":"Resumo","title":"Propriedades da tabela","toolbar":"Tabela","widthPc":"percentagem","widthPx":"píxeis","widthUnit":"unidade da largura"},"stylescombo":{"label":"Estilos","panelTitle":"Estilos de formatação","panelTitle1":"Estilos de bloco","panelTitle2":"Estilos nas etiquetas","panelTitle3":"Estilos em objeto"},"specialchar":{"options":"Opções de caracteres especiais","title":"Selecione um caracter especial","toolbar":"Inserir carácter especial"},"sourcedialog":{"toolbar":"Fonte","title":"Fonte"},"sourcearea":{"toolbar":"Fonte"},"showblocks":{"toolbar":"Exibir blocos"},"removeformat":{"toolbar":"Limpar formatação"},"pastetext":{"button":"Colar como texto simples","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Colar como texto simples"},"pastefromword":{"confirmCleanup":"O texto que pretende colar parece ter sido copiado do Word. Deseja limpar o código antes de o colar?","error":"Não foi possível limpar a informação colada devido a um erro interno.","title":"Colar do Word","toolbar":"Colar do Word"},"notification":{"closed":"Notificação encerrada."},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"magicline":{"title":"Inserir parágrafo aqui"},"list":{"bulletedlist":"Marcas","numberedlist":"Numeração"},"language":{"button":"Definir Idioma","remove":"Remover idioma"},"indent":{"indent":"Aumentar avanço","outdent":"Diminuir avanço"},"image2":{"alt":"Texto alternativo","btnUpload":"Enviar para o servidor","captioned":"Imagem legendada","captionPlaceholder":"Legenda","infoTab":"Informação da imagem","lockRatio":"Proporcional","menu":"Propriedades da imagem","pathName":"imagem","pathNameCaption":"legenda","resetSize":"Tamanho original","resizer":"Clique e arraste para redimensionar","title":"Propriedades da imagem","uploadTab":"Carregar","urlMissing":"O URL de origem da imagem está em falta.","altMissing":"Texto alternativo em falta."},"horizontalrule":{"toolbar":"Inserir linha horizontal"},"format":{"label":"Formatar","panelTitle":"Formatar Parágrafo","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"},"filetools":{"loadError":"Ocorreu um erro ao ler o ficheiro","networkError":"Ocorreu um erro de rede ao carregar o ficheiro.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Caminho dos elementos","eleTitle":"Elemento %1"},"contextmenu":{"options":"Menu de opções de contexto"},"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","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Área de colagem","pasteMsg":"Paste your content inside the area below and press OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Bloco de citação"},"basicstyles":{"bold":"Negrito","italic":"Itálico","strike":"Rasurado","subscript":"Superior à linha","superscript":"Superior à linha","underline":"Sublinhado"},"about":{"copy":"Direitos de Autor &copy; $1. Todos os direitos reservados.","dlgTitle":"Sobre o CKEditor 4","moreInfo":"Para informação sobre licenciamento visite o nosso sítio web:"},"editor":"Editor de texto enriquecido","editorPanel":"Painel do editor de texto enriquecido","common":{"editorHelp":"Pressione ALT+0 para ajuda","browseServer":"Navegar no servidor","url":"URL","protocol":"Protocolo","upload":"Carregar","uploadSubmit":"Enviar para o servidor","image":"Imagem","form":"Formulário","checkbox":"Caixa de verificação","radio":"Botão","textField":"Campo de texto","textarea":"Área de texto","hiddenField":"Campo oculto","button":"Botão","select":"Campo de seleção","imageButton":"Botão da imagem","notSet":"<Não definido>","id":"ID","name":"Nome","langDir":"Direção do idioma","langDirLtr":"Esquerda para a Direita (EPD)","langDirRtl":"Direita para a Esquerda (DPE)","langCode":"Código do idioma","longDescr":"Descrição completa do URL","cssClass":"Classes de estilo das folhas","advisoryTitle":"Título consultivo","cssStyle":"Estilo","ok":"CONFIRMAR","cancel":"Cancelar","close":"Fechar","preview":"Pré-visualização","resize":"Redimensionar","generalTab":"Geral","advancedTab":"Avançado","validateNumberFailed":"Este valor não é um numero.","confirmNewPage":"Irão ser perdidas quaisquer alterações não guardadas. Tem a certeza que deseja carregar a nova página?","confirmCancel":"Foram alteradas algumas das opções. Tem a certeza que deseja fechar a janela?","options":"Opções","target":"Destino","targetNew":"Nova janela (_blank)","targetTop":"Janela superior (_top)","targetSelf":"Mesma janela (_self)","targetParent":"Janela dependente (_parent)","langDirLTR":"Esquerda para a Direita (EPD)","langDirRTL":"Direita para a Esquerda (DPE)","styles":"Estilo","cssClasses":"Classes de folhas de estilo","width":"Largura","height":"Altura","align":"Alinhamento","left":"Esquerda","right":"Direita","center":"Centrado","justify":"Justificado","alignLeft":"Alinhar à esquerda","alignRight":"Alinhar à direita","alignCenter":"Centrado","alignTop":"Topo","alignMiddle":"Meio","alignBottom":"Base","alignNone":"Nenhum","invalidValue":"Valor inválido.","invalidHeight":"A altura deve ser um número.","invalidWidth":"A largura deve ser um número. ","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"O valor especificado para o campo \"1%\" deve ser um número positivo, com ou sem uma unidade de medida CSS válida (px, %, in, cm, mm, em, ex, pt, ou pc).","invalidHtmlLength":"O valor especificado para o campo \"1%\" deve ser um número positivo, com ou sem uma unidade de medida HTML válida (px ou %).","invalidInlineStyle":"O valor especificado para o estilo em linha deve constituir um ou mais conjuntos de valores com o formato de \"nome : valor\", separados por ponto e vírgula.","cssLengthTooltip":"Insira um número para um valor em píxeis ou um número com uma unidade CSS válida (px, %, in, cm, mm, em, ex, pt, ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, indisponível</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Espaço","35":"Fim","36":"Entrada","46":"Eliminar","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Comando"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Padrão"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/ro.js b/core/assets/vendor/ckeditor/lang/ro.js
index bd59371e73b2..0857083a091b 100644
--- a/core/assets/vendor/ckeditor/lang/ro.js
+++ b/core/assets/vendor/ckeditor/lang/ro.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['ro']={"widget":{"move":"Apasă și trage pentru a muta","label":"%1 widget"},"undo":{"redo":"Starea ulterioară (redo)","undo":"Starea anterioară (undo)"},"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"},"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","heightUnit":"height unit","invalidBorder":"Dimensiunea bordurii trebuie să aibe un număr.","invalidCellPadding":"Spațierea celulei trebuie sa fie un număr pozitiv","invalidCellSpacing":"Spațierea celului trebuie să fie un număr pozitiv.","invalidCols":"Numărul coloanelor trebuie să fie mai mare decât 0.","invalidHeight":"Inaltimea celulei trebuie sa fie un numar.","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"},"stylescombo":{"label":"Stil","panelTitle":"Formatare stilurilor","panelTitle1":"Bloc stiluri","panelTitle2":"Stiluri înșiruite","panelTitle3":"Stiluri obiect"},"specialchar":{"options":"Opțiuni caractere speciale","title":"Selectează caracter special","toolbar":"Inserează caracter special"},"sourcedialog":{"toolbar":"Sursa","title":"Sursa"},"sourcearea":{"toolbar":"Sursa"},"showblocks":{"toolbar":"Arată blocurile"},"removeformat":{"toolbar":"Înlătură formatarea"},"pastetext":{"button":"Adaugă ca text simplu (Plain Text)","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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"},"notification":{"closed":"Notificare închisă."},"maximize":{"maximize":"Mărește","minimize":"Micșorează"},"magicline":{"title":"Inserează paragraf aici"},"list":{"bulletedlist":"Inserează / Elimină Listă cu puncte","numberedlist":"Inserează / Elimină Listă numerotată"},"language":{"button":"Alege limba","remove":"Șterge limba deja selectată"},"indent":{"indent":"Creşte indentarea","outdent":"Scade indentarea"},"image2":{"alt":"Text alternativ","btnUpload":"Încarcă pe server","captioned":"Descris","captionPlaceholder":"Descriere implicită","infoTab":"Informaţii despre imagine","lockRatio":"Păstrează proporţiile","menu":"Proprietăţile imaginii","pathName":"Adresa căii","pathNameCaption":"Descrierea numelui căii","resetSize":"Resetează mărimea","resizer":"Redimensionare dinamică","title":"Proprietăţile imaginii","uploadTab":"Încarcă","urlMissing":"Sursa URL a imaginii lipsește.","altMissing":"Textul alternativ descriptive lipsește!"},"horizontalrule":{"toolbar":"Inserează linie orizontală"},"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"},"filetools":{"loadError":"Eroare în timpul citirii fișierului.","networkError":"Eroare de rețea în timpul încărcării fișierului.","httpError404":"Eroare HTTP în timpul încărcării fișierului (404: Fișier negăsit).","httpError403":"Eroare HTTP în timpul încărcării fișierului (403: Operașie nepermisă).","httpError":"Eroare HTTP în timpul încărcării fișierului (stare eroiare: %1).","noUrlError":"URL-ul de ăncărcare nu este specificat.","responseError":"Răspuns server incorect."},"elementspath":{"eleLabel":"Calea elementelor","eleTitle":"Nume element"},"contextmenu":{"options":"Opțiuni Meniu Contextual"},"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":"Tăiere","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ă","pasteNotification":"Apasă %1 pentru adăugare. Navigatorul (browser) tău nu suportă adăugarea din clipboard cu butonul din toolbar sau cu opțiunea din meniul contextual.","pasteArea":"Suprafața de adăugare","pasteMsg":"Adaugă conținutul tău înăuntru zonei de mai jos și apasă OK."},"blockquote":{"toolbar":"Citat"},"basicstyles":{"bold":"Îngroşat (bold)","italic":"Înclinat (italic)","strike":"Tăiat (strike through)","subscript":"Indice (subscript)","superscript":"Putere (superscript)","underline":"Subliniat (underline)"},"about":{"copy":"Copyright &copy; $1. Toate drepturile rezervate.","dlgTitle":"Despre CKEeditor 4","moreInfo":"Pentru informații despre licențiere, vă rugăm vizitați web site-ul nostru:"},"editor":"Editor de text îmbogățit","editorPanel":"Panoul editorului de text îmbogățit","common":{"editorHelp":"Apasă ALT 0 pentru ajutor","browseServer":"Răsfoiește fișiere","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":"fără setări","id":"identificator","name":"Nume","langDir":"Direcţia cuvintelor","langDirLtr":"de la stânga la dreapta (LTR)","langDirRtl":"de la dreapta la stânga (RTL)","langCode":"Codul limbii","longDescr":"Descrierea completă URL","cssClass":"Clasele cu stilul paginii (CSS)","advisoryTitle":"Titlul consultativ","cssStyle":"Stil","ok":"OK","cancel":"Anulare","close":"Închide","preview":"Previzualizare","resize":"Redimensionează","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":"Ai schimbat câteva opțiuni. Ești sigur că dorești să închiz fereastra de dialog?","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":"Clase foaie de stil","width":"Lăţime","height":"Înălţime","align":"Aliniere","left":"Aliniază la stânga","right":"Aliniază la dreapta","center":"Aliniază pe centru","justify":"Aliniere în bloc (Justify)","alignLeft":"Aliniere la stânga","alignRight":"Aliniere la dreapta","alignCenter":"Aliniere centru","alignTop":"Aliniere sus","alignMiddle":"Aliniere la mijloc","alignBottom":"Aliniere jos","alignNone":"Fără aliniere","invalidValue":"Valoare invalidă","invalidHeight":"Înălțimea trebuie să fie un număr.","invalidWidth":"Lățimea trebuie să fie un număr.","invalidLength":"Valoarea specificată pentru câmpul \"%1\" trebuie să fie un număr pozitiv cu sau fără o unitate de măsură validă (%2).","invalidCssLength":"Valoarea specificată pentru câmpul \"%1\" trebuie să fie un număr pozitiv cu sau fără o unitate de măsură validă CSS (px, %, in, cm, mm, em, ex, pt, sau pc).","invalidHtmlLength":"Valoarea specificată pentru câmpul \"%1\" trebuie să fie un număr pozitiv cu sau fără o unitate de măsură validă HTML (px sau %).","invalidInlineStyle":"Valoarea specificată pentru stil trebuie să conțină una sau mai multe construcții de tipul \"name : value\", separate prin punct și virgulă.","cssLengthTooltip":"Introdu un număr pentru o valoare în pixeli sau un număr pentru o unitate de măsură validă CSS (px, %, in, cm, mm, em, ex, pt, sau pc).","unavailable":"%1<span class=\"cke_accessibility\">, nu este disponibil</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Bară spațiu","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Scurtături tastatură","optionDefault":"Implicit"}};
\ No newline at end of file
+CKEDITOR.lang['ro']={"widget":{"move":"Apasă și trage pentru a muta","label":"%1 widget"},"undo":{"redo":"Starea ulterioară (redo)","undo":"Starea anterioară (undo)"},"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"},"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","heightUnit":"height unit","invalidBorder":"Dimensiunea bordurii trebuie să aibe un număr.","invalidCellPadding":"Spațierea celulei trebuie sa fie un număr pozitiv","invalidCellSpacing":"Spațierea celului trebuie să fie un număr pozitiv.","invalidCols":"Numărul coloanelor trebuie să fie mai mare decât 0.","invalidHeight":"Inaltimea celulei trebuie sa fie un numar.","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"},"stylescombo":{"label":"Stil","panelTitle":"Formatare stilurilor","panelTitle1":"Bloc stiluri","panelTitle2":"Stiluri înșiruite","panelTitle3":"Stiluri obiect"},"specialchar":{"options":"Opțiuni caractere speciale","title":"Selectează caracter special","toolbar":"Inserează caracter special"},"sourcedialog":{"toolbar":"Sursa","title":"Sursa"},"sourcearea":{"toolbar":"Sursa"},"showblocks":{"toolbar":"Arată blocurile"},"removeformat":{"toolbar":"Înlătură formatarea"},"pastetext":{"button":"Adaugă ca text simplu (Plain Text)","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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"},"notification":{"closed":"Notificare închisă."},"maximize":{"maximize":"Mărește","minimize":"Micșorează"},"magicline":{"title":"Inserează paragraf aici"},"list":{"bulletedlist":"Inserează / Elimină Listă cu puncte","numberedlist":"Inserează / Elimină Listă numerotată"},"language":{"button":"Alege limba","remove":"Șterge limba deja selectată"},"indent":{"indent":"Creşte indentarea","outdent":"Scade indentarea"},"image2":{"alt":"Text alternativ","btnUpload":"Încarcă pe server","captioned":"Descris","captionPlaceholder":"Descriere implicită","infoTab":"Informaţii despre imagine","lockRatio":"Păstrează proporţiile","menu":"Proprietăţile imaginii","pathName":"Adresa căii","pathNameCaption":"Descrierea numelui căii","resetSize":"Resetează mărimea","resizer":"Redimensionare dinamică","title":"Proprietăţile imaginii","uploadTab":"Încarcă","urlMissing":"Sursa URL a imaginii lipsește.","altMissing":"Textul alternativ descriptive lipsește!"},"horizontalrule":{"toolbar":"Inserează linie orizontală"},"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"},"filetools":{"loadError":"Eroare în timpul citirii fișierului.","networkError":"Eroare de rețea în timpul încărcării fișierului.","httpError404":"Eroare HTTP în timpul încărcării fișierului (404: Fișier negăsit).","httpError403":"Eroare HTTP în timpul încărcării fișierului (403: Operașie nepermisă).","httpError":"Eroare HTTP în timpul încărcării fișierului (stare eroiare: %1).","noUrlError":"URL-ul de ăncărcare nu este specificat.","responseError":"Răspuns server incorect."},"elementspath":{"eleLabel":"Calea elementelor","eleTitle":"Nume element"},"contextmenu":{"options":"Opțiuni Meniu Contextual"},"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":"Tăiere","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ă","pasteNotification":"Apasă %1 pentru adăugare. Navigatorul (browser) tău nu suportă adăugarea din clipboard cu butonul din toolbar sau cu opțiunea din meniul contextual.","pasteArea":"Suprafața de adăugare","pasteMsg":"Adaugă conținutul tău înăuntru zonei de mai jos și apasă OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Citat"},"basicstyles":{"bold":"Îngroşat (bold)","italic":"Înclinat (italic)","strike":"Tăiat (strike through)","subscript":"Indice (subscript)","superscript":"Putere (superscript)","underline":"Subliniat (underline)"},"about":{"copy":"Copyright &copy; $1. Toate drepturile rezervate.","dlgTitle":"Despre CKEeditor 4","moreInfo":"Pentru informații despre licențiere, vă rugăm vizitați web site-ul nostru:"},"editor":"Editor de text îmbogățit","editorPanel":"Panoul editorului de text îmbogățit","common":{"editorHelp":"Apasă ALT 0 pentru ajutor","browseServer":"Răsfoiește fișiere","url":"URL","protocol":"Protocol","upload":"Încarcă","uploadSubmit":"Trimite la server","image":"Imagine","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":"fără setări","id":"identificator","name":"Nume","langDir":"Direcţia cuvintelor","langDirLtr":"de la stânga la dreapta (LTR)","langDirRtl":"de la dreapta la stânga (RTL)","langCode":"Codul limbii","longDescr":"Descrierea completă URL","cssClass":"Clasele cu stilul paginii (CSS)","advisoryTitle":"Titlul consultativ","cssStyle":"Stil","ok":"OK","cancel":"Anulare","close":"Închide","preview":"Previzualizare","resize":"Redimensionează","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":"Ai schimbat câteva opțiuni. Ești sigur că dorești să închiz fereastra de dialog?","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":"Clase foaie de stil","width":"Lăţime","height":"Înălţime","align":"Aliniere","left":"Aliniază la stânga","right":"Aliniază la dreapta","center":"Aliniază pe centru","justify":"Aliniere în bloc (Justify)","alignLeft":"Aliniere la stânga","alignRight":"Aliniere la dreapta","alignCenter":"Aliniere centru","alignTop":"Aliniere sus","alignMiddle":"Aliniere la mijloc","alignBottom":"Aliniere jos","alignNone":"Fără aliniere","invalidValue":"Valoare invalidă","invalidHeight":"Înălțimea trebuie să fie un număr.","invalidWidth":"Lățimea trebuie să fie un număr.","invalidLength":"Valoarea specificată pentru câmpul \"%1\" trebuie să fie un număr pozitiv cu sau fără o unitate de măsură validă (%2).","invalidCssLength":"Valoarea specificată pentru câmpul \"%1\" trebuie să fie un număr pozitiv cu sau fără o unitate de măsură validă CSS (px, %, in, cm, mm, em, ex, pt, sau pc).","invalidHtmlLength":"Valoarea specificată pentru câmpul \"%1\" trebuie să fie un număr pozitiv cu sau fără o unitate de măsură validă HTML (px sau %).","invalidInlineStyle":"Valoarea specificată pentru stil trebuie să conțină una sau mai multe construcții de tipul \"name : value\", separate prin punct și virgulă.","cssLengthTooltip":"Introdu un număr pentru o valoare în pixeli sau un număr pentru o unitate de măsură validă CSS (px, %, in, cm, mm, em, ex, pt, sau pc).","unavailable":"%1<span class=\"cke_accessibility\">, nu este disponibil</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Bară spațiu","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Scurtături tastatură","optionDefault":"Implicit"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/ru.js b/core/assets/vendor/ckeditor/lang/ru.js
index 8879e3033745..86ba449a6d84 100644
--- a/core/assets/vendor/ckeditor/lang/ru.js
+++ b/core/assets/vendor/ckeditor/lang/ru.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['ru']={"widget":{"move":"Нажмите и перетащите, чтобы переместить","label":"%1 виджет"},"undo":{"redo":"Повторить","undo":"Отменить"},"toolbar":{"toolbarCollapse":"Свернуть панель инструментов","toolbarExpand":"Развернуть панель инструментов","toolbarGroups":{"document":"Документ","clipboard":"Буфер обмена / Отмена действий","editing":"Корректировка","forms":"Формы","basicstyles":"Простые стили","paragraph":"Абзац","links":"Ссылки","insert":"Вставка","styles":"Стили","colors":"Цвета","tools":"Инструменты"},"toolbars":"Панели инструментов редактора"},"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":"Верхняя строка","heightUnit":"height unit","invalidBorder":"Размер границ должен быть числом.","invalidCellPadding":"Внутренний отступ ячеек (cellpadding) должен быть числом.","invalidCellSpacing":"Внешний отступ ячеек (cellspacing) должен быть числом.","invalidCols":"Количество столбцов должно быть больше 0.","invalidHeight":"Высота таблицы должна быть числом.","invalidRows":"Количество строк должно быть больше 0.","invalidWidth":"Ширина таблицы должна быть числом.","menu":"Свойства таблицы","row":{"menu":"Строка","insertBefore":"Вставить строку сверху","insertAfter":"Вставить строку снизу","deleteRow":"Удалить строки"},"rows":"Строки","summary":"Итоги","title":"Свойства таблицы","toolbar":"Таблица","widthPc":"процентов","widthPx":"пикселей","widthUnit":"единица измерения"},"stylescombo":{"label":"Стили","panelTitle":"Стили форматирования","panelTitle1":"Стили блока","panelTitle2":"Стили элемента","panelTitle3":"Стили объекта"},"specialchar":{"options":"Выбор специального символа","title":"Выберите специальный символ","toolbar":"Вставить специальный символ"},"sourcedialog":{"toolbar":"Исходник","title":"Источник"},"sourcearea":{"toolbar":"Источник"},"showblocks":{"toolbar":"Отображать блоки"},"removeformat":{"toolbar":"Убрать форматирование"},"pastetext":{"button":"Вставить только текст","pasteNotification":"Для вставки нажмите %1. Ваш браузер не поддерживает возможность вставки через панель инструментов или контекстное меню","title":"Вставить только текст"},"pastefromword":{"confirmCleanup":"Текст, который вы желаете вставить, по всей видимости, был скопирован из Word. Следует ли очистить его перед вставкой?","error":"Невозможно очистить вставленные данные из-за внутренней ошибки","title":"Вставить из Word","toolbar":"Вставить из Word"},"notification":{"closed":"Уведомление закрыто"},"maximize":{"maximize":"Развернуть","minimize":"Свернуть"},"magicline":{"title":"Вставить здесь параграф"},"list":{"bulletedlist":"Вставить / удалить маркированный список","numberedlist":"Вставить / удалить нумерованный список"},"language":{"button":"Установка языка","remove":"Удалить язык"},"indent":{"indent":"Увеличить отступ","outdent":"Уменьшить отступ"},"image2":{"alt":"Альтернативный текст","btnUpload":"Загрузить на сервер","captioned":"Отображать название","captionPlaceholder":"Название","infoTab":"Данные об изображении","lockRatio":"Сохранять пропорции","menu":"Свойства изображения","pathName":"изображение","pathNameCaption":"название","resetSize":"Вернуть обычные размеры","resizer":"Нажмите и растяните","title":"Свойства изображения","uploadTab":"Загрузка файла","urlMissing":"Не указана ссылка на изображение.","altMissing":"Не задан альтернативный текст"},"horizontalrule":{"toolbar":"Вставить горизонтальную линию"},"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":"Моноширинное"},"filetools":{"loadError":"Ошибка при чтении файла","networkError":"Сетевая ошибка при загрузке файла","httpError404":"HTTP ошибка при загрузке файла (404: Файл не найден)","httpError403":"HTTP ошибка при загрузке файла (403: Запрещено)","httpError":"HTTP ошибка при загрузке файла (%1)","noUrlError":"Не определен URL для загрузки файлов","responseError":"Некорректный ответ сервера"},"elementspath":{"eleLabel":"Путь элементов","eleTitle":"Элемент %1"},"contextmenu":{"options":"Параметры контекстного меню"},"clipboard":{"copy":"Копировать","copyError":"Настройки безопасности вашего браузера не разрешают редактору выполнять операции по копированию текста. Пожалуйста, используйте для этого клавиатуру (Ctrl/Cmd+C).","cut":"Вырезать","cutError":"Настройки безопасности вашего браузера не разрешают редактору выполнять операции по вырезке текста. Пожалуйста, используйте для этого клавиатуру (Ctrl/Cmd+X).","paste":"Вставить","pasteNotification":"Для вставки нажмите %1. Ваш браузер не поддерживает возможность вставки через панель инструментов или контекстное меню","pasteArea":"Область вставки","pasteMsg":"Вставьте контент в эту область и нажмите OK"},"blockquote":{"toolbar":"Цитата"},"basicstyles":{"bold":"Полужирный","italic":"Курсив","strike":"Зачеркнутый","subscript":"Подстрочный индекс","superscript":"Надстрочный индекс","underline":"Подчеркнутый"},"about":{"copy":"Copyright &copy; $1. Все права защищены.","dlgTitle":"О CKEditor 4","moreInfo":"Для получения информации о лицензии, пожалуйста, перейдите на наш сайт:"},"editor":"Визуальный текстовый редактор","editorPanel":"Визуальный редактор текста","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":"Выравнивание","left":"По левому краю","right":"По правому краю","center":"По центру","justify":"По ширине","alignLeft":"По левому краю","alignRight":"По правому краю","alignCenter":"По центру","alignTop":"Поверху","alignMiddle":"Посередине","alignBottom":"Понизу","alignNone":"Нет","invalidValue":"Недопустимое значение.","invalidHeight":"Высота задается числом.","invalidWidth":"Ширина задается числом.","invalidLength":"Указанное значение для поля \"%1\" должно быть положительным числом без или с корректным символом единицы измерения (%2)","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>","keyboard":{"8":"Backspace","13":"Ввод","16":"Shift","17":"Ctrl","18":"Alt","32":"Пробел","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Комбинация клавиш","optionDefault":"По умолчанию"}};
\ No newline at end of file
+CKEDITOR.lang['ru']={"widget":{"move":"Нажмите и перетащите, чтобы переместить","label":"%1 виджет"},"undo":{"redo":"Повторить","undo":"Отменить"},"toolbar":{"toolbarCollapse":"Свернуть панель инструментов","toolbarExpand":"Развернуть панель инструментов","toolbarGroups":{"document":"Документ","clipboard":"Буфер обмена / Отмена действий","editing":"Корректировка","forms":"Формы","basicstyles":"Простые стили","paragraph":"Абзац","links":"Ссылки","insert":"Вставка","styles":"Стили","colors":"Цвета","tools":"Инструменты"},"toolbars":"Панели инструментов редактора"},"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":"Верхняя строка","heightUnit":"height unit","invalidBorder":"Размер границ должен быть числом.","invalidCellPadding":"Внутренний отступ ячеек (cellpadding) должен быть числом.","invalidCellSpacing":"Внешний отступ ячеек (cellspacing) должен быть числом.","invalidCols":"Количество столбцов должно быть больше 0.","invalidHeight":"Высота таблицы должна быть числом.","invalidRows":"Количество строк должно быть больше 0.","invalidWidth":"Ширина таблицы должна быть числом.","menu":"Свойства таблицы","row":{"menu":"Строка","insertBefore":"Вставить строку сверху","insertAfter":"Вставить строку снизу","deleteRow":"Удалить строки"},"rows":"Строки","summary":"Итоги","title":"Свойства таблицы","toolbar":"Таблица","widthPc":"процентов","widthPx":"пикселей","widthUnit":"единица измерения"},"stylescombo":{"label":"Стили","panelTitle":"Стили форматирования","panelTitle1":"Стили блока","panelTitle2":"Стили элемента","panelTitle3":"Стили объекта"},"specialchar":{"options":"Выбор специального символа","title":"Выберите специальный символ","toolbar":"Вставить специальный символ"},"sourcedialog":{"toolbar":"Исходник","title":"Источник"},"sourcearea":{"toolbar":"Источник"},"showblocks":{"toolbar":"Отображать блоки"},"removeformat":{"toolbar":"Убрать форматирование"},"pastetext":{"button":"Вставить только текст","pasteNotification":"Для вставки нажмите %1. Ваш браузер не поддерживает возможность вставки через панель инструментов или контекстное меню","title":"Вставить только текст"},"pastefromword":{"confirmCleanup":"Текст, который вы желаете вставить, по всей видимости, был скопирован из Word. Следует ли очистить его перед вставкой?","error":"Невозможно очистить вставленные данные из-за внутренней ошибки","title":"Вставить из Word","toolbar":"Вставить из Word"},"notification":{"closed":"Уведомление закрыто"},"maximize":{"maximize":"Развернуть","minimize":"Свернуть"},"magicline":{"title":"Вставить здесь параграф"},"list":{"bulletedlist":"Вставить / удалить маркированный список","numberedlist":"Вставить / удалить нумерованный список"},"language":{"button":"Установка языка","remove":"Удалить язык"},"indent":{"indent":"Увеличить отступ","outdent":"Уменьшить отступ"},"image2":{"alt":"Альтернативный текст","btnUpload":"Загрузить на сервер","captioned":"Отображать название","captionPlaceholder":"Название","infoTab":"Данные об изображении","lockRatio":"Сохранять пропорции","menu":"Свойства изображения","pathName":"изображение","pathNameCaption":"название","resetSize":"Вернуть обычные размеры","resizer":"Нажмите и растяните","title":"Свойства изображения","uploadTab":"Загрузка файла","urlMissing":"Не указана ссылка на изображение.","altMissing":"Не задан альтернативный текст"},"horizontalrule":{"toolbar":"Вставить горизонтальную линию"},"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":"Моноширинное"},"filetools":{"loadError":"Ошибка при чтении файла","networkError":"Сетевая ошибка при загрузке файла","httpError404":"HTTP ошибка при загрузке файла (404: Файл не найден)","httpError403":"HTTP ошибка при загрузке файла (403: Запрещено)","httpError":"HTTP ошибка при загрузке файла (%1)","noUrlError":"Не определен URL для загрузки файлов","responseError":"Некорректный ответ сервера"},"elementspath":{"eleLabel":"Путь элементов","eleTitle":"Элемент %1"},"contextmenu":{"options":"Параметры контекстного меню"},"clipboard":{"copy":"Копировать","copyError":"Настройки безопасности вашего браузера не разрешают редактору выполнять операции по копированию текста. Пожалуйста, используйте для этого клавиатуру (Ctrl/Cmd+C).","cut":"Вырезать","cutError":"Настройки безопасности вашего браузера не разрешают редактору выполнять операции по вырезке текста. Пожалуйста, используйте для этого клавиатуру (Ctrl/Cmd+X).","paste":"Вставить","pasteNotification":"Для вставки нажмите %1. Ваш браузер не поддерживает возможность вставки через панель инструментов или контекстное меню","pasteArea":"Область вставки","pasteMsg":"Вставьте контент в эту область и нажмите OK","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Цитата"},"basicstyles":{"bold":"Полужирный","italic":"Курсив","strike":"Зачеркнутый","subscript":"Подстрочный индекс","superscript":"Надстрочный индекс","underline":"Подчеркнутый"},"about":{"copy":"Copyright &copy; $1. Все права защищены.","dlgTitle":"О CKEditor 4","moreInfo":"Для получения информации о лицензии, пожалуйста, перейдите на наш сайт:"},"editor":"Визуальный текстовый редактор","editorPanel":"Визуальный редактор текста","common":{"editorHelp":"Нажмите ALT-0 для открытия справки","browseServer":"Выбор на сервере","url":"Ссылка","protocol":"Протокол","upload":"Загрузка файла","uploadSubmit":"Загрузить на сервер","image":"Изображение","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":"Выравнивание","left":"По левому краю","right":"По правому краю","center":"По центру","justify":"По ширине","alignLeft":"По левому краю","alignRight":"По правому краю","alignCenter":"По центру","alignTop":"Поверху","alignMiddle":"Посередине","alignBottom":"Понизу","alignNone":"Нет","invalidValue":"Недопустимое значение.","invalidHeight":"Высота задается числом.","invalidWidth":"Ширина задается числом.","invalidLength":"Указанное значение для поля \"%1\" должно быть положительным числом без или с корректным символом единицы измерения (%2)","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>","keyboard":{"8":"Backspace","13":"Ввод","16":"Shift","17":"Ctrl","18":"Alt","32":"Пробел","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Комбинация клавиш","optionDefault":"По умолчанию"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/si.js b/core/assets/vendor/ckeditor/lang/si.js
index 6ef7c1745c7c..52213c00acaa 100644
--- a/core/assets/vendor/ckeditor/lang/si.js
+++ b/core/assets/vendor/ckeditor/lang/si.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['si']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"නැවත කිරීම","undo":"වෙනස් කිරීම"},"toolbar":{"toolbarCollapse":"මෙවලම් තීරුව හැකුලුම.","toolbarExpand":"මෙවලම් තීරුව දීගහැරුම","toolbarGroups":{"document":"ලිපිය","clipboard":"ඇමිණුම වෙනස් කිරීම","editing":"සංස්කරණය","forms":"පෝරමය","basicstyles":"මුලික විලාසය","paragraph":"චේදය","links":"සබැඳිය","insert":"ඇතුලත් කිරීම","styles":"විලාසය","colors":"වර්ණය","tools":"මෙවලම්"},"toolbars":"සංස්කරණ මෙවලම් තීරුව"},"table":{"border":"සීමාවවල විශාලත්වය","caption":"Caption","cell":{"menu":"කොටුව","insertBefore":"පෙර කොටුවක් ඇතුල්කිරිම","insertAfter":"පසුව කොටුවක් ඇතුලත් ","deleteCell":"කොටුව මැකීම","merge":"කොටු එකට යාකිරිම","mergeRight":"දකුණට ","mergeDown":"පහලට ","splitHorizontal":"තිරස්ව කොටු පැතිරීම","splitVertical":"සිරස්ව කොටු පැතිරීම","title":"කොටු ","cellType":"කොටු වර්ගය","rowSpan":"පේළි පළල","colSpan":"සිරස් පළල","wordWrap":"වචන ගැලපුම","hAlign":"තිරස්ව ","vAlign":"සිරස්ව ","alignBaseline":"පාද රේඛාව","bgColor":"පසුබිම් වර්ණය","borderColor":"මායිම් ","data":"Data","header":"ශීර්ෂක","yes":"ඔව්","no":"නැත","invalidWidth":"කොටු පළල සංඛ්‍ය්ත්මක වටිනාකමක් විය යුතුය","invalidHeight":"කොටු උස සංඛ්‍ය්ත්මක වටිනාකමක් විය යුතුය","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"තෝරන්න"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"සිරස් ","deleteTable":"වගුව මකන්න","headers":"ශීර්ෂක","headersBoth":"දෙකම","headersColumn":"පළමූ සිරස් තීරුව","headersNone":"කිසිවක්ම නොවේ","headersRow":"පළමූ පේළිය","heightUnit":"height unit","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"},"stylescombo":{"label":"විලාසය","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"විශේෂ  ගුණාංග වීකල්ප","title":"විශේෂ  ගුණාංග ","toolbar":"විශේෂ ගුණාංග ඇතුලත් "},"sourcedialog":{"toolbar":"මුලාශ්‍රය","title":"මුලාශ්‍රය"},"sourcearea":{"toolbar":"මුලාශ්‍රය"},"showblocks":{"toolbar":"කොටස පෙන්නන්න"},"removeformat":{"toolbar":"සැකසීම වෙනස් කරන්න"},"pastetext":{"button":"සාමාන්‍ය අක්ෂර ලෙස අලවන්න","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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":"වචන වලින් අලවන්න"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"විශාල කිරීම","minimize":"කුඩා කිරීම"},"magicline":{"title":"චේදය ඇතුලත් කරන්න"},"list":{"bulletedlist":"ඇතුලත් / ඉවත් කිරීම ලඉස්තුව","numberedlist":"ඇතුලත් / ඉවත් කිරීම අන්න්කිත ලඉස්තුව"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"අතර පරතරය වැඩිකරන්න","outdent":"අතර පරතරය අඩුකරන්න"},"image2":{"alt":"විකල්ප ","btnUpload":"සේවාදායකය වෙත යොමුකිරිම","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"රුපයේ තොරතුරු","lockRatio":"නවතන අනුපාතය ","menu":"රුපයේ ගුණ","pathName":"image","pathNameCaption":"caption","resetSize":"නැවතත් විශාලත්වය වෙනස් කිරීම","resizer":"Click and drag to resize","title":"රුපයේ ","uploadTab":"උඩුගතකිරීම","urlMissing":"රුප මුලාශ්‍ර URL නැත.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"තිරස් රේඛාවක් ඇතුලත් කරන්න"},"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":"ආකෘතියන්"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"මුලද්‍රව්‍ය මාර්ගය","eleTitle":"%1 මුල"},"contextmenu":{"options":"අනතර්ග ලේඛණ  විකල්ප"},"clipboard":{"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":"කපාගන්න","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":"අලවන්න","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"අලවන ප්‍රදේශ","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"උද්ධෘත කොටස"},"basicstyles":{"bold":"තද අකුරින් ලියනලද","italic":"බැධීඅකුරින් ලියන ලද","strike":"Strikethrough","subscript":"Subscript","superscript":"Superscript","underline":"යටින් ඉරි අදින ලද"},"about":{"copy":"පිටපත් අයිතිය සහ පිටපත් කිරීම;$1 .සියලුම හිමිකම් ඇවිරිණි.","dlgTitle":"CKEditor ගැන විස්තර","moreInfo":"බලපත්‍ර තොරතුරු සදහා කරුණාකර අපගේ විද්‍යුත් ලිපිනයට පිවිසෙන්න:"},"editor":"පොහොසත් වචන සංස්කරණ","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"උදව් ලබා ගැනීමට  ALT බොත්තම ඔබන්න","browseServer":"සෙවුම් සේවාදායකය","url":"URL","protocol":"මුලාපත්‍රය","upload":"උඩුගතකිරීම","uploadSubmit":"සේවාදායකය වෙත යොමුකිරිම","image":"රුපය","flash":"දීප්තිය","form":"පෝරමය","checkbox":"ලකුණුකිරීමේ කොටුව","radio":"තේරීම් ","textField":"ලියන ප්‍රදේශය","textarea":"අකුරු ","hiddenField":"සැඟවුණු ප්‍රදේශය","button":"බොත්තම","select":"තෝරන්න ","imageButton":"රුප ","notSet":"<යොදා >","id":"අංකය","name":"නම","langDir":"භාෂා දිශාව","langDirLtr":"වමේසිට දකුණුට","langDirRtl":"දකුණේ සිට වමට","langCode":"භාෂා කේතය","longDescr":"සම්පුර්න පැහැදිලි කිරීම","cssClass":"විලාශ පත්‍ර පන්තිය","advisoryTitle":"උපදෙස් ","cssStyle":"විලාසය","ok":"නිරදි","cancel":"අවලංගු කිරීම","close":"වැසීම","preview":"නැවත ","resize":"විශාලත්වය නැවත වෙනස් කිරීම","generalTab":"පොදු කරුණු.","advancedTab":"දීය","validateNumberFailed":"මෙම වටිනාකම අංකයක් නොවේ","confirmNewPage":"ආරක්ෂා නොකළ සියලුම දත්තයන් මැකියනුලැබේ. ඔබට නව පිටුවක් ලබා ගැනීමට අවශ්‍යද?","confirmCancel":"ඇතම් විකල්පයන් වෙනස් කර ඇත. ඔබට මින් නික්මීමට අවශ්‍යද?","options":" විකල්ප","target":"අරමුණ","targetNew":"නව කව්ළුව","targetTop":"වැදගත් කව්ළුව","targetSelf":"එම කව්ළුව(_තම\\\\)","targetParent":"මව් කව්ළුව(_)","langDirLTR":"වමේසිට දකුණුට","langDirRTL":"දකුණේ සිට වමට","styles":"විලාසය","cssClasses":"විලාසපත්‍ර පන්තිය","width":"පළල","height":"උස","align":"ගැලපුම","left":"වම","right":"දකුණ","center":"මධ්‍ය","justify":"Justify","alignLeft":"Align Left","alignRight":"Align Right","alignCenter":"Align Center","alignTop":"ඉ","alignMiddle":"මැද","alignBottom":"පහල","alignNone":"None","invalidValue":"වැරදී වටිනාකමකි","invalidHeight":"උස අංකයක් විය යුතුය","invalidWidth":"පළල අංකයක් විය යුතුය","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"වටිනාකමක් නිරූපණය කිරීම \"%1\" ප්‍රදේශය ධන සංක්‍යාත්මක වටිනාකමක් හෝ  නිවරදි නොවන  CSS මිනුම් එකක(px, %, in, cm, mm, em, ex, pt, pc)","invalidHtmlLength":"වටිනාකමක් නිරූපණය කිරීම \"%1\" ප්‍රදේශය ධන සංක්‍යාත්මක වටිනාකමක් හෝ  නිවරදි නොවන  HTML මිනුම් එකක (px හෝ %).","invalidInlineStyle":"වටිනාකමක් නිරූපණය කිරීම  පේළි විලාසයයට ආකෘතිය  අනතර්ග විය යුතය  \"නම : වටිනාකම\", තිත් කොමාවකින් වෙන් වෙන ලද.","cssLengthTooltip":"සංක්‍යා ඇතුලත් කිරීමේදී වටිනාකම තිත් ප්‍රමාණය නිවරදි CSS  ඒකක(තිත්, %, අඟල්,සෙමි, mm, em, ex, pt, pc)","unavailable":"%1<span පන්තිය=\"ළඟා වියහැකි ද බලන්න\">, නොමැතිනම්</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
+CKEDITOR.lang['si']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"නැවත කිරීම","undo":"වෙනස් කිරීම"},"toolbar":{"toolbarCollapse":"මෙවලම් තීරුව හැකුලුම.","toolbarExpand":"මෙවලම් තීරුව දීගහැරුම","toolbarGroups":{"document":"ලිපිය","clipboard":"ඇමිණුම වෙනස් කිරීම","editing":"සංස්කරණය","forms":"පෝරමය","basicstyles":"මුලික විලාසය","paragraph":"චේදය","links":"සබැඳිය","insert":"ඇතුලත් කිරීම","styles":"විලාසය","colors":"වර්ණය","tools":"මෙවලම්"},"toolbars":"සංස්කරණ මෙවලම් තීරුව"},"table":{"border":"සීමාවවල විශාලත්වය","caption":"Caption","cell":{"menu":"කොටුව","insertBefore":"පෙර කොටුවක් ඇතුල්කිරිම","insertAfter":"පසුව කොටුවක් ඇතුලත් ","deleteCell":"කොටුව මැකීම","merge":"කොටු එකට යාකිරිම","mergeRight":"දකුණට ","mergeDown":"පහලට ","splitHorizontal":"තිරස්ව කොටු පැතිරීම","splitVertical":"සිරස්ව කොටු පැතිරීම","title":"කොටු ","cellType":"කොටු වර්ගය","rowSpan":"පේළි පළල","colSpan":"සිරස් පළල","wordWrap":"වචන ගැලපුම","hAlign":"තිරස්ව ","vAlign":"සිරස්ව ","alignBaseline":"පාද රේඛාව","bgColor":"පසුබිම් වර්ණය","borderColor":"මායිම් ","data":"Data","header":"ශීර්ෂක","yes":"ඔව්","no":"නැත","invalidWidth":"කොටු පළල සංඛ්‍ය්ත්මක වටිනාකමක් විය යුතුය","invalidHeight":"කොටු උස සංඛ්‍ය්ත්මක වටිනාකමක් විය යුතුය","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"තෝරන්න"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"සිරස් ","deleteTable":"වගුව මකන්න","headers":"ශීර්ෂක","headersBoth":"දෙකම","headersColumn":"පළමූ සිරස් තීරුව","headersNone":"කිසිවක්ම නොවේ","headersRow":"පළමූ පේළිය","heightUnit":"height unit","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"},"stylescombo":{"label":"විලාසය","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"විශේෂ  ගුණාංග වීකල්ප","title":"විශේෂ  ගුණාංග ","toolbar":"විශේෂ ගුණාංග ඇතුලත් "},"sourcedialog":{"toolbar":"මුලාශ්‍රය","title":"මුලාශ්‍රය"},"sourcearea":{"toolbar":"මුලාශ්‍රය"},"showblocks":{"toolbar":"කොටස පෙන්නන්න"},"removeformat":{"toolbar":"සැකසීම වෙනස් කරන්න"},"pastetext":{"button":"සාමාන්‍ය අක්ෂර ලෙස අලවන්න","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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":"වචන වලින් අලවන්න"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"විශාල කිරීම","minimize":"කුඩා කිරීම"},"magicline":{"title":"චේදය ඇතුලත් කරන්න"},"list":{"bulletedlist":"ඇතුලත් / ඉවත් කිරීම ලඉස්තුව","numberedlist":"ඇතුලත් / ඉවත් කිරීම අන්න්කිත ලඉස්තුව"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"අතර පරතරය වැඩිකරන්න","outdent":"අතර පරතරය අඩුකරන්න"},"image2":{"alt":"විකල්ප ","btnUpload":"සේවාදායකය වෙත යොමුකිරිම","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"රුපයේ තොරතුරු","lockRatio":"නවතන අනුපාතය ","menu":"රුපයේ ගුණ","pathName":"image","pathNameCaption":"caption","resetSize":"නැවතත් විශාලත්වය වෙනස් කිරීම","resizer":"Click and drag to resize","title":"රුපයේ ","uploadTab":"උඩුගතකිරීම","urlMissing":"රුප මුලාශ්‍ර URL නැත.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"තිරස් රේඛාවක් ඇතුලත් කරන්න"},"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":"ආකෘතියන්"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"මුලද්‍රව්‍ය මාර්ගය","eleTitle":"%1 මුල"},"contextmenu":{"options":"අනතර්ග ලේඛණ  විකල්ප"},"clipboard":{"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":"කපාගන්න","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":"අලවන්න","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"අලවන ප්‍රදේශ","pasteMsg":"Paste your content inside the area below and press OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"උද්ධෘත කොටස"},"basicstyles":{"bold":"තද අකුරින් ලියනලද","italic":"බැධීඅකුරින් ලියන ලද","strike":"Strikethrough","subscript":"Subscript","superscript":"Superscript","underline":"යටින් ඉරි අදින ලද"},"about":{"copy":"පිටපත් අයිතිය සහ පිටපත් කිරීම;$1 .සියලුම හිමිකම් ඇවිරිණි.","dlgTitle":"CKEditor ගැන විස්තර","moreInfo":"බලපත්‍ර තොරතුරු සදහා කරුණාකර අපගේ විද්‍යුත් ලිපිනයට පිවිසෙන්න:"},"editor":"පොහොසත් වචන සංස්කරණ","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"උදව් ලබා ගැනීමට  ALT බොත්තම ඔබන්න","browseServer":"සෙවුම් සේවාදායකය","url":"URL","protocol":"මුලාපත්‍රය","upload":"උඩුගතකිරීම","uploadSubmit":"සේවාදායකය වෙත යොමුකිරිම","image":"රුපය","form":"පෝරමය","checkbox":"ලකුණුකිරීමේ කොටුව","radio":"තේරීම් ","textField":"ලියන ප්‍රදේශය","textarea":"අකුරු ","hiddenField":"සැඟවුණු ප්‍රදේශය","button":"බොත්තම","select":"තෝරන්න ","imageButton":"රුප ","notSet":"<යොදා >","id":"අංකය","name":"නම","langDir":"භාෂා දිශාව","langDirLtr":"වමේසිට දකුණුට","langDirRtl":"දකුණේ සිට වමට","langCode":"භාෂා කේතය","longDescr":"සම්පුර්න පැහැදිලි කිරීම","cssClass":"විලාශ පත්‍ර පන්තිය","advisoryTitle":"උපදෙස් ","cssStyle":"විලාසය","ok":"නිරදි","cancel":"අවලංගු කිරීම","close":"වැසීම","preview":"නැවත ","resize":"විශාලත්වය නැවත වෙනස් කිරීම","generalTab":"පොදු කරුණු.","advancedTab":"දීය","validateNumberFailed":"මෙම වටිනාකම අංකයක් නොවේ","confirmNewPage":"ආරක්ෂා නොකළ සියලුම දත්තයන් මැකියනුලැබේ. ඔබට නව පිටුවක් ලබා ගැනීමට අවශ්‍යද?","confirmCancel":"ඇතම් විකල්පයන් වෙනස් කර ඇත. ඔබට මින් නික්මීමට අවශ්‍යද?","options":" විකල්ප","target":"අරමුණ","targetNew":"නව කව්ළුව","targetTop":"වැදගත් කව්ළුව","targetSelf":"එම කව්ළුව(_තම\\\\)","targetParent":"මව් කව්ළුව(_)","langDirLTR":"වමේසිට දකුණුට","langDirRTL":"දකුණේ සිට වමට","styles":"විලාසය","cssClasses":"විලාසපත්‍ර පන්තිය","width":"පළල","height":"උස","align":"ගැලපුම","left":"වම","right":"දකුණ","center":"මධ්‍ය","justify":"Justify","alignLeft":"Align Left","alignRight":"Align Right","alignCenter":"Align Center","alignTop":"ඉ","alignMiddle":"මැද","alignBottom":"පහල","alignNone":"None","invalidValue":"වැරදී වටිනාකමකි","invalidHeight":"උස අංකයක් විය යුතුය","invalidWidth":"පළල අංකයක් විය යුතුය","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"වටිනාකමක් නිරූපණය කිරීම \"%1\" ප්‍රදේශය ධන සංක්‍යාත්මක වටිනාකමක් හෝ  නිවරදි නොවන  CSS මිනුම් එකක(px, %, in, cm, mm, em, ex, pt, pc)","invalidHtmlLength":"වටිනාකමක් නිරූපණය කිරීම \"%1\" ප්‍රදේශය ධන සංක්‍යාත්මක වටිනාකමක් හෝ  නිවරදි නොවන  HTML මිනුම් එකක (px හෝ %).","invalidInlineStyle":"වටිනාකමක් නිරූපණය කිරීම  පේළි විලාසයයට ආකෘතිය  අනතර්ග විය යුතය  \"නම : වටිනාකම\", තිත් කොමාවකින් වෙන් වෙන ලද.","cssLengthTooltip":"සංක්‍යා ඇතුලත් කිරීමේදී වටිනාකම තිත් ප්‍රමාණය නිවරදි CSS  ඒකක(තිත්, %, අඟල්,සෙමි, mm, em, ex, pt, pc)","unavailable":"%1<span පන්තිය=\"ළඟා වියහැකි ද බලන්න\">, නොමැතිනම්</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/sk.js b/core/assets/vendor/ckeditor/lang/sk.js
index 1b19730b5d4f..d08e18e215a6 100644
--- a/core/assets/vendor/ckeditor/lang/sk.js
+++ b/core/assets/vendor/ckeditor/lang/sk.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['sk']={"widget":{"move":"Kliknite a potiahnite pre presunutie","label":"%1 widget"},"undo":{"redo":"Znovu","undo":"Späť"},"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":"Odsek","links":"Odkazy","insert":"Vložiť","styles":"Štýly","colors":"Farby","tools":"Nástroje"},"toolbars":"Lišty nástrojov editora"},"table":{"border":"Šírka orámovania","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":"Zalamovanie riadkov","hAlign":"Horizontálne zarovnanie","vAlign":"Vertikálne zarovnanie","alignBaseline":"Základná čiara (baseline)","bgColor":"Farba pozadia","borderColor":"Farba orámovania","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","heightUnit":"jednotka výšky","invalidBorder":"Šírka orámovania 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"},"stylescombo":{"label":"Štýly","panelTitle":"Formátovanie štýlov","panelTitle1":"Štýly bloku","panelTitle2":"Znakové štýly","panelTitle3":"Štýly objektu"},"specialchar":{"options":"Možnosti špeciálneho znaku","title":"Výber špeciálneho znaku","toolbar":"Vložiť špeciálny znak"},"sourcedialog":{"toolbar":"Zdroj","title":"Zdroj"},"sourcearea":{"toolbar":"Zdroj"},"showblocks":{"toolbar":"Ukázať bloky"},"removeformat":{"toolbar":"Odstrániť formátovanie"},"pastetext":{"button":"Vložiť ako čistý text","pasteNotification":"Stlačte %1 na vloženie. Váš prehliadač nepodporuje vloženie prostredníctvom tlačidla v nástrojovej lište alebo voľby v kontextovom menu.","title":"Vložiť ako čistý text"},"pastefromword":{"confirmCleanup":"Zdá sa, že vkladaný text pochádza z programu MS Word. Chcete ho pred vkladaním automaticky vyčistiť?","error":"Kvôli internej chybe nebolo možné vložené dáta vyčistiť","title":"Vložiť z Wordu","toolbar":"Vložiť z Wordu"},"notification":{"closed":"Notifikácia zatvorená."},"maximize":{"maximize":"Maximalizovať","minimize":"Minimalizovať"},"magicline":{"title":"Odsek vložiť sem"},"list":{"bulletedlist":"Vložiť/odstrániť zoznam s odrážkami","numberedlist":"Vložiť/odstrániť číslovaný zoznam"},"language":{"button":"Nastaviť jazyk","remove":"Odstrániť jazyk"},"indent":{"indent":"Zväčšiť odsadenie","outdent":"Zmenšiť odsadenie"},"image2":{"alt":"Alternatívny text","btnUpload":"Odoslať to na server","captioned":"Opísaný obrázok","captionPlaceholder":"Popis","infoTab":"Informácie o obrázku","lockRatio":"Pomer zámky","menu":"Vlastnosti obrázka","pathName":"obrázok","pathNameCaption":"popis","resetSize":"Pôvodná veľkosť","resizer":"Kliknite a potiahnite pre zmenu veľkosti","title":"Vlastnosti obrázka","uploadTab":"Nahrať","urlMissing":"Chýba URL zdroja obrázka.","altMissing":"Chýba alternatívny text."},"horizontalrule":{"toolbar":"Vložiť vodorovnú čiaru"},"format":{"label":"Formát","panelTitle":"Odsek","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ý"},"filetools":{"loadError":"Počas čítania súboru nastala chyba.","networkError":"Počas nahrávania súboru nastala chyba siete.","httpError404":"Počas nahrávania súboru nastala HTTP chyba (404: Súbor nebol nájdený).","httpError403":"Počas nahrávania súboru nastala HTTP chyba (403: Zakázaný).","httpError":"Počas nahrávania súboru nastala HTTP chyba (error status: %1).","noUrlError":"URL nahrávania nie je definovaný.","responseError":"Nesprávna odpoveď servera."},"elementspath":{"eleLabel":"Cesta prvkov","eleTitle":"%1 prvok"},"contextmenu":{"options":"Možnosti kontextového menu"},"clipboard":{"copy":"Kopírovať","copyError":"Bezpečnostné nastavenia vášho prehliadača nedovoľujú editoru automaticky spustiť operáciu kopírovania. 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. Použite na to klávesnicu (Ctrl/Cmd+X).","paste":"Vložiť","pasteNotification":"Stlačte %1 na vloženie. Váš prehliadač nepodporuje vloženie prostredníctvom tlačidla v nástrojovej lište alebo voľby v kontextovom menu.","pasteArea":"Miesto pre vloženie","pasteMsg":"Vložte svoj obsah do nasledujúcej oblasti a stlačte OK."},"blockquote":{"toolbar":"Citácia"},"basicstyles":{"bold":"Tučné","italic":"Kurzíva","strike":"Prečiarknuté","subscript":"Dolný index","superscript":"Horný index","underline":"Podčiarknuté"},"about":{"copy":"Copyright &copy; $1. Všetky práva vyhradené.","dlgTitle":"O aplikácii CKEditor 4","moreInfo":"Pre informácie o licenciách, prosíme, navštívte našu web stránku:"},"editor":"Editor formátovaného textu","editorPanel":"Panel editora formátovaného textu","common":{"editorHelp":"Stlačením ALT 0 spustiť pomocníka","browseServer":"Prehliadať server","url":"URL","protocol":"Protokol","upload":"Odoslať","uploadSubmit":"Odoslať na server","image":"Obrázok","flash":"Flash","form":"Formulár","checkbox":"Zaškrtávacie pole","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":"Zatvoriť","preview":"Náhľad","resize":"Zmeniť veľkosť","generalTab":"Hlavné","advancedTab":"Rozšírené","validateNumberFailed":"Hodnota nie je čí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","left":"Vľavo","right":"Vpravo","center":"Na stred","justify":"Do bloku","alignLeft":"Zarovnať vľavo","alignRight":"Zarovnať vpravo","alignCenter":"Zarovnať na stred","alignTop":"Nahor","alignMiddle":"Na stred","alignBottom":"Dole","alignNone":"Žiadne","invalidValue":"Neplatná hodnota.","invalidHeight":"Výška musí byť číslo.","invalidWidth":"Šírka musí byť číslo.","invalidLength":"Hodnota uvedená v poli \"%1\" musí byť kladné číslo a s platnou mernou jednotkou (%2), alebo bez nej.","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 alebo pc).","unavailable":"%1<span class=\"cke_accessibility\">, nedostupný</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Medzerník","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Klávesová skratka","optionDefault":"Predvolený"}};
\ No newline at end of file
+CKEDITOR.lang['sk']={"widget":{"move":"Kliknite a potiahnite pre presunutie","label":"%1 widget"},"undo":{"redo":"Znovu","undo":"Späť"},"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":"Odsek","links":"Odkazy","insert":"Vložiť","styles":"Štýly","colors":"Farby","tools":"Nástroje"},"toolbars":"Lišty nástrojov editora"},"table":{"border":"Šírka orámovania","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":"Zalamovanie riadkov","hAlign":"Horizontálne zarovnanie","vAlign":"Vertikálne zarovnanie","alignBaseline":"Základná čiara (baseline)","bgColor":"Farba pozadia","borderColor":"Farba orámovania","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","heightUnit":"jednotka výšky","invalidBorder":"Šírka orámovania 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"},"stylescombo":{"label":"Štýly","panelTitle":"Formátovanie štýlov","panelTitle1":"Štýly bloku","panelTitle2":"Znakové štýly","panelTitle3":"Štýly objektu"},"specialchar":{"options":"Možnosti špeciálneho znaku","title":"Výber špeciálneho znaku","toolbar":"Vložiť špeciálny znak"},"sourcedialog":{"toolbar":"Zdroj","title":"Zdroj"},"sourcearea":{"toolbar":"Zdroj"},"showblocks":{"toolbar":"Ukázať bloky"},"removeformat":{"toolbar":"Odstrániť formátovanie"},"pastetext":{"button":"Vložiť ako čistý text","pasteNotification":"Stlačte %1 na vloženie. Váš prehliadač nepodporuje vloženie prostredníctvom tlačidla v nástrojovej lište alebo voľby v kontextovom menu.","title":"Vložiť ako čistý text"},"pastefromword":{"confirmCleanup":"Zdá sa, že vkladaný text pochádza z programu MS Word. Chcete ho pred vkladaním automaticky vyčistiť?","error":"Kvôli internej chybe nebolo možné vložené dáta vyčistiť","title":"Vložiť z Wordu","toolbar":"Vložiť z Wordu"},"notification":{"closed":"Notifikácia zatvorená."},"maximize":{"maximize":"Maximalizovať","minimize":"Minimalizovať"},"magicline":{"title":"Odsek vložiť sem"},"list":{"bulletedlist":"Vložiť/odstrániť zoznam s odrážkami","numberedlist":"Vložiť/odstrániť číslovaný zoznam"},"language":{"button":"Nastaviť jazyk","remove":"Odstrániť jazyk"},"indent":{"indent":"Zväčšiť odsadenie","outdent":"Zmenšiť odsadenie"},"image2":{"alt":"Alternatívny text","btnUpload":"Odoslať to na server","captioned":"Opísaný obrázok","captionPlaceholder":"Popis","infoTab":"Informácie o obrázku","lockRatio":"Pomer zámky","menu":"Vlastnosti obrázka","pathName":"obrázok","pathNameCaption":"popis","resetSize":"Pôvodná veľkosť","resizer":"Kliknite a potiahnite pre zmenu veľkosti","title":"Vlastnosti obrázka","uploadTab":"Nahrať","urlMissing":"Chýba URL zdroja obrázka.","altMissing":"Chýba alternatívny text."},"horizontalrule":{"toolbar":"Vložiť vodorovnú čiaru"},"format":{"label":"Formát","panelTitle":"Odsek","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ý"},"filetools":{"loadError":"Počas čítania súboru nastala chyba.","networkError":"Počas nahrávania súboru nastala chyba siete.","httpError404":"Počas nahrávania súboru nastala HTTP chyba (404: Súbor nebol nájdený).","httpError403":"Počas nahrávania súboru nastala HTTP chyba (403: Zakázaný).","httpError":"Počas nahrávania súboru nastala HTTP chyba (error status: %1).","noUrlError":"URL nahrávania nie je definovaný.","responseError":"Nesprávna odpoveď servera."},"elementspath":{"eleLabel":"Cesta prvkov","eleTitle":"%1 prvok"},"contextmenu":{"options":"Možnosti kontextového menu"},"clipboard":{"copy":"Kopírovať","copyError":"Bezpečnostné nastavenia vášho prehliadača nedovoľujú editoru automaticky spustiť operáciu kopírovania. 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. Použite na to klávesnicu (Ctrl/Cmd+X).","paste":"Vložiť","pasteNotification":"Stlačte %1 na vloženie. Váš prehliadač nepodporuje vloženie prostredníctvom tlačidla v nástrojovej lište alebo voľby v kontextovom menu.","pasteArea":"Miesto pre vloženie","pasteMsg":"Vložte svoj obsah do nasledujúcej oblasti a stlačte OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Citácia"},"basicstyles":{"bold":"Tučné","italic":"Kurzíva","strike":"Prečiarknuté","subscript":"Dolný index","superscript":"Horný index","underline":"Podčiarknuté"},"about":{"copy":"Copyright &copy; $1. Všetky práva vyhradené.","dlgTitle":"O aplikácii CKEditor 4","moreInfo":"Pre informácie o licenciách, prosíme, navštívte našu web stránku:"},"editor":"Editor formátovaného textu","editorPanel":"Panel editora formátovaného textu","common":{"editorHelp":"Stlačením ALT 0 spustiť pomocníka","browseServer":"Prehliadať server","url":"URL","protocol":"Protokol","upload":"Odoslať","uploadSubmit":"Odoslať na server","image":"Obrázok","form":"Formulár","checkbox":"Zaškrtávacie pole","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":"Zatvoriť","preview":"Náhľad","resize":"Zmeniť veľkosť","generalTab":"Hlavné","advancedTab":"Rozšírené","validateNumberFailed":"Hodnota nie je čí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","left":"Vľavo","right":"Vpravo","center":"Na stred","justify":"Do bloku","alignLeft":"Zarovnať vľavo","alignRight":"Zarovnať vpravo","alignCenter":"Zarovnať na stred","alignTop":"Nahor","alignMiddle":"Na stred","alignBottom":"Dole","alignNone":"Žiadne","invalidValue":"Neplatná hodnota.","invalidHeight":"Výška musí byť číslo.","invalidWidth":"Šírka musí byť číslo.","invalidLength":"Hodnota uvedená v poli \"%1\" musí byť kladné číslo a s platnou mernou jednotkou (%2), alebo bez nej.","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 alebo pc).","unavailable":"%1<span class=\"cke_accessibility\">, nedostupný</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Medzerník","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Klávesová skratka","optionDefault":"Predvolený"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/sl.js b/core/assets/vendor/ckeditor/lang/sl.js
index 97b788f9ef55..f23f2212d496 100644
--- a/core/assets/vendor/ckeditor/lang/sl.js
+++ b/core/assets/vendor/ckeditor/lang/sl.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['sl']={"widget":{"move":"Kliknite in povlecite, da premaknete","label":"%1 widget"},"undo":{"redo":"Uveljavi","undo":"Razveljavi"},"toolbar":{"toolbarCollapse":"Skrči orodno vrstico","toolbarExpand":"Razširi orodno vrstico","toolbarGroups":{"document":"Dokument","clipboard":"Odložišče/Razveljavi","editing":"Urejanje","forms":"Obrazci","basicstyles":"Osnovni slogi","paragraph":"Odstavek","links":"Povezave","insert":"Vstavi","styles":"Slogi","colors":"Barve","tools":"Orodja"},"toolbars":"Orodne vrstice urejevalnika"},"table":{"border":"Velikost obrobe","caption":"Napis","cell":{"menu":"Celica","insertBefore":"Vstavi celico pred","insertAfter":"Vstavi celico za","deleteCell":"Izbriši celice","merge":"Združi celice","mergeRight":"Združi desno","mergeDown":"Združ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":"Odmik znotraj celic","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","heightUnit":"height unit","invalidBorder":"Širina obrobe mora biti število.","invalidCellPadding":"Odmik znotraj celic mora biti pozitivno število.","invalidCellSpacing":"Razmik med celicami mora biti pozitivno š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":"odstotkov","widthPx":"pik","widthUnit":"enota širine"},"stylescombo":{"label":"Slog","panelTitle":"Oblikovalni Stili","panelTitle1":"Slogi odstavkov","panelTitle2":"Slogi besedila","panelTitle3":"Slogi objektov"},"specialchar":{"options":"Možnosti posebnih znakov","title":"Izberi posebni znak","toolbar":"Vstavi posebni znak"},"sourcedialog":{"toolbar":"Izvorna koda","title":"Izvorna koda"},"sourcearea":{"toolbar":"Izvorna koda"},"showblocks":{"toolbar":"Prikaži ograde"},"removeformat":{"toolbar":"Odstrani oblikovanje"},"pastetext":{"button":"Prilepi kot golo besedilo","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Prilepi kot golo besedilo"},"pastefromword":{"confirmCleanup":"Besedilo, ki ga želite prilepiti, je kopirano iz Worda. Ali ga želite očistiti, preden ga prilepite?","error":"Ni bilo mogoče očistiti prilepljenih podatkov zaradi notranje napake","title":"Prilepi iz Worda","toolbar":"Prilepi iz Worda"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maksimiraj","minimize":"Minimiraj"},"magicline":{"title":"Vstavite odstavek tukaj"},"list":{"bulletedlist":"Vstavi/odstrani neoštevilčen seznam","numberedlist":"Vstavi/odstrani oštevilčen seznam"},"language":{"button":"Nastavi jezik","remove":"Odstrani jezik"},"indent":{"indent":"Povečaj zamik","outdent":"Zmanjšaj zamik"},"image2":{"alt":"Nadomestno besedilo","btnUpload":"Pošlji na strežnik","captioned":"Slika z napisom","captionPlaceholder":"Napis","infoTab":"Podatki o sliki","lockRatio":"Zakleni razmerje","menu":"Lastnosti slike","pathName":"slika","pathNameCaption":"napis","resetSize":"Ponastavi velikost","resizer":"Kliknite in povlecite, da spremenite velikost","title":"Lastnosti slike","uploadTab":"Naloži","urlMissing":"Manjka vir (URL) slike.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Vstavi vodoravno črto"},"format":{"label":"Oblika","panelTitle":"Oblika odstavka","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"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Pot elementov","eleTitle":"Element %1"},"contextmenu":{"options":"Možnosti kontekstnega menija"},"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","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Prilepi območje","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Citat"},"basicstyles":{"bold":"Krepko","italic":"Ležeče","strike":"Prečrtano","subscript":"Podpisano","superscript":"Nadpisano","underline":"Podčrtano"},"about":{"copy":"Copyright &copy; $1. Vse pravice pridržane.","dlgTitle":"O programu CKEditor 4","moreInfo":"Za informacije o licenciranju prosimo obiščite našo spletno stran:"},"editor":"Urejevalnik obogatenega besedila","editorPanel":"Plošča urejevalnika obogatenega besedila","common":{"editorHelp":"Pritisnite ALT 0 za pomoč","browseServer":"Prebrskaj na strežniku","url":"URL","protocol":"Protokol","upload":"Naloži","uploadSubmit":"Pošlji na strežnik","image":"Slika","flash":"Flash","form":"Obrazec","checkbox":"Potrditveno polje","radio":"Izbirno polje","textField":"Besedilno polje","textarea":"Besedilno območje","hiddenField":"Skrito polje","button":"Gumb","select":"Spustno polje","imageButton":"Slikovni gumb","notSet":"<ni določen>","id":"Id","name":"Ime","langDir":"Smer jezika","langDirLtr":"Od leve proti desni (LTR)","langDirRtl":"Od desne proti levi (RTL)","langCode":"Koda jezika","longDescr":"Dolg opis URL-ja","cssClass":"Razredi slogovne predloge","advisoryTitle":"Predlagani naslov","cssStyle":"Slog","ok":"V redu","cancel":"Prekliči","close":"Zapri","preview":"Predogled","resize":"Potegni za spremembo velikosti","generalTab":"Splošno","advancedTab":"Napredno","validateNumberFailed":"Vrednost ni število.","confirmNewPage":"Vse neshranjene spremembe vsebine bodo izgubljene. Ali res želite naložiti novo stran?","confirmCancel":"Spremenili ste nekaj možnosti. Ali res želite zapreti okno?","options":"Možnosti","target":"Cilj","targetNew":"Novo okno (_blank)","targetTop":"Vrhovno okno (_top)","targetSelf":"Isto okno (_self)","targetParent":"Starševsko okno (_parent)","langDirLTR":"Od leve proti desni (LTR)","langDirRTL":"Od desne proti levi (RTL)","styles":"Slog","cssClasses":"Razredi slogovne predloge","width":"Širina","height":"Višina","align":"Poravnava","left":"Levo","right":"Desno","center":"Sredinsko","justify":"Obojestranska poravnava","alignLeft":"Leva poravnava","alignRight":"Desna poravnava","alignCenter":"Align Center","alignTop":"Na vrh","alignMiddle":"V sredino","alignBottom":"Na dno","alignNone":"Brez poravnave","invalidValue":"Neveljavna vrednost.","invalidHeight":"Višina mora biti število.","invalidWidth":"Širina mora biti število.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Vrednost, določena za polje »%1«, mora biti pozitivno število z ali brez veljavne CSS-enote za merjenje (px, %, in, cm, mm, em, ex, pt ali pc).","invalidHtmlLength":"Vrednost, določena za polje »%1«, mora biti pozitivno število z ali brez veljavne HTML-enote za merjenje (px ali %).","invalidInlineStyle":"Vrednost, določena za slog v vrstici, mora biti sestavljena iz ene ali več dvojic oblike »ime : vrednost«, ločenih s podpičji.","cssLengthTooltip":"Vnesite število za vrednost v slikovnih pikah ali število z veljavno CSS-enoto (px, %, in, cm, mm, em, ex, pt ali pc).","unavailable":"%1<span class=\"cke_accessibility\">, nedosegljiv</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
+CKEDITOR.lang['sl']={"widget":{"move":"Kliknite in povlecite, da premaknete","label":"%1 widget"},"undo":{"redo":"Uveljavi","undo":"Razveljavi"},"toolbar":{"toolbarCollapse":"Skrči orodno vrstico","toolbarExpand":"Razširi orodno vrstico","toolbarGroups":{"document":"Dokument","clipboard":"Odložišče/Razveljavi","editing":"Urejanje","forms":"Obrazci","basicstyles":"Osnovni slogi","paragraph":"Odstavek","links":"Povezave","insert":"Vstavi","styles":"Slogi","colors":"Barve","tools":"Orodja"},"toolbars":"Orodne vrstice urejevalnika"},"table":{"border":"Velikost obrobe","caption":"Napis","cell":{"menu":"Celica","insertBefore":"Vstavi celico pred","insertAfter":"Vstavi celico za","deleteCell":"Izbriši celice","merge":"Združi celice","mergeRight":"Združi desno","mergeDown":"Združ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":"Odmik znotraj celic","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","heightUnit":"height unit","invalidBorder":"Širina obrobe mora biti število.","invalidCellPadding":"Odmik znotraj celic mora biti pozitivno število.","invalidCellSpacing":"Razmik med celicami mora biti pozitivno š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":"odstotkov","widthPx":"pik","widthUnit":"enota širine"},"stylescombo":{"label":"Slog","panelTitle":"Oblikovalni Stili","panelTitle1":"Slogi odstavkov","panelTitle2":"Slogi besedila","panelTitle3":"Slogi objektov"},"specialchar":{"options":"Možnosti posebnih znakov","title":"Izberi posebni znak","toolbar":"Vstavi posebni znak"},"sourcedialog":{"toolbar":"Izvorna koda","title":"Izvorna koda"},"sourcearea":{"toolbar":"Izvorna koda"},"showblocks":{"toolbar":"Prikaži ograde"},"removeformat":{"toolbar":"Odstrani oblikovanje"},"pastetext":{"button":"Prilepi kot golo besedilo","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Prilepi kot golo besedilo"},"pastefromword":{"confirmCleanup":"Besedilo, ki ga želite prilepiti, je kopirano iz Worda. Ali ga želite očistiti, preden ga prilepite?","error":"Ni bilo mogoče očistiti prilepljenih podatkov zaradi notranje napake","title":"Prilepi iz Worda","toolbar":"Prilepi iz Worda"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Maksimiraj","minimize":"Minimiraj"},"magicline":{"title":"Vstavite odstavek tukaj"},"list":{"bulletedlist":"Vstavi/odstrani neoštevilčen seznam","numberedlist":"Vstavi/odstrani oštevilčen seznam"},"language":{"button":"Nastavi jezik","remove":"Odstrani jezik"},"indent":{"indent":"Povečaj zamik","outdent":"Zmanjšaj zamik"},"image2":{"alt":"Nadomestno besedilo","btnUpload":"Pošlji na strežnik","captioned":"Slika z napisom","captionPlaceholder":"Napis","infoTab":"Podatki o sliki","lockRatio":"Zakleni razmerje","menu":"Lastnosti slike","pathName":"slika","pathNameCaption":"napis","resetSize":"Ponastavi velikost","resizer":"Kliknite in povlecite, da spremenite velikost","title":"Lastnosti slike","uploadTab":"Naloži","urlMissing":"Manjka vir (URL) slike.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Vstavi vodoravno črto"},"format":{"label":"Oblika","panelTitle":"Oblika odstavka","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"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Pot elementov","eleTitle":"Element %1"},"contextmenu":{"options":"Možnosti kontekstnega menija"},"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","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Prilepi območje","pasteMsg":"Paste your content inside the area below and press OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Citat"},"basicstyles":{"bold":"Krepko","italic":"Ležeče","strike":"Prečrtano","subscript":"Podpisano","superscript":"Nadpisano","underline":"Podčrtano"},"about":{"copy":"Copyright &copy; $1. Vse pravice pridržane.","dlgTitle":"O programu CKEditor 4","moreInfo":"Za informacije o licenciranju prosimo obiščite našo spletno stran:"},"editor":"Urejevalnik obogatenega besedila","editorPanel":"Plošča urejevalnika obogatenega besedila","common":{"editorHelp":"Pritisnite ALT 0 za pomoč","browseServer":"Prebrskaj na strežniku","url":"URL","protocol":"Protokol","upload":"Naloži","uploadSubmit":"Pošlji na strežnik","image":"Slika","form":"Obrazec","checkbox":"Potrditveno polje","radio":"Izbirno polje","textField":"Besedilno polje","textarea":"Besedilno območje","hiddenField":"Skrito polje","button":"Gumb","select":"Spustno polje","imageButton":"Slikovni gumb","notSet":"<ni določen>","id":"Id","name":"Ime","langDir":"Smer jezika","langDirLtr":"Od leve proti desni (LTR)","langDirRtl":"Od desne proti levi (RTL)","langCode":"Koda jezika","longDescr":"Dolg opis URL-ja","cssClass":"Razredi slogovne predloge","advisoryTitle":"Predlagani naslov","cssStyle":"Slog","ok":"V redu","cancel":"Prekliči","close":"Zapri","preview":"Predogled","resize":"Potegni za spremembo velikosti","generalTab":"Splošno","advancedTab":"Napredno","validateNumberFailed":"Vrednost ni število.","confirmNewPage":"Vse neshranjene spremembe vsebine bodo izgubljene. Ali res želite naložiti novo stran?","confirmCancel":"Spremenili ste nekaj možnosti. Ali res želite zapreti okno?","options":"Možnosti","target":"Cilj","targetNew":"Novo okno (_blank)","targetTop":"Vrhovno okno (_top)","targetSelf":"Isto okno (_self)","targetParent":"Starševsko okno (_parent)","langDirLTR":"Od leve proti desni (LTR)","langDirRTL":"Od desne proti levi (RTL)","styles":"Slog","cssClasses":"Razredi slogovne predloge","width":"Širina","height":"Višina","align":"Poravnava","left":"Levo","right":"Desno","center":"Sredinsko","justify":"Obojestranska poravnava","alignLeft":"Leva poravnava","alignRight":"Desna poravnava","alignCenter":"Align Center","alignTop":"Na vrh","alignMiddle":"V sredino","alignBottom":"Na dno","alignNone":"Brez poravnave","invalidValue":"Neveljavna vrednost.","invalidHeight":"Višina mora biti število.","invalidWidth":"Širina mora biti število.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Vrednost, določena za polje »%1«, mora biti pozitivno število z ali brez veljavne CSS-enote za merjenje (px, %, in, cm, mm, em, ex, pt ali pc).","invalidHtmlLength":"Vrednost, določena za polje »%1«, mora biti pozitivno število z ali brez veljavne HTML-enote za merjenje (px ali %).","invalidInlineStyle":"Vrednost, določena za slog v vrstici, mora biti sestavljena iz ene ali več dvojic oblike »ime : vrednost«, ločenih s podpičji.","cssLengthTooltip":"Vnesite število za vrednost v slikovnih pikah ali število z veljavno CSS-enoto (px, %, in, cm, mm, em, ex, pt ali pc).","unavailable":"%1<span class=\"cke_accessibility\">, nedosegljiv</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/sq.js b/core/assets/vendor/ckeditor/lang/sq.js
index e5b0f74b094d..732f19c2e405 100644
--- a/core/assets/vendor/ckeditor/lang/sq.js
+++ b/core/assets/vendor/ckeditor/lang/sq.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['sq']={"widget":{"move":"Kliko dhe tërhiqe për ta lëvizur","label":"%1 vegël"},"undo":{"redo":"Ribëje","undo":"Rizhbëje"},"toolbar":{"toolbarCollapse":"Zvogëlo Shiritin","toolbarExpand":"Zgjero Shiritin","toolbarGroups":{"document":"Dokumenti","clipboard":"Tabela Punës/Ribëje","editing":"Duke Redaktuar","forms":"Formularët","basicstyles":"Stilet Bazë","paragraph":"Paragrafi","links":"Nyjat","insert":"Shto","styles":"Stilet","colors":"Ngjyrat","tools":"Mjetet"},"toolbars":"Shiritat e Redaktuesit"},"table":{"border":"Madhësia e kornizave","caption":"Titull","cell":{"menu":"Qeli","insertBefore":"Shto Qeli Para","insertAfter":"Shto Qeli Prapa","deleteCell":"Gris Qelitë","merge":"Bashko Qelitë","mergeRight":"Bashko Djathtas","mergeDown":"Bashko Poshtë","splitHorizontal":"Ndaj Qelinë Horizontalisht","splitVertical":"Ndaj Qelinë Vertikalisht","title":"Rekuizitat e Qelisë","cellType":"Lloji i Qelisë","rowSpan":"Bashko Rreshtat","colSpan":"Bashko Kolonat","wordWrap":"Fund i Fjalës","hAlign":"Bashkimi Horizontal","vAlign":"Bashkimi Vertikal","alignBaseline":"Baza","bgColor":"Ngjyra e Prapavijës","borderColor":"Ngjyra e Kornizave","data":"Të dhënat","header":"Koka","yes":"Po","no":"Jo","invalidWidth":"Gjerësia e qelisë duhet të jetë numër.","invalidHeight":"Lartësia e qelisë duhet të jetë numër.","invalidRowSpan":"Hapësira e rreshtave duhet të jetë numër i plotë.","invalidColSpan":"Hapësira e kolonave duhet të jetë numër i plotë.","chooseColor":"Përzgjidh"},"cellPad":"Mbushja e qelisë","cellSpace":"Hapësira e qelisë","column":{"menu":"Kolona","insertBefore":"Vendos Kolonë Para","insertAfter":"Vendos Kolonë Pas","deleteColumn":"Gris Kolonat"},"columns":"Kolonat","deleteTable":"Gris Tabelën","headers":"Kokat","headersBoth":"Së bashku","headersColumn":"Kolona e parë","headersNone":"Asnjë","headersRow":"Rreshti i Parë","heightUnit":"height unit","invalidBorder":"Madhësia e kufinjve duhet të jetë numër.","invalidCellPadding":"Mbushja e qelisë duhet të jetë numër pozitiv.","invalidCellSpacing":"Hapësira e qelisë duhet të jetë numër pozitiv.","invalidCols":"Numri i kolonave duhet të jetë numër më i madh se 0.","invalidHeight":"Lartësia e tabelës duhet të jetë numër.","invalidRows":"Numri i rreshtave duhet të jetë numër më i madh se 0.","invalidWidth":"Gjerësia e tabelës duhet të jetë numër.","menu":"Karakteristikat e Tabelës","row":{"menu":"Rreshti","insertBefore":"Shto Rresht Para","insertAfter":"Shto Rresht Prapa","deleteRow":"Gris Rreshtat"},"rows":"Rreshtat","summary":"Përmbledhje","title":"Karakteristikat e Tabelës","toolbar":"Tabela","widthPc":"përqind","widthPx":"piksell","widthUnit":"njësia e gjerësisë"},"stylescombo":{"label":"Stilet","panelTitle":"Formatimi i Stileve","panelTitle1":"Stilet e Bllokut","panelTitle2":"Stilet e Brendshme","panelTitle3":"Stilet e Objektit"},"specialchar":{"options":"Mundësitë për Karaktere Speciale","title":"Përzgjidh Karakter Special","toolbar":"Vendos Karakter Special"},"sourcedialog":{"toolbar":"Burimi","title":"Burimi"},"sourcearea":{"toolbar":"Burimi"},"showblocks":{"toolbar":"Shfaq Blloqet"},"removeformat":{"toolbar":"Largo Formatin"},"pastetext":{"button":"Hidhe si tekst të thjeshtë","pasteNotification":"Shtyp %1 për të hedhur tekstin. Shfletuesi juaj nuk mbështetë hedhjen me pullë shiriti ose alternativën e menysë kontekstuale.","title":"Hidhe si Tekst të Thjeshtë"},"pastefromword":{"confirmCleanup":"Teksti që dëshironi të e hidhni siç duket është kopjuar nga Word-i. Dëshironi të e pastroni para se të e hidhni?","error":"Nuk ishte e mundur të fshiheshin të dhënat e hedhura për shkak të një gabimi të brendshëm","title":"Hidhe nga Word-i","toolbar":"Hidhe nga Word-i"},"notification":{"closed":"Njoftimi është mbyllur."},"maximize":{"maximize":"Zmadho","minimize":"Zvogëlo"},"magicline":{"title":"Shto paragrafin këtu"},"list":{"bulletedlist":"Vendos/Largo Listën me Pika","numberedlist":"Vendos/Largo Listën me Numra"},"language":{"button":"Përzgjidhni gjuhën","remove":"Largoni gjuhën"},"indent":{"indent":"Rrite Identin","outdent":"Zvogëlo Identin"},"image2":{"alt":"Tekst Alternativ","btnUpload":"Dërgo në server","captioned":"Foto e titulluar","captionPlaceholder":"Titulli","infoTab":"Informacione mbi Fotografinë","lockRatio":"Mbyll Racionin","menu":"Karakteristikat e Fotografisë","pathName":"foto","pathNameCaption":"titull","resetSize":"Rikthe Madhësinë","resizer":"Kliko dhe tërhiqe për ndryshim të madhësisë","title":"Karakteristikat e Fotografisë","uploadTab":"Ngarko","urlMissing":"Mungon URL e burimit të fotografisë.","altMissing":"Teksti alternativ mungon."},"horizontalrule":{"toolbar":"Shto Vijë Horizontale"},"format":{"label":"Formati","panelTitle":"Formati i Paragrafit","tag_address":"Adresa","tag_div":"Normal (DIV)","tag_h1":"Titulli 1","tag_h2":"Titulli 2","tag_h3":"Titulli 3","tag_h4":"Titulli 4","tag_h5":"Titulli 5","tag_h6":"Titulli 6","tag_p":"Normal","tag_pre":"Formatuar"},"filetools":{"loadError":"Gabimi u paraqit gjatë leximit të skedës.","networkError":"Gabimi në rrjetë u paraqitë gjatë ngarkimit të skedës.","httpError404":"Gabimi në HTTP u paraqit gjatë ngarkimit të skedës (404: Skeda nuk u gjetë).","httpError403":"Gabimi në HTTP u paraqitë gjatë ngarkimit të skedës (403: E ndaluar).","httpError":"Gabimi në HTTP u paraqit gjatë ngarkimit të skedës (gjendja e gabimit: %1).","noUrlError":"URL e ngarkimit nuk është vendosur.","responseError":"Përgjigje e gabuar e serverit."},"elementspath":{"eleLabel":"Rruga e elementeve","eleTitle":"%1 element"},"contextmenu":{"options":"Mundësitë e Menysë së Kontekstit"},"clipboard":{"copy":"Kopjo","copyError":"Të dhënat e sigurisë së shfletuesit tuaj nuk lejojnë që redaktuesi automatikisht të kryej veprimin e kopjimit. Ju lutemi shfrytëzoni tastierën për këtë veprim (Ctrl/Cmd+C).","cut":"Preje","cutError":"Të dhënat e sigurisë së shfletuesit tuaj nuk lejojnë që redaktuesi automatikisht të kryej veprimin e prerjes. Ju lutemi shfrytëzoni tastierën për këtë veprim (Ctrl/Cmd+X).","paste":"Hidhe","pasteNotification":"Shtyp %1 për të hedhur tekstin. Shfletuesi juaj nuk mbështetë hedhjen me pullë shiriti ose alternativën e menysë kontekstuale.","pasteArea":"Hapësira e Hedhjes","pasteMsg":"Hidh përmbajtjen brenda hapësirës më poshtë dhe shtyp MIRË."},"blockquote":{"toolbar":"Thonjëzat"},"basicstyles":{"bold":"Trash","italic":"Pjerrët","strike":"Nëpërmes","subscript":"Nën-skriptë","superscript":"Super-skriptë","underline":"Nënvijëzuar"},"about":{"copy":"Të drejtat  e autorit &copy; $1. Të gjitha të drejtat e rezervuara.","dlgTitle":"Rreth CKEditor 4","moreInfo":"Për informacione rreth licencave shih faqen tonë:"},"editor":"Redaktues i Pasur Teksti","editorPanel":"Paneli i redaktuesit të tekstit të plotë","common":{"editorHelp":"Shtyp ALT 0 për ndihmë","browseServer":"Shfleto në Server","url":"URL","protocol":"Protokolli","upload":"Ngarko","uploadSubmit":"E dërgo në server","image":"Foto","flash":"Objekt flash","form":"Formulari","checkbox":"Kuti përzgjedhjeje","radio":"Pullë përzgjedhjeje","textField":"Fushë teksti","textarea":"Hapësirë teksti","hiddenField":"Fushë e fshehur","button":"Pullë","select":"Fusha e përzgjedhjeve","imageButton":"Pullë fotografie","notSet":"<not set>","id":"Id","name":"Emri","langDir":"Drejtim gjuhe","langDirLtr":"Nga e majta në të djathtë (LTR)","langDirRtl":"Nga e djathta në të majtë (RTL)","langCode":"Kodi i Gjuhës","longDescr":"URL e përshkrimit të hollësishëm","cssClass":"CSS Klasat","advisoryTitle":"Titulli Konsultativ","cssStyle":"Stili","ok":"Mirë","cancel":"Anulo","close":"Mbyll","preview":"Parashih","resize":"Ndrysho madhësinë","generalTab":"Të përgjithshme","advancedTab":"Të përparuara","validateNumberFailed":"Kjo vlerë nuk është numër.","confirmNewPage":"Çdo ndryshim që nuk është ruajtur do humbasë. Je i sigurt që dëshiron të hapsh faqe të re?","confirmCancel":"Ke ndryshuar ca mundësi. Je i sigurt që dëshiron ta mbyllësh dritaren?","options":"Mundësitë","target":"Objektivi","targetNew":"Dritare e re (_blank)","targetTop":"Dritare në plan të parë (_top)","targetSelf":"E njëjta dritare (_self)","targetParent":"Dritarja prind (_parent)","langDirLTR":"Nga e majta në të djathë (LTR)","langDirRTL":"Nga e djathta në të majtë (RTL)","styles":"Stili","cssClasses":"CSS Klasat","width":"Gjerësia","height":"Lartësia","align":"Rreshtimi","left":"Majtas","right":"Djathtas","center":"Në mes","justify":"Zgjero","alignLeft":"Rreshto majtas","alignRight":"Rreshto Djathtas","alignCenter":"Rreshto në mes","alignTop":"Lart","alignMiddle":"Në mes","alignBottom":"Poshtë","alignNone":"Asnjë","invalidValue":"Vlerë e pavlefshme","invalidHeight":"Lartësia duhet të jetë një numër","invalidWidth":"Gjerësia duhet të jetë një numër","invalidLength":"Vlera e përcaktuar për fushën \"%1\" duhet të jetë pozitive me ose pa njësi matëse me vlerë (%2).","invalidCssLength":"Vlera e fushës \"%1\" duhet të jetë një numër pozitiv me apo pa njësi matëse të vlefshme CSS (px, %, in, cm, mm, em, ex, pt ose pc).","invalidHtmlLength":"Vlera e fushës \"%1\" duhet të jetë një numër pozitiv me apo pa njësi matëse të vlefshme HTML (px ose %)","invalidInlineStyle":"Vlera e përcaktuar për stilin e vijëzuar duhet përmbajtur një ose më shumë vlera me format \"emër : vlerë\", të ndara me pikëpresje.","cssLengthTooltip":"Shto një numër për vlerën në piksel ose një numër me njësi të vlefshme CSS (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, i padisponueshëm</span>","keyboard":{"8":"Prapa","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Hapësirë","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Urdhri"},"keyboardShortcut":"Shkurtesat e tastierës","optionDefault":"Parazgjedhur"}};
\ No newline at end of file
+CKEDITOR.lang['sq']={"widget":{"move":"Kliko dhe tërhiqe për ta lëvizur","label":"%1 vegël"},"undo":{"redo":"Ribëje","undo":"Rizhbëje"},"toolbar":{"toolbarCollapse":"Zvogëlo Shiritin","toolbarExpand":"Zgjero Shiritin","toolbarGroups":{"document":"Dokumenti","clipboard":"Tabela Punës/Ribëje","editing":"Duke Redaktuar","forms":"Formularët","basicstyles":"Stilet Bazë","paragraph":"Paragrafi","links":"Nyjat","insert":"Shto","styles":"Stilet","colors":"Ngjyrat","tools":"Mjetet"},"toolbars":"Shiritat e Redaktuesit"},"table":{"border":"Madhësia e kornizave","caption":"Titull","cell":{"menu":"Qeli","insertBefore":"Shto Qeli Para","insertAfter":"Shto Qeli Prapa","deleteCell":"Gris Qelitë","merge":"Bashko Qelitë","mergeRight":"Bashko Djathtas","mergeDown":"Bashko Poshtë","splitHorizontal":"Ndaj Qelinë Horizontalisht","splitVertical":"Ndaj Qelinë Vertikalisht","title":"Rekuizitat e Qelisë","cellType":"Lloji i Qelisë","rowSpan":"Bashko Rreshtat","colSpan":"Bashko Kolonat","wordWrap":"Fund i Fjalës","hAlign":"Bashkimi Horizontal","vAlign":"Bashkimi Vertikal","alignBaseline":"Baza","bgColor":"Ngjyra e Prapavijës","borderColor":"Ngjyra e Kornizave","data":"Të dhënat","header":"Koka","yes":"Po","no":"Jo","invalidWidth":"Gjerësia e qelisë duhet të jetë numër.","invalidHeight":"Lartësia e qelisë duhet të jetë numër.","invalidRowSpan":"Hapësira e rreshtave duhet të jetë numër i plotë.","invalidColSpan":"Hapësira e kolonave duhet të jetë numër i plotë.","chooseColor":"Përzgjidh"},"cellPad":"Mbushja e qelisë","cellSpace":"Hapësira e qelisë","column":{"menu":"Kolona","insertBefore":"Vendos Kolonë Para","insertAfter":"Vendos Kolonë Pas","deleteColumn":"Gris Kolonat"},"columns":"Kolonat","deleteTable":"Gris Tabelën","headers":"Kokat","headersBoth":"Së bashku","headersColumn":"Kolona e parë","headersNone":"Asnjë","headersRow":"Rreshti i Parë","heightUnit":"height unit","invalidBorder":"Madhësia e kufinjve duhet të jetë numër.","invalidCellPadding":"Mbushja e qelisë duhet të jetë numër pozitiv.","invalidCellSpacing":"Hapësira e qelisë duhet të jetë numër pozitiv.","invalidCols":"Numri i kolonave duhet të jetë numër më i madh se 0.","invalidHeight":"Lartësia e tabelës duhet të jetë numër.","invalidRows":"Numri i rreshtave duhet të jetë numër më i madh se 0.","invalidWidth":"Gjerësia e tabelës duhet të jetë numër.","menu":"Karakteristikat e Tabelës","row":{"menu":"Rreshti","insertBefore":"Shto Rresht Para","insertAfter":"Shto Rresht Prapa","deleteRow":"Gris Rreshtat"},"rows":"Rreshtat","summary":"Përmbledhje","title":"Karakteristikat e Tabelës","toolbar":"Tabela","widthPc":"përqind","widthPx":"piksell","widthUnit":"njësia e gjerësisë"},"stylescombo":{"label":"Stilet","panelTitle":"Formatimi i Stileve","panelTitle1":"Stilet e Bllokut","panelTitle2":"Stilet e Brendshme","panelTitle3":"Stilet e Objektit"},"specialchar":{"options":"Mundësitë për Karaktere Speciale","title":"Përzgjidh Karakter Special","toolbar":"Vendos Karakter Special"},"sourcedialog":{"toolbar":"Burimi","title":"Burimi"},"sourcearea":{"toolbar":"Burimi"},"showblocks":{"toolbar":"Shfaq Blloqet"},"removeformat":{"toolbar":"Largo Formatin"},"pastetext":{"button":"Hidhe si tekst të thjeshtë","pasteNotification":"Shtyp %1 për të hedhur tekstin. Shfletuesi juaj nuk mbështetë hedhjen me pullë shiriti ose alternativën e menysë kontekstuale.","title":"Hidhe si Tekst të Thjeshtë"},"pastefromword":{"confirmCleanup":"Teksti që dëshironi të e hidhni siç duket është kopjuar nga Word-i. Dëshironi të e pastroni para se të e hidhni?","error":"Nuk ishte e mundur të fshiheshin të dhënat e hedhura për shkak të një gabimi të brendshëm","title":"Hidhe nga Word-i","toolbar":"Hidhe nga Word-i"},"notification":{"closed":"Njoftimi është mbyllur."},"maximize":{"maximize":"Zmadho","minimize":"Zvogëlo"},"magicline":{"title":"Shto paragrafin këtu"},"list":{"bulletedlist":"Vendos/Largo Listën me Pika","numberedlist":"Vendos/Largo Listën me Numra"},"language":{"button":"Përzgjidhni gjuhën","remove":"Largoni gjuhën"},"indent":{"indent":"Rrite Identin","outdent":"Zvogëlo Identin"},"image2":{"alt":"Tekst Alternativ","btnUpload":"Dërgo në server","captioned":"Foto e titulluar","captionPlaceholder":"Titulli","infoTab":"Informacione mbi Fotografinë","lockRatio":"Mbyll Racionin","menu":"Karakteristikat e Fotografisë","pathName":"foto","pathNameCaption":"titull","resetSize":"Rikthe Madhësinë","resizer":"Kliko dhe tërhiqe për ndryshim të madhësisë","title":"Karakteristikat e Fotografisë","uploadTab":"Ngarko","urlMissing":"Mungon URL e burimit të fotografisë.","altMissing":"Teksti alternativ mungon."},"horizontalrule":{"toolbar":"Shto Vijë Horizontale"},"format":{"label":"Formati","panelTitle":"Formati i Paragrafit","tag_address":"Adresa","tag_div":"Normal (DIV)","tag_h1":"Titulli 1","tag_h2":"Titulli 2","tag_h3":"Titulli 3","tag_h4":"Titulli 4","tag_h5":"Titulli 5","tag_h6":"Titulli 6","tag_p":"Normal","tag_pre":"Formatuar"},"filetools":{"loadError":"Gabimi u paraqit gjatë leximit të skedës.","networkError":"Gabimi në rrjetë u paraqitë gjatë ngarkimit të skedës.","httpError404":"Gabimi në HTTP u paraqit gjatë ngarkimit të skedës (404: Skeda nuk u gjetë).","httpError403":"Gabimi në HTTP u paraqitë gjatë ngarkimit të skedës (403: E ndaluar).","httpError":"Gabimi në HTTP u paraqit gjatë ngarkimit të skedës (gjendja e gabimit: %1).","noUrlError":"URL e ngarkimit nuk është vendosur.","responseError":"Përgjigje e gabuar e serverit."},"elementspath":{"eleLabel":"Rruga e elementeve","eleTitle":"%1 element"},"contextmenu":{"options":"Mundësitë e Menysë së Kontekstit"},"clipboard":{"copy":"Kopjo","copyError":"Të dhënat e sigurisë së shfletuesit tuaj nuk lejojnë që redaktuesi automatikisht të kryej veprimin e kopjimit. Ju lutemi shfrytëzoni tastierën për këtë veprim (Ctrl/Cmd+C).","cut":"Preje","cutError":"Të dhënat e sigurisë së shfletuesit tuaj nuk lejojnë që redaktuesi automatikisht të kryej veprimin e prerjes. Ju lutemi shfrytëzoni tastierën për këtë veprim (Ctrl/Cmd+X).","paste":"Hidhe","pasteNotification":"Shtyp %1 për të hedhur tekstin. Shfletuesi juaj nuk mbështetë hedhjen me pullë shiriti ose alternativën e menysë kontekstuale.","pasteArea":"Hapësira e Hedhjes","pasteMsg":"Hidh përmbajtjen brenda hapësirës më poshtë dhe shtyp MIRË.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Thonjëzat"},"basicstyles":{"bold":"Trash","italic":"Pjerrët","strike":"Nëpërmes","subscript":"Nën-skriptë","superscript":"Super-skriptë","underline":"Nënvijëzuar"},"about":{"copy":"Të drejtat  e autorit &copy; $1. Të gjitha të drejtat e rezervuara.","dlgTitle":"Rreth CKEditor 4","moreInfo":"Për informacione rreth licencave shih faqen tonë:"},"editor":"Redaktues i Pasur Teksti","editorPanel":"Paneli i redaktuesit të tekstit të plotë","common":{"editorHelp":"Shtyp ALT 0 për ndihmë","browseServer":"Shfleto në Server","url":"URL","protocol":"Protokolli","upload":"Ngarko","uploadSubmit":"E dërgo në server","image":"Foto","form":"Formulari","checkbox":"Kuti përzgjedhjeje","radio":"Pullë përzgjedhjeje","textField":"Fushë teksti","textarea":"Hapësirë teksti","hiddenField":"Fushë e fshehur","button":"Pullë","select":"Fusha e përzgjedhjeve","imageButton":"Pullë fotografie","notSet":"<not set>","id":"Id","name":"Emri","langDir":"Drejtim gjuhe","langDirLtr":"Nga e majta në të djathtë (LTR)","langDirRtl":"Nga e djathta në të majtë (RTL)","langCode":"Kodi i Gjuhës","longDescr":"URL e përshkrimit të hollësishëm","cssClass":"CSS Klasat","advisoryTitle":"Titulli Konsultativ","cssStyle":"Stili","ok":"Mirë","cancel":"Anulo","close":"Mbyll","preview":"Parashih","resize":"Ndrysho madhësinë","generalTab":"Të përgjithshme","advancedTab":"Të përparuara","validateNumberFailed":"Kjo vlerë nuk është numër.","confirmNewPage":"Çdo ndryshim që nuk është ruajtur do humbasë. Je i sigurt që dëshiron të hapsh faqe të re?","confirmCancel":"Ke ndryshuar ca mundësi. Je i sigurt që dëshiron ta mbyllësh dritaren?","options":"Mundësitë","target":"Objektivi","targetNew":"Dritare e re (_blank)","targetTop":"Dritare në plan të parë (_top)","targetSelf":"E njëjta dritare (_self)","targetParent":"Dritarja prind (_parent)","langDirLTR":"Nga e majta në të djathë (LTR)","langDirRTL":"Nga e djathta në të majtë (RTL)","styles":"Stili","cssClasses":"CSS Klasat","width":"Gjerësia","height":"Lartësia","align":"Rreshtimi","left":"Majtas","right":"Djathtas","center":"Në mes","justify":"Zgjero","alignLeft":"Rreshto majtas","alignRight":"Rreshto Djathtas","alignCenter":"Rreshto në mes","alignTop":"Lart","alignMiddle":"Në mes","alignBottom":"Poshtë","alignNone":"Asnjë","invalidValue":"Vlerë e pavlefshme","invalidHeight":"Lartësia duhet të jetë një numër","invalidWidth":"Gjerësia duhet të jetë një numër","invalidLength":"Vlera e përcaktuar për fushën \"%1\" duhet të jetë pozitive me ose pa njësi matëse me vlerë (%2).","invalidCssLength":"Vlera e fushës \"%1\" duhet të jetë një numër pozitiv me apo pa njësi matëse të vlefshme CSS (px, %, in, cm, mm, em, ex, pt ose pc).","invalidHtmlLength":"Vlera e fushës \"%1\" duhet të jetë një numër pozitiv me apo pa njësi matëse të vlefshme HTML (px ose %)","invalidInlineStyle":"Vlera e përcaktuar për stilin e vijëzuar duhet përmbajtur një ose më shumë vlera me format \"emër : vlerë\", të ndara me pikëpresje.","cssLengthTooltip":"Shto një numër për vlerën në piksel ose një numër me njësi të vlefshme CSS (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, i padisponueshëm</span>","keyboard":{"8":"Prapa","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Hapësirë","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Urdhri"},"keyboardShortcut":"Shkurtesat e tastierës","optionDefault":"Parazgjedhur"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/sr-latn.js b/core/assets/vendor/ckeditor/lang/sr-latn.js
index 3dae1c5383c0..c1ae16ec1bb9 100644
--- a/core/assets/vendor/ckeditor/lang/sr-latn.js
+++ b/core/assets/vendor/ckeditor/lang/sr-latn.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['sr-latn']={"widget":{"move":"Kliknite i povucite da bi pomerali","label":"%1 modul"},"undo":{"redo":"Ponovi ","undo":"Vrati"},"toolbar":{"toolbarCollapse":"Zatvori alatnu traku","toolbarExpand":"Otvori alatnu traku","toolbarGroups":{"document":"Dokument","clipboard":"Clipboard/Vrati","editing":"Uredi","forms":"Obrasci","basicstyles":"Osnovni stilovi","paragraph":"Pasus","links":"Linkovi","insert":"Dodaj","styles":"Stilovi","colors":"Boje","tools":"Alatke"},"toolbars":"Uredjivač alatne trake"},"table":{"border":"Veličina okvira","caption":"Naslov tabele","cell":{"menu":"Ćelija","insertBefore":"Ubaci levo","insertAfter":"Ubaci desno","deleteCell":"Obriši ćelije","merge":"Spoj ćelije","mergeRight":"Spolj ćelije desno","mergeDown":"Spolj čelije na dole","splitHorizontal":"Razdvoji ćelije vodoravno","splitVertical":"Razdvoji ćelije uspravno","title":"Karakteristike ćelija","cellType":"Tip ćelija","rowSpan":"Spoj uzdužno","colSpan":"Spoj vodoravno","wordWrap":"Brisanje dugačkih redova","hAlign":"Ravnanje vodoravno","vAlign":"Ravnanje uspravno","alignBaseline":"Bazna linija","bgColor":"Boja pozadine","borderColor":"Boja okvira","data":"Podatak","header":"Zaglavlje","yes":"Da","no":"Nе","invalidWidth":"U polje širina možete upisati samo brojeve. ","invalidHeight":"U polje visina možete upisati samo brojeve.","invalidRowSpan":"U polje spoj uspravno  možete upistai samo brojeve.","invalidColSpan":"U polje spoj vodoravno možete upistai samo brojeve.","chooseColor":"Izaberi"},"cellPad":"Razmak ćelija","cellSpace":"Ćelijski prostor","column":{"menu":"Kolona","insertBefore":"Ubaci levo","insertAfter":"Ubaci desno","deleteColumn":"Obriši kolone"},"columns":"Kolona","deleteTable":"Izbriši tabelu","headers":"Zaglavlja","headersBoth":"Oba","headersColumn":"Prva kolona","headersNone":"Nema","headersRow":"Prvi red","heightUnit":"Jedinica visine","invalidBorder":"Veličina okvira mora biti broj.","invalidCellPadding":"Padding polja mora biti pozitivan broj.","invalidCellSpacing":"Razmak između ćelija mora biti pozitivan broj.","invalidCols":"Broj kolona mora biti broj veći od 0.","invalidHeight":"Visina tabele mora biti broj.","invalidRows":"Broj redova mora biti veći od 0.","invalidWidth":"Širina tabele mora biti broj.","menu":"Osobine tabele","row":{"menu":"Red","insertBefore":"Ubaci iznad","insertAfter":"Ubaci ispod","deleteRow":"Obriši redove"},"rows":"Redovi","summary":"Opis","title":"Karakteristike tabele","toolbar":"Tabela","widthPc":"procenata","widthPx":"piksela","widthUnit":"jedinica za širinu"},"stylescombo":{"label":"Stil","panelTitle":"Stilovi formatiranja","panelTitle1":"Blok stilovi","panelTitle2":"Inline stilovi","panelTitle3":"Stilovi objekta"},"specialchar":{"options":"Opcije specijalnog karaktera","title":"Odaberite specijalni karakter","toolbar":"Unesi specijalni karakter"},"sourcedialog":{"toolbar":"Izvorni kod","title":"Izvorni kod"},"sourcearea":{"toolbar":"Izvorni kod"},"showblocks":{"toolbar":"Prikaži blokove"},"removeformat":{"toolbar":"Ukloni formatiranje"},"pastetext":{"button":"Zalepi kao neformiran tekst","pasteNotification":"Pritisnite taster % 1 da bi ste nalepili. Pretraživač ne podržava lepljenje pomoću tastera na traci sa alatkama ili iz menija.","title":"Zalepi kao neformiran tekst"},"pastefromword":{"confirmCleanup":"Kopirani tekst je iz Word-a. Želite ga očistiti? ","error":"Zbog interne greške tekst nije očišćen.","title":"Zalepi iz Worda","toolbar":"Zalepi iz Worda"},"notification":{"closed":"Obaveštenje zatvoreno"},"maximize":{"maximize":"Maksimalna veličina","minimize":"Minimalna veličina"},"magicline":{"title":"Umetnite pasus ovde."},"list":{"bulletedlist":"Nаbrajanje","numberedlist":"Numerisanje"},"language":{"button":"Podesi jezik","remove":"Odstrani jezik"},"indent":{"indent":"Uvećaj marginu","outdent":"Smanji marginu"},"image2":{"alt":"Alternativni tekst","btnUpload":"Pošalji na server","captioned":"Slika sa natpisom","captionPlaceholder":"Natpis","infoTab":"Osnovne karakteristike","lockRatio":"Zadrži odnos","menu":"Osobine slike","pathName":"Slika","pathNameCaption":"Natpis","resetSize":"Original  veličina","resizer":"Kliknite i povucite da bi ste promenili veličinu","title":"Osobine slika","uploadTab":"Postavi","urlMissing":"Nedostaje URL slike","altMissing":"Nedostaje alternativni tekst"},"horizontalrule":{"toolbar":"Unesi horizontalnu liniju"},"format":{"label":"Format","panelTitle":"Format pasusa","tag_address":"Adresa","tag_div":"Normalno (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":"Normalno","tag_pre":"Formatirano"},"filetools":{"loadError":"Došlo je do greške pri čitanju datoteke.","networkError":"Tokom postavljanja datoteke došlo je do mrežne greške","httpError404":"Tokom postavljanja datoteke došlo je do HTTP greške (404: Datoteka nije pronadjena).","httpError403":"Tokom postavljanja datoteke došlo je do HTTP greške (403: Zabranjena).","httpError":"Tokom postavljanja datoteke došlo je do HTTP greške (status greške: %1).","noUrlError":"URL adresa za postavljanje nije navedena.","responseError":"Neispravan odgovor servera."},"elementspath":{"eleLabel":"Put do elemenata","eleTitle":"%1 element"},"contextmenu":{"options":"Opcije menija"},"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","pasteNotification":"\"Pritisnite taster %1 za lepljenje. Vaš pretraživač ne dozvoljava lepljenje iz alatne trake ili menia.","pasteArea":"Prostor za lepljenje","pasteMsg":"Nalepite sadržaj u sledeći prostor i pritisnite taster OK."},"blockquote":{"toolbar":"Blok citat"},"basicstyles":{"bold":"Podebljano","italic":"Kurziv","strike":"Precrtano","subscript":"Indeks","superscript":"Stepen","underline":"Podvučeno"},"about":{"copy":"Copyright &copy; $1. Sva prava zadržana.","dlgTitle":"O CKEditor 4","moreInfo":"Za informacije o licenci posetite našu web stranicu:"},"editor":"Bogati uređivač teksta","editorPanel":"Bogati uređivač panel","common":{"editorHelp":"Za pomoć pritisnite ALT 0","browseServer":"Pretraži na serveru","url":"URL","protocol":"Protokol","upload":"Pošalji","uploadSubmit":"Pošalji na server","image":"Slika","flash":"Fleš","form":"Formular","checkbox":"Polje za potvrdu","radio":"Radio-dugme","textField":"Tekstualno polje","textarea":"Zona teksta","hiddenField":"Skriveno polje","button":"Dugme","select":"Padajuća lista","imageButton":"Dugme sa slikom","notSet":"<nije postavljeno> ","id":"Id","name":"Naziv","langDir":"Smer pisanja","langDirLtr":"S leva na desno (LTR)","langDirRtl":"S desna na levo (RTL)","langCode":"Kôd jezika","longDescr":"Detaljan opis URL","cssClass":"CSS klase","advisoryTitle":"Advisory naslov","cssStyle":"Stil","ok":"OK","cancel":"Otkaži","close":"Zatvori","preview":"Izgled stranice","resize":"Promena veličine","generalTab":"Opšti","advancedTab":"Dalje opcije","validateNumberFailed":"Ova vrednost nije broj.","confirmNewPage":"Nesačuvane promene ovog sadržaja će biti izgubljene. Jeste li sigurni da želita da učitate novu stranu?","confirmCancel":"Neka podešavanja su promenjena.Sigurno želite zatvoriti prozor?","options":"Podešavanja","target":"Cilj","targetNew":"Novi prozor (_blank)","targetTop":"Prozor na vrhu stranice(_top)","targetSelf":"Isti prozor (_self)","targetParent":"Matični prozor (_parent)","langDirLTR":"S leva na desno (LTR)","langDirRTL":"S desna na levo (RTL)","styles":"Stil","cssClasses":"CSS klase","width":"Širina","height":"Visina","align":"Ravnanje","left":"Levo","right":"Desno","center":"Sredina","justify":"Obostrano ravnanje","alignLeft":"Levo ravnanje","alignRight":"Desno ravnanje","alignCenter":"Centralno ravnanje","alignTop":"Vrh","alignMiddle":"Sredina","alignBottom":"Dole","alignNone":"Ništa","invalidValue":"Nevažeća vrednost.","invalidHeight":"U polje visina mogu se upisati samo brojevi.","invalidWidth":"U polje širina mogu se upisati samo brojevi.","invalidLength":"U \"%1\" polju data vrednos treba da bude pozitivan broj, sa validnom mernom jedinicom ili bez (%2).","invalidCssLength":"Za \"%1\" data vrednost mora biti pozitivan broj, moguće označiti sa validnim CSS vrednosću (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Za \"%1\" data vrednost mora biti potitivan broj, moguće označiti sa validnim HTML vrednošću (px or %).","invalidInlineStyle":"Vrednost u inline styleu mora da sadrži barem jedan rekord u formatu \"name : value\", razdeljeni sa tačkazapetom.","cssLengthTooltip":"Odredite broj u pixeima ili u validnim CSS vrednostima (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Taster za prečicu","optionDefault":"Оsnovni"}};
\ No newline at end of file
+CKEDITOR.lang['sr-latn']={"widget":{"move":"Kliknite i povucite da bi pomerali","label":"%1 modul"},"undo":{"redo":"Ponovi ","undo":"Vrati"},"toolbar":{"toolbarCollapse":"Zatvori alatnu traku","toolbarExpand":"Otvori alatnu traku","toolbarGroups":{"document":"Dokument","clipboard":"Clipboard/Vrati","editing":"Uredi","forms":"Obrasci","basicstyles":"Osnovni stilovi","paragraph":"Pasus","links":"Linkovi","insert":"Dodaj","styles":"Stilovi","colors":"Boje","tools":"Alatke"},"toolbars":"Uredjivač alatne trake"},"table":{"border":"Veličina okvira","caption":"Naslov tabele","cell":{"menu":"Ćelija","insertBefore":"Ubaci levo","insertAfter":"Ubaci desno","deleteCell":"Obriši ćelije","merge":"Spoj ćelije","mergeRight":"Spolj ćelije desno","mergeDown":"Spolj čelije na dole","splitHorizontal":"Razdvoji ćelije vodoravno","splitVertical":"Razdvoji ćelije uspravno","title":"Karakteristike ćelija","cellType":"Tip ćelija","rowSpan":"Spoj uzdužno","colSpan":"Spoj vodoravno","wordWrap":"Brisanje dugačkih redova","hAlign":"Ravnanje vodoravno","vAlign":"Ravnanje uspravno","alignBaseline":"Bazna linija","bgColor":"Boja pozadine","borderColor":"Boja okvira","data":"Podatak","header":"Zaglavlje","yes":"Da","no":"Nе","invalidWidth":"U polje širina možete upisati samo brojeve. ","invalidHeight":"U polje visina možete upisati samo brojeve.","invalidRowSpan":"U polje spoj uspravno  možete upistai samo brojeve.","invalidColSpan":"U polje spoj vodoravno možete upistai samo brojeve.","chooseColor":"Izaberi"},"cellPad":"Razmak ćelija","cellSpace":"Ćelijski prostor","column":{"menu":"Kolona","insertBefore":"Ubaci levo","insertAfter":"Ubaci desno","deleteColumn":"Obriši kolone"},"columns":"Kolona","deleteTable":"Izbriši tabelu","headers":"Zaglavlja","headersBoth":"Oba","headersColumn":"Prva kolona","headersNone":"Nema","headersRow":"Prvi red","heightUnit":"Jedinica visine","invalidBorder":"Veličina okvira mora biti broj.","invalidCellPadding":"Padding polja mora biti pozitivan broj.","invalidCellSpacing":"Razmak između ćelija mora biti pozitivan broj.","invalidCols":"Broj kolona mora biti broj veći od 0.","invalidHeight":"Visina tabele mora biti broj.","invalidRows":"Broj redova mora biti veći od 0.","invalidWidth":"Širina tabele mora biti broj.","menu":"Osobine tabele","row":{"menu":"Red","insertBefore":"Ubaci iznad","insertAfter":"Ubaci ispod","deleteRow":"Obriši redove"},"rows":"Redovi","summary":"Opis","title":"Karakteristike tabele","toolbar":"Tabela","widthPc":"procenata","widthPx":"piksela","widthUnit":"jedinica za širinu"},"stylescombo":{"label":"Stil","panelTitle":"Stilovi formatiranja","panelTitle1":"Blok stilovi","panelTitle2":"Inline stilovi","panelTitle3":"Stilovi objekta"},"specialchar":{"options":"Opcije specijalnog karaktera","title":"Odaberite specijalni karakter","toolbar":"Unesi specijalni karakter"},"sourcedialog":{"toolbar":"Izvorni kod","title":"Izvorni kod"},"sourcearea":{"toolbar":"Izvorni kod"},"showblocks":{"toolbar":"Prikaži blokove"},"removeformat":{"toolbar":"Ukloni formatiranje"},"pastetext":{"button":"Zalepi kao neformiran tekst","pasteNotification":"Pritisnite taster % 1 da bi ste nalepili. Pretraživač ne podržava lepljenje pomoću tastera na traci sa alatkama ili iz menija.","title":"Zalepi kao neformiran tekst"},"pastefromword":{"confirmCleanup":"Kopirani tekst je iz Word-a. Želite ga očistiti? ","error":"Zbog interne greške tekst nije očišćen.","title":"Zalepi iz Worda","toolbar":"Zalepi iz Worda"},"notification":{"closed":"Obaveštenje zatvoreno"},"maximize":{"maximize":"Maksimalna veličina","minimize":"Minimalna veličina"},"magicline":{"title":"Umetnite pasus ovde."},"list":{"bulletedlist":"Nаbrajanje","numberedlist":"Numerisanje"},"language":{"button":"Podesi jezik","remove":"Odstrani jezik"},"indent":{"indent":"Uvećaj marginu","outdent":"Smanji marginu"},"image2":{"alt":"Alternativni tekst","btnUpload":"Pošalji na server","captioned":"Slika sa natpisom","captionPlaceholder":"Natpis","infoTab":"Osnovne karakteristike","lockRatio":"Zadrži odnos","menu":"Osobine slike","pathName":"Slika","pathNameCaption":"Natpis","resetSize":"Original  veličina","resizer":"Kliknite i povucite da bi ste promenili veličinu","title":"Osobine slika","uploadTab":"Postavi","urlMissing":"Nedostaje URL slike","altMissing":"Nedostaje alternativni tekst"},"horizontalrule":{"toolbar":"Unesi horizontalnu liniju"},"format":{"label":"Format","panelTitle":"Format pasusa","tag_address":"Adresa","tag_div":"Normalno (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":"Normalno","tag_pre":"Formatirano"},"filetools":{"loadError":"Došlo je do greške pri čitanju datoteke.","networkError":"Tokom postavljanja datoteke došlo je do mrežne greške","httpError404":"Tokom postavljanja datoteke došlo je do HTTP greške (404: Datoteka nije pronadjena).","httpError403":"Tokom postavljanja datoteke došlo je do HTTP greške (403: Zabranjena).","httpError":"Tokom postavljanja datoteke došlo je do HTTP greške (status greške: %1).","noUrlError":"URL adresa za postavljanje nije navedena.","responseError":"Neispravan odgovor servera."},"elementspath":{"eleLabel":"Put do elemenata","eleTitle":"%1 element"},"contextmenu":{"options":"Opcije menija"},"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","pasteNotification":"\"Pritisnite taster %1 za lepljenje. Vaš pretraživač ne dozvoljava lepljenje iz alatne trake ili menia.","pasteArea":"Prostor za lepljenje","pasteMsg":"Nalepite sadržaj u sledeći prostor i pritisnite taster OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Blok citat"},"basicstyles":{"bold":"Podebljano","italic":"Kurziv","strike":"Precrtano","subscript":"Indeks","superscript":"Stepen","underline":"Podvučeno"},"about":{"copy":"Copyright &copy; $1. Sva prava zadržana.","dlgTitle":"O CKEditor 4","moreInfo":"Za informacije o licenci posetite našu web stranicu:"},"editor":"Bogati uređivač teksta","editorPanel":"Bogati uređivač panel","common":{"editorHelp":"Za pomoć pritisnite ALT 0","browseServer":"Pretraži na serveru","url":"URL","protocol":"Protokol","upload":"Pošalji","uploadSubmit":"Pošalji na server","image":"Slika","form":"Formular","checkbox":"Polje za potvrdu","radio":"Radio-dugme","textField":"Tekstualno polje","textarea":"Zona teksta","hiddenField":"Skriveno polje","button":"Dugme","select":"Padajuća lista","imageButton":"Dugme sa slikom","notSet":"<nije postavljeno> ","id":"Id","name":"Naziv","langDir":"Smer pisanja","langDirLtr":"S leva na desno (LTR)","langDirRtl":"S desna na levo (RTL)","langCode":"Kôd jezika","longDescr":"Detaljan opis URL","cssClass":"CSS klase","advisoryTitle":"Advisory naslov","cssStyle":"Stil","ok":"OK","cancel":"Otkaži","close":"Zatvori","preview":"Izgled stranice","resize":"Promena veličine","generalTab":"Opšti","advancedTab":"Dalje opcije","validateNumberFailed":"Ova vrednost nije broj.","confirmNewPage":"Nesačuvane promene ovog sadržaja će biti izgubljene. Jeste li sigurni da želita da učitate novu stranu?","confirmCancel":"Neka podešavanja su promenjena.Sigurno želite zatvoriti prozor?","options":"Podešavanja","target":"Cilj","targetNew":"Novi prozor (_blank)","targetTop":"Prozor na vrhu stranice(_top)","targetSelf":"Isti prozor (_self)","targetParent":"Matični prozor (_parent)","langDirLTR":"S leva na desno (LTR)","langDirRTL":"S desna na levo (RTL)","styles":"Stil","cssClasses":"CSS klase","width":"Širina","height":"Visina","align":"Ravnanje","left":"Levo","right":"Desno","center":"Sredina","justify":"Obostrano ravnanje","alignLeft":"Levo ravnanje","alignRight":"Desno ravnanje","alignCenter":"Centralno ravnanje","alignTop":"Vrh","alignMiddle":"Sredina","alignBottom":"Dole","alignNone":"Ništa","invalidValue":"Nevažeća vrednost.","invalidHeight":"U polje visina mogu se upisati samo brojevi.","invalidWidth":"U polje širina mogu se upisati samo brojevi.","invalidLength":"U \"%1\" polju data vrednos treba da bude pozitivan broj, sa validnom mernom jedinicom ili bez (%2).","invalidCssLength":"Za \"%1\" data vrednost mora biti pozitivan broj, moguće označiti sa validnim CSS vrednosću (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Za \"%1\" data vrednost mora biti potitivan broj, moguće označiti sa validnim HTML vrednošću (px or %).","invalidInlineStyle":"Vrednost u inline styleu mora da sadrži barem jedan rekord u formatu \"name : value\", razdeljeni sa tačkazapetom.","cssLengthTooltip":"Odredite broj u pixeima ili u validnim CSS vrednostima (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Taster za prečicu","optionDefault":"Оsnovni"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/sr.js b/core/assets/vendor/ckeditor/lang/sr.js
index 189067199da3..c0733865ad25 100644
--- a/core/assets/vendor/ckeditor/lang/sr.js
+++ b/core/assets/vendor/ckeditor/lang/sr.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['sr']={"widget":{"move":"Кликните и повуците да би померали","label":"%1 модул"},"undo":{"redo":"Понови ","undo":"Врати"},"toolbar":{"toolbarCollapse":"Затвори алатну траку","toolbarExpand":"Отвори алатну траку","toolbarGroups":{"document":"Документ","clipboard":"Clipboard/Врати","editing":"Уреди","forms":"Обрасци","basicstyles":"Основни стилови","paragraph":"Пасус","links":"Линкови","insert":"Додај","styles":"Стилови","colors":"Боје","tools":"Алатке"},"toolbars":"Уређивач алатне траке"},"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":"Kолона","deleteTable":"Обриши таблу","headers":"Поглавља","headersBoth":"Оба","headersColumn":"Прва колона","headersNone":"Нема","headersRow":"Први ред","heightUnit":"Јединица висине","invalidBorder":"Величина ивице треба да буде цифра.","invalidCellPadding":"Пуњење ћелије треба да буде позитивна цифра.","invalidCellSpacing":"Размак ћелије треба да буде позитивна цифра.","invalidCols":"Број колона треба да буде цифра већа од 0.","invalidHeight":"Висина табеле треба да буде цифра.","invalidRows":"Број реда треба да буде цифра већа од 0.","invalidWidth":"Ширина табеле треба да буде цифра.","menu":"Карактеристике табеле","row":{"menu":"Ред","insertBefore":"Убаци изнад","insertAfter":"Убаци испод","deleteRow":"Обриши редове"},"rows":"Редови","summary":"Oпис","title":"Карактеристике табеле","toolbar":"Табела","widthPc":"процената","widthPx":"пиксела","widthUnit":"јединица ширине"},"stylescombo":{"label":"Стил","panelTitle":"Стилови форматирања","panelTitle1":"Блок стилови","panelTitle2":"Инлине стилови","panelTitle3":"Стилови објекта"},"specialchar":{"options":"Опције специјалног карактера","title":"Одаберите специјални карактер","toolbar":"Унеси специјални карактер"},"sourcedialog":{"toolbar":"Изворни код","title":"Изворни код"},"sourcearea":{"toolbar":"Изворни код"},"showblocks":{"toolbar":"Прикажи блокове"},"removeformat":{"toolbar":"Уклони форматирање"},"pastetext":{"button":"Залепи као неформиран текст","pasteNotification":"Притисните% 1 да бисте налепили. Претраживач не подржава лепљење помоћу тастера на траци са алаткама или из менија.","title":"Залепи као неформиран текст"},"pastefromword":{"confirmCleanup":"Уметнути текст је копиран из Word-а.  Желите га очитити? ","error":"Због интерне грешке текст није очишћен.","title":"Залепи из Worda","toolbar":"Залепи из Worda"},"notification":{"closed":"Обавештење затворено"},"maximize":{"maximize":"Максимална величина","minimize":"Минимлна величина"},"magicline":{"title":"Уметните пасус овде."},"list":{"bulletedlist":"Набрајање","numberedlist":"Нумерисање"},"language":{"button":"Подеси језик","remove":"Одстрани језик"},"indent":{"indent":"Увећај леву маргину","outdent":"Смањи маргину"},"image2":{"alt":"Алтернативни текст","btnUpload":"Пошаљи на сервер","captioned":"Слика са натписом","captionPlaceholder":"Натпис","infoTab":"Основне карактеристике","lockRatio":"Задржи однос","menu":"Особине слика","pathName":"Слика","pathNameCaption":"Натпис","resetSize":"Оригинална величина","resizer":"Кликните и повуците да би сте променили величину","title":"Карактеристике слике","uploadTab":"Постави","urlMissing":"Недостаје УРЛ слике.","altMissing":"Недостаје алтернативни текст."},"horizontalrule":{"toolbar":"Унеси хоризонталну линију"},"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":"Форматирано"},"filetools":{"loadError":"Дошло је до грешке при читању датотеке.","networkError":"Током постављања датотеке дошло је до мрежне грешке.","httpError404":"Током постављања датотеке дошло је до ХТТП грешке (404: Датотека није пронађена).","httpError403":"Током постављања датотеке дошло је до ХТТП грешке (403: Забрањена).","httpError":"Током постављања датотеке дошло је до ХТТП грешке (статус грешке: %1).","noUrlError":"УРЛ адреса за постављање није наведена.","responseError":"Неисправан одговор сервера."},"elementspath":{"eleLabel":"Пут до елемената","eleTitle":"%1 eлемент"},"contextmenu":{"options":"Опције менија"},"clipboard":{"copy":"Копирај","copyError":"Сигурносна подешавања Вашег претраживача не дозвољавају операције аутоматског копирања текста. Молимо Вас да користите пречицу са тастатуре (Ctrl/Cmd+C).","cut":"Исеци","cutError":"Сигурносна подешавања Вашег претраживача не дозвољавају операције аутоматског исецања текста. Молимо Вас да користите пречицу са тастатуре (Ctrl/Cmd+X).","paste":"Залепи","pasteNotification":"Притисните тастер %1 за лепљење. Ваш ретраживач не дозвољаба лепљење из алатне траке или мениа.","pasteArea":"Залепи зону","pasteMsg":"Налепите садржај у следећи простор и притисните тастер OK."},"blockquote":{"toolbar":"Блок цитат"},"basicstyles":{"bold":"Подебљано","italic":"Курзив","strike":"Прецртано","subscript":"Индекс","superscript":"Степен","underline":"Подвучено"},"about":{"copy":"Copyright &copy; $1. Сва права задржана.","dlgTitle":"О CKEditor 4","moreInfo":"За информације о лиценци посетите нашу веб страницу:"},"editor":"ХТМЛ уређивач текста","editorPanel":"ХТМЛ уређивач панел","common":{"editorHelp":"За помоћ притисните АЛТ 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":"Kôд језика","longDescr":"Пун опис УРЛ","cssClass":"ЦСС класе","advisoryTitle":"Advisory наслов","cssStyle":"Стил","ok":"OK","cancel":"Oткажи","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":"Равнање","left":"Лево","right":"Десно","center":"Средина","justify":"Обострано равнање","alignLeft":"Лево равнање","alignRight":"Десно равнање","alignCenter":"Централно равнанје","alignTop":"Врх","alignMiddle":"Средина","alignBottom":"Доле","alignNone":"Ништа","invalidValue":"Неважећа вредност.","invalidHeight":"У поље висина могу се уписати само бројеви.","invalidWidth":"У поље ширина могу се уписати само бројеви.","invalidLength":"У \"%1\" полју дата вредност треба да будепозитиван број са валидном мерном јединицом или без ње (%2).","invalidCssLength":"За \"%1\" дата вредност мора бити позитиван број, могуће означити са валидним ЦСС вредошћу (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Зa \"%1\" дата вредност мора бити позитиван број, могуће означити са валидним ХТМЛ вредношћу (px or %).","invalidInlineStyle":"Вреднодст у инлине стилу мора да садржи барем један рекорд у формату \"name : value\", раздељени са тачказапетом.","cssLengthTooltip":"Одредите број у пикселима или у валидним ЦСС вредностима (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Tастер за пречицу","optionDefault":"Основни"}};
\ No newline at end of file
+CKEDITOR.lang['sr']={"widget":{"move":"Кликните и повуците да би померали","label":"%1 модул"},"undo":{"redo":"Понови ","undo":"Врати"},"toolbar":{"toolbarCollapse":"Затвори алатну траку","toolbarExpand":"Отвори алатну траку","toolbarGroups":{"document":"Документ","clipboard":"Clipboard/Врати","editing":"Уреди","forms":"Обрасци","basicstyles":"Основни стилови","paragraph":"Пасус","links":"Линкови","insert":"Додај","styles":"Стилови","colors":"Боје","tools":"Алатке"},"toolbars":"Уређивач алатне траке"},"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":"Kолона","deleteTable":"Обриши таблу","headers":"Поглавља","headersBoth":"Оба","headersColumn":"Прва колона","headersNone":"Нема","headersRow":"Први ред","heightUnit":"Јединица висине","invalidBorder":"Величина ивице треба да буде цифра.","invalidCellPadding":"Пуњење ћелије треба да буде позитивна цифра.","invalidCellSpacing":"Размак ћелије треба да буде позитивна цифра.","invalidCols":"Број колона треба да буде цифра већа од 0.","invalidHeight":"Висина табеле треба да буде цифра.","invalidRows":"Број реда треба да буде цифра већа од 0.","invalidWidth":"Ширина табеле треба да буде цифра.","menu":"Карактеристике табеле","row":{"menu":"Ред","insertBefore":"Убаци изнад","insertAfter":"Убаци испод","deleteRow":"Обриши редове"},"rows":"Редови","summary":"Oпис","title":"Карактеристике табеле","toolbar":"Табела","widthPc":"процената","widthPx":"пиксела","widthUnit":"јединица ширине"},"stylescombo":{"label":"Стил","panelTitle":"Стилови форматирања","panelTitle1":"Блок стилови","panelTitle2":"Инлине стилови","panelTitle3":"Стилови објекта"},"specialchar":{"options":"Опције специјалног карактера","title":"Одаберите специјални карактер","toolbar":"Унеси специјални карактер"},"sourcedialog":{"toolbar":"Изворни код","title":"Изворни код"},"sourcearea":{"toolbar":"Изворни код"},"showblocks":{"toolbar":"Прикажи блокове"},"removeformat":{"toolbar":"Уклони форматирање"},"pastetext":{"button":"Залепи као неформиран текст","pasteNotification":"Притисните% 1 да бисте налепили. Претраживач не подржава лепљење помоћу тастера на траци са алаткама или из менија.","title":"Залепи као неформиран текст"},"pastefromword":{"confirmCleanup":"Уметнути текст је копиран из Word-а.  Желите га очитити? ","error":"Због интерне грешке текст није очишћен.","title":"Залепи из Worda","toolbar":"Залепи из Worda"},"notification":{"closed":"Обавештење затворено"},"maximize":{"maximize":"Максимална величина","minimize":"Минимлна величина"},"magicline":{"title":"Уметните пасус овде."},"list":{"bulletedlist":"Набрајање","numberedlist":"Нумерисање"},"language":{"button":"Подеси језик","remove":"Одстрани језик"},"indent":{"indent":"Увећај леву маргину","outdent":"Смањи маргину"},"image2":{"alt":"Алтернативни текст","btnUpload":"Пошаљи на сервер","captioned":"Слика са натписом","captionPlaceholder":"Натпис","infoTab":"Основне карактеристике","lockRatio":"Задржи однос","menu":"Особине слика","pathName":"Слика","pathNameCaption":"Натпис","resetSize":"Оригинална величина","resizer":"Кликните и повуците да би сте променили величину","title":"Карактеристике слике","uploadTab":"Постави","urlMissing":"Недостаје УРЛ слике.","altMissing":"Недостаје алтернативни текст."},"horizontalrule":{"toolbar":"Унеси хоризонталну линију"},"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":"Форматирано"},"filetools":{"loadError":"Дошло је до грешке при читању датотеке.","networkError":"Током постављања датотеке дошло је до мрежне грешке.","httpError404":"Током постављања датотеке дошло је до ХТТП грешке (404: Датотека није пронађена).","httpError403":"Током постављања датотеке дошло је до ХТТП грешке (403: Забрањена).","httpError":"Током постављања датотеке дошло је до ХТТП грешке (статус грешке: %1).","noUrlError":"УРЛ адреса за постављање није наведена.","responseError":"Неисправан одговор сервера."},"elementspath":{"eleLabel":"Пут до елемената","eleTitle":"%1 eлемент"},"contextmenu":{"options":"Опције менија"},"clipboard":{"copy":"Копирај","copyError":"Сигурносна подешавања Вашег претраживача не дозвољавају операције аутоматског копирања текста. Молимо Вас да користите пречицу са тастатуре (Ctrl/Cmd+C).","cut":"Исеци","cutError":"Сигурносна подешавања Вашег претраживача не дозвољавају операције аутоматског исецања текста. Молимо Вас да користите пречицу са тастатуре (Ctrl/Cmd+X).","paste":"Залепи","pasteNotification":"Притисните тастер %1 за лепљење. Ваш ретраживач не дозвољаба лепљење из алатне траке или мениа.","pasteArea":"Залепи зону","pasteMsg":"Налепите садржај у следећи простор и притисните тастер OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Блок цитат"},"basicstyles":{"bold":"Подебљано","italic":"Курзив","strike":"Прецртано","subscript":"Индекс","superscript":"Степен","underline":"Подвучено"},"about":{"copy":"Copyright &copy; $1. Сва права задржана.","dlgTitle":"О CKEditor 4","moreInfo":"За информације о лиценци посетите нашу веб страницу:"},"editor":"ХТМЛ уређивач текста","editorPanel":"ХТМЛ уређивач панел","common":{"editorHelp":"За помоћ притисните АЛТ 0","browseServer":"Претражи на серверу","url":"УРЛ","protocol":"Протокол","upload":"Пошаљи","uploadSubmit":"Пошаљи на сервер","image":"Слика","form":"Формулар","checkbox":"Поље за потврду","radio":"Радио-дугме","textField":"Текстуално поље","textarea":"Зона текста","hiddenField":"Скривено поље","button":"Дугме","select":"Падајућа листа","imageButton":"Дугме са сликом","notSet":"<није постављено>","id":"Ид","name":"Назив","langDir":"Смер писања","langDirLtr":"С лева на десно (LTR)","langDirRtl":"С десна на лево (RTL)","langCode":"Kôд језика","longDescr":"Пун опис УРЛ","cssClass":"ЦСС класе","advisoryTitle":"Advisory наслов","cssStyle":"Стил","ok":"OK","cancel":"Oткажи","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":"Равнање","left":"Лево","right":"Десно","center":"Средина","justify":"Обострано равнање","alignLeft":"Лево равнање","alignRight":"Десно равнање","alignCenter":"Централно равнанје","alignTop":"Врх","alignMiddle":"Средина","alignBottom":"Доле","alignNone":"Ништа","invalidValue":"Неважећа вредност.","invalidHeight":"У поље висина могу се уписати само бројеви.","invalidWidth":"У поље ширина могу се уписати само бројеви.","invalidLength":"У \"%1\" полју дата вредност треба да будепозитиван број са валидном мерном јединицом или без ње (%2).","invalidCssLength":"За \"%1\" дата вредност мора бити позитиван број, могуће означити са валидним ЦСС вредошћу (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Зa \"%1\" дата вредност мора бити позитиван број, могуће означити са валидним ХТМЛ вредношћу (px or %).","invalidInlineStyle":"Вреднодст у инлине стилу мора да садржи барем један рекорд у формату \"name : value\", раздељени са тачказапетом.","cssLengthTooltip":"Одредите број у пикселима или у валидним ЦСС вредностима (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Tастер за пречицу","optionDefault":"Основни"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/sv.js b/core/assets/vendor/ckeditor/lang/sv.js
index 4f437ba94109..6f1533ff662d 100644
--- a/core/assets/vendor/ckeditor/lang/sv.js
+++ b/core/assets/vendor/ckeditor/lang/sv.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['sv']={"widget":{"move":"Klicka och drag för att flytta","label":"%1-widget"},"undo":{"redo":"Gör om","undo":"Ångra"},"toolbar":{"toolbarCollapse":"Dölj verktygsfält","toolbarExpand":"Visa verktygsfält","toolbarGroups":{"document":"Dokument","clipboard":"Urklipp/ångra","editing":"Redigering","forms":"Formulär","basicstyles":"Basstilar","paragraph":"Paragraf","links":"Länkar","insert":"Infoga","styles":"Stilar","colors":"Färger","tools":"Verktyg"},"toolbars":"Editorns verktygsfält"},"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","heightUnit":"Enhetshöjd","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"},"stylescombo":{"label":"Stilar","panelTitle":"Formateringsstilar","panelTitle1":"Blockstilar","panelTitle2":"Inbäddade stilar","panelTitle3":"Objektstilar"},"specialchar":{"options":"Alternativ för utökade tecken","title":"Välj utökat tecken","toolbar":"Klistra in utökat tecken"},"sourcedialog":{"toolbar":"Källa","title":"Källa"},"sourcearea":{"toolbar":"Källa"},"showblocks":{"toolbar":"Visa block"},"removeformat":{"toolbar":"Radera formatering"},"pastetext":{"button":"Klistra in som vanlig text","pasteNotification":"Tryck på %1 för att klistra in. Din webbläsare stödjer inte inklistring via verktygsfältet eller snabbmenyn.","title":"Klistra in som vanlig text"},"pastefromword":{"confirmCleanup":"Texten du vill klistra in verkar vara kopierad från Word. Vill du rensa den innan du klistrar in den?","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"},"notification":{"closed":"Notifiering stängd."},"maximize":{"maximize":"Maximera","minimize":"Minimera"},"magicline":{"title":"Infoga paragraf här"},"list":{"bulletedlist":"Infoga/ta bort punktlista","numberedlist":"Infoga/ta bort numrerad lista"},"language":{"button":"Sätt språk","remove":"Ta bort språk"},"indent":{"indent":"Öka indrag","outdent":"Minska indrag"},"image2":{"alt":"Alternativ text","btnUpload":"Skicka till server","captioned":"Rubricerad bild","captionPlaceholder":"Bildtext","infoTab":"Bildinformation","lockRatio":"Lås höjd/bredd förhållanden","menu":"Bildegenskaper","pathName":"bild","pathNameCaption":"rubrik","resetSize":"Återställ storlek","resizer":"Klicka och drag för att ändra storlek","title":"Bildegenskaper","uploadTab":"Ladda upp","urlMissing":"Bildkällans URL saknas.","altMissing":"Alternativ text saknas"},"horizontalrule":{"toolbar":"Infoga horisontal linje"},"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"},"filetools":{"loadError":"Fel uppstod vid filläsning","networkError":"Nätverksfel uppstod vid filuppladdning.","httpError404":"HTTP-fel uppstod vid filuppladdning (404: Fil hittades inte).","httpError403":"HTTP-fel uppstod vid filuppladdning (403: Förbjuden).","httpError":"HTTP-fel uppstod vid filuppladdning (felstatus: %1).","noUrlError":"URL för uppladdning inte definierad.","responseError":"Felaktigt serversvar."},"elementspath":{"eleLabel":"Elementets sökväg","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Kopiera","copyError":"Säkerhetsinställningar i din webbläsare tillåter inte åtgärden kopiera. Använd (Ctrl/Cmd+C) istället.","cut":"Klipp ut","cutError":"Säkerhetsinställningar i din webbläsare tillåter inte åtgärden klipp ut. Använd (Ctrl/Cmd+X) istället.","paste":"Klistra in","pasteNotification":"Tryck på %1 för att klistra in. Din webbläsare stödjer inte inklistring via verktygsfältet eller snabbmenyn.","pasteArea":"Inklistringsområde","pasteMsg":"Klistra in ditt innehåll i området nedan och tryck på OK."},"blockquote":{"toolbar":"Blockcitat"},"basicstyles":{"bold":"Fet","italic":"Kursiv","strike":"Genomstruken","subscript":"Nedsänkta tecken","superscript":"Upphöjda tecken","underline":"Understruken"},"about":{"copy":"Copyright &copy; $1. Alla rättigheter reserverade.","dlgTitle":"Om CKEditor 4","moreInfo":"För information om licensiering besök vår hemsida:"},"editor":"Rich Text-editor","editorPanel":"Panel till 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 alternativen har ändrats. Är du säker på att du vill 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","left":"Vänster","right":"Höger","center":"Centrerad","justify":"Justera till marginaler","alignLeft":"Vänsterjustera","alignRight":"Högerjustera","alignCenter":"Centrera","alignTop":"Överkant","alignMiddle":"Mitten","alignBottom":"Nederkant","alignNone":"Ingen","invalidValue":"Felaktigt värde.","invalidHeight":"Höjd måste vara ett nummer.","invalidWidth":"Bredd måste vara ett nummer.","invalidLength":"Värdet för fältet \"%1\" måste vara ett positivt nummer med eller utan en giltig mätenhet (%2).","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":"Vä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>","keyboard":{"8":"Backsteg","13":"Retur","16":"Skift","17":"Ctrl","18":"Alt","32":"Mellanslag","35":"Slut","36":"Hem","46":"Radera","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Kommando"},"keyboardShortcut":"Kortkommando","optionDefault":"Standard"}};
\ No newline at end of file
+CKEDITOR.lang['sv']={"widget":{"move":"Klicka och drag för att flytta","label":"%1-widget"},"undo":{"redo":"Gör om","undo":"Ångra"},"toolbar":{"toolbarCollapse":"Dölj verktygsfält","toolbarExpand":"Visa verktygsfält","toolbarGroups":{"document":"Dokument","clipboard":"Urklipp/ångra","editing":"Redigering","forms":"Formulär","basicstyles":"Basstilar","paragraph":"Paragraf","links":"Länkar","insert":"Infoga","styles":"Stilar","colors":"Färger","tools":"Verktyg"},"toolbars":"Editorns verktygsfält"},"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","heightUnit":"Enhetshöjd","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"},"stylescombo":{"label":"Stilar","panelTitle":"Formateringsstilar","panelTitle1":"Blockstilar","panelTitle2":"Inbäddade stilar","panelTitle3":"Objektstilar"},"specialchar":{"options":"Alternativ för utökade tecken","title":"Välj utökat tecken","toolbar":"Klistra in utökat tecken"},"sourcedialog":{"toolbar":"Källa","title":"Källa"},"sourcearea":{"toolbar":"Källa"},"showblocks":{"toolbar":"Visa block"},"removeformat":{"toolbar":"Radera formatering"},"pastetext":{"button":"Klistra in som vanlig text","pasteNotification":"Tryck på %1 för att klistra in. Din webbläsare stödjer inte inklistring via verktygsfältet eller snabbmenyn.","title":"Klistra in som vanlig text"},"pastefromword":{"confirmCleanup":"Texten du vill klistra in verkar vara kopierad från Word. Vill du rensa den innan du klistrar in den?","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"},"notification":{"closed":"Notifiering stängd."},"maximize":{"maximize":"Maximera","minimize":"Minimera"},"magicline":{"title":"Infoga paragraf här"},"list":{"bulletedlist":"Infoga/ta bort punktlista","numberedlist":"Infoga/ta bort numrerad lista"},"language":{"button":"Sätt språk","remove":"Ta bort språk"},"indent":{"indent":"Öka indrag","outdent":"Minska indrag"},"image2":{"alt":"Alternativ text","btnUpload":"Skicka till server","captioned":"Rubricerad bild","captionPlaceholder":"Bildtext","infoTab":"Bildinformation","lockRatio":"Lås höjd/bredd förhållanden","menu":"Bildegenskaper","pathName":"bild","pathNameCaption":"rubrik","resetSize":"Återställ storlek","resizer":"Klicka och drag för att ändra storlek","title":"Bildegenskaper","uploadTab":"Ladda upp","urlMissing":"Bildkällans URL saknas.","altMissing":"Alternativ text saknas"},"horizontalrule":{"toolbar":"Infoga horisontal linje"},"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"},"filetools":{"loadError":"Fel uppstod vid filläsning","networkError":"Nätverksfel uppstod vid filuppladdning.","httpError404":"HTTP-fel uppstod vid filuppladdning (404: Fil hittades inte).","httpError403":"HTTP-fel uppstod vid filuppladdning (403: Förbjuden).","httpError":"HTTP-fel uppstod vid filuppladdning (felstatus: %1).","noUrlError":"URL för uppladdning inte definierad.","responseError":"Felaktigt serversvar."},"elementspath":{"eleLabel":"Elementets sökväg","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"Kopiera","copyError":"Säkerhetsinställningar i din webbläsare tillåter inte åtgärden kopiera. Använd (Ctrl/Cmd+C) istället.","cut":"Klipp ut","cutError":"Säkerhetsinställningar i din webbläsare tillåter inte åtgärden klipp ut. Använd (Ctrl/Cmd+X) istället.","paste":"Klistra in","pasteNotification":"Tryck på %1 för att klistra in. Din webbläsare stödjer inte inklistring via verktygsfältet eller snabbmenyn.","pasteArea":"Inklistringsområde","pasteMsg":"Klistra in ditt innehåll i området nedan och tryck på OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Blockcitat"},"basicstyles":{"bold":"Fet","italic":"Kursiv","strike":"Genomstruken","subscript":"Nedsänkta tecken","superscript":"Upphöjda tecken","underline":"Understruken"},"about":{"copy":"Copyright &copy; $1. Alla rättigheter reserverade.","dlgTitle":"Om CKEditor 4","moreInfo":"För information om licensiering besök vår hemsida:"},"editor":"Rich Text-editor","editorPanel":"Panel till 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","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 alternativen har ändrats. Är du säker på att du vill 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","left":"Vänster","right":"Höger","center":"Centrerad","justify":"Justera till marginaler","alignLeft":"Vänsterjustera","alignRight":"Högerjustera","alignCenter":"Centrera","alignTop":"Överkant","alignMiddle":"Mitten","alignBottom":"Nederkant","alignNone":"Ingen","invalidValue":"Felaktigt värde.","invalidHeight":"Höjd måste vara ett nummer.","invalidWidth":"Bredd måste vara ett nummer.","invalidLength":"Värdet för fältet \"%1\" måste vara ett positivt nummer med eller utan en giltig mätenhet (%2).","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":"Vä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>","keyboard":{"8":"Backsteg","13":"Retur","16":"Skift","17":"Ctrl","18":"Alt","32":"Mellanslag","35":"Slut","36":"Hem","46":"Radera","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Kommando"},"keyboardShortcut":"Kortkommando","optionDefault":"Standard"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/th.js b/core/assets/vendor/ckeditor/lang/th.js
index a8cbd86ea0ea..79acc5fbc8ca 100644
--- a/core/assets/vendor/ckeditor/lang/th.js
+++ b/core/assets/vendor/ckeditor/lang/th.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['th']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"ทำซ้ำคำสั่ง","undo":"ยกเลิกคำสั่ง"},"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":"แถบเครื่องมือช่วยพิมพ์ข้อความ"},"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":"ส่วนหัว","headersBoth":"ทั้งสองอย่าง","headersColumn":"คอลัมน์แรก","headersNone":"None","headersRow":"แถวแรก","heightUnit":"height unit","invalidBorder":"ขนาดเส้นกรอบต้องเป็นจำนวนตัวเลข","invalidCellPadding":"ช่องว่างภายในเซลล์ต้องเลขจำนวนบวก","invalidCellSpacing":"ช่องว่างภายในเซลล์ต้องเป็นเลขจำนวนบวก","invalidCols":"จำนวนคอลัมน์ต้องเป็นจำนวนมากกว่า 0","invalidHeight":"ส่วนสูงของตารางต้องเป็นตัวเลข","invalidRows":"จำนวนของแถวต้องเป็นจำนวนมากกว่า 0","invalidWidth":"ความกว้างตารางต้องเป็นตัวเลข","menu":"คุณสมบัติของ ตาราง","row":{"menu":"แถว","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"ลบแถว"},"rows":"แถว","summary":"สรุปความ","title":"คุณสมบัติของ ตาราง","toolbar":"ตาราง","widthPc":"เปอร์เซ็น","widthPx":"จุดสี","widthUnit":"หน่วยความกว้าง"},"stylescombo":{"label":"ลักษณะ","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"แทรกตัวอักษรพิเศษ","toolbar":"แทรกตัวอักษรพิเศษ"},"sourcedialog":{"toolbar":"ดูรหัส HTML","title":"ดูรหัส HTML"},"sourcearea":{"toolbar":"ดูรหัส HTML"},"showblocks":{"toolbar":"แสดงบล็อคข้อมูล"},"removeformat":{"toolbar":"ล้างรูปแบบ"},"pastetext":{"button":"วางแบบตัวอักษรธรรมดา","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"วางแบบตัวอักษรธรรมดา"},"pastefromword":{"confirmCleanup":"ข้อความที่คุณต้องการวางลงไปเป็นข้อความที่คัดลอกมาจากโปรแกรมไมโครซอฟท์เวิร์ด คุณต้องการล้างค่าข้อความดังกล่าวก่อนวางลงไปหรือไม่?","error":"ไม่สามารถล้างข้อมูลที่ต้องการวางได้เนื่องจากเกิดข้อผิดพลาดภายในระบบ","title":"วางสำเนาจากตัวอักษรเวิร์ด","toolbar":"วางสำเนาจากตัวอักษรเวิร์ด"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"ขยายใหญ่","minimize":"ย่อขนาด"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"ลำดับรายการแบบสัญลักษณ์","numberedlist":"ลำดับรายการแบบตัวเลข"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"เพิ่มระยะย่อหน้า","outdent":"ลดระยะย่อหน้า"},"image2":{"alt":"คำประกอบรูปภาพ","btnUpload":"อัพโหลดไฟล์ไปเก็บไว้ที่เครื่องแม่ข่าย (เซิร์ฟเวอร์)","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"ข้อมูลของรูปภาพ","lockRatio":"กำหนดอัตราส่วน กว้าง-สูง แบบคงที่","menu":"คุณสมบัติของ รูปภาพ","pathName":"image","pathNameCaption":"caption","resetSize":"กำหนดรูปเท่าขนาดจริง","resizer":"Click and drag to resize","title":"คุณสมบัติของ รูปภาพ","uploadTab":"อัพโหลดไฟล์","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"แทรกเส้นคั่นบรรทัด"},"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"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"สำเนา","copyError":"ไม่สามารถสำเนาข้อความที่เลือกไว้ได้เนื่องจากการกำหนดค่าระดับความปลอดภัย. กรุณาใช้ปุ่มลัดเพื่อวางข้อความแทน (กดปุ่ม Ctrl/Cmd และตัว C พร้อมกัน).","cut":"ตัด","cutError":"ไม่สามารถตัดข้อความที่เลือกไว้ได้เนื่องจากการกำหนดค่าระดับความปลอดภัย. กรุณาใช้ปุ่มลัดเพื่อวางข้อความแทน (กดปุ่ม Ctrl/Cmd และตัว X พร้อมกัน).","paste":"วาง","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"ตัวหนา","italic":"ตัวเอียง","strike":"ตัวขีดเส้นทับ","subscript":"ตัวห้อย","superscript":"ตัวยก","underline":"ตัวขีดเส้นใต้"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","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":"คลาสของไฟล์กำหนดลักษณะการแสดงผล","advisoryTitle":"คำเกริ่นนำ","cssStyle":"ลักษณะการแสดงผล","ok":"ตกลง","cancel":"ยกเลิก","close":"ปิด","preview":"ดูหน้าเอกสารตัวอย่าง","resize":"ปรับขนาด","generalTab":"ทั่วไป","advancedTab":"ขั้นสูง","validateNumberFailed":"ค่านี้ไม่ใช่ตัวเลข","confirmNewPage":"การเปลี่ยนแปลงใดๆ ในเนื้อหานี้ ที่ไม่ได้ถูกบันทึกไว้ จะสูญหายทั้งหมด คุณแน่ใจว่าจะเรียกหน้าใหม่?","confirmCancel":"ตัวเลือกบางตัวมีการเปลี่ยนแปลง คุณแน่ใจว่าจะปิดกล่องโต้ตอบนี้?","options":"ตัวเลือก","target":"การเปิดหน้าลิงค์","targetNew":"หน้าต่างใหม่ (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"หน้าต่างเดียวกัน (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"จากซ้ายไปขวา (LTR)","langDirRTL":"จากขวามาซ้าย (RTL)","styles":"ลักษณะการแสดงผล","cssClasses":"คลาสของไฟล์กำหนดลักษณะการแสดงผล","width":"ความกว้าง","height":"ความสูง","align":"การจัดวาง","left":"ชิดซ้าย","right":"ชิดขวา","center":"กึ่งกลาง","justify":"நியாயப்படுத்தவும்","alignLeft":"จัดชิดซ้าย","alignRight":"จัดชิดขวา","alignCenter":"Align Center","alignTop":"บนสุด","alignMiddle":"กึ่งกลางแนวตั้ง","alignBottom":"ชิดด้านล่าง","alignNone":"None","invalidValue":"ค่าไม่ถูกต้อง","invalidHeight":"ความสูงต้องเป็นตัวเลข","invalidWidth":"ความกว้างต้องเป็นตัวเลข","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
+CKEDITOR.lang['th']={"widget":{"move":"Click and drag to move","label":"%1 widget"},"undo":{"redo":"ทำซ้ำคำสั่ง","undo":"ยกเลิกคำสั่ง"},"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":"แถบเครื่องมือช่วยพิมพ์ข้อความ"},"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":"ส่วนหัว","headersBoth":"ทั้งสองอย่าง","headersColumn":"คอลัมน์แรก","headersNone":"None","headersRow":"แถวแรก","heightUnit":"height unit","invalidBorder":"ขนาดเส้นกรอบต้องเป็นจำนวนตัวเลข","invalidCellPadding":"ช่องว่างภายในเซลล์ต้องเลขจำนวนบวก","invalidCellSpacing":"ช่องว่างภายในเซลล์ต้องเป็นเลขจำนวนบวก","invalidCols":"จำนวนคอลัมน์ต้องเป็นจำนวนมากกว่า 0","invalidHeight":"ส่วนสูงของตารางต้องเป็นตัวเลข","invalidRows":"จำนวนของแถวต้องเป็นจำนวนมากกว่า 0","invalidWidth":"ความกว้างตารางต้องเป็นตัวเลข","menu":"คุณสมบัติของ ตาราง","row":{"menu":"แถว","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"ลบแถว"},"rows":"แถว","summary":"สรุปความ","title":"คุณสมบัติของ ตาราง","toolbar":"ตาราง","widthPc":"เปอร์เซ็น","widthPx":"จุดสี","widthUnit":"หน่วยความกว้าง"},"stylescombo":{"label":"ลักษณะ","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"specialchar":{"options":"Special Character Options","title":"แทรกตัวอักษรพิเศษ","toolbar":"แทรกตัวอักษรพิเศษ"},"sourcedialog":{"toolbar":"ดูรหัส HTML","title":"ดูรหัส HTML"},"sourcearea":{"toolbar":"ดูรหัส HTML"},"showblocks":{"toolbar":"แสดงบล็อคข้อมูล"},"removeformat":{"toolbar":"ล้างรูปแบบ"},"pastetext":{"button":"วางแบบตัวอักษรธรรมดา","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"วางแบบตัวอักษรธรรมดา"},"pastefromword":{"confirmCleanup":"ข้อความที่คุณต้องการวางลงไปเป็นข้อความที่คัดลอกมาจากโปรแกรมไมโครซอฟท์เวิร์ด คุณต้องการล้างค่าข้อความดังกล่าวก่อนวางลงไปหรือไม่?","error":"ไม่สามารถล้างข้อมูลที่ต้องการวางได้เนื่องจากเกิดข้อผิดพลาดภายในระบบ","title":"วางสำเนาจากตัวอักษรเวิร์ด","toolbar":"วางสำเนาจากตัวอักษรเวิร์ด"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"ขยายใหญ่","minimize":"ย่อขนาด"},"magicline":{"title":"Insert paragraph here"},"list":{"bulletedlist":"ลำดับรายการแบบสัญลักษณ์","numberedlist":"ลำดับรายการแบบตัวเลข"},"language":{"button":"Set language","remove":"Remove language"},"indent":{"indent":"เพิ่มระยะย่อหน้า","outdent":"ลดระยะย่อหน้า"},"image2":{"alt":"คำประกอบรูปภาพ","btnUpload":"อัพโหลดไฟล์ไปเก็บไว้ที่เครื่องแม่ข่าย (เซิร์ฟเวอร์)","captioned":"Captioned image","captionPlaceholder":"Caption","infoTab":"ข้อมูลของรูปภาพ","lockRatio":"กำหนดอัตราส่วน กว้าง-สูง แบบคงที่","menu":"คุณสมบัติของ รูปภาพ","pathName":"image","pathNameCaption":"caption","resetSize":"กำหนดรูปเท่าขนาดจริง","resizer":"Click and drag to resize","title":"คุณสมบัติของ รูปภาพ","uploadTab":"อัพโหลดไฟล์","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"แทรกเส้นคั่นบรรทัด"},"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"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"contextmenu":{"options":"Context Menu Options"},"clipboard":{"copy":"สำเนา","copyError":"ไม่สามารถสำเนาข้อความที่เลือกไว้ได้เนื่องจากการกำหนดค่าระดับความปลอดภัย. กรุณาใช้ปุ่มลัดเพื่อวางข้อความแทน (กดปุ่ม Ctrl/Cmd และตัว C พร้อมกัน).","cut":"ตัด","cutError":"ไม่สามารถตัดข้อความที่เลือกไว้ได้เนื่องจากการกำหนดค่าระดับความปลอดภัย. กรุณาใช้ปุ่มลัดเพื่อวางข้อความแทน (กดปุ่ม Ctrl/Cmd และตัว X พร้อมกัน).","paste":"วาง","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Block Quote"},"basicstyles":{"bold":"ตัวหนา","italic":"ตัวเอียง","strike":"ตัวขีดเส้นทับ","subscript":"ตัวห้อย","superscript":"ตัวยก","underline":"ตัวขีดเส้นใต้"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"กด ALT 0 หากต้องการความช่วยเหลือ","browseServer":"เปิดหน้าต่างจัดการไฟล์อัพโหลด","url":"ที่อยู่อ้างอิง URL","protocol":"โปรโตคอล","upload":"อัพโหลดไฟล์","uploadSubmit":"อัพโหลดไฟล์ไปเก็บไว้ที่เครื่องแม่ข่าย (เซิร์ฟเวอร์)","image":"รูปภาพ","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":"ปิด","preview":"ดูหน้าเอกสารตัวอย่าง","resize":"ปรับขนาด","generalTab":"ทั่วไป","advancedTab":"ขั้นสูง","validateNumberFailed":"ค่านี้ไม่ใช่ตัวเลข","confirmNewPage":"การเปลี่ยนแปลงใดๆ ในเนื้อหานี้ ที่ไม่ได้ถูกบันทึกไว้ จะสูญหายทั้งหมด คุณแน่ใจว่าจะเรียกหน้าใหม่?","confirmCancel":"ตัวเลือกบางตัวมีการเปลี่ยนแปลง คุณแน่ใจว่าจะปิดกล่องโต้ตอบนี้?","options":"ตัวเลือก","target":"การเปิดหน้าลิงค์","targetNew":"หน้าต่างใหม่ (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"หน้าต่างเดียวกัน (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"จากซ้ายไปขวา (LTR)","langDirRTL":"จากขวามาซ้าย (RTL)","styles":"ลักษณะการแสดงผล","cssClasses":"คลาสของไฟล์กำหนดลักษณะการแสดงผล","width":"ความกว้าง","height":"ความสูง","align":"การจัดวาง","left":"ชิดซ้าย","right":"ชิดขวา","center":"กึ่งกลาง","justify":"நியாயப்படுத்தவும்","alignLeft":"จัดชิดซ้าย","alignRight":"จัดชิดขวา","alignCenter":"Align Center","alignTop":"บนสุด","alignMiddle":"กึ่งกลางแนวตั้ง","alignBottom":"ชิดด้านล่าง","alignNone":"None","invalidValue":"ค่าไม่ถูกต้อง","invalidHeight":"ความสูงต้องเป็นตัวเลข","invalidWidth":"ความกว้างต้องเป็นตัวเลข","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/tr.js b/core/assets/vendor/ckeditor/lang/tr.js
index 193cc902d536..87e679a945c8 100644
--- a/core/assets/vendor/ckeditor/lang/tr.js
+++ b/core/assets/vendor/ckeditor/lang/tr.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['tr']={"widget":{"move":"Taşımak için, tıklayın ve sürükleyin","label":"%1 Grafik Beleşeni"},"undo":{"redo":"Tekrarla","undo":"Geri Al"},"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ü"},"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","heightUnit":"yükseklik birimi","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"},"stylescombo":{"label":"Biçem","panelTitle":"Stilleri Düzenliyor","panelTitle1":"Blok Stilleri","panelTitle2":"Inline Stilleri","panelTitle3":"Nesne Stilleri"},"specialchar":{"options":"Özel Karakter Seçenekleri","title":"Özel Karakter Seç","toolbar":"Özel Karakter Ekle"},"sourcedialog":{"toolbar":"Kaynak","title":"Kaynak"},"sourcearea":{"toolbar":"Kaynak"},"showblocks":{"toolbar":"Blokları Göster"},"removeformat":{"toolbar":"Biçimi Kaldır"},"pastetext":{"button":"Düz metin olarak yapıştır","pasteNotification":"%1 tuşuna yapıştırmak için tıklayın. Tarayıcınız, Araç Çubuğu yada İçerik Menüsünü kullanarak yapıştırmayı desteklemiyor.","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"},"notification":{"closed":"Uyarılar kapatıldı."},"maximize":{"maximize":"Büyült","minimize":"Küçült"},"magicline":{"title":"Parağrafı buraya ekle"},"list":{"bulletedlist":"Simgeli Liste","numberedlist":"Numaralı Liste"},"language":{"button":"Dili seç","remove":"Dili kaldır"},"indent":{"indent":"Sekme Arttır","outdent":"Sekme Azalt"},"image2":{"alt":"Alternatif Yazı","btnUpload":"Sunucuya Yolla","captioned":"Başlıklı resim","captionPlaceholder":"Başlık","infoTab":"Resim Bilgisi","lockRatio":"Oranı Kilitle","menu":"Resim Özellikleri","pathName":"Resim","pathNameCaption":"başlık","resetSize":"Boyutu Başa Döndür","resizer":"Boyutlandırmak için, tıklayın ve sürükleyin","title":"Resim Özellikleri","uploadTab":"Karşıya Yükle","urlMissing":"Resmin URL kaynağı bulunamadı.","altMissing":"Alternatif yazı eksik."},"horizontalrule":{"toolbar":"Yatay Satır Ekle"},"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"},"filetools":{"loadError":"Dosya okunurken hata oluştu.","networkError":"Dosya gönderilirken ağ hatası oluştu.","httpError404":"Dosya gönderilirken HTTP hatası oluştu (404: Dosya bulunamadı).","httpError403":"Dosya gönderilirken HTTP hatası oluştu (403: Yasaklı).","httpError":"Dosya gönderilirken HTTP hatası oluştu (hata durumu: %1).","noUrlError":"Gönderilecek URL belirtilmedi.","responseError":"Sunucu cevap veremedi."},"elementspath":{"eleLabel":"Elementlerin yolu","eleTitle":"%1 elementi"},"contextmenu":{"options":"İçerik Menüsü Seçenekleri"},"clipboard":{"copy":"Kopyala","copyError":"Tarayıcı 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":"Tarayıcı 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","pasteNotification":"%1 tuşuna yapıştırmak için tıklayın. Tarayıcınız, Araç Çubuğu yada İçerik Menüsünü kullanarak yapıştırmayı desteklemiyor.","pasteArea":"Yapıştırma Alanı","pasteMsg":"İçeriğinizi alttaki bulunan alana yapıştırın ve TAMAM butonuna tıklayın"},"blockquote":{"toolbar":"Blok Oluştur"},"basicstyles":{"bold":"Kalın","italic":"İtalik","strike":"Üstü Çizgili","subscript":"Alt Simge","superscript":"Üst Simge","underline":"Altı Çizgili"},"about":{"copy":"Copyright &copy; $1. Tüm hakları saklıdır.","dlgTitle":"CKEditor Hakkında","moreInfo":"Lisanslama hakkında daha fazla bilgi almak için lütfen sitemizi ziyaret edin:"},"editor":"Zengin Metin Editörü","editorPanel":"Zengin Metin Editör Paneli","common":{"editorHelp":"Yardım için ALT 0 tuşlarına basın","browseServer":"Sunucuya Gözat","url":"URL","protocol":"Protokol","upload":"Karşıya Yükle","uploadSubmit":"Sunucuya Gönder","image":"Resim","flash":"Flash","form":"Form","checkbox":"Seçim Kutusu","radio":"Seçenek Düğmesi","textField":"Metin Kutusu","textarea":"Metin Alanı","hiddenField":"Gizli Alan","button":"Düğme","select":"Seçme Alanı","imageButton":"Resim Düğmesi","notSet":"<tanımlanmamış>","id":"Kimlik","name":"İsim","langDir":"Dil Yönü","langDirLtr":"Soldan Sağa (LTR)","langDirRtl":"Sağdan Sola (RTL)","langCode":" Dil Kodu","longDescr":"Uzun Açıklamalı URL","cssClass":"Stil Sınıfları","advisoryTitle":"Öneri Başlığı","cssStyle":"Stil","ok":"Tamam","cancel":"İptal","close":"Kapat","preview":"Önizleme","resize":"Yeniden Boyutlandır","generalTab":"Genel","advancedTab":"Gelişmiş","validateNumberFailed":"Bu değer bir sayı değildir.","confirmNewPage":"Bu içerikle ilgili kaydedilmemiş tüm bilgiler kaybolacaktır. Yeni bir sayfa yüklemek istediğinizden emin misiniz?","confirmCancel":"Bazı seçenekleri değiştirdiniz. İletişim penceresini kapatmak istediğinizden emin misiniz?","options":"Seçenekler","target":"Hedef","targetNew":"Yeni Pencere (_blank)","targetTop":"En Üstteki Pencere (_top)","targetSelf":"Aynı Pencere (_self)","targetParent":"Üst Pencere (_parent)","langDirLTR":"Soldan Sağa (LTR)","langDirRTL":"Sağdan Sola (RTL)","styles":"Stil","cssClasses":"Stil Sınıfları","width":"Genişlik","height":"Yükseklik","align":"Hizalama","left":"Sol","right":"Sağ","center":"Ortala","justify":"İki Kenara Yaslanmış","alignLeft":"Sola Dayalı","alignRight":"Sağa Dayalı","alignCenter":"Ortaya Hizala","alignTop":"Üst","alignMiddle":"Orta","alignBottom":"Alt","alignNone":"Hiçbiri","invalidValue":"Geçersiz değer.","invalidHeight":"Yükseklik değeri bir sayı olmalıdır.","invalidWidth":"Genişlik değeri bir sayı olmalıdır.","invalidLength":"\"%1\" alanı için belirtilen değer, geçerli bir ölçü birimi olsun veya olmasın (%2) pozitif bir sayı olmalıdır.","invalidCssLength":"\"%1\" alanı için verilen değer, geçerli bir CSS ölçü birimi (px, %, in, cm, mm, em, ex, pt, veya pc) içeren veya içermeyen pozitif bir sayı olmalıdır.","invalidHtmlLength":"\"%1\" alanı için belirttiğiniz sayı, HTML (px veya %) birimi olsun yada olmasın pozitif bir değeri olmalıdır.","invalidInlineStyle":"Satıriçi stil için verilen değer, \"isim : değer\" biçiminde birbirinden noktalı virgüllerle ayrılan bir veya daha fazla değişkenler grubundan oluşmalıdır.","cssLengthTooltip":"Piksel türünde bir sayı veya geçerli bir CSS ölçü birimi (px, %, in, cm, mm, em, ex, pt veya pc) içeren bir sayı girin.","unavailable":"%1<span class=\"cke_accessibility\">, kullanılamaz</span>","keyboard":{"8":"Silme Tuşu","13":"Giriş Tuşu","16":"Üst Karater Tuşu","17":"Kontrol Tuşu","18":"Alt Tuşu","32":"Boşluk Tuşu","35":"En Sona Tuşu","36":"En Başa Tuşu","46":"Silme Tuşu","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Komut Tuşu"},"keyboardShortcut":"Klavye Kısayolu","optionDefault":"Varsayılan"}};
\ No newline at end of file
+CKEDITOR.lang['tr']={"widget":{"move":"Taşımak için, tıklayın ve sürükleyin","label":"%1 Grafik Beleşeni"},"undo":{"redo":"Tekrarla","undo":"Geri Al"},"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ü"},"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","heightUnit":"yükseklik birimi","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"},"stylescombo":{"label":"Biçem","panelTitle":"Stilleri Düzenliyor","panelTitle1":"Blok Stilleri","panelTitle2":"Inline Stilleri","panelTitle3":"Nesne Stilleri"},"specialchar":{"options":"Özel Karakter Seçenekleri","title":"Özel Karakter Seç","toolbar":"Özel Karakter Ekle"},"sourcedialog":{"toolbar":"Kaynak","title":"Kaynak"},"sourcearea":{"toolbar":"Kaynak"},"showblocks":{"toolbar":"Blokları Göster"},"removeformat":{"toolbar":"Biçimi Kaldır"},"pastetext":{"button":"Düz metin olarak yapıştır","pasteNotification":"%1 tuşuna yapıştırmak için tıklayın. Tarayıcınız, Araç Çubuğu yada İçerik Menüsünü kullanarak yapıştırmayı desteklemiyor.","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"},"notification":{"closed":"Uyarılar kapatıldı."},"maximize":{"maximize":"Büyült","minimize":"Küçült"},"magicline":{"title":"Parağrafı buraya ekle"},"list":{"bulletedlist":"Simgeli Liste","numberedlist":"Numaralı Liste"},"language":{"button":"Dili seç","remove":"Dili kaldır"},"indent":{"indent":"Sekme Arttır","outdent":"Sekme Azalt"},"image2":{"alt":"Alternatif Yazı","btnUpload":"Sunucuya Yolla","captioned":"Başlıklı resim","captionPlaceholder":"Başlık","infoTab":"Resim Bilgisi","lockRatio":"Oranı Kilitle","menu":"Resim Özellikleri","pathName":"Resim","pathNameCaption":"başlık","resetSize":"Boyutu Başa Döndür","resizer":"Boyutlandırmak için, tıklayın ve sürükleyin","title":"Resim Özellikleri","uploadTab":"Karşıya Yükle","urlMissing":"Resmin URL kaynağı bulunamadı.","altMissing":"Alternatif yazı eksik."},"horizontalrule":{"toolbar":"Yatay Satır Ekle"},"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"},"filetools":{"loadError":"Dosya okunurken hata oluştu.","networkError":"Dosya gönderilirken ağ hatası oluştu.","httpError404":"Dosya gönderilirken HTTP hatası oluştu (404: Dosya bulunamadı).","httpError403":"Dosya gönderilirken HTTP hatası oluştu (403: Yasaklı).","httpError":"Dosya gönderilirken HTTP hatası oluştu (hata durumu: %1).","noUrlError":"Gönderilecek URL belirtilmedi.","responseError":"Sunucu cevap veremedi."},"elementspath":{"eleLabel":"Elementlerin yolu","eleTitle":"%1 elementi"},"contextmenu":{"options":"İçerik Menüsü Seçenekleri"},"clipboard":{"copy":"Kopyala","copyError":"Tarayıcı 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":"Tarayıcı 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","pasteNotification":"%1 tuşuna yapıştırmak için tıklayın. Tarayıcınız, Araç Çubuğu yada İçerik Menüsünü kullanarak yapıştırmayı desteklemiyor.","pasteArea":"Yapıştırma Alanı","pasteMsg":"İçeriğinizi alttaki bulunan alana yapıştırın ve TAMAM butonuna tıklayın","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Blok Oluştur"},"basicstyles":{"bold":"Kalın","italic":"İtalik","strike":"Üstü Çizgili","subscript":"Alt Simge","superscript":"Üst Simge","underline":"Altı Çizgili"},"about":{"copy":"Copyright &copy; $1. Tüm hakları saklıdır.","dlgTitle":"CKEditor Hakkında","moreInfo":"Lisanslama hakkında daha fazla bilgi almak için lütfen sitemizi ziyaret edin:"},"editor":"Zengin Metin Editörü","editorPanel":"Zengin Metin Editör Paneli","common":{"editorHelp":"Yardım için ALT 0 tuşlarına basın","browseServer":"Sunucuya Gözat","url":"URL","protocol":"Protokol","upload":"Karşıya Yükle","uploadSubmit":"Sunucuya Gönder","image":"Resim","form":"Form","checkbox":"Seçim Kutusu","radio":"Seçenek Düğmesi","textField":"Metin Kutusu","textarea":"Metin Alanı","hiddenField":"Gizli Alan","button":"Düğme","select":"Seçme Alanı","imageButton":"Resim Düğmesi","notSet":"<tanımlanmamış>","id":"Kimlik","name":"İsim","langDir":"Dil Yönü","langDirLtr":"Soldan Sağa (LTR)","langDirRtl":"Sağdan Sola (RTL)","langCode":" Dil Kodu","longDescr":"Uzun Açıklamalı URL","cssClass":"Stil Sınıfları","advisoryTitle":"Öneri Başlığı","cssStyle":"Stil","ok":"Tamam","cancel":"İptal","close":"Kapat","preview":"Önizleme","resize":"Yeniden Boyutlandır","generalTab":"Genel","advancedTab":"Gelişmiş","validateNumberFailed":"Bu değer bir sayı değildir.","confirmNewPage":"Bu içerikle ilgili kaydedilmemiş tüm bilgiler kaybolacaktır. Yeni bir sayfa yüklemek istediğinizden emin misiniz?","confirmCancel":"Bazı seçenekleri değiştirdiniz. İletişim penceresini kapatmak istediğinizden emin misiniz?","options":"Seçenekler","target":"Hedef","targetNew":"Yeni Pencere (_blank)","targetTop":"En Üstteki Pencere (_top)","targetSelf":"Aynı Pencere (_self)","targetParent":"Üst Pencere (_parent)","langDirLTR":"Soldan Sağa (LTR)","langDirRTL":"Sağdan Sola (RTL)","styles":"Stil","cssClasses":"Stil Sınıfları","width":"Genişlik","height":"Yükseklik","align":"Hizalama","left":"Sol","right":"Sağ","center":"Ortala","justify":"İki Kenara Yaslanmış","alignLeft":"Sola Dayalı","alignRight":"Sağa Dayalı","alignCenter":"Ortaya Hizala","alignTop":"Üst","alignMiddle":"Orta","alignBottom":"Alt","alignNone":"Hiçbiri","invalidValue":"Geçersiz değer.","invalidHeight":"Yükseklik değeri bir sayı olmalıdır.","invalidWidth":"Genişlik değeri bir sayı olmalıdır.","invalidLength":"\"%1\" alanı için belirtilen değer, geçerli bir ölçü birimi olsun veya olmasın (%2) pozitif bir sayı olmalıdır.","invalidCssLength":"\"%1\" alanı için verilen değer, geçerli bir CSS ölçü birimi (px, %, in, cm, mm, em, ex, pt, veya pc) içeren veya içermeyen pozitif bir sayı olmalıdır.","invalidHtmlLength":"\"%1\" alanı için belirttiğiniz sayı, HTML (px veya %) birimi olsun yada olmasın pozitif bir değeri olmalıdır.","invalidInlineStyle":"Satıriçi stil için verilen değer, \"isim : değer\" biçiminde birbirinden noktalı virgüllerle ayrılan bir veya daha fazla değişkenler grubundan oluşmalıdır.","cssLengthTooltip":"Piksel türünde bir sayı veya geçerli bir CSS ölçü birimi (px, %, in, cm, mm, em, ex, pt veya pc) içeren bir sayı girin.","unavailable":"%1<span class=\"cke_accessibility\">, kullanılamaz</span>","keyboard":{"8":"Silme Tuşu","13":"Giriş Tuşu","16":"Üst Karater Tuşu","17":"Kontrol Tuşu","18":"Alt Tuşu","32":"Boşluk Tuşu","35":"En Sona Tuşu","36":"En Başa Tuşu","46":"Silme Tuşu","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Komut Tuşu"},"keyboardShortcut":"Klavye Kısayolu","optionDefault":"Varsayılan"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/tt.js b/core/assets/vendor/ckeditor/lang/tt.js
index daa734694589..13fbd5e97d63 100644
--- a/core/assets/vendor/ckeditor/lang/tt.js
+++ b/core/assets/vendor/ckeditor/lang/tt.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['tt']={"widget":{"move":"Күчереп куер өчен басып шудырыгыз","label":"%1 widget"},"undo":{"redo":"Кабатлау","undo":"Кайтару"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Документ","clipboard":"Алмашу буферы/Кайтару","editing":"Төзәтү","forms":"Формалар","basicstyles":"Төп стильләр","paragraph":"Параграф","links":"Сылталамалар","insert":"Өстәү","styles":"Стильләр","colors":"Төсләр","tools":"Кораллар"},"toolbars":"Editor toolbars"},"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":"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":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Багана","insertBefore":"Сулдан баганалар өстәү","insertAfter":"Уңнан баганалар өстәү","deleteColumn":"Баганаларны бетерү"},"columns":"Баганалар","deleteTable":"Таблицаны бетерү","headers":"Башлыклар","headersBoth":"Икесе дә","headersColumn":"Беренче багана","headersNone":"Һичбер","headersRow":"Беренче юл","heightUnit":"height unit","invalidBorder":"Чик киңлеге сан булырга тиеш.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Күзәнәкләр аралары уңай сан булырга тиеш.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Таблица биеклеге сан булырга тиеш.","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":"киңлек берәмлеге"},"stylescombo":{"label":"Стильләр","panelTitle":"Форматлау стильләре","panelTitle1":"Блоклар стильләре","panelTitle2":"Эчке стильләр","panelTitle3":"Объектлар стильләре"},"specialchar":{"options":"Махсус символ үзлекләре","title":"Махсус символ сайлау","toolbar":"Махсус символ өстәү"},"sourcedialog":{"toolbar":"Чыганак","title":"Чыганак"},"sourcearea":{"toolbar":"Чыганак"},"showblocks":{"toolbar":"Блокларны күрсәтү"},"removeformat":{"toolbar":"Форматлауны бетерү"},"pastetext":{"button":"Форматлаусыз текст өстәү","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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'тан өстәү"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Зурайту","minimize":"Кечерәйтү"},"magicline":{"title":"Бирегә параграф өстәү"},"list":{"bulletedlist":"Маркерлы тезмә өстәү/бетерү","numberedlist":" Номерланган тезмә өстәү/бетерү"},"language":{"button":"Тел сайлау","remove":"Телне бетерү"},"indent":{"indent":"Отступны арттыру","outdent":"Отступны кечерәйтү"},"image2":{"alt":"Альтернатив текст","btnUpload":"Серверга җибәрү","captioned":"Исеме куелган рәсем","captionPlaceholder":"Исем","infoTab":"Рәсем тасвирламасы","lockRatio":"Lock Ratio","menu":"Рәсем үзлекләре","pathName":"рәсем","pathNameCaption":"исем","resetSize":"Баштагы зурлык","resizer":"Күчереп куер өчен басып шудырыгыз","title":"Рәсем үзлекләре","uploadTab":"Йөкләү","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Ятма сызык өстәү"},"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":"Форматлаулы"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 элемент"},"contextmenu":{"options":"Контекст меню үзлекләре"},"clipboard":{"copy":"Күчермәләү","copyError":"Браузерыгызның иминлек үзлекләре автоматик рәвештә күчермәләү үтәүне тыя. Тиз төймәләрне (Ctrl/Cmd+C) кулланыгыз.","cut":"Кисеп алу","cutError":"Браузерыгызның иминлек үзлекләре автоматик рәвештә күчермәләү үтәүне тыя. Тиз төймәләрне (Ctrl/Cmd+C) кулланыгыз.","paste":"Өстәү","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Өстәү мәйданы","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Өземтә блогы"},"basicstyles":{"bold":"Калын","italic":"Курсив","strike":"Сызылган","subscript":"Аскы индекс","superscript":"Өске индекс","underline":"Астына сызылган"},"about":{"copy":"Copyright &copy; $1. Бар хокуклар сакланган","dlgTitle":"CKEditor турында","moreInfo":"For licensing information please visit our web site:"},"editor":"Форматлаулы текст өлкәсе","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Ярдәм өчен ALT 0 басыгыз","browseServer":"Сервер карап чыгу","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":"Стильләр класслары","advisoryTitle":"Киңәш исем","cssStyle":"Стиль","ok":"Тәмам","cancel":"Баш тарту","close":"Чыгу","preview":"Карап алу","resize":"Зурлыкны үзгәртү","generalTab":"Төп","advancedTab":"Киңәйтелгән көйләүләр","validateNumberFailed":"Әлеге кыйммәт сан түгел.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Үзлекләр","target":"Максат","targetNew":"Яңа тәрәзә (_blank)","targetTop":"Өске тәрәзә (_top)","targetSelf":"Шул үк тәрәзә (_self)","targetParent":"Ана тәрәзә (_parent)","langDirLTR":"Сулдан уңга язылыш (LTR)","langDirRTL":"Уңнан сулга язылыш (RTL)","styles":"Стиль","cssClasses":"Стильләр класслары","width":"Киңлек","height":"Биеклек","align":"Тигезләү","left":"Сул якка","right":"Уң якка","center":"Үзәккә","justify":"Киңлеккә карап тигезләү","alignLeft":"Сул як кырыйдан тигезләү","alignRight":"Уң як кырыйдан тигезләү","alignCenter":"Align Center","alignTop":"Өскә","alignMiddle":"Уртага","alignBottom":"Аска","alignNone":"Һичбер","invalidValue":"Дөрес булмаган кыйммәт.","invalidHeight":"Биеклек сан булырга тиеш.","invalidWidth":"Киңлек сан булырга тиеш.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Кайтару","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Бетерү","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
+CKEDITOR.lang['tt']={"widget":{"move":"Күчереп куер өчен басып шудырыгыз","label":"%1 widget"},"undo":{"redo":"Кабатлау","undo":"Кайтару"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Документ","clipboard":"Алмашу буферы/Кайтару","editing":"Төзәтү","forms":"Формалар","basicstyles":"Төп стильләр","paragraph":"Параграф","links":"Сылталамалар","insert":"Өстәү","styles":"Стильләр","colors":"Төсләр","tools":"Кораллар"},"toolbars":"Editor toolbars"},"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":"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":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Багана","insertBefore":"Сулдан баганалар өстәү","insertAfter":"Уңнан баганалар өстәү","deleteColumn":"Баганаларны бетерү"},"columns":"Баганалар","deleteTable":"Таблицаны бетерү","headers":"Башлыклар","headersBoth":"Икесе дә","headersColumn":"Беренче багана","headersNone":"Һичбер","headersRow":"Беренче юл","heightUnit":"height unit","invalidBorder":"Чик киңлеге сан булырга тиеш.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Күзәнәкләр аралары уңай сан булырга тиеш.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Таблица биеклеге сан булырга тиеш.","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":"киңлек берәмлеге"},"stylescombo":{"label":"Стильләр","panelTitle":"Форматлау стильләре","panelTitle1":"Блоклар стильләре","panelTitle2":"Эчке стильләр","panelTitle3":"Объектлар стильләре"},"specialchar":{"options":"Махсус символ үзлекләре","title":"Махсус символ сайлау","toolbar":"Махсус символ өстәү"},"sourcedialog":{"toolbar":"Чыганак","title":"Чыганак"},"sourcearea":{"toolbar":"Чыганак"},"showblocks":{"toolbar":"Блокларны күрсәтү"},"removeformat":{"toolbar":"Форматлауны бетерү"},"pastetext":{"button":"Форматлаусыз текст өстәү","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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'тан өстәү"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Зурайту","minimize":"Кечерәйтү"},"magicline":{"title":"Бирегә параграф өстәү"},"list":{"bulletedlist":"Маркерлы тезмә өстәү/бетерү","numberedlist":" Номерланган тезмә өстәү/бетерү"},"language":{"button":"Тел сайлау","remove":"Телне бетерү"},"indent":{"indent":"Отступны арттыру","outdent":"Отступны кечерәйтү"},"image2":{"alt":"Альтернатив текст","btnUpload":"Серверга җибәрү","captioned":"Исеме куелган рәсем","captionPlaceholder":"Исем","infoTab":"Рәсем тасвирламасы","lockRatio":"Lock Ratio","menu":"Рәсем үзлекләре","pathName":"рәсем","pathNameCaption":"исем","resetSize":"Баштагы зурлык","resizer":"Күчереп куер өчен басып шудырыгыз","title":"Рәсем үзлекләре","uploadTab":"Йөкләү","urlMissing":"Image source URL is missing.","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Ятма сызык өстәү"},"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":"Форматлаулы"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 элемент"},"contextmenu":{"options":"Контекст меню үзлекләре"},"clipboard":{"copy":"Күчермәләү","copyError":"Браузерыгызның иминлек үзлекләре автоматик рәвештә күчермәләү үтәүне тыя. Тиз төймәләрне (Ctrl/Cmd+C) кулланыгыз.","cut":"Кисеп алу","cutError":"Браузерыгызның иминлек үзлекләре автоматик рәвештә күчермәләү үтәүне тыя. Тиз төймәләрне (Ctrl/Cmd+C) кулланыгыз.","paste":"Өстәү","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Өстәү мәйданы","pasteMsg":"Paste your content inside the area below and press OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Өземтә блогы"},"basicstyles":{"bold":"Калын","italic":"Курсив","strike":"Сызылган","subscript":"Аскы индекс","superscript":"Өске индекс","underline":"Астына сызылган"},"about":{"copy":"Copyright &copy; $1. Бар хокуклар сакланган","dlgTitle":"CKEditor турында","moreInfo":"For licensing information please visit our web site:"},"editor":"Форматлаулы текст өлкәсе","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Ярдәм өчен ALT 0 басыгыз","browseServer":"Сервер карап чыгу","url":"Сылталама","protocol":"Протокол","upload":"Йөкләү","uploadSubmit":"Серверга җибәрү","image":"Рәсем","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":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Үзлекләр","target":"Максат","targetNew":"Яңа тәрәзә (_blank)","targetTop":"Өске тәрәзә (_top)","targetSelf":"Шул үк тәрәзә (_self)","targetParent":"Ана тәрәзә (_parent)","langDirLTR":"Сулдан уңга язылыш (LTR)","langDirRTL":"Уңнан сулга язылыш (RTL)","styles":"Стиль","cssClasses":"Стильләр класслары","width":"Киңлек","height":"Биеклек","align":"Тигезләү","left":"Сул якка","right":"Уң якка","center":"Үзәккә","justify":"Киңлеккә карап тигезләү","alignLeft":"Сул як кырыйдан тигезләү","alignRight":"Уң як кырыйдан тигезләү","alignCenter":"Align Center","alignTop":"Өскә","alignMiddle":"Уртага","alignBottom":"Аска","alignNone":"Һичбер","invalidValue":"Дөрес булмаган кыйммәт.","invalidHeight":"Биеклек сан булырга тиеш.","invalidWidth":"Киңлек сан булырга тиеш.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","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>","keyboard":{"8":"Кайтару","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Бетерү","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/ug.js b/core/assets/vendor/ckeditor/lang/ug.js
index 97d3aa45bb82..f0ff94d37e51 100644
--- a/core/assets/vendor/ckeditor/lang/ug.js
+++ b/core/assets/vendor/ckeditor/lang/ug.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['ug']={"widget":{"move":"يۆتكەشتە چېكىپ سۆرەڭ","label":"1% بېزەك"},"undo":{"redo":"قايتىلا ","undo":"يېنىۋال"},"toolbar":{"toolbarCollapse":"قورال بالداقنى قاتلا","toolbarExpand":"قورال بالداقنى ياي","toolbarGroups":{"document":"پۈتۈك","clipboard":"چاپلاش تاختىسى/يېنىۋال","editing":"تەھرىر","forms":"جەدۋەل","basicstyles":"ئاساسىي ئۇسلۇب","paragraph":"ئابزاس","links":"ئۇلانما","insert":"قىستۇر","styles":"ئۇسلۇب","colors":"رەڭ","tools":"قورال"},"toolbars":"قورال بالداق"},"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":"بىرىنچى قۇر","heightUnit":"height unit","invalidBorder":"گىرۋەك توملۇقى چوقۇم سان بولىدۇ","invalidCellPadding":"كاتەكچىگە چوقۇم سان تولدۇرۇلىدۇ","invalidCellSpacing":"كاتەكچە ئارىلىقى چوقۇم سان بولىدۇ","invalidCols":"بەلگىلەنگەن قۇر سانى چوقۇم نۆلدىن چوڭ بولىدۇ","invalidHeight":"جەدۋەل ئېگىزلىكى چوقۇم سان بولىدۇ","invalidRows":"بەلگىلەنگەن ئىستون سانى چوقۇم نۆلدىن چوڭ بولىدۇ","invalidWidth":"جەدۋەل كەڭلىكى چوقۇم سان بولىدۇ","menu":"جەدۋەل خاسلىقى","row":{"menu":"قۇر","insertBefore":"ئۈستىگە قۇر قىستۇر","insertAfter":"ئاستىغا قۇر قىستۇر","deleteRow":"قۇر ئۆچۈر"},"rows":"قۇر سانى","summary":"ئۈزۈندە","title":"جەدۋەل خاسلىقى","toolbar":"جەدۋەل","widthPc":"پىرسەنت","widthPx":"پىكسېل","widthUnit":"كەڭلىك بىرلىكى"},"stylescombo":{"label":"ئۇسلۇب","panelTitle":"ئۇسلۇب","panelTitle1":"بۆلەك دەرىجىسىدىكى ئېلېمېنت ئۇسلۇبى","panelTitle2":"ئىچكى باغلانما ئېلېمېنت ئۇسلۇبى","panelTitle3":"نەڭ (Object) ئېلېمېنت ئۇسلۇبى"},"specialchar":{"options":"ئالاھىدە ھەرپ تاللانمىسى","title":"ئالاھىدە ھەرپ تاللاڭ","toolbar":"ئالاھىدە ھەرپ قىستۇر"},"sourcedialog":{"toolbar":"مەنبە","title":"مەنبە"},"sourcearea":{"toolbar":"مەنبە"},"showblocks":{"toolbar":"بۆلەكنى كۆرسەت"},"removeformat":{"toolbar":"پىچىمنى چىقىرىۋەت"},"pastetext":{"button":"پىچىمى يوق تېكىست سۈپىتىدە چاپلا","pasteNotification":"چاپلانغىنى 1% . سىزنىڭ تور كۆرگۈچىڭىز قۇرال تەكچىسى ۋە سىيرىلما تاللاپ چاپلاش ئىقتىدارىنى قوللىمايدىكەن .","title":"پىچىمى يوق تېكىست سۈپىتىدە چاپلا"},"pastefromword":{"confirmCleanup":"سىز چاپلىماقچى بولغان مەزمۇن MS Word تىن كەلگەندەك قىلىدۇ، MS Word پىچىمىنى تازىلىۋەتكەندىن كېيىن ئاندىن چاپلامدۇ؟","error":"ئىچكى خاتالىق سەۋەبىدىن چاپلايدىغان سانلىق مەلۇماتنى تازىلىيالمايدۇ","title":"MS Word تىن چاپلا","toolbar":"MS Word تىن چاپلا"},"notification":{"closed":"ئوقتۇرۇش تاقالدى."},"maximize":{"maximize":"چوڭايت","minimize":"كىچىكلەت"},"magicline":{"title":"بۇ جايغا ئابزاس قىستۇر"},"list":{"bulletedlist":"تۈر بەلگە تىزىمى","numberedlist":"تەرتىپ نومۇر تىزىمى"},"language":{"button":"تىل تەڭشەك","remove":"تىلنى چىقىرىۋەت"},"indent":{"indent":"تارايت","outdent":"كەڭەيت"},"image2":{"alt":"تېكىست ئالماشتۇر","btnUpload":"مۇلازىمېتىرغا يۈكلە","captioned":"ماۋزۇلۇق سۈرەت","captionPlaceholder":"ماۋزۇ","infoTab":"سۈرەت","lockRatio":"نىسبەتنى قۇلۇپلا","menu":"سۈرەت خاسلىقى","pathName":"رەسىم","pathNameCaption":"ماۋزۇ","resetSize":"ئەسلى چوڭلۇق","resizer":"چېكىپ تۇرۇپ سۆرەپ چوڭ كىچىكلىكىنى تەڭشىگىلى بولىدۇ","title":"سۈرەت خاسلىقى","uploadTab":"يۈكلە","urlMissing":"سۈرەتنىڭ ئەسلى ھۆججەت ئادرېسى كەم","altMissing":"باشقا تېكىست كەمچىل"},"horizontalrule":{"toolbar":"توغرا سىزىق قىستۇر"},"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":"تىزىلغان پىچىم"},"filetools":{"loadError":"ھۆججەت ئوقۇشتا خاتالىق كۆرۈلدى","networkError":"ھۆججەت يۈكلەشتە تور خاتالىقى كۆرۈلدى.","httpError404":"ھۆججەت يۈكلىگەندە HTTP خاتالىقى كۆرۈلدى (404: ھۆججەت تېپىلمىدى).","httpError403":"ھۆججەت يۈكلىگەندە HTTP خاتالىقى كۆرۈلدى (403: چەكلەنگەن).","httpError":"ھۆججەت يۈكلىگەندە HTTP خاتالىقى كۆرۈلدى (404: خاتالىق نىسپىتى: 1%).","noUrlError":"چىقىردىغان ئۇلانما تەڭشەلمىگەن .","responseError":"مۇلازىمىتىردا ئىنكاس يوق ."},"elementspath":{"eleLabel":"ئېلېمېنت يولى","eleTitle":"%1 ئېلېمېنت"},"contextmenu":{"options":"قىسقا يول تىزىملىك تاللانمىسى"},"clipboard":{"copy":"كۆچۈر","copyError":"تور كۆرگۈڭىزنىڭ بىخەتەرلىك تەڭشىكى تەھرىرلىگۈچنىڭ كۆچۈر مەشغۇلاتىنى ئۆزلۈكىدىن ئىجرا قىلىشىغا يول قويمايدۇ، ھەرپتاختا تېز كۇنۇپكا (Ctrl/Cmd+C) ئارقىلىق تاماملاڭ","cut":"كەس","cutError":"تور كۆرگۈڭىزنىڭ بىخەتەرلىك تەڭشىكى تەھرىرلىگۈچنىڭ كەس مەشغۇلاتىنى ئۆزلۈكىدىن ئىجرا قىلىشىغا يول قويمايدۇ، ھەرپتاختا تېز كۇنۇپكا (Ctrl/Cmd+X) ئارقىلىق تاماملاڭ","paste":"چاپلا","pasteNotification":"چاپلانغىنى 1% . سىزنىڭ تور كۆرگۈچىڭىز قۇرال تەكچىسى ۋە سىيرىلما تاللاپ چاپلاش ئىقتىدارىنى قوللىمايدىكەن .","pasteArea":"چاپلاش دائىرىسى","pasteMsg":"مەزمۇنىڭىزنى تۆۋەندىكى رايونغا چاپلاپ ئاندىن OK نى بېسىڭ ."},"blockquote":{"toolbar":"بۆلەك نەقىل"},"basicstyles":{"bold":"توم","italic":"يانتۇ","strike":"ئۆچۈرۈش سىزىقى","subscript":"تۆۋەن ئىندېكس","superscript":"يۇقىرى ئىندېكس","underline":"ئاستى سىزىق"},"about":{"copy":"Copyright &copy; $1. نەشر ھوقۇقىغا ئىگە","dlgTitle":"CKEditor تەھرىرلىگۈچى 4 ھەقىدە","moreInfo":"تور تۇرايىمىزنى زىيارەت قىلىپ كېلىشىمگە ئائىت تېخىمۇ كۆپ ئۇچۇرغا ئېرىشىڭ"},"editor":"تەھرىرلىگۈچ","editorPanel":"مول تېكست تەھرىرلىگۈچ تاختىسى","common":{"editorHelp":"ALT+0 نى بېسىپ ياردەمنى كۆرۈڭ","browseServer":"كۆرسىتىش مۇلازىمېتىر","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":"ئۇسلۇب خىلىنىڭ ئاتى","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":"توغرىلىنىشى","left":"سول","right":"ئوڭ","center":"ئوتتۇرا","justify":"ئىككى تەرەپتىن توغرىلا","alignLeft":"سولغا توغرىلا","alignRight":"ئوڭغا توغرىلا","alignCenter":"Align Center","alignTop":"ئۈستى","alignMiddle":"ئوتتۇرا","alignBottom":"ئاستى","alignNone":"يوق","invalidValue":"ئىناۋەتسىز قىممەت.","invalidHeight":"ئېگىزلىك چوقۇم رەقەم پىچىمىدا بولۇشى زۆرۈر","invalidWidth":"كەڭلىك چوقۇم رەقەم پىچىمىدا بولۇشى زۆرۈر","invalidLength":"بەلگىلەنگەن قىممەت \"1%\" سۆز بۆلىكىدىكى ئېنىقسىز ماتىريال ياكى مۇسبەت سانلار (2%).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"ئۆچۈر","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"تېزلەتمە كونۇپكا","optionDefault":"سۈكۈتتىكى"}};
\ No newline at end of file
+CKEDITOR.lang['ug']={"widget":{"move":"يۆتكەشتە چېكىپ سۆرەڭ","label":"1% بېزەك"},"undo":{"redo":"قايتىلا ","undo":"يېنىۋال"},"toolbar":{"toolbarCollapse":"قورال بالداقنى قاتلا","toolbarExpand":"قورال بالداقنى ياي","toolbarGroups":{"document":"پۈتۈك","clipboard":"چاپلاش تاختىسى/يېنىۋال","editing":"تەھرىر","forms":"جەدۋەل","basicstyles":"ئاساسىي ئۇسلۇب","paragraph":"ئابزاس","links":"ئۇلانما","insert":"قىستۇر","styles":"ئۇسلۇب","colors":"رەڭ","tools":"قورال"},"toolbars":"قورال بالداق"},"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":"بىرىنچى قۇر","heightUnit":"height unit","invalidBorder":"گىرۋەك توملۇقى چوقۇم سان بولىدۇ","invalidCellPadding":"كاتەكچىگە چوقۇم سان تولدۇرۇلىدۇ","invalidCellSpacing":"كاتەكچە ئارىلىقى چوقۇم سان بولىدۇ","invalidCols":"بەلگىلەنگەن قۇر سانى چوقۇم نۆلدىن چوڭ بولىدۇ","invalidHeight":"جەدۋەل ئېگىزلىكى چوقۇم سان بولىدۇ","invalidRows":"بەلگىلەنگەن ئىستون سانى چوقۇم نۆلدىن چوڭ بولىدۇ","invalidWidth":"جەدۋەل كەڭلىكى چوقۇم سان بولىدۇ","menu":"جەدۋەل خاسلىقى","row":{"menu":"قۇر","insertBefore":"ئۈستىگە قۇر قىستۇر","insertAfter":"ئاستىغا قۇر قىستۇر","deleteRow":"قۇر ئۆچۈر"},"rows":"قۇر سانى","summary":"ئۈزۈندە","title":"جەدۋەل خاسلىقى","toolbar":"جەدۋەل","widthPc":"پىرسەنت","widthPx":"پىكسېل","widthUnit":"كەڭلىك بىرلىكى"},"stylescombo":{"label":"ئۇسلۇب","panelTitle":"ئۇسلۇب","panelTitle1":"بۆلەك دەرىجىسىدىكى ئېلېمېنت ئۇسلۇبى","panelTitle2":"ئىچكى باغلانما ئېلېمېنت ئۇسلۇبى","panelTitle3":"نەڭ (Object) ئېلېمېنت ئۇسلۇبى"},"specialchar":{"options":"ئالاھىدە ھەرپ تاللانمىسى","title":"ئالاھىدە ھەرپ تاللاڭ","toolbar":"ئالاھىدە ھەرپ قىستۇر"},"sourcedialog":{"toolbar":"مەنبە","title":"مەنبە"},"sourcearea":{"toolbar":"مەنبە"},"showblocks":{"toolbar":"بۆلەكنى كۆرسەت"},"removeformat":{"toolbar":"پىچىمنى چىقىرىۋەت"},"pastetext":{"button":"پىچىمى يوق تېكىست سۈپىتىدە چاپلا","pasteNotification":"چاپلانغىنى 1% . سىزنىڭ تور كۆرگۈچىڭىز قۇرال تەكچىسى ۋە سىيرىلما تاللاپ چاپلاش ئىقتىدارىنى قوللىمايدىكەن .","title":"پىچىمى يوق تېكىست سۈپىتىدە چاپلا"},"pastefromword":{"confirmCleanup":"سىز چاپلىماقچى بولغان مەزمۇن MS Word تىن كەلگەندەك قىلىدۇ، MS Word پىچىمىنى تازىلىۋەتكەندىن كېيىن ئاندىن چاپلامدۇ؟","error":"ئىچكى خاتالىق سەۋەبىدىن چاپلايدىغان سانلىق مەلۇماتنى تازىلىيالمايدۇ","title":"MS Word تىن چاپلا","toolbar":"MS Word تىن چاپلا"},"notification":{"closed":"ئوقتۇرۇش تاقالدى."},"maximize":{"maximize":"چوڭايت","minimize":"كىچىكلەت"},"magicline":{"title":"بۇ جايغا ئابزاس قىستۇر"},"list":{"bulletedlist":"تۈر بەلگە تىزىمى","numberedlist":"تەرتىپ نومۇر تىزىمى"},"language":{"button":"تىل تەڭشەك","remove":"تىلنى چىقىرىۋەت"},"indent":{"indent":"تارايت","outdent":"كەڭەيت"},"image2":{"alt":"تېكىست ئالماشتۇر","btnUpload":"مۇلازىمېتىرغا يۈكلە","captioned":"ماۋزۇلۇق سۈرەت","captionPlaceholder":"ماۋزۇ","infoTab":"سۈرەت","lockRatio":"نىسبەتنى قۇلۇپلا","menu":"سۈرەت خاسلىقى","pathName":"رەسىم","pathNameCaption":"ماۋزۇ","resetSize":"ئەسلى چوڭلۇق","resizer":"چېكىپ تۇرۇپ سۆرەپ چوڭ كىچىكلىكىنى تەڭشىگىلى بولىدۇ","title":"سۈرەت خاسلىقى","uploadTab":"يۈكلە","urlMissing":"سۈرەتنىڭ ئەسلى ھۆججەت ئادرېسى كەم","altMissing":"باشقا تېكىست كەمچىل"},"horizontalrule":{"toolbar":"توغرا سىزىق قىستۇر"},"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":"تىزىلغان پىچىم"},"filetools":{"loadError":"ھۆججەت ئوقۇشتا خاتالىق كۆرۈلدى","networkError":"ھۆججەت يۈكلەشتە تور خاتالىقى كۆرۈلدى.","httpError404":"ھۆججەت يۈكلىگەندە HTTP خاتالىقى كۆرۈلدى (404: ھۆججەت تېپىلمىدى).","httpError403":"ھۆججەت يۈكلىگەندە HTTP خاتالىقى كۆرۈلدى (403: چەكلەنگەن).","httpError":"ھۆججەت يۈكلىگەندە HTTP خاتالىقى كۆرۈلدى (404: خاتالىق نىسپىتى: 1%).","noUrlError":"چىقىردىغان ئۇلانما تەڭشەلمىگەن .","responseError":"مۇلازىمىتىردا ئىنكاس يوق ."},"elementspath":{"eleLabel":"ئېلېمېنت يولى","eleTitle":"%1 ئېلېمېنت"},"contextmenu":{"options":"قىسقا يول تىزىملىك تاللانمىسى"},"clipboard":{"copy":"كۆچۈر","copyError":"تور كۆرگۈڭىزنىڭ بىخەتەرلىك تەڭشىكى تەھرىرلىگۈچنىڭ كۆچۈر مەشغۇلاتىنى ئۆزلۈكىدىن ئىجرا قىلىشىغا يول قويمايدۇ، ھەرپتاختا تېز كۇنۇپكا (Ctrl/Cmd+C) ئارقىلىق تاماملاڭ","cut":"كەس","cutError":"تور كۆرگۈڭىزنىڭ بىخەتەرلىك تەڭشىكى تەھرىرلىگۈچنىڭ كەس مەشغۇلاتىنى ئۆزلۈكىدىن ئىجرا قىلىشىغا يول قويمايدۇ، ھەرپتاختا تېز كۇنۇپكا (Ctrl/Cmd+X) ئارقىلىق تاماملاڭ","paste":"چاپلا","pasteNotification":"چاپلانغىنى 1% . سىزنىڭ تور كۆرگۈچىڭىز قۇرال تەكچىسى ۋە سىيرىلما تاللاپ چاپلاش ئىقتىدارىنى قوللىمايدىكەن .","pasteArea":"چاپلاش دائىرىسى","pasteMsg":"مەزمۇنىڭىزنى تۆۋەندىكى رايونغا چاپلاپ ئاندىن OK نى بېسىڭ .","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"بۆلەك نەقىل"},"basicstyles":{"bold":"توم","italic":"يانتۇ","strike":"ئۆچۈرۈش سىزىقى","subscript":"تۆۋەن ئىندېكس","superscript":"يۇقىرى ئىندېكس","underline":"ئاستى سىزىق"},"about":{"copy":"Copyright &copy; $1. نەشر ھوقۇقىغا ئىگە","dlgTitle":"CKEditor تەھرىرلىگۈچى 4 ھەقىدە","moreInfo":"تور تۇرايىمىزنى زىيارەت قىلىپ كېلىشىمگە ئائىت تېخىمۇ كۆپ ئۇچۇرغا ئېرىشىڭ"},"editor":"تەھرىرلىگۈچ","editorPanel":"مول تېكست تەھرىرلىگۈچ تاختىسى","common":{"editorHelp":"ALT+0 نى بېسىپ ياردەمنى كۆرۈڭ","browseServer":"كۆرسىتىش مۇلازىمېتىر","url":"ئەسلى ھۆججەت","protocol":"كېلىشىم","upload":"يۈكلە","uploadSubmit":"مۇلازىمېتىرغا يۈكلە","image":"سۈرەت","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":"توغرىلىنىشى","left":"سول","right":"ئوڭ","center":"ئوتتۇرا","justify":"ئىككى تەرەپتىن توغرىلا","alignLeft":"سولغا توغرىلا","alignRight":"ئوڭغا توغرىلا","alignCenter":"Align Center","alignTop":"ئۈستى","alignMiddle":"ئوتتۇرا","alignBottom":"ئاستى","alignNone":"يوق","invalidValue":"ئىناۋەتسىز قىممەت.","invalidHeight":"ئېگىزلىك چوقۇم رەقەم پىچىمىدا بولۇشى زۆرۈر","invalidWidth":"كەڭلىك چوقۇم رەقەم پىچىمىدا بولۇشى زۆرۈر","invalidLength":"بەلگىلەنگەن قىممەت \"1%\" سۆز بۆلىكىدىكى ئېنىقسىز ماتىريال ياكى مۇسبەت سانلار (2%).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"ئۆچۈر","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"تېزلەتمە كونۇپكا","optionDefault":"سۈكۈتتىكى"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/uk.js b/core/assets/vendor/ckeditor/lang/uk.js
index bf32429ac1d7..860495eae4e6 100644
--- a/core/assets/vendor/ckeditor/lang/uk.js
+++ b/core/assets/vendor/ckeditor/lang/uk.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['uk']={"widget":{"move":"Клікніть і потягніть для переміщення","label":"%1 віджет"},"undo":{"redo":"Повторити","undo":"Повернути"},"toolbar":{"toolbarCollapse":"Згорнути панель інструментів","toolbarExpand":"Розгорнути панель інструментів","toolbarGroups":{"document":"Документ","clipboard":"Буфер обміну / Скасувати","editing":"Редагування","forms":"Форми","basicstyles":"Основний Стиль","paragraph":"Параграф","links":"Посилання","insert":"Вставити","styles":"Стилі","colors":"Кольори","tools":"Інструменти"},"toolbars":"Панель інструментів редактора"},"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":"Рядки","heightUnit":"одиниця висоти","invalidBorder":"Розмір рамки повинен бути цілим числом.","invalidCellPadding":"Внутр. відступ комірки повинен бути цілим числом.","invalidCellSpacing":"Проміжок між комірками повинен бути цілим числом.","invalidCols":"Кількість стовбців повинна бути більшою 0.","invalidHeight":"Висота таблиці повинна бути цілим числом.","invalidRows":"Кількість рядків повинна бути більшою 0.","invalidWidth":"Ширина таблиці повинна бути цілим числом.","menu":"Властивості таблиці","row":{"menu":"Рядки","insertBefore":"Вставити рядок перед","insertAfter":"Вставити рядок після","deleteRow":"Видалити рядки"},"rows":"Рядки","summary":"Детальний опис заголовку таблиці","title":"Властивості таблиці","toolbar":"Таблиця","widthPc":"відсотків","widthPx":"пікселів","widthUnit":"одиниця ширини"},"stylescombo":{"label":"Стиль","panelTitle":"Стилі форматування","panelTitle1":"Блочні стилі","panelTitle2":"Рядкові стилі","panelTitle3":"Об'єктні стилі"},"specialchar":{"options":"Опції","title":"Оберіть спеціальний символ","toolbar":"Спеціальний символ"},"sourcedialog":{"toolbar":"Джерело","title":"Джерело"},"sourcearea":{"toolbar":"Джерело"},"showblocks":{"toolbar":"Показувати блоки"},"removeformat":{"toolbar":"Видалити форматування"},"pastetext":{"button":"Вставити тільки текст","pasteNotification":"Натисніть %1, щоб вставити. Ваш браузер не підтримує вставку за допомогою кнопки панелі інструментів або пункту контекстного меню.","title":"Вставити тільки текст"},"pastefromword":{"confirmCleanup":"Текст, що Ви намагаєтесь вставити, схожий на скопійований з Word. Бажаєте очистити його форматування перед вставлянням?","error":"Неможливо очистити форматування через внутрішню помилку.","title":"Вставити з Word","toolbar":"Вставити з Word"},"notification":{"closed":"Сповіщення закрито."},"maximize":{"maximize":"Максимізувати","minimize":"Мінімізувати"},"magicline":{"title":"Вставити абзац"},"list":{"bulletedlist":"Вставити/видалити маркований список","numberedlist":"Вставити/видалити нумерований список"},"language":{"button":"Установити мову","remove":"Вилучити мову"},"indent":{"indent":"Збільшити відступ","outdent":"Зменшити відступ"},"image2":{"alt":"Альтернативний текст","btnUpload":"Надіслати на сервер","captioned":"Підписане зображення","captionPlaceholder":"Заголовок","infoTab":"Інформація про зображення","lockRatio":"Зберегти пропорції","menu":"Властивості зображення","pathName":"Зображення","pathNameCaption":"заголовок","resetSize":"Очистити поля розмірів","resizer":"Клікніть та потягніть для зміни розмірів","title":"Властивості зображення","uploadTab":"Надіслати","urlMissing":"Вкажіть URL зображення.","altMissing":"Альтернативний текст відсутній."},"horizontalrule":{"toolbar":"Горизонтальна лінія"},"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":"Форматований"},"filetools":{"loadError":"Виникла помилка під час читання файлу","networkError":"Під час завантаження файлу виникла помилка мережі.","httpError404":"Під час завантаження файлу виникла помилка HTTP (404: Файл не знайдено).","httpError403":"Під час завантаження файлу виникла помилка HTTP (403: Доступ заборонено).","httpError":"Під час завантаження файлу виникла помилка (статус помилки: %1).","noUrlError":"URL завантаження не визначений.","responseError":"Невірна відповідь сервера."},"elementspath":{"eleLabel":"Шлях","eleTitle":"%1 елемент"},"contextmenu":{"options":"Опції контекстного меню"},"clipboard":{"copy":"Копіювати","copyError":"Налаштування безпеки Вашого браузера не дозволяють редактору автоматично виконувати операції копіювання. Будь ласка, використовуйте клавіатуру для цього (Ctrl/Cmd+C).","cut":"Вирізати","cutError":"Налаштування безпеки Вашого браузера не дозволяють редактору автоматично виконувати операції вирізування. Будь ласка, використовуйте клавіатуру для цього (Ctrl/Cmd+X)","paste":"Вставити","pasteNotification":"Натисніть %1, щоб вставити. Ваш браузер не підтримує вставку за допомогою кнопки панелі інструментів або пункту контекстного меню.","pasteArea":"Область вставки","pasteMsg":"Вставте вміст у область нижче та натисніть OK."},"blockquote":{"toolbar":"Цитата"},"basicstyles":{"bold":"Жирний","italic":"Курсив","strike":"Закреслений","subscript":"Нижній індекс","superscript":"Верхній індекс","underline":"Підкреслений"},"about":{"copy":"Copyright &copy; $1. Всі права застережено.","dlgTitle":"Про CKEditor 4","moreInfo":"Щодо інформації з ліцензування завітайте на наш сайт:"},"editor":"Текстовий редактор","editorPanel":"Панель розширеного текстового редактора","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":"Вирівнювання","left":"По лівому краю","right":"По правому краю","center":"По центру","justify":"По ширині","alignLeft":"По лівому краю","alignRight":"По правому краю","alignCenter":"По центру","alignTop":"По верхньому краю","alignMiddle":"По середині","alignBottom":"По нижньому краю","alignNone":"Нема","invalidValue":"Невірне значення.","invalidHeight":"Висота повинна бути цілим числом.","invalidWidth":"Ширина повинна бути цілим числом.","invalidLength":"Вказане значення для поля \"%1\" має бути позитивним числом без або з коректним символом одиниці виміру (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Пробіл","35":"End","36":"Home","46":"Видалити","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Сполучення клавіш","optionDefault":"Типово"}};
\ No newline at end of file
+CKEDITOR.lang['uk']={"widget":{"move":"Клікніть і потягніть для переміщення","label":"%1 віджет"},"undo":{"redo":"Повторити","undo":"Повернути"},"toolbar":{"toolbarCollapse":"Згорнути панель інструментів","toolbarExpand":"Розгорнути панель інструментів","toolbarGroups":{"document":"Документ","clipboard":"Буфер обміну / Скасувати","editing":"Редагування","forms":"Форми","basicstyles":"Основний Стиль","paragraph":"Параграф","links":"Посилання","insert":"Вставити","styles":"Стилі","colors":"Кольори","tools":"Інструменти"},"toolbars":"Панель інструментів редактора"},"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":"Рядки","heightUnit":"одиниця висоти","invalidBorder":"Розмір рамки повинен бути цілим числом.","invalidCellPadding":"Внутр. відступ комірки повинен бути цілим числом.","invalidCellSpacing":"Проміжок між комірками повинен бути цілим числом.","invalidCols":"Кількість стовбців повинна бути більшою 0.","invalidHeight":"Висота таблиці повинна бути цілим числом.","invalidRows":"Кількість рядків повинна бути більшою 0.","invalidWidth":"Ширина таблиці повинна бути цілим числом.","menu":"Властивості таблиці","row":{"menu":"Рядки","insertBefore":"Вставити рядок перед","insertAfter":"Вставити рядок після","deleteRow":"Видалити рядки"},"rows":"Рядки","summary":"Детальний опис заголовку таблиці","title":"Властивості таблиці","toolbar":"Таблиця","widthPc":"відсотків","widthPx":"пікселів","widthUnit":"одиниця ширини"},"stylescombo":{"label":"Стиль","panelTitle":"Стилі форматування","panelTitle1":"Блочні стилі","panelTitle2":"Рядкові стилі","panelTitle3":"Об'єктні стилі"},"specialchar":{"options":"Опції","title":"Оберіть спеціальний символ","toolbar":"Спеціальний символ"},"sourcedialog":{"toolbar":"Джерело","title":"Джерело"},"sourcearea":{"toolbar":"Джерело"},"showblocks":{"toolbar":"Показувати блоки"},"removeformat":{"toolbar":"Видалити форматування"},"pastetext":{"button":"Вставити тільки текст","pasteNotification":"Натисніть %1, щоб вставити. Ваш браузер не підтримує вставку за допомогою кнопки панелі інструментів або пункту контекстного меню.","title":"Вставити тільки текст"},"pastefromword":{"confirmCleanup":"Текст, що Ви намагаєтесь вставити, схожий на скопійований з Word. Бажаєте очистити його форматування перед вставлянням?","error":"Неможливо очистити форматування через внутрішню помилку.","title":"Вставити з Word","toolbar":"Вставити з Word"},"notification":{"closed":"Сповіщення закрито."},"maximize":{"maximize":"Максимізувати","minimize":"Мінімізувати"},"magicline":{"title":"Вставити абзац"},"list":{"bulletedlist":"Вставити/видалити маркований список","numberedlist":"Вставити/видалити нумерований список"},"language":{"button":"Установити мову","remove":"Вилучити мову"},"indent":{"indent":"Збільшити відступ","outdent":"Зменшити відступ"},"image2":{"alt":"Альтернативний текст","btnUpload":"Надіслати на сервер","captioned":"Підписане зображення","captionPlaceholder":"Заголовок","infoTab":"Інформація про зображення","lockRatio":"Зберегти пропорції","menu":"Властивості зображення","pathName":"Зображення","pathNameCaption":"заголовок","resetSize":"Очистити поля розмірів","resizer":"Клікніть та потягніть для зміни розмірів","title":"Властивості зображення","uploadTab":"Надіслати","urlMissing":"Вкажіть URL зображення.","altMissing":"Альтернативний текст відсутній."},"horizontalrule":{"toolbar":"Горизонтальна лінія"},"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":"Форматований"},"filetools":{"loadError":"Виникла помилка під час читання файлу","networkError":"Під час завантаження файлу виникла помилка мережі.","httpError404":"Під час завантаження файлу виникла помилка HTTP (404: Файл не знайдено).","httpError403":"Під час завантаження файлу виникла помилка HTTP (403: Доступ заборонено).","httpError":"Під час завантаження файлу виникла помилка (статус помилки: %1).","noUrlError":"URL завантаження не визначений.","responseError":"Невірна відповідь сервера."},"elementspath":{"eleLabel":"Шлях","eleTitle":"%1 елемент"},"contextmenu":{"options":"Опції контекстного меню"},"clipboard":{"copy":"Копіювати","copyError":"Налаштування безпеки Вашого браузера не дозволяють редактору автоматично виконувати операції копіювання. Будь ласка, використовуйте клавіатуру для цього (Ctrl/Cmd+C).","cut":"Вирізати","cutError":"Налаштування безпеки Вашого браузера не дозволяють редактору автоматично виконувати операції вирізування. Будь ласка, використовуйте клавіатуру для цього (Ctrl/Cmd+X)","paste":"Вставити","pasteNotification":"Натисніть %1, щоб вставити. Ваш браузер не підтримує вставку за допомогою кнопки панелі інструментів або пункту контекстного меню.","pasteArea":"Область вставки","pasteMsg":"Вставте вміст у область нижче та натисніть OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Цитата"},"basicstyles":{"bold":"Жирний","italic":"Курсив","strike":"Закреслений","subscript":"Нижній індекс","superscript":"Верхній індекс","underline":"Підкреслений"},"about":{"copy":"Copyright &copy; $1. Всі права застережено.","dlgTitle":"Про CKEditor 4","moreInfo":"Щодо інформації з ліцензування завітайте на наш сайт:"},"editor":"Текстовий редактор","editorPanel":"Панель розширеного текстового редактора","common":{"editorHelp":"натисніть ALT 0 для довідки","browseServer":"Огляд Сервера","url":"URL","protocol":"Протокол","upload":"Надіслати","uploadSubmit":"Надіслати на сервер","image":"Зображення","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":"Вирівнювання","left":"По лівому краю","right":"По правому краю","center":"По центру","justify":"По ширині","alignLeft":"По лівому краю","alignRight":"По правому краю","alignCenter":"По центру","alignTop":"По верхньому краю","alignMiddle":"По середині","alignBottom":"По нижньому краю","alignNone":"Нема","invalidValue":"Невірне значення.","invalidHeight":"Висота повинна бути цілим числом.","invalidWidth":"Ширина повинна бути цілим числом.","invalidLength":"Вказане значення для поля \"%1\" має бути позитивним числом без або з коректним символом одиниці виміру (%2).","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>","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Пробіл","35":"End","36":"Home","46":"Видалити","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Сполучення клавіш","optionDefault":"Типово"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/vi.js b/core/assets/vendor/ckeditor/lang/vi.js
index 7aebae57ee5e..8beef433f3a2 100644
--- a/core/assets/vendor/ckeditor/lang/vi.js
+++ b/core/assets/vendor/ckeditor/lang/vi.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['vi']={"widget":{"move":"Nhấp chuột và kéo để di chuyển","label":"%1 widget"},"undo":{"redo":"Làm lại thao tác","undo":"Khôi phục thao tác"},"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ụ"},"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","heightUnit":"height unit","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ị"},"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"},"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"},"sourcedialog":{"toolbar":"Mã HTML","title":"Mã HTML"},"sourcearea":{"toolbar":"Mã HTML"},"showblocks":{"toolbar":"Hiển thị các khối"},"removeformat":{"toolbar":"Xoá định dạng"},"pastetext":{"button":"Dán theo định dạng văn bản thuần","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Phóng to tối đa","minimize":"Thu nhỏ"},"magicline":{"title":"Chèn đoạn vào đây"},"list":{"bulletedlist":"Chèn/Xoá Danh sách không thứ tự","numberedlist":"Chèn/Xoá Danh sách có thứ tự"},"language":{"button":"Thiết lập ngôn ngữ","remove":"Loại bỏ ngôn ngữ"},"indent":{"indent":"Dịch vào trong","outdent":"Dịch ra ngoài"},"image2":{"alt":"Chú thích ảnh","btnUpload":"Tải lên máy chủ","captioned":"Ảnh có chú thích","captionPlaceholder":"Nhãn","infoTab":"Thông tin của ảnh","lockRatio":"Giữ nguyên tỷ lệ","menu":"Thuộc tính của ảnh","pathName":"ảnh","pathNameCaption":"chú thích","resetSize":"Kích thước gốc","resizer":"Kéo rê để thay đổi kích cỡ","title":"Thuộc tính của ảnh","uploadTab":"Tải lên","urlMissing":"Thiếu đường dẫn hình ảnh","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Chèn đường phân cách ngang"},"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"},"filetools":{"loadError":"Lỗi xảy ra khi đang đọc file","networkError":"Lỗi kết nối xảy ra khi đang tải file lên","httpError404":"Lỗi HTTP xảy ra khi đang tải file lên (404: Không tìm thấy file)","httpError403":"Lỗi HTTP xảy ra khi đang tải file lên (403: Bị cấm)","httpError":"Lỗi HTTP xảy ra khi đang tải file lên (tình trạng lỗi: %1)","noUrlError":"Đường dẫn tải lên không hoạt động","responseError":"Phản hồi từ server sai"},"elementspath":{"eleLabel":"Nhãn thành phần","eleTitle":"%1 thành phần"},"contextmenu":{"options":"Tùy chọn menu bổ xung"},"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","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Khu vực dán","pasteMsg":"Paste your content inside the area below and press OK."},"blockquote":{"toolbar":"Khối trích dẫn"},"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"},"about":{"copy":"Bản quyền &copy; $1. Giữ toàn quyền.","dlgTitle":"Thông tin về CKEditor 4","moreInfo":"Vui lòng ghé thăm trang web của chúng tôi để có thông tin về giấy phép:"},"editor":"Bộ soạn thảo văn bản có định dạng","editorPanel":"Bảng điều khiển Rich Text Editor","common":{"editorHelp":"Nhấn ALT + 0 để được giúp đỡ","browseServer":"Duyệt 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 ","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í","left":"Trái","right":"Phải","center":"Giữa","justify":"Sắp chữ","alignLeft":"Canh trái","alignRight":"Canh phải","alignCenter":"Canh giữa","alignTop":"Trên","alignMiddle":"Giữa","alignBottom":"Dưới","alignNone":"Không","invalidValue":"Giá trị không hợp lệ.","invalidHeight":"Chiều cao phải là số nguyên.","invalidWidth":"Chiều rộng phải là số nguyên.","invalidLength":"Giá trị cho trường \"%1\" phải là một số dương có hoặc không có đơn vị đo lường hợp lệ (%2)","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>","keyboard":{"8":"Phím Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Cách","35":"End","36":"Home","46":"Xóa","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Phím tắt","optionDefault":"Mặc định"}};
\ No newline at end of file
+CKEDITOR.lang['vi']={"widget":{"move":"Nhấp chuột và kéo để di chuyển","label":"%1 widget"},"undo":{"redo":"Làm lại thao tác","undo":"Khôi phục thao tác"},"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ụ"},"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","heightUnit":"height unit","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ị"},"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"},"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"},"sourcedialog":{"toolbar":"Mã HTML","title":"Mã HTML"},"sourcearea":{"toolbar":"Mã HTML"},"showblocks":{"toolbar":"Hiển thị các khối"},"removeformat":{"toolbar":"Xoá định dạng"},"pastetext":{"button":"Dán theo định dạng văn bản thuần","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","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"},"notification":{"closed":"Notification closed."},"maximize":{"maximize":"Phóng to tối đa","minimize":"Thu nhỏ"},"magicline":{"title":"Chèn đoạn vào đây"},"list":{"bulletedlist":"Chèn/Xoá Danh sách không thứ tự","numberedlist":"Chèn/Xoá Danh sách có thứ tự"},"language":{"button":"Thiết lập ngôn ngữ","remove":"Loại bỏ ngôn ngữ"},"indent":{"indent":"Dịch vào trong","outdent":"Dịch ra ngoài"},"image2":{"alt":"Chú thích ảnh","btnUpload":"Tải lên máy chủ","captioned":"Ảnh có chú thích","captionPlaceholder":"Nhãn","infoTab":"Thông tin của ảnh","lockRatio":"Giữ nguyên tỷ lệ","menu":"Thuộc tính của ảnh","pathName":"ảnh","pathNameCaption":"chú thích","resetSize":"Kích thước gốc","resizer":"Kéo rê để thay đổi kích cỡ","title":"Thuộc tính của ảnh","uploadTab":"Tải lên","urlMissing":"Thiếu đường dẫn hình ảnh","altMissing":"Alternative text is missing."},"horizontalrule":{"toolbar":"Chèn đường phân cách ngang"},"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"},"filetools":{"loadError":"Lỗi xảy ra khi đang đọc file","networkError":"Lỗi kết nối xảy ra khi đang tải file lên","httpError404":"Lỗi HTTP xảy ra khi đang tải file lên (404: Không tìm thấy file)","httpError403":"Lỗi HTTP xảy ra khi đang tải file lên (403: Bị cấm)","httpError":"Lỗi HTTP xảy ra khi đang tải file lên (tình trạng lỗi: %1)","noUrlError":"Đường dẫn tải lên không hoạt động","responseError":"Phản hồi từ server sai"},"elementspath":{"eleLabel":"Nhãn thành phần","eleTitle":"%1 thành phần"},"contextmenu":{"options":"Tùy chọn menu bổ xung"},"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","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Khu vực dán","pasteMsg":"Paste your content inside the area below and press OK.","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"Khối trích dẫn"},"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"},"about":{"copy":"Bản quyền &copy; $1. Giữ toàn quyền.","dlgTitle":"Thông tin về CKEditor 4","moreInfo":"Vui lòng ghé thăm trang web của chúng tôi để có thông tin về giấy phép:"},"editor":"Bộ soạn thảo văn bản có định dạng","editorPanel":"Bảng điều khiển Rich Text Editor","common":{"editorHelp":"Nhấn ALT + 0 để được giúp đỡ","browseServer":"Duyệt 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","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 ","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í","left":"Trái","right":"Phải","center":"Giữa","justify":"Sắp chữ","alignLeft":"Canh trái","alignRight":"Canh phải","alignCenter":"Canh giữa","alignTop":"Trên","alignMiddle":"Giữa","alignBottom":"Dưới","alignNone":"Không","invalidValue":"Giá trị không hợp lệ.","invalidHeight":"Chiều cao phải là số nguyên.","invalidWidth":"Chiều rộng phải là số nguyên.","invalidLength":"Giá trị cho trường \"%1\" phải là một số dương có hoặc không có đơn vị đo lường hợp lệ (%2)","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>","keyboard":{"8":"Phím Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Cách","35":"End","36":"Home","46":"Xóa","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Phím tắt","optionDefault":"Mặc định"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/zh-cn.js b/core/assets/vendor/ckeditor/lang/zh-cn.js
index 7fed836ddc88..ccb0f6d03e50 100644
--- a/core/assets/vendor/ckeditor/lang/zh-cn.js
+++ b/core/assets/vendor/ckeditor/lang/zh-cn.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['zh-cn']={"widget":{"move":"点击并拖拽以移动","label":"%1 小部件"},"undo":{"redo":"重做","undo":"撤消"},"toolbar":{"toolbarCollapse":"折叠工具栏","toolbarExpand":"展开工具栏","toolbarGroups":{"document":"文档","clipboard":"剪贴板/撤销","editing":"编辑","forms":"表单","basicstyles":"基本格式","paragraph":"段落","links":"链接","insert":"插入","styles":"样式","colors":"颜色","tools":"工具"},"toolbars":"工具栏"},"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":"第一行","heightUnit":"高度单位","invalidBorder":"边框粗细必须为数字格式","invalidCellPadding":"单元格填充必须为数字格式","invalidCellSpacing":"单元格间距必须为数字格式","invalidCols":"指定的行数必须大于零","invalidHeight":"表格高度必须为数字格式","invalidRows":"指定的列数必须大于零","invalidWidth":"表格宽度必须为数字格式","menu":"表格属性","row":{"menu":"行","insertBefore":"在上方插入行","insertAfter":"在下方插入行","deleteRow":"删除行"},"rows":"行数","summary":"摘要","title":"表格属性","toolbar":"表格","widthPc":"百分比","widthPx":"像素","widthUnit":"宽度单位"},"stylescombo":{"label":"样式","panelTitle":"样式","panelTitle1":"块级元素样式","panelTitle2":"内联元素样式","panelTitle3":"对象元素样式"},"specialchar":{"options":"特殊符号选项","title":"选择特殊符号","toolbar":"插入特殊符号"},"sourcedialog":{"toolbar":"源码","title":"源码"},"sourcearea":{"toolbar":"源码"},"showblocks":{"toolbar":"显示区块"},"removeformat":{"toolbar":"清除格式"},"pastetext":{"button":"粘贴为无格式文本","pasteNotification":"您的浏览器不支持通过工具栏或右键菜单进行粘贴,请按 %1 进行粘贴。","title":"粘贴为无格式文本"},"pastefromword":{"confirmCleanup":"您要粘贴的内容好像是来自 MS Word,是否要清除 MS Word 格式后再粘贴?","error":"由于内部错误无法清理要粘贴的数据","title":"从 MS Word 粘贴","toolbar":"从 MS Word 粘贴"},"notification":{"closed":"通知已关闭"},"maximize":{"maximize":"全屏","minimize":"最小化"},"magicline":{"title":"在这插入段落"},"list":{"bulletedlist":"项目列表","numberedlist":"编号列表"},"language":{"button":"设置语言","remove":"移除语言"},"indent":{"indent":"增加缩进量","outdent":"减少缩进量"},"image2":{"alt":"替换文本","btnUpload":"上传到服务器","captioned":"带标题图像","captionPlaceholder":"标题","infoTab":"图像信息","lockRatio":"锁定比例","menu":"图像属性","pathName":"图像","pathNameCaption":"标题","resetSize":"原始尺寸","resizer":"点击并拖拽以改变尺寸","title":"图像属性","uploadTab":"上传","urlMissing":"缺少图像源文件地址","altMissing":"缺少替换文本"},"horizontalrule":{"toolbar":"插入水平线"},"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":"已编排格式"},"filetools":{"loadError":"读取文件时发生错误","networkError":"上传文件时发生网络错误","httpError404":"上传文件时发生 HTTP 错误(404:无法找到文件)","httpError403":"上传文件时发生 HTTP 错误(403:禁止访问)","httpError":"上传文件时发生 HTTP 错误(错误代码:%1)","noUrlError":"上传的 URL 未定义","responseError":"不正确的服务器响应"},"elementspath":{"eleLabel":"元素路径","eleTitle":"%1 元素"},"contextmenu":{"options":"快捷菜单选项"},"clipboard":{"copy":"复制","copyError":"您的浏览器安全设置不允许编辑器自动执行复制操作,请使用键盘快捷键(Ctrl/Cmd+C)来完成。","cut":"剪切","cutError":"您的浏览器安全设置不允许编辑器自动执行剪切操作,请使用键盘快捷键(Ctrl/Cmd+X)来完成。","paste":"粘贴","pasteNotification":"您的浏览器不支持通过工具栏或右键菜单进行粘贴,请按 %1 进行粘贴。","pasteArea":"粘贴区域","pasteMsg":"将您的内容粘贴到下方区域,然后按确定。"},"blockquote":{"toolbar":"块引用"},"basicstyles":{"bold":"加粗","italic":"倾斜","strike":"删除线","subscript":"下标","superscript":"上标","underline":"下划线"},"about":{"copy":"版权所有 &copy; $1。<br />保留所有权利。","dlgTitle":"关于 CKEditor 4","moreInfo":"相关授权许可信息请访问我们的网站:"},"editor":"所见即所得编辑器","editorPanel":"所见即所得编辑器面板","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":"对齐方式","left":"左对齐","right":"右对齐","center":"居中","justify":"两端对齐","alignLeft":"左对齐","alignRight":"右对齐","alignCenter":"居中","alignTop":"顶端","alignMiddle":"居中","alignBottom":"底部","alignNone":"无","invalidValue":"无效的值。","invalidHeight":"高度必须为数字格式","invalidWidth":"宽度必须为数字格式","invalidLength":"为 \"%1\" 字段设置的值必须是一个正数或者没有一个有效的度量单位 (%2)。","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>","keyboard":{"8":"退格键","13":"回车键","16":"Shift","17":"Ctrl","18":"Alt","32":"空格键","35":"行尾键","36":"行首键","46":"删除键","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"快捷键","optionDefault":"默认"}};
\ No newline at end of file
+CKEDITOR.lang['zh-cn']={"widget":{"move":"点击并拖拽以移动","label":"%1 小部件"},"undo":{"redo":"重做","undo":"撤消"},"toolbar":{"toolbarCollapse":"折叠工具栏","toolbarExpand":"展开工具栏","toolbarGroups":{"document":"文档","clipboard":"剪贴板/撤销","editing":"编辑","forms":"表单","basicstyles":"基本格式","paragraph":"段落","links":"链接","insert":"插入","styles":"样式","colors":"颜色","tools":"工具"},"toolbars":"工具栏"},"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":"第一行","heightUnit":"高度单位","invalidBorder":"边框粗细必须为数字格式","invalidCellPadding":"单元格填充必须为数字格式","invalidCellSpacing":"单元格间距必须为数字格式","invalidCols":"指定的行数必须大于零","invalidHeight":"表格高度必须为数字格式","invalidRows":"指定的列数必须大于零","invalidWidth":"表格宽度必须为数字格式","menu":"表格属性","row":{"menu":"行","insertBefore":"在上方插入行","insertAfter":"在下方插入行","deleteRow":"删除行"},"rows":"行数","summary":"摘要","title":"表格属性","toolbar":"表格","widthPc":"百分比","widthPx":"像素","widthUnit":"宽度单位"},"stylescombo":{"label":"样式","panelTitle":"样式","panelTitle1":"块级元素样式","panelTitle2":"内联元素样式","panelTitle3":"对象元素样式"},"specialchar":{"options":"特殊符号选项","title":"选择特殊符号","toolbar":"插入特殊符号"},"sourcedialog":{"toolbar":"源码","title":"源码"},"sourcearea":{"toolbar":"源码"},"showblocks":{"toolbar":"显示区块"},"removeformat":{"toolbar":"清除格式"},"pastetext":{"button":"粘贴为无格式文本","pasteNotification":"您的浏览器不支持通过工具栏或右键菜单进行粘贴,请按 %1 进行粘贴。","title":"粘贴为无格式文本"},"pastefromword":{"confirmCleanup":"您要粘贴的内容好像是来自 MS Word,是否要清除 MS Word 格式后再粘贴?","error":"由于内部错误无法清理要粘贴的数据","title":"从 MS Word 粘贴","toolbar":"从 MS Word 粘贴"},"notification":{"closed":"通知已关闭"},"maximize":{"maximize":"全屏","minimize":"最小化"},"magicline":{"title":"在这插入段落"},"list":{"bulletedlist":"项目列表","numberedlist":"编号列表"},"language":{"button":"设置语言","remove":"移除语言"},"indent":{"indent":"增加缩进量","outdent":"减少缩进量"},"image2":{"alt":"替换文本","btnUpload":"上传到服务器","captioned":"带标题图像","captionPlaceholder":"标题","infoTab":"图像信息","lockRatio":"锁定比例","menu":"图像属性","pathName":"图像","pathNameCaption":"标题","resetSize":"原始尺寸","resizer":"点击并拖拽以改变尺寸","title":"图像属性","uploadTab":"上传","urlMissing":"缺少图像源文件地址","altMissing":"缺少替换文本"},"horizontalrule":{"toolbar":"插入水平线"},"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":"已编排格式"},"filetools":{"loadError":"读取文件时发生错误","networkError":"上传文件时发生网络错误","httpError404":"上传文件时发生 HTTP 错误(404:无法找到文件)","httpError403":"上传文件时发生 HTTP 错误(403:禁止访问)","httpError":"上传文件时发生 HTTP 错误(错误代码:%1)","noUrlError":"上传的 URL 未定义","responseError":"不正确的服务器响应"},"elementspath":{"eleLabel":"元素路径","eleTitle":"%1 元素"},"contextmenu":{"options":"快捷菜单选项"},"clipboard":{"copy":"复制","copyError":"您的浏览器安全设置不允许编辑器自动执行复制操作,请使用键盘快捷键(Ctrl/Cmd+C)来完成。","cut":"剪切","cutError":"您的浏览器安全设置不允许编辑器自动执行剪切操作,请使用键盘快捷键(Ctrl/Cmd+X)来完成。","paste":"粘贴","pasteNotification":"您的浏览器不支持通过工具栏或右键菜单进行粘贴,请按 %1 进行粘贴。","pasteArea":"粘贴区域","pasteMsg":"将您的内容粘贴到下方区域,然后按确定。","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"块引用"},"basicstyles":{"bold":"加粗","italic":"倾斜","strike":"删除线","subscript":"下标","superscript":"上标","underline":"下划线"},"about":{"copy":"版权所有 &copy; $1。<br />保留所有权利。","dlgTitle":"关于 CKEditor 4","moreInfo":"相关授权许可信息请访问我们的网站:"},"editor":"所见即所得编辑器","editorPanel":"所见即所得编辑器面板","common":{"editorHelp":"按 ALT+0 获得帮助","browseServer":"浏览服务器","url":"URL","protocol":"协议","upload":"上传","uploadSubmit":"上传到服务器","image":"图像","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":"对齐方式","left":"左对齐","right":"右对齐","center":"居中","justify":"两端对齐","alignLeft":"左对齐","alignRight":"右对齐","alignCenter":"居中","alignTop":"顶端","alignMiddle":"居中","alignBottom":"底部","alignNone":"无","invalidValue":"无效的值。","invalidHeight":"高度必须为数字格式","invalidWidth":"宽度必须为数字格式","invalidLength":"为 \"%1\" 字段设置的值必须是一个正数或者没有一个有效的度量单位 (%2)。","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>","keyboard":{"8":"退格键","13":"回车键","16":"Shift","17":"Ctrl","18":"Alt","32":"空格键","35":"行尾键","36":"行首键","46":"删除键","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"快捷键","optionDefault":"默认"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/lang/zh.js b/core/assets/vendor/ckeditor/lang/zh.js
index 1c2ca39dc629..898c6a208902 100644
--- a/core/assets/vendor/ckeditor/lang/zh.js
+++ b/core/assets/vendor/ckeditor/lang/zh.js
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.lang['zh']={"widget":{"move":"拖曳以移動","label":"%1 小工具"},"undo":{"redo":"取消復原","undo":"復原"},"toolbar":{"toolbarCollapse":"摺疊工具列","toolbarExpand":"展開工具列","toolbarGroups":{"document":"文件","clipboard":"剪貼簿/復原","editing":"編輯選項","forms":"格式","basicstyles":"基本樣式","paragraph":"段落","links":"連結","insert":"插入","styles":"樣式","colors":"顏色","tools":"工具"},"toolbars":"編輯器工具列"},"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":"第一行","heightUnit":"height unit","invalidBorder":"框線大小必須是整數。","invalidCellPadding":"儲存格邊距必須為正數。","invalidCellSpacing":"儲存格間距必須為正數。","invalidCols":"列數須為大於 0 的正整數。","invalidHeight":"表格高度必須為數字。","invalidRows":"行數須為大於 0 的正整數。","invalidWidth":"表格寬度必須為數字。","menu":"表格屬性","row":{"menu":"行","insertBefore":"上方插入行","insertAfter":"下方插入行","deleteRow":"刪除行"},"rows":"行","summary":"總結","title":"表格屬性","toolbar":"表格","widthPc":"百分比","widthPx":"像素","widthUnit":"寬度單位"},"stylescombo":{"label":"樣式","panelTitle":"格式化樣式","panelTitle1":"區塊樣式","panelTitle2":"內嵌樣式","panelTitle3":"物件樣式"},"specialchar":{"options":"特殊字元選項","title":"選取特殊字元","toolbar":"插入特殊字元"},"sourcedialog":{"toolbar":"原始碼","title":"原始碼"},"sourcearea":{"toolbar":"原始碼"},"showblocks":{"toolbar":"顯示區塊"},"removeformat":{"toolbar":"移除格式"},"pastetext":{"button":"貼成純文字","pasteNotification":"請按下「%1」貼上。您的瀏覽器不支援工具列按鈕或是內容功能表選項。 ","title":"貼成純文字"},"pastefromword":{"confirmCleanup":"您想貼上的文字似乎是自 Word 複製而來,請問您是否要先清除 Word 的格式後再行貼上?","error":"由於發生內部錯誤,無法清除清除 Word 的格式。","title":"自 Word 貼上","toolbar":"自 Word 貼上"},"notification":{"closed":"通知已關閉。"},"maximize":{"maximize":"最大化","minimize":"最小化"},"magicline":{"title":"在此插入段落"},"list":{"bulletedlist":"插入/移除項目符號清單","numberedlist":"插入/移除編號清單清單"},"language":{"button":"設定語言","remove":"移除語言"},"indent":{"indent":"增加縮排","outdent":"減少縮排"},"image2":{"alt":"替代文字","btnUpload":"傳送至伺服器","captioned":"已加標題之圖片","captionPlaceholder":"標題","infoTab":"影像資訊","lockRatio":"固定比例","menu":"影像屬性","pathName":"圖片","pathNameCaption":"標題","resetSize":"重設大小","resizer":"拖曳以改變大小","title":"影像屬性","uploadTab":"上傳","urlMissing":"遺失圖片來源之 URL ","altMissing":"替代文字遺失。"},"horizontalrule":{"toolbar":"插入水平線"},"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":"格式設定"},"filetools":{"loadError":"在讀取檔案時發生錯誤。","networkError":"在上傳檔案時發生網路錯誤。","httpError404":"在上傳檔案時發生 HTTP 錯誤(404:檔案找不到)。","httpError403":"在上傳檔案時發生 HTTP 錯誤(403:禁止)。","httpError":"在上傳檔案時發生 HTTP 錯誤(錯誤狀態:%1)。","noUrlError":"上傳的 URL 未被定義。","responseError":"不正確的伺服器回應。"},"elementspath":{"eleLabel":"元件路徑","eleTitle":"%1 個元件"},"contextmenu":{"options":"內容功能表選項"},"clipboard":{"copy":"複製","copyError":"瀏覽器的安全性設定不允許編輯器自動執行複製動作。請使用鍵盤快捷鍵 (Ctrl/Cmd+C) 複製。","cut":"剪下","cutError":"瀏覽器的安全性設定不允許編輯器自動執行剪下動作。請使用鏐盤快捷鍵 (Ctrl/Cmd+X) 剪下。","paste":"貼上","pasteNotification":"請按下「%1」貼上。您的瀏覽器不支援工具列按鈕或是內容功能表選項。","pasteArea":"貼上區","pasteMsg":"請將您的內容貼於下方區域中並按下「OK」。"},"blockquote":{"toolbar":"引用段落"},"basicstyles":{"bold":"粗體","italic":"斜體","strike":"刪除線","subscript":"下標","superscript":"上標","underline":"底線"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"關於 CKEditor 4","moreInfo":"關於授權資訊,請參閱我們的網站:"},"editor":"RTF 編輯器","editorPanel":"RTF 編輯器面板","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":"對齊方式","left":"靠左對齊","right":"靠右對齊","center":"置中對齊","justify":"左右對齊","alignLeft":"靠左對齊","alignRight":"靠右對齊","alignCenter":"置中對齊","alignTop":"頂端","alignMiddle":"中間對齊","alignBottom":"底端","alignNone":"無","invalidValue":"無效值。","invalidHeight":"高度必須為數字。","invalidWidth":"寬度必須為數字。","invalidLength":"為「%1」欄位指定的值必須為正值,可包含或不包含測量單位(%2)。","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>","keyboard":{"8":"退格鍵","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"空白鍵","35":"End","36":"Home","46":"刪除","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command 鍵"},"keyboardShortcut":"鍵盤快捷鍵","optionDefault":"預設"}};
\ No newline at end of file
+CKEDITOR.lang['zh']={"widget":{"move":"拖曳以移動","label":"%1 小工具"},"undo":{"redo":"取消復原","undo":"復原"},"toolbar":{"toolbarCollapse":"摺疊工具列","toolbarExpand":"展開工具列","toolbarGroups":{"document":"文件","clipboard":"剪貼簿/復原","editing":"編輯選項","forms":"格式","basicstyles":"基本樣式","paragraph":"段落","links":"連結","insert":"插入","styles":"樣式","colors":"顏色","tools":"工具"},"toolbars":"編輯器工具列"},"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":"第一行","heightUnit":"height unit","invalidBorder":"框線大小必須是整數。","invalidCellPadding":"儲存格邊距必須為正數。","invalidCellSpacing":"儲存格間距必須為正數。","invalidCols":"列數須為大於 0 的正整數。","invalidHeight":"表格高度必須為數字。","invalidRows":"行數須為大於 0 的正整數。","invalidWidth":"表格寬度必須為數字。","menu":"表格屬性","row":{"menu":"行","insertBefore":"上方插入行","insertAfter":"下方插入行","deleteRow":"刪除行"},"rows":"行","summary":"總結","title":"表格屬性","toolbar":"表格","widthPc":"百分比","widthPx":"像素","widthUnit":"寬度單位"},"stylescombo":{"label":"樣式","panelTitle":"格式化樣式","panelTitle1":"區塊樣式","panelTitle2":"內嵌樣式","panelTitle3":"物件樣式"},"specialchar":{"options":"特殊字元選項","title":"選取特殊字元","toolbar":"插入特殊字元"},"sourcedialog":{"toolbar":"原始碼","title":"原始碼"},"sourcearea":{"toolbar":"原始碼"},"showblocks":{"toolbar":"顯示區塊"},"removeformat":{"toolbar":"移除格式"},"pastetext":{"button":"貼成純文字","pasteNotification":"請按下「%1」貼上。您的瀏覽器不支援工具列按鈕或是內容功能表選項。 ","title":"貼成純文字"},"pastefromword":{"confirmCleanup":"您想貼上的文字似乎是自 Word 複製而來,請問您是否要先清除 Word 的格式後再行貼上?","error":"由於發生內部錯誤,無法清除清除 Word 的格式。","title":"自 Word 貼上","toolbar":"自 Word 貼上"},"notification":{"closed":"通知已關閉。"},"maximize":{"maximize":"最大化","minimize":"最小化"},"magicline":{"title":"在此插入段落"},"list":{"bulletedlist":"插入/移除項目符號清單","numberedlist":"插入/移除編號清單清單"},"language":{"button":"設定語言","remove":"移除語言"},"indent":{"indent":"增加縮排","outdent":"減少縮排"},"image2":{"alt":"替代文字","btnUpload":"傳送至伺服器","captioned":"已加標題之圖片","captionPlaceholder":"標題","infoTab":"影像資訊","lockRatio":"固定比例","menu":"影像屬性","pathName":"圖片","pathNameCaption":"標題","resetSize":"重設大小","resizer":"拖曳以改變大小","title":"影像屬性","uploadTab":"上傳","urlMissing":"遺失圖片來源之 URL ","altMissing":"替代文字遺失。"},"horizontalrule":{"toolbar":"插入水平線"},"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":"格式設定"},"filetools":{"loadError":"在讀取檔案時發生錯誤。","networkError":"在上傳檔案時發生網路錯誤。","httpError404":"在上傳檔案時發生 HTTP 錯誤(404:檔案找不到)。","httpError403":"在上傳檔案時發生 HTTP 錯誤(403:禁止)。","httpError":"在上傳檔案時發生 HTTP 錯誤(錯誤狀態:%1)。","noUrlError":"上傳的 URL 未被定義。","responseError":"不正確的伺服器回應。"},"elementspath":{"eleLabel":"元件路徑","eleTitle":"%1 個元件"},"contextmenu":{"options":"內容功能表選項"},"clipboard":{"copy":"複製","copyError":"瀏覽器的安全性設定不允許編輯器自動執行複製動作。請使用鍵盤快捷鍵 (Ctrl/Cmd+C) 複製。","cut":"剪下","cutError":"瀏覽器的安全性設定不允許編輯器自動執行剪下動作。請使用鏐盤快捷鍵 (Ctrl/Cmd+X) 剪下。","paste":"貼上","pasteNotification":"請按下「%1」貼上。您的瀏覽器不支援工具列按鈕或是內容功能表選項。","pasteArea":"貼上區","pasteMsg":"請將您的內容貼於下方區域中並按下「OK」。","fileFormatNotSupportedNotification":"This file format is not supported. You can try with one of the supported formats: ${formats}."},"blockquote":{"toolbar":"引用段落"},"basicstyles":{"bold":"粗體","italic":"斜體","strike":"刪除線","subscript":"下標","superscript":"上標","underline":"底線"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"關於 CKEditor 4","moreInfo":"關於授權資訊,請參閱我們的網站:"},"editor":"RTF 編輯器","editorPanel":"RTF 編輯器面板","common":{"editorHelp":"按下 ALT 0 取得說明。","browseServer":"瀏覽伺服器","url":"URL","protocol":"通訊協定","upload":"上傳","uploadSubmit":"傳送至伺服器","image":"圖像","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":"對齊方式","left":"靠左對齊","right":"靠右對齊","center":"置中對齊","justify":"左右對齊","alignLeft":"靠左對齊","alignRight":"靠右對齊","alignCenter":"置中對齊","alignTop":"頂端","alignMiddle":"中間對齊","alignBottom":"底端","alignNone":"無","invalidValue":"無效值。","invalidHeight":"高度必須為數字。","invalidWidth":"寬度必須為數字。","invalidLength":"為「%1」欄位指定的值必須為正值,可包含或不包含測量單位(%2)。","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>","keyboard":{"8":"退格鍵","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"空白鍵","35":"End","36":"Home","46":"刪除","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command 鍵"},"keyboardShortcut":"鍵盤快捷鍵","optionDefault":"預設"}};
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js b/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js
index 87d215891cf1..773cf1831245 100644
--- a/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js
+++ b/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js
@@ -2,10 +2,10 @@
  Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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 the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},
-{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:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:"نص غامق",legend:"Press ${bold}"},{name:"نص مائل",legend:"Press ${italic}"},{name:"نص تحته خط",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}"},{name:" Paste as plain text",legend:"Press ${pastetext}",legendEdge:"Press ${pastetext}, followed by ${paste}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"هروب",pageUp:"اعلى الصفحة",pageDown:"اسفل الصفحة",leftArrow:"السهم الايسر",upArrow:"السهم العلوي",rightArrow:"السهم الأيمن",downArrow:"السهم السفلي",insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",
-numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"مضروب",add:"إضافة",subtract:"طرح",decimalPoint:"Decimal Point",divide:"تقسيم",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"الفاصلة المنقوطة",equalSign:'علامة "يساوي"',comma:"فاصلة",dash:"شرطة",period:"نقطة",forwardSlash:"Forward Slash",
-graveAccent:"Grave Accent",openBracket:"افتح القوس",backSlash:"Backslash",closeBracket:"اغلق القوس",singleQuote:"Single Quote"});
\ No newline at end of file
+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.The focus will be moved back to the editing area upon activating the toolbar button."},
+{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{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:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:"نص غامق",legend:"Press ${bold}"},{name:"نص مائل",legend:"Press ${italic}"},{name:"نص تحته خط",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}"},{name:" Paste as plain text",legend:"Press ${pastetext}",legendEdge:"Press ${pastetext}, followed by ${paste}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"هروب",pageUp:"اعلى الصفحة",pageDown:"اسفل الصفحة",
+leftArrow:"السهم الايسر",upArrow:"السهم العلوي",rightArrow:"السهم الأيمن",downArrow:"السهم السفلي",insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"مضروب",add:"إضافة",subtract:"طرح",decimalPoint:"Decimal Point",divide:"تقسيم",f1:"F1",f2:"F2",f3:"F3",
+f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"الفاصلة المنقوطة",equalSign:'علامة "يساوي"',comma:"فاصلة",dash:"شرطة",period:"نقطة",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"افتح القوس",backSlash:"Backslash",closeBracket:"اغلق القوس",singleQuote:"Single Quote"});
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js b/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js
index a7820948414e..2c62d9b4214b 100644
--- a/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js
+++ b/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js
@@ -2,8 +2,8 @@
  Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.plugins.setLang("a11yhelp","bg",{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 the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{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."},
+CKEDITOR.plugins.setLang("a11yhelp","bg",{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.The focus will be moved back to the editing area upon activating the toolbar button."},
+{name:"Диалог на редактора",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{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:"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:" 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}"},{name:" Paste as plain text",legend:"Press ${pastetext}",legendEdge:"Press ${pastetext}, followed by ${paste}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",
diff --git a/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/en-gb.js b/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/en-gb.js
index da0af02f02f9..477f7f5c71a6 100644
--- a/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/en-gb.js
+++ b/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/en-gb.js
@@ -2,10 +2,10 @@
  Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.plugins.setLang("a11yhelp","en-gb",{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 the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},
-{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}"},{name:" Paste as plain text",legend:"Press ${pastetext}",legendEdge:"Press ${pastetext}, followed by ${paste}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",
-numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",
-graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
+CKEDITOR.plugins.setLang("a11yhelp","en-gb",{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.The focus will be moved back to the editing area upon activating the toolbar button."},
+{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{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}"},{name:" Paste as plain text",legend:"Press ${pastetext}",legendEdge:"Press ${pastetext}, followed by ${paste}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",
+leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",
+f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/en.js b/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/en.js
index d991f057b4c0..2f819a6811d2 100644
--- a/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/en.js
+++ b/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/en.js
@@ -2,10 +2,10 @@
  Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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 the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},
-{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}"},{name:" Paste as plain text",legend:"Press ${pastetext}",legendEdge:"Press ${pastetext}, followed by ${paste}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",
-numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",
-graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
+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.The focus will be moved back to the editing area upon activating the toolbar button."},
+{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{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}"},{name:" Paste as plain text",legend:"Press ${pastetext}",legendEdge:"Press ${pastetext}, followed by ${paste}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",
+leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",
+f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/fo.js b/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/fo.js
index 7d8cbaef65aa..06663dcbccf2 100644
--- a/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/fo.js
+++ b/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/fo.js
@@ -2,10 +2,10 @@
  Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.plugins.setLang("a11yhelp","fo",{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 the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},
-{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}"},{name:" Paste as plain text",legend:"Press ${pastetext}",legendEdge:"Press ${pastetext}, followed by ${paste}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",
-numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Falda",add:"Pluss",subtract:"Frádráttar",decimalPoint:"Decimal Point",divide:"Býta",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semikolon",equalSign:"Javnatekn",comma:"Komma",dash:"Dash",period:"Punktum",forwardSlash:"Forward Slash",
-graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
+CKEDITOR.plugins.setLang("a11yhelp","fo",{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.The focus will be moved back to the editing area upon activating the toolbar button."},
+{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{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}"},{name:" Paste as plain text",legend:"Press ${pastetext}",legendEdge:"Press ${pastetext}, followed by ${paste}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",
+leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Falda",add:"Pluss",subtract:"Frádráttar",decimalPoint:"Decimal Point",divide:"Býta",f1:"F1",f2:"F2",f3:"F3",
+f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semikolon",equalSign:"Javnatekn",comma:"Komma",dash:"Dash",period:"Punktum",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js b/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js
index 5dd832448f8e..a50327115e5c 100644
--- a/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js
+++ b/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js
@@ -2,10 +2,10 @@
  Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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 the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},
-{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}"},{name:" Paste as plain text",legend:"Press ${pastetext}",legendEdge:"Press ${pastetext}, followed by ${paste}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",
-numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",
-graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
+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.The focus will be moved back to the editing area upon activating the toolbar button."},
+{name:"એડિટર ડાયલોગ",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{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}"},{name:" Paste as plain text",legend:"Press ${pastetext}",legendEdge:"Press ${pastetext}, followed by ${paste}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",
+leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",
+f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js b/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js
index 4c75879281d2..91ba7273edb3 100644
--- a/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js
+++ b/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js
@@ -2,10 +2,10 @@
  Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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 the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},
-{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}"},{name:" Paste as plain text",legend:"Press ${pastetext}",legendEdge:"Press ${pastetext}, followed by ${paste}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",
-numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",
-graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
+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.The focus will be moved back to the editing area upon activating the toolbar button."},
+{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{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}"},{name:" Paste as plain text",legend:"Press ${pastetext}",legendEdge:"Press ${pastetext}, followed by ${paste}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",
+leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",
+f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/km.js b/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/km.js
index 4c6c0e7d3d73..c66191759abd 100644
--- a/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/km.js
+++ b/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/km.js
@@ -2,10 +2,10 @@
  Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.plugins.setLang("a11yhelp","km",{title:"Accessibility Instructions",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 the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},
-{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:"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:"ការបញ្ជា​អក្សរ​ទ្រេត",legend:"ចុច ${italic}"},{name:"ពាក្យបញ្ជា​បន្ទាត់​ពីក្រោម",
-legend:"ចុច ${underline}"},{name:"ពាក្យបញ្ជា​តំណ",legend:"ចុច ${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:"ជំនួយ​ពី​ភាព​ងាយស្រួល",legend:"ជួយ ${a11yHelp}"},{name:" Paste as plain text",legend:"Press ${pastetext}",legendEdge:"Press ${pastetext}, followed by ${paste}"}]}],tab:"Tab",pause:"ផ្អាក",capslock:"Caps Lock",escape:"ចាកចេញ",pageUp:"ទំព័រ​លើ",pageDown:"ទំព័រ​ក្រោម",leftArrow:"ព្រួញ​ឆ្វេង",upArrow:"ព្រួញ​លើ",rightArrow:"ព្រួញ​ស្ដាំ",downArrow:"ព្រួញ​ក្រោម",insert:"បញ្ចូល",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"ជ្រើស​គ្រាប់​ចុច",numpad0:"Numpad 0",numpad1:"Numpad 1",
-numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"គុណ",add:"បន្ថែម",subtract:"ដក",decimalPoint:"ចំណុចទសភាគ",divide:"ចែក",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"បិទ​រំកិល",semiColon:"ចុច​ក្បៀស",equalSign:"សញ្ញា​អឺរ៉ូ",comma:"ក្បៀស",dash:"Dash",period:"ចុច",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",
-openBracket:"តង្កៀប​បើក",backSlash:"Backslash",closeBracket:"តង្កៀប​បិទ",singleQuote:"បន្តក់​មួយ"});
\ No newline at end of file
+CKEDITOR.plugins.setLang("a11yhelp","km",{title:"Accessibility Instructions",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.The focus will be moved back to the editing area upon activating the toolbar button."},
+{name:"ផ្ទាំង​កម្មវិធីនិពន្ធ",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{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:"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:"ការបញ្ជា​អក្សរ​ទ្រេត",legend:"ចុច ${italic}"},{name:"ពាក្យបញ្ជា​បន្ទាត់​ពីក្រោម",legend:"ចុច ${underline}"},{name:"ពាក្យបញ្ជា​តំណ",legend:"ចុច ${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:"ជំនួយ​ពី​ភាព​ងាយស្រួល",legend:"ជួយ ${a11yHelp}"},{name:" Paste as plain text",legend:"Press ${pastetext}",legendEdge:"Press ${pastetext}, followed by ${paste}"}]}],tab:"Tab",pause:"ផ្អាក",capslock:"Caps Lock",escape:"ចាកចេញ",pageUp:"ទំព័រ​លើ",pageDown:"ទំព័រ​ក្រោម",
+leftArrow:"ព្រួញ​ឆ្វេង",upArrow:"ព្រួញ​លើ",rightArrow:"ព្រួញ​ស្ដាំ",downArrow:"ព្រួញ​ក្រោម",insert:"បញ្ចូល",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"ជ្រើស​គ្រាប់​ចុច",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"គុណ",add:"បន្ថែម",subtract:"ដក",decimalPoint:"ចំណុចទសភាគ",divide:"ចែក",f1:"F1",f2:"F2",f3:"F3",f4:"F4",
+f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"បិទ​រំកិល",semiColon:"ចុច​ក្បៀស",equalSign:"សញ្ញា​អឺរ៉ូ",comma:"ក្បៀស",dash:"Dash",period:"ចុច",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"តង្កៀប​បើក",backSlash:"Backslash",closeBracket:"តង្កៀប​បិទ",singleQuote:"បន្តក់​មួយ"});
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js b/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js
index 795c3d89f27e..10ae387a1493 100644
--- a/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js
+++ b/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js
@@ -2,10 +2,10 @@
  Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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 the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},
-{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}"},{name:" Paste as plain text",legend:"Press ${pastetext}",legendEdge:"Press ${pastetext}, followed by ${paste}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",
-numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",
-graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
+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.The focus will be moved back to the editing area upon activating the toolbar button."},
+{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{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}"},{name:" Paste as plain text",legend:"Press ${pastetext}",legendEdge:"Press ${pastetext}, followed by ${paste}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",
+leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",
+f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js b/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js
index 77c320c1516b..93a4ce0bb48c 100644
--- a/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js
+++ b/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js
@@ -2,8 +2,8 @@
  Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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 the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{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."},
+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.The focus will be moved back to the editing area upon activating the toolbar button."},
+{name:"Дијалот за едиторот",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{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:"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:" 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}"},{name:" Paste as plain text",legend:"Press ${pastetext}",legendEdge:"Press ${pastetext}, followed by ${paste}"}]}],tab:"Tab",pause:"Пауза",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Up",
diff --git a/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js b/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js
index 1f9dc1b9523a..cc74e95902a0 100644
--- a/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js
+++ b/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js
@@ -2,10 +2,10 @@
  Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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 the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},
-{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}"},{name:" Paste as plain text",legend:"Press ${pastetext}",legendEdge:"Press ${pastetext}, followed by ${paste}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",
-numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",
-graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
+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.The focus will be moved back to the editing area upon activating the toolbar button."},
+{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{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}"},{name:" Paste as plain text",legend:"Press ${pastetext}",legendEdge:"Press ${pastetext}, followed by ${paste}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",
+leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",
+f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/th.js b/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/th.js
index 78c0fd647211..37dcd180be61 100644
--- a/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/th.js
+++ b/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/th.js
@@ -2,10 +2,10 @@
  Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.plugins.setLang("a11yhelp","th",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press 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:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},
-{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:"คำสั่งสำหรับตัวเอียง",legend:"วาง ${italic}"},{name:"คำสั่งสำหรับขีดเส้นใต้",
-legend:"วาง ${underline}"},{name:"คำสั่งสำหรับลิงก์",legend:"วาง ${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}"},{name:" Paste as plain text",legend:"Press ${pastetext}",legendEdge:"Press ${pastetext}, followed by ${paste}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",
-numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",
-graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
+CKEDITOR.plugins.setLang("a11yhelp","th",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press 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.The focus will be moved back to the editing area upon activating the toolbar button."},
+{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{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:"คำสั่งสำหรับตัวเอียง",legend:"วาง ${italic}"},{name:"คำสั่งสำหรับขีดเส้นใต้",legend:"วาง ${underline}"},{name:"คำสั่งสำหรับลิงก์",legend:"วาง ${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}"},{name:" Paste as plain text",legend:"Press ${pastetext}",legendEdge:"Press ${pastetext}, followed by ${paste}"}]}],tab:"Tab",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",
+leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",
+f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"});
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/tt.js b/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/tt.js
index a6b51b13f42f..42f10d0eaa71 100644
--- a/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/tt.js
+++ b/core/assets/vendor/ckeditor/plugins/a11yhelp/dialogs/lang/tt.js
@@ -2,10 +2,10 @@
  Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.plugins.setLang("a11yhelp","tt",{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 the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},
-{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:"Курсив",legend:"${italic} басыгыз"},{name:"Астына сызылган",legend:"${underline} басыгыз"},
-{name:"Сылталама",legend:"${link} басыгыз"},{name:" Toolbar Collapse command",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:" Accessibility Help",legend:"${a11yHelp} басыгыз"},{name:" Paste as plain text",legend:"Press ${pastetext}",legendEdge:"Press ${pastetext}, followed by ${paste}"}]}],tab:"Tab",pause:"Тыныш",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",leftArrow:"Сул якка ук",upArrow:"Өскә таба ук",rightArrow:"Уң якка ук",downArrow:"Аска таба ук",insert:"Өстәү",leftWindowKey:"Сул Windows төймəсе",rightWindowKey:"Уң Windows төймəсе",selectKey:"Select төймəсе",numpad0:"Numpad 0",
-numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Тапкырлау",add:"Кушу",subtract:"Алу",decimalPoint:"Унарлы нокта",divide:"Бүлү",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Нокталы өтер",equalSign:"Тигезлек билгесе",comma:"Өтер",dash:"Сызык",period:"Дәрәҗә",
-forwardSlash:"Кыек сызык",graveAccent:"Гравис",openBracket:"Җәя ачу",backSlash:"Кире кыек сызык",closeBracket:"Җәя ябу",singleQuote:"Бер иңле куштырнаклар"});
\ No newline at end of file
+CKEDITOR.plugins.setLang("a11yhelp","tt",{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.The focus will be moved back to the editing area upon activating the toolbar button."},
+{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively."},{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:"Курсив",legend:"${italic} басыгыз"},{name:"Астына сызылган",legend:"${underline} басыгыз"},{name:"Сылталама",legend:"${link} басыгыз"},{name:" Toolbar Collapse command",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:" Accessibility Help",legend:"${a11yHelp} басыгыз"},{name:" Paste as plain text",legend:"Press ${pastetext}",legendEdge:"Press ${pastetext}, followed by ${paste}"}]}],tab:"Tab",pause:"Тыныш",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",
+leftArrow:"Сул якка ук",upArrow:"Өскә таба ук",rightArrow:"Уң якка ук",downArrow:"Аска таба ук",insert:"Өстәү",leftWindowKey:"Сул Windows төймəсе",rightWindowKey:"Уң Windows төймəсе",selectKey:"Select төймəсе",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Тапкырлау",add:"Кушу",subtract:"Алу",decimalPoint:"Унарлы нокта",divide:"Бүлү",f1:"F1",f2:"F2",
+f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Нокталы өтер",equalSign:"Тигезлек билгесе",comma:"Өтер",dash:"Сызык",period:"Дәрәҗә",forwardSlash:"Кыек сызык",graveAccent:"Гравис",openBracket:"Җәя ачу",backSlash:"Кире кыек сызык",closeBracket:"Җәя ябу",singleQuote:"Бер иңле куштырнаклар"});
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/id.js b/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/id.js
index f2c02cacd3f4..a52221961c83 100644
--- a/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/id.js
+++ b/core/assets/vendor/ckeditor/plugins/specialchar/dialogs/lang/id.js
@@ -2,12 +2,12 @@
  Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-CKEDITOR.plugins.setLang("specialchar","id",{euro:"Tanda 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:"Tanda Yen",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Tanda Hak Cipta",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark",
-not:"Not sign",reg:"Tanda Telah Terdaftar",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
+CKEDITOR.plugins.setLang("specialchar","id",{euro:"Tanda Euro",lsquo:"Tanda kutip tunggal kiri",rsquo:"Tanda kutip tunggal kanan",ldquo:"Tanda kutip ganda kiri",rdquo:"Tanda kutip ganda kanan",ndash:"Tanda hubung",mdash:"Sisipan",iexcl:"Tanda seru terbalik",cent:"Tanda cent",pound:"Tanda pound",curren:"Tanda mata uang",yen:"Tanda Yen",brvbar:"Broken bar",sect:"Penanda bagian",uml:"Diaeresis",copy:"Tanda Hak Cipta",ordf:"Indikator ordinal feminin",laquo:"Tanda kutip sudut ganda mengarah ke kiri",not:"Bukan tanda",
+reg:"Tanda Telah Terdaftar",macr:"Garis makron",deg:"Tanda derajat",sup2:"Superskrip dua",sup3:"Superskrip tiga",acute:"Aksen akut",micro:"Tanda mikro",para:"Tanda Pilcrow",middot:"Titik tengah",cedil:"Cedilla",sup1:"Superskrip satu",ordm:"Indikator ordinal maskulin",raquo:"Tanda kutip sudut ganda menunjuk ke kanan",frac14:"Bilangan Pecahan seperempat",frac12:"Bilangan Pecahan setengah",frac34:"Bilangan Pecahan tigaperempat",iquest:"Tanda baca terbalik",Agrave:"Huruf kapital Latin A dengan aksen grave",
+Aacute:"Huruf kapital Latin A dengan aksen acute",Acirc:"Huruf kapital Latin A dengan circumflex",Atilde:"Huruf kapital Latin A dengan tilde",Auml:"Huruf kapital Latin A dengan diaeresis",Aring:"Huruf kapital Latin A dengan cincin di atas",AElig:"huruf kapital latin Æ",Ccedil:"Huruf kapital latin C dengan cedilla",Egrave:"Huruf kapital Latin E dengan aksen grave",Eacute:"Huruf kapital Latin E dengan aksen acute",Ecirc:"Huruf kapital Latin E dengan 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:"Tanda perkalian",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:"Tanda bagi",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/assets/vendor/ckeditor/skins/moono-lisa/dialog.css b/core/assets/vendor/ckeditor/skins/moono-lisa/dialog.css
index a84955c01768..c1fe4f0b848e 100644
--- a/core/assets/vendor/ckeditor/skins/moono-lisa/dialog.css
+++ b/core/assets/vendor/ckeditor/skins/moono-lisa/dialog.css
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#fff}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:12px;cursor:move;position:relative;color:#484848;border-bottom:1px solid #d1d1d1;padding:12px 19px 12px 12px;background:#f8f8f8;letter-spacing:.3px}.cke_dialog_spinner{border-radius:50%;width:12px;height:12px;overflow:hidden;text-indent:-9999em;border:2px solid rgba(102,102,102,0.2);border-left-color:rgba(102,102,102,1);-webkit-animation:dialog_spinner 1s infinite linear;animation:dialog_spinner 1s infinite linear}.cke_browser_ie8 .cke_dialog_spinner,.cke_browser_ie9 .cke_dialog_spinner{background:url(images/spinner.gif) center top no-repeat;width:16px;height:16px;border:0}@-webkit-keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:43px;border-top:1px solid #d1d1d1}.cke_dialog_contents_body{overflow:auto;padding:9px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.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:33px;display:inline-block;margin:9px 0 0;position:absolute;z-index:2;left:11px}.cke_rtl .cke_dialog_tabs{left:auto;right:11px}a.cke_dialog_tab{height:25px;padding:4px 8px;display:inline-block;cursor:pointer;line-height:26px;outline:0;color:#484848;border:1px solid #d1d1d1;border-radius:3px 3px 0 0;background:#f8f8f8;min-width:90px;text-align:center;margin-left:-1px;letter-spacing:.3px}a.cke_dialog_tab:hover{background-color:#fff}a.cke_dialog_tab:focus{border:2px solid #139ff7;border-bottom-color:#d1d1d1;padding:3px 7px;position:relative;z-index:1}a.cke_dialog_tab_selected{background:#fff;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover,a.cke_dialog_tab_selected:focus{border-bottom-color:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab:focus,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}a.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:16px;width:16px;top:11px;z-index:5;opacity:.7;filter:alpha(opacity = 70)}.cke_rtl .cke_dialog_close_button{left:12px}.cke_ltr .cke_dialog_close_button{right:12px}.cke_hc a.cke_dialog_close_button{background-image:none}.cke_hidpi a.cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}a.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}a.cke_dialog_close_button span{display:none}.cke_hc a.cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}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%;margin-top:12px}.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_tel,.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,input.cke_dialog_ui_input_tel,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #bcbcbc;padding:4px 6px;outline:0;width:100%;*width:95%;box-sizing:border-box;border-radius:2px;min-height:28px;margin-left:1px}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,input.cke_dialog_ui_input_tel:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,input.cke_dialog_ui_input_tel:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:2px solid #139ff7}input.cke_dialog_ui_input_text:focus{padding-left:5px}textarea.cke_dialog_ui_input_textarea:focus{padding:3px 5px}select.cke_dialog_ui_input_select:focus{margin:0;width:100%!important}input.cke_dialog_ui_checkbox_input,input.cke_dialog_ui_radio_input{margin-left:1px;margin-right:2px}input.cke_dialog_ui_checkbox_input:focus,input.cke_dialog_ui_checkbox_input:active,input.cke_dialog_ui_radio_input:focus,input.cke_dialog_ui_radio_input:active{border:0;outline:2px solid #139ff7}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 1px;margin:0;text-align:center;color:#484848;vertical-align:middle;cursor:pointer;border:1px solid #bcbcbc;border-radius:2px;background:#f8f8f8;letter-spacing:.3px;line-height:18px;box-sizing:border-box}.cke_hc a.cke_dialog_ui_button{border-width:3px}span.cke_dialog_ui_button{padding:0 10px;cursor:pointer}a.cke_dialog_ui_button:hover{background:#fff}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border:2px solid #139ff7;outline:0;padding:3px 0}.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}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;background:#09863e;border:1px solid #09863e}.cke_hc a.cke_dialog_ui_button{border:3px solid #bcbcbc}a.cke_dialog_ui_button_ok:hover{background:#53aa78;border-color:#53aa78}a.cke_dialog_ui_button_ok:focus{box-shadow:inset 0 0 0 2px #FFF}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#139ff7}.cke_hc a.cke_dialog_ui_button_ok:hover,.cke_hc a.cke_dialog_ui_button_ok:focus,.cke_hc a.cke_dialog_ui_button_ok:active{border-color:#484848}a.cke_dialog_ui_button_ok.cke_disabled{background:#d1d1d1;border-color:#d1d1d1;cursor:default}a.cke_dialog_ui_button_ok.cke_disabled span{cursor:default}.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:28px;line-height:28px;background-color:#fff;border:1px solid #bcbcbc;padding:3px 3px 3px 6px;outline:0;border-radius:2px;margin:0 1px;box-sizing:border-box;width:calc(100% - 2px)!important}.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_ui_labeled_label{margin-left:1px}.cke_dialog .cke_dark_background{background-color:transparent}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked,.cke_dialog a.cke_btn_reset{margin:2px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_over,.cke_dialog a.cke_btn_locked:hover,.cke_dialog a.cke_btn_locked:focus,.cke_dialog a.cke_btn_locked:active,.cke_dialog a.cke_btn_unlocked:hover,.cke_dialog a.cke_btn_unlocked:focus,.cke_dialog a.cke_btn_unlocked:active,.cke_dialog a.cke_btn_reset:hover,.cke_dialog a.cke_btn_reset:focus,.cke_dialog a.cke_btn_reset:active{cursor:pointer;outline:0;margin:0;border:2px solid #139ff7}.cke_dialog fieldset{border:1px solid #bcbcbc}.cke_dialog fieldset legend{padding:0 6px}.cke_dialog_ui_checkbox,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox{display:inline-block}.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox{padding-top:5px}.cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input,.cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input+label,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input+label{vertical-align:middle}.cke_dialog .ImagePreviewBox{border:1px ridge #bcbcbc;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:1px solid #bcbcbc;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;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;cursor:default;letter-spacing:.3px}.cke_dialog_body label+.cke_dialog_ui_labeled_content{margin-top:2px}.cke_dialog_contents_body .cke_dialog_ui_text,.cke_dialog_contents_body .cke_dialog_ui_select,.cke_dialog_contents_body .cke_dialog_ui_hbox_last>a.cke_dialog_ui_button{margin-top:4px}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:2px 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_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_dialog_contents_body .cke_accessibility_legend{margin:2px 7px 2px 2px}.cke_dialog_contents_body .cke_accessibility_legend:focus,.cke_dialog_contents_body .cke_accessibility_legend:active{outline:0;border:2px solid #139ff7;margin:0 5px 0 0}.cke_dialog_contents_body input[type=file]:focus,.cke_dialog_contents_body input[type=file]:active{border:2px solid #139ff7}.cke_dialog_find_fieldset{margin-top:10px!important}.cke_dialog_image_ratiolock{margin-top:52px!important}.cke_dialog_forms_select_order label.cke_dialog_ui_labeled_label{margin-left:0}.cke_dialog_forms_select_order div.cke_dialog_ui_input_select{width:100%}.cke_dialog_forms_select_order_txtsize .cke_dialog_ui_hbox_last{padding-top:4px}.cke_dialog_image_url .cke_dialog_ui_hbox_last,.cke_dialog_flash_url .cke_dialog_ui_hbox_last{vertical-align:bottom}a.cke_dialog_ui_button.cke_dialog_image_browse{margin-top:10px}.cke_dialog_contents_body .cke_tpl_list{border:#bcbcbc 1px solid;margin:1px}.cke_dialog_contents_body .cke_tpl_list:focus,.cke_dialog_contents_body .cke_tpl_list:active{outline:0;margin:0;border:2px solid #139ff7}.cke_dialog_contents_body .cke_tpl_list a:focus,.cke_dialog_contents_body .cke_tpl_list a:active{outline:0}.cke_dialog_contents_body .cke_tpl_list a:focus .cke_tpl_item,.cke_dialog_contents_body .cke_tpl_list a:active .cke_tpl_item{border:2px solid #139ff7;padding:6px}
\ No newline at end of file
+.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#fff}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:12px;cursor:move;position:relative;color:#484848;border-bottom:1px solid #d1d1d1;padding:12px 19px 12px 12px;background:#f8f8f8;letter-spacing:.3px}.cke_dialog_spinner{border-radius:50%;width:12px;height:12px;overflow:hidden;text-indent:-9999em;border:2px solid rgba(102,102,102,0.2);border-left-color:rgba(102,102,102,1);-webkit-animation:dialog_spinner 1s infinite linear;animation:dialog_spinner 1s infinite linear}.cke_browser_ie8 .cke_dialog_spinner,.cke_browser_ie9 .cke_dialog_spinner{background:url(images/spinner.gif) center top no-repeat;width:16px;height:16px;border:0}@-webkit-keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:43px;border-top:1px solid #d1d1d1}.cke_dialog_contents_body{overflow:auto;padding:9px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.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:33px;display:inline-block;margin:9px 0 0;position:absolute;z-index:2;left:11px}.cke_rtl .cke_dialog_tabs{left:auto;right:11px}a.cke_dialog_tab{height:25px;padding:4px 8px;display:inline-block;cursor:pointer;line-height:26px;outline:0;color:#484848;border:1px solid #d1d1d1;border-radius:3px 3px 0 0;background:#f8f8f8;min-width:90px;text-align:center;margin-left:-1px;letter-spacing:.3px}a.cke_dialog_tab:hover{background-color:#fff}a.cke_dialog_tab:focus{border:2px solid #139ff7;border-bottom-color:#d1d1d1;padding:3px 7px;position:relative;z-index:1}a.cke_dialog_tab_selected{background:#fff;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover,a.cke_dialog_tab_selected:focus{border-bottom-color:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab:focus,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}a.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:16px;width:16px;top:11px;z-index:5;opacity:.7;filter:alpha(opacity = 70)}.cke_rtl .cke_dialog_close_button{left:12px}.cke_ltr .cke_dialog_close_button{right:12px}.cke_hc a.cke_dialog_close_button{background-image:none}.cke_hidpi a.cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}a.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}a.cke_dialog_close_button span{display:none}.cke_hc a.cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}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%;margin-top:12px}.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_tel,.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,input.cke_dialog_ui_input_tel,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #bcbcbc;padding:4px 6px;outline:0;width:100%;*width:95%;box-sizing:border-box;border-radius:2px;min-height:28px;margin-left:1px}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,input.cke_dialog_ui_input_tel:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,input.cke_dialog_ui_input_tel:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:2px solid #139ff7}input.cke_dialog_ui_input_text:focus{padding-left:5px}textarea.cke_dialog_ui_input_textarea:focus{padding:3px 5px}select.cke_dialog_ui_input_select:focus{margin:0;width:100%!important}input.cke_dialog_ui_checkbox_input,input.cke_dialog_ui_radio_input{margin-left:1px;margin-right:2px}input.cke_dialog_ui_checkbox_input:focus,input.cke_dialog_ui_checkbox_input:active,input.cke_dialog_ui_radio_input:focus,input.cke_dialog_ui_radio_input:active{border:0;outline:2px solid #139ff7}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 1px;margin:0;text-align:center;color:#484848;vertical-align:middle;cursor:pointer;border:1px solid #bcbcbc;border-radius:2px;background:#f8f8f8;letter-spacing:.3px;line-height:18px;box-sizing:border-box}.cke_hc a.cke_dialog_ui_button{border-width:3px}span.cke_dialog_ui_button{padding:0 10px;cursor:pointer}a.cke_dialog_ui_button:hover{background:#fff}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border:2px solid #139ff7;outline:0;padding:3px 0}.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}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;background:#09863e;border:1px solid #09863e}.cke_hc a.cke_dialog_ui_button{border:1px solid #bcbcbc}a.cke_dialog_ui_button_ok:hover{background:#53aa78;border-color:#53aa78}a.cke_dialog_ui_button_ok:focus{box-shadow:inset 0 0 0 2px #FFF}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#139ff7}.cke_hc a.cke_dialog_ui_button_ok:hover,.cke_hc a.cke_dialog_ui_button_ok:focus,.cke_hc a.cke_dialog_ui_button_ok:active{border-color:#484848}a.cke_dialog_ui_button_ok.cke_disabled{background:#d1d1d1;border-color:#d1d1d1;cursor:default}a.cke_dialog_ui_button_ok.cke_disabled span{cursor:default}.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:28px;line-height:28px;background-color:#fff;border:1px solid #bcbcbc;padding:3px 3px 3px 6px;outline:0;border-radius:2px;margin:0 1px;box-sizing:border-box;width:calc(100% - 2px)!important}.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_ui_labeled_label{margin-left:1px}.cke_dialog_ui_labeled_required{font-weight:bold;font-size:1.2em}.cke_dialog .cke_dark_background{background-color:transparent}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked,.cke_dialog a.cke_btn_reset{margin:2px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_over,.cke_dialog a.cke_btn_locked:hover,.cke_dialog a.cke_btn_locked:focus,.cke_dialog a.cke_btn_locked:active,.cke_dialog a.cke_btn_unlocked:hover,.cke_dialog a.cke_btn_unlocked:focus,.cke_dialog a.cke_btn_unlocked:active,.cke_dialog a.cke_btn_reset:hover,.cke_dialog a.cke_btn_reset:focus,.cke_dialog a.cke_btn_reset:active{cursor:pointer;outline:0;margin:0;border:2px solid #139ff7}.cke_dialog fieldset{border:1px solid #bcbcbc}.cke_dialog fieldset legend{padding:0 6px}.cke_dialog_ui_checkbox,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox{display:inline-block}.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox{padding-top:5px}.cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input,.cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input+label,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input+label{vertical-align:middle}.cke_dialog .ImagePreviewBox{border:1px ridge #bcbcbc;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 .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;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;cursor:default;letter-spacing:.3px}.cke_dialog_body label+.cke_dialog_ui_labeled_content{margin-top:2px}.cke_dialog_contents_body .cke_dialog_ui_text,.cke_dialog_contents_body .cke_dialog_ui_select,.cke_dialog_contents_body .cke_dialog_ui_hbox_last>a.cke_dialog_ui_button{margin-top:4px}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:2px 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_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_dialog_contents_body .cke_accessibility_legend{margin:2px 7px 2px 2px}.cke_dialog_contents_body .cke_accessibility_legend:focus,.cke_dialog_contents_body .cke_accessibility_legend:active{outline:0;border:2px solid #139ff7;margin:0 5px 0 0}.cke_dialog_contents_body input[type=file]:focus,.cke_dialog_contents_body input[type=file]:active{border:2px solid #139ff7}.cke_dialog_find_fieldset{margin-top:10px!important}.cke_dialog_image_ratiolock{margin-top:52px!important}.cke_dialog_forms_select_order label.cke_dialog_ui_labeled_label{margin-left:0}.cke_dialog_forms_select_order div.cke_dialog_ui_input_select{width:100%}.cke_dialog_forms_select_order_txtsize .cke_dialog_ui_hbox_last{padding-top:4px}.cke_dialog_image_url .cke_dialog_ui_hbox_last{vertical-align:bottom}a.cke_dialog_ui_button.cke_dialog_image_browse{margin-top:10px}.cke_dialog_contents_body .cke_tpl_list{border:#bcbcbc 1px solid;margin:1px}.cke_dialog_contents_body .cke_tpl_list:focus,.cke_dialog_contents_body .cke_tpl_list:active{outline:0;margin:0;border:2px solid #139ff7}.cke_dialog_contents_body .cke_tpl_list a:focus,.cke_dialog_contents_body .cke_tpl_list a:active{outline:0}.cke_dialog_contents_body .cke_tpl_list a:focus .cke_tpl_item,.cke_dialog_contents_body .cke_tpl_list a:active .cke_tpl_item{border:2px solid #139ff7;padding:6px}
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/skins/moono-lisa/dialog_ie.css b/core/assets/vendor/ckeditor/skins/moono-lisa/dialog_ie.css
index e170145c4c5c..6dd4af00cd7c 100644
--- a/core/assets/vendor/ckeditor/skins/moono-lisa/dialog_ie.css
+++ b/core/assets/vendor/ckeditor/skins/moono-lisa/dialog_ie.css
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#fff}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:12px;cursor:move;position:relative;color:#484848;border-bottom:1px solid #d1d1d1;padding:12px 19px 12px 12px;background:#f8f8f8;letter-spacing:.3px}.cke_dialog_spinner{border-radius:50%;width:12px;height:12px;overflow:hidden;text-indent:-9999em;border:2px solid rgba(102,102,102,0.2);border-left-color:rgba(102,102,102,1);-webkit-animation:dialog_spinner 1s infinite linear;animation:dialog_spinner 1s infinite linear}.cke_browser_ie8 .cke_dialog_spinner,.cke_browser_ie9 .cke_dialog_spinner{background:url(images/spinner.gif) center top no-repeat;width:16px;height:16px;border:0}@-webkit-keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:43px;border-top:1px solid #d1d1d1}.cke_dialog_contents_body{overflow:auto;padding:9px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.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:33px;display:inline-block;margin:9px 0 0;position:absolute;z-index:2;left:11px}.cke_rtl .cke_dialog_tabs{left:auto;right:11px}a.cke_dialog_tab{height:25px;padding:4px 8px;display:inline-block;cursor:pointer;line-height:26px;outline:0;color:#484848;border:1px solid #d1d1d1;border-radius:3px 3px 0 0;background:#f8f8f8;min-width:90px;text-align:center;margin-left:-1px;letter-spacing:.3px}a.cke_dialog_tab:hover{background-color:#fff}a.cke_dialog_tab:focus{border:2px solid #139ff7;border-bottom-color:#d1d1d1;padding:3px 7px;position:relative;z-index:1}a.cke_dialog_tab_selected{background:#fff;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover,a.cke_dialog_tab_selected:focus{border-bottom-color:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab:focus,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}a.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:16px;width:16px;top:11px;z-index:5;opacity:.7;filter:alpha(opacity = 70)}.cke_rtl .cke_dialog_close_button{left:12px}.cke_ltr .cke_dialog_close_button{right:12px}.cke_hc a.cke_dialog_close_button{background-image:none}.cke_hidpi a.cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}a.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}a.cke_dialog_close_button span{display:none}.cke_hc a.cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}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%;margin-top:12px}.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_tel,.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,input.cke_dialog_ui_input_tel,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #bcbcbc;padding:4px 6px;outline:0;width:100%;*width:95%;box-sizing:border-box;border-radius:2px;min-height:28px;margin-left:1px}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,input.cke_dialog_ui_input_tel:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,input.cke_dialog_ui_input_tel:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:2px solid #139ff7}input.cke_dialog_ui_input_text:focus{padding-left:5px}textarea.cke_dialog_ui_input_textarea:focus{padding:3px 5px}select.cke_dialog_ui_input_select:focus{margin:0;width:100%!important}input.cke_dialog_ui_checkbox_input,input.cke_dialog_ui_radio_input{margin-left:1px;margin-right:2px}input.cke_dialog_ui_checkbox_input:focus,input.cke_dialog_ui_checkbox_input:active,input.cke_dialog_ui_radio_input:focus,input.cke_dialog_ui_radio_input:active{border:0;outline:2px solid #139ff7}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 1px;margin:0;text-align:center;color:#484848;vertical-align:middle;cursor:pointer;border:1px solid #bcbcbc;border-radius:2px;background:#f8f8f8;letter-spacing:.3px;line-height:18px;box-sizing:border-box}.cke_hc a.cke_dialog_ui_button{border-width:3px}span.cke_dialog_ui_button{padding:0 10px;cursor:pointer}a.cke_dialog_ui_button:hover{background:#fff}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border:2px solid #139ff7;outline:0;padding:3px 0}.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}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;background:#09863e;border:1px solid #09863e}.cke_hc a.cke_dialog_ui_button{border:3px solid #bcbcbc}a.cke_dialog_ui_button_ok:hover{background:#53aa78;border-color:#53aa78}a.cke_dialog_ui_button_ok:focus{box-shadow:inset 0 0 0 2px #FFF}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#139ff7}.cke_hc a.cke_dialog_ui_button_ok:hover,.cke_hc a.cke_dialog_ui_button_ok:focus,.cke_hc a.cke_dialog_ui_button_ok:active{border-color:#484848}a.cke_dialog_ui_button_ok.cke_disabled{background:#d1d1d1;border-color:#d1d1d1;cursor:default}a.cke_dialog_ui_button_ok.cke_disabled span{cursor:default}.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:28px;line-height:28px;background-color:#fff;border:1px solid #bcbcbc;padding:3px 3px 3px 6px;outline:0;border-radius:2px;margin:0 1px;box-sizing:border-box;width:calc(100% - 2px)!important}.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_ui_labeled_label{margin-left:1px}.cke_dialog .cke_dark_background{background-color:transparent}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked,.cke_dialog a.cke_btn_reset{margin:2px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_over,.cke_dialog a.cke_btn_locked:hover,.cke_dialog a.cke_btn_locked:focus,.cke_dialog a.cke_btn_locked:active,.cke_dialog a.cke_btn_unlocked:hover,.cke_dialog a.cke_btn_unlocked:focus,.cke_dialog a.cke_btn_unlocked:active,.cke_dialog a.cke_btn_reset:hover,.cke_dialog a.cke_btn_reset:focus,.cke_dialog a.cke_btn_reset:active{cursor:pointer;outline:0;margin:0;border:2px solid #139ff7}.cke_dialog fieldset{border:1px solid #bcbcbc}.cke_dialog fieldset legend{padding:0 6px}.cke_dialog_ui_checkbox,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox{display:inline-block}.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox{padding-top:5px}.cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input,.cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input+label,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input+label{vertical-align:middle}.cke_dialog .ImagePreviewBox{border:1px ridge #bcbcbc;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:1px solid #bcbcbc;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;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;cursor:default;letter-spacing:.3px}.cke_dialog_body label+.cke_dialog_ui_labeled_content{margin-top:2px}.cke_dialog_contents_body .cke_dialog_ui_text,.cke_dialog_contents_body .cke_dialog_ui_select,.cke_dialog_contents_body .cke_dialog_ui_hbox_last>a.cke_dialog_ui_button{margin-top:4px}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:2px 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_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_dialog_contents_body .cke_accessibility_legend{margin:2px 7px 2px 2px}.cke_dialog_contents_body .cke_accessibility_legend:focus,.cke_dialog_contents_body .cke_accessibility_legend:active{outline:0;border:2px solid #139ff7;margin:0 5px 0 0}.cke_dialog_contents_body input[type=file]:focus,.cke_dialog_contents_body input[type=file]:active{border:2px solid #139ff7}.cke_dialog_find_fieldset{margin-top:10px!important}.cke_dialog_image_ratiolock{margin-top:52px!important}.cke_dialog_forms_select_order label.cke_dialog_ui_labeled_label{margin-left:0}.cke_dialog_forms_select_order div.cke_dialog_ui_input_select{width:100%}.cke_dialog_forms_select_order_txtsize .cke_dialog_ui_hbox_last{padding-top:4px}.cke_dialog_image_url .cke_dialog_ui_hbox_last,.cke_dialog_flash_url .cke_dialog_ui_hbox_last{vertical-align:bottom}a.cke_dialog_ui_button.cke_dialog_image_browse{margin-top:10px}.cke_dialog_contents_body .cke_tpl_list{border:#bcbcbc 1px solid;margin:1px}.cke_dialog_contents_body .cke_tpl_list:focus,.cke_dialog_contents_body .cke_tpl_list:active{outline:0;margin:0;border:2px solid #139ff7}.cke_dialog_contents_body .cke_tpl_list a:focus,.cke_dialog_contents_body .cke_tpl_list a:active{outline:0}.cke_dialog_contents_body .cke_tpl_list a:focus .cke_tpl_item,.cke_dialog_contents_body .cke_tpl_list a:active .cke_tpl_item{border:2px solid #139ff7;padding:6px}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password,.cke_rtl input.cke_dialog_ui_input_tel{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password,.cke_rtl div.cke_dialog_ui_input_tel{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_tel,.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
+.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#fff}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:12px;cursor:move;position:relative;color:#484848;border-bottom:1px solid #d1d1d1;padding:12px 19px 12px 12px;background:#f8f8f8;letter-spacing:.3px}.cke_dialog_spinner{border-radius:50%;width:12px;height:12px;overflow:hidden;text-indent:-9999em;border:2px solid rgba(102,102,102,0.2);border-left-color:rgba(102,102,102,1);-webkit-animation:dialog_spinner 1s infinite linear;animation:dialog_spinner 1s infinite linear}.cke_browser_ie8 .cke_dialog_spinner,.cke_browser_ie9 .cke_dialog_spinner{background:url(images/spinner.gif) center top no-repeat;width:16px;height:16px;border:0}@-webkit-keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:43px;border-top:1px solid #d1d1d1}.cke_dialog_contents_body{overflow:auto;padding:9px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.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:33px;display:inline-block;margin:9px 0 0;position:absolute;z-index:2;left:11px}.cke_rtl .cke_dialog_tabs{left:auto;right:11px}a.cke_dialog_tab{height:25px;padding:4px 8px;display:inline-block;cursor:pointer;line-height:26px;outline:0;color:#484848;border:1px solid #d1d1d1;border-radius:3px 3px 0 0;background:#f8f8f8;min-width:90px;text-align:center;margin-left:-1px;letter-spacing:.3px}a.cke_dialog_tab:hover{background-color:#fff}a.cke_dialog_tab:focus{border:2px solid #139ff7;border-bottom-color:#d1d1d1;padding:3px 7px;position:relative;z-index:1}a.cke_dialog_tab_selected{background:#fff;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover,a.cke_dialog_tab_selected:focus{border-bottom-color:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab:focus,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}a.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:16px;width:16px;top:11px;z-index:5;opacity:.7;filter:alpha(opacity = 70)}.cke_rtl .cke_dialog_close_button{left:12px}.cke_ltr .cke_dialog_close_button{right:12px}.cke_hc a.cke_dialog_close_button{background-image:none}.cke_hidpi a.cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}a.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}a.cke_dialog_close_button span{display:none}.cke_hc a.cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}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%;margin-top:12px}.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_tel,.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,input.cke_dialog_ui_input_tel,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #bcbcbc;padding:4px 6px;outline:0;width:100%;*width:95%;box-sizing:border-box;border-radius:2px;min-height:28px;margin-left:1px}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,input.cke_dialog_ui_input_tel:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,input.cke_dialog_ui_input_tel:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:2px solid #139ff7}input.cke_dialog_ui_input_text:focus{padding-left:5px}textarea.cke_dialog_ui_input_textarea:focus{padding:3px 5px}select.cke_dialog_ui_input_select:focus{margin:0;width:100%!important}input.cke_dialog_ui_checkbox_input,input.cke_dialog_ui_radio_input{margin-left:1px;margin-right:2px}input.cke_dialog_ui_checkbox_input:focus,input.cke_dialog_ui_checkbox_input:active,input.cke_dialog_ui_radio_input:focus,input.cke_dialog_ui_radio_input:active{border:0;outline:2px solid #139ff7}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 1px;margin:0;text-align:center;color:#484848;vertical-align:middle;cursor:pointer;border:1px solid #bcbcbc;border-radius:2px;background:#f8f8f8;letter-spacing:.3px;line-height:18px;box-sizing:border-box}.cke_hc a.cke_dialog_ui_button{border-width:3px}span.cke_dialog_ui_button{padding:0 10px;cursor:pointer}a.cke_dialog_ui_button:hover{background:#fff}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border:2px solid #139ff7;outline:0;padding:3px 0}.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}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;background:#09863e;border:1px solid #09863e}.cke_hc a.cke_dialog_ui_button{border:1px solid #bcbcbc}a.cke_dialog_ui_button_ok:hover{background:#53aa78;border-color:#53aa78}a.cke_dialog_ui_button_ok:focus{box-shadow:inset 0 0 0 2px #FFF}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#139ff7}.cke_hc a.cke_dialog_ui_button_ok:hover,.cke_hc a.cke_dialog_ui_button_ok:focus,.cke_hc a.cke_dialog_ui_button_ok:active{border-color:#484848}a.cke_dialog_ui_button_ok.cke_disabled{background:#d1d1d1;border-color:#d1d1d1;cursor:default}a.cke_dialog_ui_button_ok.cke_disabled span{cursor:default}.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:28px;line-height:28px;background-color:#fff;border:1px solid #bcbcbc;padding:3px 3px 3px 6px;outline:0;border-radius:2px;margin:0 1px;box-sizing:border-box;width:calc(100% - 2px)!important}.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_ui_labeled_label{margin-left:1px}.cke_dialog_ui_labeled_required{font-weight:bold;font-size:1.2em}.cke_dialog .cke_dark_background{background-color:transparent}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked,.cke_dialog a.cke_btn_reset{margin:2px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_over,.cke_dialog a.cke_btn_locked:hover,.cke_dialog a.cke_btn_locked:focus,.cke_dialog a.cke_btn_locked:active,.cke_dialog a.cke_btn_unlocked:hover,.cke_dialog a.cke_btn_unlocked:focus,.cke_dialog a.cke_btn_unlocked:active,.cke_dialog a.cke_btn_reset:hover,.cke_dialog a.cke_btn_reset:focus,.cke_dialog a.cke_btn_reset:active{cursor:pointer;outline:0;margin:0;border:2px solid #139ff7}.cke_dialog fieldset{border:1px solid #bcbcbc}.cke_dialog fieldset legend{padding:0 6px}.cke_dialog_ui_checkbox,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox{display:inline-block}.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox{padding-top:5px}.cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input,.cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input+label,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input+label{vertical-align:middle}.cke_dialog .ImagePreviewBox{border:1px ridge #bcbcbc;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 .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;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;cursor:default;letter-spacing:.3px}.cke_dialog_body label+.cke_dialog_ui_labeled_content{margin-top:2px}.cke_dialog_contents_body .cke_dialog_ui_text,.cke_dialog_contents_body .cke_dialog_ui_select,.cke_dialog_contents_body .cke_dialog_ui_hbox_last>a.cke_dialog_ui_button{margin-top:4px}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:2px 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_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_dialog_contents_body .cke_accessibility_legend{margin:2px 7px 2px 2px}.cke_dialog_contents_body .cke_accessibility_legend:focus,.cke_dialog_contents_body .cke_accessibility_legend:active{outline:0;border:2px solid #139ff7;margin:0 5px 0 0}.cke_dialog_contents_body input[type=file]:focus,.cke_dialog_contents_body input[type=file]:active{border:2px solid #139ff7}.cke_dialog_find_fieldset{margin-top:10px!important}.cke_dialog_image_ratiolock{margin-top:52px!important}.cke_dialog_forms_select_order label.cke_dialog_ui_labeled_label{margin-left:0}.cke_dialog_forms_select_order div.cke_dialog_ui_input_select{width:100%}.cke_dialog_forms_select_order_txtsize .cke_dialog_ui_hbox_last{padding-top:4px}.cke_dialog_image_url .cke_dialog_ui_hbox_last{vertical-align:bottom}a.cke_dialog_ui_button.cke_dialog_image_browse{margin-top:10px}.cke_dialog_contents_body .cke_tpl_list{border:#bcbcbc 1px solid;margin:1px}.cke_dialog_contents_body .cke_tpl_list:focus,.cke_dialog_contents_body .cke_tpl_list:active{outline:0;margin:0;border:2px solid #139ff7}.cke_dialog_contents_body .cke_tpl_list a:focus,.cke_dialog_contents_body .cke_tpl_list a:active{outline:0}.cke_dialog_contents_body .cke_tpl_list a:focus .cke_tpl_item,.cke_dialog_contents_body .cke_tpl_list a:active .cke_tpl_item{border:2px solid #139ff7;padding:6px}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password,.cke_rtl input.cke_dialog_ui_input_tel{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password,.cke_rtl div.cke_dialog_ui_input_tel{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_tel,.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/assets/vendor/ckeditor/skins/moono-lisa/dialog_ie8.css b/core/assets/vendor/ckeditor/skins/moono-lisa/dialog_ie8.css
index 9294abae206f..c41203111161 100644
--- a/core/assets/vendor/ckeditor/skins/moono-lisa/dialog_ie8.css
+++ b/core/assets/vendor/ckeditor/skins/moono-lisa/dialog_ie8.css
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#fff}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:12px;cursor:move;position:relative;color:#484848;border-bottom:1px solid #d1d1d1;padding:12px 19px 12px 12px;background:#f8f8f8;letter-spacing:.3px}.cke_dialog_spinner{border-radius:50%;width:12px;height:12px;overflow:hidden;text-indent:-9999em;border:2px solid rgba(102,102,102,0.2);border-left-color:rgba(102,102,102,1);-webkit-animation:dialog_spinner 1s infinite linear;animation:dialog_spinner 1s infinite linear}.cke_browser_ie8 .cke_dialog_spinner,.cke_browser_ie9 .cke_dialog_spinner{background:url(images/spinner.gif) center top no-repeat;width:16px;height:16px;border:0}@-webkit-keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:43px;border-top:1px solid #d1d1d1}.cke_dialog_contents_body{overflow:auto;padding:9px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.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:33px;display:inline-block;margin:9px 0 0;position:absolute;z-index:2;left:11px}.cke_rtl .cke_dialog_tabs{left:auto;right:11px}a.cke_dialog_tab{height:25px;padding:4px 8px;display:inline-block;cursor:pointer;line-height:26px;outline:0;color:#484848;border:1px solid #d1d1d1;border-radius:3px 3px 0 0;background:#f8f8f8;min-width:90px;text-align:center;margin-left:-1px;letter-spacing:.3px}a.cke_dialog_tab:hover{background-color:#fff}a.cke_dialog_tab:focus{border:2px solid #139ff7;border-bottom-color:#d1d1d1;padding:3px 7px;position:relative;z-index:1}a.cke_dialog_tab_selected{background:#fff;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover,a.cke_dialog_tab_selected:focus{border-bottom-color:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab:focus,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}a.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:16px;width:16px;top:11px;z-index:5;opacity:.7;filter:alpha(opacity = 70)}.cke_rtl .cke_dialog_close_button{left:12px}.cke_ltr .cke_dialog_close_button{right:12px}.cke_hc a.cke_dialog_close_button{background-image:none}.cke_hidpi a.cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}a.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}a.cke_dialog_close_button span{display:none}.cke_hc a.cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}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%;margin-top:12px}.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_tel,.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,input.cke_dialog_ui_input_tel,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #bcbcbc;padding:4px 6px;outline:0;width:100%;*width:95%;box-sizing:border-box;border-radius:2px;min-height:28px;margin-left:1px}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,input.cke_dialog_ui_input_tel:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,input.cke_dialog_ui_input_tel:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:2px solid #139ff7}input.cke_dialog_ui_input_text:focus{padding-left:5px}textarea.cke_dialog_ui_input_textarea:focus{padding:3px 5px}select.cke_dialog_ui_input_select:focus{margin:0;width:100%!important}input.cke_dialog_ui_checkbox_input,input.cke_dialog_ui_radio_input{margin-left:1px;margin-right:2px}input.cke_dialog_ui_checkbox_input:focus,input.cke_dialog_ui_checkbox_input:active,input.cke_dialog_ui_radio_input:focus,input.cke_dialog_ui_radio_input:active{border:0;outline:2px solid #139ff7}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 1px;margin:0;text-align:center;color:#484848;vertical-align:middle;cursor:pointer;border:1px solid #bcbcbc;border-radius:2px;background:#f8f8f8;letter-spacing:.3px;line-height:18px;box-sizing:border-box}.cke_hc a.cke_dialog_ui_button{border-width:3px}span.cke_dialog_ui_button{padding:0 10px;cursor:pointer}a.cke_dialog_ui_button:hover{background:#fff}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border:2px solid #139ff7;outline:0;padding:3px 0}.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}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;background:#09863e;border:1px solid #09863e}.cke_hc a.cke_dialog_ui_button{border:3px solid #bcbcbc}a.cke_dialog_ui_button_ok:hover{background:#53aa78;border-color:#53aa78}a.cke_dialog_ui_button_ok:focus{box-shadow:inset 0 0 0 2px #FFF}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#139ff7}.cke_hc a.cke_dialog_ui_button_ok:hover,.cke_hc a.cke_dialog_ui_button_ok:focus,.cke_hc a.cke_dialog_ui_button_ok:active{border-color:#484848}a.cke_dialog_ui_button_ok.cke_disabled{background:#d1d1d1;border-color:#d1d1d1;cursor:default}a.cke_dialog_ui_button_ok.cke_disabled span{cursor:default}.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:28px;line-height:28px;background-color:#fff;border:1px solid #bcbcbc;padding:3px 3px 3px 6px;outline:0;border-radius:2px;margin:0 1px;box-sizing:border-box;width:calc(100% - 2px)!important}.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_ui_labeled_label{margin-left:1px}.cke_dialog .cke_dark_background{background-color:transparent}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked,.cke_dialog a.cke_btn_reset{margin:2px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_over,.cke_dialog a.cke_btn_locked:hover,.cke_dialog a.cke_btn_locked:focus,.cke_dialog a.cke_btn_locked:active,.cke_dialog a.cke_btn_unlocked:hover,.cke_dialog a.cke_btn_unlocked:focus,.cke_dialog a.cke_btn_unlocked:active,.cke_dialog a.cke_btn_reset:hover,.cke_dialog a.cke_btn_reset:focus,.cke_dialog a.cke_btn_reset:active{cursor:pointer;outline:0;margin:0;border:2px solid #139ff7}.cke_dialog fieldset{border:1px solid #bcbcbc}.cke_dialog fieldset legend{padding:0 6px}.cke_dialog_ui_checkbox,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox{display:inline-block}.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox{padding-top:5px}.cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input,.cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input+label,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input+label{vertical-align:middle}.cke_dialog .ImagePreviewBox{border:1px ridge #bcbcbc;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:1px solid #bcbcbc;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;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;cursor:default;letter-spacing:.3px}.cke_dialog_body label+.cke_dialog_ui_labeled_content{margin-top:2px}.cke_dialog_contents_body .cke_dialog_ui_text,.cke_dialog_contents_body .cke_dialog_ui_select,.cke_dialog_contents_body .cke_dialog_ui_hbox_last>a.cke_dialog_ui_button{margin-top:4px}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:2px 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_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_dialog_contents_body .cke_accessibility_legend{margin:2px 7px 2px 2px}.cke_dialog_contents_body .cke_accessibility_legend:focus,.cke_dialog_contents_body .cke_accessibility_legend:active{outline:0;border:2px solid #139ff7;margin:0 5px 0 0}.cke_dialog_contents_body input[type=file]:focus,.cke_dialog_contents_body input[type=file]:active{border:2px solid #139ff7}.cke_dialog_find_fieldset{margin-top:10px!important}.cke_dialog_image_ratiolock{margin-top:52px!important}.cke_dialog_forms_select_order label.cke_dialog_ui_labeled_label{margin-left:0}.cke_dialog_forms_select_order div.cke_dialog_ui_input_select{width:100%}.cke_dialog_forms_select_order_txtsize .cke_dialog_ui_hbox_last{padding-top:4px}.cke_dialog_image_url .cke_dialog_ui_hbox_last,.cke_dialog_flash_url .cke_dialog_ui_hbox_last{vertical-align:bottom}a.cke_dialog_ui_button.cke_dialog_image_browse{margin-top:10px}.cke_dialog_contents_body .cke_tpl_list{border:#bcbcbc 1px solid;margin:1px}.cke_dialog_contents_body .cke_tpl_list:focus,.cke_dialog_contents_body .cke_tpl_list:active{outline:0;margin:0;border:2px solid #139ff7}.cke_dialog_contents_body .cke_tpl_list a:focus,.cke_dialog_contents_body .cke_tpl_list a:active{outline:0}.cke_dialog_contents_body .cke_tpl_list a:focus .cke_tpl_item,.cke_dialog_contents_body .cke_tpl_list a:active .cke_tpl_item{border:2px solid #139ff7;padding:6px}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password,.cke_rtl input.cke_dialog_ui_input_tel{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password,.cke_rtl div.cke_dialog_ui_input_tel{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_tel,.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{min-height:18px}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,input.cke_dialog_ui_input_tel,textarea.cke_dialog_ui_input_textarea{min-height:18px}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,input.cke_dialog_ui_input_tel:focus,textarea.cke_dialog_ui_input_textarea:focus{padding-top:4px;padding-bottom:2px}select.cke_dialog_ui_input_select{width:100%!important}select.cke_dialog_ui_input_select:focus{margin-left:1px;width:100%!important;padding-top:2px;padding-bottom:2px}
\ No newline at end of file
+.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#fff}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:12px;cursor:move;position:relative;color:#484848;border-bottom:1px solid #d1d1d1;padding:12px 19px 12px 12px;background:#f8f8f8;letter-spacing:.3px}.cke_dialog_spinner{border-radius:50%;width:12px;height:12px;overflow:hidden;text-indent:-9999em;border:2px solid rgba(102,102,102,0.2);border-left-color:rgba(102,102,102,1);-webkit-animation:dialog_spinner 1s infinite linear;animation:dialog_spinner 1s infinite linear}.cke_browser_ie8 .cke_dialog_spinner,.cke_browser_ie9 .cke_dialog_spinner{background:url(images/spinner.gif) center top no-repeat;width:16px;height:16px;border:0}@-webkit-keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:43px;border-top:1px solid #d1d1d1}.cke_dialog_contents_body{overflow:auto;padding:9px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.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:33px;display:inline-block;margin:9px 0 0;position:absolute;z-index:2;left:11px}.cke_rtl .cke_dialog_tabs{left:auto;right:11px}a.cke_dialog_tab{height:25px;padding:4px 8px;display:inline-block;cursor:pointer;line-height:26px;outline:0;color:#484848;border:1px solid #d1d1d1;border-radius:3px 3px 0 0;background:#f8f8f8;min-width:90px;text-align:center;margin-left:-1px;letter-spacing:.3px}a.cke_dialog_tab:hover{background-color:#fff}a.cke_dialog_tab:focus{border:2px solid #139ff7;border-bottom-color:#d1d1d1;padding:3px 7px;position:relative;z-index:1}a.cke_dialog_tab_selected{background:#fff;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover,a.cke_dialog_tab_selected:focus{border-bottom-color:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab:focus,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}a.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:16px;width:16px;top:11px;z-index:5;opacity:.7;filter:alpha(opacity = 70)}.cke_rtl .cke_dialog_close_button{left:12px}.cke_ltr .cke_dialog_close_button{right:12px}.cke_hc a.cke_dialog_close_button{background-image:none}.cke_hidpi a.cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}a.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}a.cke_dialog_close_button span{display:none}.cke_hc a.cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}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%;margin-top:12px}.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_tel,.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,input.cke_dialog_ui_input_tel,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #bcbcbc;padding:4px 6px;outline:0;width:100%;*width:95%;box-sizing:border-box;border-radius:2px;min-height:28px;margin-left:1px}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,input.cke_dialog_ui_input_tel:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,input.cke_dialog_ui_input_tel:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:2px solid #139ff7}input.cke_dialog_ui_input_text:focus{padding-left:5px}textarea.cke_dialog_ui_input_textarea:focus{padding:3px 5px}select.cke_dialog_ui_input_select:focus{margin:0;width:100%!important}input.cke_dialog_ui_checkbox_input,input.cke_dialog_ui_radio_input{margin-left:1px;margin-right:2px}input.cke_dialog_ui_checkbox_input:focus,input.cke_dialog_ui_checkbox_input:active,input.cke_dialog_ui_radio_input:focus,input.cke_dialog_ui_radio_input:active{border:0;outline:2px solid #139ff7}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 1px;margin:0;text-align:center;color:#484848;vertical-align:middle;cursor:pointer;border:1px solid #bcbcbc;border-radius:2px;background:#f8f8f8;letter-spacing:.3px;line-height:18px;box-sizing:border-box}.cke_hc a.cke_dialog_ui_button{border-width:3px}span.cke_dialog_ui_button{padding:0 10px;cursor:pointer}a.cke_dialog_ui_button:hover{background:#fff}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border:2px solid #139ff7;outline:0;padding:3px 0}.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}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;background:#09863e;border:1px solid #09863e}.cke_hc a.cke_dialog_ui_button{border:1px solid #bcbcbc}a.cke_dialog_ui_button_ok:hover{background:#53aa78;border-color:#53aa78}a.cke_dialog_ui_button_ok:focus{box-shadow:inset 0 0 0 2px #FFF}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#139ff7}.cke_hc a.cke_dialog_ui_button_ok:hover,.cke_hc a.cke_dialog_ui_button_ok:focus,.cke_hc a.cke_dialog_ui_button_ok:active{border-color:#484848}a.cke_dialog_ui_button_ok.cke_disabled{background:#d1d1d1;border-color:#d1d1d1;cursor:default}a.cke_dialog_ui_button_ok.cke_disabled span{cursor:default}.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:28px;line-height:28px;background-color:#fff;border:1px solid #bcbcbc;padding:3px 3px 3px 6px;outline:0;border-radius:2px;margin:0 1px;box-sizing:border-box;width:calc(100% - 2px)!important}.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_ui_labeled_label{margin-left:1px}.cke_dialog_ui_labeled_required{font-weight:bold;font-size:1.2em}.cke_dialog .cke_dark_background{background-color:transparent}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked,.cke_dialog a.cke_btn_reset{margin:2px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_over,.cke_dialog a.cke_btn_locked:hover,.cke_dialog a.cke_btn_locked:focus,.cke_dialog a.cke_btn_locked:active,.cke_dialog a.cke_btn_unlocked:hover,.cke_dialog a.cke_btn_unlocked:focus,.cke_dialog a.cke_btn_unlocked:active,.cke_dialog a.cke_btn_reset:hover,.cke_dialog a.cke_btn_reset:focus,.cke_dialog a.cke_btn_reset:active{cursor:pointer;outline:0;margin:0;border:2px solid #139ff7}.cke_dialog fieldset{border:1px solid #bcbcbc}.cke_dialog fieldset legend{padding:0 6px}.cke_dialog_ui_checkbox,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox{display:inline-block}.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox{padding-top:5px}.cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input,.cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input+label,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input+label{vertical-align:middle}.cke_dialog .ImagePreviewBox{border:1px ridge #bcbcbc;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 .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;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;cursor:default;letter-spacing:.3px}.cke_dialog_body label+.cke_dialog_ui_labeled_content{margin-top:2px}.cke_dialog_contents_body .cke_dialog_ui_text,.cke_dialog_contents_body .cke_dialog_ui_select,.cke_dialog_contents_body .cke_dialog_ui_hbox_last>a.cke_dialog_ui_button{margin-top:4px}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:2px 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_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_dialog_contents_body .cke_accessibility_legend{margin:2px 7px 2px 2px}.cke_dialog_contents_body .cke_accessibility_legend:focus,.cke_dialog_contents_body .cke_accessibility_legend:active{outline:0;border:2px solid #139ff7;margin:0 5px 0 0}.cke_dialog_contents_body input[type=file]:focus,.cke_dialog_contents_body input[type=file]:active{border:2px solid #139ff7}.cke_dialog_find_fieldset{margin-top:10px!important}.cke_dialog_image_ratiolock{margin-top:52px!important}.cke_dialog_forms_select_order label.cke_dialog_ui_labeled_label{margin-left:0}.cke_dialog_forms_select_order div.cke_dialog_ui_input_select{width:100%}.cke_dialog_forms_select_order_txtsize .cke_dialog_ui_hbox_last{padding-top:4px}.cke_dialog_image_url .cke_dialog_ui_hbox_last{vertical-align:bottom}a.cke_dialog_ui_button.cke_dialog_image_browse{margin-top:10px}.cke_dialog_contents_body .cke_tpl_list{border:#bcbcbc 1px solid;margin:1px}.cke_dialog_contents_body .cke_tpl_list:focus,.cke_dialog_contents_body .cke_tpl_list:active{outline:0;margin:0;border:2px solid #139ff7}.cke_dialog_contents_body .cke_tpl_list a:focus,.cke_dialog_contents_body .cke_tpl_list a:active{outline:0}.cke_dialog_contents_body .cke_tpl_list a:focus .cke_tpl_item,.cke_dialog_contents_body .cke_tpl_list a:active .cke_tpl_item{border:2px solid #139ff7;padding:6px}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password,.cke_rtl input.cke_dialog_ui_input_tel{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password,.cke_rtl div.cke_dialog_ui_input_tel{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_tel,.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{min-height:18px}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,input.cke_dialog_ui_input_tel,textarea.cke_dialog_ui_input_textarea{min-height:18px}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,input.cke_dialog_ui_input_tel:focus,textarea.cke_dialog_ui_input_textarea:focus{padding-top:4px;padding-bottom:2px}select.cke_dialog_ui_input_select{width:100%!important}select.cke_dialog_ui_input_select:focus{margin-left:1px;width:100%!important;padding-top:2px;padding-bottom:2px}
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/skins/moono-lisa/dialog_iequirks.css b/core/assets/vendor/ckeditor/skins/moono-lisa/dialog_iequirks.css
index 33314412be81..9afcbef6dbf4 100644
--- a/core/assets/vendor/ckeditor/skins/moono-lisa/dialog_iequirks.css
+++ b/core/assets/vendor/ckeditor/skins/moono-lisa/dialog_iequirks.css
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#fff}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:12px;cursor:move;position:relative;color:#484848;border-bottom:1px solid #d1d1d1;padding:12px 19px 12px 12px;background:#f8f8f8;letter-spacing:.3px}.cke_dialog_spinner{border-radius:50%;width:12px;height:12px;overflow:hidden;text-indent:-9999em;border:2px solid rgba(102,102,102,0.2);border-left-color:rgba(102,102,102,1);-webkit-animation:dialog_spinner 1s infinite linear;animation:dialog_spinner 1s infinite linear}.cke_browser_ie8 .cke_dialog_spinner,.cke_browser_ie9 .cke_dialog_spinner{background:url(images/spinner.gif) center top no-repeat;width:16px;height:16px;border:0}@-webkit-keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:43px;border-top:1px solid #d1d1d1}.cke_dialog_contents_body{overflow:auto;padding:9px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.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:33px;display:inline-block;margin:9px 0 0;position:absolute;z-index:2;left:11px}.cke_rtl .cke_dialog_tabs{left:auto;right:11px}a.cke_dialog_tab{height:25px;padding:4px 8px;display:inline-block;cursor:pointer;line-height:26px;outline:0;color:#484848;border:1px solid #d1d1d1;border-radius:3px 3px 0 0;background:#f8f8f8;min-width:90px;text-align:center;margin-left:-1px;letter-spacing:.3px}a.cke_dialog_tab:hover{background-color:#fff}a.cke_dialog_tab:focus{border:2px solid #139ff7;border-bottom-color:#d1d1d1;padding:3px 7px;position:relative;z-index:1}a.cke_dialog_tab_selected{background:#fff;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover,a.cke_dialog_tab_selected:focus{border-bottom-color:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab:focus,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}a.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:16px;width:16px;top:11px;z-index:5;opacity:.7;filter:alpha(opacity = 70)}.cke_rtl .cke_dialog_close_button{left:12px}.cke_ltr .cke_dialog_close_button{right:12px}.cke_hc a.cke_dialog_close_button{background-image:none}.cke_hidpi a.cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}a.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}a.cke_dialog_close_button span{display:none}.cke_hc a.cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}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%;margin-top:12px}.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_tel,.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,input.cke_dialog_ui_input_tel,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #bcbcbc;padding:4px 6px;outline:0;width:100%;*width:95%;box-sizing:border-box;border-radius:2px;min-height:28px;margin-left:1px}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,input.cke_dialog_ui_input_tel:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,input.cke_dialog_ui_input_tel:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:2px solid #139ff7}input.cke_dialog_ui_input_text:focus{padding-left:5px}textarea.cke_dialog_ui_input_textarea:focus{padding:3px 5px}select.cke_dialog_ui_input_select:focus{margin:0;width:100%!important}input.cke_dialog_ui_checkbox_input,input.cke_dialog_ui_radio_input{margin-left:1px;margin-right:2px}input.cke_dialog_ui_checkbox_input:focus,input.cke_dialog_ui_checkbox_input:active,input.cke_dialog_ui_radio_input:focus,input.cke_dialog_ui_radio_input:active{border:0;outline:2px solid #139ff7}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 1px;margin:0;text-align:center;color:#484848;vertical-align:middle;cursor:pointer;border:1px solid #bcbcbc;border-radius:2px;background:#f8f8f8;letter-spacing:.3px;line-height:18px;box-sizing:border-box}.cke_hc a.cke_dialog_ui_button{border-width:3px}span.cke_dialog_ui_button{padding:0 10px;cursor:pointer}a.cke_dialog_ui_button:hover{background:#fff}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border:2px solid #139ff7;outline:0;padding:3px 0}.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}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;background:#09863e;border:1px solid #09863e}.cke_hc a.cke_dialog_ui_button{border:3px solid #bcbcbc}a.cke_dialog_ui_button_ok:hover{background:#53aa78;border-color:#53aa78}a.cke_dialog_ui_button_ok:focus{box-shadow:inset 0 0 0 2px #FFF}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#139ff7}.cke_hc a.cke_dialog_ui_button_ok:hover,.cke_hc a.cke_dialog_ui_button_ok:focus,.cke_hc a.cke_dialog_ui_button_ok:active{border-color:#484848}a.cke_dialog_ui_button_ok.cke_disabled{background:#d1d1d1;border-color:#d1d1d1;cursor:default}a.cke_dialog_ui_button_ok.cke_disabled span{cursor:default}.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:28px;line-height:28px;background-color:#fff;border:1px solid #bcbcbc;padding:3px 3px 3px 6px;outline:0;border-radius:2px;margin:0 1px;box-sizing:border-box;width:calc(100% - 2px)!important}.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_ui_labeled_label{margin-left:1px}.cke_dialog .cke_dark_background{background-color:transparent}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked,.cke_dialog a.cke_btn_reset{margin:2px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_over,.cke_dialog a.cke_btn_locked:hover,.cke_dialog a.cke_btn_locked:focus,.cke_dialog a.cke_btn_locked:active,.cke_dialog a.cke_btn_unlocked:hover,.cke_dialog a.cke_btn_unlocked:focus,.cke_dialog a.cke_btn_unlocked:active,.cke_dialog a.cke_btn_reset:hover,.cke_dialog a.cke_btn_reset:focus,.cke_dialog a.cke_btn_reset:active{cursor:pointer;outline:0;margin:0;border:2px solid #139ff7}.cke_dialog fieldset{border:1px solid #bcbcbc}.cke_dialog fieldset legend{padding:0 6px}.cke_dialog_ui_checkbox,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox{display:inline-block}.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox{padding-top:5px}.cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input,.cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input+label,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input+label{vertical-align:middle}.cke_dialog .ImagePreviewBox{border:1px ridge #bcbcbc;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:1px solid #bcbcbc;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;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;cursor:default;letter-spacing:.3px}.cke_dialog_body label+.cke_dialog_ui_labeled_content{margin-top:2px}.cke_dialog_contents_body .cke_dialog_ui_text,.cke_dialog_contents_body .cke_dialog_ui_select,.cke_dialog_contents_body .cke_dialog_ui_hbox_last>a.cke_dialog_ui_button{margin-top:4px}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:2px 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_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_dialog_contents_body .cke_accessibility_legend{margin:2px 7px 2px 2px}.cke_dialog_contents_body .cke_accessibility_legend:focus,.cke_dialog_contents_body .cke_accessibility_legend:active{outline:0;border:2px solid #139ff7;margin:0 5px 0 0}.cke_dialog_contents_body input[type=file]:focus,.cke_dialog_contents_body input[type=file]:active{border:2px solid #139ff7}.cke_dialog_find_fieldset{margin-top:10px!important}.cke_dialog_image_ratiolock{margin-top:52px!important}.cke_dialog_forms_select_order label.cke_dialog_ui_labeled_label{margin-left:0}.cke_dialog_forms_select_order div.cke_dialog_ui_input_select{width:100%}.cke_dialog_forms_select_order_txtsize .cke_dialog_ui_hbox_last{padding-top:4px}.cke_dialog_image_url .cke_dialog_ui_hbox_last,.cke_dialog_flash_url .cke_dialog_ui_hbox_last{vertical-align:bottom}a.cke_dialog_ui_button.cke_dialog_image_browse{margin-top:10px}.cke_dialog_contents_body .cke_tpl_list{border:#bcbcbc 1px solid;margin:1px}.cke_dialog_contents_body .cke_tpl_list:focus,.cke_dialog_contents_body .cke_tpl_list:active{outline:0;margin:0;border:2px solid #139ff7}.cke_dialog_contents_body .cke_tpl_list a:focus,.cke_dialog_contents_body .cke_tpl_list a:active{outline:0}.cke_dialog_contents_body .cke_tpl_list a:focus .cke_tpl_item,.cke_dialog_contents_body .cke_tpl_list a:active .cke_tpl_item{border:2px solid #139ff7;padding:6px}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password,.cke_rtl input.cke_dialog_ui_input_tel{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password,.cke_rtl div.cke_dialog_ui_input_tel{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_tel,.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
+.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#fff}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:12px;cursor:move;position:relative;color:#484848;border-bottom:1px solid #d1d1d1;padding:12px 19px 12px 12px;background:#f8f8f8;letter-spacing:.3px}.cke_dialog_spinner{border-radius:50%;width:12px;height:12px;overflow:hidden;text-indent:-9999em;border:2px solid rgba(102,102,102,0.2);border-left-color:rgba(102,102,102,1);-webkit-animation:dialog_spinner 1s infinite linear;animation:dialog_spinner 1s infinite linear}.cke_browser_ie8 .cke_dialog_spinner,.cke_browser_ie9 .cke_dialog_spinner{background:url(images/spinner.gif) center top no-repeat;width:16px;height:16px;border:0}@-webkit-keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes dialog_spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:43px;border-top:1px solid #d1d1d1}.cke_dialog_contents_body{overflow:auto;padding:9px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.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:33px;display:inline-block;margin:9px 0 0;position:absolute;z-index:2;left:11px}.cke_rtl .cke_dialog_tabs{left:auto;right:11px}a.cke_dialog_tab{height:25px;padding:4px 8px;display:inline-block;cursor:pointer;line-height:26px;outline:0;color:#484848;border:1px solid #d1d1d1;border-radius:3px 3px 0 0;background:#f8f8f8;min-width:90px;text-align:center;margin-left:-1px;letter-spacing:.3px}a.cke_dialog_tab:hover{background-color:#fff}a.cke_dialog_tab:focus{border:2px solid #139ff7;border-bottom-color:#d1d1d1;padding:3px 7px;position:relative;z-index:1}a.cke_dialog_tab_selected{background:#fff;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover,a.cke_dialog_tab_selected:focus{border-bottom-color:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab:focus,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}a.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:16px;width:16px;top:11px;z-index:5;opacity:.7;filter:alpha(opacity = 70)}.cke_rtl .cke_dialog_close_button{left:12px}.cke_ltr .cke_dialog_close_button{right:12px}.cke_hc a.cke_dialog_close_button{background-image:none}.cke_hidpi a.cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}a.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}a.cke_dialog_close_button span{display:none}.cke_hc a.cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}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%;margin-top:12px}.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_tel,.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,input.cke_dialog_ui_input_tel,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #bcbcbc;padding:4px 6px;outline:0;width:100%;*width:95%;box-sizing:border-box;border-radius:2px;min-height:28px;margin-left:1px}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,input.cke_dialog_ui_input_tel:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,input.cke_dialog_ui_input_tel:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:2px solid #139ff7}input.cke_dialog_ui_input_text:focus{padding-left:5px}textarea.cke_dialog_ui_input_textarea:focus{padding:3px 5px}select.cke_dialog_ui_input_select:focus{margin:0;width:100%!important}input.cke_dialog_ui_checkbox_input,input.cke_dialog_ui_radio_input{margin-left:1px;margin-right:2px}input.cke_dialog_ui_checkbox_input:focus,input.cke_dialog_ui_checkbox_input:active,input.cke_dialog_ui_radio_input:focus,input.cke_dialog_ui_radio_input:active{border:0;outline:2px solid #139ff7}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 1px;margin:0;text-align:center;color:#484848;vertical-align:middle;cursor:pointer;border:1px solid #bcbcbc;border-radius:2px;background:#f8f8f8;letter-spacing:.3px;line-height:18px;box-sizing:border-box}.cke_hc a.cke_dialog_ui_button{border-width:3px}span.cke_dialog_ui_button{padding:0 10px;cursor:pointer}a.cke_dialog_ui_button:hover{background:#fff}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border:2px solid #139ff7;outline:0;padding:3px 0}.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}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;background:#09863e;border:1px solid #09863e}.cke_hc a.cke_dialog_ui_button{border:1px solid #bcbcbc}a.cke_dialog_ui_button_ok:hover{background:#53aa78;border-color:#53aa78}a.cke_dialog_ui_button_ok:focus{box-shadow:inset 0 0 0 2px #FFF}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#139ff7}.cke_hc a.cke_dialog_ui_button_ok:hover,.cke_hc a.cke_dialog_ui_button_ok:focus,.cke_hc a.cke_dialog_ui_button_ok:active{border-color:#484848}a.cke_dialog_ui_button_ok.cke_disabled{background:#d1d1d1;border-color:#d1d1d1;cursor:default}a.cke_dialog_ui_button_ok.cke_disabled span{cursor:default}.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:28px;line-height:28px;background-color:#fff;border:1px solid #bcbcbc;padding:3px 3px 3px 6px;outline:0;border-radius:2px;margin:0 1px;box-sizing:border-box;width:calc(100% - 2px)!important}.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_ui_labeled_label{margin-left:1px}.cke_dialog_ui_labeled_required{font-weight:bold;font-size:1.2em}.cke_dialog .cke_dark_background{background-color:transparent}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked,.cke_dialog a.cke_btn_reset{margin:2px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_over,.cke_dialog a.cke_btn_locked:hover,.cke_dialog a.cke_btn_locked:focus,.cke_dialog a.cke_btn_locked:active,.cke_dialog a.cke_btn_unlocked:hover,.cke_dialog a.cke_btn_unlocked:focus,.cke_dialog a.cke_btn_unlocked:active,.cke_dialog a.cke_btn_reset:hover,.cke_dialog a.cke_btn_reset:focus,.cke_dialog a.cke_btn_reset:active{cursor:pointer;outline:0;margin:0;border:2px solid #139ff7}.cke_dialog fieldset{border:1px solid #bcbcbc}.cke_dialog fieldset legend{padding:0 6px}.cke_dialog_ui_checkbox,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox{display:inline-block}.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox{padding-top:5px}.cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input,.cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input+label,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input,.cke_dialog fieldset .cke_dialog_ui_vbox .cke_dialog_ui_checkbox .cke_dialog_ui_checkbox_input+label{vertical-align:middle}.cke_dialog .ImagePreviewBox{border:1px ridge #bcbcbc;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 .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;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;cursor:default;letter-spacing:.3px}.cke_dialog_body label+.cke_dialog_ui_labeled_content{margin-top:2px}.cke_dialog_contents_body .cke_dialog_ui_text,.cke_dialog_contents_body .cke_dialog_ui_select,.cke_dialog_contents_body .cke_dialog_ui_hbox_last>a.cke_dialog_ui_button{margin-top:4px}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:2px 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_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_dialog_contents_body .cke_accessibility_legend{margin:2px 7px 2px 2px}.cke_dialog_contents_body .cke_accessibility_legend:focus,.cke_dialog_contents_body .cke_accessibility_legend:active{outline:0;border:2px solid #139ff7;margin:0 5px 0 0}.cke_dialog_contents_body input[type=file]:focus,.cke_dialog_contents_body input[type=file]:active{border:2px solid #139ff7}.cke_dialog_find_fieldset{margin-top:10px!important}.cke_dialog_image_ratiolock{margin-top:52px!important}.cke_dialog_forms_select_order label.cke_dialog_ui_labeled_label{margin-left:0}.cke_dialog_forms_select_order div.cke_dialog_ui_input_select{width:100%}.cke_dialog_forms_select_order_txtsize .cke_dialog_ui_hbox_last{padding-top:4px}.cke_dialog_image_url .cke_dialog_ui_hbox_last{vertical-align:bottom}a.cke_dialog_ui_button.cke_dialog_image_browse{margin-top:10px}.cke_dialog_contents_body .cke_tpl_list{border:#bcbcbc 1px solid;margin:1px}.cke_dialog_contents_body .cke_tpl_list:focus,.cke_dialog_contents_body .cke_tpl_list:active{outline:0;margin:0;border:2px solid #139ff7}.cke_dialog_contents_body .cke_tpl_list a:focus,.cke_dialog_contents_body .cke_tpl_list a:active{outline:0}.cke_dialog_contents_body .cke_tpl_list a:focus .cke_tpl_item,.cke_dialog_contents_body .cke_tpl_list a:active .cke_tpl_item{border:2px solid #139ff7;padding:6px}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password,.cke_rtl input.cke_dialog_ui_input_tel{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password,.cke_rtl div.cke_dialog_ui_input_tel{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_tel,.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/assets/vendor/ckeditor/skins/moono-lisa/editor.css b/core/assets/vendor/ckeditor/skins/moono-lisa/editor.css
index 5272fa8ad206..cd1a0aa9a202 100644
--- a/core/assets/vendor/ckeditor/skins/moono-lisa/editor.css
+++ b/core/assets/vendor/ckeditor/skins/moono-lisa/editor.css
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.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}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #d1d1d1;padding:0}.cke_inner{display:block;background:#fff;padding:0;-webkit-touch-callout:none}.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 #d1d1d1;background:#f8f8f8;padding:6px 8px 2px;white-space:normal}.cke_float .cke_top{border:1px solid #d1d1d1}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #bcbcbc transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.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 #bcbcbc;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;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #d1d1d1}.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_block:focus{outline:0}.cke_panel_list{margin:0;padding:0;list-style-type:none;white-space:nowrap}.cke_panel_listItem{margin:0;padding:0}.cke_panel_listItem a{padding:6px 7px;display:block;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}.cke_hc .cke_panel_listItem a{border-style:none}.cke_panel_listItem.cke_selected a,.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e9e9e9}.cke_panel_listItem a:focus{outline:1px dotted #000}.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:4px 5px}.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_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px 7px 6px;color:#484848;border-bottom:1px solid #d1d1d1;background:#f8f8f8}.cke_colorblock{padding:10px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}a.cke_colorbox{padding:2px;float:left;width:20px;height:20px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{outline:0;padding:0;border:2px solid #139ff7}a:hover.cke_colorbox{border-color:#bcbcbc}span.cke_colorbox{width:20px;height:20px;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:3px;display:block;cursor:pointer}a.cke_colorauto{padding:0;border:1px solid transparent;margin-bottom:6px;height:26px;line-height:26px}a.cke_colormore{margin-top:10px;height:20px;line-height:19px}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{outline:0;border:#139ff7 1px solid;background-color:#f8f8f8}a:hover.cke_colorauto,a:hover.cke_colormore{border-color:#bcbcbc}.cke_colorauto span.cke_colorbox{width:18px;height:18px;border:1px solid #808080;margin-left:1px;margin-top:3px}.cke_rtl .cke_colorauto span.cke_colorbox{margin-left:0;margin-right:1px}span.cke_colorbox[style*="#ffffff"],span.cke_colorbox[style*="#FFFFFF"],span.cke_colorbox[style="background-color:#fff"],span.cke_colorbox[style="background-color:#FFF"],span.cke_colorbox[style*="rgb(255,255,255)"],span.cke_colorbox[style*="rgb(255, 255, 255)"]{border:1px solid #808080;width:18px;height:18px}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{border:0;float:left;margin:1px 2px 6px 0;padding-right:3px}.cke_rtl .cke_toolgroup{float:right;margin:1px 0 6px 2px;padding-left:3px;padding-right:0}.cke_hc .cke_toolgroup{margin-right:5px;margin-bottom:5px}.cke_hc.cke_rtl .cke_toolgroup{margin-right:0;margin-left:5px}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0;position:relative}a.cke_button_expandable{padding:4px 5px}.cke_rtl a.cke_button{float:right}.cke_hc a.cke_button{border:1px solid black;padding:3px 5px;margin:0 3px 5px 0}.cke_hc.cke_rtl a.cke_button{margin:0 0 5px 3px}a.cke_button_on{background:#fff;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_on{padding:3px 4px}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_off:hover,a.cke_button_expandable.cke_button_off:focus,a.cke_button_expandable.cke_button_off:active{padding:3px 4px}.cke_hc a.cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active{background:#e5e5e5;border:3px solid #000;padding:1px 3px}@media screen and (hover:none){a.cke_button_off:hover{background:transparent;border:0;padding:4px 6px}a.cke_button_expandable.cke_button_off:hover{padding:4px 5px}a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_off:active{padding:3px 4px}}a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{border:0;padding:4px 6px;background-color:transparent}a.cke_button_expandable.cke_button_disabled:hover,a.cke_button_expandable.cke_button_disabled:active{padding:4px 5px}a.cke_button_disabled:focus{border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_disabled:focus{padding:3px 4px}.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border:1px solid #acacac;padding:3px 5px;margin:0 3px 5px 0}.cke_hc a.cke_button_disabled:focus{border:3px solid #000;padding:1px 3px}.cke_hc.cke_rtl a.cke_button_disabled:hover,.cke_hc.cke_rtl a.cke_button_disabled:focus,.cke_hc.cke_rtl a.cke_button_disabled:active{margin:0 0 5px 3px}a.cke_button_disabled .cke_button_icon,a.cke_button_disabled .cke_button_arrow{opacity:.3}.cke_hc a.cke_button_disabled{border-color:#acacac}.cke_hc a.cke_button_disabled .cke_button_icon,.cke_hc a.cke_button_disabled .cke_button_label{opacity:.5}.cke_toolgroup a.cke_button:last-child:after,.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:0;right:-3px}.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-right:0;right:auto;border-left:1px solid #bcbcbc;top:0;left:-3px}.cke_hc .cke_toolgroup a.cke_button:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-color:#000;top:0;right:-7px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{top:0;right:auto;left:-7px}.cke_toolgroup a.cke_button:hover:last-child:after,.cke_toolgroup a.cke_button:focus:last-child:after,.cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:-4px}.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_rtl .cke_toolgroup a.cke_button:focus:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:auto;left:-4px}.cke_hc .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:-9px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:auto;left:-9px}.cke_toolbar.cke_toolbar_last .cke_toolgroup a.cke_button:last-child:after{content:none;border:0;width:0;height:0}.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:#484848}.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 3px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px 0 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#bcbcbc;margin:4px 2px 0 2px;height:18px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{background-color:#000;margin-left:2px;margin-right:5px;margin-bottom:9px}.cke_hc.cke_rtl .cke_toolbar_separator{margin-left:5px;margin-right:2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #bcbcbc}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser:hover{background:#e5e5e5}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border:3px solid transparent;border-bottom-color:#484848}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#484848}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0}.cke_menuitem span{cursor:default}.cke_menubutton{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#e9e9e9;display:block;outline:1px dotted}.cke_menubutton:hover{outline:0}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_disabled:hover,.cke_menubutton_disabled:focus,.cke_menubutton_disabled:active{background-color:transparent;outline:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#f8f8f8;padding:6px 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:#e9e9e9}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{background-color:#f8f8f8;outline:0}.cke_menuitem .cke_menubutton_on{background-color:#e9e9e9;border:1px solid #dedede;outline:0}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px;background-color:#e9e9e9}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_shortcut{color:#979797}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d1d1d1;height:1px}.cke_menuarrow{background:transparent url(images/arrow.png) no-repeat 0 10px;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow{background-image:none}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left;position:relative;margin-bottom:5px}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:1px;margin-bottom:10px}.cke_combo:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:5px;top:0;right:0}.cke_rtl .cke_combo:after{border-right:0;border-left:1px solid #bcbcbc;right:auto;left:0}.cke_hc .cke_combo:after{border-color:#000}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0;padding:1px}.cke_rtl a.cke_combo_button{float:right}.cke_hc a.cke_combo_button{padding:4px}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:active{background:#e5e5e5;border:1px solid #bcbcbc;padding:0 0 0 1px;margin-left:-1px}.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:active{background:#fff}@media screen and (hover:none){.cke_combo_off a.cke_combo_button:hover{background:transparent;border-color:transparent}.cke_combo_off a.cke_combo_button:active{background:#fff;border:1px solid #bcbcbc}}.cke_rtl .cke_combo_on a.cke_combo_button,.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:0 1px 0 0;margin-left:0;margin-right:-1px}.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:3px solid #000;padding:1px 1px 1px 2px}.cke_hc.cke_rtl .cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:1px 2px 1px 1px}.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 0 0 3px;margin-left:-3px}.cke_rtl .cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 3px 0 0;margin-left:0;margin-right:-3px}.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 1px 1px 7px;margin-left:-6px}.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 7px 1px 1px;margin-left:0;margin-right:-6px}.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0;margin:0}.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px;margin:0}.cke_toolbar .cke_combo+.cke_toolbar_end,.cke_toolbar .cke_combo+.cke_toolgroup{margin-right:0;margin-left:2px}.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:2px}.cke_hc .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:5px}.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:5px}.cke_toolbar.cke_toolbar_last .cke_combo:nth-last-child(-n+2):after{content:none;border:0;width:0;height:0}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#484848;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 10px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;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 #484848}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.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_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#484848;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:#e5e5e5}.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,.cke_button__sourcedialog_label{display:inline}.cke_combopanel__fontsize{width:135px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;text-align:center;opacity:.95;filter:alpha(opacity = 95);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png?t=L7CE) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=L7CE) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=L7CE) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=L7CE) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=L7CE) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=L7CE) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=L7CE) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=L7CE) no-repeat 0 -168px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png?t=L7CE) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=L7CE) no-repeat 0 -216px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png?t=L7CE) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=L7CE) no-repeat 0 -264px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png?t=L7CE) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=L7CE) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=L7CE) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=L7CE) no-repeat 0 -360px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png?t=L7CE) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=L7CE) no-repeat 0 -408px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png?t=L7CE) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=L7CE) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=L7CE) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=L7CE) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=L7CE) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=L7CE) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=L7CE) no-repeat 0 -576px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png?t=L7CE) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=L7CE) no-repeat 0 -624px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png?t=L7CE) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=L7CE) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=L7CE) no-repeat 0 -696px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png?t=L7CE) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=L7CE) no-repeat 0 -744px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png?t=L7CE) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=L7CE) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=L7CE) no-repeat 0 -816px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png?t=L7CE) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=L7CE) no-repeat 0 -864px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png?t=L7CE) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=L7CE) no-repeat 0 -912px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png?t=L7CE) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=L7CE) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=L7CE) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=L7CE) no-repeat 0 -1008px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png?t=L7CE) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=L7CE) no-repeat 0 -1056px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png?t=L7CE) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=L7CE) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=L7CE) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -168px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -360px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -408px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -576px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -624px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -696px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -816px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -840px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -864px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -912px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -1056px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -2256px!important}
\ No newline at end of file
+.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.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}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #d1d1d1;padding:0}.cke_inner{display:block;background:#fff;padding:0;-webkit-touch-callout:none}.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 #d1d1d1;background:#f8f8f8;padding:6px 8px 2px;white-space:normal}.cke_float .cke_top{border:1px solid #d1d1d1}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #bcbcbc transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.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 #bcbcbc;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;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #d1d1d1}.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_block:focus{outline:0}.cke_panel_list{margin:0;padding:0;list-style-type:none;white-space:nowrap}.cke_panel_listItem{margin:0;padding:0}.cke_panel_listItem a{padding:6px 7px;display:block;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}.cke_hc .cke_panel_listItem a{border-style:none}.cke_panel_listItem.cke_selected a,.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e9e9e9}.cke_panel_listItem a:focus{outline:1px dotted #000}.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:4px 5px}.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_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px 7px 6px;color:#484848;border-bottom:1px solid #d1d1d1;background:#f8f8f8}.cke_colorblock{padding:10px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}a.cke_colorbox{padding:2px;float:left;width:20px;height:20px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{outline:0;padding:0;border:2px solid #139ff7}a:hover.cke_colorbox{border-color:#bcbcbc}span.cke_colorbox{width:20px;height:20px;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:3px;display:block;cursor:pointer}a.cke_colorauto{padding:0;border:1px solid transparent;margin-bottom:6px;height:26px;line-height:26px}a.cke_colormore{margin-top:10px;height:20px;line-height:19px}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{outline:0;border:#139ff7 1px solid;background-color:#f8f8f8}a:hover.cke_colorauto,a:hover.cke_colormore{border-color:#bcbcbc}.cke_colorauto span.cke_colorbox{width:18px;height:18px;border:1px solid #808080;margin-left:1px;margin-top:3px}.cke_rtl .cke_colorauto span.cke_colorbox{margin-left:0;margin-right:1px}span.cke_colorbox[style*="#ffffff"],span.cke_colorbox[style*="#FFFFFF"],span.cke_colorbox[style="background-color:#fff"],span.cke_colorbox[style="background-color:#FFF"],span.cke_colorbox[style*="rgb(255,255,255)"],span.cke_colorbox[style*="rgb(255, 255, 255)"]{border:1px solid #808080;width:18px;height:18px}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{border:0;float:left;margin:1px 2px 6px 0;padding-right:3px}.cke_rtl .cke_toolgroup{float:right;margin:1px 0 6px 2px;padding-left:3px;padding-right:0}.cke_hc .cke_toolgroup{margin-right:5px;margin-bottom:5px}.cke_hc.cke_rtl .cke_toolgroup{margin-right:0;margin-left:5px}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0;position:relative}a.cke_button_expandable{padding:4px 5px}.cke_rtl a.cke_button{float:right}.cke_hc a.cke_button{border:1px solid black;padding:3px 5px;margin:0 3px 5px 0}.cke_hc.cke_rtl a.cke_button{margin:0 0 5px 3px}a.cke_button_on{background:#fff;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_on{padding:3px 4px}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_off:hover,a.cke_button_expandable.cke_button_off:focus,a.cke_button_expandable.cke_button_off:active{padding:3px 4px}.cke_hc a.cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active{background:#e5e5e5;border:3px solid #000;padding:1px 3px}@media screen and (hover:none){a.cke_button_off:hover{background:transparent;border:0;padding:4px 6px}a.cke_button_expandable.cke_button_off:hover{padding:4px 5px}a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_off:active{padding:3px 4px}}a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{border:0;padding:4px 6px;background-color:transparent}a.cke_button_expandable.cke_button_disabled:hover,a.cke_button_expandable.cke_button_disabled:active{padding:4px 5px}a.cke_button_disabled:focus{border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_disabled:focus{padding:3px 4px}.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border:1px solid #acacac;padding:3px 5px;margin:0 3px 5px 0}.cke_hc a.cke_button_disabled:focus{border:3px solid #000;padding:1px 3px}.cke_hc.cke_rtl a.cke_button_disabled:hover,.cke_hc.cke_rtl a.cke_button_disabled:focus,.cke_hc.cke_rtl a.cke_button_disabled:active{margin:0 0 5px 3px}a.cke_button_disabled .cke_button_icon,a.cke_button_disabled .cke_button_arrow{opacity:.3}.cke_hc a.cke_button_disabled{border-color:#acacac}.cke_hc a.cke_button_disabled .cke_button_icon,.cke_hc a.cke_button_disabled .cke_button_label{opacity:.5}.cke_toolgroup a.cke_button:last-child:after,.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:0;right:-3px}.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-right:0;right:auto;border-left:1px solid #bcbcbc;top:0;left:-3px}.cke_hc .cke_toolgroup a.cke_button:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-color:#000;top:0;right:-7px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{top:0;right:auto;left:-7px}.cke_toolgroup a.cke_button:hover:last-child:after,.cke_toolgroup a.cke_button:focus:last-child:after,.cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:-4px}.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_rtl .cke_toolgroup a.cke_button:focus:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:auto;left:-4px}.cke_hc .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:-9px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:auto;left:-9px}.cke_toolbar.cke_toolbar_last .cke_toolgroup a.cke_button:last-child:after{content:none;border:0;width:0;height:0}.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:#484848}.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 3px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px 0 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#bcbcbc;margin:4px 2px 0 2px;height:18px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{background-color:#000;margin-left:2px;margin-right:5px;margin-bottom:9px}.cke_hc.cke_rtl .cke_toolbar_separator{margin-left:5px;margin-right:2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #bcbcbc}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser:hover{background:#e5e5e5}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border:3px solid transparent;border-bottom-color:#484848}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#484848}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0}.cke_menuitem span{cursor:default}.cke_menubutton{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#e9e9e9;display:block;outline:1px dotted}.cke_menubutton:hover{outline:0}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_disabled:hover,.cke_menubutton_disabled:focus,.cke_menubutton_disabled:active{background-color:transparent;outline:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#f8f8f8;padding:6px 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:#e9e9e9}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{background-color:#f8f8f8;outline:0}.cke_menuitem .cke_menubutton_on{background-color:#e9e9e9;border:1px solid #dedede;outline:0}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px;background-color:#e9e9e9}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_shortcut{color:#979797}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d1d1d1;height:1px}.cke_menuarrow{background:transparent url(images/arrow.png) no-repeat 0 10px;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow{background-image:none}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left;position:relative;margin-bottom:5px}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:1px;margin-bottom:10px}.cke_combo:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:5px;top:0;right:0}.cke_rtl .cke_combo:after{border-right:0;border-left:1px solid #bcbcbc;right:auto;left:0}.cke_hc .cke_combo:after{border-color:#000}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0;padding:1px}.cke_rtl a.cke_combo_button{float:right}.cke_hc a.cke_combo_button{padding:4px}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:active{background:#e5e5e5;border:1px solid #bcbcbc;padding:0 0 0 1px;margin-left:-1px}.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:active{background:#fff}@media screen and (hover:none){.cke_combo_off a.cke_combo_button:hover{background:transparent;border-color:transparent}.cke_combo_off a.cke_combo_button:active{background:#fff;border:1px solid #bcbcbc}}.cke_rtl .cke_combo_on a.cke_combo_button,.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:0 1px 0 0;margin-left:0;margin-right:-1px}.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:3px solid #000;padding:1px 1px 1px 2px}.cke_hc.cke_rtl .cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:1px 2px 1px 1px}.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 0 0 3px;margin-left:-3px}.cke_rtl .cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 3px 0 0;margin-left:0;margin-right:-3px}.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 1px 1px 7px;margin-left:-6px}.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 7px 1px 1px;margin-left:0;margin-right:-6px}.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0;margin:0}.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px;margin:0}.cke_toolbar .cke_combo+.cke_toolbar_end,.cke_toolbar .cke_combo+.cke_toolgroup{margin-right:0;margin-left:2px}.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:2px}.cke_hc .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:5px}.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:5px}.cke_toolbar.cke_toolbar_last .cke_combo:nth-last-child(-n+2):after{content:none;border:0;width:0;height:0}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#484848;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 10px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;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 #484848}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.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_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#484848;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:#e5e5e5}.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,.cke_button__sourcedialog_label{display:inline}.cke_combopanel__fontsize{width:135px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;text-align:center;opacity:.95;filter:alpha(opacity = 95);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png?t=LAHG) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=LAHG) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=LAHG) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=LAHG) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=LAHG) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=LAHG) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=LAHG) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=LAHG) no-repeat 0 -168px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png?t=LAHG) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=LAHG) no-repeat 0 -216px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png?t=LAHG) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=LAHG) no-repeat 0 -264px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png?t=LAHG) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=LAHG) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=LAHG) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=LAHG) no-repeat 0 -360px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png?t=LAHG) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=LAHG) no-repeat 0 -408px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png?t=LAHG) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=LAHG) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=LAHG) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=LAHG) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=LAHG) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=LAHG) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=LAHG) no-repeat 0 -576px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png?t=LAHG) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=LAHG) no-repeat 0 -624px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png?t=LAHG) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=LAHG) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=LAHG) no-repeat 0 -696px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png?t=LAHG) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=LAHG) no-repeat 0 -744px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png?t=LAHG) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=LAHG) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=LAHG) no-repeat 0 -816px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png?t=LAHG) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=LAHG) no-repeat 0 -864px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png?t=LAHG) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=LAHG) no-repeat 0 -912px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png?t=LAHG) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=LAHG) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=LAHG) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=LAHG) no-repeat 0 -1008px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png?t=LAHG) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=LAHG) no-repeat 0 -1056px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png?t=LAHG) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=LAHG) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=LAHG) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -168px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -360px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -408px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -576px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -624px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -696px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -816px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -840px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -864px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -912px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -1056px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -2256px!important}
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/skins/moono-lisa/editor_gecko.css b/core/assets/vendor/ckeditor/skins/moono-lisa/editor_gecko.css
index 3db9bbdf803f..8cdff5cf80aa 100644
--- a/core/assets/vendor/ckeditor/skins/moono-lisa/editor_gecko.css
+++ b/core/assets/vendor/ckeditor/skins/moono-lisa/editor_gecko.css
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.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}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #d1d1d1;padding:0}.cke_inner{display:block;background:#fff;padding:0;-webkit-touch-callout:none}.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 #d1d1d1;background:#f8f8f8;padding:6px 8px 2px;white-space:normal}.cke_float .cke_top{border:1px solid #d1d1d1}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #bcbcbc transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.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 #bcbcbc;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;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #d1d1d1}.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_block:focus{outline:0}.cke_panel_list{margin:0;padding:0;list-style-type:none;white-space:nowrap}.cke_panel_listItem{margin:0;padding:0}.cke_panel_listItem a{padding:6px 7px;display:block;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}.cke_hc .cke_panel_listItem a{border-style:none}.cke_panel_listItem.cke_selected a,.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e9e9e9}.cke_panel_listItem a:focus{outline:1px dotted #000}.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:4px 5px}.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_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px 7px 6px;color:#484848;border-bottom:1px solid #d1d1d1;background:#f8f8f8}.cke_colorblock{padding:10px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}a.cke_colorbox{padding:2px;float:left;width:20px;height:20px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{outline:0;padding:0;border:2px solid #139ff7}a:hover.cke_colorbox{border-color:#bcbcbc}span.cke_colorbox{width:20px;height:20px;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:3px;display:block;cursor:pointer}a.cke_colorauto{padding:0;border:1px solid transparent;margin-bottom:6px;height:26px;line-height:26px}a.cke_colormore{margin-top:10px;height:20px;line-height:19px}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{outline:0;border:#139ff7 1px solid;background-color:#f8f8f8}a:hover.cke_colorauto,a:hover.cke_colormore{border-color:#bcbcbc}.cke_colorauto span.cke_colorbox{width:18px;height:18px;border:1px solid #808080;margin-left:1px;margin-top:3px}.cke_rtl .cke_colorauto span.cke_colorbox{margin-left:0;margin-right:1px}span.cke_colorbox[style*="#ffffff"],span.cke_colorbox[style*="#FFFFFF"],span.cke_colorbox[style="background-color:#fff"],span.cke_colorbox[style="background-color:#FFF"],span.cke_colorbox[style*="rgb(255,255,255)"],span.cke_colorbox[style*="rgb(255, 255, 255)"]{border:1px solid #808080;width:18px;height:18px}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{border:0;float:left;margin:1px 2px 6px 0;padding-right:3px}.cke_rtl .cke_toolgroup{float:right;margin:1px 0 6px 2px;padding-left:3px;padding-right:0}.cke_hc .cke_toolgroup{margin-right:5px;margin-bottom:5px}.cke_hc.cke_rtl .cke_toolgroup{margin-right:0;margin-left:5px}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0;position:relative}a.cke_button_expandable{padding:4px 5px}.cke_rtl a.cke_button{float:right}.cke_hc a.cke_button{border:1px solid black;padding:3px 5px;margin:0 3px 5px 0}.cke_hc.cke_rtl a.cke_button{margin:0 0 5px 3px}a.cke_button_on{background:#fff;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_on{padding:3px 4px}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_off:hover,a.cke_button_expandable.cke_button_off:focus,a.cke_button_expandable.cke_button_off:active{padding:3px 4px}.cke_hc a.cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active{background:#e5e5e5;border:3px solid #000;padding:1px 3px}@media screen and (hover:none){a.cke_button_off:hover{background:transparent;border:0;padding:4px 6px}a.cke_button_expandable.cke_button_off:hover{padding:4px 5px}a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_off:active{padding:3px 4px}}a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{border:0;padding:4px 6px;background-color:transparent}a.cke_button_expandable.cke_button_disabled:hover,a.cke_button_expandable.cke_button_disabled:active{padding:4px 5px}a.cke_button_disabled:focus{border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_disabled:focus{padding:3px 4px}.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border:1px solid #acacac;padding:3px 5px;margin:0 3px 5px 0}.cke_hc a.cke_button_disabled:focus{border:3px solid #000;padding:1px 3px}.cke_hc.cke_rtl a.cke_button_disabled:hover,.cke_hc.cke_rtl a.cke_button_disabled:focus,.cke_hc.cke_rtl a.cke_button_disabled:active{margin:0 0 5px 3px}a.cke_button_disabled .cke_button_icon,a.cke_button_disabled .cke_button_arrow{opacity:.3}.cke_hc a.cke_button_disabled{border-color:#acacac}.cke_hc a.cke_button_disabled .cke_button_icon,.cke_hc a.cke_button_disabled .cke_button_label{opacity:.5}.cke_toolgroup a.cke_button:last-child:after,.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:0;right:-3px}.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-right:0;right:auto;border-left:1px solid #bcbcbc;top:0;left:-3px}.cke_hc .cke_toolgroup a.cke_button:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-color:#000;top:0;right:-7px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{top:0;right:auto;left:-7px}.cke_toolgroup a.cke_button:hover:last-child:after,.cke_toolgroup a.cke_button:focus:last-child:after,.cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:-4px}.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_rtl .cke_toolgroup a.cke_button:focus:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:auto;left:-4px}.cke_hc .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:-9px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:auto;left:-9px}.cke_toolbar.cke_toolbar_last .cke_toolgroup a.cke_button:last-child:after{content:none;border:0;width:0;height:0}.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:#484848}.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 3px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px 0 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#bcbcbc;margin:4px 2px 0 2px;height:18px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{background-color:#000;margin-left:2px;margin-right:5px;margin-bottom:9px}.cke_hc.cke_rtl .cke_toolbar_separator{margin-left:5px;margin-right:2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #bcbcbc}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser:hover{background:#e5e5e5}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border:3px solid transparent;border-bottom-color:#484848}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#484848}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0}.cke_menuitem span{cursor:default}.cke_menubutton{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#e9e9e9;display:block;outline:1px dotted}.cke_menubutton:hover{outline:0}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_disabled:hover,.cke_menubutton_disabled:focus,.cke_menubutton_disabled:active{background-color:transparent;outline:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#f8f8f8;padding:6px 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:#e9e9e9}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{background-color:#f8f8f8;outline:0}.cke_menuitem .cke_menubutton_on{background-color:#e9e9e9;border:1px solid #dedede;outline:0}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px;background-color:#e9e9e9}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_shortcut{color:#979797}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d1d1d1;height:1px}.cke_menuarrow{background:transparent url(images/arrow.png) no-repeat 0 10px;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow{background-image:none}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left;position:relative;margin-bottom:5px}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:1px;margin-bottom:10px}.cke_combo:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:5px;top:0;right:0}.cke_rtl .cke_combo:after{border-right:0;border-left:1px solid #bcbcbc;right:auto;left:0}.cke_hc .cke_combo:after{border-color:#000}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0;padding:1px}.cke_rtl a.cke_combo_button{float:right}.cke_hc a.cke_combo_button{padding:4px}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:active{background:#e5e5e5;border:1px solid #bcbcbc;padding:0 0 0 1px;margin-left:-1px}.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:active{background:#fff}@media screen and (hover:none){.cke_combo_off a.cke_combo_button:hover{background:transparent;border-color:transparent}.cke_combo_off a.cke_combo_button:active{background:#fff;border:1px solid #bcbcbc}}.cke_rtl .cke_combo_on a.cke_combo_button,.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:0 1px 0 0;margin-left:0;margin-right:-1px}.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:3px solid #000;padding:1px 1px 1px 2px}.cke_hc.cke_rtl .cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:1px 2px 1px 1px}.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 0 0 3px;margin-left:-3px}.cke_rtl .cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 3px 0 0;margin-left:0;margin-right:-3px}.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 1px 1px 7px;margin-left:-6px}.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 7px 1px 1px;margin-left:0;margin-right:-6px}.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0;margin:0}.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px;margin:0}.cke_toolbar .cke_combo+.cke_toolbar_end,.cke_toolbar .cke_combo+.cke_toolgroup{margin-right:0;margin-left:2px}.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:2px}.cke_hc .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:5px}.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:5px}.cke_toolbar.cke_toolbar_last .cke_combo:nth-last-child(-n+2):after{content:none;border:0;width:0;height:0}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#484848;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 10px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;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 #484848}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.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_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#484848;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:#e5e5e5}.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,.cke_button__sourcedialog_label{display:inline}.cke_combopanel__fontsize{width:135px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;text-align:center;opacity:.95;filter:alpha(opacity = 95);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png?t=L7CE) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=L7CE) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=L7CE) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=L7CE) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=L7CE) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=L7CE) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=L7CE) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=L7CE) no-repeat 0 -168px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png?t=L7CE) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=L7CE) no-repeat 0 -216px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png?t=L7CE) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=L7CE) no-repeat 0 -264px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png?t=L7CE) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=L7CE) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=L7CE) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=L7CE) no-repeat 0 -360px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png?t=L7CE) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=L7CE) no-repeat 0 -408px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png?t=L7CE) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=L7CE) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=L7CE) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=L7CE) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=L7CE) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=L7CE) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=L7CE) no-repeat 0 -576px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png?t=L7CE) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=L7CE) no-repeat 0 -624px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png?t=L7CE) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=L7CE) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=L7CE) no-repeat 0 -696px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png?t=L7CE) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=L7CE) no-repeat 0 -744px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png?t=L7CE) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=L7CE) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=L7CE) no-repeat 0 -816px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png?t=L7CE) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=L7CE) no-repeat 0 -864px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png?t=L7CE) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=L7CE) no-repeat 0 -912px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png?t=L7CE) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=L7CE) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=L7CE) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=L7CE) no-repeat 0 -1008px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png?t=L7CE) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=L7CE) no-repeat 0 -1056px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png?t=L7CE) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=L7CE) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=L7CE) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -168px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -360px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -408px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -576px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -624px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -696px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -816px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -840px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -864px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -912px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -1056px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -2256px!important}.cke_bottom{padding-bottom:3px}.cke_combo_text{margin-bottom:-1px;margin-top:1px}
\ No newline at end of file
+.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.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}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #d1d1d1;padding:0}.cke_inner{display:block;background:#fff;padding:0;-webkit-touch-callout:none}.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 #d1d1d1;background:#f8f8f8;padding:6px 8px 2px;white-space:normal}.cke_float .cke_top{border:1px solid #d1d1d1}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #bcbcbc transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.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 #bcbcbc;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;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #d1d1d1}.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_block:focus{outline:0}.cke_panel_list{margin:0;padding:0;list-style-type:none;white-space:nowrap}.cke_panel_listItem{margin:0;padding:0}.cke_panel_listItem a{padding:6px 7px;display:block;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}.cke_hc .cke_panel_listItem a{border-style:none}.cke_panel_listItem.cke_selected a,.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e9e9e9}.cke_panel_listItem a:focus{outline:1px dotted #000}.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:4px 5px}.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_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px 7px 6px;color:#484848;border-bottom:1px solid #d1d1d1;background:#f8f8f8}.cke_colorblock{padding:10px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}a.cke_colorbox{padding:2px;float:left;width:20px;height:20px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{outline:0;padding:0;border:2px solid #139ff7}a:hover.cke_colorbox{border-color:#bcbcbc}span.cke_colorbox{width:20px;height:20px;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:3px;display:block;cursor:pointer}a.cke_colorauto{padding:0;border:1px solid transparent;margin-bottom:6px;height:26px;line-height:26px}a.cke_colormore{margin-top:10px;height:20px;line-height:19px}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{outline:0;border:#139ff7 1px solid;background-color:#f8f8f8}a:hover.cke_colorauto,a:hover.cke_colormore{border-color:#bcbcbc}.cke_colorauto span.cke_colorbox{width:18px;height:18px;border:1px solid #808080;margin-left:1px;margin-top:3px}.cke_rtl .cke_colorauto span.cke_colorbox{margin-left:0;margin-right:1px}span.cke_colorbox[style*="#ffffff"],span.cke_colorbox[style*="#FFFFFF"],span.cke_colorbox[style="background-color:#fff"],span.cke_colorbox[style="background-color:#FFF"],span.cke_colorbox[style*="rgb(255,255,255)"],span.cke_colorbox[style*="rgb(255, 255, 255)"]{border:1px solid #808080;width:18px;height:18px}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{border:0;float:left;margin:1px 2px 6px 0;padding-right:3px}.cke_rtl .cke_toolgroup{float:right;margin:1px 0 6px 2px;padding-left:3px;padding-right:0}.cke_hc .cke_toolgroup{margin-right:5px;margin-bottom:5px}.cke_hc.cke_rtl .cke_toolgroup{margin-right:0;margin-left:5px}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0;position:relative}a.cke_button_expandable{padding:4px 5px}.cke_rtl a.cke_button{float:right}.cke_hc a.cke_button{border:1px solid black;padding:3px 5px;margin:0 3px 5px 0}.cke_hc.cke_rtl a.cke_button{margin:0 0 5px 3px}a.cke_button_on{background:#fff;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_on{padding:3px 4px}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_off:hover,a.cke_button_expandable.cke_button_off:focus,a.cke_button_expandable.cke_button_off:active{padding:3px 4px}.cke_hc a.cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active{background:#e5e5e5;border:3px solid #000;padding:1px 3px}@media screen and (hover:none){a.cke_button_off:hover{background:transparent;border:0;padding:4px 6px}a.cke_button_expandable.cke_button_off:hover{padding:4px 5px}a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_off:active{padding:3px 4px}}a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{border:0;padding:4px 6px;background-color:transparent}a.cke_button_expandable.cke_button_disabled:hover,a.cke_button_expandable.cke_button_disabled:active{padding:4px 5px}a.cke_button_disabled:focus{border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_disabled:focus{padding:3px 4px}.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border:1px solid #acacac;padding:3px 5px;margin:0 3px 5px 0}.cke_hc a.cke_button_disabled:focus{border:3px solid #000;padding:1px 3px}.cke_hc.cke_rtl a.cke_button_disabled:hover,.cke_hc.cke_rtl a.cke_button_disabled:focus,.cke_hc.cke_rtl a.cke_button_disabled:active{margin:0 0 5px 3px}a.cke_button_disabled .cke_button_icon,a.cke_button_disabled .cke_button_arrow{opacity:.3}.cke_hc a.cke_button_disabled{border-color:#acacac}.cke_hc a.cke_button_disabled .cke_button_icon,.cke_hc a.cke_button_disabled .cke_button_label{opacity:.5}.cke_toolgroup a.cke_button:last-child:after,.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:0;right:-3px}.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-right:0;right:auto;border-left:1px solid #bcbcbc;top:0;left:-3px}.cke_hc .cke_toolgroup a.cke_button:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-color:#000;top:0;right:-7px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{top:0;right:auto;left:-7px}.cke_toolgroup a.cke_button:hover:last-child:after,.cke_toolgroup a.cke_button:focus:last-child:after,.cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:-4px}.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_rtl .cke_toolgroup a.cke_button:focus:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:auto;left:-4px}.cke_hc .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:-9px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:auto;left:-9px}.cke_toolbar.cke_toolbar_last .cke_toolgroup a.cke_button:last-child:after{content:none;border:0;width:0;height:0}.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:#484848}.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 3px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px 0 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#bcbcbc;margin:4px 2px 0 2px;height:18px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{background-color:#000;margin-left:2px;margin-right:5px;margin-bottom:9px}.cke_hc.cke_rtl .cke_toolbar_separator{margin-left:5px;margin-right:2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #bcbcbc}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser:hover{background:#e5e5e5}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border:3px solid transparent;border-bottom-color:#484848}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#484848}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0}.cke_menuitem span{cursor:default}.cke_menubutton{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#e9e9e9;display:block;outline:1px dotted}.cke_menubutton:hover{outline:0}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_disabled:hover,.cke_menubutton_disabled:focus,.cke_menubutton_disabled:active{background-color:transparent;outline:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#f8f8f8;padding:6px 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:#e9e9e9}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{background-color:#f8f8f8;outline:0}.cke_menuitem .cke_menubutton_on{background-color:#e9e9e9;border:1px solid #dedede;outline:0}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px;background-color:#e9e9e9}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_shortcut{color:#979797}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d1d1d1;height:1px}.cke_menuarrow{background:transparent url(images/arrow.png) no-repeat 0 10px;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow{background-image:none}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left;position:relative;margin-bottom:5px}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:1px;margin-bottom:10px}.cke_combo:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:5px;top:0;right:0}.cke_rtl .cke_combo:after{border-right:0;border-left:1px solid #bcbcbc;right:auto;left:0}.cke_hc .cke_combo:after{border-color:#000}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0;padding:1px}.cke_rtl a.cke_combo_button{float:right}.cke_hc a.cke_combo_button{padding:4px}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:active{background:#e5e5e5;border:1px solid #bcbcbc;padding:0 0 0 1px;margin-left:-1px}.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:active{background:#fff}@media screen and (hover:none){.cke_combo_off a.cke_combo_button:hover{background:transparent;border-color:transparent}.cke_combo_off a.cke_combo_button:active{background:#fff;border:1px solid #bcbcbc}}.cke_rtl .cke_combo_on a.cke_combo_button,.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:0 1px 0 0;margin-left:0;margin-right:-1px}.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:3px solid #000;padding:1px 1px 1px 2px}.cke_hc.cke_rtl .cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:1px 2px 1px 1px}.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 0 0 3px;margin-left:-3px}.cke_rtl .cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 3px 0 0;margin-left:0;margin-right:-3px}.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 1px 1px 7px;margin-left:-6px}.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 7px 1px 1px;margin-left:0;margin-right:-6px}.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0;margin:0}.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px;margin:0}.cke_toolbar .cke_combo+.cke_toolbar_end,.cke_toolbar .cke_combo+.cke_toolgroup{margin-right:0;margin-left:2px}.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:2px}.cke_hc .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:5px}.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:5px}.cke_toolbar.cke_toolbar_last .cke_combo:nth-last-child(-n+2):after{content:none;border:0;width:0;height:0}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#484848;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 10px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;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 #484848}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.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_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#484848;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:#e5e5e5}.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,.cke_button__sourcedialog_label{display:inline}.cke_combopanel__fontsize{width:135px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;text-align:center;opacity:.95;filter:alpha(opacity = 95);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png?t=LAHG) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=LAHG) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=LAHG) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=LAHG) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=LAHG) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=LAHG) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=LAHG) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=LAHG) no-repeat 0 -168px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png?t=LAHG) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=LAHG) no-repeat 0 -216px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png?t=LAHG) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=LAHG) no-repeat 0 -264px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png?t=LAHG) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=LAHG) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=LAHG) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=LAHG) no-repeat 0 -360px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png?t=LAHG) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=LAHG) no-repeat 0 -408px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png?t=LAHG) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=LAHG) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=LAHG) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=LAHG) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=LAHG) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=LAHG) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=LAHG) no-repeat 0 -576px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png?t=LAHG) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=LAHG) no-repeat 0 -624px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png?t=LAHG) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=LAHG) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=LAHG) no-repeat 0 -696px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png?t=LAHG) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=LAHG) no-repeat 0 -744px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png?t=LAHG) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=LAHG) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=LAHG) no-repeat 0 -816px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png?t=LAHG) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=LAHG) no-repeat 0 -864px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png?t=LAHG) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=LAHG) no-repeat 0 -912px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png?t=LAHG) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=LAHG) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=LAHG) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=LAHG) no-repeat 0 -1008px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png?t=LAHG) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=LAHG) no-repeat 0 -1056px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png?t=LAHG) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=LAHG) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=LAHG) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -168px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -360px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -408px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -576px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -624px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -696px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -816px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -840px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -864px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -912px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -1056px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -2256px!important}.cke_bottom{padding-bottom:3px}.cke_combo_text{margin-bottom:-1px;margin-top:1px}
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/skins/moono-lisa/editor_ie.css b/core/assets/vendor/ckeditor/skins/moono-lisa/editor_ie.css
index a09753327f7f..20033c2b9a9b 100644
--- a/core/assets/vendor/ckeditor/skins/moono-lisa/editor_ie.css
+++ b/core/assets/vendor/ckeditor/skins/moono-lisa/editor_ie.css
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.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}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #d1d1d1;padding:0}.cke_inner{display:block;background:#fff;padding:0;-webkit-touch-callout:none}.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 #d1d1d1;background:#f8f8f8;padding:6px 8px 2px;white-space:normal}.cke_float .cke_top{border:1px solid #d1d1d1}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #bcbcbc transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.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 #bcbcbc;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;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #d1d1d1}.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_block:focus{outline:0}.cke_panel_list{margin:0;padding:0;list-style-type:none;white-space:nowrap}.cke_panel_listItem{margin:0;padding:0}.cke_panel_listItem a{padding:6px 7px;display:block;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}.cke_hc .cke_panel_listItem a{border-style:none}.cke_panel_listItem.cke_selected a,.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e9e9e9}.cke_panel_listItem a:focus{outline:1px dotted #000}.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:4px 5px}.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_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px 7px 6px;color:#484848;border-bottom:1px solid #d1d1d1;background:#f8f8f8}.cke_colorblock{padding:10px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}a.cke_colorbox{padding:2px;float:left;width:20px;height:20px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{outline:0;padding:0;border:2px solid #139ff7}a:hover.cke_colorbox{border-color:#bcbcbc}span.cke_colorbox{width:20px;height:20px;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:3px;display:block;cursor:pointer}a.cke_colorauto{padding:0;border:1px solid transparent;margin-bottom:6px;height:26px;line-height:26px}a.cke_colormore{margin-top:10px;height:20px;line-height:19px}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{outline:0;border:#139ff7 1px solid;background-color:#f8f8f8}a:hover.cke_colorauto,a:hover.cke_colormore{border-color:#bcbcbc}.cke_colorauto span.cke_colorbox{width:18px;height:18px;border:1px solid #808080;margin-left:1px;margin-top:3px}.cke_rtl .cke_colorauto span.cke_colorbox{margin-left:0;margin-right:1px}span.cke_colorbox[style*="#ffffff"],span.cke_colorbox[style*="#FFFFFF"],span.cke_colorbox[style="background-color:#fff"],span.cke_colorbox[style="background-color:#FFF"],span.cke_colorbox[style*="rgb(255,255,255)"],span.cke_colorbox[style*="rgb(255, 255, 255)"]{border:1px solid #808080;width:18px;height:18px}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{border:0;float:left;margin:1px 2px 6px 0;padding-right:3px}.cke_rtl .cke_toolgroup{float:right;margin:1px 0 6px 2px;padding-left:3px;padding-right:0}.cke_hc .cke_toolgroup{margin-right:5px;margin-bottom:5px}.cke_hc.cke_rtl .cke_toolgroup{margin-right:0;margin-left:5px}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0;position:relative}a.cke_button_expandable{padding:4px 5px}.cke_rtl a.cke_button{float:right}.cke_hc a.cke_button{border:1px solid black;padding:3px 5px;margin:0 3px 5px 0}.cke_hc.cke_rtl a.cke_button{margin:0 0 5px 3px}a.cke_button_on{background:#fff;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_on{padding:3px 4px}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_off:hover,a.cke_button_expandable.cke_button_off:focus,a.cke_button_expandable.cke_button_off:active{padding:3px 4px}.cke_hc a.cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active{background:#e5e5e5;border:3px solid #000;padding:1px 3px}@media screen and (hover:none){a.cke_button_off:hover{background:transparent;border:0;padding:4px 6px}a.cke_button_expandable.cke_button_off:hover{padding:4px 5px}a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_off:active{padding:3px 4px}}a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{border:0;padding:4px 6px;background-color:transparent}a.cke_button_expandable.cke_button_disabled:hover,a.cke_button_expandable.cke_button_disabled:active{padding:4px 5px}a.cke_button_disabled:focus{border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_disabled:focus{padding:3px 4px}.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border:1px solid #acacac;padding:3px 5px;margin:0 3px 5px 0}.cke_hc a.cke_button_disabled:focus{border:3px solid #000;padding:1px 3px}.cke_hc.cke_rtl a.cke_button_disabled:hover,.cke_hc.cke_rtl a.cke_button_disabled:focus,.cke_hc.cke_rtl a.cke_button_disabled:active{margin:0 0 5px 3px}a.cke_button_disabled .cke_button_icon,a.cke_button_disabled .cke_button_arrow{opacity:.3}.cke_hc a.cke_button_disabled{border-color:#acacac}.cke_hc a.cke_button_disabled .cke_button_icon,.cke_hc a.cke_button_disabled .cke_button_label{opacity:.5}.cke_toolgroup a.cke_button:last-child:after,.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:0;right:-3px}.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-right:0;right:auto;border-left:1px solid #bcbcbc;top:0;left:-3px}.cke_hc .cke_toolgroup a.cke_button:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-color:#000;top:0;right:-7px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{top:0;right:auto;left:-7px}.cke_toolgroup a.cke_button:hover:last-child:after,.cke_toolgroup a.cke_button:focus:last-child:after,.cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:-4px}.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_rtl .cke_toolgroup a.cke_button:focus:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:auto;left:-4px}.cke_hc .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:-9px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:auto;left:-9px}.cke_toolbar.cke_toolbar_last .cke_toolgroup a.cke_button:last-child:after{content:none;border:0;width:0;height:0}.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:#484848}.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 3px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px 0 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#bcbcbc;margin:4px 2px 0 2px;height:18px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{background-color:#000;margin-left:2px;margin-right:5px;margin-bottom:9px}.cke_hc.cke_rtl .cke_toolbar_separator{margin-left:5px;margin-right:2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #bcbcbc}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser:hover{background:#e5e5e5}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border:3px solid transparent;border-bottom-color:#484848}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#484848}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0}.cke_menuitem span{cursor:default}.cke_menubutton{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#e9e9e9;display:block;outline:1px dotted}.cke_menubutton:hover{outline:0}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_disabled:hover,.cke_menubutton_disabled:focus,.cke_menubutton_disabled:active{background-color:transparent;outline:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#f8f8f8;padding:6px 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:#e9e9e9}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{background-color:#f8f8f8;outline:0}.cke_menuitem .cke_menubutton_on{background-color:#e9e9e9;border:1px solid #dedede;outline:0}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px;background-color:#e9e9e9}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_shortcut{color:#979797}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d1d1d1;height:1px}.cke_menuarrow{background:transparent url(images/arrow.png) no-repeat 0 10px;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow{background-image:none}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left;position:relative;margin-bottom:5px}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:1px;margin-bottom:10px}.cke_combo:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:5px;top:0;right:0}.cke_rtl .cke_combo:after{border-right:0;border-left:1px solid #bcbcbc;right:auto;left:0}.cke_hc .cke_combo:after{border-color:#000}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0;padding:1px}.cke_rtl a.cke_combo_button{float:right}.cke_hc a.cke_combo_button{padding:4px}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:active{background:#e5e5e5;border:1px solid #bcbcbc;padding:0 0 0 1px;margin-left:-1px}.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:active{background:#fff}@media screen and (hover:none){.cke_combo_off a.cke_combo_button:hover{background:transparent;border-color:transparent}.cke_combo_off a.cke_combo_button:active{background:#fff;border:1px solid #bcbcbc}}.cke_rtl .cke_combo_on a.cke_combo_button,.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:0 1px 0 0;margin-left:0;margin-right:-1px}.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:3px solid #000;padding:1px 1px 1px 2px}.cke_hc.cke_rtl .cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:1px 2px 1px 1px}.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 0 0 3px;margin-left:-3px}.cke_rtl .cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 3px 0 0;margin-left:0;margin-right:-3px}.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 1px 1px 7px;margin-left:-6px}.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 7px 1px 1px;margin-left:0;margin-right:-6px}.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0;margin:0}.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px;margin:0}.cke_toolbar .cke_combo+.cke_toolbar_end,.cke_toolbar .cke_combo+.cke_toolgroup{margin-right:0;margin-left:2px}.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:2px}.cke_hc .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:5px}.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:5px}.cke_toolbar.cke_toolbar_last .cke_combo:nth-last-child(-n+2):after{content:none;border:0;width:0;height:0}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#484848;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 10px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;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 #484848}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.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_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#484848;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:#e5e5e5}.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,.cke_button__sourcedialog_label{display:inline}.cke_combopanel__fontsize{width:135px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;text-align:center;opacity:.95;filter:alpha(opacity = 95);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png?t=L7CE) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=L7CE) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=L7CE) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=L7CE) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=L7CE) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=L7CE) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=L7CE) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=L7CE) no-repeat 0 -168px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png?t=L7CE) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=L7CE) no-repeat 0 -216px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png?t=L7CE) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=L7CE) no-repeat 0 -264px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png?t=L7CE) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=L7CE) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=L7CE) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=L7CE) no-repeat 0 -360px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png?t=L7CE) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=L7CE) no-repeat 0 -408px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png?t=L7CE) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=L7CE) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=L7CE) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=L7CE) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=L7CE) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=L7CE) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=L7CE) no-repeat 0 -576px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png?t=L7CE) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=L7CE) no-repeat 0 -624px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png?t=L7CE) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=L7CE) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=L7CE) no-repeat 0 -696px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png?t=L7CE) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=L7CE) no-repeat 0 -744px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png?t=L7CE) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=L7CE) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=L7CE) no-repeat 0 -816px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png?t=L7CE) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=L7CE) no-repeat 0 -864px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png?t=L7CE) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=L7CE) no-repeat 0 -912px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png?t=L7CE) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=L7CE) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=L7CE) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=L7CE) no-repeat 0 -1008px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png?t=L7CE) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=L7CE) no-repeat 0 -1056px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png?t=L7CE) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=L7CE) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=L7CE) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -168px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -360px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -408px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -576px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -624px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -696px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -816px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -840px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -864px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -912px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -1056px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -2256px!important}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)}
\ No newline at end of file
+.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.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}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #d1d1d1;padding:0}.cke_inner{display:block;background:#fff;padding:0;-webkit-touch-callout:none}.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 #d1d1d1;background:#f8f8f8;padding:6px 8px 2px;white-space:normal}.cke_float .cke_top{border:1px solid #d1d1d1}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #bcbcbc transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.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 #bcbcbc;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;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #d1d1d1}.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_block:focus{outline:0}.cke_panel_list{margin:0;padding:0;list-style-type:none;white-space:nowrap}.cke_panel_listItem{margin:0;padding:0}.cke_panel_listItem a{padding:6px 7px;display:block;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}.cke_hc .cke_panel_listItem a{border-style:none}.cke_panel_listItem.cke_selected a,.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e9e9e9}.cke_panel_listItem a:focus{outline:1px dotted #000}.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:4px 5px}.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_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px 7px 6px;color:#484848;border-bottom:1px solid #d1d1d1;background:#f8f8f8}.cke_colorblock{padding:10px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}a.cke_colorbox{padding:2px;float:left;width:20px;height:20px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{outline:0;padding:0;border:2px solid #139ff7}a:hover.cke_colorbox{border-color:#bcbcbc}span.cke_colorbox{width:20px;height:20px;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:3px;display:block;cursor:pointer}a.cke_colorauto{padding:0;border:1px solid transparent;margin-bottom:6px;height:26px;line-height:26px}a.cke_colormore{margin-top:10px;height:20px;line-height:19px}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{outline:0;border:#139ff7 1px solid;background-color:#f8f8f8}a:hover.cke_colorauto,a:hover.cke_colormore{border-color:#bcbcbc}.cke_colorauto span.cke_colorbox{width:18px;height:18px;border:1px solid #808080;margin-left:1px;margin-top:3px}.cke_rtl .cke_colorauto span.cke_colorbox{margin-left:0;margin-right:1px}span.cke_colorbox[style*="#ffffff"],span.cke_colorbox[style*="#FFFFFF"],span.cke_colorbox[style="background-color:#fff"],span.cke_colorbox[style="background-color:#FFF"],span.cke_colorbox[style*="rgb(255,255,255)"],span.cke_colorbox[style*="rgb(255, 255, 255)"]{border:1px solid #808080;width:18px;height:18px}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{border:0;float:left;margin:1px 2px 6px 0;padding-right:3px}.cke_rtl .cke_toolgroup{float:right;margin:1px 0 6px 2px;padding-left:3px;padding-right:0}.cke_hc .cke_toolgroup{margin-right:5px;margin-bottom:5px}.cke_hc.cke_rtl .cke_toolgroup{margin-right:0;margin-left:5px}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0;position:relative}a.cke_button_expandable{padding:4px 5px}.cke_rtl a.cke_button{float:right}.cke_hc a.cke_button{border:1px solid black;padding:3px 5px;margin:0 3px 5px 0}.cke_hc.cke_rtl a.cke_button{margin:0 0 5px 3px}a.cke_button_on{background:#fff;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_on{padding:3px 4px}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_off:hover,a.cke_button_expandable.cke_button_off:focus,a.cke_button_expandable.cke_button_off:active{padding:3px 4px}.cke_hc a.cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active{background:#e5e5e5;border:3px solid #000;padding:1px 3px}@media screen and (hover:none){a.cke_button_off:hover{background:transparent;border:0;padding:4px 6px}a.cke_button_expandable.cke_button_off:hover{padding:4px 5px}a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_off:active{padding:3px 4px}}a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{border:0;padding:4px 6px;background-color:transparent}a.cke_button_expandable.cke_button_disabled:hover,a.cke_button_expandable.cke_button_disabled:active{padding:4px 5px}a.cke_button_disabled:focus{border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_disabled:focus{padding:3px 4px}.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border:1px solid #acacac;padding:3px 5px;margin:0 3px 5px 0}.cke_hc a.cke_button_disabled:focus{border:3px solid #000;padding:1px 3px}.cke_hc.cke_rtl a.cke_button_disabled:hover,.cke_hc.cke_rtl a.cke_button_disabled:focus,.cke_hc.cke_rtl a.cke_button_disabled:active{margin:0 0 5px 3px}a.cke_button_disabled .cke_button_icon,a.cke_button_disabled .cke_button_arrow{opacity:.3}.cke_hc a.cke_button_disabled{border-color:#acacac}.cke_hc a.cke_button_disabled .cke_button_icon,.cke_hc a.cke_button_disabled .cke_button_label{opacity:.5}.cke_toolgroup a.cke_button:last-child:after,.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:0;right:-3px}.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-right:0;right:auto;border-left:1px solid #bcbcbc;top:0;left:-3px}.cke_hc .cke_toolgroup a.cke_button:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-color:#000;top:0;right:-7px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{top:0;right:auto;left:-7px}.cke_toolgroup a.cke_button:hover:last-child:after,.cke_toolgroup a.cke_button:focus:last-child:after,.cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:-4px}.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_rtl .cke_toolgroup a.cke_button:focus:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:auto;left:-4px}.cke_hc .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:-9px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:auto;left:-9px}.cke_toolbar.cke_toolbar_last .cke_toolgroup a.cke_button:last-child:after{content:none;border:0;width:0;height:0}.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:#484848}.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 3px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px 0 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#bcbcbc;margin:4px 2px 0 2px;height:18px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{background-color:#000;margin-left:2px;margin-right:5px;margin-bottom:9px}.cke_hc.cke_rtl .cke_toolbar_separator{margin-left:5px;margin-right:2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #bcbcbc}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser:hover{background:#e5e5e5}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border:3px solid transparent;border-bottom-color:#484848}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#484848}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0}.cke_menuitem span{cursor:default}.cke_menubutton{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#e9e9e9;display:block;outline:1px dotted}.cke_menubutton:hover{outline:0}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_disabled:hover,.cke_menubutton_disabled:focus,.cke_menubutton_disabled:active{background-color:transparent;outline:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#f8f8f8;padding:6px 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:#e9e9e9}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{background-color:#f8f8f8;outline:0}.cke_menuitem .cke_menubutton_on{background-color:#e9e9e9;border:1px solid #dedede;outline:0}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px;background-color:#e9e9e9}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_shortcut{color:#979797}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d1d1d1;height:1px}.cke_menuarrow{background:transparent url(images/arrow.png) no-repeat 0 10px;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow{background-image:none}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left;position:relative;margin-bottom:5px}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:1px;margin-bottom:10px}.cke_combo:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:5px;top:0;right:0}.cke_rtl .cke_combo:after{border-right:0;border-left:1px solid #bcbcbc;right:auto;left:0}.cke_hc .cke_combo:after{border-color:#000}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0;padding:1px}.cke_rtl a.cke_combo_button{float:right}.cke_hc a.cke_combo_button{padding:4px}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:active{background:#e5e5e5;border:1px solid #bcbcbc;padding:0 0 0 1px;margin-left:-1px}.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:active{background:#fff}@media screen and (hover:none){.cke_combo_off a.cke_combo_button:hover{background:transparent;border-color:transparent}.cke_combo_off a.cke_combo_button:active{background:#fff;border:1px solid #bcbcbc}}.cke_rtl .cke_combo_on a.cke_combo_button,.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:0 1px 0 0;margin-left:0;margin-right:-1px}.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:3px solid #000;padding:1px 1px 1px 2px}.cke_hc.cke_rtl .cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:1px 2px 1px 1px}.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 0 0 3px;margin-left:-3px}.cke_rtl .cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 3px 0 0;margin-left:0;margin-right:-3px}.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 1px 1px 7px;margin-left:-6px}.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 7px 1px 1px;margin-left:0;margin-right:-6px}.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0;margin:0}.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px;margin:0}.cke_toolbar .cke_combo+.cke_toolbar_end,.cke_toolbar .cke_combo+.cke_toolgroup{margin-right:0;margin-left:2px}.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:2px}.cke_hc .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:5px}.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:5px}.cke_toolbar.cke_toolbar_last .cke_combo:nth-last-child(-n+2):after{content:none;border:0;width:0;height:0}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#484848;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 10px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;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 #484848}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.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_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#484848;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:#e5e5e5}.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,.cke_button__sourcedialog_label{display:inline}.cke_combopanel__fontsize{width:135px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;text-align:center;opacity:.95;filter:alpha(opacity = 95);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png?t=LAHG) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=LAHG) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=LAHG) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=LAHG) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=LAHG) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=LAHG) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=LAHG) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=LAHG) no-repeat 0 -168px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png?t=LAHG) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=LAHG) no-repeat 0 -216px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png?t=LAHG) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=LAHG) no-repeat 0 -264px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png?t=LAHG) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=LAHG) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=LAHG) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=LAHG) no-repeat 0 -360px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png?t=LAHG) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=LAHG) no-repeat 0 -408px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png?t=LAHG) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=LAHG) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=LAHG) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=LAHG) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=LAHG) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=LAHG) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=LAHG) no-repeat 0 -576px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png?t=LAHG) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=LAHG) no-repeat 0 -624px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png?t=LAHG) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=LAHG) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=LAHG) no-repeat 0 -696px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png?t=LAHG) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=LAHG) no-repeat 0 -744px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png?t=LAHG) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=LAHG) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=LAHG) no-repeat 0 -816px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png?t=LAHG) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=LAHG) no-repeat 0 -864px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png?t=LAHG) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=LAHG) no-repeat 0 -912px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png?t=LAHG) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=LAHG) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=LAHG) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=LAHG) no-repeat 0 -1008px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png?t=LAHG) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=LAHG) no-repeat 0 -1056px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png?t=LAHG) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=LAHG) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=LAHG) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -168px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -360px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -408px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -576px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -624px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -696px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -816px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -840px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -864px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -912px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -1056px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -2256px!important}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)}
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/skins/moono-lisa/editor_ie8.css b/core/assets/vendor/ckeditor/skins/moono-lisa/editor_ie8.css
index 959cd0fe053f..e385adf24184 100644
--- a/core/assets/vendor/ckeditor/skins/moono-lisa/editor_ie8.css
+++ b/core/assets/vendor/ckeditor/skins/moono-lisa/editor_ie8.css
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.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}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #d1d1d1;padding:0}.cke_inner{display:block;background:#fff;padding:0;-webkit-touch-callout:none}.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 #d1d1d1;background:#f8f8f8;padding:6px 8px 2px;white-space:normal}.cke_float .cke_top{border:1px solid #d1d1d1}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #bcbcbc transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.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 #bcbcbc;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;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #d1d1d1}.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_block:focus{outline:0}.cke_panel_list{margin:0;padding:0;list-style-type:none;white-space:nowrap}.cke_panel_listItem{margin:0;padding:0}.cke_panel_listItem a{padding:6px 7px;display:block;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}.cke_hc .cke_panel_listItem a{border-style:none}.cke_panel_listItem.cke_selected a,.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e9e9e9}.cke_panel_listItem a:focus{outline:1px dotted #000}.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:4px 5px}.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_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px 7px 6px;color:#484848;border-bottom:1px solid #d1d1d1;background:#f8f8f8}.cke_colorblock{padding:10px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}a.cke_colorbox{padding:2px;float:left;width:20px;height:20px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{outline:0;padding:0;border:2px solid #139ff7}a:hover.cke_colorbox{border-color:#bcbcbc}span.cke_colorbox{width:20px;height:20px;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:3px;display:block;cursor:pointer}a.cke_colorauto{padding:0;border:1px solid transparent;margin-bottom:6px;height:26px;line-height:26px}a.cke_colormore{margin-top:10px;height:20px;line-height:19px}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{outline:0;border:#139ff7 1px solid;background-color:#f8f8f8}a:hover.cke_colorauto,a:hover.cke_colormore{border-color:#bcbcbc}.cke_colorauto span.cke_colorbox{width:18px;height:18px;border:1px solid #808080;margin-left:1px;margin-top:3px}.cke_rtl .cke_colorauto span.cke_colorbox{margin-left:0;margin-right:1px}span.cke_colorbox[style*="#ffffff"],span.cke_colorbox[style*="#FFFFFF"],span.cke_colorbox[style="background-color:#fff"],span.cke_colorbox[style="background-color:#FFF"],span.cke_colorbox[style*="rgb(255,255,255)"],span.cke_colorbox[style*="rgb(255, 255, 255)"]{border:1px solid #808080;width:18px;height:18px}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{border:0;float:left;margin:1px 2px 6px 0;padding-right:3px}.cke_rtl .cke_toolgroup{float:right;margin:1px 0 6px 2px;padding-left:3px;padding-right:0}.cke_hc .cke_toolgroup{margin-right:5px;margin-bottom:5px}.cke_hc.cke_rtl .cke_toolgroup{margin-right:0;margin-left:5px}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0;position:relative}a.cke_button_expandable{padding:4px 5px}.cke_rtl a.cke_button{float:right}.cke_hc a.cke_button{border:1px solid black;padding:3px 5px;margin:0 3px 5px 0}.cke_hc.cke_rtl a.cke_button{margin:0 0 5px 3px}a.cke_button_on{background:#fff;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_on{padding:3px 4px}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_off:hover,a.cke_button_expandable.cke_button_off:focus,a.cke_button_expandable.cke_button_off:active{padding:3px 4px}.cke_hc a.cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active{background:#e5e5e5;border:3px solid #000;padding:1px 3px}@media screen and (hover:none){a.cke_button_off:hover{background:transparent;border:0;padding:4px 6px}a.cke_button_expandable.cke_button_off:hover{padding:4px 5px}a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_off:active{padding:3px 4px}}a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{border:0;padding:4px 6px;background-color:transparent}a.cke_button_expandable.cke_button_disabled:hover,a.cke_button_expandable.cke_button_disabled:active{padding:4px 5px}a.cke_button_disabled:focus{border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_disabled:focus{padding:3px 4px}.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border:1px solid #acacac;padding:3px 5px;margin:0 3px 5px 0}.cke_hc a.cke_button_disabled:focus{border:3px solid #000;padding:1px 3px}.cke_hc.cke_rtl a.cke_button_disabled:hover,.cke_hc.cke_rtl a.cke_button_disabled:focus,.cke_hc.cke_rtl a.cke_button_disabled:active{margin:0 0 5px 3px}a.cke_button_disabled .cke_button_icon,a.cke_button_disabled .cke_button_arrow{opacity:.3}.cke_hc a.cke_button_disabled{border-color:#acacac}.cke_hc a.cke_button_disabled .cke_button_icon,.cke_hc a.cke_button_disabled .cke_button_label{opacity:.5}.cke_toolgroup a.cke_button:last-child:after,.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:0;right:-3px}.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-right:0;right:auto;border-left:1px solid #bcbcbc;top:0;left:-3px}.cke_hc .cke_toolgroup a.cke_button:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-color:#000;top:0;right:-7px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{top:0;right:auto;left:-7px}.cke_toolgroup a.cke_button:hover:last-child:after,.cke_toolgroup a.cke_button:focus:last-child:after,.cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:-4px}.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_rtl .cke_toolgroup a.cke_button:focus:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:auto;left:-4px}.cke_hc .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:-9px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:auto;left:-9px}.cke_toolbar.cke_toolbar_last .cke_toolgroup a.cke_button:last-child:after{content:none;border:0;width:0;height:0}.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:#484848}.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 3px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px 0 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#bcbcbc;margin:4px 2px 0 2px;height:18px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{background-color:#000;margin-left:2px;margin-right:5px;margin-bottom:9px}.cke_hc.cke_rtl .cke_toolbar_separator{margin-left:5px;margin-right:2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #bcbcbc}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser:hover{background:#e5e5e5}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border:3px solid transparent;border-bottom-color:#484848}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#484848}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0}.cke_menuitem span{cursor:default}.cke_menubutton{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#e9e9e9;display:block;outline:1px dotted}.cke_menubutton:hover{outline:0}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_disabled:hover,.cke_menubutton_disabled:focus,.cke_menubutton_disabled:active{background-color:transparent;outline:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#f8f8f8;padding:6px 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:#e9e9e9}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{background-color:#f8f8f8;outline:0}.cke_menuitem .cke_menubutton_on{background-color:#e9e9e9;border:1px solid #dedede;outline:0}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px;background-color:#e9e9e9}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_shortcut{color:#979797}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d1d1d1;height:1px}.cke_menuarrow{background:transparent url(images/arrow.png) no-repeat 0 10px;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow{background-image:none}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left;position:relative;margin-bottom:5px}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:1px;margin-bottom:10px}.cke_combo:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:5px;top:0;right:0}.cke_rtl .cke_combo:after{border-right:0;border-left:1px solid #bcbcbc;right:auto;left:0}.cke_hc .cke_combo:after{border-color:#000}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0;padding:1px}.cke_rtl a.cke_combo_button{float:right}.cke_hc a.cke_combo_button{padding:4px}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:active{background:#e5e5e5;border:1px solid #bcbcbc;padding:0 0 0 1px;margin-left:-1px}.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:active{background:#fff}@media screen and (hover:none){.cke_combo_off a.cke_combo_button:hover{background:transparent;border-color:transparent}.cke_combo_off a.cke_combo_button:active{background:#fff;border:1px solid #bcbcbc}}.cke_rtl .cke_combo_on a.cke_combo_button,.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:0 1px 0 0;margin-left:0;margin-right:-1px}.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:3px solid #000;padding:1px 1px 1px 2px}.cke_hc.cke_rtl .cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:1px 2px 1px 1px}.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 0 0 3px;margin-left:-3px}.cke_rtl .cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 3px 0 0;margin-left:0;margin-right:-3px}.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 1px 1px 7px;margin-left:-6px}.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 7px 1px 1px;margin-left:0;margin-right:-6px}.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0;margin:0}.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px;margin:0}.cke_toolbar .cke_combo+.cke_toolbar_end,.cke_toolbar .cke_combo+.cke_toolgroup{margin-right:0;margin-left:2px}.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:2px}.cke_hc .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:5px}.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:5px}.cke_toolbar.cke_toolbar_last .cke_combo:nth-last-child(-n+2):after{content:none;border:0;width:0;height:0}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#484848;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 10px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;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 #484848}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.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_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#484848;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:#e5e5e5}.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,.cke_button__sourcedialog_label{display:inline}.cke_combopanel__fontsize{width:135px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;text-align:center;opacity:.95;filter:alpha(opacity = 95);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png?t=L7CE) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=L7CE) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=L7CE) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=L7CE) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=L7CE) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=L7CE) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=L7CE) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=L7CE) no-repeat 0 -168px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png?t=L7CE) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=L7CE) no-repeat 0 -216px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png?t=L7CE) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=L7CE) no-repeat 0 -264px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png?t=L7CE) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=L7CE) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=L7CE) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=L7CE) no-repeat 0 -360px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png?t=L7CE) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=L7CE) no-repeat 0 -408px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png?t=L7CE) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=L7CE) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=L7CE) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=L7CE) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=L7CE) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=L7CE) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=L7CE) no-repeat 0 -576px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png?t=L7CE) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=L7CE) no-repeat 0 -624px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png?t=L7CE) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=L7CE) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=L7CE) no-repeat 0 -696px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png?t=L7CE) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=L7CE) no-repeat 0 -744px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png?t=L7CE) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=L7CE) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=L7CE) no-repeat 0 -816px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png?t=L7CE) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=L7CE) no-repeat 0 -864px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png?t=L7CE) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=L7CE) no-repeat 0 -912px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png?t=L7CE) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=L7CE) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=L7CE) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=L7CE) no-repeat 0 -1008px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png?t=L7CE) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=L7CE) no-repeat 0 -1056px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png?t=L7CE) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=L7CE) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=L7CE) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -168px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -360px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -408px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -576px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -624px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -696px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -816px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -840px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -864px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -912px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -1056px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -2256px!important}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_toolbar{position:relative}.cke_rtl .cke_toolbar_end{right:auto;left:0}.cke_toolbar_end:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:1px;right:2px}.cke_rtl .cke_toolbar_end:after{right:auto;left:2px}.cke_hc .cke_toolbar_end:after{top:2px;right:5px;border-color:#000}.cke_hc.cke_rtl .cke_toolbar_end:after{right:auto;left:5px}.cke_combo+.cke_toolbar_end:after,.cke_toolbar.cke_toolbar_last .cke_toolbar_end:after{content:none;border:0}.cke_combo+.cke_toolgroup+.cke_toolbar_end:after{right:0}.cke_rtl .cke_combo+.cke_toolgroup+.cke_toolbar_end:after{right:auto;left:0}
\ No newline at end of file
+.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.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}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #d1d1d1;padding:0}.cke_inner{display:block;background:#fff;padding:0;-webkit-touch-callout:none}.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 #d1d1d1;background:#f8f8f8;padding:6px 8px 2px;white-space:normal}.cke_float .cke_top{border:1px solid #d1d1d1}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #bcbcbc transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.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 #bcbcbc;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;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #d1d1d1}.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_block:focus{outline:0}.cke_panel_list{margin:0;padding:0;list-style-type:none;white-space:nowrap}.cke_panel_listItem{margin:0;padding:0}.cke_panel_listItem a{padding:6px 7px;display:block;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}.cke_hc .cke_panel_listItem a{border-style:none}.cke_panel_listItem.cke_selected a,.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e9e9e9}.cke_panel_listItem a:focus{outline:1px dotted #000}.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:4px 5px}.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_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px 7px 6px;color:#484848;border-bottom:1px solid #d1d1d1;background:#f8f8f8}.cke_colorblock{padding:10px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}a.cke_colorbox{padding:2px;float:left;width:20px;height:20px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{outline:0;padding:0;border:2px solid #139ff7}a:hover.cke_colorbox{border-color:#bcbcbc}span.cke_colorbox{width:20px;height:20px;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:3px;display:block;cursor:pointer}a.cke_colorauto{padding:0;border:1px solid transparent;margin-bottom:6px;height:26px;line-height:26px}a.cke_colormore{margin-top:10px;height:20px;line-height:19px}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{outline:0;border:#139ff7 1px solid;background-color:#f8f8f8}a:hover.cke_colorauto,a:hover.cke_colormore{border-color:#bcbcbc}.cke_colorauto span.cke_colorbox{width:18px;height:18px;border:1px solid #808080;margin-left:1px;margin-top:3px}.cke_rtl .cke_colorauto span.cke_colorbox{margin-left:0;margin-right:1px}span.cke_colorbox[style*="#ffffff"],span.cke_colorbox[style*="#FFFFFF"],span.cke_colorbox[style="background-color:#fff"],span.cke_colorbox[style="background-color:#FFF"],span.cke_colorbox[style*="rgb(255,255,255)"],span.cke_colorbox[style*="rgb(255, 255, 255)"]{border:1px solid #808080;width:18px;height:18px}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{border:0;float:left;margin:1px 2px 6px 0;padding-right:3px}.cke_rtl .cke_toolgroup{float:right;margin:1px 0 6px 2px;padding-left:3px;padding-right:0}.cke_hc .cke_toolgroup{margin-right:5px;margin-bottom:5px}.cke_hc.cke_rtl .cke_toolgroup{margin-right:0;margin-left:5px}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0;position:relative}a.cke_button_expandable{padding:4px 5px}.cke_rtl a.cke_button{float:right}.cke_hc a.cke_button{border:1px solid black;padding:3px 5px;margin:0 3px 5px 0}.cke_hc.cke_rtl a.cke_button{margin:0 0 5px 3px}a.cke_button_on{background:#fff;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_on{padding:3px 4px}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_off:hover,a.cke_button_expandable.cke_button_off:focus,a.cke_button_expandable.cke_button_off:active{padding:3px 4px}.cke_hc a.cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active{background:#e5e5e5;border:3px solid #000;padding:1px 3px}@media screen and (hover:none){a.cke_button_off:hover{background:transparent;border:0;padding:4px 6px}a.cke_button_expandable.cke_button_off:hover{padding:4px 5px}a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_off:active{padding:3px 4px}}a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{border:0;padding:4px 6px;background-color:transparent}a.cke_button_expandable.cke_button_disabled:hover,a.cke_button_expandable.cke_button_disabled:active{padding:4px 5px}a.cke_button_disabled:focus{border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_disabled:focus{padding:3px 4px}.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border:1px solid #acacac;padding:3px 5px;margin:0 3px 5px 0}.cke_hc a.cke_button_disabled:focus{border:3px solid #000;padding:1px 3px}.cke_hc.cke_rtl a.cke_button_disabled:hover,.cke_hc.cke_rtl a.cke_button_disabled:focus,.cke_hc.cke_rtl a.cke_button_disabled:active{margin:0 0 5px 3px}a.cke_button_disabled .cke_button_icon,a.cke_button_disabled .cke_button_arrow{opacity:.3}.cke_hc a.cke_button_disabled{border-color:#acacac}.cke_hc a.cke_button_disabled .cke_button_icon,.cke_hc a.cke_button_disabled .cke_button_label{opacity:.5}.cke_toolgroup a.cke_button:last-child:after,.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:0;right:-3px}.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-right:0;right:auto;border-left:1px solid #bcbcbc;top:0;left:-3px}.cke_hc .cke_toolgroup a.cke_button:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-color:#000;top:0;right:-7px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{top:0;right:auto;left:-7px}.cke_toolgroup a.cke_button:hover:last-child:after,.cke_toolgroup a.cke_button:focus:last-child:after,.cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:-4px}.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_rtl .cke_toolgroup a.cke_button:focus:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:auto;left:-4px}.cke_hc .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:-9px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:auto;left:-9px}.cke_toolbar.cke_toolbar_last .cke_toolgroup a.cke_button:last-child:after{content:none;border:0;width:0;height:0}.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:#484848}.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 3px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px 0 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#bcbcbc;margin:4px 2px 0 2px;height:18px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{background-color:#000;margin-left:2px;margin-right:5px;margin-bottom:9px}.cke_hc.cke_rtl .cke_toolbar_separator{margin-left:5px;margin-right:2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #bcbcbc}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser:hover{background:#e5e5e5}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border:3px solid transparent;border-bottom-color:#484848}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#484848}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0}.cke_menuitem span{cursor:default}.cke_menubutton{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#e9e9e9;display:block;outline:1px dotted}.cke_menubutton:hover{outline:0}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_disabled:hover,.cke_menubutton_disabled:focus,.cke_menubutton_disabled:active{background-color:transparent;outline:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#f8f8f8;padding:6px 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:#e9e9e9}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{background-color:#f8f8f8;outline:0}.cke_menuitem .cke_menubutton_on{background-color:#e9e9e9;border:1px solid #dedede;outline:0}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px;background-color:#e9e9e9}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_shortcut{color:#979797}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d1d1d1;height:1px}.cke_menuarrow{background:transparent url(images/arrow.png) no-repeat 0 10px;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow{background-image:none}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left;position:relative;margin-bottom:5px}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:1px;margin-bottom:10px}.cke_combo:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:5px;top:0;right:0}.cke_rtl .cke_combo:after{border-right:0;border-left:1px solid #bcbcbc;right:auto;left:0}.cke_hc .cke_combo:after{border-color:#000}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0;padding:1px}.cke_rtl a.cke_combo_button{float:right}.cke_hc a.cke_combo_button{padding:4px}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:active{background:#e5e5e5;border:1px solid #bcbcbc;padding:0 0 0 1px;margin-left:-1px}.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:active{background:#fff}@media screen and (hover:none){.cke_combo_off a.cke_combo_button:hover{background:transparent;border-color:transparent}.cke_combo_off a.cke_combo_button:active{background:#fff;border:1px solid #bcbcbc}}.cke_rtl .cke_combo_on a.cke_combo_button,.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:0 1px 0 0;margin-left:0;margin-right:-1px}.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:3px solid #000;padding:1px 1px 1px 2px}.cke_hc.cke_rtl .cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:1px 2px 1px 1px}.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 0 0 3px;margin-left:-3px}.cke_rtl .cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 3px 0 0;margin-left:0;margin-right:-3px}.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 1px 1px 7px;margin-left:-6px}.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 7px 1px 1px;margin-left:0;margin-right:-6px}.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0;margin:0}.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px;margin:0}.cke_toolbar .cke_combo+.cke_toolbar_end,.cke_toolbar .cke_combo+.cke_toolgroup{margin-right:0;margin-left:2px}.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:2px}.cke_hc .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:5px}.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:5px}.cke_toolbar.cke_toolbar_last .cke_combo:nth-last-child(-n+2):after{content:none;border:0;width:0;height:0}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#484848;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 10px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;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 #484848}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.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_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#484848;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:#e5e5e5}.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,.cke_button__sourcedialog_label{display:inline}.cke_combopanel__fontsize{width:135px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;text-align:center;opacity:.95;filter:alpha(opacity = 95);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png?t=LAHG) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=LAHG) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=LAHG) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=LAHG) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=LAHG) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=LAHG) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=LAHG) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=LAHG) no-repeat 0 -168px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png?t=LAHG) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=LAHG) no-repeat 0 -216px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png?t=LAHG) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=LAHG) no-repeat 0 -264px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png?t=LAHG) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=LAHG) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=LAHG) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=LAHG) no-repeat 0 -360px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png?t=LAHG) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=LAHG) no-repeat 0 -408px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png?t=LAHG) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=LAHG) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=LAHG) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=LAHG) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=LAHG) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=LAHG) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=LAHG) no-repeat 0 -576px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png?t=LAHG) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=LAHG) no-repeat 0 -624px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png?t=LAHG) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=LAHG) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=LAHG) no-repeat 0 -696px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png?t=LAHG) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=LAHG) no-repeat 0 -744px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png?t=LAHG) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=LAHG) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=LAHG) no-repeat 0 -816px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png?t=LAHG) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=LAHG) no-repeat 0 -864px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png?t=LAHG) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=LAHG) no-repeat 0 -912px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png?t=LAHG) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=LAHG) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=LAHG) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=LAHG) no-repeat 0 -1008px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png?t=LAHG) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=LAHG) no-repeat 0 -1056px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png?t=LAHG) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=LAHG) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=LAHG) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -168px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -360px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -408px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -576px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -624px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -696px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -816px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -840px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -864px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -912px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -1056px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -2256px!important}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_toolbar{position:relative}.cke_rtl .cke_toolbar_end{right:auto;left:0}.cke_toolbar_end:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:1px;right:2px}.cke_rtl .cke_toolbar_end:after{right:auto;left:2px}.cke_hc .cke_toolbar_end:after{top:2px;right:5px;border-color:#000}.cke_hc.cke_rtl .cke_toolbar_end:after{right:auto;left:5px}.cke_combo+.cke_toolbar_end:after,.cke_toolbar.cke_toolbar_last .cke_toolbar_end:after{content:none;border:0}.cke_combo+.cke_toolgroup+.cke_toolbar_end:after{right:0}.cke_rtl .cke_combo+.cke_toolgroup+.cke_toolbar_end:after{right:auto;left:0}
\ No newline at end of file
diff --git a/core/assets/vendor/ckeditor/skins/moono-lisa/editor_iequirks.css b/core/assets/vendor/ckeditor/skins/moono-lisa/editor_iequirks.css
index e0bbd038eddd..eedc04958930 100644
--- a/core/assets/vendor/ckeditor/skins/moono-lisa/editor_iequirks.css
+++ b/core/assets/vendor/ckeditor/skins/moono-lisa/editor_iequirks.css
@@ -2,4 +2,4 @@
 Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.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}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #d1d1d1;padding:0}.cke_inner{display:block;background:#fff;padding:0;-webkit-touch-callout:none}.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 #d1d1d1;background:#f8f8f8;padding:6px 8px 2px;white-space:normal}.cke_float .cke_top{border:1px solid #d1d1d1}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #bcbcbc transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.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 #bcbcbc;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;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #d1d1d1}.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_block:focus{outline:0}.cke_panel_list{margin:0;padding:0;list-style-type:none;white-space:nowrap}.cke_panel_listItem{margin:0;padding:0}.cke_panel_listItem a{padding:6px 7px;display:block;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}.cke_hc .cke_panel_listItem a{border-style:none}.cke_panel_listItem.cke_selected a,.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e9e9e9}.cke_panel_listItem a:focus{outline:1px dotted #000}.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:4px 5px}.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_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px 7px 6px;color:#484848;border-bottom:1px solid #d1d1d1;background:#f8f8f8}.cke_colorblock{padding:10px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}a.cke_colorbox{padding:2px;float:left;width:20px;height:20px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{outline:0;padding:0;border:2px solid #139ff7}a:hover.cke_colorbox{border-color:#bcbcbc}span.cke_colorbox{width:20px;height:20px;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:3px;display:block;cursor:pointer}a.cke_colorauto{padding:0;border:1px solid transparent;margin-bottom:6px;height:26px;line-height:26px}a.cke_colormore{margin-top:10px;height:20px;line-height:19px}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{outline:0;border:#139ff7 1px solid;background-color:#f8f8f8}a:hover.cke_colorauto,a:hover.cke_colormore{border-color:#bcbcbc}.cke_colorauto span.cke_colorbox{width:18px;height:18px;border:1px solid #808080;margin-left:1px;margin-top:3px}.cke_rtl .cke_colorauto span.cke_colorbox{margin-left:0;margin-right:1px}span.cke_colorbox[style*="#ffffff"],span.cke_colorbox[style*="#FFFFFF"],span.cke_colorbox[style="background-color:#fff"],span.cke_colorbox[style="background-color:#FFF"],span.cke_colorbox[style*="rgb(255,255,255)"],span.cke_colorbox[style*="rgb(255, 255, 255)"]{border:1px solid #808080;width:18px;height:18px}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{border:0;float:left;margin:1px 2px 6px 0;padding-right:3px}.cke_rtl .cke_toolgroup{float:right;margin:1px 0 6px 2px;padding-left:3px;padding-right:0}.cke_hc .cke_toolgroup{margin-right:5px;margin-bottom:5px}.cke_hc.cke_rtl .cke_toolgroup{margin-right:0;margin-left:5px}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0;position:relative}a.cke_button_expandable{padding:4px 5px}.cke_rtl a.cke_button{float:right}.cke_hc a.cke_button{border:1px solid black;padding:3px 5px;margin:0 3px 5px 0}.cke_hc.cke_rtl a.cke_button{margin:0 0 5px 3px}a.cke_button_on{background:#fff;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_on{padding:3px 4px}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_off:hover,a.cke_button_expandable.cke_button_off:focus,a.cke_button_expandable.cke_button_off:active{padding:3px 4px}.cke_hc a.cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active{background:#e5e5e5;border:3px solid #000;padding:1px 3px}@media screen and (hover:none){a.cke_button_off:hover{background:transparent;border:0;padding:4px 6px}a.cke_button_expandable.cke_button_off:hover{padding:4px 5px}a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_off:active{padding:3px 4px}}a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{border:0;padding:4px 6px;background-color:transparent}a.cke_button_expandable.cke_button_disabled:hover,a.cke_button_expandable.cke_button_disabled:active{padding:4px 5px}a.cke_button_disabled:focus{border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_disabled:focus{padding:3px 4px}.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border:1px solid #acacac;padding:3px 5px;margin:0 3px 5px 0}.cke_hc a.cke_button_disabled:focus{border:3px solid #000;padding:1px 3px}.cke_hc.cke_rtl a.cke_button_disabled:hover,.cke_hc.cke_rtl a.cke_button_disabled:focus,.cke_hc.cke_rtl a.cke_button_disabled:active{margin:0 0 5px 3px}a.cke_button_disabled .cke_button_icon,a.cke_button_disabled .cke_button_arrow{opacity:.3}.cke_hc a.cke_button_disabled{border-color:#acacac}.cke_hc a.cke_button_disabled .cke_button_icon,.cke_hc a.cke_button_disabled .cke_button_label{opacity:.5}.cke_toolgroup a.cke_button:last-child:after,.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:0;right:-3px}.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-right:0;right:auto;border-left:1px solid #bcbcbc;top:0;left:-3px}.cke_hc .cke_toolgroup a.cke_button:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-color:#000;top:0;right:-7px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{top:0;right:auto;left:-7px}.cke_toolgroup a.cke_button:hover:last-child:after,.cke_toolgroup a.cke_button:focus:last-child:after,.cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:-4px}.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_rtl .cke_toolgroup a.cke_button:focus:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:auto;left:-4px}.cke_hc .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:-9px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:auto;left:-9px}.cke_toolbar.cke_toolbar_last .cke_toolgroup a.cke_button:last-child:after{content:none;border:0;width:0;height:0}.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:#484848}.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 3px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px 0 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#bcbcbc;margin:4px 2px 0 2px;height:18px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{background-color:#000;margin-left:2px;margin-right:5px;margin-bottom:9px}.cke_hc.cke_rtl .cke_toolbar_separator{margin-left:5px;margin-right:2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #bcbcbc}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser:hover{background:#e5e5e5}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border:3px solid transparent;border-bottom-color:#484848}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#484848}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0}.cke_menuitem span{cursor:default}.cke_menubutton{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#e9e9e9;display:block;outline:1px dotted}.cke_menubutton:hover{outline:0}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_disabled:hover,.cke_menubutton_disabled:focus,.cke_menubutton_disabled:active{background-color:transparent;outline:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#f8f8f8;padding:6px 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:#e9e9e9}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{background-color:#f8f8f8;outline:0}.cke_menuitem .cke_menubutton_on{background-color:#e9e9e9;border:1px solid #dedede;outline:0}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px;background-color:#e9e9e9}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_shortcut{color:#979797}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d1d1d1;height:1px}.cke_menuarrow{background:transparent url(images/arrow.png) no-repeat 0 10px;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow{background-image:none}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left;position:relative;margin-bottom:5px}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:1px;margin-bottom:10px}.cke_combo:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:5px;top:0;right:0}.cke_rtl .cke_combo:after{border-right:0;border-left:1px solid #bcbcbc;right:auto;left:0}.cke_hc .cke_combo:after{border-color:#000}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0;padding:1px}.cke_rtl a.cke_combo_button{float:right}.cke_hc a.cke_combo_button{padding:4px}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:active{background:#e5e5e5;border:1px solid #bcbcbc;padding:0 0 0 1px;margin-left:-1px}.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:active{background:#fff}@media screen and (hover:none){.cke_combo_off a.cke_combo_button:hover{background:transparent;border-color:transparent}.cke_combo_off a.cke_combo_button:active{background:#fff;border:1px solid #bcbcbc}}.cke_rtl .cke_combo_on a.cke_combo_button,.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:0 1px 0 0;margin-left:0;margin-right:-1px}.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:3px solid #000;padding:1px 1px 1px 2px}.cke_hc.cke_rtl .cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:1px 2px 1px 1px}.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 0 0 3px;margin-left:-3px}.cke_rtl .cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 3px 0 0;margin-left:0;margin-right:-3px}.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 1px 1px 7px;margin-left:-6px}.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 7px 1px 1px;margin-left:0;margin-right:-6px}.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0;margin:0}.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px;margin:0}.cke_toolbar .cke_combo+.cke_toolbar_end,.cke_toolbar .cke_combo+.cke_toolgroup{margin-right:0;margin-left:2px}.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:2px}.cke_hc .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:5px}.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:5px}.cke_toolbar.cke_toolbar_last .cke_combo:nth-last-child(-n+2):after{content:none;border:0;width:0;height:0}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#484848;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 10px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;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 #484848}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.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_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#484848;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:#e5e5e5}.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,.cke_button__sourcedialog_label{display:inline}.cke_combopanel__fontsize{width:135px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;text-align:center;opacity:.95;filter:alpha(opacity = 95);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png?t=L7CE) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=L7CE) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=L7CE) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=L7CE) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=L7CE) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=L7CE) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=L7CE) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=L7CE) no-repeat 0 -168px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png?t=L7CE) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=L7CE) no-repeat 0 -216px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png?t=L7CE) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=L7CE) no-repeat 0 -264px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png?t=L7CE) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=L7CE) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=L7CE) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=L7CE) no-repeat 0 -360px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png?t=L7CE) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=L7CE) no-repeat 0 -408px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png?t=L7CE) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=L7CE) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=L7CE) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=L7CE) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=L7CE) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=L7CE) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=L7CE) no-repeat 0 -576px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png?t=L7CE) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=L7CE) no-repeat 0 -624px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png?t=L7CE) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=L7CE) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=L7CE) no-repeat 0 -696px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png?t=L7CE) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=L7CE) no-repeat 0 -744px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png?t=L7CE) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=L7CE) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=L7CE) no-repeat 0 -816px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png?t=L7CE) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=L7CE) no-repeat 0 -864px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png?t=L7CE) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=L7CE) no-repeat 0 -912px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png?t=L7CE) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=L7CE) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=L7CE) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=L7CE) no-repeat 0 -1008px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png?t=L7CE) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=L7CE) no-repeat 0 -1056px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png?t=L7CE) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=L7CE) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=L7CE) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -168px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -360px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -408px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -576px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -624px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -696px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -816px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -840px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -864px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -912px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -1056px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=L7CE) no-repeat 0 -2256px!important}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_rtl .cke_button_icon{float:none}.cke_resizer{width:10px}.cke_source{white-space:normal}.cke_bottom{position:static}.cke_colorbox{font-size:0}
\ No newline at end of file
+.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none}.cke_reset_all,.cke_reset_all *,.cke_reset_all a,.cke_reset_all textarea{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;position:static;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre-wrap}.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}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #d1d1d1;padding:0}.cke_inner{display:block;background:#fff;padding:0;-webkit-touch-callout:none}.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 #d1d1d1;background:#f8f8f8;padding:6px 8px 2px;white-space:normal}.cke_float .cke_top{border:1px solid #d1d1d1}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #d1d1d1;background:#f8f8f8}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #bcbcbc transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.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 #bcbcbc;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;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #d1d1d1}.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_block:focus{outline:0}.cke_panel_list{margin:0;padding:0;list-style-type:none;white-space:nowrap}.cke_panel_listItem{margin:0;padding:0}.cke_panel_listItem a{padding:6px 7px;display:block;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis}.cke_hc .cke_panel_listItem a{border-style:none}.cke_panel_listItem.cke_selected a,.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e9e9e9}.cke_panel_listItem a:focus{outline:1px dotted #000}.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:4px 5px}.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_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px 7px 6px;color:#484848;border-bottom:1px solid #d1d1d1;background:#f8f8f8}.cke_colorblock{padding:10px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}a.cke_colorbox{padding:2px;float:left;width:20px;height:20px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{outline:0;padding:0;border:2px solid #139ff7}a:hover.cke_colorbox{border-color:#bcbcbc}span.cke_colorbox{width:20px;height:20px;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:3px;display:block;cursor:pointer}a.cke_colorauto{padding:0;border:1px solid transparent;margin-bottom:6px;height:26px;line-height:26px}a.cke_colormore{margin-top:10px;height:20px;line-height:19px}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{outline:0;border:#139ff7 1px solid;background-color:#f8f8f8}a:hover.cke_colorauto,a:hover.cke_colormore{border-color:#bcbcbc}.cke_colorauto span.cke_colorbox{width:18px;height:18px;border:1px solid #808080;margin-left:1px;margin-top:3px}.cke_rtl .cke_colorauto span.cke_colorbox{margin-left:0;margin-right:1px}span.cke_colorbox[style*="#ffffff"],span.cke_colorbox[style*="#FFFFFF"],span.cke_colorbox[style="background-color:#fff"],span.cke_colorbox[style="background-color:#FFF"],span.cke_colorbox[style*="rgb(255,255,255)"],span.cke_colorbox[style*="rgb(255, 255, 255)"]{border:1px solid #808080;width:18px;height:18px}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{border:0;float:left;margin:1px 2px 6px 0;padding-right:3px}.cke_rtl .cke_toolgroup{float:right;margin:1px 0 6px 2px;padding-left:3px;padding-right:0}.cke_hc .cke_toolgroup{margin-right:5px;margin-bottom:5px}.cke_hc.cke_rtl .cke_toolgroup{margin-right:0;margin-left:5px}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0;position:relative}a.cke_button_expandable{padding:4px 5px}.cke_rtl a.cke_button{float:right}.cke_hc a.cke_button{border:1px solid black;padding:3px 5px;margin:0 3px 5px 0}.cke_hc.cke_rtl a.cke_button{margin:0 0 5px 3px}a.cke_button_on{background:#fff;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_on{padding:3px 4px}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_off:hover,a.cke_button_expandable.cke_button_off:focus,a.cke_button_expandable.cke_button_off:active{padding:3px 4px}.cke_hc a.cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active{background:#e5e5e5;border:3px solid #000;padding:1px 3px}@media screen and (hover:none){a.cke_button_off:hover{background:transparent;border:0;padding:4px 6px}a.cke_button_expandable.cke_button_off:hover{padding:4px 5px}a.cke_button_off:active{background:#e5e5e5;border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_off:active{padding:3px 4px}}a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{border:0;padding:4px 6px;background-color:transparent}a.cke_button_expandable.cke_button_disabled:hover,a.cke_button_expandable.cke_button_disabled:active{padding:4px 5px}a.cke_button_disabled:focus{border:1px #bcbcbc solid;padding:3px 5px}a.cke_button_expandable.cke_button_disabled:focus{padding:3px 4px}.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border:1px solid #acacac;padding:3px 5px;margin:0 3px 5px 0}.cke_hc a.cke_button_disabled:focus{border:3px solid #000;padding:1px 3px}.cke_hc.cke_rtl a.cke_button_disabled:hover,.cke_hc.cke_rtl a.cke_button_disabled:focus,.cke_hc.cke_rtl a.cke_button_disabled:active{margin:0 0 5px 3px}a.cke_button_disabled .cke_button_icon,a.cke_button_disabled .cke_button_arrow{opacity:.3}.cke_hc a.cke_button_disabled{border-color:#acacac}.cke_hc a.cke_button_disabled .cke_button_icon,.cke_hc a.cke_button_disabled .cke_button_label{opacity:.5}.cke_toolgroup a.cke_button:last-child:after,.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:4px;top:0;right:-3px}.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-right:0;right:auto;border-left:1px solid #bcbcbc;top:0;left:-3px}.cke_hc .cke_toolgroup a.cke_button:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{border-color:#000;top:0;right:-7px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after{top:0;right:auto;left:-7px}.cke_toolgroup a.cke_button:hover:last-child:after,.cke_toolgroup a.cke_button:focus:last-child:after,.cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:-4px}.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_rtl .cke_toolgroup a.cke_button:focus:last-child:after,.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-1px;right:auto;left:-4px}.cke_hc .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:-9px}.cke_hc.cke_rtl .cke_toolgroup a.cke_button:hover:last-child:after,.cke_hc.cke_rtl .cke_toolgroup a.cke_button.cke_button_on:last-child:after{top:-2px;right:auto;left:-9px}.cke_toolbar.cke_toolbar_last .cke_toolgroup a.cke_button:last-child:after{content:none;border:0;width:0;height:0}.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:#484848}.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 3px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #484848}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px 0 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#bcbcbc;margin:4px 2px 0 2px;height:18px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{background-color:#000;margin-left:2px;margin-right:5px;margin-bottom:9px}.cke_hc.cke_rtl .cke_toolbar_separator{margin-left:5px;margin-right:2px}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}a.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #bcbcbc}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser:hover{background:#e5e5e5}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border:3px solid transparent;border-bottom-color:#484848}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#484848}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0}.cke_menuitem span{cursor:default}.cke_menubutton{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#e9e9e9;display:block;outline:1px dotted}.cke_menubutton:hover{outline:0}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_disabled:hover,.cke_menubutton_disabled:focus,.cke_menubutton_disabled:active{background-color:transparent;outline:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#f8f8f8;padding:6px 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:#e9e9e9}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{background-color:#f8f8f8;outline:0}.cke_menuitem .cke_menubutton_on{background-color:#e9e9e9;border:1px solid #dedede;outline:0}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px;background-color:#e9e9e9}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_shortcut{color:#979797}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d1d1d1;height:1px}.cke_menuarrow{background:transparent url(images/arrow.png) no-repeat 0 10px;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow{background-image:none}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left;position:relative;margin-bottom:5px}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:1px;margin-bottom:10px}.cke_combo:after{content:"";position:absolute;height:18px;width:0;border-right:1px solid #bcbcbc;margin-top:5px;top:0;right:0}.cke_rtl .cke_combo:after{border-right:0;border-left:1px solid #bcbcbc;right:auto;left:0}.cke_hc .cke_combo:after{border-color:#000}a.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0;padding:1px}.cke_rtl a.cke_combo_button{float:right}.cke_hc a.cke_combo_button{padding:4px}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:active{background:#e5e5e5;border:1px solid #bcbcbc;padding:0 0 0 1px;margin-left:-1px}.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_on a.cke_combo_button,.cke_combo_off a.cke_combo_button:active{background:#fff}@media screen and (hover:none){.cke_combo_off a.cke_combo_button:hover{background:transparent;border-color:transparent}.cke_combo_off a.cke_combo_button:active{background:#fff;border:1px solid #bcbcbc}}.cke_rtl .cke_combo_on a.cke_combo_button,.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:0 1px 0 0;margin-left:0;margin-right:-1px}.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:3px solid #000;padding:1px 1px 1px 2px}.cke_hc.cke_rtl .cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_combo_off a.cke_combo_button:active{padding:1px 2px 1px 1px}.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 0 0 3px;margin-left:-3px}.cke_rtl .cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_rtl .cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0 3px 0 0;margin-left:0;margin-right:-3px}.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 1px 1px 7px;margin-left:-6px}.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc.cke_rtl .cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px 7px 1px 1px;margin-left:0;margin-right:-6px}.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:0;margin:0}.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbox .cke_toolbar:first-child>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_on a.cke_combo_button,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_toolbar_break+.cke_toolbar>.cke_toolbar_start+.cke_combo_off a.cke_combo_button:active{padding:1px;margin:0}.cke_toolbar .cke_combo+.cke_toolbar_end,.cke_toolbar .cke_combo+.cke_toolgroup{margin-right:0;margin-left:2px}.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:2px}.cke_hc .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:5px}.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolbar_end,.cke_hc.cke_rtl .cke_toolbar .cke_combo+.cke_toolgroup{margin-left:0;margin-right:5px}.cke_toolbar.cke_toolbar_last .cke_combo:nth-last-child(-n+2):after{content:none;border:0;width:0;height:0}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#484848;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 10px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;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 #484848}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.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_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}a.cke_path_item,span.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#484848;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:#e5e5e5}.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,.cke_button__sourcedialog_label{display:inline}.cke_combopanel__fontsize{width:135px}textarea.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre-wrap;border:0;padding:0;margin:0;display:block}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_notifications_area{pointer-events:none}.cke_notification{pointer-events:auto;position:relative;margin:10px;width:300px;color:white;text-align:center;opacity:.95;filter:alpha(opacity = 95);-webkit-animation:fadeIn .7s;animation:fadeIn .7s}.cke_notification_message a{color:#12306f}@-webkit-keyframes fadeIn{from{opacity:.4}to{opacity:.95}}@keyframes fadeIn{from{opacity:.4}to{opacity:.95}}.cke_notification_success{background:#72b572;border:1px solid #63a563}.cke_notification_warning{background:#c83939;border:1px solid #902b2b}.cke_notification_info{background:#2e9ad0;border:1px solid #0f74a8}.cke_notification_info span.cke_notification_progress{background-color:#0f74a8;display:block;padding:0;margin:0;height:100%;overflow:hidden;position:absolute;z-index:1}.cke_notification_message{position:relative;margin:4px 23px 3px;font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:18px;z-index:4;text-overflow:ellipsis;overflow:hidden}.cke_notification_close{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:1px;right:1px;padding:0;margin:0;z-index:5;opacity:.6;filter:alpha(opacity = 60)}.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_notification_close span{display:none}.cke_notification_warning a.cke_notification_close{opacity:.8;filter:alpha(opacity = 80)}.cke_notification_warning a.cke_notification_close:hover{opacity:1;filter:alpha(opacity = 100)}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png?t=LAHG) no-repeat 0 -0px!important}.cke_button__bold_icon{background:url(icons.png?t=LAHG) no-repeat 0 -24px!important}.cke_button__italic_icon{background:url(icons.png?t=LAHG) no-repeat 0 -48px!important}.cke_button__strike_icon{background:url(icons.png?t=LAHG) no-repeat 0 -72px!important}.cke_button__subscript_icon{background:url(icons.png?t=LAHG) no-repeat 0 -96px!important}.cke_button__superscript_icon{background:url(icons.png?t=LAHG) no-repeat 0 -120px!important}.cke_button__underline_icon{background:url(icons.png?t=LAHG) no-repeat 0 -144px!important}.cke_button__blockquote_icon{background:url(icons.png?t=LAHG) no-repeat 0 -168px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png?t=LAHG) no-repeat 0 -192px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png?t=LAHG) no-repeat 0 -216px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png?t=LAHG) no-repeat 0 -240px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png?t=LAHG) no-repeat 0 -264px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png?t=LAHG) no-repeat 0 -288px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png?t=LAHG) no-repeat 0 -312px!important}.cke_button__horizontalrule_icon{background:url(icons.png?t=LAHG) no-repeat 0 -336px!important}.cke_button__image_icon{background:url(icons.png?t=LAHG) no-repeat 0 -360px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png?t=LAHG) no-repeat 0 -384px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png?t=LAHG) no-repeat 0 -408px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png?t=LAHG) no-repeat 0 -432px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png?t=LAHG) no-repeat 0 -456px!important}.cke_button__justifyblock_icon{background:url(icons.png?t=LAHG) no-repeat 0 -480px!important}.cke_button__justifycenter_icon{background:url(icons.png?t=LAHG) no-repeat 0 -504px!important}.cke_button__justifyleft_icon{background:url(icons.png?t=LAHG) no-repeat 0 -528px!important}.cke_button__justifyright_icon{background:url(icons.png?t=LAHG) no-repeat 0 -552px!important}.cke_button__language_icon{background:url(icons.png?t=LAHG) no-repeat 0 -576px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png?t=LAHG) no-repeat 0 -600px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png?t=LAHG) no-repeat 0 -624px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png?t=LAHG) no-repeat 0 -648px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png?t=LAHG) no-repeat 0 -672px!important}.cke_button__maximize_icon{background:url(icons.png?t=LAHG) no-repeat 0 -696px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png?t=LAHG) no-repeat 0 -720px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png?t=LAHG) no-repeat 0 -744px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png?t=LAHG) no-repeat 0 -768px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png?t=LAHG) no-repeat 0 -792px!important}.cke_button__removeformat_icon{background:url(icons.png?t=LAHG) no-repeat 0 -816px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png?t=LAHG) no-repeat 0 -840px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png?t=LAHG) no-repeat 0 -864px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png?t=LAHG) no-repeat 0 -888px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png?t=LAHG) no-repeat 0 -912px!important}.cke_rtl .cke_button__sourcedialog_icon,.cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons.png?t=LAHG) no-repeat 0 -936px!important}.cke_ltr .cke_button__sourcedialog_icon{background:url(icons.png?t=LAHG) no-repeat 0 -960px!important}.cke_button__specialchar_icon{background:url(icons.png?t=LAHG) no-repeat 0 -984px!important}.cke_button__table_icon{background:url(icons.png?t=LAHG) no-repeat 0 -1008px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png?t=LAHG) no-repeat 0 -1032px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png?t=LAHG) no-repeat 0 -1056px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png?t=LAHG) no-repeat 0 -1080px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png?t=LAHG) no-repeat 0 -1104px!important}.cke_button__simplebox_icon{background:url(icons.png?t=LAHG) no-repeat 0 -1128px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -0px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -168px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -216px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -336px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -360px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -408px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -456px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__language_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -576px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -600px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -624px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -696px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -744px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -816px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -840px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -864px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -912px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__sourcedialog_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__sourcedialog_icon,.cke_ltr.cke_hidpi .cke_button__sourcedialog_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -960px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -1056px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -1104px!important;background-size:16px!important}.cke_hidpi .cke_button__simplebox_icon{background:url(icons_hidpi.png?t=LAHG) no-repeat 0 -2256px!important}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_rtl .cke_button_icon{float:none}.cke_resizer{width:10px}.cke_source{white-space:normal}.cke_bottom{position:static}.cke_colorbox{font-size:0}
\ No newline at end of file
diff --git a/core/core.libraries.yml b/core/core.libraries.yml
index 826fa73e4d12..a7384a8972eb 100644
--- a/core/core.libraries.yml
+++ b/core/core.libraries.yml
@@ -14,10 +14,10 @@ backbone:
 
 ckeditor:
   remote: https://github.com/ckeditor/ckeditor4
-  version: "4.16.2"
+  version: "4.17.1"
   license:
     name: GNU-GPL-2.0-or-later
-    url: https://raw.githubusercontent.com/ckeditor/ckeditor4/4.16.2/LICENSE.md
+    url: https://raw.githubusercontent.com/ckeditor/ckeditor4/4.17.1/LICENSE.md
     gpl-compatible: true
   js:
     assets/vendor/ckeditor/ckeditor.js: { preprocess: false, minified: true }
-- 
GitLab


From 159085e52f5564c7c37b0ea1d44e724ce0da5034 Mon Sep 17 00:00:00 2001
From: xjm <xjm@65776.no-reply.drupal.org>
Date: Wed, 17 Nov 2021 18:33:29 -0600
Subject: [PATCH 43/69] Drupal 9.3.0-beta2

---
 composer.lock                                            | 9 +++------
 composer/Metapackage/CoreRecommended/composer.json       | 2 +-
 composer/Metapackage/PinnedDevDependencies/composer.json | 2 +-
 composer/Template/LegacyProject/composer.json            | 2 +-
 composer/Template/RecommendedProject/composer.json       | 2 +-
 core/lib/Drupal.php                                      | 2 +-
 6 files changed, 8 insertions(+), 11 deletions(-)

diff --git a/composer.lock b/composer.lock
index cb861893d50e..efd806b0e220 100644
--- a/composer.lock
+++ b/composer.lock
@@ -531,7 +531,7 @@
         },
         {
             "name": "drupal/core",
-            "version": "9.3.x-dev",
+            "version": "9.3.0-beta2",
             "dist": {
                 "type": "path",
                 "url": "core",
@@ -788,7 +788,7 @@
         },
         {
             "name": "drupal/core-project-message",
-            "version": "9.3.x-dev",
+            "version": "9.3.0-beta2",
             "dist": {
                 "type": "path",
                 "url": "composer/Plugin/ProjectMessage",
@@ -821,7 +821,7 @@
         },
         {
             "name": "drupal/core-vendor-hardening",
-            "version": "9.3.x-dev",
+            "version": "9.3.0-beta2",
             "dist": {
                 "type": "path",
                 "url": "composer/Plugin/VendorHardening",
@@ -7903,9 +7903,6 @@
     "aliases": [],
     "minimum-stability": "dev",
     "stability-flags": {
-        "drupal/core": 20,
-        "drupal/core-project-message": 20,
-        "drupal/core-vendor-hardening": 20,
         "symfony/phpunit-bridge": 10,
         "symfony/var-dumper": 10
     },
diff --git a/composer/Metapackage/CoreRecommended/composer.json b/composer/Metapackage/CoreRecommended/composer.json
index 743923090dd0..4676e9384a96 100644
--- a/composer/Metapackage/CoreRecommended/composer.json
+++ b/composer/Metapackage/CoreRecommended/composer.json
@@ -7,7 +7,7 @@
         "webflo/drupal-core-strict": "*"
     },
     "require": {
-        "drupal/core": "9.3.x-dev",
+        "drupal/core": "9.3.0-beta2",
         "asm89/stack-cors": "1.3.0",
         "composer/semver": "3.2.6",
         "doctrine/annotations": "1.13.2",
diff --git a/composer/Metapackage/PinnedDevDependencies/composer.json b/composer/Metapackage/PinnedDevDependencies/composer.json
index a3e1ab67fcfe..15d747e9dd66 100644
--- a/composer/Metapackage/PinnedDevDependencies/composer.json
+++ b/composer/Metapackage/PinnedDevDependencies/composer.json
@@ -7,7 +7,7 @@
         "webflo/drupal-core-require-dev": "*"
     },
     "require": {
-        "drupal/core": "9.3.x-dev",
+        "drupal/core": "9.3.0-beta2",
         "behat/mink": "v1.9.0",
         "behat/mink-selenium2-driver": "v1.5.0",
         "composer/ca-bundle": "1.3.1",
diff --git a/composer/Template/LegacyProject/composer.json b/composer/Template/LegacyProject/composer.json
index 1b1a2af337ab..afc7c7f0dcf1 100644
--- a/composer/Template/LegacyProject/composer.json
+++ b/composer/Template/LegacyProject/composer.json
@@ -27,7 +27,7 @@
     "conflict": {
         "drupal/drupal": "*"
     },
-    "minimum-stability": "dev",
+    "minimum-stability": "beta",
     "prefer-stable": true,
     "config": {
         "sort-packages": true
diff --git a/composer/Template/RecommendedProject/composer.json b/composer/Template/RecommendedProject/composer.json
index 99e9f55f2394..8b2984364d5f 100644
--- a/composer/Template/RecommendedProject/composer.json
+++ b/composer/Template/RecommendedProject/composer.json
@@ -26,7 +26,7 @@
     "conflict": {
         "drupal/drupal": "*"
     },
-    "minimum-stability": "dev",
+    "minimum-stability": "beta",
     "prefer-stable": true,
     "config": {
         "sort-packages": true
diff --git a/core/lib/Drupal.php b/core/lib/Drupal.php
index 4ffa6c6f0b0b..7dcb41dcba2b 100644
--- a/core/lib/Drupal.php
+++ b/core/lib/Drupal.php
@@ -75,7 +75,7 @@ class Drupal {
   /**
    * The current system version.
    */
-  const VERSION = '9.3.0-dev';
+  const VERSION = '9.3.0-beta2';
 
   /**
    * Core API compatibility.
-- 
GitLab


From aa988ef4659095a5255d6288c718352a056af989 Mon Sep 17 00:00:00 2001
From: xjm <xjm@65776.no-reply.drupal.org>
Date: Wed, 17 Nov 2021 18:33:30 -0600
Subject: [PATCH 44/69] Back to dev.

---
 composer.lock                                            | 9 ++++++---
 composer/Metapackage/CoreRecommended/composer.json       | 2 +-
 composer/Metapackage/PinnedDevDependencies/composer.json | 2 +-
 composer/Template/LegacyProject/composer.json            | 2 +-
 composer/Template/RecommendedProject/composer.json       | 2 +-
 core/lib/Drupal.php                                      | 2 +-
 6 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/composer.lock b/composer.lock
index efd806b0e220..cb861893d50e 100644
--- a/composer.lock
+++ b/composer.lock
@@ -531,7 +531,7 @@
         },
         {
             "name": "drupal/core",
-            "version": "9.3.0-beta2",
+            "version": "9.3.x-dev",
             "dist": {
                 "type": "path",
                 "url": "core",
@@ -788,7 +788,7 @@
         },
         {
             "name": "drupal/core-project-message",
-            "version": "9.3.0-beta2",
+            "version": "9.3.x-dev",
             "dist": {
                 "type": "path",
                 "url": "composer/Plugin/ProjectMessage",
@@ -821,7 +821,7 @@
         },
         {
             "name": "drupal/core-vendor-hardening",
-            "version": "9.3.0-beta2",
+            "version": "9.3.x-dev",
             "dist": {
                 "type": "path",
                 "url": "composer/Plugin/VendorHardening",
@@ -7903,6 +7903,9 @@
     "aliases": [],
     "minimum-stability": "dev",
     "stability-flags": {
+        "drupal/core": 20,
+        "drupal/core-project-message": 20,
+        "drupal/core-vendor-hardening": 20,
         "symfony/phpunit-bridge": 10,
         "symfony/var-dumper": 10
     },
diff --git a/composer/Metapackage/CoreRecommended/composer.json b/composer/Metapackage/CoreRecommended/composer.json
index 4676e9384a96..743923090dd0 100644
--- a/composer/Metapackage/CoreRecommended/composer.json
+++ b/composer/Metapackage/CoreRecommended/composer.json
@@ -7,7 +7,7 @@
         "webflo/drupal-core-strict": "*"
     },
     "require": {
-        "drupal/core": "9.3.0-beta2",
+        "drupal/core": "9.3.x-dev",
         "asm89/stack-cors": "1.3.0",
         "composer/semver": "3.2.6",
         "doctrine/annotations": "1.13.2",
diff --git a/composer/Metapackage/PinnedDevDependencies/composer.json b/composer/Metapackage/PinnedDevDependencies/composer.json
index 15d747e9dd66..a3e1ab67fcfe 100644
--- a/composer/Metapackage/PinnedDevDependencies/composer.json
+++ b/composer/Metapackage/PinnedDevDependencies/composer.json
@@ -7,7 +7,7 @@
         "webflo/drupal-core-require-dev": "*"
     },
     "require": {
-        "drupal/core": "9.3.0-beta2",
+        "drupal/core": "9.3.x-dev",
         "behat/mink": "v1.9.0",
         "behat/mink-selenium2-driver": "v1.5.0",
         "composer/ca-bundle": "1.3.1",
diff --git a/composer/Template/LegacyProject/composer.json b/composer/Template/LegacyProject/composer.json
index afc7c7f0dcf1..1b1a2af337ab 100644
--- a/composer/Template/LegacyProject/composer.json
+++ b/composer/Template/LegacyProject/composer.json
@@ -27,7 +27,7 @@
     "conflict": {
         "drupal/drupal": "*"
     },
-    "minimum-stability": "beta",
+    "minimum-stability": "dev",
     "prefer-stable": true,
     "config": {
         "sort-packages": true
diff --git a/composer/Template/RecommendedProject/composer.json b/composer/Template/RecommendedProject/composer.json
index 8b2984364d5f..99e9f55f2394 100644
--- a/composer/Template/RecommendedProject/composer.json
+++ b/composer/Template/RecommendedProject/composer.json
@@ -26,7 +26,7 @@
     "conflict": {
         "drupal/drupal": "*"
     },
-    "minimum-stability": "beta",
+    "minimum-stability": "dev",
     "prefer-stable": true,
     "config": {
         "sort-packages": true
diff --git a/core/lib/Drupal.php b/core/lib/Drupal.php
index 7dcb41dcba2b..4ffa6c6f0b0b 100644
--- a/core/lib/Drupal.php
+++ b/core/lib/Drupal.php
@@ -75,7 +75,7 @@ class Drupal {
   /**
    * The current system version.
    */
-  const VERSION = '9.3.0-beta2';
+  const VERSION = '9.3.0-dev';
 
   /**
    * Core API compatibility.
-- 
GitLab


From ce8e734ad346a4ab02bef4349aa84f03efdf853f Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Thu, 18 Nov 2021 16:20:04 +0000
Subject: [PATCH 45/69] Issue #3248014 by daffie, andypost: [Symfony 6] The
 Drupal\Tests\media\Kernel\OEmbedIframeControllerTest fails

(cherry picked from commit 507fc5fe009895dc719527ff5272d06b60f18d80)
---
 core/modules/media/src/Controller/OEmbedIframeController.php | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/core/modules/media/src/Controller/OEmbedIframeController.php b/core/modules/media/src/Controller/OEmbedIframeController.php
index a32533f5d31d..a19d2b65e9be 100644
--- a/core/modules/media/src/Controller/OEmbedIframeController.php
+++ b/core/modules/media/src/Controller/OEmbedIframeController.php
@@ -121,8 +121,8 @@ public static function create(ContainerInterface $container) {
    */
   public function render(Request $request) {
     $url = $request->query->get('url');
-    $max_width = $request->query->getInt('max_width', NULL);
-    $max_height = $request->query->getInt('max_height', NULL);
+    $max_width = $request->query->getInt('max_width');
+    $max_height = $request->query->getInt('max_height');
 
     // Hash the URL and max dimensions, and ensure it is equal to the hash
     // parameter passed in the query string.
-- 
GitLab


From 2126f4c7649c01d775482b85f3e3434d897eb7fc Mon Sep 17 00:00:00 2001
From: Alex Pott <alex.a.pott@googlemail.com>
Date: Fri, 19 Nov 2021 09:49:33 +0000
Subject: [PATCH 46/69] Issue #3207567 by Spokje, quietone, guilhermevp,
 yogeshmpawar, daffie, alexpott: Fix
 Drupal.Commenting.FunctionComment.MissingParamComment

(cherry picked from commit 576bd7543d19002c76fe4488c57d972e69c45671)
---
 .../Scaffold/Operations/OperationFactory.php  |   1 +
 .../Annotation/AnnotationInterface.php        |   2 +
 .../Bridge/ZfExtensionManagerSfContainer.php  |   1 +
 core/lib/Drupal/Component/Gettext/PoItem.php  |   8 ++
 core/lib/Drupal/Component/Utility/Random.php  |   1 +
 core/lib/Drupal/Core/Access/AccessManager.php |   1 +
 core/lib/Drupal/Core/Ajax/RemoveCommand.php   |   1 +
 .../Cache/Context/IsFrontPathCacheContext.php |   1 +
 core/lib/Drupal/Core/Composer/Composer.php    |   3 +
 .../Core/Config/ConfigInstallerInterface.php  |   1 +
 .../Drupal/Core/Datetime/Element/Datelist.php |   2 +
 .../Drupal/Core/Datetime/Element/Datetime.php |   1 +
 .../Query/ConditionAggregateInterface.php     |  14 +++
 .../Core/Entity/Query/ConditionInterface.php  |   9 ++
 .../Drupal/Core/Entity/Query/Sql/Tables.php   |   2 +
 .../AuthenticationSubscriber.php              |   1 +
 .../ExceptionTestSiteSubscriber.php           |   1 +
 .../FinishResponseSubscriber.php              |   1 +
 core/lib/Drupal/Core/Form/FormSubmitter.php   |   1 +
 .../lib/Drupal/Core/Locale/CountryManager.php |   1 +
 .../Drupal/Core/Lock/LockBackendInterface.php |   1 +
 .../lib/Drupal/Core/Menu/LocalTaskManager.php |   1 +
 .../Core/Render/Element/InlineTemplate.php    |   1 +
 .../Enhancer/ParamConversionEnhancer.php      |   1 +
 .../Drupal/Core/Routing/RoutePreloader.php    |   1 +
 core/lib/Drupal/Core/Test/TestDiscovery.php   |   1 +
 core/lib/Drupal/Core/Updater/Updater.php      |   1 +
 .../Drupal/Core/Updater/UpdaterInterface.php  |   1 +
 .../Validation/ConstraintValidatorFactory.php |   1 +
 core/modules/ban/src/Form/BanAdmin.php        |   1 +
 .../src/EventSubscriber.php                   |   2 +
 .../Functional/ConfigTranslationUiTest.php    |   2 +
 .../tests/src/Unit/ConfigNamesMapperTest.php  |   1 +
 .../Kernel/FieldLayoutEntityDisplayTest.php   |   3 +
 .../file/src/Upload/FileUploadResult.php      |   3 +
 .../jsonapi/tests/src/Functional/UserTest.php |   2 +
 core/modules/locale/src/PluralFormula.php     |   2 +
 .../src/Event/MigratePreRowSaveEvent.php      |   1 +
 .../tests/src/Kernel/process/ExtractTest.php  |   2 +
 .../Kernel/process/HandleMultiplesTest.php    |   2 +
 .../NodeAdminRouteSubscriber.php              |   1 +
 .../node/src/Plugin/views/argument/Nid.php    |   1 +
 .../Kernel/Migrate/d7/MigrateNodeTypeTest.php |   5 +
 .../tests/src/Kernel/QuickEditTestBase.php    |   1 +
 .../serialization/src/Encoder/XmlEncoder.php  |   1 +
 ...ntityReferenceFieldItemNormalizerTrait.php |   1 +
 .../ContentEntityNormalizerTest.php           |   4 +
 .../system/src/Form/ModulesListForm.php       |   1 +
 .../src/Form/SystemMenuOffCanvasForm.php      |   3 +
 .../system/src/PhpStorage/MockPhpStorage.php  |   1 +
 .../system/src/SystemConfigSubscriber.php     |   1 +
 .../src/Tests/Routing/MockAliasManager.php    |   4 -
 .../src/EarlyRenderingTestController.php      |   1 +
 .../FormTestMachineNameValidationForm.php     |   1 +
 .../EventSubscriber/ThemeTestSubscriber.php   |   1 +
 .../AssertPageCacheContextsAndTagsTrait.php   |   1 +
 .../tests/src/Kernel/Common/UrlTest.php       |   1 +
 .../Kernel/Extension/ModuleHandlerTest.php    |   1 +
 .../modules/user/src/UserStorageInterface.php |   1 +
 .../src/Functional/UserPasswordResetTest.php  |   1 +
 core/modules/views/src/Analyzer.php           |   1 +
 .../views/argument_validator/Entity.php       |   1 +
 .../views/display/DisplayRouterInterface.php  |   1 +
 .../views/src/Plugin/views/filter/Combine.php |   1 +
 .../Plugin/views/filter/FilterPluginBase.php  |   3 +-
 .../views/src/Tests/TestHelperPlugin.php      |   1 +
 .../src/Plugin/views/join/JoinTest.php        |   1 +
 .../src/Plugin/views/query/QueryTest.php      |   1 +
 .../Handler/FieldRenderedEntityTest.php       |   1 +
 .../tests/src/Kernel/ViewExecutableTest.php   |   1 +
 core/modules/views_ui/src/ViewEditForm.php    |   1 +
 .../src/Functional/ArgumentValidatorTest.php  |   1 +
 .../FunctionalJavascript/ViewsListingTest.php |   1 +
 core/modules/workflows/src/State.php          |   1 +
 core/phpcs.xml.dist                           |   1 -
 .../Template/ComposerProjectTemplatesTest.php |   2 +
 .../KernelTests/Core/Command/DbDumpTest.php   |   1 +
 .../Core/Entity/EntityQueryAggregateTest.php  |   2 +
 .../Core/Routing/ExceptionHandlingTest.php    |   1 +
 .../Component/Datetime/DateTimePlusTest.php   |   1 +
 .../StubPluginManagerBaseWithMapper.php       |   1 +
 .../Component/Utility/ReflectionTest.php      |   2 +
 .../Plugin/Scaffold/ScaffoldTestResult.php    |   2 +
 .../Context/IsFrontPathCacheContextTest.php   |   1 +
 .../Config/Entity/ConfigEntityStorageTest.php |   2 +
 .../Compiler/BackendCompilerPassTest.php      |   3 +
 .../Tests/Core/Entity/EntityTypeTest.php      |   1 +
 .../KeyValueEntityStorageTest.php             |   2 +
 .../Routing/DefaultHtmlRouteProviderTest.php  |   2 +
 .../RssResponseRelativeUrlFilterTest.php      |   2 +
 .../Core/Extension/ExtensionDiscoveryTest.php |   3 +
 .../Core/Extension/ExtensionListTest.php      |   1 +
 .../Drupal/Tests/Core/File/FileSystemTest.php |   3 +
 .../Core/Form/FormStateDecoratorBaseTest.php  | 114 ++++++++----------
 .../Tests/Core/Form/SubformStateTest.php      |   4 +
 .../Tests/Core/Http/ClientFactoryTest.php     |   3 +
 .../Core/Plugin/DefaultPluginManagerTest.php  |   1 +
 .../TestDerivativeDiscoveryWithObject.php     |   3 +
 .../Core/Render/RendererPlaceholdersTest.php  |   1 +
 .../RecursiveContextualValidatorTest.php      |   1 +
 core/tests/Drupal/Tests/Core/UrlTest.php      |   5 +
 core/tests/Drupal/Tests/DocumentElement.php   |   4 +
 core/tests/Drupal/Tests/UnitTestCase.php      |   3 +
 103 files changed, 236 insertions(+), 67 deletions(-)

diff --git a/composer/Plugin/Scaffold/Operations/OperationFactory.php b/composer/Plugin/Scaffold/Operations/OperationFactory.php
index b256e0e15fba..0f54a35c51c5 100644
--- a/composer/Plugin/Scaffold/Operations/OperationFactory.php
+++ b/composer/Plugin/Scaffold/Operations/OperationFactory.php
@@ -124,6 +124,7 @@ protected function createAppendOp(PackageInterface $package, OperationData $oper
    *
    * @param Drupal\Composer\Plugin\Scaffold\ScaffoldFilePath $file
    *   Scaffold file to check.
+   *
    * @return bool
    *   True if the file exists and has content.
    */
diff --git a/core/lib/Drupal/Component/Annotation/AnnotationInterface.php b/core/lib/Drupal/Component/Annotation/AnnotationInterface.php
index 1168510d6550..eb44b398193e 100644
--- a/core/lib/Drupal/Component/Annotation/AnnotationInterface.php
+++ b/core/lib/Drupal/Component/Annotation/AnnotationInterface.php
@@ -23,6 +23,7 @@ public function getProvider();
    * Sets the name of the provider of the annotated class.
    *
    * @param string $provider
+   *   The provider of the annotated class.
    */
   public function setProvider($provider);
 
@@ -44,6 +45,7 @@ public function getClass();
    * Sets the class of the annotated class.
    *
    * @param string $class
+   *   The class of the annotated class.
    */
   public function setClass($class);
 
diff --git a/core/lib/Drupal/Component/Bridge/ZfExtensionManagerSfContainer.php b/core/lib/Drupal/Component/Bridge/ZfExtensionManagerSfContainer.php
index 396e8439076e..2e9fdd310cf1 100644
--- a/core/lib/Drupal/Component/Bridge/ZfExtensionManagerSfContainer.php
+++ b/core/lib/Drupal/Component/Bridge/ZfExtensionManagerSfContainer.php
@@ -124,6 +124,7 @@ public function setContainer(ContainerInterface $container = NULL) {
 
   /**
    * @param $class
+   *   The class to set as standalone.
    */
   public function setStandalone($class) {
     if (!is_subclass_of($class, ReaderManagerInterface::class) && !is_subclass_of($class, WriterManagerInterface::class)) {
diff --git a/core/lib/Drupal/Component/Gettext/PoItem.php b/core/lib/Drupal/Component/Gettext/PoItem.php
index 5e7d6f6444da..3ef8a2acea81 100644
--- a/core/lib/Drupal/Component/Gettext/PoItem.php
+++ b/core/lib/Drupal/Component/Gettext/PoItem.php
@@ -77,6 +77,7 @@ public function getLangcode() {
    * Set the language code of the current language.
    *
    * @param string $langcode
+   *   The language code of the current language.
    */
   public function setLangcode($langcode) {
     $this->langcode = $langcode;
@@ -95,6 +96,7 @@ public function getContext() {
    * Set the context this translation belongs to.
    *
    * @param string $context
+   *   The context this translation belongs to.
    */
   public function setContext($context) {
     $this->context = $context;
@@ -115,6 +117,7 @@ public function getSource() {
    * plurals.
    *
    * @param string|array $source
+   *   The source string or the array of strings if the translation has plurals.
    */
   public function setSource($source) {
     $this->source = $source;
@@ -135,6 +138,8 @@ public function getTranslation() {
    * plurals.
    *
    * @param string|array $translation
+   *   The translation string or the array of strings if the translation has
+   *   plurals.
    */
   public function setTranslation($translation) {
     $this->translation = $translation;
@@ -144,6 +149,7 @@ public function setTranslation($translation) {
    * Set if the translation has plural values.
    *
    * @param bool $plural
+   *   TRUE, if the translation has plural values. FALSE otherwise.
    */
   public function setPlural($plural) {
     $this->plural = $plural;
@@ -171,6 +177,7 @@ public function getComment() {
    * Set the comment of this translation.
    *
    * @param string $comment
+   *   The comment of this translation.
    */
   public function setComment($comment) {
     $this->comment = $comment;
@@ -180,6 +187,7 @@ public function setComment($comment) {
    * Create the PoItem from a structured array.
    *
    * @param array $values
+   *   A structured array to create the PoItem from.
    */
   public function setFromArray(array $values = []) {
     if (isset($values['context'])) {
diff --git a/core/lib/Drupal/Component/Utility/Random.php b/core/lib/Drupal/Component/Utility/Random.php
index 06fa8b0c9545..16190d8f6694 100644
--- a/core/lib/Drupal/Component/Utility/Random.php
+++ b/core/lib/Drupal/Component/Utility/Random.php
@@ -249,6 +249,7 @@ public function sentences($min_word_count, $capitalize = FALSE) {
    * Generate paragraphs separated by double new line.
    *
    * @param int $paragraph_count
+   *   The number of paragraphs to create. Defaults to 12.
    *
    * @return string
    */
diff --git a/core/lib/Drupal/Core/Access/AccessManager.php b/core/lib/Drupal/Core/Access/AccessManager.php
index 14b5c87d7c6b..7650fb672417 100644
--- a/core/lib/Drupal/Core/Access/AccessManager.php
+++ b/core/lib/Drupal/Core/Access/AccessManager.php
@@ -66,6 +66,7 @@ class AccessManager implements AccessManagerInterface {
    * @param \Drupal\Core\Session\AccountInterface $current_user
    *   The current user.
    * @param CheckProviderInterface $check_provider
+   *   The check access provider.
    */
   public function __construct(RouteProviderInterface $route_provider, ParamConverterManagerInterface $paramconverter_manager, AccessArgumentsResolverFactoryInterface $arguments_resolver_factory, AccountInterface $current_user, CheckProviderInterface $check_provider) {
     $this->routeProvider = $route_provider;
diff --git a/core/lib/Drupal/Core/Ajax/RemoveCommand.php b/core/lib/Drupal/Core/Ajax/RemoveCommand.php
index d7f86ddd257f..47993c9f6e0b 100644
--- a/core/lib/Drupal/Core/Ajax/RemoveCommand.php
+++ b/core/lib/Drupal/Core/Ajax/RemoveCommand.php
@@ -29,6 +29,7 @@ class RemoveCommand implements CommandInterface {
    * Constructs a RemoveCommand object.
    *
    * @param string $selector
+   *   The selector.
    */
   public function __construct($selector) {
     $this->selector = $selector;
diff --git a/core/lib/Drupal/Core/Cache/Context/IsFrontPathCacheContext.php b/core/lib/Drupal/Core/Cache/Context/IsFrontPathCacheContext.php
index 141b13a63f10..6a0afab504d8 100644
--- a/core/lib/Drupal/Core/Cache/Context/IsFrontPathCacheContext.php
+++ b/core/lib/Drupal/Core/Cache/Context/IsFrontPathCacheContext.php
@@ -21,6 +21,7 @@ class IsFrontPathCacheContext implements CacheContextInterface {
    * Constructs an IsFrontPathCacheContext object.
    *
    * @param \Drupal\Core\Path\PathMatcherInterface $path_matcher
+   *   The path matcher.
    */
   public function __construct(PathMatcherInterface $path_matcher) {
     $this->pathMatcher = $path_matcher;
diff --git a/core/lib/Drupal/Core/Composer/Composer.php b/core/lib/Drupal/Core/Composer/Composer.php
index 3041dab3a777..0048296d8478 100644
--- a/core/lib/Drupal/Core/Composer/Composer.php
+++ b/core/lib/Drupal/Core/Composer/Composer.php
@@ -87,6 +87,7 @@ class Composer {
    * Add vendor classes to Composer's static classmap.
    *
    * @param \Composer\Script\Event $event
+   *   The event.
    */
   public static function preAutoloadDump(Event $event) {
     // Get the configured vendor directory.
@@ -159,6 +160,7 @@ public static function preAutoloadDump(Event $event) {
    * Ensures that .htaccess and web.config files are present in Composer root.
    *
    * @param \Composer\Script\Event $event
+   *   The event.
    */
   public static function ensureHtaccess(Event $event) {
 
@@ -295,6 +297,7 @@ protected static function deleteRecursive($path) {
    * Fires the drupal-phpunit-upgrade script event if necessary.
    *
    * @param \Composer\Script\Event $event
+   *   The event.
    */
   public static function upgradePHPUnit(Event $event) {
     $repository = $event->getComposer()->getRepositoryManager()->getLocalRepository();
diff --git a/core/lib/Drupal/Core/Config/ConfigInstallerInterface.php b/core/lib/Drupal/Core/Config/ConfigInstallerInterface.php
index daa99bb4519c..0b383a76fa7d 100644
--- a/core/lib/Drupal/Core/Config/ConfigInstallerInterface.php
+++ b/core/lib/Drupal/Core/Config/ConfigInstallerInterface.php
@@ -70,6 +70,7 @@ public function installCollectionDefaultConfig($collection);
    * Sets the configuration storage that provides the default configuration.
    *
    * @param \Drupal\Core\Config\StorageInterface $storage
+   *   The storage.
    *
    * @return $this
    */
diff --git a/core/lib/Drupal/Core/Datetime/Element/Datelist.php b/core/lib/Drupal/Core/Datetime/Element/Datelist.php
index bbb1676d70e1..add7a73ae153 100644
--- a/core/lib/Drupal/Core/Datetime/Element/Datelist.php
+++ b/core/lib/Drupal/Core/Datetime/Element/Datelist.php
@@ -350,7 +350,9 @@ protected static function checkEmptyInputs($input, $parts) {
    * Rounds minutes and seconds to nearest requested value.
    *
    * @param $date
+   *   The date.
    * @param $increment
+   *   The value to round to.
    *
    * @return
    */
diff --git a/core/lib/Drupal/Core/Datetime/Element/Datetime.php b/core/lib/Drupal/Core/Datetime/Element/Datetime.php
index e1d0aea4720a..11c5f2a69f60 100644
--- a/core/lib/Drupal/Core/Datetime/Element/Datetime.php
+++ b/core/lib/Drupal/Core/Datetime/Element/Datetime.php
@@ -387,6 +387,7 @@ public static function validateDatetime(&$element, FormStateInterface $form_stat
    * This is centralized for a consistent method of creating these examples.
    *
    * @param string $format
+   *   The date format.
    *
    * @return string
    */
diff --git a/core/lib/Drupal/Core/Entity/Query/ConditionAggregateInterface.php b/core/lib/Drupal/Core/Entity/Query/ConditionAggregateInterface.php
index 0c49c2811a3f..3cdf00c971fd 100644
--- a/core/lib/Drupal/Core/Entity/Query/ConditionAggregateInterface.php
+++ b/core/lib/Drupal/Core/Entity/Query/ConditionAggregateInterface.php
@@ -19,10 +19,16 @@ public function getConjunction();
    * Adds a condition.
    *
    * @param string|ConditionAggregateInterface $field
+   *   The field.
    * @param string $function
+   *   (optional) The function.
    * @param mixed $value
+   *   (optional) The value.
    * @param string $operator
+   *   (optional) The operator.
    * @param string $langcode
+   *   (optional) For which language the entity should be prepared, defaults to
+   *   the current content language.
    *
    * @return $this
    *   The called object.
@@ -35,8 +41,12 @@ public function condition($field, $function = NULL, $value = NULL, $operator = N
    * Queries for the existence of a field.
    *
    * @param string $field
+   *   The field to query for existence.
    * @param string $function
+   *   The function.
    * @param string $langcode
+   *   (optional) For which language the entity should be prepared, defaults to
+   *   the current content language.
    *
    * @return \Drupal\Core\Entity\Query\ConditionInterface
    *
@@ -48,8 +58,12 @@ public function exists($field, $function, $langcode = NULL);
    * Queries for the nonexistence of a field.
    *
    * @param string $field
+   *   The field to query for nonexistence.
    * @param string $function
+   *   The function.
    * @param string $langcode
+   *   (optional) For which language the entity should be prepared, defaults to
+   *   the current content language.
    *
    * @return \Drupal\Core\Entity\Query\ConditionInterface
    *
diff --git a/core/lib/Drupal/Core/Entity/Query/ConditionInterface.php b/core/lib/Drupal/Core/Entity/Query/ConditionInterface.php
index d0817fc79354..c2893e64fdd7 100644
--- a/core/lib/Drupal/Core/Entity/Query/ConditionInterface.php
+++ b/core/lib/Drupal/Core/Entity/Query/ConditionInterface.php
@@ -27,9 +27,14 @@ public function count();
    * Adds a condition.
    *
    * @param string|\Drupal\Core\Entity\Query\ConditionInterface $field
+   *   The field.
    * @param mixed $value
+   *   (optional) The value.
    * @param string $operator
+   *   (optional) The operator.
    * @param string $langcode
+   *   (optional) For which language the entity should be prepared, defaults to
+   *   the current content language.
    *
    * @return $this
    *
@@ -41,7 +46,10 @@ public function condition($field, $value = NULL, $operator = NULL, $langcode = N
    * Queries for the existence of a field.
    *
    * @param string $field
+   *   The field to query for existence.
    * @param string $langcode
+   *   (optional) For which language the entity should be prepared, defaults to
+   *   the current content language.
    *
    * @return $this
    *
@@ -53,6 +61,7 @@ public function exists($field, $langcode = NULL);
    * Queries for the nonexistence of a field.
    *
    * @param string $field
+   *   The field to query for nonexistence.
    * @param string $langcode
    *   (optional) For which language the entity should be prepared, defaults to
    *   the current content language.
diff --git a/core/lib/Drupal/Core/Entity/Query/Sql/Tables.php b/core/lib/Drupal/Core/Entity/Query/Sql/Tables.php
index 43b7be38a3ad..91b43bef9396 100644
--- a/core/lib/Drupal/Core/Entity/Query/Sql/Tables.php
+++ b/core/lib/Drupal/Core/Entity/Query/Sql/Tables.php
@@ -66,6 +66,7 @@ class Tables implements TablesInterface {
 
   /**
    * @param \Drupal\Core\Database\Query\SelectInterface $sql_query
+   *   The SQL query.
    */
   public function __construct(SelectInterface $sql_query) {
     $this->sqlQuery = $sql_query;
@@ -454,6 +455,7 @@ protected function addJoin($type, $table, $join_condition, $langcode, $delta = N
    * @param string $table
    *   The table name.
    * @param string $entity_type_id
+   *   The entity type ID.
    *
    * @return array|false
    *   An associative array of table field mapping for the given table, keyed by
diff --git a/core/lib/Drupal/Core/EventSubscriber/AuthenticationSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/AuthenticationSubscriber.php
index b592c1ad09ae..129cd692bf56 100644
--- a/core/lib/Drupal/Core/EventSubscriber/AuthenticationSubscriber.php
+++ b/core/lib/Drupal/Core/EventSubscriber/AuthenticationSubscriber.php
@@ -125,6 +125,7 @@ public function onExceptionSendChallenge(ExceptionEvent $event) {
    * Detect disallowed authentication methods on access denied exceptions.
    *
    * @param \Symfony\Component\HttpKernel\Event\ExceptionEvent $event
+   *   The event.
    */
   public function onExceptionAccessDenied(ExceptionEvent $event) {
     if (isset($this->filter) && $event->isMainRequest()) {
diff --git a/core/lib/Drupal/Core/EventSubscriber/ExceptionTestSiteSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/ExceptionTestSiteSubscriber.php
index 00ef848c0f51..2f9745c5c88f 100644
--- a/core/lib/Drupal/Core/EventSubscriber/ExceptionTestSiteSubscriber.php
+++ b/core/lib/Drupal/Core/EventSubscriber/ExceptionTestSiteSubscriber.php
@@ -32,6 +32,7 @@ protected function getHandledFormats() {
    *   vestigial and can be removed.
    *
    * @param \Symfony\Component\HttpKernel\Event\ExceptionEvent $event
+   *   The event.
    */
   public function on500(ExceptionEvent $event) {
     $exception = $event->getThrowable();
diff --git a/core/lib/Drupal/Core/EventSubscriber/FinishResponseSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/FinishResponseSubscriber.php
index d00270f793ad..9d70038a787f 100644
--- a/core/lib/Drupal/Core/EventSubscriber/FinishResponseSubscriber.php
+++ b/core/lib/Drupal/Core/EventSubscriber/FinishResponseSubscriber.php
@@ -213,6 +213,7 @@ public function onRespond(ResponseEvent $event) {
    * @see \Symfony\Component\HttpFoundation\ResponseHeaderBag::computeCacheControlValue()
    *
    * @param \Symfony\Component\HttpFoundation\Response $response
+   *   The response object.
    *
    * @return bool
    *   TRUE when Cache-Control header was set explicitly on the given response.
diff --git a/core/lib/Drupal/Core/Form/FormSubmitter.php b/core/lib/Drupal/Core/Form/FormSubmitter.php
index 94dadbb48274..b5638ce9578c 100644
--- a/core/lib/Drupal/Core/Form/FormSubmitter.php
+++ b/core/lib/Drupal/Core/Form/FormSubmitter.php
@@ -33,6 +33,7 @@ class FormSubmitter implements FormSubmitterInterface {
    * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
    *   The request stack.
    * @param \Drupal\Core\Routing\UrlGeneratorInterface $url_generator
+   *   The URL generator.
    */
   public function __construct(RequestStack $request_stack, UrlGeneratorInterface $url_generator) {
     $this->requestStack = $request_stack;
diff --git a/core/lib/Drupal/Core/Locale/CountryManager.php b/core/lib/Drupal/Core/Locale/CountryManager.php
index b5b01acfe0de..cc80581b0e68 100644
--- a/core/lib/Drupal/Core/Locale/CountryManager.php
+++ b/core/lib/Drupal/Core/Locale/CountryManager.php
@@ -25,6 +25,7 @@ class CountryManager implements CountryManagerInterface {
    * Constructor.
    *
    * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
+   *   The module handler.
    */
   public function __construct(ModuleHandlerInterface $module_handler) {
     $this->moduleHandler = $module_handler;
diff --git a/core/lib/Drupal/Core/Lock/LockBackendInterface.php b/core/lib/Drupal/Core/Lock/LockBackendInterface.php
index dcc8ea4e7420..5f74cdda9c04 100644
--- a/core/lib/Drupal/Core/Lock/LockBackendInterface.php
+++ b/core/lib/Drupal/Core/Lock/LockBackendInterface.php
@@ -127,6 +127,7 @@ public function wait($name, $delay = 30);
    * Releases the given lock.
    *
    * @param string $name
+   *   The lock name.
    */
   public function release($name);
 
diff --git a/core/lib/Drupal/Core/Menu/LocalTaskManager.php b/core/lib/Drupal/Core/Menu/LocalTaskManager.php
index f0d42fb7be6e..6fb8bdfe935b 100644
--- a/core/lib/Drupal/Core/Menu/LocalTaskManager.php
+++ b/core/lib/Drupal/Core/Menu/LocalTaskManager.php
@@ -389,6 +389,7 @@ public function getLocalTasks($route_name, $level = 0) {
    * @param string $route_name
    *   The route name of the local task to determine the active status.
    * @param array $route_parameters
+   *   The parameter for the route.
    *
    * @return bool
    *   Returns TRUE if the passed route_name and route_parameters is considered
diff --git a/core/lib/Drupal/Core/Render/Element/InlineTemplate.php b/core/lib/Drupal/Core/Render/Element/InlineTemplate.php
index ddef29673a92..d53a317e92cd 100644
--- a/core/lib/Drupal/Core/Render/Element/InlineTemplate.php
+++ b/core/lib/Drupal/Core/Render/Element/InlineTemplate.php
@@ -43,6 +43,7 @@ public function getInfo() {
    * Renders a twig string directly.
    *
    * @param array $element
+   *   The element.
    *
    * @return array
    */
diff --git a/core/lib/Drupal/Core/Routing/Enhancer/ParamConversionEnhancer.php b/core/lib/Drupal/Core/Routing/Enhancer/ParamConversionEnhancer.php
index 3d268e481697..445c4fe3f48c 100644
--- a/core/lib/Drupal/Core/Routing/Enhancer/ParamConversionEnhancer.php
+++ b/core/lib/Drupal/Core/Routing/Enhancer/ParamConversionEnhancer.php
@@ -73,6 +73,7 @@ protected function copyRawVariables(array $defaults) {
    * Catches failed parameter conversions and throw a 404 instead.
    *
    * @param \Symfony\Component\HttpKernel\Event\ExceptionEvent $event
+   *   The event.
    */
   public function onException(ExceptionEvent $event) {
     $exception = $event->getThrowable();
diff --git a/core/lib/Drupal/Core/Routing/RoutePreloader.php b/core/lib/Drupal/Core/Routing/RoutePreloader.php
index 9a8fba810c03..f9bc874b69ea 100644
--- a/core/lib/Drupal/Core/Routing/RoutePreloader.php
+++ b/core/lib/Drupal/Core/Routing/RoutePreloader.php
@@ -55,6 +55,7 @@ class RoutePreloader implements EventSubscriberInterface {
    * @param \Drupal\Core\State\StateInterface $state
    *   The state key value store.
    * @param \Drupal\Core\Cache\CacheBackendInterface $cache
+   *   The cache backend.
    */
   public function __construct(RouteProviderInterface $route_provider, StateInterface $state, CacheBackendInterface $cache) {
     $this->routeProvider = $route_provider;
diff --git a/core/lib/Drupal/Core/Test/TestDiscovery.php b/core/lib/Drupal/Core/Test/TestDiscovery.php
index 1b12a47c7c65..cf0ca32f2810 100644
--- a/core/lib/Drupal/Core/Test/TestDiscovery.php
+++ b/core/lib/Drupal/Core/Test/TestDiscovery.php
@@ -389,6 +389,7 @@ public static function getTestInfo($classname, $doc_comment = NULL) {
    * Parses the phpDoc summary line of a test class.
    *
    * @param string $doc_comment
+   *   The documentation comment.
    *
    * @return string
    *   The parsed phpDoc summary line. An empty string is returned if no summary
diff --git a/core/lib/Drupal/Core/Updater/Updater.php b/core/lib/Drupal/Core/Updater/Updater.php
index 46ea7ea8cd83..65c7409bbc62 100644
--- a/core/lib/Drupal/Core/Updater/Updater.php
+++ b/core/lib/Drupal/Core/Updater/Updater.php
@@ -155,6 +155,7 @@ protected static function getExtensionInfo($directory) {
    *   provide their canonical name.
    *
    * @param string $directory
+   *   The full directory path.
    *
    * @return string
    *   The name of the project.
diff --git a/core/lib/Drupal/Core/Updater/UpdaterInterface.php b/core/lib/Drupal/Core/Updater/UpdaterInterface.php
index 09e3bec9072e..6e0bdaf32f9f 100644
--- a/core/lib/Drupal/Core/Updater/UpdaterInterface.php
+++ b/core/lib/Drupal/Core/Updater/UpdaterInterface.php
@@ -49,6 +49,7 @@ public static function getRootDirectoryRelativePath();
    * Determines if the Updater can handle the project provided in $directory.
    *
    * @param string $directory
+   *   The directory.
    *
    * @return bool
    *   TRUE if the project is installed, FALSE if not.
diff --git a/core/lib/Drupal/Core/Validation/ConstraintValidatorFactory.php b/core/lib/Drupal/Core/Validation/ConstraintValidatorFactory.php
index 4e6bfe309132..218033e58046 100644
--- a/core/lib/Drupal/Core/Validation/ConstraintValidatorFactory.php
+++ b/core/lib/Drupal/Core/Validation/ConstraintValidatorFactory.php
@@ -19,6 +19,7 @@ class ConstraintValidatorFactory extends BaseConstraintValidatorFactory {
    * Constructs a new ConstraintValidatorFactory.
    *
    * @param \Drupal\Core\DependencyInjection\ClassResolverInterface $class_resolver
+   *   The class resolver.
    */
   public function __construct(ClassResolverInterface $class_resolver) {
     $this->classResolver = $class_resolver;
diff --git a/core/modules/ban/src/Form/BanAdmin.php b/core/modules/ban/src/Form/BanAdmin.php
index 9a55d02dbe27..a92954e9d200 100644
--- a/core/modules/ban/src/Form/BanAdmin.php
+++ b/core/modules/ban/src/Form/BanAdmin.php
@@ -24,6 +24,7 @@ class BanAdmin extends FormBase {
    * Constructs a new BanAdmin object.
    *
    * @param \Drupal\ban\BanIpManagerInterface $ip_manager
+   *   The ban IP manager.
    */
   public function __construct(BanIpManagerInterface $ip_manager) {
     $this->ipManager = $ip_manager;
diff --git a/core/modules/config/tests/config_import_test/src/EventSubscriber.php b/core/modules/config/tests/config_import_test/src/EventSubscriber.php
index 6b72b8ac992e..a0691c3f0edc 100644
--- a/core/modules/config/tests/config_import_test/src/EventSubscriber.php
+++ b/core/modules/config/tests/config_import_test/src/EventSubscriber.php
@@ -84,6 +84,7 @@ public function onConfigImporterMissingContentTwo(MissingContentEvent $event) {
    * Reacts to a config save and records information in state for testing.
    *
    * @param \Drupal\Core\Config\ConfigCrudEvent $event
+   *   The event.
    */
   public function onConfigSave(ConfigCrudEvent $event) {
     $config = $event->getConfig();
@@ -116,6 +117,7 @@ public function onConfigSave(ConfigCrudEvent $event) {
    * Reacts to a config delete and records information in state for testing.
    *
    * @param \Drupal\Core\Config\ConfigCrudEvent $event
+   *   The event.
    */
   public function onConfigDelete(ConfigCrudEvent $event) {
     $config = $event->getConfig();
diff --git a/core/modules/config_translation/tests/src/Functional/ConfigTranslationUiTest.php b/core/modules/config_translation/tests/src/Functional/ConfigTranslationUiTest.php
index 025f933eb44f..50a74e205691 100644
--- a/core/modules/config_translation/tests/src/Functional/ConfigTranslationUiTest.php
+++ b/core/modules/config_translation/tests/src/Functional/ConfigTranslationUiTest.php
@@ -1147,7 +1147,9 @@ protected function getTranslation($config_name, $key, $langcode) {
    * Sets site name and slogan for default language, helps in tests.
    *
    * @param string $site_name
+   *   The site name.
    * @param string $site_slogan
+   *   The site slogan.
    */
   protected function setSiteInformation($site_name, $site_slogan) {
     $edit = [
diff --git a/core/modules/config_translation/tests/src/Unit/ConfigNamesMapperTest.php b/core/modules/config_translation/tests/src/Unit/ConfigNamesMapperTest.php
index 728063ad5756..ea273e39fd40 100644
--- a/core/modules/config_translation/tests/src/Unit/ConfigNamesMapperTest.php
+++ b/core/modules/config_translation/tests/src/Unit/ConfigNamesMapperTest.php
@@ -675,6 +675,7 @@ public function getInternalLangcode() {
    * Sets the list of configuration names.
    *
    * @param array $config_names
+   *   The configuration names.
    */
   public function setConfigNames(array $config_names) {
     $this->pluginDefinition['names'] = $config_names;
diff --git a/core/modules/field_layout/tests/src/Kernel/FieldLayoutEntityDisplayTest.php b/core/modules/field_layout/tests/src/Kernel/FieldLayoutEntityDisplayTest.php
index 1f94b9da38fa..0042c7b0585a 100644
--- a/core/modules/field_layout/tests/src/Kernel/FieldLayoutEntityDisplayTest.php
+++ b/core/modules/field_layout/tests/src/Kernel/FieldLayoutEntityDisplayTest.php
@@ -176,8 +176,11 @@ public function testPreSave() {
    * Asserts than an entity has the correct values.
    *
    * @param mixed $expected
+   *   The expected values.
    * @param array $values
+   *   The actual values.
    * @param string $message
+   *   (optional) An error message.
    */
   public static function assertEntityValues($expected, array $values, $message = '') {
 
diff --git a/core/modules/file/src/Upload/FileUploadResult.php b/core/modules/file/src/Upload/FileUploadResult.php
index 8481002cf602..8a00935da17e 100644
--- a/core/modules/file/src/Upload/FileUploadResult.php
+++ b/core/modules/file/src/Upload/FileUploadResult.php
@@ -51,6 +51,7 @@ public function setSecurityRename(): FileUploadResult {
    * Sets the sanitized filename.
    *
    * @param string $sanitizedFilename
+   *   The sanitized filename.
    *
    * @return $this
    */
@@ -72,6 +73,7 @@ public function getOriginalFilename(): string {
    * Sets the original filename.
    *
    * @param string $originalFilename
+   *   The original filename.
    *
    * @return $this
    */
@@ -84,6 +86,7 @@ public function setOriginalFilename(string $originalFilename): FileUploadResult
    * Sets the File entity.
    *
    * @param \Drupal\file\FileInterface $file
+   *   A file entity.
    *
    * @return $this
    */
diff --git a/core/modules/jsonapi/tests/src/Functional/UserTest.php b/core/modules/jsonapi/tests/src/Functional/UserTest.php
index 2184c3bcb4b8..21a2d99d0b58 100644
--- a/core/modules/jsonapi/tests/src/Functional/UserTest.php
+++ b/core/modules/jsonapi/tests/src/Functional/UserTest.php
@@ -803,7 +803,9 @@ protected function makeNormalizationInvalid(array $document, $entity_key) {
 
   /**
    * @param \Drupal\user\UserInterface $account
+   *   The user account.
    * @param string $cancel_method
+   *   The cancel method.
    */
   private function sendDeleteRequestForUser(UserInterface $account, string $cancel_method) {
     $url = Url::fromRoute(sprintf('jsonapi.%s.individual', static::$resourceTypeName), ['entity' => $account->uuid()]);
diff --git a/core/modules/locale/src/PluralFormula.php b/core/modules/locale/src/PluralFormula.php
index 0913a69cdaf7..fc7fd88519fa 100644
--- a/core/modules/locale/src/PluralFormula.php
+++ b/core/modules/locale/src/PluralFormula.php
@@ -42,7 +42,9 @@ class PluralFormula implements PluralFormulaInterface {
 
   /**
    * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
+   *   The language manager.
    * @param \Drupal\Core\State\StateInterface $state
+   *   The state.
    */
   public function __construct(LanguageManagerInterface $language_manager, StateInterface $state) {
     $this->languageManager = $language_manager;
diff --git a/core/modules/migrate/src/Event/MigratePreRowSaveEvent.php b/core/modules/migrate/src/Event/MigratePreRowSaveEvent.php
index 98a1c0a53edf..397ceb5e372d 100644
--- a/core/modules/migrate/src/Event/MigratePreRowSaveEvent.php
+++ b/core/modules/migrate/src/Event/MigratePreRowSaveEvent.php
@@ -26,6 +26,7 @@ class MigratePreRowSaveEvent extends EventBase {
    * @param \Drupal\migrate\MigrateMessageInterface $message
    *   The current migrate message service.
    * @param \Drupal\migrate\Row $row
+   *   The current row.
    */
   public function __construct(MigrationInterface $migration, MigrateMessageInterface $message, Row $row) {
     parent::__construct($migration, $message);
diff --git a/core/modules/migrate/tests/src/Kernel/process/ExtractTest.php b/core/modules/migrate/tests/src/Kernel/process/ExtractTest.php
index 8dc73f492449..c85f8aab1a57 100644
--- a/core/modules/migrate/tests/src/Kernel/process/ExtractTest.php
+++ b/core/modules/migrate/tests/src/Kernel/process/ExtractTest.php
@@ -57,7 +57,9 @@ public function getDefinition() {
    * @dataProvider multipleValueProviderSource
    *
    * @param array $source_data
+   *   The source data.
    * @param array $expected_data
+   *   The expected results.
    */
   public function testMultipleValueExplode(array $source_data, array $expected_data) {
     $definition = $this->getDefinition();
diff --git a/core/modules/migrate/tests/src/Kernel/process/HandleMultiplesTest.php b/core/modules/migrate/tests/src/Kernel/process/HandleMultiplesTest.php
index caae69de613c..1319a7bf8a77 100644
--- a/core/modules/migrate/tests/src/Kernel/process/HandleMultiplesTest.php
+++ b/core/modules/migrate/tests/src/Kernel/process/HandleMultiplesTest.php
@@ -85,7 +85,9 @@ public function getDefinition() {
    * @dataProvider scalarAndMultipleValuesProviderSource
    *
    * @param array $source_data
+   *   The source data.
    * @param array $expected_data
+   *   The expected results.
    */
   public function testScalarAndMultipleValues(array $source_data, array $expected_data) {
     $definition = $this->getDefinition();
diff --git a/core/modules/node/src/EventSubscriber/NodeAdminRouteSubscriber.php b/core/modules/node/src/EventSubscriber/NodeAdminRouteSubscriber.php
index 722c70549d09..a726ae8a649e 100644
--- a/core/modules/node/src/EventSubscriber/NodeAdminRouteSubscriber.php
+++ b/core/modules/node/src/EventSubscriber/NodeAdminRouteSubscriber.php
@@ -58,6 +58,7 @@ protected function alterRoutes(RouteCollection $collection) {
    * Rebuilds the router when node.settings:use_admin_theme is changed.
    *
    * @param \Drupal\Core\Config\ConfigCrudEvent $event
+   *   The event object.
    */
   public function onConfigSave(ConfigCrudEvent $event) {
     if ($event->getConfig()->getName() === 'node.settings' && $event->isChanged('use_admin_theme')) {
diff --git a/core/modules/node/src/Plugin/views/argument/Nid.php b/core/modules/node/src/Plugin/views/argument/Nid.php
index 382b66643ed9..4a8c1e2b18c1 100644
--- a/core/modules/node/src/Plugin/views/argument/Nid.php
+++ b/core/modules/node/src/Plugin/views/argument/Nid.php
@@ -30,6 +30,7 @@ class Nid extends NumericArgument {
    * @param mixed $plugin_definition
    *   The plugin implementation definition.
    * @param \Drupal\node\NodeStorageInterface $node_storage
+   *   The node storage handler.
    */
   public function __construct(array $configuration, $plugin_id, $plugin_definition, NodeStorageInterface $node_storage) {
     parent::__construct($configuration, $plugin_id, $plugin_definition);
diff --git a/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeTypeTest.php b/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeTypeTest.php
index b1080a9de36b..94a579c8703b 100644
--- a/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeTypeTest.php
+++ b/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeTypeTest.php
@@ -42,10 +42,15 @@ protected function setUp(): void {
    * @param string $help
    *   The expected help text.
    * @param bool $display_submitted
+   *   If submission information is displayed.
    * @param bool $new_revision
+   *   If this is a new revision.
    * @param array $expected_available_menus
+   *   The expected menus.
    * @param string $expected_parent
+   *   The expected menu parents.
    * @param string|null $body_label
+   *   (optional) The label for the body field.
    */
   protected function assertEntity($id, $label, $description, $help, $display_submitted, $new_revision, $expected_available_menus, $expected_parent, $body_label = NULL) {
     /** @var \Drupal\node\NodeTypeInterface $entity */
diff --git a/core/modules/quickedit/tests/src/Kernel/QuickEditTestBase.php b/core/modules/quickedit/tests/src/Kernel/QuickEditTestBase.php
index abcf71d7fcbc..b92af125ac4d 100644
--- a/core/modules/quickedit/tests/src/Kernel/QuickEditTestBase.php
+++ b/core/modules/quickedit/tests/src/Kernel/QuickEditTestBase.php
@@ -65,6 +65,7 @@ protected function setUp() {
    * @param string $label
    *   The field's label (used everywhere: widget label, formatter label).
    * @param array $field_settings
+   *   The field's settings.
    * @param string $widget_type
    *   The widget type.
    * @param array $widget_settings
diff --git a/core/modules/serialization/src/Encoder/XmlEncoder.php b/core/modules/serialization/src/Encoder/XmlEncoder.php
index f80955b54c03..bdcb184d3e8c 100644
--- a/core/modules/serialization/src/Encoder/XmlEncoder.php
+++ b/core/modules/serialization/src/Encoder/XmlEncoder.php
@@ -55,6 +55,7 @@ public function getBaseEncoder() {
    * Sets the base encoder instance.
    *
    * @param \Symfony\Component\Serializer\Encoder\XmlEncoder $encoder
+   *   The XML encoder.
    */
   public function setBaseEncoder($encoder) {
     $this->baseEncoder = $encoder;
diff --git a/core/modules/serialization/src/Normalizer/EntityReferenceFieldItemNormalizerTrait.php b/core/modules/serialization/src/Normalizer/EntityReferenceFieldItemNormalizerTrait.php
index 1acfd70a7a44..6f4ec68d4470 100644
--- a/core/modules/serialization/src/Normalizer/EntityReferenceFieldItemNormalizerTrait.php
+++ b/core/modules/serialization/src/Normalizer/EntityReferenceFieldItemNormalizerTrait.php
@@ -20,6 +20,7 @@ protected function normalizeRootReferenceValue(&$values, EntityReferenceItem $fi
    * Determines if a field item references a taxonomy term.
    *
    * @param \Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem $field_item
+   *   The entity reference item.
    *
    * @return bool
    */
diff --git a/core/modules/serialization/tests/src/Unit/Normalizer/ContentEntityNormalizerTest.php b/core/modules/serialization/tests/src/Unit/Normalizer/ContentEntityNormalizerTest.php
index 5f20476b74aa..888499c4fd8a 100644
--- a/core/modules/serialization/tests/src/Unit/Normalizer/ContentEntityNormalizerTest.php
+++ b/core/modules/serialization/tests/src/Unit/Normalizer/ContentEntityNormalizerTest.php
@@ -122,6 +122,7 @@ public function testNormalizeWithAccountContext() {
    * Creates a mock content entity.
    *
    * @param $definitions
+   *   The properties the will be returned.
    *
    * @return \PHPUnit\Framework\MockObject\MockObject
    */
@@ -145,8 +146,11 @@ public function createMockForContentEntity($definitions) {
    * Creates a mock field list item.
    *
    * @param bool $access
+   *   The value that access() will return.
    * @param bool $internal
+   *   The value that isInternal() will return.
    * @param \Drupal\Core\Session\AccountInterface $user_context
+   *   The user context used for the access check.
    *
    * @return \Drupal\Core\Field\FieldItemListInterface|\PHPUnit\Framework\MockObject\MockObject
    */
diff --git a/core/modules/system/src/Form/ModulesListForm.php b/core/modules/system/src/Form/ModulesListForm.php
index ec50babddce8..d38749400b56 100644
--- a/core/modules/system/src/Form/ModulesListForm.php
+++ b/core/modules/system/src/Form/ModulesListForm.php
@@ -238,6 +238,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
    * @param \Drupal\Core\Extension\Extension $module
    *   The module for which to build the form row.
    * @param $distribution
+   *   The distribution.
    *
    * @return array
    *   The form row for the given module.
diff --git a/core/modules/system/src/Form/SystemMenuOffCanvasForm.php b/core/modules/system/src/Form/SystemMenuOffCanvasForm.php
index a561a5bd9a5a..8a500853ae62 100644
--- a/core/modules/system/src/Form/SystemMenuOffCanvasForm.php
+++ b/core/modules/system/src/Form/SystemMenuOffCanvasForm.php
@@ -61,8 +61,11 @@ class SystemMenuOffCanvasForm extends PluginFormBase implements ContainerInjecti
    * SystemMenuOffCanvasForm constructor.
    *
    * @param \Drupal\Core\Entity\EntityStorageInterface $menu_storage
+   *   The menu storage handler.
    * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
+   *   The entity type manager.
    * @param \Drupal\Core\StringTranslation\TranslationInterface $string_translation
+   *   The string translation handler.
    * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
    *   The config factory.
    */
diff --git a/core/modules/system/src/PhpStorage/MockPhpStorage.php b/core/modules/system/src/PhpStorage/MockPhpStorage.php
index cb3c42f8a42a..349191334c0f 100644
--- a/core/modules/system/src/PhpStorage/MockPhpStorage.php
+++ b/core/modules/system/src/PhpStorage/MockPhpStorage.php
@@ -18,6 +18,7 @@ class MockPhpStorage {
    * Constructs a MockPhpStorage object.
    *
    * @param array $configuration
+   *   The storage configuration.
    */
   public function __construct(array $configuration) {
     $this->configuration = $configuration;
diff --git a/core/modules/system/src/SystemConfigSubscriber.php b/core/modules/system/src/SystemConfigSubscriber.php
index 0ab0d15fc610..76830b70a6e2 100644
--- a/core/modules/system/src/SystemConfigSubscriber.php
+++ b/core/modules/system/src/SystemConfigSubscriber.php
@@ -36,6 +36,7 @@ public function __construct(RouteBuilderInterface $router_builder) {
    * Rebuilds the router when the default or admin theme is changed.
    *
    * @param \Drupal\Core\Config\ConfigCrudEvent $event
+   *   The configuration event.
    */
   public function onConfigSave(ConfigCrudEvent $event) {
     $saved_config = $event->getConfig();
diff --git a/core/modules/system/src/Tests/Routing/MockAliasManager.php b/core/modules/system/src/Tests/Routing/MockAliasManager.php
index b52b0b44c768..5299281d44f9 100644
--- a/core/modules/system/src/Tests/Routing/MockAliasManager.php
+++ b/core/modules/system/src/Tests/Routing/MockAliasManager.php
@@ -71,10 +71,6 @@ public function getPathByAlias($alias, $langcode = NULL) {
 
   /**
    * {@inheritdoc}
-   * @param $path
-   * @param null $langcode
-   *
-   * @return
    */
   public function getAliasByPath($path, $langcode = NULL) {
     if ($path[0] !== '/') {
diff --git a/core/modules/system/tests/modules/early_rendering_controller_test/src/EarlyRenderingTestController.php b/core/modules/system/tests/modules/early_rendering_controller_test/src/EarlyRenderingTestController.php
index a6aeb389e679..00f3ef9848ec 100644
--- a/core/modules/system/tests/modules/early_rendering_controller_test/src/EarlyRenderingTestController.php
+++ b/core/modules/system/tests/modules/early_rendering_controller_test/src/EarlyRenderingTestController.php
@@ -32,6 +32,7 @@ class EarlyRenderingTestController extends ControllerBase {
    * Constructs an EarlyRenderingTestController.
    *
    * @param \Drupal\Core\Render\RendererInterface $renderer
+   *   The renderer.
    */
   public function __construct(RendererInterface $renderer) {
     $this->renderer = $renderer;
diff --git a/core/modules/system/tests/modules/form_test/src/Form/FormTestMachineNameValidationForm.php b/core/modules/system/tests/modules/form_test/src/Form/FormTestMachineNameValidationForm.php
index 470683ce9b75..22cbb7cf456f 100644
--- a/core/modules/system/tests/modules/form_test/src/Form/FormTestMachineNameValidationForm.php
+++ b/core/modules/system/tests/modules/form_test/src/Form/FormTestMachineNameValidationForm.php
@@ -121,6 +121,7 @@ public function buildAjaxSnackConfigureForm(array $form, FormStateInterface $for
    * Loading stub for machine name.
    *
    * @param $machine_name
+   *   The machine name.
    *
    * @return bool
    */
diff --git a/core/modules/system/tests/modules/theme_test/src/EventSubscriber/ThemeTestSubscriber.php b/core/modules/system/tests/modules/theme_test/src/EventSubscriber/ThemeTestSubscriber.php
index 2cc0d369761a..337ab4c3b151 100644
--- a/core/modules/system/tests/modules/theme_test/src/EventSubscriber/ThemeTestSubscriber.php
+++ b/core/modules/system/tests/modules/theme_test/src/EventSubscriber/ThemeTestSubscriber.php
@@ -40,6 +40,7 @@ class ThemeTestSubscriber implements EventSubscriberInterface {
    * Constructs a new ThemeTestSubscriber.
    *
    * @param \Drupal\Core\Routing\RouteMatchInterface $current_route_match
+   *   The route match handler.
    * @param \Drupal\Core\Render\RendererInterface $renderer
    *   The renderer.
    */
diff --git a/core/modules/system/tests/src/Functional/Cache/AssertPageCacheContextsAndTagsTrait.php b/core/modules/system/tests/src/Functional/Cache/AssertPageCacheContextsAndTagsTrait.php
index dc375371a8e8..fefd3a462b5e 100644
--- a/core/modules/system/tests/src/Functional/Cache/AssertPageCacheContextsAndTagsTrait.php
+++ b/core/modules/system/tests/src/Functional/Cache/AssertPageCacheContextsAndTagsTrait.php
@@ -149,6 +149,7 @@ protected function assertCacheContexts(array $expected_contexts, $message = NULL
    * Asserts the max age header.
    *
    * @param int $max_age
+   *   The maximum age of the cache.
    */
   protected function assertCacheMaxAge($max_age) {
     $this->assertSession()->responseHeaderContains('Cache-Control', 'max-age:' . $max_age);
diff --git a/core/modules/system/tests/src/Kernel/Common/UrlTest.php b/core/modules/system/tests/src/Kernel/Common/UrlTest.php
index 447d056e3a01..76c5ffc45cd3 100644
--- a/core/modules/system/tests/src/Kernel/Common/UrlTest.php
+++ b/core/modules/system/tests/src/Kernel/Common/UrlTest.php
@@ -166,6 +166,7 @@ public function testLinkRenderArrayText() {
    * Checks for class existence in link.
    *
    * @param $attribute
+   *   Attribute to be checked.
    * @param $link
    *   URL to search.
    * @param $class
diff --git a/core/modules/system/tests/src/Kernel/Extension/ModuleHandlerTest.php b/core/modules/system/tests/src/Kernel/Extension/ModuleHandlerTest.php
index 8ba2ac6072b5..ff33361d4f45 100644
--- a/core/modules/system/tests/src/Kernel/Extension/ModuleHandlerTest.php
+++ b/core/modules/system/tests/src/Kernel/Extension/ModuleHandlerTest.php
@@ -59,6 +59,7 @@ public function testModuleList() {
    * @param array $expected_values
    *   The expected values, sorted by weight and module name.
    * @param $condition
+   *   The condition being tested, such as 'After adding a module'.
    */
   protected function assertModuleList(array $expected_values, $condition) {
     $expected_values = array_values(array_unique($expected_values));
diff --git a/core/modules/user/src/UserStorageInterface.php b/core/modules/user/src/UserStorageInterface.php
index 4cfd26b1a815..07121687af8f 100644
--- a/core/modules/user/src/UserStorageInterface.php
+++ b/core/modules/user/src/UserStorageInterface.php
@@ -14,6 +14,7 @@ interface UserStorageInterface extends ContentEntityStorageInterface {
    * Update the last login timestamp of the user.
    *
    * @param \Drupal\user\UserInterface $account
+   *   The user account.
    */
   public function updateLastLoginTimestamp(UserInterface $account);
 
diff --git a/core/modules/user/tests/src/Functional/UserPasswordResetTest.php b/core/modules/user/tests/src/Functional/UserPasswordResetTest.php
index 31c0db9ed3d2..775f2806c1d3 100644
--- a/core/modules/user/tests/src/Functional/UserPasswordResetTest.php
+++ b/core/modules/user/tests/src/Functional/UserPasswordResetTest.php
@@ -498,6 +498,7 @@ public function assertValidPasswordReset($name) {
    * Helper function to make assertions about an invalid password reset.
    *
    * @param string $name
+   *   The user name.
    */
   public function assertNoValidPasswordReset($name) {
     // This message is the same as the valid reset for privacy reasons.
diff --git a/core/modules/views/src/Analyzer.php b/core/modules/views/src/Analyzer.php
index 360a08f1bbdc..42ae3ccb6300 100644
--- a/core/modules/views/src/Analyzer.php
+++ b/core/modules/views/src/Analyzer.php
@@ -107,6 +107,7 @@ public function formatMessages(array $messages) {
    * for items that are definitely broken are much more useful.
    *
    * @param string $message
+   *   The message.
    * @param string $type
    *   The type of message. This should be "ok", "warning" or "error". Other
    *   values can be used but how they are treated by the output routine
diff --git a/core/modules/views/src/Plugin/views/argument_validator/Entity.php b/core/modules/views/src/Plugin/views/argument_validator/Entity.php
index d41de8482786..ba0bb219623d 100644
--- a/core/modules/views/src/Plugin/views/argument_validator/Entity.php
+++ b/core/modules/views/src/Plugin/views/argument_validator/Entity.php
@@ -209,6 +209,7 @@ public function validateArgument($argument) {
    * Validates an individual entity against class access settings.
    *
    * @param \Drupal\Core\Entity\EntityInterface $entity
+   *   The entity.
    *
    * @return bool
    *   True if validated.
diff --git a/core/modules/views/src/Plugin/views/display/DisplayRouterInterface.php b/core/modules/views/src/Plugin/views/display/DisplayRouterInterface.php
index e78198d84aaf..189d2424cb85 100644
--- a/core/modules/views/src/Plugin/views/display/DisplayRouterInterface.php
+++ b/core/modules/views/src/Plugin/views/display/DisplayRouterInterface.php
@@ -27,6 +27,7 @@ public function collectRoutes(RouteCollection $collection);
    * the method can specify to break the search.
    *
    * @param \Symfony\Component\Routing\RouteCollection $collection
+   *   The route collection.
    *
    * @return array
    *   Returns a list of "$view_id.$display_id" elements which got overridden.
diff --git a/core/modules/views/src/Plugin/views/filter/Combine.php b/core/modules/views/src/Plugin/views/filter/Combine.php
index 400be23aba1b..36dab819e57f 100644
--- a/core/modules/views/src/Plugin/views/filter/Combine.php
+++ b/core/modules/views/src/Plugin/views/filter/Combine.php
@@ -150,6 +150,7 @@ protected function opContains($expression) {
    * expressions.
    *
    * @param string $expression
+   *   The expression to add to the query.
    */
   protected function opContainsWord($expression) {
     $placeholder = $this->placeholder();
diff --git a/core/modules/views/src/Plugin/views/filter/FilterPluginBase.php b/core/modules/views/src/Plugin/views/filter/FilterPluginBase.php
index 4207ef9ea68a..3e5370beebde 100644
--- a/core/modules/views/src/Plugin/views/filter/FilterPluginBase.php
+++ b/core/modules/views/src/Plugin/views/filter/FilterPluginBase.php
@@ -748,8 +748,9 @@ protected function buildGroupValidate($form, FormStateInterface $form_state) {
    * @param string $identifier
    *   The identifier to check.
    * @param \Drupal\Core\Form\FormStateInterface $form_state
+   *   (optional) The current state of the form.
    * @param array $form_group
-   *   The form element to set any errors on.
+   *   (optional) The form element to set any errors on.
    *
    * @return string
    */
diff --git a/core/modules/views/src/Tests/TestHelperPlugin.php b/core/modules/views/src/Tests/TestHelperPlugin.php
index 86560630fcce..51d20bd68c50 100644
--- a/core/modules/views/src/Tests/TestHelperPlugin.php
+++ b/core/modules/views/src/Tests/TestHelperPlugin.php
@@ -31,6 +31,7 @@ public function testSetOptionDefaults(&$storage, $options, $level = 0) {
    * Allows to set the defined options.
    *
    * @param array $options
+   *   The options to set.
    *
    * @return $this
    */
diff --git a/core/modules/views/tests/modules/views_test_data/src/Plugin/views/join/JoinTest.php b/core/modules/views/tests/modules/views_test_data/src/Plugin/views/join/JoinTest.php
index ed96decd57de..025a7748f35d 100644
--- a/core/modules/views/tests/modules/views_test_data/src/Plugin/views/join/JoinTest.php
+++ b/core/modules/views/tests/modules/views_test_data/src/Plugin/views/join/JoinTest.php
@@ -30,6 +30,7 @@ public function getJoinValue() {
    * Sets the joinValue property.
    *
    * @param int $join_value
+   *   The value of the join.
    */
   public function setJoinValue($join_value) {
     $this->joinValue = $join_value;
diff --git a/core/modules/views/tests/modules/views_test_data/src/Plugin/views/query/QueryTest.php b/core/modules/views/tests/modules/views_test_data/src/Plugin/views/query/QueryTest.php
index 2d475c97b127..cf1e5dc18d66 100644
--- a/core/modules/views/tests/modules/views_test_data/src/Plugin/views/query/QueryTest.php
+++ b/core/modules/views/tests/modules/views_test_data/src/Plugin/views/query/QueryTest.php
@@ -82,6 +82,7 @@ public function ensureTable($table, $relationship = NULL, JoinPluginBase $join =
    * Implements Drupal\views\Plugin\views\query\QueryPluginBase::build().
    *
    * @param \Drupal\views\ViewExecutable $view
+   *   The view executable.
    */
   public function build(ViewExecutable $view) {
     $this->view = $view;
diff --git a/core/modules/views/tests/src/Kernel/Handler/FieldRenderedEntityTest.php b/core/modules/views/tests/src/Kernel/Handler/FieldRenderedEntityTest.php
index 46897992b1f4..241c65cec516 100644
--- a/core/modules/views/tests/src/Kernel/Handler/FieldRenderedEntityTest.php
+++ b/core/modules/views/tests/src/Kernel/Handler/FieldRenderedEntityTest.php
@@ -167,6 +167,7 @@ protected function assertCacheabilityMetadata($build) {
    * Ensures that the config dependencies are calculated the right way.
    *
    * @param \Drupal\views\Entity\View $storage
+   *   The view storage.
    */
   protected function assertConfigDependencies(View $storage) {
     $storage->calculateDependencies();
diff --git a/core/modules/views/tests/src/Kernel/ViewExecutableTest.php b/core/modules/views/tests/src/Kernel/ViewExecutableTest.php
index 3b1eac8136ee..92e4b51d2590 100644
--- a/core/modules/views/tests/src/Kernel/ViewExecutableTest.php
+++ b/core/modules/views/tests/src/Kernel/ViewExecutableTest.php
@@ -361,6 +361,7 @@ public function testDestroy() {
    * Asserts that expected view properties have been unset by destroy().
    *
    * @param \Drupal\views\ViewExecutable $view
+   *   The view executable.
    */
   protected function assertViewDestroy(ViewExecutable $view) {
     $reflection = new \ReflectionClass($view);
diff --git a/core/modules/views_ui/src/ViewEditForm.php b/core/modules/views_ui/src/ViewEditForm.php
index c5cd2381dc3c..c22ca7d82c6d 100644
--- a/core/modules/views_ui/src/ViewEditForm.php
+++ b/core/modules/views_ui/src/ViewEditForm.php
@@ -394,6 +394,7 @@ public function getDisplayTab($view) {
    * @param \Drupal\views_ui\ViewUI $view
    *   The ViewUI entity.
    * @param array $display
+   *   The display.
    *
    * @return array
    *   A renderable page build array.
diff --git a/core/modules/views_ui/tests/src/Functional/ArgumentValidatorTest.php b/core/modules/views_ui/tests/src/Functional/ArgumentValidatorTest.php
index af0e5bf6bb50..f2f7a1e454f2 100644
--- a/core/modules/views_ui/tests/src/Functional/ArgumentValidatorTest.php
+++ b/core/modules/views_ui/tests/src/Functional/ArgumentValidatorTest.php
@@ -49,6 +49,7 @@ public function testSpecifyValidation() {
    * both with and without specify_validation turned on.
    *
    * @param bool $specify_validation
+   *   The form validation.
    */
   protected function saveArgumentHandlerWithValidationOptions($specify_validation) {
     $options = [
diff --git a/core/modules/views_ui/tests/src/FunctionalJavascript/ViewsListingTest.php b/core/modules/views_ui/tests/src/FunctionalJavascript/ViewsListingTest.php
index 1a4cde7ed6e6..641d2fc4abd7 100644
--- a/core/modules/views_ui/tests/src/FunctionalJavascript/ViewsListingTest.php
+++ b/core/modules/views_ui/tests/src/FunctionalJavascript/ViewsListingTest.php
@@ -133,6 +133,7 @@ public function testFilterViewsListing() {
    * Removes any non-visible elements from the passed array.
    *
    * @param array $elements
+   *   The elements.
    *
    * @return array
    */
diff --git a/core/modules/workflows/src/State.php b/core/modules/workflows/src/State.php
index 57f830e92250..e4e65579bf23 100644
--- a/core/modules/workflows/src/State.php
+++ b/core/modules/workflows/src/State.php
@@ -103,6 +103,7 @@ public function getTransitions() {
    * Helper method to convert a State value object to a label.
    *
    * @param \Drupal\workflows\StateInterface $state
+   *   The state.
    *
    * @return string
    *   The label of the state.
diff --git a/core/phpcs.xml.dist b/core/phpcs.xml.dist
index 5db0cfbabd86..de9eefb69260 100644
--- a/core/phpcs.xml.dist
+++ b/core/phpcs.xml.dist
@@ -68,7 +68,6 @@
   <rule ref="Drupal.Commenting.FunctionComment">
     <exclude name="Drupal.Commenting.FunctionComment.InvalidNoReturn"/>
     <exclude name="Drupal.Commenting.FunctionComment.Missing"/>
-    <exclude name="Drupal.Commenting.FunctionComment.MissingParamComment"/>
     <exclude name="Drupal.Commenting.FunctionComment.MissingParamType"/>
     <exclude name="Drupal.Commenting.FunctionComment.MissingReturnComment"/>
     <exclude name="Drupal.Commenting.FunctionComment.MissingReturnType"/>
diff --git a/core/tests/Drupal/BuildTests/Composer/Template/ComposerProjectTemplatesTest.php b/core/tests/Drupal/BuildTests/Composer/Template/ComposerProjectTemplatesTest.php
index 53a5c2308c3c..04c5ff9bc007 100644
--- a/core/tests/Drupal/BuildTests/Composer/Template/ComposerProjectTemplatesTest.php
+++ b/core/tests/Drupal/BuildTests/Composer/Template/ComposerProjectTemplatesTest.php
@@ -256,7 +256,9 @@ public function testTemplateCreateProject($project, $package_dir, $docroot_dir)
    * Assert that the VERSION constant in Drupal.php is the expected value.
    *
    * @param string $expectedVersion
+   *   The expected version.
    * @param string $dir
+   *   The path to the site root.
    */
   protected function assertDrupalVersion($expectedVersion, $dir) {
     $drupal_php_path = $dir . '/core/lib/Drupal.php';
diff --git a/core/tests/Drupal/KernelTests/Core/Command/DbDumpTest.php b/core/tests/Drupal/KernelTests/Core/Command/DbDumpTest.php
index b66e3452931d..3b19ba554259 100644
--- a/core/tests/Drupal/KernelTests/Core/Command/DbDumpTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Command/DbDumpTest.php
@@ -220,6 +220,7 @@ public function testScriptLoad() {
    * Helper function to get a simplified schema for a given table.
    *
    * @param string $table
+   *   The table name.
    *
    * @return array
    *   Array keyed by field name, with the values being the field type.
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityQueryAggregateTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityQueryAggregateTest.php
index 796f6ca1391e..9a50a78fe6aa 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/EntityQueryAggregateTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityQueryAggregateTest.php
@@ -624,6 +624,8 @@ public function testRepeatedExecution() {
    * @param array $expected
    *   An array of the expected results.
    * @param bool $sorted
+   *   (optiOnal) Whether the array keys of the expected are sorted, defaults to
+   *   FALSE.
    */
   protected function assertResults($expected, $sorted = FALSE) {
     $found = TRUE;
diff --git a/core/tests/Drupal/KernelTests/Core/Routing/ExceptionHandlingTest.php b/core/tests/Drupal/KernelTests/Core/Routing/ExceptionHandlingTest.php
index d8b1c4163527..a0bd58876670 100644
--- a/core/tests/Drupal/KernelTests/Core/Routing/ExceptionHandlingTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Routing/ExceptionHandlingTest.php
@@ -128,6 +128,7 @@ public function testExceptionResponseGeneratedForOriginalRequest() {
    * Sets the given path to use as the 404 page and triggers a 404.
    *
    * @param string $path
+   *   The path to test.
    *
    * @return \Drupal\Core\Render\HtmlResponse
    *
diff --git a/core/tests/Drupal/Tests/Component/Datetime/DateTimePlusTest.php b/core/tests/Drupal/Tests/Component/Datetime/DateTimePlusTest.php
index 5918bafece67..a2c80f893497 100644
--- a/core/tests/Drupal/Tests/Component/Datetime/DateTimePlusTest.php
+++ b/core/tests/Drupal/Tests/Component/Datetime/DateTimePlusTest.php
@@ -231,6 +231,7 @@ public function assertDateTimestamp($date, $input, $initial, $transform) {
    * @param string $timezone
    *   Timezone argument for DateTimePlus.
    * @param string $format
+   *   PHP date() type format for parsing the input.
    * @param string $format_date
    *   Format argument for DateTimePlus::format().
    * @param string $expected
diff --git a/core/tests/Drupal/Tests/Component/Plugin/StubPluginManagerBaseWithMapper.php b/core/tests/Drupal/Tests/Component/Plugin/StubPluginManagerBaseWithMapper.php
index d3f3f94b0781..025c684ae745 100644
--- a/core/tests/Drupal/Tests/Component/Plugin/StubPluginManagerBaseWithMapper.php
+++ b/core/tests/Drupal/Tests/Component/Plugin/StubPluginManagerBaseWithMapper.php
@@ -14,6 +14,7 @@ final class StubPluginManagerBaseWithMapper extends PluginManagerBase {
    * Constructs a new instance.
    *
    * @param \Drupal\Component\Plugin\Mapper\MapperInterface $mapper
+   *   The plugin mapper interface.
    */
   public function __construct(MapperInterface $mapper) {
     $this->mapper = $mapper;
diff --git a/core/tests/Drupal/Tests/Component/Utility/ReflectionTest.php b/core/tests/Drupal/Tests/Component/Utility/ReflectionTest.php
index 7deb10328ed3..0a52a305f8e1 100644
--- a/core/tests/Drupal/Tests/Component/Utility/ReflectionTest.php
+++ b/core/tests/Drupal/Tests/Component/Utility/ReflectionTest.php
@@ -13,7 +13,9 @@ class ReflectionTest extends TestCase {
 
   /**
    * @param string|null $expected
+   *   The expected value of the parameter.
    * @param \ReflectionParameter $parameter
+   *   The reflection parameter.
    *
    * @covers ::getParameterClassName
    * @dataProvider providerGetParameterClassName
diff --git a/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/ScaffoldTestResult.php b/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/ScaffoldTestResult.php
index c68322a2d73d..a82bcf4fbe36 100644
--- a/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/ScaffoldTestResult.php
+++ b/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/ScaffoldTestResult.php
@@ -14,7 +14,9 @@ class ScaffoldTestResult {
    * Holds the location of the scaffold fixture and the stdout from the test.
    *
    * @param string $docroot
+   *   The location of the scaffold fixture.
    * @param string $scaffoldOutput
+   *   The stdout from the test.
    */
   public function __construct($docroot, $scaffoldOutput) {
     $this->docroot = $docroot;
diff --git a/core/tests/Drupal/Tests/Core/Cache/Context/IsFrontPathCacheContextTest.php b/core/tests/Drupal/Tests/Core/Cache/Context/IsFrontPathCacheContextTest.php
index 5ccb18566f3b..84fe9b1b33d5 100644
--- a/core/tests/Drupal/Tests/Core/Cache/Context/IsFrontPathCacheContextTest.php
+++ b/core/tests/Drupal/Tests/Core/Cache/Context/IsFrontPathCacheContextTest.php
@@ -32,6 +32,7 @@ public function testGetContextNotFront() {
    * Creates a PathMatcherInterface prophecy.
    *
    * @param bool $is_front
+   *   Whether the page is the front page.
    *
    * @return \Prophecy\Prophecy\ObjectProphecy
    */
diff --git a/core/tests/Drupal/Tests/Core/Config/Entity/ConfigEntityStorageTest.php b/core/tests/Drupal/Tests/Core/Config/Entity/ConfigEntityStorageTest.php
index 8f6c3aa359ea..8f237c60e785 100644
--- a/core/tests/Drupal/Tests/Core/Config/Entity/ConfigEntityStorageTest.php
+++ b/core/tests/Drupal/Tests/Core/Config/Entity/ConfigEntityStorageTest.php
@@ -247,6 +247,7 @@ public function testCreateWithExplicitLanguage() {
    * @covers ::doSave
    *
    * @param \Drupal\Core\Entity\EntityInterface $entity
+   *   The entity to test.
    *
    * @return \Drupal\Core\Entity\EntityInterface
    *
@@ -299,6 +300,7 @@ public function testSaveInsert(EntityInterface $entity) {
    * @covers ::doSave
    *
    * @param \Drupal\Core\Entity\EntityInterface $entity
+   *   The entity to test.
    *
    * @return \Drupal\Core\Entity\EntityInterface
    *
diff --git a/core/tests/Drupal/Tests/Core/DependencyInjection/Compiler/BackendCompilerPassTest.php b/core/tests/Drupal/Tests/Core/DependencyInjection/Compiler/BackendCompilerPassTest.php
index bfc7dee4ab2e..fa9a371d001b 100644
--- a/core/tests/Drupal/Tests/Core/DependencyInjection/Compiler/BackendCompilerPassTest.php
+++ b/core/tests/Drupal/Tests/Core/DependencyInjection/Compiler/BackendCompilerPassTest.php
@@ -116,6 +116,7 @@ public function providerTestProcess() {
    * bag so the setParameter() call effects the parent container as well.
    *
    * @param $service
+   *   The service definition.
    *
    * @return \Symfony\Component\DependencyInjection\ContainerBuilder
    */
@@ -135,6 +136,7 @@ protected function getSqliteContainer($service) {
    * bag so the setParameter() call effects the parent container as well.
    *
    * @param $service
+   *   The service definition.
    *
    * @return \Symfony\Component\DependencyInjection\ContainerBuilder
    */
@@ -152,6 +154,7 @@ protected function getMysqlContainer($service) {
    * bag so the setParameter() call effects the parent container as well.
    *
    * @param $service
+   *   The service definition.
    *
    * @return \Symfony\Component\DependencyInjection\ContainerBuilder
    */
diff --git a/core/tests/Drupal/Tests/Core/Entity/EntityTypeTest.php b/core/tests/Drupal/Tests/Core/Entity/EntityTypeTest.php
index e85c4391de3b..a05fe7cac13a 100644
--- a/core/tests/Drupal/Tests/Core/Entity/EntityTypeTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/EntityTypeTest.php
@@ -483,6 +483,7 @@ public function testConstraintMethods() {
    * Asserts there on no public properties on the object instance.
    *
    * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
+   *   The entity type.
    */
   protected function assertNoPublicProperties(EntityTypeInterface $entity_type) {
     $reflection = new \ReflectionObject($entity_type);
diff --git a/core/tests/Drupal/Tests/Core/Entity/KeyValueStore/KeyValueEntityStorageTest.php b/core/tests/Drupal/Tests/Core/Entity/KeyValueStore/KeyValueEntityStorageTest.php
index 3131893fcc19..62c9d27935a5 100644
--- a/core/tests/Drupal/Tests/Core/Entity/KeyValueStore/KeyValueEntityStorageTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/KeyValueStore/KeyValueEntityStorageTest.php
@@ -222,6 +222,7 @@ public function testCreate() {
    * @covers ::doSave
    *
    * @param \Drupal\Core\Entity\EntityInterface $entity
+   *   The entity.
    *
    * @return \Drupal\Core\Entity\EntityInterface
    *
@@ -265,6 +266,7 @@ public function testSaveInsert(EntityInterface $entity) {
    * @covers ::doSave
    *
    * @param \Drupal\Core\Entity\EntityInterface $entity
+   *   The entity.
    *
    * @return \Drupal\Core\Entity\EntityInterface
    *
diff --git a/core/tests/Drupal/Tests/Core/Entity/Routing/DefaultHtmlRouteProviderTest.php b/core/tests/Drupal/Tests/Core/Entity/Routing/DefaultHtmlRouteProviderTest.php
index e15d795bc396..3ec83076c03e 100644
--- a/core/tests/Drupal/Tests/Core/Entity/Routing/DefaultHtmlRouteProviderTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/Routing/DefaultHtmlRouteProviderTest.php
@@ -335,6 +335,8 @@ public function testGetEntityTypeIdKeyTypeNotFieldable() {
 
   /**
    * @param \Prophecy\Prophecy\ObjectProphecy $base_entity_type
+   *   (optional) The prophesize base entity type.
+   *
    * @return \Prophecy\Prophecy\ObjectProphecy
    */
   protected function getEntityType(ObjectProphecy $base_entity_type = NULL) {
diff --git a/core/tests/Drupal/Tests/Core/EventSubscriber/RssResponseRelativeUrlFilterTest.php b/core/tests/Drupal/Tests/Core/EventSubscriber/RssResponseRelativeUrlFilterTest.php
index 89b609609732..92d85f05310b 100644
--- a/core/tests/Drupal/Tests/Core/EventSubscriber/RssResponseRelativeUrlFilterTest.php
+++ b/core/tests/Drupal/Tests/Core/EventSubscriber/RssResponseRelativeUrlFilterTest.php
@@ -108,7 +108,9 @@ public function providerTestOnResponse() {
    * @dataProvider providerTestOnResponse
    *
    * @param string $content
+   *   The content for the request.
    * @param string $expected_content
+   *   The expected content from the response.
    */
   public function testOnResponse($content, $expected_content) {
     $event = new ResponseEvent(
diff --git a/core/tests/Drupal/Tests/Core/Extension/ExtensionDiscoveryTest.php b/core/tests/Drupal/Tests/Core/Extension/ExtensionDiscoveryTest.php
index f40c2ac48d08..7d6eaf054107 100644
--- a/core/tests/Drupal/Tests/Core/Extension/ExtensionDiscoveryTest.php
+++ b/core/tests/Drupal/Tests/Core/Extension/ExtensionDiscoveryTest.php
@@ -102,6 +102,7 @@ public function testExtensionDiscoveryCache() {
    * Adds example files to the filesystem structure.
    *
    * @param array $filesystem_structure
+   *   An associative array where each key represents a directory.
    *
    * @return string[][]
    *   Format: $[$type][$name] = $yml_file
@@ -174,9 +175,11 @@ protected function populateFilesystemStructure(array &$filesystem_structure) {
 
   /**
    * @param array $filesystem_structure
+   *   An associative array where each key represents a directory.
    * @param string[] $pieces
    *   Fragments of the file path.
    * @param string $content
+   *   The contents of the file.
    */
   protected function addFileToFilesystemStructure(array &$filesystem_structure, array $pieces, $content) {
     $piece = array_shift($pieces);
diff --git a/core/tests/Drupal/Tests/Core/Extension/ExtensionListTest.php b/core/tests/Drupal/Tests/Core/Extension/ExtensionListTest.php
index 929ad62b1df7..a1ebab060ce1 100644
--- a/core/tests/Drupal/Tests/Core/Extension/ExtensionListTest.php
+++ b/core/tests/Drupal/Tests/Core/Extension/ExtensionListTest.php
@@ -333,6 +333,7 @@ class TestExtension extends ExtensionList {
 
   /**
    * @param \Drupal\Core\Extension\ExtensionDiscovery $extension_discovery
+   *   The extension discovery class.
    */
   public function setExtensionDiscovery(ExtensionDiscovery $extension_discovery) {
     $this->extensionDiscovery = $extension_discovery;
diff --git a/core/tests/Drupal/Tests/Core/File/FileSystemTest.php b/core/tests/Drupal/Tests/Core/File/FileSystemTest.php
index 1b5a49543ab3..465c60adb4f7 100644
--- a/core/tests/Drupal/Tests/Core/File/FileSystemTest.php
+++ b/core/tests/Drupal/Tests/Core/File/FileSystemTest.php
@@ -133,8 +133,11 @@ public function providerTestBasename() {
    * Asserts that the file permissions of a given URI matches.
    *
    * @param int $expected_mode
+   *   The expected file mode.
    * @param string $uri
+   *   The URI to test.
    * @param string $message
+   *   An optional error message.
    */
   protected function assertFilePermissions($expected_mode, $uri, $message = '') {
     // Mask out all but the last three octets.
diff --git a/core/tests/Drupal/Tests/Core/Form/FormStateDecoratorBaseTest.php b/core/tests/Drupal/Tests/Core/Form/FormStateDecoratorBaseTest.php
index 63dff16a8d42..f8d2db7677f1 100644
--- a/core/tests/Drupal/Tests/Core/Form/FormStateDecoratorBaseTest.php
+++ b/core/tests/Drupal/Tests/Core/Form/FormStateDecoratorBaseTest.php
@@ -71,8 +71,6 @@ public function testSetFormState() {
    * @covers ::setAlwaysProcess
    *
    * @dataProvider providerSingleBooleanArgument
-   *
-   * @param bool $always_process
    */
   public function testSetAlwaysProcess($always_process) {
     $this->decoratedFormState->setAlwaysProcess($always_process)
@@ -85,8 +83,6 @@ public function testSetAlwaysProcess($always_process) {
    * @covers ::getAlwaysProcess
    *
    * @dataProvider providerSingleBooleanArgument
-   *
-   * @param bool $always_process
    */
   public function testGetAlwaysProcess($always_process) {
     $this->decoratedFormState->getAlwaysProcess()
@@ -129,8 +125,6 @@ public function testGetButtons() {
    * @covers ::setCached
    *
    * @dataProvider providerSingleBooleanArgument
-   *
-   * @param bool $cache
    */
   public function testSetCached($cache) {
     $this->decoratedFormState->setCached($cache)
@@ -143,8 +137,6 @@ public function testSetCached($cache) {
    * @covers ::isCached
    *
    * @dataProvider providerSingleBooleanArgument
-   *
-   * @param bool $cache
    */
   public function testIsCached($cache) {
     $this->decoratedFormState->isCached()
@@ -157,8 +149,6 @@ public function testIsCached($cache) {
    * @covers ::setCached
    *
    * @dataProvider providerSingleBooleanArgument
-   *
-   * @param bool $cache
    */
   public function testSetCachedWithLogicException($cache) {
     $this->decoratedFormState->setCached($cache)
@@ -193,6 +183,8 @@ public function testSetExecuted() {
    * @dataProvider providerSingleBooleanArgument
    *
    * @param bool $executed
+   *   Any valid value for \Drupal\Core\Form\FormStateInterface::isExecuted()'s
+   *   return value.
    */
   public function testIsExecuted($executed) {
     $this->decoratedFormState->isExecuted()
@@ -240,8 +232,6 @@ public function testGetGroups() {
    * @covers ::setHasFileElement
    *
    * @dataProvider providerSingleBooleanArgument
-   *
-   * @param bool $has_file_element
    */
   public function testSetHasFileElement($has_file_element) {
     $this->decoratedFormState->setHasFileElement($has_file_element)
@@ -254,8 +244,6 @@ public function testSetHasFileElement($has_file_element) {
    * @covers ::hasFileElement
    *
    * @dataProvider providerSingleBooleanArgument
-   *
-   * @param bool $has_file_element
    */
   public function testHasFileElement($has_file_element) {
     $this->decoratedFormState->hasFileElement()
@@ -269,11 +257,6 @@ public function testHasFileElement($has_file_element) {
    * @covers ::setLimitValidationErrors
    *
    * @dataProvider providerLimitValidationErrors
-   *
-   * @param array[]|null $limit_validation_errors
-   *   Any valid value for
-   *   \Drupal\Core\Form\FormStateInterface::setLimitValidationErrors()'s
-   *   $limit_validation_errors argument;
    */
   public function testSetLimitValidationErrors($limit_validation_errors) {
     $this->decoratedFormState->setLimitValidationErrors($limit_validation_errors)
@@ -286,11 +269,6 @@ public function testSetLimitValidationErrors($limit_validation_errors) {
    * @covers ::getLimitValidationErrors
    *
    * @dataProvider providerLimitValidationErrors
-   *
-   * @param array[]|null $limit_validation_errors
-   *   Any valid value for
-   *   \Drupal\Core\Form\FormStateInterface::getLimitValidationErrors()'s
-   *   return value;
    */
   public function testGetLimitValidationErrors($limit_validation_errors) {
     $this->decoratedFormState->getLimitValidationErrors()
@@ -318,8 +296,6 @@ public function providerLimitValidationErrors() {
    * @covers ::setMethod
    *
    * @dataProvider providerSingleBooleanArgument
-   *
-   * @param bool $method
    */
   public function testSetMethod($method) {
     $this->decoratedFormState->setMethod($method)
@@ -332,10 +308,6 @@ public function testSetMethod($method) {
    * @covers ::isMethodType
    *
    * @dataProvider providerIsMethodType
-   *
-   * @param bool $expected_return_value
-   * @param string $method_type
-   *   Either "GET" or "POST".
    */
   public function testIsMethodType($expected_return_value, $method_type) {
     $this->decoratedFormState->isMethodType($method_type)
@@ -361,8 +333,6 @@ public function providerIsMethodType() {
    * @covers ::setRequestMethod
    *
    * @dataProvider providerSetRequestMethod
-   *
-   * @param bool $method
    */
   public function testSetRequestMethod($method) {
     $this->decoratedFormState->setRequestMethod($method)
@@ -385,8 +355,6 @@ public function providerSetRequestMethod() {
    * @covers ::setValidationEnforced
    *
    * @dataProvider providerSingleBooleanArgument
-   *
-   * @param bool $must_validate
    */
   public function testSetValidationEnforced($must_validate) {
     $this->decoratedFormState->setValidationEnforced($must_validate)
@@ -399,8 +367,6 @@ public function testSetValidationEnforced($must_validate) {
    * @covers ::isValidationEnforced
    *
    * @dataProvider providerSingleBooleanArgument
-   *
-   * @param bool $must_validate
    */
   public function testIsValidationEnforced($must_validate) {
     $this->decoratedFormState->isValidationEnforced()
@@ -414,8 +380,6 @@ public function testIsValidationEnforced($must_validate) {
    * @covers ::disableRedirect
    *
    * @dataProvider providerSingleBooleanArgument
-   *
-   * @param bool $no_redirect
    */
   public function testDisableRedirect($no_redirect) {
     $this->decoratedFormState->disableRedirect($no_redirect)
@@ -428,8 +392,6 @@ public function testDisableRedirect($no_redirect) {
    * @covers ::isRedirectDisabled
    *
    * @dataProvider providerSingleBooleanArgument
-   *
-   * @param bool $no_redirect
    */
   public function testIsRedirectDisabled($no_redirect) {
     $this->decoratedFormState->isRedirectDisabled()
@@ -443,8 +405,6 @@ public function testIsRedirectDisabled($no_redirect) {
    * @covers ::setProcessInput
    *
    * @dataProvider providerSingleBooleanArgument
-   *
-   * @param bool $process_input
    */
   public function testSetProcessInput($process_input) {
     $this->decoratedFormState->setProcessInput($process_input)
@@ -457,8 +417,6 @@ public function testSetProcessInput($process_input) {
    * @covers ::isProcessingInput
    *
    * @dataProvider providerSingleBooleanArgument
-   *
-   * @param bool $process_input
    */
   public function testIsProcessingInput($process_input) {
     $this->decoratedFormState->isProcessingInput()
@@ -472,8 +430,6 @@ public function testIsProcessingInput($process_input) {
    * @covers ::setProgrammed
    *
    * @dataProvider providerSingleBooleanArgument
-   *
-   * @param bool $programmed
    */
   public function testSetProgrammed($programmed) {
     $this->decoratedFormState->setProgrammed($programmed)
@@ -486,8 +442,6 @@ public function testSetProgrammed($programmed) {
    * @covers ::isProgrammed
    *
    * @dataProvider providerSingleBooleanArgument
-   *
-   * @param bool $programmed
    */
   public function testIsProgrammed($programmed) {
     $this->decoratedFormState->isProgrammed()
@@ -501,8 +455,6 @@ public function testIsProgrammed($programmed) {
    * @covers ::setProgrammedBypassAccessCheck
    *
    * @dataProvider providerSingleBooleanArgument
-   *
-   * @param bool $programmed_bypass_access_check
    */
   public function testSetProgrammedBypassAccessCheck($programmed_bypass_access_check) {
     $this->decoratedFormState->setProgrammedBypassAccessCheck($programmed_bypass_access_check)
@@ -515,8 +467,6 @@ public function testSetProgrammedBypassAccessCheck($programmed_bypass_access_che
    * @covers ::isBypassingProgrammedAccessChecks
    *
    * @dataProvider providerSingleBooleanArgument
-   *
-   * @param bool $programmed_bypass_access_check
    */
   public function testIsBypassingProgrammedAccessChecks($programmed_bypass_access_check) {
     $this->decoratedFormState->isBypassingProgrammedAccessChecks()
@@ -646,6 +596,9 @@ public function testSetSubmitted() {
    * @dataProvider providerSingleBooleanArgument
    *
    * @param bool $submitted
+   *   Any valid value for
+   *   \Drupal\Core\Form\FormStateInterface::isSubmitted()'s return
+   *   value.
    */
   public function testIsSubmitted($submitted) {
     $this->decoratedFormState->isSubmitted()
@@ -689,7 +642,13 @@ public function testGetTemporary() {
    * @dataProvider providerSetTemporaryValue
    *
    * @param string $key
+   *   Any valid value for
+   *   \Drupal\Core\Form\FormStateInterface::setTemporaryValue()'s $key
+   *   argument.
    * @param mixed $value
+   *   Any valid value for
+   *   \Drupal\Core\Form\FormStateInterface::setTemporaryValue()'s $value
+   *   argument.
    */
   public function testSetTemporaryValue($key, $value) {
     $this->decoratedFormState->setTemporaryValue($key, $value)
@@ -714,7 +673,13 @@ public function providerSetTemporaryValue() {
    * @dataProvider providerGetTemporaryValue
    *
    * @param string $key
+   *   Any valid value for
+   *   \Drupal\Core\Form\FormStateInterface::getTemporaryValue()'s $key
+   *   argument.
    * @param mixed $value
+   *   (optional) Any valid value for
+   *   \Drupal\Core\Form\FormStateInterface::getTemporaryValue()'s return
+   *   value.
    */
   public function testGetTemporaryValue($key, $value = NULL) {
     // Use PHPUnit for mocking, because Prophecy cannot mock methods that return
@@ -746,7 +711,13 @@ public function providerGetTemporaryValue() {
    * @dataProvider providerHasTemporaryValue
    *
    * @param bool $exists
+   *   Any valid value for
+   *   \Drupal\Core\Form\FormStateInterface::hasTemporaryValue()'s return
+   *   value.
    * @param string $key
+   *   Any valid value for
+   *   \Drupal\Core\Form\FormStateInterface::hasTemporaryValue()'s $key
+   *   argument.
    */
   public function testHasTemporaryValue($exists, $key) {
     $this->decoratedFormState->hasTemporaryValue($key)
@@ -835,6 +806,9 @@ public function testGetValidateHandlers() {
    * @dataProvider providerSingleBooleanArgument
    *
    * @param bool $complete
+   *   Any valid value for
+   *   \Drupal\Core\Form\FormStateInterface::setValidationComplete()'s $complete
+   *   argument.
    */
   public function testSetValidationComplete($complete) {
     $this->decoratedFormState->setValidationComplete($complete)
@@ -849,6 +823,9 @@ public function testSetValidationComplete($complete) {
    * @dataProvider providerSingleBooleanArgument
    *
    * @param bool $complete
+   *   Any valid value for
+   *   \Drupal\Core\Form\FormStateInterface::isValidationComplete()'s return
+   *   value.
    */
   public function testIsValidationComplete($complete) {
     $this->decoratedFormState->isValidationComplete()
@@ -864,9 +841,17 @@ public function testIsValidationComplete($complete) {
    * @dataProvider providerLoadInclude
    *
    * @param string|false $expected
+   *   Any valid value for \Drupal\Core\Form\FormStateInterface::loadInclude()'s
+   *   return value.
    * @param string $module
+   *   Any valid value for \Drupal\Core\Form\FormStateInterface::loadInclude()'s
+   *   $module argument.
    * @param string $type
+   *   Any valid value for \Drupal\Core\Form\FormStateInterface::loadInclude()'s
+   *   $type argument.
    * @param string|null $name
+   *   Any valid value for \Drupal\Core\Form\FormStateInterface::loadInclude()'s
+   *   $name argument.
    */
   public function testLoadInclude($expected, $module, $type, $name) {
     $this->decoratedFormState->loadInclude($module, $type, $name)
@@ -947,7 +932,11 @@ public function testGetCompleteForm() {
    * @dataProvider providerSet
    *
    * @param string $key
+   *   Any valid value for \Drupal\Core\Form\FormStateInterface::set()'s $key
+   *   argument.
    * @param mixed $value
+   *   Any valid value for \Drupal\Core\Form\FormStateInterface::set()'s $value
+   *   argument.
    */
   public function testSet($key, $value) {
     $this->decoratedFormState->set($key, $value)
@@ -972,7 +961,11 @@ public function providerSet() {
    * @dataProvider providerGet
    *
    * @param string $key
+   *   Any valid value for \Drupal\Core\Form\FormStateInterface::get()'s $key
+   *   argument.
    * @param mixed $value
+   *   (optional) Any valid value for
+   *   \Drupal\Core\Form\FormStateInterface::get()'s return value.
    */
   public function testGet($key, $value = NULL) {
 
@@ -1005,7 +998,11 @@ public function providerGet() {
    * @dataProvider providerHas
    *
    * @param bool $exists
+   *   Any valid value for \Drupal\Core\Form\FormStateInterface::has()'s return
+   *   value.
    * @param string $key
+   *   Any valid value for \Drupal\Core\Form\FormStateInterface::has()'s $key
+   *   argument.
    */
   public function testHas($exists, $key) {
     $this->decoratedFormState->has($key)
@@ -1285,6 +1282,8 @@ public function testSetRedirectUrl() {
    * @dataProvider providerGetRedirect
    *
    * @param bool $expected
+   *   Any valid value for \Drupal\Core\Form\FormStateInterface::getRedirect()'s
+   *   return value.
    */
   public function testGetRedirect($expected) {
     $this->decoratedFormState->getRedirect()
@@ -1380,6 +1379,8 @@ public function testGetErrors() {
    * @dataProvider providerSingleBooleanArgument
    *
    * @param bool $rebuild
+   *   Any valid value for \Drupal\Core\Form\FormStateInterface::setRebuild()'s
+   *   $rebuild argument.
    */
   public function testSetRebuild($rebuild) {
     $this->decoratedFormState->setRebuild($rebuild)
@@ -1392,8 +1393,6 @@ public function testSetRebuild($rebuild) {
    * @covers ::isRebuilding
    *
    * @dataProvider providerSingleBooleanArgument
-   *
-   * @param bool $rebuild
    */
   public function testIsRebuilding($rebuild) {
     $this->decoratedFormState->isRebuilding()
@@ -1407,8 +1406,6 @@ public function testIsRebuilding($rebuild) {
    * @covers ::setInvalidToken
    *
    * @dataProvider providerSingleBooleanArgument
-   *
-   * @param bool $expected
    */
   public function testSetInvalidToken($expected) {
     $this->decoratedFormState->setInvalidToken($expected)
@@ -1421,8 +1418,6 @@ public function testSetInvalidToken($expected) {
    * @covers ::hasInvalidToken
    *
    * @dataProvider providerSingleBooleanArgument
-   *
-   * @param bool $expected
    */
   public function testHasInvalidToken($expected) {
     $this->decoratedFormState->hasInvalidToken()
@@ -1436,9 +1431,6 @@ public function testHasInvalidToken($expected) {
    * @covers ::prepareCallback
    *
    * @dataProvider providerPrepareCallback
-   *
-   * @param string|callable $unprepared_callback
-   * @param callable $prepared_callback
    */
   public function testPrepareCallback($unprepared_callback, callable $prepared_callback) {
     $this->decoratedFormState->prepareCallback(Argument::is($unprepared_callback))
diff --git a/core/tests/Drupal/Tests/Core/Form/SubformStateTest.php b/core/tests/Drupal/Tests/Core/Form/SubformStateTest.php
index 7bb7d86d808d..6d5318402d92 100644
--- a/core/tests/Drupal/Tests/Core/Form/SubformStateTest.php
+++ b/core/tests/Drupal/Tests/Core/Form/SubformStateTest.php
@@ -61,7 +61,9 @@ class SubformStateTest extends UnitTestCase {
    * @dataProvider providerGetValues
    *
    * @param string[] $parents
+   *   The parents.
    * @param string $expected
+   *   The expected state values.
    */
   public function testGetValues(array $parents, $expected) {
     $parent_form_state = new FormState();
@@ -98,7 +100,9 @@ public function providerGetValues() {
    * @dataProvider providerGetValuesBroken
    *
    * @param string[] $parents
+   *   The parents.
    * @param string $expected
+   *   The expected state values.
    */
   public function testGetValuesBroken(array $parents, $expected) {
     $this->expectException(\UnexpectedValueException::class);
diff --git a/core/tests/Drupal/Tests/Core/Http/ClientFactoryTest.php b/core/tests/Drupal/Tests/Core/Http/ClientFactoryTest.php
index 3203ba27632c..4e98232d9426 100644
--- a/core/tests/Drupal/Tests/Core/Http/ClientFactoryTest.php
+++ b/core/tests/Drupal/Tests/Core/Http/ClientFactoryTest.php
@@ -34,8 +34,11 @@ protected function setUp(): void {
    * @dataProvider providerTestCreateFromOptions
    *
    * @param array $settings_config
+   *   The settings configuration.
    * @param array $parameter_config
+   *   The parameter configuration.
    * @param array $expected_config_keys
+   *   The expected config keys.
    */
   public function testCreateFromOptions($settings_config, $parameter_config, $expected_config_keys) {
     if ($settings_config) {
diff --git a/core/tests/Drupal/Tests/Core/Plugin/DefaultPluginManagerTest.php b/core/tests/Drupal/Tests/Core/Plugin/DefaultPluginManagerTest.php
index 6504157720b4..33881211195f 100644
--- a/core/tests/Drupal/Tests/Core/Plugin/DefaultPluginManagerTest.php
+++ b/core/tests/Drupal/Tests/Core/Plugin/DefaultPluginManagerTest.php
@@ -509,6 +509,7 @@ class ObjectDefinition extends PluginDefinition {
    * ObjectDefinition constructor.
    *
    * @param array $definition
+   *   An associative array defining the plugin.
    */
   public function __construct(array $definition) {
     // This class does not exist but plugin definitions must provide a class.
diff --git a/core/tests/Drupal/Tests/Core/Plugin/Discovery/TestDerivativeDiscoveryWithObject.php b/core/tests/Drupal/Tests/Core/Plugin/Discovery/TestDerivativeDiscoveryWithObject.php
index 1bb64cc5cc24..f05142de62de 100644
--- a/core/tests/Drupal/Tests/Core/Plugin/Discovery/TestDerivativeDiscoveryWithObject.php
+++ b/core/tests/Drupal/Tests/Core/Plugin/Discovery/TestDerivativeDiscoveryWithObject.php
@@ -12,7 +12,9 @@ class TestDerivativeDiscoveryWithObject implements DeriverInterface {
   /**
    * {@inheritdoc}
    * @param string $derivative_id
+   *   The ID for the derivative.
    * @param array $base_plugin_definition
+   *   An associative array defining the base plugin.
    *
    * @return array
    */
@@ -24,6 +26,7 @@ public function getDerivativeDefinition($derivative_id, $base_plugin_definition)
   /**
    * {@inheritdoc}
    * @param array $base_plugin_definition
+   *   An associative array defining the base plugin.
    *
    * @return array
    */
diff --git a/core/tests/Drupal/Tests/Core/Render/RendererPlaceholdersTest.php b/core/tests/Drupal/Tests/Core/Render/RendererPlaceholdersTest.php
index d13b41614008..a6626959fa5e 100644
--- a/core/tests/Drupal/Tests/Core/Render/RendererPlaceholdersTest.php
+++ b/core/tests/Drupal/Tests/Core/Render/RendererPlaceholdersTest.php
@@ -548,6 +548,7 @@ protected function generatePlaceholderElement() {
 
   /**
    * @param false|array $cid_parts
+   *   The cid parts.
    * @param string[] $bubbled_cache_contexts
    *   Additional cache contexts that were bubbled when the placeholder was
    *   rendered.
diff --git a/core/tests/Drupal/Tests/Core/TypedData/RecursiveContextualValidatorTest.php b/core/tests/Drupal/Tests/Core/TypedData/RecursiveContextualValidatorTest.php
index 7153be5a57e0..53aea79e045e 100644
--- a/core/tests/Drupal/Tests/Core/TypedData/RecursiveContextualValidatorTest.php
+++ b/core/tests/Drupal/Tests/Core/TypedData/RecursiveContextualValidatorTest.php
@@ -189,6 +189,7 @@ public function testPropertiesValidateWithMultipleLevels() {
    * @param array $tree
    *   An array of value, constraints and properties.
    * @param string $name
+   *   The name to use for the object.
    *
    * @return \Drupal\Core\TypedData\TypedDataInterface|\PHPUnit\Framework\MockObject\MockObject
    */
diff --git a/core/tests/Drupal/Tests/Core/UrlTest.php b/core/tests/Drupal/Tests/Core/UrlTest.php
index fcdabf14c953..45fbd0f33ede 100644
--- a/core/tests/Drupal/Tests/Core/UrlTest.php
+++ b/core/tests/Drupal/Tests/Core/UrlTest.php
@@ -491,6 +491,7 @@ public function testMergeOptions() {
    * Tests the access() method for routed URLs.
    *
    * @param bool $access
+   *   The access value.
    *
    * @covers ::access
    * @covers ::accessManager
@@ -522,6 +523,7 @@ public function testAccessUnrouted() {
    * Tests the renderAccess() method.
    *
    * @param bool $access
+   *   The access value.
    *
    * @covers ::renderAccess
    * @dataProvider accessProvider
@@ -832,7 +834,9 @@ public function testFromRouteUriWithMissingRouteName() {
    * Creates a mock access manager for the access tests.
    *
    * @param bool $access
+   *   The access value.
    * @param \Drupal\Core\Session\AccountInterface|null $account
+   *   The account to test.
    *
    * @return \Drupal\Core\Access\AccessManagerInterface|\PHPUnit\Framework\MockObject\MockObject
    */
@@ -863,6 +867,7 @@ class TestUrl extends Url {
    * Sets the access manager.
    *
    * @param \Drupal\Core\Access\AccessManagerInterface $access_manager
+   *   The access manager.
    */
   public function setAccessManager(AccessManagerInterface $access_manager) {
     $this->accessManager = $access_manager;
diff --git a/core/tests/Drupal/Tests/DocumentElement.php b/core/tests/Drupal/Tests/DocumentElement.php
index 27c4283a24d5..d7b1617f254f 100644
--- a/core/tests/Drupal/Tests/DocumentElement.php
+++ b/core/tests/Drupal/Tests/DocumentElement.php
@@ -1,5 +1,9 @@
 <?php
 
+// phpcs:ignoreFile Portions of this file are a direct copy of
+// \Behat\Mink\Element\DocumentElement which uses a different code style than
+// Drupal.
+
 namespace Drupal\Tests;
 
 use Behat\Mink\Driver\BrowserKitDriver;
diff --git a/core/tests/Drupal/Tests/UnitTestCase.php b/core/tests/Drupal/Tests/UnitTestCase.php
index b06ae8dd2b06..fed556fe3d1e 100644
--- a/core/tests/Drupal/Tests/UnitTestCase.php
+++ b/core/tests/Drupal/Tests/UnitTestCase.php
@@ -101,8 +101,11 @@ protected function getRandomGenerator() {
    * Asserts if two arrays are equal by sorting them first.
    *
    * @param array $expected
+   *   An expected results array.
    * @param array $actual
+   *   The actual array value.
    * @param string $message
+   *   An optional error message.
    *
    * @deprecated in drupal:9.1.0 and is removed from drupal:10.0.0. Use
    *   ::assertEquals, ::assertEqualsCanonicalizing, or ::assertSame instead.
-- 
GitLab


From 179990225f38be74f46230b2ea031fe526d5f8fc Mon Sep 17 00:00:00 2001
From: Alex Pott <alex.a.pott@googlemail.com>
Date: Fri, 19 Nov 2021 09:59:33 +0000
Subject: [PATCH 47/69] Issue #3221082 by Wim Leers, lauriii, bnjmnm: Build
 Drupal's CKEditor 5 plugins as part of core's `yarn build`

(cherry picked from commit 046c1863e35f29f803186cb29bd9f848945eecca)
---
 core/package.json | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/core/package.json b/core/package.json
index 1d132c75e27e..39bc19f1b0c3 100644
--- a/core/package.json
+++ b/core/package.json
@@ -8,8 +8,8 @@
     "node": ">= 12.0"
   },
   "scripts": {
-    "build": "yarn build:css & yarn build:js & yarn build:jqueryui",
-    "watch": "yarn watch:css & yarn watch:js",
+    "build": "yarn build:css & yarn build:js & yarn build:jqueryui & yarn build:ckeditor5",
+    "watch": "yarn watch:css & yarn watch:js & yarn watch:ckeditor5",
     "build:css": "node ./scripts/css/postcss-build.js",
     "watch:css": "node ./scripts/css/postcss-watch.js",
     "build:js": "cross-env BABEL_ENV=legacy node ./scripts/js/babel-es6-build.js",
@@ -29,8 +29,8 @@
     "spellcheck:make-drupal-dict": "rm -f misc/cspell/dictionary.txt && touch misc/cspell/dictionary.txt && yarn -s spellcheck:core --unique --wordsOnly | tr '[:upper:]' '[:lower:]' | tr -d \\\\\\\\ | LC_ALL=C sort -u -o misc/cspell/dictionary.txt",
     "spellcheck:core": "cspell \"**/*\" \".*\" \"../composer/**/*\" \"../composer.json\"",
     "vendor-update": "node ./scripts/js/assets.js",
-    "ckeditor5:watch": "webpack --mode development --config ./modules/ckeditor5/webpack.config.js --watch",
-    "ckeditor5:build": "webpack --config ./modules/ckeditor5/webpack.config.js"
+    "watch:ckeditor5": "webpack --mode development --config ./modules/ckeditor5/webpack.config.js --watch",
+    "build:ckeditor5": "webpack --config ./modules/ckeditor5/webpack.config.js"
   },
   "devDependencies": {
     "@babel/core": "^7.0.0",
-- 
GitLab


From 3f5645f319bcabab050cd6635cd9793c4bdf1f30 Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Fri, 19 Nov 2021 17:33:09 +0000
Subject: [PATCH 48/69] Issue #3250335 by alexpott, beatrizrodrigues, paulocs,
 longwave: #date_date_callbacks is broken in Drupal 9.3

(cherry picked from commit 1a8a51aca00ea949c7dc3196adbfc565396c0440)
---
 .../Drupal/Core/Datetime/Element/Datetime.php |  4 +-
 .../Core/Datetime/DatetimeElementFormTest.php | 56 ++++++++++---------
 2 files changed, 31 insertions(+), 29 deletions(-)

diff --git a/core/lib/Drupal/Core/Datetime/Element/Datetime.php b/core/lib/Drupal/Core/Datetime/Element/Datetime.php
index 11c5f2a69f60..845fe259b45e 100644
--- a/core/lib/Drupal/Core/Datetime/Element/Datetime.php
+++ b/core/lib/Drupal/Core/Datetime/Element/Datetime.php
@@ -274,7 +274,7 @@ public static function processDatetime(&$element, FormStateInterface $form_state
       if (!empty($element['#date_date_callbacks'])) {
         foreach ($element['#date_date_callbacks'] as $callback) {
           $message = sprintf('DateTime element #date_date_callbacks callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. Support for this callback implementation is deprecated in drupal:9.3.0 and will be removed in drupal:10.0.0. See https://www.drupal.org/node/3217966', Variable::callableToString($callback));
-          StaticTrustedCallbackHelper::callback($callback, [$element, $form_state, $date], $message, TrustedCallbackInterface::TRIGGER_SILENCED_DEPRECATION);
+          StaticTrustedCallbackHelper::callback($callback, [&$element, $form_state, $date], $message, TrustedCallbackInterface::TRIGGER_SILENCED_DEPRECATION);
         }
       }
     }
@@ -305,7 +305,7 @@ public static function processDatetime(&$element, FormStateInterface $form_state
       if (!empty($element['#date_time_callbacks'])) {
         foreach ($element['#date_time_callbacks'] as $callback) {
           $message = sprintf('DateTime element #date_time_callbacks callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. Support for this callback implementation is deprecated in drupal:9.3.0 and will be removed in drupal:10.0.0. See https://www.drupal.org/node/3217966', Variable::callableToString($callback));
-          StaticTrustedCallbackHelper::callback($callback, [$element, $form_state, $date], $message, TrustedCallbackInterface::TRIGGER_SILENCED_DEPRECATION);
+          StaticTrustedCallbackHelper::callback($callback, [&$element, $form_state, $date], $message, TrustedCallbackInterface::TRIGGER_SILENCED_DEPRECATION);
         }
       }
     }
diff --git a/core/tests/Drupal/KernelTests/Core/Datetime/DatetimeElementFormTest.php b/core/tests/Drupal/KernelTests/Core/Datetime/DatetimeElementFormTest.php
index 5fc87a4d9193..524c57570158 100644
--- a/core/tests/Drupal/KernelTests/Core/Datetime/DatetimeElementFormTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Datetime/DatetimeElementFormTest.php
@@ -5,6 +5,7 @@
 use Drupal\Component\Utility\Variable;
 use Drupal\Core\Datetime\DrupalDateTime;
 use Drupal\Core\Form\FormInterface;
+use Drupal\Core\Form\FormState;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Security\TrustedCallbackInterface;
 use Drupal\KernelTests\KernelTestBase;
@@ -16,20 +17,6 @@
  */
 class DatetimeElementFormTest extends KernelTestBase implements FormInterface, TrustedCallbackInterface {
 
-  /**
-   * Tracks whether a date-time date callback was executed.
-   *
-   * @var bool
-   */
-  protected $dateCallbackExecuted = FALSE;
-
-  /**
-   * Tracks whether a date-time time callback was executed.
-   *
-   * @var bool
-   */
-  protected $timeCallbackExecuted = FALSE;
-
   /**
    * Modules to enable.
    *
@@ -54,29 +41,41 @@ public function getFormId() {
   /**
    * {@inheritdoc}
    */
-  public function datetimeDateCallbackTrusted() {
-    $this->dateCallbackExecuted = TRUE;
+  public function datetimeDateCallbackTrusted(array &$element, FormStateInterface $form_state, DrupalDateTime $date = NULL) {
+    $element['datetimeDateCallbackExecuted'] = [
+      '#value' => TRUE,
+    ];
+    $form_state->set('datetimeDateCallbackExecuted', TRUE);
   }
 
   /**
    * {@inheritdoc}
    */
-  public function datetimeDateCallback() {
-    $this->dateCallbackExecuted = TRUE;
+  public function datetimeDateCallback(array &$element, FormStateInterface $form_state, DrupalDateTime $date = NULL) {
+    $element['datetimeDateCallbackExecuted'] = [
+      '#value' => TRUE,
+    ];
+    $form_state->set('datetimeDateCallbackExecuted', TRUE);
   }
 
   /**
    * {@inheritdoc}
    */
-  public function datetimeTimeCallbackTrusted() {
-    $this->timeCallbackExecuted = TRUE;
+  public function datetimeTimeCallbackTrusted(array &$element, FormStateInterface $form_state, DrupalDateTime $date = NULL) {
+    $element['timeCallbackExecuted'] = [
+      '#value' => TRUE,
+    ];
+    $form_state->set('timeCallbackExecuted', TRUE);
   }
 
   /**
    * {@inheritdoc}
    */
-  public function datetimeTimeCallback() {
-    $this->timeCallbackExecuted = TRUE;
+  public function datetimeTimeCallback(array &$element, FormStateInterface $form_state, DrupalDateTime $date = NULL) {
+    $element['timeCallbackExecuted'] = [
+      '#value' => TRUE,
+    ];
+    $form_state->set('timeCallbackExecuted', TRUE);
   }
 
   /**
@@ -133,11 +132,14 @@ public function validateForm(array &$form, FormStateInterface $form_state) {}
    * Tests that default handlers are added even if custom are specified.
    */
   public function testDatetimeElement() {
-    $form = \Drupal::formBuilder()->getForm($this);
+    $form_state = new FormState();
+    $form = \Drupal::formBuilder()->buildForm($this, $form_state);
     $this->render($form);
 
-    $this->assertTrue($this->dateCallbackExecuted);
-    $this->assertTrue($this->timeCallbackExecuted);
+    $this->assertTrue($form['datetime_element']['datetimeDateCallbackExecuted']['#value']);
+    $this->assertTrue($form['datetime_element']['timeCallbackExecuted']['#value']);
+    $this->assertTrue($form_state->get('datetimeDateCallbackExecuted'));
+    $this->assertTrue($form_state->get('timeCallbackExecuted'));
   }
 
   /**
@@ -161,8 +163,8 @@ public function testDatetimeElementUntrustedCallbacks(string $date_callback = 'd
     }
     $this->render($form);
 
-    $this->assertTrue($this->dateCallbackExecuted);
-    $this->assertTrue($this->timeCallbackExecuted);
+    $this->assertTrue($form['datetime_element']['datetimeDateCallbackExecuted']['#value']);
+    $this->assertTrue($form['datetime_element']['timeCallbackExecuted']['#value']);
   }
 
   /**
-- 
GitLab


From 5cc55e82f1887db0c588f8aadf92c17e5441eaa8 Mon Sep 17 00:00:00 2001
From: Lee Rowlands <lee.rowlands@previousnext.com.au>
Date: Mon, 22 Nov 2021 09:01:31 +1000
Subject: [PATCH 49/69] Issue #3250349 by alexpott:
 \Drupal\Core\Datetime\Element\Datelist::processDatelist() does not use
 trusted callbacks - #date_date_callbacks only partially converted to
 TrustedCallbackInterface in 9.3.x

(cherry picked from commit bb48626815ebe0b99c91c8db5c6c3e1dcfbac5c2)
---
 .../Drupal/Core/Datetime/Element/Datelist.php |  11 +-
 .../Core/Datetime/DatelistElementFormTest.php | 140 ++++++++++++++++++
 2 files changed, 148 insertions(+), 3 deletions(-)
 create mode 100644 core/tests/Drupal/KernelTests/Core/Datetime/DatelistElementFormTest.php

diff --git a/core/lib/Drupal/Core/Datetime/Element/Datelist.php b/core/lib/Drupal/Core/Datetime/Element/Datelist.php
index add7a73ae153..610c2d48dfe2 100644
--- a/core/lib/Drupal/Core/Datetime/Element/Datelist.php
+++ b/core/lib/Drupal/Core/Datetime/Element/Datelist.php
@@ -3,9 +3,13 @@
 namespace Drupal\Core\Datetime\Element;
 
 use Drupal\Component\Utility\NestedArray;
+use Drupal\Component\Utility\Variable;
 use Drupal\Core\Datetime\DateHelper;
 use Drupal\Core\Datetime\DrupalDateTime;
 use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Security\DoTrustedCallbackTrait;
+use Drupal\Core\Security\StaticTrustedCallbackHelper;
+use Drupal\Core\Security\TrustedCallbackInterface;
 
 /**
  * Provides a datelist element.
@@ -14,6 +18,8 @@
  */
 class Datelist extends DateElementBase {
 
+  use DoTrustedCallbackTrait;
+
   /**
    * {@inheritdoc}
    */
@@ -261,9 +267,8 @@ public static function processDatelist(&$element, FormStateInterface $form_state
     // Allows custom callbacks to alter the element.
     if (!empty($element['#date_date_callbacks'])) {
       foreach ($element['#date_date_callbacks'] as $callback) {
-        if (function_exists($callback)) {
-          $callback($element, $form_state, $date);
-        }
+        $message = sprintf('Datelist element #date_date_callbacks callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. Support for this callback implementation is deprecated in drupal:9.3.0 and will be removed in drupal:10.0.0. See https://www.drupal.org/node/3217966', Variable::callableToString($callback));
+        StaticTrustedCallbackHelper::callback($callback, [&$element, $form_state, $date], $message, TrustedCallbackInterface::TRIGGER_SILENCED_DEPRECATION);
       }
     }
 
diff --git a/core/tests/Drupal/KernelTests/Core/Datetime/DatelistElementFormTest.php b/core/tests/Drupal/KernelTests/Core/Datetime/DatelistElementFormTest.php
new file mode 100644
index 000000000000..2b8eaa561f43
--- /dev/null
+++ b/core/tests/Drupal/KernelTests/Core/Datetime/DatelistElementFormTest.php
@@ -0,0 +1,140 @@
+<?php
+
+namespace Drupal\KernelTests\Core\Datetime;
+
+use Drupal\Component\Utility\Variable;
+use Drupal\Core\Datetime\DrupalDateTime;
+use Drupal\Core\Form\FormInterface;
+use Drupal\Core\Form\FormState;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Security\TrustedCallbackInterface;
+use Drupal\KernelTests\KernelTestBase;
+
+/**
+ * Tests Datelist functionality.
+ *
+ * @group Form
+ */
+class DatelistElementFormTest extends KernelTestBase implements FormInterface, TrustedCallbackInterface {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  protected static $modules = ['datetime', 'system'];
+
+  /**
+   * Sets up the test.
+   */
+  protected function setUp(): void {
+    parent::setUp();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFormId() {
+    return 'test_datelist_element';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function datelistDateCallbackTrusted(array &$element, FormStateInterface $form_state, DrupalDateTime $date = NULL) {
+    $element['datelistDateCallbackExecuted'] = [
+      '#value' => TRUE,
+    ];
+    $form_state->set('datelistDateCallbackExecuted', TRUE);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function datelistDateCallback(array &$element, FormStateInterface $form_state, DrupalDateTime $date = NULL) {
+    $element['datelistDateCallbackExecuted'] = [
+      '#value' => TRUE,
+    ];
+    $form_state->set('datelistDateCallbackExecuted', TRUE);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildForm(array $form, FormStateInterface $form_state, string $date_callback = 'datelistDateCallbackTrusted') {
+
+    $form['datelist_element'] = [
+      '#title' => 'datelist test',
+      '#type' => 'datelist',
+      '#default_value' => new DrupalDateTime('2000-01-01 00:00:00'),
+      '#date_part_order' => [
+        'month',
+        'day',
+        'year',
+        'hour',
+        'minute', 'ampm',
+      ],
+      '#date_text_parts' => ['year'],
+      '#date_year_range' => '2010:2020',
+      '#date_increment' => 15,
+      '#date_date_callbacks' => [[$this, $date_callback]],
+    ];
+
+    $form['submit'] = [
+      '#type' => 'submit',
+      '#value' => t('Submit'),
+    ];
+
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitForm(array &$form, FormStateInterface $form_state) {}
+
+  /**
+   * Form validation handler.
+   *
+   * @param array $form
+   *   An associative array containing the structure of the form.
+   * @param \Drupal\Core\Form\FormStateInterface $form_state
+   *   The current state of the form.
+   */
+  public function validateForm(array &$form, FormStateInterface $form_state) {}
+
+  /**
+   * Tests that trusted callbacks are executed.
+   */
+  public function testDatelistElement() {
+    $form_state = new FormState();
+    $form = \Drupal::formBuilder()->buildForm($this, $form_state);
+    $this->render($form);
+
+    $this->assertTrue($form['datelist_element']['datelistDateCallbackExecuted']['#value']);
+    $this->assertTrue($form_state->get('datelistDateCallbackExecuted'));
+  }
+
+  /**
+   * Tests that deprecations are raised if untrusted callbacks are used.
+   *
+   * @group legacy
+   */
+  public function testDatelistElementUntrustedCallbacks() : void {
+    $form = \Drupal::formBuilder()->getForm($this, 'datelistDateCallback');
+    $this->expectDeprecation(sprintf('Datelist element #date_date_callbacks callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. Support for this callback implementation is deprecated in drupal:9.3.0 and will be removed in drupal:10.0.0. See https://www.drupal.org/node/3217966', Variable::callableToString([$this, 'datelistDateCallback'])));
+    $this->render($form);
+
+    $this->assertTrue($form['datelist_element']['datelistDateCallbackExecuted']['#value']);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function trustedCallbacks() {
+    return [
+      'datelistDateCallbackTrusted',
+    ];
+  }
+
+}
-- 
GitLab


From afc5a87e79ce7c5ba790bb1b8684d4788d11b05c Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Mon, 22 Nov 2021 10:07:08 +0000
Subject: [PATCH 50/69] Issue #3231040 by alexpott, Anul, longwave, bbrala,
 catch: (revert) Remove DependencySerializationTrait from JSON API exceptions

(cherry picked from commit 4aa86df958fd38f4c76f6b3d2dea2640d310b852)
---
 .../jsonapi/src/Exception/EntityAccessDeniedHttpException.php  | 2 ++
 .../jsonapi/src/Exception/UnprocessableHttpEntityException.php | 3 +++
 2 files changed, 5 insertions(+)

diff --git a/core/modules/jsonapi/src/Exception/EntityAccessDeniedHttpException.php b/core/modules/jsonapi/src/Exception/EntityAccessDeniedHttpException.php
index c227709900c1..74ab245e5114 100644
--- a/core/modules/jsonapi/src/Exception/EntityAccessDeniedHttpException.php
+++ b/core/modules/jsonapi/src/Exception/EntityAccessDeniedHttpException.php
@@ -5,6 +5,7 @@
 use Drupal\Core\Access\AccessResultInterface;
 use Drupal\Core\Access\AccessResultReasonInterface;
 use Drupal\Core\Cache\CacheableMetadata;
+use Drupal\Core\DependencyInjection\DependencySerializationTrait;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Http\Exception\CacheableAccessDeniedHttpException;
 use Drupal\jsonapi\JsonApiResource\ResourceIdentifier;
@@ -22,6 +23,7 @@
  */
 class EntityAccessDeniedHttpException extends CacheableAccessDeniedHttpException implements ResourceIdentifierInterface {
 
+  use DependencySerializationTrait;
   use ResourceIdentifierTrait;
 
   /**
diff --git a/core/modules/jsonapi/src/Exception/UnprocessableHttpEntityException.php b/core/modules/jsonapi/src/Exception/UnprocessableHttpEntityException.php
index eae202c553f1..b9d5a6f58389 100644
--- a/core/modules/jsonapi/src/Exception/UnprocessableHttpEntityException.php
+++ b/core/modules/jsonapi/src/Exception/UnprocessableHttpEntityException.php
@@ -3,6 +3,7 @@
 namespace Drupal\jsonapi\Exception;
 
 use Drupal\Core\Entity\EntityConstraintViolationListInterface;
+use Drupal\Core\DependencyInjection\DependencySerializationTrait;
 use Symfony\Component\HttpKernel\Exception\HttpException;
 
 /**
@@ -22,6 +23,8 @@
  */
 class UnprocessableHttpEntityException extends HttpException {
 
+  use DependencySerializationTrait;
+
   /**
    * The constraint violations associated with this exception.
    *
-- 
GitLab


From 2eec3dc4cb417e97df1b196845ec0ae11ac12da0 Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Mon, 22 Nov 2021 11:41:37 +0000
Subject: [PATCH 51/69] Issue #3171570 by kostyashupenko, mherchel: Remove
 Olivero's custom hard-coding of the image style within article content type's
 full view mode

(cherry picked from commit afdff8f981dccbde545fb5b12d58f11386789c4d)
---
 core/themes/olivero/olivero.theme | 14 --------------
 1 file changed, 14 deletions(-)

diff --git a/core/themes/olivero/olivero.theme b/core/themes/olivero/olivero.theme
index dafb21e4217b..2032f818892e 100644
--- a/core/themes/olivero/olivero.theme
+++ b/core/themes/olivero/olivero.theme
@@ -487,20 +487,6 @@ function olivero_preprocess_field__node__created(&$variables) {
   }
 }
 
-/**
- * Implements hook_preprocess_HOOK().
- */
-function olivero_preprocess_field__node__field_image__article(&$variables) {
-  if ($variables['element']['#view_mode'] == 'full') {
-    $image_style = \Drupal::entityTypeManager()->getStorage('image_style')->load('wide');
-    if ($image_style) {
-      foreach (Element::children($variables['items']) as $key) {
-        $variables['items'][$key]['content']['#image_style'] = 'wide';
-      }
-    }
-  }
-}
-
 /**
  * Implements hook_preprocess_HOOK() for setting classes.
  */
-- 
GitLab


From 37a54000b8cbf6c6df37ada0ee1d6beacc8d4544 Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Mon, 22 Nov 2021 15:25:32 +0000
Subject: [PATCH 52/69] Issue #3138078 by mondrake, larowlan, longwave, xjm:
 [D9.3 beta - w/c Nov 8, 2021] Add a 'void' return typehint to custom assert*
 methods

(cherry picked from commit 92836c436bf7d866c15bdcada064ab201d4b2d07)
---
 .../Kernel/Migrate/d6/MigrateActionsTest.php  |  4 +-
 .../Kernel/Migrate/d7/MigrateActionsTest.php  |  4 +-
 .../tests/src/Functional/BigPipeTest.php      | 38 ++++++++++----
 .../tests/src/Kernel/BlockViewBuilderTest.php |  4 +-
 .../Kernel/Migrate/d6/MigrateBlockTest.php    |  6 ++-
 .../Kernel/Migrate/d7/MigrateBlockTest.php    |  6 ++-
 .../Views/BlockContentFieldFilterTest.php     |  4 +-
 .../Views/BlockContentIntegrationTest.php     |  4 +-
 .../MigrateBlockContentEntityDisplayTest.php  |  4 +-
 ...grateBlockContentEntityFormDisplayTest.php |  4 +-
 .../BookJavascriptTest.php                    |  4 +-
 .../tests/src/Kernel/BookMultilingualTest.php |  8 ++-
 .../tests/src/Kernel/CKEditorTest.php         |  4 +-
 .../src/FunctionalJavascript/MediaTest.php    |  6 ++-
 .../tests/src/Functional/CommentPagerTest.php |  4 +-
 .../src/Functional/CommentThreadingTest.php   |  8 ++-
 .../Views/CommentFieldFilterTest.php          |  4 +-
 .../src/Kernel/CommentValidationTest.php      |  4 +-
 .../d6/MigrateCommentEntityDisplayTest.php    |  4 +-
 ...ateCommentEntityFormDisplaySubjectTest.php |  8 ++-
 .../MigrateCommentEntityFormDisplayTest.php   |  4 +-
 .../d6/MigrateCommentFieldInstanceTest.php    | 10 ++--
 .../Migrate/d6/MigrateCommentFieldTest.php    |  4 +-
 .../Migrate/d6/MigrateCommentTypeTest.php     |  4 +-
 .../d7/MigrateCommentEntityDisplayTest.php    |  4 +-
 ...ateCommentEntityFormDisplaySubjectTest.php |  8 ++-
 .../MigrateCommentEntityFormDisplayTest.php   |  4 +-
 .../d7/MigrateCommentFieldInstanceTest.php    | 10 ++--
 .../Migrate/d7/MigrateCommentFieldTest.php    |  4 +-
 .../Migrate/d7/MigrateCommentTypeTest.php     |  4 +-
 .../Functional/ConfigTranslationUiTest.php    |  5 +-
 .../src/Functional/Views/ContactLinkTest.php  |  4 +-
 .../Migrate/MigrateContactCategoryTest.php    |  4 +-
 .../src/Functional/ModerationLocaleTest.php   | 16 ++++--
 .../ViewsModerationStateFilterTest.php        |  8 ++-
 ...ontentModerationStateStorageSchemaTest.php |  4 +-
 .../src/Kernel/ContentModerationStateTest.php |  4 +-
 .../src/Kernel/DefaultRevisionStateTest.php   |  4 +-
 .../ModerationStateFieldItemListTest.php      |  4 +-
 .../Kernel/ViewsModerationStateFilterTest.php |  8 ++-
 .../Kernel/ViewsModerationStateSortTest.php   |  4 +-
 .../WorkspacesContentModerationStateTest.php  |  2 +-
 ...slationOutdatedRevisionTranslationTest.php |  4 +-
 .../ContentTranslationSettingsTest.php        |  6 ++-
 .../ContentTranslationWorkflowsTest.php       |  6 ++-
 ...ontentTranslationFieldSyncRevisionTest.php |  8 ++-
 .../d6/MigrateTaxonomyTermTranslationTest.php | 24 +++++----
 .../ContextualDynamicContextTest.php          |  8 ++-
 .../src/FunctionalJavascript/EditModeTest.php |  8 ++-
 .../EntityTest/EntityTestDateonlyTest.php     |  2 +-
 .../EntityTest/EntityTestDatetimeTest.php     |  2 +-
 .../EntityTest/EntityTestDateRangeTest.php    |  2 +-
 .../src/Functional/DbLogResourceTest.php      |  2 +-
 .../dblog/tests/src/Functional/DbLogTest.php  |  4 +-
 .../Functional/EditorUploadImageScaleTest.php |  8 +--
 .../EntityReferenceAdminTest.php              |  4 +-
 ...erenceFieldTranslatedReferenceViewTest.php |  8 ++-
 .../EntityReferenceIntegrationTest.php        |  4 +-
 .../src/Functional/Number/NumberFieldTest.php |  5 +-
 .../EntityReferenceAdminTest.php              |  4 +-
 .../EntityReference/Views/SelectionTest.php   |  4 +-
 .../d6/MigrateFieldFormatterSettingsTest.php  |  4 +-
 .../d7/MigrateFieldFormatterSettingsTest.php  | 12 +++--
 .../Migrate/d7/MigrateFieldInstanceTest.php   | 16 ++++--
 ...MigrateFieldInstanceWidgetSettingsTest.php | 10 ++--
 .../Kernel/Migrate/d7/MigrateFieldTest.php    |  4 +-
 .../Migrate/d7/MigrateViewModesTest.php       |  4 +-
 ...dStorageConfigAccessControlHandlerTest.php |  4 +-
 .../FunctionalJavascript/FieldLayoutTest.php  |  4 +-
 .../Kernel/FieldLayoutEntityDisplayTest.php   |  6 ++-
 .../tests/src/Functional/FieldUIRouteTest.php |  4 +-
 .../src/Functional/ManageDisplayTest.php      | 42 ++++++++--------
 .../Functional/ManageFieldsFunctionalTest.php | 12 +++--
 .../ManageDisplayTest.php                     |  7 ++-
 .../tests/src/Kernel/EntityDisplayTest.php    | 20 +++-----
 .../src/Functional/FileFieldPathTest.php      |  4 +-
 .../src/Kernel/Migrate/d6/MigrateFileTest.php | 16 +++---
 .../tests/src/Functional/FilterFormTest.php   | 24 ++++-----
 .../filter/tests/src/Kernel/FilterAPITest.php |  6 ++-
 .../tests/src/Kernel/FilterKernelTest.php     | 15 ++++--
 .../Migrate/d7/MigrateFilterFormatTest.php    |  4 +-
 .../src/Functional/HelpTopicSearchTest.php    |  4 +-
 .../tests/src/Kernel/ImageFormatterTest.php   |  4 +-
 .../Migrate/d6/MigrateImageCacheTest.php      | 17 ++++---
 .../Migrate/d7/MigrateImageStylesTest.php     |  2 +-
 .../tests/src/Functional/FileUploadTest.php   |  4 +-
 .../jsonapi/tests/src/Functional/NodeTest.php |  8 ++-
 .../src/Functional/RestJsonApiUnsupported.php |  2 +-
 .../jsonapi/tests/src/Functional/UserTest.php |  4 +-
 ...eContentTaxonomyVocabularySettingsTest.php |  4 +-
 .../Kernel/Migrate/d6/MigrateLanguageTest.php |  4 +-
 ...eContentTaxonomyVocabularySettingsTest.php |  4 +-
 .../Functional/LayoutBuilderAccessTest.php    |  2 +-
 .../src/Functional/LayoutBuilderTest.php      |  4 +-
 .../src/Functional/LayoutSectionTest.php      |  4 +-
 .../FunctionalJavascript/BlockFilterTest.php  |  4 +-
 .../BlockFormMessagesTest.php                 |  4 +-
 .../ContentPreviewToggleTest.php              |  8 ++-
 .../ContextualLinksTest.php                   |  8 ++-
 .../InlineBlockPrivateFilesTest.php           | 19 ++++---
 .../FunctionalJavascript/InlineBlockTest.php  |  8 ++-
 .../LayoutBuilderDisableInteractionsTest.php  | 16 ++++--
 .../LayoutBuilderTest.php                     |  4 +-
 .../LayoutBuilderUiTest.php                   |  8 +--
 .../MoveBlockFormTest.php                     |  8 ++-
 .../TestMultiWidthLayoutsTest.php             |  4 +-
 .../tests/src/Unit/SectionTest.php            |  4 +-
 .../tests/src/Functional/LinkFieldTest.php    |  8 ++-
 .../tests/src/Functional/LinkFieldUITest.php  |  8 ++-
 .../LocaleConfigTranslationTest.php           |  4 +-
 .../src/Kernel/LocaleConfigSubscriberTest.php | 22 +++++---
 .../src/Functional/MediaRevisionTest.php      |  4 +-
 .../src/Functional/MediaUiFunctionalTest.php  | 16 ++++--
 .../CKEditorIntegrationTest.php               | 14 ++++--
 .../MediaSourceImageTest.php                  |  4 +-
 .../Kernel/MediaAccessControlHandlerTest.php  |  4 +-
 .../MediaLibraryDisplayModeTest.php           |  8 ++-
 .../ContentModerationTest.php                 |  8 ++-
 .../src/Kernel/MediaLibraryAccessTest.php     |  2 +-
 .../src/Kernel/MediaLibraryWidgetTest.php     |  6 ++-
 .../tests/src/Kernel/MenuLinksTest.php        |  4 +-
 .../Kernel/Migrate/d6/MigrateMenuLinkTest.php |  8 ++-
 .../tests/src/Kernel/HighWaterTest.php        |  8 ++-
 .../Kernel/MigrateEntityContentBaseTest.php   |  4 +-
 .../tests/src/Kernel/TrackChangesTest.php     |  8 ++-
 .../tests/src/Unit/process/FileCopyTest.php   |  6 ++-
 .../migrate/DestinationCategoryTest.php       |  4 +-
 .../migrate/source/ContentEntityTest.php      |  4 +-
 .../MigrateUpgradeFormStepsTest.php           |  4 +-
 .../tests/src/Functional/d6/Upgrade6Test.php  |  4 +-
 .../tests/src/Functional/d7/Upgrade7Test.php  |  4 +-
 .../Functional/NodeAccessBaseTableTest.php    |  6 ++-
 .../NodeAccessGrantsCacheContextTest.php      |  4 +-
 .../NodeDisplayConfigurableTest.php           |  4 +-
 .../tests/src/Functional/NodeTestBase.php     |  6 ++-
 .../src/Functional/Views/FrontPageTest.php    |  4 +-
 .../Functional/Views/NodeFieldFilterTest.php  |  4 +-
 .../Functional/Views/NodeIntegrationTest.php  |  4 +-
 .../src/Functional/Views/NodeLanguageTest.php |  4 +-
 .../Migrate/d6/MigrateNodeCompleteTest.php    |  4 +-
 .../Migrate/d6/MigrateNodeRevisionTest.php    | 50 ++++++++++---------
 .../Migrate/d7/MigrateNodeCompleteTest.php    |  4 +-
 .../Migrate/d7/MigrateNodeRevisionTest.php    | 20 ++++----
 .../src/Kernel/Migrate/d7/MigrateNodeTest.php | 10 ++--
 .../Migrate/d7/MigrateNodeTitleLabelTest.php  |  4 +-
 .../Kernel/Migrate/d7/MigrateNodeTypeTest.php |  8 +--
 .../tests/src/Kernel/NodeAccessTestBase.php   |  6 ++-
 .../src/Functional/OptionsFieldUITest.php     | 10 ++--
 .../Functional/PathContentModerationTest.php  |  4 +-
 .../Kernel/Migrate/d6/MigrateUrlAliasTest.php |  4 +-
 .../src/Functional/UrlAlterFunctionalTest.php | 16 +++---
 .../QuickEditEndPointAccessTest.php           |  4 +-
 .../LayoutBuilderQuickEditTest.php            |  6 +--
 .../src/Functional/StandardProfileTest.php    | 12 +++--
 .../Migrate/d7/MigrateRdfMappingTest.php      |  4 +-
 .../ResponsiveImageFieldDisplayTest.php       |  2 +-
 .../src/Functional/SearchAdminThemeTest.php   |  4 +-
 .../src/Functional/SearchCommentTest.php      |  4 +-
 .../SearchConfigSettingsFormTest.php          | 10 ++--
 .../SearchMultilingualEntityTest.php          |  8 ++-
 .../Migrate/d7/MigrateSearchPageTest.php      |  4 +-
 ...EntityReferenceFieldItemNormalizerTest.php |  4 +-
 .../OverriddenConfigurationTest.php           |  4 +-
 .../src/Functional/ShortcutLinksTest.php      | 11 +---
 .../Migrate/d7/MigrateShortcutSetTest.php     |  4 +-
 .../Kernel/Migrate/d7/MigrateShortcutTest.php | 14 +++---
 .../Migrate/d6/MigrateNodeCounterTest.php     |  4 +-
 .../Migrate/d7/MigrateNodeCounterTest.php     |  4 +-
 .../src/Functional/Ajax/FrameworkTest.php     |  8 +--
 .../src/Functional/Batch/ProcessingTest.php   | 11 ++--
 .../Cache/SessionExistsCacheContextTest.php   |  4 +-
 .../Common/NoJavaScriptAnonymousTest.php      |  4 +-
 .../EntityReferenceSelectionAccessTest.php    |  4 +-
 .../src/Functional/Form/ConfirmFormTest.php   |  8 +--
 .../tests/src/Functional/Form/FormTest.php    |  4 +-
 .../src/Functional/Mail/HtmlToTextTest.php    | 12 +++--
 .../src/Functional/Menu/LocalActionTest.php   |  4 +-
 .../src/Functional/Menu/LocalTasksTest.php    | 15 +++---
 .../Module/InstallUninstallTest.php           | 24 ++++++---
 .../tests/src/Functional/Pager/PagerTest.php  | 12 +++--
 .../Render/HtmlResponseAttachmentsTest.php    | 12 +++--
 .../SecurityAdvisoryTest.php                  |  8 +++
 .../Session/SessionAuthenticationTest.php     |  4 +-
 .../Functional/Session/SessionHttpsTest.php   |  8 +--
 .../src/Functional/Session/SessionTest.php    |  8 ++-
 .../Functional/System/ErrorHandlerTest.php    | 12 +++--
 .../src/Functional/System/HtaccessTest.php    |  4 +-
 .../tests/src/Functional/System/ThemeTest.php |  2 +-
 .../src/Functional/Theme/ThemeUiTest.php      |  4 +-
 .../Theme/TwigRegistryLoaderTest.php          |  4 +-
 .../src/Functional/Theme/TwigTransTest.php    |  4 +-
 .../UpdateSystem/UpdateScriptTest.php         | 12 +++--
 .../FunctionalJavascript/OffCanvasTest.php    |  4 +-
 .../Kernel/Common/FormElementsRenderTest.php  |  4 +-
 .../src/Kernel/Common/PageRenderTest.php      |  4 +-
 .../Kernel/Entity/ConfigEntityImportTest.php  |  4 +-
 .../Kernel/Extension/ModuleHandlerTest.php    |  6 ++-
 .../src/Kernel/Migrate/d7/MigrateMenuTest.php |  6 ++-
 .../SecurityAdvisoriesFetcherTest.php         |  2 +
 .../src/Kernel/Theme/TwigNamespaceTest.php    |  4 +-
 .../tests/src/Functional/TermAccessTest.php   |  6 ++-
 .../tests/src/Functional/TermParentsTest.php  |  8 ++-
 .../Views/RelationshipNodeTermDataTest.php    |  4 +-
 .../Views/TaxonomyFieldFilterTest.php         |  4 +-
 .../Views/TaxonomyTermFilterDepthTest.php     |  4 +-
 .../MigrateTermLocalizedTranslationTest.php   | 18 ++++---
 .../Migrate/d7/MigrateTaxonomyTermTest.php    | 14 +++---
 .../d7/MigrateTaxonomyTermTranslationTest.php | 14 ++++--
 .../d7/MigrateTaxonomyVocabularyTest.php      |  8 +--
 .../MigrateTermLocalizedTranslationTest.php   | 16 +++---
 .../src/Kernel/TaxonomyQueryAlterTest.php     |  4 +-
 .../Views/TaxonomyTermArgumentDepthTest.php   |  2 +
 .../Views/TaxonomyTermFilterDepthTest.php     |  2 +
 .../TextareaWithSummaryTest.php               |  4 +-
 .../text/tests/src/Kernel/TextSummaryTest.php |  4 +-
 .../src/Functional/ToolbarAdminMenuTest.php   |  4 +-
 .../Functional/ToolbarCacheContextsTest.php   |  4 +-
 .../FunctionalJavascript/TourLegacyTest.php   |  4 +-
 .../tests/src/Functional/TrackerTest.php      |  4 +-
 .../src/Functional/UpdateContribTest.php      |  4 +-
 .../src/Functional/RestRegisterUserTest.php   |  2 +-
 .../src/Functional/UserLoginHttpTest.php      | 12 +++--
 .../tests/src/Functional/UserLoginTest.php    |  9 ++--
 .../src/Functional/UserPasswordResetTest.php  | 16 ++++--
 .../src/Functional/UserRegistrationTest.php   |  4 +-
 .../d6/MigrateUserPictureD6FileTest.php       | 20 ++++----
 .../Kernel/Migrate/d6/MigrateUserRoleTest.php |  8 ++-
 .../Kernel/Migrate/d7/MigrateUserRoleTest.php |  6 ++-
 .../src/Kernel/Migrate/d7/MigrateUserTest.php | 14 +++---
 .../src/Kernel/UserAccountFormFieldsTest.php  |  4 +-
 .../tests/src/Kernel/UserValidationTest.php   |  8 ++-
 .../tests/src/Unit/PermissionHandlerTest.php  |  4 +-
 .../src/Unit/UserAccessControlHandlerTest.php |  4 +-
 .../Entity/FieldEntityTranslationTest.php     |  4 +-
 .../FieldRenderedEntityTranslationTest.php    |  4 +-
 .../src/Functional/Handler/FieldWebTest.php   | 12 ++---
 .../Functional/Plugin/DisplayPageWebTest.php  |  4 +-
 .../src/Functional/Plugin/ExposedFormTest.php |  8 ++-
 .../src/Functional/SearchIntegrationTest.php  |  6 +--
 .../PaginationAJAXTest.php                    |  4 +-
 .../CacheableMetadataCalculationTest.php      |  4 +-
 .../src/Kernel/Entity/EntityViewsDataTest.php | 44 +++++++++++-----
 .../Entity/LatestRevisionFilterTest.php       |  4 +-
 .../Kernel/Entity/RowEntityRenderersTest.php  |  8 +--
 ...sEntitySchemaSubscriberIntegrationTest.php |  4 +-
 .../Kernel/Handler/AreaDisplayLinkTest.php    | 16 ++++--
 .../src/Kernel/Handler/FieldDateTest.php      | 15 ++++--
 .../src/Kernel/Handler/FieldKernelTest.php    | 18 +++----
 .../Handler/FieldRenderedEntityTest.php       |  8 ++-
 .../views/tests/src/Kernel/ModuleTest.php     |  5 +-
 .../tests/src/Kernel/Plugin/StyleGridTest.php |  4 +-
 .../tests/src/Kernel/PluginInstanceTest.php   |  4 +-
 .../src/Kernel/RenderCacheIntegrationTest.php |  8 ++-
 .../tests/src/Kernel/ViewExecutableTest.php   |  4 +-
 .../Controller/ViewAjaxControllerTest.php     |  4 +-
 .../src/Functional/ExposedFormUITest.php      | 10 ++--
 .../tests/src/Functional/HandlerTest.php      |  4 +-
 .../src/Functional/RearrangeFieldsTest.php    |  8 +--
 .../src/FunctionalJavascript/PreviewTest.php  |  8 ++-
 .../src/Functional/PathWorkspacesTest.php     |  8 ++-
 .../src/Kernel/WorkspaceIntegrationTest.php   | 16 ++++--
 .../UninstallDefaultContentTest.php           |  6 +--
 .../src/Functional/DemoUmamiProfileTest.php   |  2 +-
 .../StandardJavascriptTest.php                |  2 +-
 .../Template/ComposerProjectTemplatesTest.php |  4 +-
 .../Ajax/AjaxTest.php                         |  8 ++-
 .../Ajax/CommandsTest.php                     |  4 +-
 .../Ajax/MessageCommandTest.php               |  8 ++-
 .../Core/JsMessageTest.php                    |  4 +-
 .../TableDrag/TableDragTest.php               | 16 ++++--
 .../Bootstrap/UncaughtExceptionTest.php       |  8 ++-
 .../KernelTests/Config/DefaultConfigTest.php  |  4 +-
 .../KernelTests/Core/Ajax/CommandsTest.php    | 10 ++--
 .../Asset/LibraryDiscoveryIntegrationTest.php | 21 ++++----
 .../Core/Config/ConfigDiffTest.php            |  4 +-
 .../Core/Database/ConnectionUnitTest.php      |  8 ++-
 .../KernelTests/Core/Database/SchemaTest.php  | 20 +++++---
 .../Core/Database/TransactionTest.php         | 16 +++---
 .../Core/Datetime/Element/TimezoneTest.php    |  8 ++-
 .../Entity/BundleConstraintValidatorTest.php  |  4 +-
 .../Core/Entity/ConfigEntityQueryTest.php     |  4 +-
 .../Entity/EntityAccessControlHandlerTest.php |  4 +-
 .../KernelTests/Core/Entity/EntityApiTest.php |  4 +-
 .../Core/Entity/EntityCrudHookTest.php        |  6 ++-
 .../Entity/EntityFieldDefaultValueTest.php    |  4 +-
 .../Core/Entity/EntityQueryAggregateTest.php  | 10 ++--
 .../Entity/EntityQueryRelationshipTest.php    |  4 +-
 .../Core/Entity/EntityQueryTest.php           | 16 ++++--
 .../Core/Entity/EntityReferenceFieldTest.php  | 12 +++--
 .../Core/Entity/EntityRepositoryTest.php      |  4 +-
 .../Core/Entity/EntityUUIDTest.php            |  4 +-
 .../Entity/FieldTranslationSqlStorageTest.php |  4 +-
 .../FieldableEntityDefinitionUpdateTest.php   | 32 +++++++++---
 .../RevisionableContentEntityBaseTest.php     |  4 +-
 .../KernelTests/Core/Field/FieldItemTest.php  |  6 ++-
 .../KernelTests/Core/File/HtaccessTest.php    |  4 +-
 .../Core/Menu/MenuTreeStorageTest.php         |  4 +-
 .../Render/Element/RenderElementTypesTest.php |  4 +-
 .../Component/Datetime/DateTimePlusTest.php   |  4 +-
 .../Tests/Component/DrupalComponentTest.php   |  6 ++-
 .../Tests/Component/Graph/GraphTest.php       | 32 +++++++-----
 .../Tests/Component/Utility/SortArrayTest.php |  4 +-
 .../Tests/Component/Utility/XssTest.php       | 12 ++---
 .../Scaffold/Functional/ScaffoldTest.php      | 16 ++++--
 .../Tests/Core/Access/AccessResultTest.php    |  5 +-
 .../Drupal/Tests/Core/Common/TagsTest.php     |  4 +-
 .../Drupal/Tests/Core/Config/ConfigTest.php   | 12 +++--
 .../Controller/ControllerResolverTest.php     |  6 ++-
 ...ityFormDisplayAccessControlHandlerTest.php |  4 +-
 .../Tests/Core/Entity/EntityTypeTest.php      |  4 +-
 .../Tests/Core/Entity/EntityUrlTest.php       |  4 +-
 .../Drupal/Tests/Core/File/FileSystemTest.php |  4 +-
 .../FormAjaxSubscriberTest.php                | 35 +++++++------
 ...EntityContextDefinitionIsSatisfiedTest.php |  4 +-
 .../Core/Render/RendererPlaceholdersTest.php  |  4 +-
 .../Drupal/Tests/Core/Render/RendererTest.php |  6 ++-
 .../Tests/Core/Routing/UrlGeneratorTest.php   |  8 +--
 .../Core/Security/RequestSanitizerTest.php    |  4 +-
 .../Tests/Core/Template/AttributeTest.php     | 16 ++++--
 .../Tests/Core/Utility/LinkGeneratorTest.php  |  9 ++--
 320 files changed, 1615 insertions(+), 783 deletions(-)

diff --git a/core/modules/action/tests/src/Kernel/Migrate/d6/MigrateActionsTest.php b/core/modules/action/tests/src/Kernel/Migrate/d6/MigrateActionsTest.php
index ee6f39740366..239c5ab0d864 100644
--- a/core/modules/action/tests/src/Kernel/Migrate/d6/MigrateActionsTest.php
+++ b/core/modules/action/tests/src/Kernel/Migrate/d6/MigrateActionsTest.php
@@ -57,8 +57,10 @@ public function testActions() {
    *   The expected Action type.
    * @param array $configuration
    *   The expected Action configuration.
+   *
+   * @internal
    */
-  protected function assertEntity($id, $label, $type, $configuration) {
+  protected function assertEntity(string $id, string $label, string $type, array $configuration): void {
     $action = Action::load($id);
 
     $this->assertInstanceOf(Action::class, $action);
diff --git a/core/modules/action/tests/src/Kernel/Migrate/d7/MigrateActionsTest.php b/core/modules/action/tests/src/Kernel/Migrate/d7/MigrateActionsTest.php
index 85a6977d4232..920af405338a 100644
--- a/core/modules/action/tests/src/Kernel/Migrate/d7/MigrateActionsTest.php
+++ b/core/modules/action/tests/src/Kernel/Migrate/d7/MigrateActionsTest.php
@@ -57,8 +57,10 @@ public function testActions() {
    *   The expected Action type.
    * @param array $configuration
    *   The expected Action configuration.
+   *
+   * @internal
    */
-  protected function assertEntity($id, $label, $type, $configuration) {
+  protected function assertEntity(string $id, string $label, string $type, array $configuration): void {
     $action = Action::load($id);
 
     $this->assertInstanceOf(Action::class, $action);
diff --git a/core/modules/big_pipe/tests/src/Functional/BigPipeTest.php b/core/modules/big_pipe/tests/src/Functional/BigPipeTest.php
index 21a39eb5a45a..dcb68b48430b 100644
--- a/core/modules/big_pipe/tests/src/Functional/BigPipeTest.php
+++ b/core/modules/big_pipe/tests/src/Functional/BigPipeTest.php
@@ -327,7 +327,10 @@ public function testBigPipeMultiOccurrencePlaceholders() {
     $this->assertSession()->responseNotContains('The count is 3.');
   }
 
-  protected function assertBigPipeResponseHeadersPresent() {
+  /**
+   * @internal
+   */
+  protected function assertBigPipeResponseHeadersPresent(): void {
     // Check that Cache-Control header set to "private".
     $this->assertSession()->responseHeaderContains('Cache-Control', 'private');
     $this->assertSession()->responseHeaderEquals('Surrogate-Control', 'no-store, content="BigPipe/1.0"');
@@ -340,8 +343,10 @@ protected function assertBigPipeResponseHeadersPresent() {
    * @param array $expected_big_pipe_nojs_placeholders
    *   Keys: BigPipe no-JS placeholder markup. Values: expected replacement
    *   markup.
+   *
+   * @internal
    */
-  protected function assertBigPipeNoJsPlaceholders(array $expected_big_pipe_nojs_placeholders) {
+  protected function assertBigPipeNoJsPlaceholders(array $expected_big_pipe_nojs_placeholders): void {
     $this->assertSetsEqual(array_keys($expected_big_pipe_nojs_placeholders), array_map('rawurldecode', explode(' ', $this->getSession()->getResponseHeader('BigPipe-Test-No-Js-Placeholders'))));
     foreach ($expected_big_pipe_nojs_placeholders as $big_pipe_nojs_placeholder => $expected_replacement) {
       // Checking whether the replacement for the BigPipe no-JS placeholder
@@ -361,8 +366,10 @@ protected function assertBigPipeNoJsPlaceholders(array $expected_big_pipe_nojs_p
    * @param array $expected_big_pipe_placeholder_stream_order
    *   Keys: BigPipe placeholder IDs. Values: expected AJAX response. Keys are
    *   defined in the order that they are expected to be rendered & streamed.
+   *
+   * @internal
    */
-  protected function assertBigPipePlaceholders(array $expected_big_pipe_placeholders, array $expected_big_pipe_placeholder_stream_order) {
+  protected function assertBigPipePlaceholders(array $expected_big_pipe_placeholders, array $expected_big_pipe_placeholder_stream_order): void {
     $this->assertSetsEqual(array_keys($expected_big_pipe_placeholders), explode(' ', $this->getSession()->getResponseHeader('BigPipe-Test-Placeholders')));
     $placeholder_positions = [];
     $placeholder_replacement_positions = [];
@@ -437,36 +444,49 @@ protected function getTestCases($has_session = TRUE) {
 
   /**
    * Asserts whether arrays A and B are equal, when treated as sets.
+   *
+   * @todo This method is broken. Fix it in
+   *   https://www.drupal.org/project/drupal/issues/3144926
+   *
+   * @internal
    */
-  protected function assertSetsEqual(array $a, array $b) {
-    return count($a) == count($b) && !array_diff_assoc($a, $b);
+  protected function assertSetsEqual(array $a, array $b): void {
+    $result = count($a) == count($b) && !array_diff_assoc($a, $b);
   }
 
   /**
    * Asserts whether a BigPipe no-JS cookie exists or not.
+   *
+   * @internal
    */
-  protected function assertBigPipeNoJsCookieExists($expected) {
+  protected function assertBigPipeNoJsCookieExists(string $expected): void {
     $this->assertCookieExists('big_pipe_nojs', $expected, 'BigPipe no-JS');
   }
 
   /**
    * Asserts whether a session cookie exists or not.
+   *
+   * @internal
    */
-  protected function assertSessionCookieExists($expected) {
+  protected function assertSessionCookieExists(string $expected): void {
     $this->assertCookieExists($this->getSessionName(), $expected, 'Session');
   }
 
   /**
    * Asserts whether a cookie exists on the client or not.
+   *
+   * @internal
    */
-  protected function assertCookieExists($cookie_name, $expected, $cookie_label) {
+  protected function assertCookieExists(string $cookie_name, string $expected, string $cookie_label): void {
     $this->assertEquals($expected, !empty($this->getSession()->getCookie($cookie_name)), $expected ? "$cookie_label cookie exists." : "$cookie_label cookie does not exist.");
   }
 
   /**
    * Calls ::performMetaRefresh() and asserts the responses.
+   *
+   * @internal
    */
-  protected function assertBigPipeNoJsMetaRefreshRedirect() {
+  protected function assertBigPipeNoJsMetaRefreshRedirect(): void {
     $original_url = $this->getSession()->getCurrentUrl();
 
     // Disable automatic following of redirects by the HTTP client, so that this
diff --git a/core/modules/block/tests/src/Kernel/BlockViewBuilderTest.php b/core/modules/block/tests/src/Kernel/BlockViewBuilderTest.php
index df7fba45a3a4..03b728da7f98 100644
--- a/core/modules/block/tests/src/Kernel/BlockViewBuilderTest.php
+++ b/core/modules/block/tests/src/Kernel/BlockViewBuilderTest.php
@@ -288,8 +288,10 @@ public function testBlockViewBuilderBuildAlter() {
    *   The expected cache tags.
    * @param int $expected_max_age
    *   The expected max-age.
+   *
+   * @internal
    */
-  protected function assertBlockRenderedWithExpectedCacheability(array $expected_keys, array $expected_contexts, array $expected_tags, $expected_max_age) {
+  protected function assertBlockRenderedWithExpectedCacheability(array $expected_keys, array $expected_contexts, array $expected_tags, int $expected_max_age): void {
     $required_cache_contexts = ['languages:' . LanguageInterface::TYPE_INTERFACE, 'theme', 'user.permissions'];
 
     // Check that the expected cacheability metadata is present in:
diff --git a/core/modules/block/tests/src/Kernel/Migrate/d6/MigrateBlockTest.php b/core/modules/block/tests/src/Kernel/Migrate/d6/MigrateBlockTest.php
index daa3f107b646..ecbea2ffb909 100644
--- a/core/modules/block/tests/src/Kernel/Migrate/d6/MigrateBlockTest.php
+++ b/core/modules/block/tests/src/Kernel/Migrate/d6/MigrateBlockTest.php
@@ -69,14 +69,16 @@ protected function setUp(): void {
    *   The display region.
    * @param string $theme
    *   The theme.
-   * @param string $weight
+   * @param int $weight
    *   The block weight.
    * @param array $settings
    *   (optional) The block settings.
    * @param bool $status
    *   Whether the block is expected to be enabled or disabled.
+   *
+   * @internal
    */
-  public function assertEntity($id, $visibility, $region, $theme, $weight, array $settings = NULL, $status = TRUE) {
+  public function assertEntity(string $id, array $visibility, string $region, string $theme, int $weight, array $settings = NULL, bool $status = TRUE): void {
     $block = Block::load($id);
     $this->assertInstanceOf(Block::class, $block);
     $this->assertSame($visibility, $block->getVisibility());
diff --git a/core/modules/block/tests/src/Kernel/Migrate/d7/MigrateBlockTest.php b/core/modules/block/tests/src/Kernel/Migrate/d7/MigrateBlockTest.php
index 991d02142c12..a9f31b4ca3d8 100644
--- a/core/modules/block/tests/src/Kernel/Migrate/d7/MigrateBlockTest.php
+++ b/core/modules/block/tests/src/Kernel/Migrate/d7/MigrateBlockTest.php
@@ -73,7 +73,7 @@ protected function setUp(): void {
    *   The display region.
    * @param string $theme
    *   The theme.
-   * @param string $weight
+   * @param int $weight
    *   The block weight.
    * @param string $label
    *   The block label.
@@ -81,8 +81,10 @@ protected function setUp(): void {
    *   The block label display setting.
    * @param bool $status
    *   Whether the block is expected to be enabled or disabled.
+   *
+   * @internal
    */
-  public function assertEntity($id, $plugin_id, array $roles, $pages, $region, $theme, $weight, $label, $label_display, $status = TRUE) {
+  public function assertEntity(string $id, string $plugin_id, array $roles, string $pages, string $region, string $theme, int $weight, string $label, string $label_display, bool $status = TRUE): void {
     $block = Block::load($id);
     $this->assertInstanceOf(Block::class, $block);
     /** @var \Drupal\block\BlockInterface $block */
diff --git a/core/modules/block_content/tests/src/Functional/Views/BlockContentFieldFilterTest.php b/core/modules/block_content/tests/src/Functional/Views/BlockContentFieldFilterTest.php
index 280f0e81371b..60249e60e47f 100644
--- a/core/modules/block_content/tests/src/Functional/Views/BlockContentFieldFilterTest.php
+++ b/core/modules/block_content/tests/src/Functional/Views/BlockContentFieldFilterTest.php
@@ -99,8 +99,10 @@ public function testFilters() {
    *   that translation should be shown on the given page.
    * @param string $message
    *   Message suffix to display.
+   *
+   * @internal
    */
-  protected function assertPageCounts($path, $counts, $message) {
+  protected function assertPageCounts(string $path, array $counts, string $message): void {
     // Get the text of the page.
     $this->drupalGet($path);
     $text = $this->getTextContent();
diff --git a/core/modules/block_content/tests/src/Functional/Views/BlockContentIntegrationTest.php b/core/modules/block_content/tests/src/Functional/Views/BlockContentIntegrationTest.php
index e3053e4be304..f47660906dad 100644
--- a/core/modules/block_content/tests/src/Functional/Views/BlockContentIntegrationTest.php
+++ b/core/modules/block_content/tests/src/Functional/Views/BlockContentIntegrationTest.php
@@ -59,8 +59,10 @@ public function testBlockContentViewTypeArgument() {
    *
    * @param array $expected_ids
    *   An array of block_content IDs.
+   *
+   * @internal
    */
-  protected function assertIds(array $expected_ids = []) {
+  protected function assertIds(array $expected_ids = []): void {
     $result = $this->xpath('//span[@class="field-content"]');
     $ids = [];
     foreach ($result as $element) {
diff --git a/core/modules/block_content/tests/src/Kernel/Migrate/MigrateBlockContentEntityDisplayTest.php b/core/modules/block_content/tests/src/Kernel/Migrate/MigrateBlockContentEntityDisplayTest.php
index 509230d98f13..32bb55a038ad 100644
--- a/core/modules/block_content/tests/src/Kernel/Migrate/MigrateBlockContentEntityDisplayTest.php
+++ b/core/modules/block_content/tests/src/Kernel/Migrate/MigrateBlockContentEntityDisplayTest.php
@@ -38,8 +38,10 @@ protected function setUp(): void {
    *   The entity ID.
    * @param string $component_id
    *   The ID of the display component.
+   *
+   * @internal
    */
-  protected function assertDisplay($id, $component_id) {
+  protected function assertDisplay(string $id, string $component_id): void {
     $component = EntityViewDisplay::load($id)->getComponent($component_id);
     $this->assertIsArray($component);
     $this->assertSame('hidden', $component['label']);
diff --git a/core/modules/block_content/tests/src/Kernel/Migrate/MigrateBlockContentEntityFormDisplayTest.php b/core/modules/block_content/tests/src/Kernel/Migrate/MigrateBlockContentEntityFormDisplayTest.php
index eb424395c8db..6d21b99d9d15 100644
--- a/core/modules/block_content/tests/src/Kernel/Migrate/MigrateBlockContentEntityFormDisplayTest.php
+++ b/core/modules/block_content/tests/src/Kernel/Migrate/MigrateBlockContentEntityFormDisplayTest.php
@@ -38,8 +38,10 @@ protected function setUp(): void {
    *   The entity ID.
    * @param string $component_id
    *   The ID of the form component.
+   *
+   * @internal
    */
-  protected function assertDisplay($id, $component_id) {
+  protected function assertDisplay(string $id, string $component_id): void {
     $component = EntityFormDisplay::load($id)->getComponent($component_id);
     $this->assertIsArray($component);
     $this->assertSame('text_textarea_with_summary', $component['type']);
diff --git a/core/modules/book/tests/src/FunctionalJavascript/BookJavascriptTest.php b/core/modules/book/tests/src/FunctionalJavascript/BookJavascriptTest.php
index cb4ac799b426..33f0c253f45e 100644
--- a/core/modules/book/tests/src/FunctionalJavascript/BookJavascriptTest.php
+++ b/core/modules/book/tests/src/FunctionalJavascript/BookJavascriptTest.php
@@ -143,9 +143,11 @@ public function testBookOrdering() {
    * @throws \Behat\Mink\Exception\ExpectationException
    *   When any of the given string is not found.
    *
+   * @internal
+   *
    * @todo Remove this once https://www.drupal.org/node/2817657 is committed.
    */
-  protected function assertOrderInPage(array $items) {
+  protected function assertOrderInPage(array $items): void {
     $session = $this->getSession();
     $text = $session->getPage()->getHtml();
     $strings = [];
diff --git a/core/modules/book/tests/src/Kernel/BookMultilingualTest.php b/core/modules/book/tests/src/Kernel/BookMultilingualTest.php
index 38bcdcffc382..033b9ae65bfb 100644
--- a/core/modules/book/tests/src/Kernel/BookMultilingualTest.php
+++ b/core/modules/book/tests/src/Kernel/BookMultilingualTest.php
@@ -289,6 +289,8 @@ protected function setCurrentLanguage(string $langcode): void {
    *   A book tree item.
    * @param string $langcode
    *   The language code for the requested translation.
+   *
+   * @internal
    */
   protected function assertBookItemIsCorrectlyTranslated(array $item, string $langcode): void {
     $this->assertNodeLinkIsCorrectlyTranslated($item['original_link']['nid'], $item['title'], $item['url'], $langcode);
@@ -305,6 +307,8 @@ protected function assertBookItemIsCorrectlyTranslated(array $item, string $lang
    *   The URL being tested.
    * @param string $langcode
    *   The language code.
+   *
+   * @internal
    */
   protected function assertNodeLinkIsCorrectlyTranslated(int $nid, string $title, Url $url, string $langcode): void {
     $node = Node::load($nid);
@@ -324,8 +328,10 @@ protected function assertNodeLinkIsCorrectlyTranslated(int $nid, string $title,
    *   The node ID.
    * @param string $indent
    *   The indentation before the actual table of contents label.
+   *
+   * @internal
    */
-  protected function assertToCEntryIsCorrectlyTranslated(array $toc, string $langcode, int $nid, string $indent) {
+  protected function assertToCEntryIsCorrectlyTranslated(array $toc, string $langcode, int $nid, string $indent): void {
     $node = Node::load($nid);
     $node_label = $node->getTranslation($langcode)->label();
     $this->assertSame($indent . ' ' . $node_label, $toc[$nid]);
diff --git a/core/modules/ckeditor/tests/src/Kernel/CKEditorTest.php b/core/modules/ckeditor/tests/src/Kernel/CKEditorTest.php
index f70fd87d0740..3f852ef8e313 100644
--- a/core/modules/ckeditor/tests/src/Kernel/CKEditorTest.php
+++ b/core/modules/ckeditor/tests/src/Kernel/CKEditorTest.php
@@ -473,8 +473,10 @@ public function testExternalStylesheets() {
    * @param string $langcode
    *   Language code to assert for. Defaults to French. That is the default
    *   language set in this assertion.
+   *
+   * @internal
    */
-  protected function assertCKEditorLanguage($langcode = 'fr') {
+  protected function assertCKEditorLanguage(string $langcode = 'fr'): void {
     // Set French as the site default language.
     ConfigurableLanguage::createFromLangcode('fr')->save();
     $this->config('system.site')->set('default_langcode', 'fr')->save();
diff --git a/core/modules/ckeditor5/tests/src/FunctionalJavascript/MediaTest.php b/core/modules/ckeditor5/tests/src/FunctionalJavascript/MediaTest.php
index 0d3f6fe7542a..8fb14f18d9da 100644
--- a/core/modules/ckeditor5/tests/src/FunctionalJavascript/MediaTest.php
+++ b/core/modules/ckeditor5/tests/src/FunctionalJavascript/MediaTest.php
@@ -664,11 +664,13 @@ public function testViewMode() {
    *
    * @param string $attribute
    *   The attribute to check.
-   * @param mixed $value
+   * @param string|null $value
    *   Either a string value or if NULL, asserts that <drupal-media> element
    *   doesn't have the attribute.
+   *
+   * @internal
    */
-  protected function assertSourceAttributeSame($attribute, $value) {
+  protected function assertSourceAttributeSame(string $attribute, ?string $value): void {
     $dom = $this->getEditorDataAsDom();
     $drupal_media = (new \DOMXPath($dom))->query('//drupal-media');
     $this->assertNotEmpty($drupal_media);
diff --git a/core/modules/comment/tests/src/Functional/CommentPagerTest.php b/core/modules/comment/tests/src/Functional/CommentPagerTest.php
index ef4fe3c018fe..aea7bb10d5db 100644
--- a/core/modules/comment/tests/src/Functional/CommentPagerTest.php
+++ b/core/modules/comment/tests/src/Functional/CommentPagerTest.php
@@ -210,8 +210,10 @@ public function testCommentOrderingThreading() {
    *   An array of comments, must be of the type CommentInterface.
    * @param array $expected_order
    *   An array of keys from $comments describing the expected order.
+   *
+   * @internal
    */
-  public function assertCommentOrder(array $comments, array $expected_order) {
+  public function assertCommentOrder(array $comments, array $expected_order): void {
     $expected_cids = [];
 
     // First, rekey the expected order by cid.
diff --git a/core/modules/comment/tests/src/Functional/CommentThreadingTest.php b/core/modules/comment/tests/src/Functional/CommentThreadingTest.php
index 00ccd29c2498..55ad7b4168b0 100644
--- a/core/modules/comment/tests/src/Functional/CommentThreadingTest.php
+++ b/core/modules/comment/tests/src/Functional/CommentThreadingTest.php
@@ -131,8 +131,10 @@ public function testCommentThreading() {
    *   The comment ID to check.
    * @param int $pid
    *   The expected parent comment ID.
+   *
+   * @internal
    */
-  protected function assertParentLink($cid, $pid) {
+  protected function assertParentLink(int $cid, int $pid): void {
     // This pattern matches a markup structure like:
     // @code
     // <a id="comment-2"></a>
@@ -152,8 +154,10 @@ protected function assertParentLink($cid, $pid) {
    *
    * @param int $cid
    *   The comment ID to check.
+   *
+   * @internal
    */
-  protected function assertNoParentLink($cid) {
+  protected function assertNoParentLink(int $cid): void {
     // This pattern matches a markup structure like:
     // @code
     // <a id="comment-2"></a>
diff --git a/core/modules/comment/tests/src/Functional/Views/CommentFieldFilterTest.php b/core/modules/comment/tests/src/Functional/Views/CommentFieldFilterTest.php
index 9be47fc8e215..623d75c1c4f7 100644
--- a/core/modules/comment/tests/src/Functional/Views/CommentFieldFilterTest.php
+++ b/core/modules/comment/tests/src/Functional/Views/CommentFieldFilterTest.php
@@ -108,8 +108,10 @@ public function testFilters() {
    *   that translation should be shown on the given page.
    * @param string $message
    *   Message suffix to display.
+   *
+   * @internal
    */
-  protected function assertPageCounts($path, $counts, $message) {
+  protected function assertPageCounts(string $path, array $counts, string $message): void {
     // Get the text of the page.
     $this->drupalGet($path);
     $text = $this->getTextContent();
diff --git a/core/modules/comment/tests/src/Kernel/CommentValidationTest.php b/core/modules/comment/tests/src/Kernel/CommentValidationTest.php
index 39b842400dae..2e6af3207013 100644
--- a/core/modules/comment/tests/src/Kernel/CommentValidationTest.php
+++ b/core/modules/comment/tests/src/Kernel/CommentValidationTest.php
@@ -189,8 +189,10 @@ public function testValidation() {
    *   The field that violates the maximum length.
    * @param int $length
    *   Number of characters that was exceeded.
+   *
+   * @internal
    */
-  protected function assertLengthViolation(CommentInterface $comment, $field_name, $length) {
+  protected function assertLengthViolation(CommentInterface $comment, string $field_name, int $length): void {
     $violations = $comment->validate();
     $this->assertCount(1, $violations, "Violation found when $field_name is too long.");
     $this->assertEquals("{$field_name}.0.value", $violations[0]->getPropertyPath());
diff --git a/core/modules/comment/tests/src/Kernel/Migrate/d6/MigrateCommentEntityDisplayTest.php b/core/modules/comment/tests/src/Kernel/Migrate/d6/MigrateCommentEntityDisplayTest.php
index b4a670562f1c..f2741270cec9 100644
--- a/core/modules/comment/tests/src/Kernel/Migrate/d6/MigrateCommentEntityDisplayTest.php
+++ b/core/modules/comment/tests/src/Kernel/Migrate/d6/MigrateCommentEntityDisplayTest.php
@@ -41,8 +41,10 @@ protected function setUp(): void {
    *   The entity ID.
    * @param string $component_id
    *   The ID of the display component.
+   *
+   * @internal
    */
-  protected function assertDisplay($id, $component_id) {
+  protected function assertDisplay(string $id, string $component_id): void {
     $component = EntityViewDisplay::load($id)->getComponent($component_id);
     $this->assertIsArray($component);
     $this->assertSame('hidden', $component['label']);
diff --git a/core/modules/comment/tests/src/Kernel/Migrate/d6/MigrateCommentEntityFormDisplaySubjectTest.php b/core/modules/comment/tests/src/Kernel/Migrate/d6/MigrateCommentEntityFormDisplaySubjectTest.php
index a57c2250fb42..57fb3d3849b2 100644
--- a/core/modules/comment/tests/src/Kernel/Migrate/d6/MigrateCommentEntityFormDisplaySubjectTest.php
+++ b/core/modules/comment/tests/src/Kernel/Migrate/d6/MigrateCommentEntityFormDisplaySubjectTest.php
@@ -35,8 +35,10 @@ protected function setUp(): void {
    *
    * @param string $id
    *   The entity form display ID.
+   *
+   * @internal
    */
-  protected function assertSubjectVisible($id) {
+  protected function assertSubjectVisible(string $id): void {
     $component = EntityFormDisplay::load($id)->getComponent('subject');
     $this->assertIsArray($component);
     $this->assertSame('string_textfield', $component['type']);
@@ -48,8 +50,10 @@ protected function assertSubjectVisible($id) {
    *
    * @param string $id
    *   The entity form display ID.
+   *
+   * @internal
    */
-  protected function assertSubjectNotVisible($id) {
+  protected function assertSubjectNotVisible(string $id): void {
     $component = EntityFormDisplay::load($id)->getComponent('subject');
     $this->assertNull($component);
   }
diff --git a/core/modules/comment/tests/src/Kernel/Migrate/d6/MigrateCommentEntityFormDisplayTest.php b/core/modules/comment/tests/src/Kernel/Migrate/d6/MigrateCommentEntityFormDisplayTest.php
index 5438c938c25b..8c1bec00d645 100644
--- a/core/modules/comment/tests/src/Kernel/Migrate/d6/MigrateCommentEntityFormDisplayTest.php
+++ b/core/modules/comment/tests/src/Kernel/Migrate/d6/MigrateCommentEntityFormDisplayTest.php
@@ -40,8 +40,10 @@ protected function setUp(): void {
    *   The entity ID.
    * @param string $component_id
    *   The ID of the form component.
+   *
+   * @internal
    */
-  protected function assertDisplay($id, $component_id) {
+  protected function assertDisplay(string $id, string $component_id): void {
     $component = EntityFormDisplay::load($id)->getComponent($component_id);
     $this->assertIsArray($component);
     $this->assertSame('comment_default', $component['type']);
diff --git a/core/modules/comment/tests/src/Kernel/Migrate/d6/MigrateCommentFieldInstanceTest.php b/core/modules/comment/tests/src/Kernel/Migrate/d6/MigrateCommentFieldInstanceTest.php
index fab1c5120412..2bea5867d017 100644
--- a/core/modules/comment/tests/src/Kernel/Migrate/d6/MigrateCommentFieldInstanceTest.php
+++ b/core/modules/comment/tests/src/Kernel/Migrate/d6/MigrateCommentFieldInstanceTest.php
@@ -45,14 +45,16 @@ protected function setUp(): void {
    *   The field's default_mode setting.
    * @param int $per_page
    *   The field's per_page setting.
-   * @param bool $anonymous
+   * @param int $anonymous
    *   The field's anonymous setting.
-   * @param int $form_location
+   * @param bool $form_location
    *   The field's form_location setting.
-   * @param bool $preview
+   * @param int $preview
    *   The field's preview setting.
+   *
+   * @internal
    */
-  protected function assertEntity($bundle, $field_name, $default_value, $default_mode, $per_page, $anonymous, $form_location, $preview) {
+  protected function assertEntity(string $bundle, string $field_name, int $default_value, int $default_mode, int $per_page, int $anonymous, bool $form_location, int $preview): void {
     $entity = FieldConfig::load("node.$bundle.$field_name");
     $this->assertInstanceOf(FieldConfig::class, $entity);
     $this->assertSame('node', $entity->getTargetEntityTypeId());
diff --git a/core/modules/comment/tests/src/Kernel/Migrate/d6/MigrateCommentFieldTest.php b/core/modules/comment/tests/src/Kernel/Migrate/d6/MigrateCommentFieldTest.php
index e2a865cd7c98..f16e1da2e954 100644
--- a/core/modules/comment/tests/src/Kernel/Migrate/d6/MigrateCommentFieldTest.php
+++ b/core/modules/comment/tests/src/Kernel/Migrate/d6/MigrateCommentFieldTest.php
@@ -35,8 +35,10 @@ protected function setUp(): void {
    *
    * @param string $comment_type
    *   The comment type.
+   *
+   * @internal
    */
-  protected function assertEntity($comment_type) {
+  protected function assertEntity(string $comment_type): void {
     $entity = FieldStorageConfig::load('node.' . $comment_type);
     $this->assertInstanceOf(FieldStorageConfig::class, $entity);
     $this->assertSame('node', $entity->getTargetEntityTypeId());
diff --git a/core/modules/comment/tests/src/Kernel/Migrate/d6/MigrateCommentTypeTest.php b/core/modules/comment/tests/src/Kernel/Migrate/d6/MigrateCommentTypeTest.php
index 359116b88222..0fe36155d818 100644
--- a/core/modules/comment/tests/src/Kernel/Migrate/d6/MigrateCommentTypeTest.php
+++ b/core/modules/comment/tests/src/Kernel/Migrate/d6/MigrateCommentTypeTest.php
@@ -25,8 +25,10 @@ class MigrateCommentTypeTest extends MigrateDrupal6TestBase {
    *   The entity ID.
    * @param string $label
    *   The entity label.
+   *
+   * @internal
    */
-  protected function assertEntity($id, $label) {
+  protected function assertEntity(string $id, string $label): void {
     $entity = CommentType::load($id);
     $this->assertInstanceOf(CommentType::class, $entity);
     $this->assertSame($label, $entity->label());
diff --git a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentEntityDisplayTest.php b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentEntityDisplayTest.php
index 1ace7293f0f8..83709fdf0a34 100644
--- a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentEntityDisplayTest.php
+++ b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentEntityDisplayTest.php
@@ -39,8 +39,10 @@ protected function setUp(): void {
    *   The entity ID.
    * @param string $component_id
    *   The ID of the display component.
+   *
+   * @internal
    */
-  protected function assertDisplay($id, $component_id) {
+  protected function assertDisplay(string $id, string $component_id): void {
     $component = EntityViewDisplay::load($id)->getComponent($component_id);
     $this->assertIsArray($component);
     $this->assertSame('hidden', $component['label']);
diff --git a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentEntityFormDisplaySubjectTest.php b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentEntityFormDisplaySubjectTest.php
index c0a1de628cd4..803198349885 100644
--- a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentEntityFormDisplaySubjectTest.php
+++ b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentEntityFormDisplaySubjectTest.php
@@ -32,8 +32,10 @@ protected function setUp(): void {
    *
    * @param string $id
    *   The entity form display ID.
+   *
+   * @internal
    */
-  protected function assertSubjectVisible($id) {
+  protected function assertSubjectVisible(string $id): void {
     $component = EntityFormDisplay::load($id)->getComponent('subject');
     $this->assertIsArray($component);
     $this->assertSame('string_textfield', $component['type']);
@@ -45,8 +47,10 @@ protected function assertSubjectVisible($id) {
    *
    * @param string $id
    *   The entity form display ID.
+   *
+   * @internal
    */
-  protected function assertSubjectNotVisible($id) {
+  protected function assertSubjectNotVisible(string $id): void {
     $component = EntityFormDisplay::load($id)->getComponent('subject');
     $this->assertNull($component);
   }
diff --git a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentEntityFormDisplayTest.php b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentEntityFormDisplayTest.php
index 05d1651bc973..51c7dbdf9171 100644
--- a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentEntityFormDisplayTest.php
+++ b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentEntityFormDisplayTest.php
@@ -39,8 +39,10 @@ protected function setUp(): void {
    *   The entity ID.
    * @param string $component_id
    *   The ID of the form component.
+   *
+   * @internal
    */
-  protected function assertDisplay($id, $component_id) {
+  protected function assertDisplay(string $id, string $component_id): void {
     $component = EntityFormDisplay::load($id)->getComponent($component_id);
     $this->assertIsArray($component);
     $this->assertSame('comment_default', $component['type']);
diff --git a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentFieldInstanceTest.php b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentFieldInstanceTest.php
index e1fd26c66cba..ccf447a33ea7 100644
--- a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentFieldInstanceTest.php
+++ b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentFieldInstanceTest.php
@@ -44,14 +44,16 @@ protected function setUp(): void {
    *   The field's default_mode setting.
    * @param int $per_page
    *   The field's per_page setting.
-   * @param bool $anonymous
+   * @param int $anonymous
    *   The field's anonymous setting.
-   * @param int $form_location
+   * @param bool $form_location
    *   The field's form_location setting.
-   * @param bool $preview
+   * @param int $preview
    *   The field's preview setting.
+   *
+   * @internal
    */
-  protected function assertEntity($bundle, $field_name, $default_value, $default_mode, $per_page, $anonymous, $form_location, $preview) {
+  protected function assertEntity(string $bundle, string $field_name, int $default_value, int $default_mode, int $per_page, int $anonymous, bool $form_location, int $preview): void {
     $entity = FieldConfig::load("node.$bundle.$field_name");
     $this->assertInstanceOf(FieldConfig::class, $entity);
     $this->assertSame('node', $entity->getTargetEntityTypeId());
diff --git a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentFieldTest.php b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentFieldTest.php
index 25e67d239f8f..be068b9f41b5 100644
--- a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentFieldTest.php
+++ b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentFieldTest.php
@@ -32,8 +32,10 @@ protected function setUp(): void {
    *
    * @param string $comment_type
    *   The comment type.
+   *
+   * @internal
    */
-  protected function assertEntity($comment_type) {
+  protected function assertEntity(string $comment_type): void {
     $entity = FieldStorageConfig::load('node.' . $comment_type);
     $this->assertInstanceOf(FieldStorageConfig::class, $entity);
     $this->assertSame('node', $entity->getTargetEntityTypeId());
diff --git a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentTypeTest.php b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentTypeTest.php
index 0da71b7b14bb..93d899aaf2bb 100644
--- a/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentTypeTest.php
+++ b/core/modules/comment/tests/src/Kernel/Migrate/d7/MigrateCommentTypeTest.php
@@ -25,8 +25,10 @@ class MigrateCommentTypeTest extends MigrateDrupal7TestBase {
    *   The entity ID.
    * @param string $label
    *   The entity label.
+   *
+   * @internal
    */
-  protected function assertEntity($id, $label) {
+  protected function assertEntity(string $id, string $label): void {
     $entity = CommentType::load($id);
     $this->assertInstanceOf(CommentType::class, $entity);
     $this->assertSame($label, $entity->label());
diff --git a/core/modules/config_translation/tests/src/Functional/ConfigTranslationUiTest.php b/core/modules/config_translation/tests/src/Functional/ConfigTranslationUiTest.php
index 50a74e205691..1fd76ccaff37 100644
--- a/core/modules/config_translation/tests/src/Functional/ConfigTranslationUiTest.php
+++ b/core/modules/config_translation/tests/src/Functional/ConfigTranslationUiTest.php
@@ -1186,10 +1186,9 @@ protected function renderContextualLinks($ids, $current_path) {
    * @param string $id
    *   The HTML ID of the textarea.
    *
-   * @return bool
-   *   TRUE if the assertion passed; FALSE otherwise.
+   * @internal
    */
-  protected function assertDisabledTextarea($id) {
+  protected function assertDisabledTextarea(string $id): void {
     $textarea = $this->assertSession()->fieldDisabled($id);
     $this->assertSame('textarea', $textarea->getTagName());
     $this->assertSame('This field has been disabled because you do not have sufficient permissions to edit it.', $textarea->getText());
diff --git a/core/modules/contact/tests/src/Functional/Views/ContactLinkTest.php b/core/modules/contact/tests/src/Functional/Views/ContactLinkTest.php
index 6a8da2203b91..ea07bc57b5d1 100644
--- a/core/modules/contact/tests/src/Functional/Views/ContactLinkTest.php
+++ b/core/modules/contact/tests/src/Functional/Views/ContactLinkTest.php
@@ -98,8 +98,10 @@ public function testContactLink() {
    *   All user objects used by the test.
    * @param array $names
    *   Users which should have contact links.
+   *
+   * @internal
    */
-  public function assertContactLinks(array $accounts, array $names) {
+  public function assertContactLinks(array $accounts, array $names): void {
     $this->assertSession()->elementsCount('xpath', '//div[contains(@class, "views-field-contact")]//a', count($names));
     foreach ($names as $name) {
       $account_url = $accounts[$name]->toUrl('contact-form')->toString();
diff --git a/core/modules/contact/tests/src/Kernel/Migrate/MigrateContactCategoryTest.php b/core/modules/contact/tests/src/Kernel/Migrate/MigrateContactCategoryTest.php
index c6b3ea5ed3f7..178cbc6643d2 100644
--- a/core/modules/contact/tests/src/Kernel/Migrate/MigrateContactCategoryTest.php
+++ b/core/modules/contact/tests/src/Kernel/Migrate/MigrateContactCategoryTest.php
@@ -41,8 +41,10 @@ protected function setUp(): void {
    *   The expected reply message.
    * @param int $expected_weight
    *   The contact form's expected weight.
+   *
+   * @internal
    */
-  protected function assertEntity($id, $expected_label, array $expected_recipients, $expected_reply, $expected_weight) {
+  protected function assertEntity(string $id, string $expected_label, array $expected_recipients, string $expected_reply, int $expected_weight): void {
     /** @var \Drupal\contact\ContactFormInterface $entity */
     $entity = ContactForm::load($id);
     $this->assertInstanceOf(ContactFormInterface::class, $entity);
diff --git a/core/modules/content_moderation/tests/src/Functional/ModerationLocaleTest.php b/core/modules/content_moderation/tests/src/Functional/ModerationLocaleTest.php
index a23011d2137f..caa404af6a5c 100644
--- a/core/modules/content_moderation/tests/src/Functional/ModerationLocaleTest.php
+++ b/core/modules/content_moderation/tests/src/Functional/ModerationLocaleTest.php
@@ -505,8 +505,10 @@ protected function loadTranslation(NodeInterface $node, $langcode) {
    *
    * @param \Drupal\node\NodeInterface $node
    *   A node object.
+   *
+   * @internal
    */
-  public function assertLatestVersionPage(NodeInterface $node) {
+  public function assertLatestVersionPage(NodeInterface $node): void {
     $this->assertEquals($node->toUrl('latest-version')->setAbsolute()->toString(), $this->getSession()->getCurrentUrl());
     $this->assertModerationForm($node);
   }
@@ -519,8 +521,10 @@ public function assertLatestVersionPage(NodeInterface $node) {
    * @param bool $moderation_form
    *   (optional) Whether the page should contain the moderation form. Defaults
    *   to FALSE.
+   *
+   * @internal
    */
-  public function assertNotLatestVersionPage(NodeInterface $node, $moderation_form = FALSE) {
+  public function assertNotLatestVersionPage(NodeInterface $node, bool $moderation_form = FALSE): void {
     $this->assertNotEquals($node->toUrl('latest-version')->setAbsolute()->toString(), $this->getSession()->getCurrentUrl());
     if ($moderation_form) {
       $this->assertModerationForm($node, FALSE);
@@ -538,8 +542,10 @@ public function assertNotLatestVersionPage(NodeInterface $node, $moderation_form
    * @param bool $latest_tab
    *   (optional) Whether the node form is expected to be displayed on the
    *   latest version page or on the node view page. Defaults to the former.
+   *
+   * @internal
    */
-  public function assertModerationForm(NodeInterface $node, $latest_tab = TRUE) {
+  public function assertModerationForm(NodeInterface $node, bool $latest_tab = TRUE): void {
     $this->drupalGet($node->toUrl());
     $this->assertEquals(!$latest_tab, $this->hasModerationForm());
     $this->drupalGet($node->toUrl('latest-version'));
@@ -551,8 +557,10 @@ public function assertModerationForm(NodeInterface $node, $latest_tab = TRUE) {
    *
    * @param \Drupal\node\NodeInterface $node
    *   A node object.
+   *
+   * @internal
    */
-  public function assertNoModerationForm(NodeInterface $node) {
+  public function assertNoModerationForm(NodeInterface $node): void {
     $this->drupalGet($node->toUrl());
     $this->assertFalse($this->hasModerationForm());
     $this->drupalGet($node->toUrl('latest-version'));
diff --git a/core/modules/content_moderation/tests/src/Functional/ViewsModerationStateFilterTest.php b/core/modules/content_moderation/tests/src/Functional/ViewsModerationStateFilterTest.php
index b78e0938b08c..286bbcfedcc0 100644
--- a/core/modules/content_moderation/tests/src/Functional/ViewsModerationStateFilterTest.php
+++ b/core/modules/content_moderation/tests/src/Functional/ViewsModerationStateFilterTest.php
@@ -327,8 +327,10 @@ public function testFilterRenderCache() {
    * @param bool $check_size
    *   (optional) Whether to check that size of the select element is not
    *   greater than 8. Defaults to FALSE.
+   *
+   * @internal
    */
-  protected function assertFilterStates($states, $check_size = FALSE) {
+  protected function assertFilterStates(array $states, bool $check_size = FALSE): void {
     $this->drupalGet('/filter-test-path');
 
     $assert_session = $this->assertSession();
@@ -355,8 +357,10 @@ protected function assertFilterStates($states, $check_size = FALSE) {
    *   An array of workflow IDs to check.
    * @param \Drupal\views\ViewEntityInterface $view
    *   A view configuration object.
+   *
+   * @internal
    */
-  protected function assertWorkflowDependencies(array $workflow_ids, ViewEntityInterface $view) {
+  protected function assertWorkflowDependencies(array $workflow_ids, ViewEntityInterface $view): void {
     $dependencies = $view->getDependencies();
 
     $expected = [];
diff --git a/core/modules/content_moderation/tests/src/Kernel/ContentModerationStateStorageSchemaTest.php b/core/modules/content_moderation/tests/src/Kernel/ContentModerationStateStorageSchemaTest.php
index 343bfe55b436..c7b84fd6bae6 100644
--- a/core/modules/content_moderation/tests/src/Kernel/ContentModerationStateStorageSchemaTest.php
+++ b/core/modules/content_moderation/tests/src/Kernel/ContentModerationStateStorageSchemaTest.php
@@ -124,8 +124,10 @@ public function testUniqueKeys() {
    *   An array of entity values.
    * @param bool $has_exception
    *   If an exception should be triggered when saving the entity.
+   *
+   * @internal
    */
-  protected function assertStorageException(array $values, $has_exception) {
+  protected function assertStorageException(array $values, bool $has_exception): void {
     $defaults = [
       'moderation_state' => 'draft',
       'workflow' => 'editorial',
diff --git a/core/modules/content_moderation/tests/src/Kernel/ContentModerationStateTest.php b/core/modules/content_moderation/tests/src/Kernel/ContentModerationStateTest.php
index c238eb3d445c..6c260ef930a3 100644
--- a/core/modules/content_moderation/tests/src/Kernel/ContentModerationStateTest.php
+++ b/core/modules/content_moderation/tests/src/Kernel/ContentModerationStateTest.php
@@ -777,8 +777,10 @@ protected function reloadEntity(EntityInterface $entity, $revision_id = FALSE) {
    * @param bool|null $published
    *   (optional) Whether to check if the entity is published or not. Defaults
    *   to TRUE.
+   *
+   * @internal
    */
-  protected function assertDefaultRevision(EntityInterface $entity, $revision_id, $published = TRUE) {
+  protected function assertDefaultRevision(EntityInterface $entity, int $revision_id, $published = TRUE): void {
     // Get the default revision.
     $entity = $this->reloadEntity($entity);
     $this->assertEquals($revision_id, $entity->getRevisionId());
diff --git a/core/modules/content_moderation/tests/src/Kernel/DefaultRevisionStateTest.php b/core/modules/content_moderation/tests/src/Kernel/DefaultRevisionStateTest.php
index 065973a242cd..307dfc8b2fb5 100644
--- a/core/modules/content_moderation/tests/src/Kernel/DefaultRevisionStateTest.php
+++ b/core/modules/content_moderation/tests/src/Kernel/DefaultRevisionStateTest.php
@@ -123,8 +123,10 @@ public function testMultilingual() {
    *   The state the content moderation state revision should be in.
    * @param string $expected_workflow
    *   The workflow the content moderation state revision should be using.
+   *
+   * @internal
    */
-  protected function assertModerationState($revision_id, $langcode, $expected_state, $expected_workflow = 'editorial') {
+  protected function assertModerationState(int $revision_id, string $langcode, string $expected_state, string $expected_workflow = 'editorial'): void {
     $moderation_state_storage = $this->entityTypeManager->getStorage('content_moderation_state');
 
     $query = $moderation_state_storage->getQuery()->accessCheck(FALSE);
diff --git a/core/modules/content_moderation/tests/src/Kernel/ModerationStateFieldItemListTest.php b/core/modules/content_moderation/tests/src/Kernel/ModerationStateFieldItemListTest.php
index a59b485d698f..623534e72235 100644
--- a/core/modules/content_moderation/tests/src/Kernel/ModerationStateFieldItemListTest.php
+++ b/core/modules/content_moderation/tests/src/Kernel/ModerationStateFieldItemListTest.php
@@ -162,8 +162,10 @@ public function testAssignNullItemList() {
 
   /**
    * Assert the set of expectations when the moderation state field is emptied.
+   *
+   * @internal
    */
-  protected function assertEmptiedModerationFieldItemList() {
+  protected function assertEmptiedModerationFieldItemList(): void {
     $this->assertTrue($this->testNode->moderation_state->isEmpty());
     // Test the empty value causes a violation in the entity.
     $violations = $this->testNode->validate();
diff --git a/core/modules/content_moderation/tests/src/Kernel/ViewsModerationStateFilterTest.php b/core/modules/content_moderation/tests/src/Kernel/ViewsModerationStateFilterTest.php
index 800073be049f..c42b798977cd 100644
--- a/core/modules/content_moderation/tests/src/Kernel/ViewsModerationStateFilterTest.php
+++ b/core/modules/content_moderation/tests/src/Kernel/ViewsModerationStateFilterTest.php
@@ -321,8 +321,10 @@ public function testStateFilterStatesList() {
    *
    * @param string[] $states
    *   The states which should appear in the filter.
+   *
+   * @internal
    */
-  protected function assertPluginStates($states) {
+  protected function assertPluginStates(array $states): void {
     $plugin = Views::pluginManager('filter')->createInstance('moderation_state_filter', []);
     $view = Views::getView('test_content_moderation_state_filter_base_table');
     $plugin->init($view, $view->getDisplay());
@@ -338,8 +340,10 @@ protected function assertPluginStates($states) {
    *   An array of filters to apply to the view.
    * @param string $view_id
    *   The view to execute for the results.
+   *
+   * @internal
    */
-  protected function assertNodesWithFilters(array $nodes, array $filters, $view_id = 'test_content_moderation_state_filter_base_table') {
+  protected function assertNodesWithFilters(array $nodes, array $filters, string $view_id = 'test_content_moderation_state_filter_base_table'): void {
     $view = Views::getView($view_id);
     $view->setExposedInput($filters);
     $view->execute();
diff --git a/core/modules/content_moderation/tests/src/Kernel/ViewsModerationStateSortTest.php b/core/modules/content_moderation/tests/src/Kernel/ViewsModerationStateSortTest.php
index 6ddbec3eeddf..b27c4d62eecf 100644
--- a/core/modules/content_moderation/tests/src/Kernel/ViewsModerationStateSortTest.php
+++ b/core/modules/content_moderation/tests/src/Kernel/ViewsModerationStateSortTest.php
@@ -165,8 +165,10 @@ public function testSortRevisionBaseTable() {
    *   The sort order.
    * @param array $expected
    *   The expected results array.
+   *
+   * @internal
    */
-  protected function assertSortResults($view_id, $column, $order, array $expected) {
+  protected function assertSortResults(string $view_id, string $column, string $order, array $expected): void {
     // Test with exposed input.
     $view = Views::getView($view_id);
     $view->setExposedInput([
diff --git a/core/modules/content_moderation/tests/src/Kernel/WorkspacesContentModerationStateTest.php b/core/modules/content_moderation/tests/src/Kernel/WorkspacesContentModerationStateTest.php
index 79cf23286c45..ce4730820114 100644
--- a/core/modules/content_moderation/tests/src/Kernel/WorkspacesContentModerationStateTest.php
+++ b/core/modules/content_moderation/tests/src/Kernel/WorkspacesContentModerationStateTest.php
@@ -253,7 +253,7 @@ protected function createContentType(array $values = []) {
   /**
    * {@inheritdoc}
    */
-  protected function assertDefaultRevision(EntityInterface $entity, $revision_id, $published = TRUE) {
+  protected function assertDefaultRevision(EntityInterface $entity, int $revision_id, $published = TRUE): void {
     // In the context of a workspace, the default revision ID is always the
     // latest workspace-specific revision, so we need to adjust the expectation
     // of the parent assertion.
diff --git a/core/modules/content_translation/tests/src/Functional/ContentTranslationOutdatedRevisionTranslationTest.php b/core/modules/content_translation/tests/src/Functional/ContentTranslationOutdatedRevisionTranslationTest.php
index 01e4e9766f5a..07dacff667ba 100644
--- a/core/modules/content_translation/tests/src/Functional/ContentTranslationOutdatedRevisionTranslationTest.php
+++ b/core/modules/content_translation/tests/src/Functional/ContentTranslationOutdatedRevisionTranslationTest.php
@@ -85,8 +85,10 @@ public function testFlagAsOutdatedHidden() {
 
   /**
    * Checks whether the flag widget is displayed.
+   *
+   * @internal
    */
-  protected function assertFlagWidget() {
+  protected function assertFlagWidget(): void {
     $this->assertSession()->pageTextNotContains('Flag other translations as outdated');
     $this->assertSession()->pageTextContains('Translations cannot be flagged as outdated when content is moderated.');
   }
diff --git a/core/modules/content_translation/tests/src/Functional/ContentTranslationSettingsTest.php b/core/modules/content_translation/tests/src/Functional/ContentTranslationSettingsTest.php
index 974e396e01e2..de65d5464f7e 100644
--- a/core/modules/content_translation/tests/src/Functional/ContentTranslationSettingsTest.php
+++ b/core/modules/content_translation/tests/src/Functional/ContentTranslationSettingsTest.php
@@ -253,14 +253,16 @@ public function testAccountLanguageSettingsUI() {
    *
    * @param string $entity_type
    *   The entity type for which to check translatability.
-   * @param string $bundle
+   * @param string|null $bundle
    *   The bundle for which to check translatability.
    * @param bool $enabled
    *   TRUE if translatability should be enabled, FALSE otherwise.
    * @param array $edit
    *   An array of values to submit to the content translation settings page.
+   *
+   * @internal
    */
-  protected function assertSettings($entity_type, $bundle, $enabled, $edit) {
+  protected function assertSettings(string $entity_type, ?string $bundle, bool $enabled, array $edit): void {
     $this->drupalGet('admin/config/regional/content-language');
     $this->submitForm($edit, 'Save configuration');
     $args = ['@entity_type' => $entity_type, '@bundle' => $bundle, '@enabled' => $enabled ? 'enabled' : 'disabled'];
diff --git a/core/modules/content_translation/tests/src/Functional/ContentTranslationWorkflowsTest.php b/core/modules/content_translation/tests/src/Functional/ContentTranslationWorkflowsTest.php
index 9360122fb2bd..6291989f4116 100644
--- a/core/modules/content_translation/tests/src/Functional/ContentTranslationWorkflowsTest.php
+++ b/core/modules/content_translation/tests/src/Functional/ContentTranslationWorkflowsTest.php
@@ -414,10 +414,12 @@ protected function doTestWorkflows(UserInterface $user, $expected_status) {
 
   /**
    * Assert that the current page does not contain shared form elements.
+   *
+   * @internal
    */
-  protected function assertNoSharedElements() {
+  protected function assertNoSharedElements(): void {
     $language_none = LanguageInterface::LANGCODE_NOT_SPECIFIED;
-    return $this->assertSession()->fieldNotExists("field_test_text[$language_none][0][value]");
+    $this->assertSession()->fieldNotExists("field_test_text[$language_none][0][value]");
   }
 
 }
diff --git a/core/modules/content_translation/tests/src/Kernel/ContentTranslationFieldSyncRevisionTest.php b/core/modules/content_translation/tests/src/Kernel/ContentTranslationFieldSyncRevisionTest.php
index 2c7f8a9a3736..a689935c413f 100644
--- a/core/modules/content_translation/tests/src/Kernel/ContentTranslationFieldSyncRevisionTest.php
+++ b/core/modules/content_translation/tests/src/Kernel/ContentTranslationFieldSyncRevisionTest.php
@@ -449,8 +449,10 @@ protected function createRevision(ContentEntityInterface $translation, $default
    *
    * @param \Drupal\Core\Entity\EntityConstraintViolationListInterface $violations
    *   A list of violations.
+   *
+   * @internal
    */
-  protected function assertViolations(EntityConstraintViolationListInterface $violations) {
+  protected function assertViolations(EntityConstraintViolationListInterface $violations): void {
     $entity_type_id = $this->storage->getEntityTypeId();
     $settings = $this->contentTranslationManager->getBundleTranslationSettings($entity_type_id, $entity_type_id);
     $message = !empty($settings['untranslatable_fields_hide']) ?
@@ -478,8 +480,10 @@ protected function assertViolations(EntityConstraintViolationListInterface $viol
    *   - target ID (it)
    *   - alt (en)
    *   - alt (it)
+   *
+   * @internal
    */
-  protected function assertLatestRevisionFieldValues($entity_id, array $expected_values) {
+  protected function assertLatestRevisionFieldValues(int $entity_id, array $expected_values): void {
     /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
     $entity = $this->storage->loadRevision($this->storage->getLatestRevisionId($entity_id));
     @[$revision_id, $target_id_en, $target_id_it, $alt_en, $alt_it] = $expected_values;
diff --git a/core/modules/content_translation/tests/src/Kernel/Migrate/d6/MigrateTaxonomyTermTranslationTest.php b/core/modules/content_translation/tests/src/Kernel/Migrate/d6/MigrateTaxonomyTermTranslationTest.php
index 3f70a6590b77..6f4449880245 100644
--- a/core/modules/content_translation/tests/src/Kernel/Migrate/d6/MigrateTaxonomyTermTranslationTest.php
+++ b/core/modules/content_translation/tests/src/Kernel/Migrate/d6/MigrateTaxonomyTermTranslationTest.php
@@ -72,8 +72,10 @@ protected function setUp(): void {
    *   The value the migrated entity field should have.
    * @param int $expected_term_reference_tid
    *   The term reference ID the migrated entity field should have.
+   *
+   * @internal
    */
-  protected function assertEntity($id, $expected_language, $expected_label, $expected_vid, $expected_description = '', $expected_format = NULL, $expected_weight = 0, $expected_parents = [], $expected_field_integer_value = NULL, $expected_term_reference_tid = NULL) {
+  protected function assertEntity(int $id, string $expected_language, string $expected_label, string $expected_vid, string $expected_description = '', string $expected_format = NULL, int $expected_weight = 0, array $expected_parents = [], int $expected_field_integer_value = NULL, int $expected_term_reference_tid = NULL): void {
     /** @var \Drupal\taxonomy\TermInterface $entity */
     $entity = Term::load($id);
     $this->assertInstanceOf(TermInterface::class, $entity);
@@ -82,7 +84,7 @@ protected function assertEntity($id, $expected_language, $expected_label, $expec
     $this->assertSame($expected_vid, $entity->bundle());
     $this->assertSame($expected_description, $entity->getDescription());
     $this->assertSame($expected_format, $entity->getFormat());
-    $this->assertSame($expected_weight, $entity->getWeight());
+    $this->assertSame($expected_weight, (int) $entity->getWeight());
     $this->assertHierarchy($expected_vid, $id, $expected_parents);
   }
 
@@ -95,8 +97,10 @@ protected function assertEntity($id, $expected_language, $expected_label, $expec
    *   ID of the term to check.
    * @param array $parent_ids
    *   The expected parent term IDs.
+   *
+   * @internal
    */
-  protected function assertHierarchy($vid, $tid, array $parent_ids) {
+  protected function assertHierarchy(string $vid, int $tid, array $parent_ids): void {
     if (!isset($this->treeData[$vid])) {
       $tree = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadTree($vid);
       $this->treeData[$vid] = [];
@@ -119,13 +123,13 @@ protected function assertHierarchy($vid, $tid, array $parent_ids) {
    * Tests the Drupal 6 i18n taxonomy term to Drupal 8 migration.
    */
   public function testTranslatedTaxonomyTerms() {
-    $this->assertEntity(1, 'zu', 'zu - term 1 of vocabulary 1', 'vocabulary_1_i_0_', 'zu - description of term 1 of vocabulary 1', NULL, '0', []);
-    $this->assertEntity(2, 'fr', 'fr - term 2 of vocabulary 2', 'vocabulary_2_i_1_', 'fr - description of term 2 of vocabulary 2', NULL, '3', []);
-    $this->assertEntity(3, 'fr', 'fr - term 3 of vocabulary 2', 'vocabulary_2_i_1_', 'fr - description of term 3 of vocabulary 2', NULL, '4', ['2']);
-    $this->assertEntity(4, 'en', 'term 4 of vocabulary 3', 'vocabulary_3_i_2_', 'description of term 4 of vocabulary 3', NULL, '6', []);
-    $this->assertEntity(5, 'en', 'term 5 of vocabulary 3', 'vocabulary_3_i_2_', 'description of term 5 of vocabulary 3', NULL, '7', ['4']);
-    $this->assertEntity(6, 'en', 'term 6 of vocabulary 3', 'vocabulary_3_i_2_', 'description of term 6 of vocabulary 3', NULL, '8', ['4', '5']);
-    $this->assertEntity(7, 'fr', 'fr - term 2 of vocabulary 1', 'vocabulary_1_i_0_', 'fr - desc of term 2 vocab 1', NULL, '0', []);
+    $this->assertEntity(1, 'zu', 'zu - term 1 of vocabulary 1', 'vocabulary_1_i_0_', 'zu - description of term 1 of vocabulary 1', NULL, 0, []);
+    $this->assertEntity(2, 'fr', 'fr - term 2 of vocabulary 2', 'vocabulary_2_i_1_', 'fr - description of term 2 of vocabulary 2', NULL, 3, []);
+    $this->assertEntity(3, 'fr', 'fr - term 3 of vocabulary 2', 'vocabulary_2_i_1_', 'fr - description of term 3 of vocabulary 2', NULL, 4, ['2']);
+    $this->assertEntity(4, 'en', 'term 4 of vocabulary 3', 'vocabulary_3_i_2_', 'description of term 4 of vocabulary 3', NULL, 6, []);
+    $this->assertEntity(5, 'en', 'term 5 of vocabulary 3', 'vocabulary_3_i_2_', 'description of term 5 of vocabulary 3', NULL, 7, ['4']);
+    $this->assertEntity(6, 'en', 'term 6 of vocabulary 3', 'vocabulary_3_i_2_', 'description of term 6 of vocabulary 3', NULL, 8, ['4', '5']);
+    $this->assertEntity(7, 'fr', 'fr - term 2 of vocabulary 1', 'vocabulary_1_i_0_', 'fr - desc of term 2 vocab 1', NULL, 0, []);
   }
 
 }
diff --git a/core/modules/contextual/tests/src/Functional/ContextualDynamicContextTest.php b/core/modules/contextual/tests/src/Functional/ContextualDynamicContextTest.php
index 34e3e61b2f80..6e4755b62321 100644
--- a/core/modules/contextual/tests/src/Functional/ContextualDynamicContextTest.php
+++ b/core/modules/contextual/tests/src/Functional/ContextualDynamicContextTest.php
@@ -222,8 +222,10 @@ public function testTokenProtection() {
    *
    * @param string $id
    *   A contextual link id.
+   *
+   * @internal
    */
-  protected function assertContextualLinkPlaceHolder($id) {
+  protected function assertContextualLinkPlaceHolder(string $id): void {
     $this->assertSession()->elementAttributeContains(
       'css',
       'div[data-contextual-id="' . $id . '"]',
@@ -237,8 +239,10 @@ protected function assertContextualLinkPlaceHolder($id) {
    *
    * @param string $id
    *   A contextual link id.
+   *
+   * @internal
    */
-  protected function assertNoContextualLinkPlaceHolder($id) {
+  protected function assertNoContextualLinkPlaceHolder(string $id): void {
     $this->assertSession()->elementNotExists('css', 'div[data-contextual-id="' . $id . '"]');
   }
 
diff --git a/core/modules/contextual/tests/src/FunctionalJavascript/EditModeTest.php b/core/modules/contextual/tests/src/FunctionalJavascript/EditModeTest.php
index 219b30dc76b9..6cb1b68c3842 100644
--- a/core/modules/contextual/tests/src/FunctionalJavascript/EditModeTest.php
+++ b/core/modules/contextual/tests/src/FunctionalJavascript/EditModeTest.php
@@ -100,8 +100,10 @@ protected function pressToolbarEditButton() {
 
   /**
    * Asserts that the correct message was announced when entering edit mode.
+   *
+   * @internal
    */
-  protected function assertAnnounceEditMode() {
+  protected function assertAnnounceEditMode(): void {
     $web_assert = $this->assertSession();
     // Wait for contextual trigger button.
     $web_assert->waitForElementVisible('css', '.contextual trigger');
@@ -111,8 +113,10 @@ protected function assertAnnounceEditMode() {
 
   /**
    * Assert that the correct message was announced when leaving edit mode.
+   *
+   * @internal
    */
-  protected function assertAnnounceLeaveEditMode() {
+  protected function assertAnnounceLeaveEditMode(): void {
     $web_assert = $this->assertSession();
     $page = $this->getSession()->getPage();
     // Wait till all the contextual links are hidden.
diff --git a/core/modules/datetime/tests/src/Functional/EntityResource/EntityTest/EntityTestDateonlyTest.php b/core/modules/datetime/tests/src/Functional/EntityResource/EntityTest/EntityTestDateonlyTest.php
index 9439f8cf4a23..04e38fd0163e 100644
--- a/core/modules/datetime/tests/src/Functional/EntityResource/EntityTest/EntityTestDateonlyTest.php
+++ b/core/modules/datetime/tests/src/Functional/EntityResource/EntityTest/EntityTestDateonlyTest.php
@@ -117,7 +117,7 @@ protected function getNormalizedPostEntity() {
   /**
    * {@inheritdoc}
    */
-  protected function assertNormalizationEdgeCases($method, Url $url, array $request_options) {
+  protected function assertNormalizationEdgeCases($method, Url $url, array $request_options): void {
     parent::assertNormalizationEdgeCases($method, $url, $request_options);
 
     if ($this->entity->getEntityType()->hasKey('bundle')) {
diff --git a/core/modules/datetime/tests/src/Functional/EntityResource/EntityTest/EntityTestDatetimeTest.php b/core/modules/datetime/tests/src/Functional/EntityResource/EntityTest/EntityTestDatetimeTest.php
index f9313f112265..2030900cf421 100644
--- a/core/modules/datetime/tests/src/Functional/EntityResource/EntityTest/EntityTestDatetimeTest.php
+++ b/core/modules/datetime/tests/src/Functional/EntityResource/EntityTest/EntityTestDatetimeTest.php
@@ -117,7 +117,7 @@ protected function getNormalizedPostEntity() {
   /**
    * {@inheritdoc}
    */
-  protected function assertNormalizationEdgeCases($method, Url $url, array $request_options) {
+  protected function assertNormalizationEdgeCases($method, Url $url, array $request_options): void {
     parent::assertNormalizationEdgeCases($method, $url, $request_options);
 
     if ($this->entity->getEntityType()->hasKey('bundle')) {
diff --git a/core/modules/datetime_range/tests/src/Functional/EntityResource/EntityTest/EntityTestDateRangeTest.php b/core/modules/datetime_range/tests/src/Functional/EntityResource/EntityTest/EntityTestDateRangeTest.php
index 15bc81744593..636221f95117 100644
--- a/core/modules/datetime_range/tests/src/Functional/EntityResource/EntityTest/EntityTestDateRangeTest.php
+++ b/core/modules/datetime_range/tests/src/Functional/EntityResource/EntityTest/EntityTestDateRangeTest.php
@@ -118,7 +118,7 @@ protected function getNormalizedPostEntity() {
   /**
    * {@inheritdoc}
    */
-  protected function assertNormalizationEdgeCases($method, Url $url, array $request_options) {
+  protected function assertNormalizationEdgeCases($method, Url $url, array $request_options): void {
     parent::assertNormalizationEdgeCases($method, $url, $request_options);
 
     if ($this->entity->getEntityType()->hasKey('bundle')) {
diff --git a/core/modules/dblog/tests/src/Functional/DbLogResourceTest.php b/core/modules/dblog/tests/src/Functional/DbLogResourceTest.php
index 12cd954f96a3..4294949ef995 100644
--- a/core/modules/dblog/tests/src/Functional/DbLogResourceTest.php
+++ b/core/modules/dblog/tests/src/Functional/DbLogResourceTest.php
@@ -118,7 +118,7 @@ protected function setUpAuthorization($method) {
   /**
    * {@inheritdoc}
    */
-  protected function assertNormalizationEdgeCases($method, Url $url, array $request_options) {}
+  protected function assertNormalizationEdgeCases($method, Url $url, array $request_options): void {}
 
   /**
    * {@inheritdoc}
diff --git a/core/modules/dblog/tests/src/Functional/DbLogTest.php b/core/modules/dblog/tests/src/Functional/DbLogTest.php
index 4b7ef3c2266f..f83931cf4de1 100644
--- a/core/modules/dblog/tests/src/Functional/DbLogTest.php
+++ b/core/modules/dblog/tests/src/Functional/DbLogTest.php
@@ -819,8 +819,10 @@ protected function getSeverityConstant($class) {
    *   The database log message to check.
    * @param string $message
    *   The message to pass to simpletest.
+   *
+   * @internal
    */
-  protected function assertLogMessage($log_message, $message) {
+  protected function assertLogMessage(string $log_message, string $message): void {
     $message_text = Unicode::truncate($log_message, 56, TRUE, TRUE);
     $this->assertSession()->linkExists($message_text, 0, $message);
   }
diff --git a/core/modules/editor/tests/src/Functional/EditorUploadImageScaleTest.php b/core/modules/editor/tests/src/Functional/EditorUploadImageScaleTest.php
index 4196769ac856..e983ea88fd48 100644
--- a/core/modules/editor/tests/src/Functional/EditorUploadImageScaleTest.php
+++ b/core/modules/editor/tests/src/Functional/EditorUploadImageScaleTest.php
@@ -214,12 +214,14 @@ protected function uploadImage($uri) {
   /**
    * Asserts whether the saved maximum dimensions equal the ones provided.
    *
-   * @param string $width
+   * @param int|null $width
    *   The expected width of the uploaded image.
-   * @param string $height
+   * @param int|null $height
    *   The expected height of the uploaded image.
+   *
+   * @internal
    */
-  protected function assertSavedMaxDimensions($width, $height) {
+  protected function assertSavedMaxDimensions(?int $width, ?int $height): void {
     $image_upload_settings = Editor::load('basic_html')->getImageUploadSettings();
     $expected = [
       'width' => $image_upload_settings['max_dimensions']['width'],
diff --git a/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceAdminTest.php b/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceAdminTest.php
index a9b551084e8a..22c1d958a50b 100644
--- a/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceAdminTest.php
+++ b/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceAdminTest.php
@@ -398,8 +398,10 @@ protected function createEntityReferenceField($target_type, $bundles = []) {
    *   The field name.
    * @param array $expected_options
    *   An array of expected options.
+   *
+   * @internal
    */
-  protected function assertFieldSelectOptions($name, array $expected_options) {
+  protected function assertFieldSelectOptions(string $name, array $expected_options): void {
     $options = $this->assertSession()->selectExists($name)->findAll('xpath', 'option');
     array_walk($options, function (NodeElement &$option) {
       $option = $option->getValue();
diff --git a/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceFieldTranslatedReferenceViewTest.php b/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceFieldTranslatedReferenceViewTest.php
index 58b51dc7e0b7..e69abc86d91c 100644
--- a/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceFieldTranslatedReferenceViewTest.php
+++ b/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceFieldTranslatedReferenceViewTest.php
@@ -175,8 +175,10 @@ public function testEntityReferenceDisplay() {
 
   /**
    * Assert entity reference display.
+   *
+   * @internal
    */
-  protected function assertEntityReferenceDisplay() {
+  protected function assertEntityReferenceDisplay(): void {
     $url = $this->referrerEntity->toUrl();
     $translation_url = $this->referrerEntity->toUrl('canonical', ['language' => ConfigurableLanguage::load($this->translateToLangcode)]);
 
@@ -192,8 +194,10 @@ protected function assertEntityReferenceDisplay() {
 
   /**
    * Assert entity reference form display.
+   *
+   * @internal
    */
-  protected function assertEntityReferenceFormDisplay() {
+  protected function assertEntityReferenceFormDisplay(): void {
     $this->drupalLogin($this->webUser);
     $url = $this->referrerEntity->toUrl('edit-form');
     $translation_url = $this->referrerEntity->toUrl('edit-form', ['language' => ConfigurableLanguage::load($this->translateToLangcode)]);
diff --git a/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceIntegrationTest.php b/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceIntegrationTest.php
index dd6f8d5900f9..bf0ebc2b6d6d 100644
--- a/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceIntegrationTest.php
+++ b/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceIntegrationTest.php
@@ -196,8 +196,10 @@ public function testSupportedEntityTypesAndWidgets() {
    *   The name of the test entity.
    * @param \Drupal\Core\Entity\EntityInterface[] $referenced_entities
    *   An array of referenced entities.
+   *
+   * @internal
    */
-  protected function assertFieldValues($entity_name, $referenced_entities) {
+  protected function assertFieldValues(string $entity_name, array $referenced_entities): void {
     $entity = current($this->container->get('entity_type.manager')->getStorage(
     $this->entityType)->loadByProperties(['name' => $entity_name]));
 
diff --git a/core/modules/field/tests/src/Functional/Number/NumberFieldTest.php b/core/modules/field/tests/src/Functional/Number/NumberFieldTest.php
index 595aba8e22c8..98253c179f95 100644
--- a/core/modules/field/tests/src/Functional/Number/NumberFieldTest.php
+++ b/core/modules/field/tests/src/Functional/Number/NumberFieldTest.php
@@ -4,6 +4,7 @@
 
 use Drupal\field\Entity\FieldConfig;
 use Drupal\field\Entity\FieldStorageConfig;
+use Drupal\field\FieldConfigInterface;
 use Drupal\Tests\BrowserTestBase;
 
 /**
@@ -426,8 +427,10 @@ public function testCreateNumberDecimalField() {
 
   /**
    * Helper function to set the minimum value of a field.
+   *
+   * @internal
    */
-  public function assertSetMinimumValue($field, $minimum_value) {
+  public function assertSetMinimumValue(FieldConfigInterface $field, int $minimum_value): void {
     $field_configuration_url = 'entity_test/structure/entity_test/fields/entity_test.entity_test.' . $field->getName();
 
     // Set the minimum value.
diff --git a/core/modules/field/tests/src/FunctionalJavascript/EntityReference/EntityReferenceAdminTest.php b/core/modules/field/tests/src/FunctionalJavascript/EntityReference/EntityReferenceAdminTest.php
index 3273c7a15321..f19f4ed37c41 100644
--- a/core/modules/field/tests/src/FunctionalJavascript/EntityReference/EntityReferenceAdminTest.php
+++ b/core/modules/field/tests/src/FunctionalJavascript/EntityReference/EntityReferenceAdminTest.php
@@ -352,8 +352,10 @@ public function testFieldAdminHandler() {
    *   The field name.
    * @param array $expected_options
    *   An array of expected options.
+   *
+   * @internal
    */
-  protected function assertFieldSelectOptions($name, array $expected_options) {
+  protected function assertFieldSelectOptions(string $name, array $expected_options): void {
     $field = $this->assertSession()->selectExists($name);
     $options = $field->findAll('xpath', 'option');
     $optgroups = $field->findAll('xpath', 'optgroup');
diff --git a/core/modules/field/tests/src/Kernel/EntityReference/Views/SelectionTest.php b/core/modules/field/tests/src/Kernel/EntityReference/Views/SelectionTest.php
index 58c1594ef65f..2e0b3a102340 100644
--- a/core/modules/field/tests/src/Kernel/EntityReference/Views/SelectionTest.php
+++ b/core/modules/field/tests/src/Kernel/EntityReference/Views/SelectionTest.php
@@ -150,8 +150,10 @@ public function testAnchorTagStripping() {
    *
    * @param array $result
    *   Query results keyed by node type and nid.
+   *
+   * @internal
    */
-  protected function assertResults(array $result) {
+  protected function assertResults(array $result): void {
     foreach ($result as $node_type => $values) {
       foreach ($values as $nid => $label) {
         $this->assertSame($node_type, $this->nodes[$nid]->bundle());
diff --git a/core/modules/field/tests/src/Kernel/Migrate/d6/MigrateFieldFormatterSettingsTest.php b/core/modules/field/tests/src/Kernel/Migrate/d6/MigrateFieldFormatterSettingsTest.php
index b78961183c80..83fac6e47f23 100644
--- a/core/modules/field/tests/src/Kernel/Migrate/d6/MigrateFieldFormatterSettingsTest.php
+++ b/core/modules/field/tests/src/Kernel/Migrate/d6/MigrateFieldFormatterSettingsTest.php
@@ -34,8 +34,10 @@ protected function setUp(): void {
    *   The display ID.
    * @param string $component_id
    *   The component ID.
+   *
+   * @internal
    */
-  protected function assertComponentNotExists($display_id, $component_id) {
+  protected function assertComponentNotExists(string $display_id, string $component_id): void {
     $component = EntityViewDisplay::load($display_id)->getComponent($component_id);
     $this->assertNull($component);
   }
diff --git a/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldFormatterSettingsTest.php b/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldFormatterSettingsTest.php
index 162039c390df..3df1b43de0b9 100644
--- a/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldFormatterSettingsTest.php
+++ b/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldFormatterSettingsTest.php
@@ -43,8 +43,10 @@ protected function setUp(): void {
    *
    * @param string $id
    *   The view display ID.
+   *
+   * @internal
    */
-  protected function assertEntity($id) {
+  protected function assertEntity(string $id): void {
     $display = EntityViewDisplay::load($id);
     $this->assertInstanceOf(EntityViewDisplayInterface::class, $display);
   }
@@ -62,8 +64,10 @@ protected function assertEntity($id) {
    *   The expected label of the component.
    * @param int $weight
    *   The expected weight of the component.
+   *
+   * @internal
    */
-  protected function assertComponent($display_id, $component_id, $type, $label, $weight) {
+  protected function assertComponent(string $display_id, string $component_id, string $type, string $label, int $weight): void {
     $component = EntityViewDisplay::load($display_id)->getComponent($component_id);
     $this->assertIsArray($component);
     $this->assertSame($type, $component['type']);
@@ -78,8 +82,10 @@ protected function assertComponent($display_id, $component_id, $type, $label, $w
    *   The display ID.
    * @param string $component_id
    *   The component ID.
+   *
+   * @internal
    */
-  protected function assertComponentNotExists($display_id, $component_id) {
+  protected function assertComponentNotExists(string $display_id, string $component_id): void {
     $component = EntityViewDisplay::load($display_id)->getComponent($component_id);
     $this->assertNull($component);
   }
diff --git a/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceTest.php b/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceTest.php
index 31264bcde6bf..8679f83f6dcc 100644
--- a/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceTest.php
+++ b/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceTest.php
@@ -50,8 +50,10 @@ protected function setUp(): void {
    *   Whether or not the field is required.
    * @param bool $expected_translatable
    *   Whether or not the field is expected to be translatable.
+   *
+   * @internal
    */
-  protected function assertEntity($id, $expected_label, $expected_field_type, $is_required, $expected_translatable) {
+  protected function assertEntity(string $id, string $expected_label, string $expected_field_type, bool $is_required, bool $expected_translatable): void {
     [$expected_entity_type, $expected_bundle, $expected_name] = explode('.', $id);
 
     /** @var \Drupal\field\FieldConfigInterface $field */
@@ -70,12 +72,14 @@ protected function assertEntity($id, $expected_label, $expected_field_type, $is_
   /**
    * Asserts the settings of a link field config entity.
    *
-   * @param $id
+   * @param string $id
    *   The entity ID in the form ENTITY_TYPE.BUNDLE.FIELD_NAME.
-   * @param $title_setting
+   * @param int $title_setting
    *   The expected title setting.
+   *
+   * @internal
    */
-  protected function assertLinkFields($id, $title_setting) {
+  protected function assertLinkFields(string $id, int $title_setting): void {
     $field = FieldConfig::load($id);
     $this->assertSame($title_setting, $field->getSetting('title'));
   }
@@ -87,8 +91,10 @@ protected function assertLinkFields($id, $title_setting) {
    *   The entity ID in the form ENTITY_TYPE.BUNDLE.FIELD_NAME.
    * @param string[] $target_bundles
    *   An array of expected target bundles.
+   *
+   * @internal
    */
-  protected function assertEntityReferenceFields($id, array $target_bundles) {
+  protected function assertEntityReferenceFields(string $id, array $target_bundles): void {
     $field = FieldConfig::load($id);
     $handler_settings = $field->getSetting('handler_settings');
     $this->assertArrayHasKey('target_bundles', $handler_settings);
diff --git a/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceWidgetSettingsTest.php b/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceWidgetSettingsTest.php
index f04f1e5c0297..bf0226773134 100644
--- a/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceWidgetSettingsTest.php
+++ b/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldInstanceWidgetSettingsTest.php
@@ -49,8 +49,10 @@ protected function setUp(): void {
    *   The expected entity type to which the display settings are attached.
    * @param string $expected_bundle
    *   The expected bundle to which the display settings are attached.
+   *
+   * @internal
    */
-  protected function assertEntity($id, $expected_entity_type, $expected_bundle) {
+  protected function assertEntity(string $id, string $expected_entity_type, string $expected_bundle): void {
     /** @var \Drupal\Core\Entity\Display\EntityFormDisplayInterface $entity */
     $entity = EntityFormDisplay::load($id);
     $this->assertInstanceOf(EntityFormDisplayInterface::class, $entity);
@@ -67,10 +69,12 @@ protected function assertEntity($id, $expected_entity_type, $expected_bundle) {
    *   The component ID.
    * @param string $widget_type
    *   The expected widget type.
-   * @param string $weight
+   * @param int $weight
    *   The expected weight of the component.
+   *
+   * @internal
    */
-  protected function assertComponent($display_id, $component_id, $widget_type, $weight) {
+  protected function assertComponent(string $display_id, string $component_id, string $widget_type, int $weight): void {
     $component = EntityFormDisplay::load($display_id)->getComponent($component_id);
     $this->assertIsArray($component);
     $this->assertSame($widget_type, $component['type']);
diff --git a/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldTest.php b/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldTest.php
index a08996a480ea..cdc96c455bc0 100644
--- a/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldTest.php
+++ b/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateFieldTest.php
@@ -42,8 +42,10 @@ class MigrateFieldTest extends MigrateDrupal7TestBase {
    *   Whether or not the field is expected to be translatable.
    * @param int $expected_cardinality
    *   The expected cardinality of the field.
+   *
+   * @internal
    */
-  protected function assertEntity($id, $expected_type, $expected_translatable, $expected_cardinality) {
+  protected function assertEntity(string $id, string $expected_type, bool $expected_translatable, int $expected_cardinality): void {
     [$expected_entity_type, $expected_name] = explode('.', $id);
 
     /** @var \Drupal\field\FieldStorageConfigInterface $field */
diff --git a/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateViewModesTest.php b/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateViewModesTest.php
index 4bdd5f5897c1..1e7229481574 100644
--- a/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateViewModesTest.php
+++ b/core/modules/field/tests/src/Kernel/Migrate/d7/MigrateViewModesTest.php
@@ -34,8 +34,10 @@ protected function setUp(): void {
    *   The expected label of the view mode.
    * @param string $entity_type
    *   The expected entity type ID which owns the view mode.
+   *
+   * @internal
    */
-  protected function assertEntity($id, $label, $entity_type) {
+  protected function assertEntity(string $id, string $label, string $entity_type): void {
     /** @var \Drupal\Core\Entity\EntityViewModeInterface $view_mode */
     $view_mode = EntityViewMode::load($id);
     $this->assertInstanceOf(EntityViewModeInterface::class, $view_mode);
diff --git a/core/modules/field/tests/src/Unit/FieldStorageConfigAccessControlHandlerTest.php b/core/modules/field/tests/src/Unit/FieldStorageConfigAccessControlHandlerTest.php
index f613d08cd18b..fc94687a725d 100644
--- a/core/modules/field/tests/src/Unit/FieldStorageConfigAccessControlHandlerTest.php
+++ b/core/modules/field/tests/src/Unit/FieldStorageConfigAccessControlHandlerTest.php
@@ -164,8 +164,10 @@ protected function setUp(): void {
    *   A list of allowed operations.
    * @param \Drupal\Core\Session\AccountInterface $user
    *   The account to use for get access.
+   *
+   * @internal
    */
-  public function assertAllowOperations(array $allow_operations, AccountInterface $user) {
+  public function assertAllowOperations(array $allow_operations, AccountInterface $user): void {
     foreach (['view', 'update', 'delete'] as $operation) {
       $expected = in_array($operation, $allow_operations);
       $actual = $this->accessControlHandler->access($this->entity, $operation, $user);
diff --git a/core/modules/field_layout/tests/src/FunctionalJavascript/FieldLayoutTest.php b/core/modules/field_layout/tests/src/FunctionalJavascript/FieldLayoutTest.php
index 7ad41defd3c1..467114bc7254 100644
--- a/core/modules/field_layout/tests/src/FunctionalJavascript/FieldLayoutTest.php
+++ b/core/modules/field_layout/tests/src/FunctionalJavascript/FieldLayoutTest.php
@@ -306,8 +306,10 @@ protected function getRegionTitles() {
    *   The field selector, one of field id|name|label|value.
    * @param string $region_name
    *   The machine name of the region.
+   *
+   * @internal
    */
-  protected function assertFieldInRegion($field_selector, $region_name) {
+  protected function assertFieldInRegion(string $field_selector, string $region_name): void {
     $region_element = $this->getSession()->getPage()->find('css', ".layout__region--$region_name");
     $this->assertNotNull($region_element);
     $this->assertSession()->fieldExists($field_selector, $region_element);
diff --git a/core/modules/field_layout/tests/src/Kernel/FieldLayoutEntityDisplayTest.php b/core/modules/field_layout/tests/src/Kernel/FieldLayoutEntityDisplayTest.php
index 0042c7b0585a..3232d45ce829 100644
--- a/core/modules/field_layout/tests/src/Kernel/FieldLayoutEntityDisplayTest.php
+++ b/core/modules/field_layout/tests/src/Kernel/FieldLayoutEntityDisplayTest.php
@@ -175,14 +175,16 @@ public function testPreSave() {
   /**
    * Asserts than an entity has the correct values.
    *
-   * @param mixed $expected
+   * @param array $expected
    *   The expected values.
    * @param array $values
    *   The actual values.
    * @param string $message
    *   (optional) An error message.
+   *
+   * @internal
    */
-  public static function assertEntityValues($expected, array $values, $message = '') {
+  public static function assertEntityValues(array $expected, array $values, string $message = ''): void {
 
     static::assertArrayHasKey('uuid', $values);
     unset($values['uuid']);
diff --git a/core/modules/field_ui/tests/src/Functional/FieldUIRouteTest.php b/core/modules/field_ui/tests/src/Functional/FieldUIRouteTest.php
index 5c073ae73900..ea72a387a13b 100644
--- a/core/modules/field_ui/tests/src/Functional/FieldUIRouteTest.php
+++ b/core/modules/field_ui/tests/src/Functional/FieldUIRouteTest.php
@@ -108,8 +108,10 @@ public function testFieldUIRoutes() {
 
   /**
    * Asserts that local tasks exists.
+   *
+   * @internal
    */
-  public function assertLocalTasks() {
+  public function assertLocalTasks(): void {
     $this->assertSession()->linkExists('Settings');
     $this->assertSession()->linkExists('Manage fields');
     $this->assertSession()->linkExists('Manage display');
diff --git a/core/modules/field_ui/tests/src/Functional/ManageDisplayTest.php b/core/modules/field_ui/tests/src/Functional/ManageDisplayTest.php
index d0cbe7fba862..864733e8b399 100644
--- a/core/modules/field_ui/tests/src/Functional/ManageDisplayTest.php
+++ b/core/modules/field_ui/tests/src/Functional/ManageDisplayTest.php
@@ -220,18 +220,17 @@ public function testNoFieldsDisplayOverview() {
    *
    * @param \Drupal\Core\Entity\EntityInterface $node
    *   The node.
-   * @param $view_mode
+   * @param string $view_mode
    *   The view mode in which the node should be displayed.
-   * @param $text
+   * @param string $text
    *   Plain text to look for.
-   * @param $message
+   * @param string $message
    *   Message to display.
    *
-   * @return
-   *   TRUE on pass, FALSE on fail.
+   * @internal
    */
-  public function assertNodeViewText(EntityInterface $node, $view_mode, $text, $message) {
-    return $this->assertNodeViewTextHelper($node, $view_mode, $text, $message, FALSE);
+  public function assertNodeViewText(EntityInterface $node, string $view_mode, string $text, string $message): void {
+    $this->assertNodeViewTextHelper($node, $view_mode, $text, $message, FALSE);
   }
 
   /**
@@ -239,18 +238,17 @@ public function assertNodeViewText(EntityInterface $node, $view_mode, $text, $me
    *
    * @param \Drupal\Core\Entity\EntityInterface $node
    *   The node.
-   * @param $view_mode
+   * @param string $view_mode
    *   The view mode in which the node should be displayed.
-   * @param $text
+   * @param string $text
    *   Plain text to look for.
-   * @param $message
+   * @param string $message
    *   Message to display.
    *
-   * @return
-   *   TRUE on pass, FALSE on fail.
+   * @internal
    */
-  public function assertNodeViewNoText(EntityInterface $node, $view_mode, $text, $message) {
-    return $this->assertNodeViewTextHelper($node, $view_mode, $text, $message, TRUE);
+  public function assertNodeViewNoText(EntityInterface $node, string $view_mode, string $text, string $message): void {
+    $this->assertNodeViewTextHelper($node, $view_mode, $text, $message, TRUE);
   }
 
   /**
@@ -261,16 +259,18 @@ public function assertNodeViewNoText(EntityInterface $node, $view_mode, $text, $
    *
    * @param \Drupal\Core\Entity\EntityInterface $node
    *   The node.
-   * @param $view_mode
+   * @param string $view_mode
    *   The view mode in which the node should be displayed.
-   * @param $text
+   * @param string $text
    *   Plain text to look for.
-   * @param $message
+   * @param string $message
    *   Message to display.
-   * @param $not_exists
+   * @param bool $not_exists
    *   TRUE if this text should not exist, FALSE if it should.
+   *
+   * @internal
    */
-  public function assertNodeViewTextHelper(EntityInterface $node, $view_mode, $text, $message, $not_exists) {
+  public function assertNodeViewTextHelper(EntityInterface $node, string $view_mode, string $text, string $message, bool $not_exists): void {
     // Make sure caches on the tester side are refreshed after changes
     // submitted on the tested side.
     \Drupal::service('entity_field.manager')->clearCachedFieldDefinitions();
@@ -297,8 +297,10 @@ public function assertNodeViewTextHelper(EntityInterface $node, $view_mode, $tex
    *   The field name.
    * @param array $expected_options
    *   An array of expected options.
+   *
+   * @internal
    */
-  protected function assertFieldSelectOptions($name, array $expected_options) {
+  protected function assertFieldSelectOptions(string $name, array $expected_options): void {
     $xpath = $this->assertSession()->buildXPathQuery('//select[@name=:name]', [':name' => $name]);
     $fields = $this->xpath($xpath);
     if ($fields) {
diff --git a/core/modules/field_ui/tests/src/Functional/ManageFieldsFunctionalTest.php b/core/modules/field_ui/tests/src/Functional/ManageFieldsFunctionalTest.php
index 1d54d2847135..1cc2b5adb848 100644
--- a/core/modules/field_ui/tests/src/Functional/ManageFieldsFunctionalTest.php
+++ b/core/modules/field_ui/tests/src/Functional/ManageFieldsFunctionalTest.php
@@ -439,16 +439,18 @@ protected function addPersistentFieldStorage() {
   /**
    * Asserts field settings are as expected.
    *
-   * @param $bundle
+   * @param string $bundle
    *   The bundle name for the field.
-   * @param $field_name
+   * @param string $field_name
    *   The field name for the field.
-   * @param $string
+   * @param string $string
    *   The settings text.
-   * @param $entity_type
+   * @param string $entity_type
    *   The entity type for the field.
+   *
+   * @internal
    */
-  public function assertFieldSettings($bundle, $field_name, $string = 'dummy test string', $entity_type = 'node') {
+  public function assertFieldSettings(string $bundle, string $field_name, string $string = 'dummy test string', string $entity_type = 'node'): void {
     // Assert field storage settings.
     $field_storage = FieldStorageConfig::loadByName($entity_type, $field_name);
     $this->assertSame($string, $field_storage->getSetting('test_field_storage_setting'), 'Field storage settings were found.');
diff --git a/core/modules/field_ui/tests/src/FunctionalJavascript/ManageDisplayTest.php b/core/modules/field_ui/tests/src/FunctionalJavascript/ManageDisplayTest.php
index c0ee1aff261e..97489fb8fcbf 100644
--- a/core/modules/field_ui/tests/src/FunctionalJavascript/ManageDisplayTest.php
+++ b/core/modules/field_ui/tests/src/FunctionalJavascript/ManageDisplayTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\field_ui\FunctionalJavascript;
 
+use Behat\Mink\Element\NodeElement;
 use Drupal\Core\Entity\Entity\EntityFormDisplay;
 use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
 
@@ -387,10 +388,12 @@ public function testWidgetUI() {
    *   The select field to validate.
    * @param array $expected_options
    *   An array of expected options.
-   * @param null $selected
+   * @param string|null $selected
    *   The default value to validate.
+   *
+   * @internal
    */
-  protected function assertFieldSelectOptions($field, array $expected_options, $selected = NULL) {
+  protected function assertFieldSelectOptions(NodeElement $field, array $expected_options, ?string $selected = NULL): void {
     /** @var \Behat\Mink\Element\NodeElement[] $select_options */
     $select_options = $field->findAll('xpath', 'option');
 
diff --git a/core/modules/field_ui/tests/src/Kernel/EntityDisplayTest.php b/core/modules/field_ui/tests/src/Kernel/EntityDisplayTest.php
index 84ad60cd3c0b..358c1f04e15b 100644
--- a/core/modules/field_ui/tests/src/Kernel/EntityDisplayTest.php
+++ b/core/modules/field_ui/tests/src/Kernel/EntityDisplayTest.php
@@ -649,11 +649,10 @@ public function testComponentDependencies() {
    * @param \Drupal\Core\Entity\Display\EntityDisplayInterface $display
    *   The entity display object to get dependencies from.
    *
-   * @return bool
-   *   TRUE if the assertion succeeded, FALSE otherwise.
+   * @internal
    */
-  protected function assertDependency($type, $key, EntityDisplayInterface $display) {
-    return $this->assertDependencyHelper(TRUE, $type, $key, $display);
+  protected function assertDependency(string $type, string $key, EntityDisplayInterface $display): void {
+    $this->assertDependencyHelper(TRUE, $type, $key, $display);
   }
 
   /**
@@ -666,11 +665,10 @@ protected function assertDependency($type, $key, EntityDisplayInterface $display
    * @param \Drupal\Core\Entity\Display\EntityDisplayInterface $display
    *   The entity display object to get dependencies from.
    *
-   * @return bool
-   *   TRUE if the assertion succeeded, FALSE otherwise.
+   * @internal
    */
-  protected function assertNoDependency($type, $key, EntityDisplayInterface $display) {
-    return $this->assertDependencyHelper(FALSE, $type, $key, $display);
+  protected function assertNoDependency(string $type, string $key, EntityDisplayInterface $display): void {
+    $this->assertDependencyHelper(FALSE, $type, $key, $display);
   }
 
   /**
@@ -685,10 +683,9 @@ protected function assertNoDependency($type, $key, EntityDisplayInterface $displ
    * @param \Drupal\Core\Entity\Display\EntityDisplayInterface $display
    *   The entity display object to get dependencies from.
    *
-   * @return bool
-   *   TRUE if the assertion succeeded.
+   * @internal
    */
-  protected function assertDependencyHelper($assertion, $type, $key, EntityDisplayInterface $display) {
+  protected function assertDependencyHelper(bool $assertion, string $type, string $key, EntityDisplayInterface $display): void {
     $all_dependencies = $display->getDependencies();
     $dependencies = !empty($all_dependencies[$type]) ? $all_dependencies[$type] : [];
     $context = $display instanceof EntityViewDisplayInterface ? 'View' : 'Form';
@@ -696,7 +693,6 @@ protected function assertDependencyHelper($assertion, $type, $key, EntityDisplay
     $args = ['@context' => $context, '@id' => $display->id(), '@type' => $type, '@key' => $key];
     $message = $assertion ? new FormattableMarkup("@context display '@id' depends on @type '@key'.", $args) : new FormattableMarkup("@context display '@id' do not depend on @type '@key'.", $args);
     $this->assertTrue($value, $message);
-    return TRUE;
   }
 
 }
diff --git a/core/modules/file/tests/src/Functional/FileFieldPathTest.php b/core/modules/file/tests/src/Functional/FileFieldPathTest.php
index f89e9982b8bd..4a139ab7da51 100644
--- a/core/modules/file/tests/src/Functional/FileFieldPathTest.php
+++ b/core/modules/file/tests/src/Functional/FileFieldPathTest.php
@@ -85,8 +85,10 @@ public function testUploadPath() {
    *   Where the file was actually uploaded.
    * @param string $message
    *   The message to display with this assertion.
+   *
+   * @internal
    */
-  public function assertPathMatch($expected_path, $actual_path, $message) {
+  public function assertPathMatch(string $expected_path, string $actual_path, string $message): void {
     // Strip off the extension of the expected path to allow for _0, _1, etc.
     // suffixes when the file hits a duplicate name.
     $pos = strrpos($expected_path, '.');
diff --git a/core/modules/file/tests/src/Kernel/Migrate/d6/MigrateFileTest.php b/core/modules/file/tests/src/Kernel/Migrate/d6/MigrateFileTest.php
index 29f4914fa766..9141f031a706 100644
--- a/core/modules/file/tests/src/Kernel/Migrate/d6/MigrateFileTest.php
+++ b/core/modules/file/tests/src/Kernel/Migrate/d6/MigrateFileTest.php
@@ -49,26 +49,28 @@ protected function setUp(): void {
    *   The expected MIME type.
    * @param int $uid
    *   The expected file owner ID.
+   *
+   * @internal
    */
-  protected function assertEntity($fid, $name, $size, $uri, $type, $uid) {
+  protected function assertEntity(int $fid, string $name, int $size, string $uri, string $type, int $uid): void {
     /** @var \Drupal\file\FileInterface $file */
     $file = File::load($fid);
     $this->assertInstanceOf(FileInterface::class, $file);
     $this->assertSame($name, $file->getFilename());
-    $this->assertSame($size, $file->getSize());
+    $this->assertSame($size, (int) $file->getSize());
     $this->assertSame($uri, $file->getFileUri());
     $this->assertSame($type, $file->getMimeType());
-    $this->assertSame($uid, $file->getOwnerId());
+    $this->assertSame($uid, (int) $file->getOwnerId());
   }
 
   /**
    * Tests the Drupal 6 files to Drupal 8 migration.
    */
   public function testFiles() {
-    $this->assertEntity(1, 'Image1.png', '39325', 'public://image-1.png', 'image/png', '1');
-    $this->assertEntity(2, 'Image2.jpg', '1831', 'public://image-2.jpg', 'image/jpeg', '1');
-    $this->assertEntity(3, 'image-3.jpg', '1831', 'public://image-3.jpg', 'image/jpeg', '1');
-    $this->assertEntity(4, 'html-1.txt', '24', 'public://html-1.txt', 'text/plain', '1');
+    $this->assertEntity(1, 'Image1.png', 39325, 'public://image-1.png', 'image/png', 1);
+    $this->assertEntity(2, 'Image2.jpg', 1831, 'public://image-2.jpg', 'image/jpeg', 1);
+    $this->assertEntity(3, 'image-3.jpg', 1831, 'public://image-3.jpg', 'image/jpeg', 1);
+    $this->assertEntity(4, 'html-1.txt', 24, 'public://html-1.txt', 'text/plain', 1);
     // Ensure temporary file was not migrated.
     $this->assertNull(File::load(6));
 
diff --git a/core/modules/filter/tests/src/Functional/FilterFormTest.php b/core/modules/filter/tests/src/Functional/FilterFormTest.php
index e7f9247e0680..bfe9f2bb631d 100644
--- a/core/modules/filter/tests/src/Functional/FilterFormTest.php
+++ b/core/modules/filter/tests/src/Functional/FilterFormTest.php
@@ -175,8 +175,10 @@ protected function doFilterFormTestAsNonAdmin() {
    *
    * @param string $id
    *   The HTML ID of the select element.
+   *
+   * @internal
    */
-  protected function assertNoSelect($id) {
+  protected function assertNoSelect(string $id): void {
     $this->assertSession()->elementNotExists('xpath', "//select[@id=$id]");
   }
 
@@ -190,10 +192,9 @@ protected function assertNoSelect($id) {
    * @param string $selected
    *   The value of the selected option.
    *
-   * @return bool
-   *   TRUE if the assertion passed; FALSE otherwise.
+   * @internal
    */
-  protected function assertOptions($id, array $expected_options, $selected) {
+  protected function assertOptions(string $id, array $expected_options, string $selected): void {
     $select = $this->assertSession()->selectExists($id);
     $found_options = $select->findAll('css', 'option');
     $found_options = array_map(function ($item) {
@@ -212,10 +213,9 @@ protected function assertOptions($id, array $expected_options, $selected) {
    *   An array of option values that are contained in the select element
    *   besides the "- Select -" option.
    *
-   * @return bool
-   *   TRUE if the assertion passed; FALSE otherwise.
+   * @internal
    */
-  protected function assertRequiredSelectAndOptions($id, array $options) {
+  protected function assertRequiredSelectAndOptions(string $id, array $options): void {
     $select = $this->assertSession()->selectExists($id);
     $this->assertSame('required', $select->getAttribute('required'));
     // A required select element has a "- Select -" option whose key is an empty
@@ -230,10 +230,9 @@ protected function assertRequiredSelectAndOptions($id, array $options) {
    * @param string $id
    *   The HTML ID of the textarea.
    *
-   * @return bool
-   *   TRUE if the assertion passed; FALSE otherwise.
+   * @internal
    */
-  protected function assertEnabledTextarea($id) {
+  protected function assertEnabledTextarea(string $id): void {
     $textarea = $this->assertSession()->fieldEnabled($id);
     $this->assertSame('textarea', $textarea->getTagName());
   }
@@ -244,10 +243,9 @@ protected function assertEnabledTextarea($id) {
    * @param string $id
    *   The HTML ID of the textarea.
    *
-   * @return bool
-   *   TRUE if the assertion passed; FALSE otherwise.
+   * @internal
    */
-  protected function assertDisabledTextarea($id) {
+  protected function assertDisabledTextarea(string $id): void {
     $textarea = $this->assertSession()->fieldDisabled($id);
     $this->assertSame('textarea', $textarea->getTagName());
     $this->assertSame('This field has been disabled because you do not have sufficient permissions to edit it.', $textarea->getText());
diff --git a/core/modules/filter/tests/src/Kernel/FilterAPITest.php b/core/modules/filter/tests/src/Kernel/FilterAPITest.php
index 76255f6f7ebd..34a2ed13f406 100644
--- a/core/modules/filter/tests/src/Kernel/FilterAPITest.php
+++ b/core/modules/filter/tests/src/Kernel/FilterAPITest.php
@@ -430,10 +430,12 @@ public function testFilterFormatPreSave() {
    *
    * @param \Symfony\Component\Validator\ConstraintViolationListInterface $violations
    *   The violations to assert.
-   * @param mixed $invalid_value
+   * @param string $invalid_value
    *   The expected invalid value.
+   *
+   * @internal
    */
-  public function assertFilterFormatViolation(ConstraintViolationListInterface $violations, $invalid_value) {
+  public function assertFilterFormatViolation(ConstraintViolationListInterface $violations, string $invalid_value): void {
     $filter_format_violation_found = FALSE;
     foreach ($violations as $violation) {
       if ($violation->getRoot() instanceof FilterFormatDataType && $violation->getInvalidValue() === $invalid_value) {
diff --git a/core/modules/filter/tests/src/Kernel/FilterKernelTest.php b/core/modules/filter/tests/src/Kernel/FilterKernelTest.php
index f51f86a6710d..c7f9b5fadfb8 100644
--- a/core/modules/filter/tests/src/Kernel/FilterKernelTest.php
+++ b/core/modules/filter/tests/src/Kernel/FilterKernelTest.php
@@ -9,6 +9,7 @@
 use Drupal\editor\EditorXssFilter\Standard;
 use Drupal\filter\Entity\FilterFormat;
 use Drupal\filter\FilterPluginCollection;
+use Drupal\filter\Plugin\FilterInterface;
 use Drupal\KernelTests\KernelTestBase;
 
 /**
@@ -860,7 +861,7 @@ public function testUrlFilter() {
   /**
    * Asserts multiple filter output expectations for multiple input strings.
    *
-   * @param FilterInterface $filter
+   * @param \Drupal\filter\Plugin\FilterInterface $filter
    *   An input filter object.
    * @param array $tests
    *   An associative array, whereas each key is an arbitrary input string and
@@ -875,8 +876,10 @@ public function testUrlFilter() {
    *     ),
    *   );
    *   @endcode
+   *
+   * @internal
    */
-  public function assertFilteredString($filter, $tests) {
+  public function assertFilteredString(FilterInterface $filter, array $tests): void {
     foreach ($tests as $source => $tasks) {
       $result = $filter->process($source, $filter)->getProcessedText();
       foreach ($tasks as $value => $is_expected) {
@@ -1141,8 +1144,10 @@ public function testHtmlCorrectorFilter() {
    *   (optional) Message to display if failed. Defaults to an empty string.
    * @param string $group
    *   (optional) The group this message belongs to. Defaults to 'Other'.
+   *
+   * @internal
    */
-  public function assertNormalized($haystack, $needle, $message = '', $group = 'Other') {
+  public function assertNormalized(string $haystack, string $needle, string $message = '', string $group = 'Other'): void {
     $this->assertStringContainsString($needle, strtolower(Html::decodeEntities($haystack)), $message);
   }
 
@@ -1163,8 +1168,10 @@ public function assertNormalized($haystack, $needle, $message = '', $group = 'Ot
    *   (optional) Message to display if failed. Defaults to an empty string.
    * @param string $group
    *   (optional) The group this message belongs to. Defaults to 'Other'.
+   *
+   * @internal
    */
-  public function assertNoNormalized($haystack, $needle, $message = '', $group = 'Other') {
+  public function assertNoNormalized(string $haystack, string $needle, string $message = '', string $group = 'Other'): void {
     $this->assertStringNotContainsString($needle, strtolower(Html::decodeEntities($haystack)), $message);
   }
 
diff --git a/core/modules/filter/tests/src/Kernel/Migrate/d7/MigrateFilterFormatTest.php b/core/modules/filter/tests/src/Kernel/Migrate/d7/MigrateFilterFormatTest.php
index c32885eae14b..72fd8dcd6213 100644
--- a/core/modules/filter/tests/src/Kernel/Migrate/d7/MigrateFilterFormatTest.php
+++ b/core/modules/filter/tests/src/Kernel/Migrate/d7/MigrateFilterFormatTest.php
@@ -67,8 +67,10 @@ public static function migrateDumpAlter(KernelTestBase $test) {
    *   The weight of the filter.
    * @param bool $status
    *   The status of the filter.
+   *
+   * @internal
    */
-  protected function assertEntity($id, $label, array $enabled_filters, $weight, $status) {
+  protected function assertEntity(string $id, string $label, array $enabled_filters, int $weight, bool $status): void {
     /** @var \Drupal\filter\FilterFormatInterface $entity */
     $entity = FilterFormat::load($id);
     $this->assertInstanceOf(FilterFormatInterface::class, $entity);
diff --git a/core/modules/help_topics/tests/src/Functional/HelpTopicSearchTest.php b/core/modules/help_topics/tests/src/Functional/HelpTopicSearchTest.php
index 84e34b3af4fe..4aac99d5bd07 100644
--- a/core/modules/help_topics/tests/src/Functional/HelpTopicSearchTest.php
+++ b/core/modules/help_topics/tests/src/Functional/HelpTopicSearchTest.php
@@ -290,8 +290,10 @@ public function testUninstallSearch() {
    *
    * @param int $count
    *   The expected number of search results.
+   *
+   * @internal
    */
-  protected function assertSearchResultsCount($count) {
+  protected function assertSearchResultsCount(int $count): void {
     $this->assertSession()->elementsCount('css', '.help_search-results > li', $count);
   }
 
diff --git a/core/modules/image/tests/src/Kernel/ImageFormatterTest.php b/core/modules/image/tests/src/Kernel/ImageFormatterTest.php
index da0e59845fe4..0def1eea4163 100644
--- a/core/modules/image/tests/src/Kernel/ImageFormatterTest.php
+++ b/core/modules/image/tests/src/Kernel/ImageFormatterTest.php
@@ -206,8 +206,10 @@ public function testImageFormatterUrlOptions() {
    *   The renderable array. Must have a #cache[tags] element.
    * @param array $cache_tags
    *   The expected cache tags.
+   *
+   * @internal
    */
-  protected function assertCacheTags(array $renderable, array $cache_tags) {
+  protected function assertCacheTags(array $renderable, array $cache_tags): void {
     $diff = array_diff($cache_tags, $renderable['#cache']['tags']);
     $this->assertEmpty($diff);
   }
diff --git a/core/modules/image/tests/src/Kernel/Migrate/d6/MigrateImageCacheTest.php b/core/modules/image/tests/src/Kernel/Migrate/d6/MigrateImageCacheTest.php
index c4e3d5d46c41..89009fd05886 100644
--- a/core/modules/image/tests/src/Kernel/Migrate/d6/MigrateImageCacheTest.php
+++ b/core/modules/image/tests/src/Kernel/Migrate/d6/MigrateImageCacheTest.php
@@ -4,6 +4,7 @@
 
 use Drupal\Core\Database\Database;
 use Drupal\image\Entity\ImageStyle;
+use Drupal\image\ImageEffectPluginCollection;
 use Drupal\migrate\Plugin\MigrationInterface;
 use Drupal\migrate\Exception\RequirementsException;
 use Drupal\Tests\migrate_drupal\Kernel\d6\MigrateDrupal6TestBase;
@@ -141,27 +142,27 @@ public function testInvalidCropValues() {
   /**
    * Assert that a given image effect is migrated.
    *
-   * @param array $collection
+   * @param \Drupal\image\ImageEffectPluginCollection $collection
    *   Collection of effects
-   * @param $id
+   * @param string $id
    *   Id that should exist in the collection.
-   * @param $config
+   * @param array $config
    *   Expected configuration for the collection.
    *
-   * @return bool
+   * @internal
    */
-  protected function assertImageEffect($collection, $id, $config) {
+  protected function assertImageEffect(ImageEffectPluginCollection $collection, string $id, array $config): void {
     /** @var \Drupal\image\ConfigurableImageEffectBase $effect */
     foreach ($collection as $effect) {
       $effect_config = $effect->getConfiguration();
 
       if ($effect_config['id'] == $id && $effect_config['data'] == $config) {
-        // We found this effect so succeed and return.
-        return TRUE;
+        // We found this effect so the assertion is successful.
+        return;
       }
     }
     // The loop did not find the effect so we it was not imported correctly.
-    return $this->fail('Effect ' . $id . ' did not import correctly');
+    $this->fail('Effect ' . $id . ' did not import correctly');
   }
 
 }
diff --git a/core/modules/image/tests/src/Kernel/Migrate/d7/MigrateImageStylesTest.php b/core/modules/image/tests/src/Kernel/Migrate/d7/MigrateImageStylesTest.php
index 11d2a88e14da..df0f6c7d0433 100644
--- a/core/modules/image/tests/src/Kernel/Migrate/d7/MigrateImageStylesTest.php
+++ b/core/modules/image/tests/src/Kernel/Migrate/d7/MigrateImageStylesTest.php
@@ -49,7 +49,7 @@ public function testImageStylesMigration() {
    * @param array $expected_effect_config
    *   An array of expected configuration for each effect in the image style
    */
-  protected function assertEntity($id, $label, array $expected_effect_plugins, array $expected_effect_config) {
+  protected function assertEntity(string $id, string $label, array $expected_effect_plugins, array $expected_effect_config): void {
     $style = ImageStyle::load($id);
     $this->assertInstanceOf(ImageStyleInterface::class, $style);
     /** @var \Drupal\image\ImageStyleInterface $style */
diff --git a/core/modules/jsonapi/tests/src/Functional/FileUploadTest.php b/core/modules/jsonapi/tests/src/Functional/FileUploadTest.php
index 5627ae8a4d1e..a44424b61c40 100644
--- a/core/modules/jsonapi/tests/src/Functional/FileUploadTest.php
+++ b/core/modules/jsonapi/tests/src/Functional/FileUploadTest.php
@@ -910,8 +910,10 @@ protected function setUpAuthorization($method) {
    *   The expected data.
    * @param \Psr\Http\Message\ResponseInterface $response
    *   The file upload response.
+   *
+   * @internal
    */
-  protected function assertResponseData(array $expected, ResponseInterface $response) {
+  protected function assertResponseData(array $expected, ResponseInterface $response): void {
     static::recursiveKSort($expected);
     $actual = Json::decode((string) $response->getBody());
     static::recursiveKSort($actual);
diff --git a/core/modules/jsonapi/tests/src/Functional/NodeTest.php b/core/modules/jsonapi/tests/src/Functional/NodeTest.php
index 3f1418bf4c62..411e0738d6fd 100644
--- a/core/modules/jsonapi/tests/src/Functional/NodeTest.php
+++ b/core/modules/jsonapi/tests/src/Functional/NodeTest.php
@@ -370,8 +370,10 @@ public function testGetIndividual() {
    * Asserts that normalizations are cached in an incremental way.
    *
    * @throws \Drupal\Core\Entity\EntityStorageException
+   *
+   * @internal
    */
-  protected function assertCacheableNormalizations() {
+  protected function assertCacheableNormalizations(): void {
     // Save the entity to invalidate caches.
     $this->entity->save();
     $uuid = $this->entity->uuid();
@@ -407,8 +409,10 @@ protected function assertCacheableNormalizations() {
    *
    * @param string[] $field_names
    *   The field names.
+   *
+   * @internal
    */
-  protected function assertNormalizedFieldsAreCached($field_names) {
+  protected function assertNormalizedFieldsAreCached(array $field_names): void {
     $cache = \Drupal::service('render_cache')->get([
       '#cache' => [
         'keys' => ['node--camelids', $this->entity->uuid()],
diff --git a/core/modules/jsonapi/tests/src/Functional/RestJsonApiUnsupported.php b/core/modules/jsonapi/tests/src/Functional/RestJsonApiUnsupported.php
index e0a79f3f5611..d58bc02b2f70 100644
--- a/core/modules/jsonapi/tests/src/Functional/RestJsonApiUnsupported.php
+++ b/core/modules/jsonapi/tests/src/Functional/RestJsonApiUnsupported.php
@@ -112,7 +112,7 @@ public function testApiJsonNotSupportedInRest() {
   /**
    * {@inheritdoc}
    */
-  protected function assertNormalizationEdgeCases($method, Url $url, array $request_options) {}
+  protected function assertNormalizationEdgeCases($method, Url $url, array $request_options): void {}
 
   /**
    * {@inheritdoc}
diff --git a/core/modules/jsonapi/tests/src/Functional/UserTest.php b/core/modules/jsonapi/tests/src/Functional/UserTest.php
index 21a2d99d0b58..365905b28e6e 100644
--- a/core/modules/jsonapi/tests/src/Functional/UserTest.php
+++ b/core/modules/jsonapi/tests/src/Functional/UserTest.php
@@ -315,8 +315,10 @@ public function testPatchDxForSecuritySensitiveBaseFields() {
    *   The username to log in with.
    * @param string $password
    *   The password to log in with.
+   *
+   * @internal
    */
-  protected function assertRpcLogin($username, $password) {
+  protected function assertRpcLogin(string $username, string $password): void {
     $request_body = [
       'name' => $username,
       'pass' => $password,
diff --git a/core/modules/language/tests/src/Kernel/Migrate/d6/MigrateLanguageContentTaxonomyVocabularySettingsTest.php b/core/modules/language/tests/src/Kernel/Migrate/d6/MigrateLanguageContentTaxonomyVocabularySettingsTest.php
index b7df98402bb3..dc56e20b0543 100644
--- a/core/modules/language/tests/src/Kernel/Migrate/d6/MigrateLanguageContentTaxonomyVocabularySettingsTest.php
+++ b/core/modules/language/tests/src/Kernel/Migrate/d6/MigrateLanguageContentTaxonomyVocabularySettingsTest.php
@@ -66,8 +66,10 @@ public function testLanguageContentTaxonomy() {
    *   The expected state of language alterable.
    * @param array $third_party_settings
    *   The content translation setting.
+   *
+   * @internal
    */
-  public function assertLanguageContentSettings($target_entity, $bundle, $default_langcode, $language_alterable, array $third_party_settings) {
+  public function assertLanguageContentSettings(string $target_entity, string $bundle, string $default_langcode, bool $language_alterable, array $third_party_settings): void {
     $config = ContentLanguageSettings::load($target_entity . "." . $bundle);
     $this->assertInstanceOf(ContentLanguageSettings::class, $config);
     $this->assertSame($target_entity, $config->getTargetEntityTypeId());
diff --git a/core/modules/language/tests/src/Kernel/Migrate/d6/MigrateLanguageTest.php b/core/modules/language/tests/src/Kernel/Migrate/d6/MigrateLanguageTest.php
index 57e0728f5957..957b1e986b13 100644
--- a/core/modules/language/tests/src/Kernel/Migrate/d6/MigrateLanguageTest.php
+++ b/core/modules/language/tests/src/Kernel/Migrate/d6/MigrateLanguageTest.php
@@ -28,8 +28,10 @@ class MigrateLanguageTest extends MigrateDrupal6TestBase {
    *   ConfigurableLanguageInterface). Defaults to LTR.
    * @param int $weight
    *   (optional) The weight of the language. Defaults to 0.
+   *
+   * @internal
    */
-  protected function assertLanguage($id, $label, $direction = ConfigurableLanguageInterface::DIRECTION_LTR, $weight = 0) {
+  protected function assertLanguage(string $id, string $label, string $direction = ConfigurableLanguageInterface::DIRECTION_LTR, int $weight = 0): void {
     /** @var \Drupal\language\ConfigurableLanguageInterface $language */
     $language = ConfigurableLanguage::load($id);
     $this->assertInstanceOf(ConfigurableLanguageInterface::class, $language);
diff --git a/core/modules/language/tests/src/Kernel/Migrate/d7/MigrateLanguageContentTaxonomyVocabularySettingsTest.php b/core/modules/language/tests/src/Kernel/Migrate/d7/MigrateLanguageContentTaxonomyVocabularySettingsTest.php
index 591cb5d9f0e0..2cacadd2394a 100644
--- a/core/modules/language/tests/src/Kernel/Migrate/d7/MigrateLanguageContentTaxonomyVocabularySettingsTest.php
+++ b/core/modules/language/tests/src/Kernel/Migrate/d7/MigrateLanguageContentTaxonomyVocabularySettingsTest.php
@@ -67,8 +67,10 @@ public function testLanguageContentTaxonomy() {
    *   The expected state of language alterable.
    * @param array $third_party_settings
    *   The content translation setting.
+   *
+   * @internal
    */
-  public function assertLanguageContentSettings($target_entity, $bundle, $default_langcode, $language_alterable, array $third_party_settings) {
+  public function assertLanguageContentSettings(string $target_entity, string $bundle, string $default_langcode, bool $language_alterable, array $third_party_settings): void {
     $config = ContentLanguageSettings::load($target_entity . '.' . $bundle);
     $this->assertInstanceOf(ContentLanguageSettings::class, $config);
     $this->assertSame($target_entity, $config->getTargetEntityTypeId());
diff --git a/core/modules/layout_builder/tests/src/Functional/LayoutBuilderAccessTest.php b/core/modules/layout_builder/tests/src/Functional/LayoutBuilderAccessTest.php
index 2f92dbee69f7..dcf482eb8c3c 100644
--- a/core/modules/layout_builder/tests/src/Functional/LayoutBuilderAccessTest.php
+++ b/core/modules/layout_builder/tests/src/Functional/LayoutBuilderAccessTest.php
@@ -279,7 +279,7 @@ public function providerTestAccessWithoutBundles() {
    * @param bool $expected_access
    *   The expected access.
    */
-  private function assertExpectedAccess($expected_access) {
+  private function assertExpectedAccess(bool $expected_access): void {
     $expected_status_code = $expected_access ? 200 : 403;
     $this->assertSession()->statusCodeEquals($expected_status_code);
   }
diff --git a/core/modules/layout_builder/tests/src/Functional/LayoutBuilderTest.php b/core/modules/layout_builder/tests/src/Functional/LayoutBuilderTest.php
index 085942a95489..d4314d7ecbb0 100644
--- a/core/modules/layout_builder/tests/src/Functional/LayoutBuilderTest.php
+++ b/core/modules/layout_builder/tests/src/Functional/LayoutBuilderTest.php
@@ -1452,8 +1452,10 @@ public function testRemovingSectionWithoutLayoutLabel() {
 
   /**
    * Asserts that the correct layouts are available.
+   *
+   * @internal
    */
-  protected function assertCorrectLayouts() {
+  protected function assertCorrectLayouts(): void {
     $assert_session = $this->assertSession();
     // Ensure the layouts provided by layout_builder are available.
     $expected_layouts_hrefs = [
diff --git a/core/modules/layout_builder/tests/src/Functional/LayoutSectionTest.php b/core/modules/layout_builder/tests/src/Functional/LayoutSectionTest.php
index 75fd60283905..c22938cb8b87 100644
--- a/core/modules/layout_builder/tests/src/Functional/LayoutSectionTest.php
+++ b/core/modules/layout_builder/tests/src/Functional/LayoutSectionTest.php
@@ -293,8 +293,10 @@ public function testLayoutDeletingBundle() {
    *   A string of cache tags to be found in the header.
    * @param string $expected_dynamic_cache
    *   The expected dynamic cache header. Either 'HIT', 'MISS' or 'UNCACHEABLE'.
+   *
+   * @internal
    */
-  protected function assertLayoutSection($expected_selector, $expected_content, $expected_cache_contexts = '', $expected_cache_tags = '', $expected_dynamic_cache = 'MISS') {
+  protected function assertLayoutSection($expected_selector, $expected_content, string $expected_cache_contexts = '', string $expected_cache_tags = '', string $expected_dynamic_cache = 'MISS'): void {
     $assert_session = $this->assertSession();
     // Find the given selector.
     foreach ((array) $expected_selector as $selector) {
diff --git a/core/modules/layout_builder/tests/src/FunctionalJavascript/BlockFilterTest.php b/core/modules/layout_builder/tests/src/FunctionalJavascript/BlockFilterTest.php
index d50e1fa400be..d4402a796583 100644
--- a/core/modules/layout_builder/tests/src/FunctionalJavascript/BlockFilterTest.php
+++ b/core/modules/layout_builder/tests/src/FunctionalJavascript/BlockFilterTest.php
@@ -149,8 +149,10 @@ protected function filterVisibleElements(array $elements) {
    *
    * @param string $expected_message
    *   The text expected to be present in #drupal-live-announce.
+   *
+   * @internal
    */
-  protected function assertAnnounceContains($expected_message) {
+  protected function assertAnnounceContains(string $expected_message): void {
     $assert_session = $this->assertSession();
     $this->assertNotEmpty($assert_session->waitForElement('css', "#drupal-live-announce:contains('$expected_message')"));
   }
diff --git a/core/modules/layout_builder/tests/src/FunctionalJavascript/BlockFormMessagesTest.php b/core/modules/layout_builder/tests/src/FunctionalJavascript/BlockFormMessagesTest.php
index 4fccd1c8427e..c5e7c0cb4543 100644
--- a/core/modules/layout_builder/tests/src/FunctionalJavascript/BlockFormMessagesTest.php
+++ b/core/modules/layout_builder/tests/src/FunctionalJavascript/BlockFormMessagesTest.php
@@ -91,8 +91,10 @@ public function testValidationMessage() {
 
   /**
    * Asserts that the validation messages are shown correctly.
+   *
+   * @internal
    */
-  protected function assertMessagesDisplayed() {
+  protected function assertMessagesDisplayed(): void {
     $assert_session = $this->assertSession();
     $page = $this->getSession()->getPage();
     $messages_locator = '#drupal-off-canvas .messages--error';
diff --git a/core/modules/layout_builder/tests/src/FunctionalJavascript/ContentPreviewToggleTest.php b/core/modules/layout_builder/tests/src/FunctionalJavascript/ContentPreviewToggleTest.php
index 01b76696c534..0d472adc8219 100644
--- a/core/modules/layout_builder/tests/src/FunctionalJavascript/ContentPreviewToggleTest.php
+++ b/core/modules/layout_builder/tests/src/FunctionalJavascript/ContentPreviewToggleTest.php
@@ -123,8 +123,10 @@ public function testContentPreviewToggle() {
 
   /**
    * Checks if contextual links are working properly.
+   *
+   * @internal
    */
-  protected function assertContextualLinks() {
+  protected function assertContextualLinks(): void {
     $page = $this->getSession()->getPage();
     $assert_session = $this->assertSession();
 
@@ -141,8 +143,10 @@ protected function assertContextualLinks() {
    *
    * @param string[] $items
    *   An ordered list of strings that should appear in the blocks.
+   *
+   * @internal
    */
-  protected function assertOrderInPage(array $items) {
+  protected function assertOrderInPage(array $items): void {
     $session = $this->getSession();
     $page = $session->getPage();
     $blocks = $page->findAll('css', '[data-layout-content-preview-placeholder-label]');
diff --git a/core/modules/layout_builder/tests/src/FunctionalJavascript/ContextualLinksTest.php b/core/modules/layout_builder/tests/src/FunctionalJavascript/ContextualLinksTest.php
index fc73d5f23feb..948723323374 100644
--- a/core/modules/layout_builder/tests/src/FunctionalJavascript/ContextualLinksTest.php
+++ b/core/modules/layout_builder/tests/src/FunctionalJavascript/ContextualLinksTest.php
@@ -123,8 +123,10 @@ protected function addBlock($block_name) {
 
   /**
    * Asserts the contextual links are correct in Layout Builder UI.
+   *
+   * @internal
    */
-  protected function assertCorrectContextualLinksInUi() {
+  protected function assertCorrectContextualLinksInUi(): void {
     $assert_session = $this->assertSession();
     $page = $this->getSession()->getPage();
     $this->assertNotEmpty($assert_session->waitForElementVisible('css', '.block-views-blocktest-block-view-block-2'));
@@ -139,8 +141,10 @@ protected function assertCorrectContextualLinksInUi() {
 
   /**
    * Asserts the contextual links are correct on the canonical entity route.
+   *
+   * @internal
    */
-  protected function assertCorrectContextualLinksInNode() {
+  protected function assertCorrectContextualLinksInNode(): void {
     $assert_session = $this->assertSession();
     $page = $this->getSession()->getPage();
 
diff --git a/core/modules/layout_builder/tests/src/FunctionalJavascript/InlineBlockPrivateFilesTest.php b/core/modules/layout_builder/tests/src/FunctionalJavascript/InlineBlockPrivateFilesTest.php
index 90bd6a5e7788..5727e9b8a403 100644
--- a/core/modules/layout_builder/tests/src/FunctionalJavascript/InlineBlockPrivateFilesTest.php
+++ b/core/modules/layout_builder/tests/src/FunctionalJavascript/InlineBlockPrivateFilesTest.php
@@ -97,7 +97,7 @@ public function testPrivateFiles() {
     $this->assertSaveLayout();
 
     $this->drupalGet('node/1');
-    $private_href1 = $this->assertFileAccessibleOnNode($file);
+    $private_href1 = $this->getFileHrefAccessibleOnNode($file);
 
     // Remove the inline block with the private file.
     $this->drupalGet('node/1/layout');
@@ -121,7 +121,7 @@ public function testPrivateFiles() {
     $this->assertSaveLayout();
 
     $this->drupalGet('node/1');
-    $private_href2 = $this->assertFileAccessibleOnNode($file2);
+    $private_href2 = $this->getFileHrefAccessibleOnNode($file2);
 
     $this->createNewNodeRevision(1);
 
@@ -131,7 +131,7 @@ public function testPrivateFiles() {
     $this->assertSaveLayout();
 
     $this->drupalGet('node/1');
-    $private_href3 = $this->assertFileAccessibleOnNode($file3);
+    $private_href3 = $this->getFileHrefAccessibleOnNode($file3);
 
     // $file2 is on a previous revision of the block which is on a previous
     // revision of the node. The user does not have access to view the previous
@@ -154,7 +154,7 @@ public function testPrivateFiles() {
     $this->assertSaveLayout();
 
     $this->drupalGet('node/2');
-    $private_href4 = $this->assertFileAccessibleOnNode($file4);
+    $private_href4 = $this->getFileHrefAccessibleOnNode($file4);
 
     $this->createNewNodeRevision(2);
 
@@ -236,7 +236,7 @@ protected function createPrivateFile($file_name) {
   }
 
   /**
-   * Asserts a file is accessible on the page.
+   * Returns the href of a file, asserting it is accessible on the page.
    *
    * @param \Drupal\file\FileInterface $file
    *   The file entity.
@@ -244,17 +244,16 @@ protected function createPrivateFile($file_name) {
    * @return string
    *   The file href.
    */
-  protected function assertFileAccessibleOnNode(FileInterface $file) {
-    $assert_session = $this->assertSession();
+  protected function getFileHrefAccessibleOnNode(FileInterface $file): string {
     $page = $this->getSession()->getPage();
-    $assert_session->linkExists($file->label());
+    $this->assertSession()->linkExists($file->label());
     $private_href = $page->findLink($file->label())->getAttribute('href');
     $page->clickLink($file->label());
-    $assert_session->pageTextContains($this->getFileSecret($file));
+    $this->assertSession()->pageTextContains($this->getFileSecret($file));
 
     // Access file directly.
     $this->drupalGet($private_href);
-    $assert_session->pageTextContains($this->getFileSecret($file));
+    $this->assertSession()->pageTextContains($this->getFileSecret($file));
     return $private_href;
   }
 
diff --git a/core/modules/layout_builder/tests/src/FunctionalJavascript/InlineBlockTest.php b/core/modules/layout_builder/tests/src/FunctionalJavascript/InlineBlockTest.php
index bbcd3cf5127a..773ad3a396a1 100644
--- a/core/modules/layout_builder/tests/src/FunctionalJavascript/InlineBlockTest.php
+++ b/core/modules/layout_builder/tests/src/FunctionalJavascript/InlineBlockTest.php
@@ -316,8 +316,10 @@ public function testInlineBlocksRevisioningIntegrity() {
    *   The revision ID to assert.
    * @param array $content
    *   The content items to assert on the page.
+   *
+   * @internal
    */
-  protected function assertNodeRevisionContent($revision_id, array $content) {
+  protected function assertNodeRevisionContent(int $revision_id, array $content): void {
     $this->drupalGet("node/1/revisions/$revision_id/view");
     foreach ($content as $content_item) {
       $this->assertSession()->pageTextContains($content_item);
@@ -331,8 +333,10 @@ protected function assertNodeRevisionContent($revision_id, array $content) {
    *   The block title.
    * @param int $expected_revision_count
    *   The revision count.
+   *
+   * @internal
    */
-  protected function assertBlockRevisionCountByTitle($block_title, $expected_revision_count) {
+  protected function assertBlockRevisionCountByTitle(string $block_title, int $expected_revision_count): void {
     $actual_revision_count = $this->blockStorage->getQuery()
       ->accessCheck(FALSE)
       ->condition('info', $block_title)
diff --git a/core/modules/layout_builder/tests/src/FunctionalJavascript/LayoutBuilderDisableInteractionsTest.php b/core/modules/layout_builder/tests/src/FunctionalJavascript/LayoutBuilderDisableInteractionsTest.php
index 773715c932e3..083b9682a3dc 100644
--- a/core/modules/layout_builder/tests/src/FunctionalJavascript/LayoutBuilderDisableInteractionsTest.php
+++ b/core/modules/layout_builder/tests/src/FunctionalJavascript/LayoutBuilderDisableInteractionsTest.php
@@ -173,8 +173,10 @@ protected function addBlock($block_link_text, $rendered_locator) {
    *
    * @param \Behat\Mink\Element\NodeElement $element
    *   Element being checked for.
+   *
+   * @internal
    */
-  protected function assertElementUnclickable(NodeElement $element) {
+  protected function assertElementUnclickable(NodeElement $element): void {
     try {
       $element->click();
       $tag_name = $element->getTagName();
@@ -188,8 +190,10 @@ protected function assertElementUnclickable(NodeElement $element) {
 
   /**
    * Asserts that forms, links, and iframes in preview are non-interactive.
+   *
+   * @internal
    */
-  protected function assertLinksFormIframeNotInteractive() {
+  protected function assertLinksFormIframeNotInteractive(): void {
     $assert_session = $this->assertSession();
     $page = $this->getSession()->getPage();
 
@@ -204,8 +208,10 @@ protected function assertLinksFormIframeNotInteractive() {
 
   /**
    * Confirms that Layout Builder contextual links remain active.
+   *
+   * @internal
    */
-  protected function assertContextualLinksClickable() {
+  protected function assertContextualLinksClickable(): void {
     $assert_session = $this->assertSession();
     $page = $this->getSession()->getPage();
     $this->drupalGet($this->getUrl());
@@ -233,8 +239,10 @@ protected function assertContextualLinksClickable() {
    * This is confirmed by clicking a contextual link then moving the mouse
    * pointer. If mouseup is working properly, the draggable element will not
    * be moved by the pointer moving.
+   *
+   * @internal
    */
-  protected function assertContextualLinkRetainsMouseup() {
+  protected function assertContextualLinkRetainsMouseup(): void {
     $assert_session = $this->assertSession();
     $page = $this->getSession()->getPage();
     $body_field_selector = '.block-field-blocknodebundle-with-section-fieldbody';
diff --git a/core/modules/layout_builder/tests/src/FunctionalJavascript/LayoutBuilderTest.php b/core/modules/layout_builder/tests/src/FunctionalJavascript/LayoutBuilderTest.php
index 1562216da593..35c8b8090c69 100644
--- a/core/modules/layout_builder/tests/src/FunctionalJavascript/LayoutBuilderTest.php
+++ b/core/modules/layout_builder/tests/src/FunctionalJavascript/LayoutBuilderTest.php
@@ -477,7 +477,7 @@ private function openAddBlockForm($block_title) {
    * @param string $expected_form_id
    *   The expected form ID.
    */
-  private function assertOffCanvasFormAfterWait($expected_form_id) {
+  private function assertOffCanvasFormAfterWait(string $expected_form_id): void {
     $this->assertSession()->assertWaitOnAjaxRequest();
     $off_canvas = $this->assertSession()->waitForElementVisible('css', '#drupal-off-canvas');
     $this->assertNotNull($off_canvas);
@@ -503,7 +503,7 @@ private function markCurrentPage() {
    *
    * @todo Remove in https://www.drupal.org/project/drupal/issues/2909782.
    */
-  private function assertPageNotReloaded() {
+  private function assertPageNotReloaded(): void {
     $this->assertSession()->pageTextContains($this->pageReloadMarker);
   }
 
diff --git a/core/modules/layout_builder/tests/src/FunctionalJavascript/LayoutBuilderUiTest.php b/core/modules/layout_builder/tests/src/FunctionalJavascript/LayoutBuilderUiTest.php
index 6523bd636797..77af692cc51a 100644
--- a/core/modules/layout_builder/tests/src/FunctionalJavascript/LayoutBuilderUiTest.php
+++ b/core/modules/layout_builder/tests/src/FunctionalJavascript/LayoutBuilderUiTest.php
@@ -105,8 +105,10 @@ public function testUnsavedChangesMessage() {
    *
    * @param string $path
    *   The path to a Layout Builder UI page.
+   *
+   * @internal
    */
-  protected function assertModifiedLayout($path) {
+  protected function assertModifiedLayout(string $path): void {
     $assert_session = $this->assertSession();
     $page = $this->getSession()->getPage();
 
@@ -267,7 +269,7 @@ public function testNewExtraField() {
    * @param string $selector
    *   The highlighted element must also match this selector.
    */
-  private function assertHighlightedElement($selector) {
+  private function assertHighlightedElement(string $selector): void {
     $assert_session = $this->assertSession();
     $page = $this->getSession()->getPage();
 
@@ -281,7 +283,7 @@ private function assertHighlightedElement($selector) {
   /**
    * Waits for the dialog to close and confirms no highlights are present.
    */
-  private function assertHighlightNotExists() {
+  private function assertHighlightNotExists(): void {
     $assert_session = $this->assertSession();
 
     $assert_session->assertNoElementAfterWait('css', '#drupal-off-canvas');
diff --git a/core/modules/layout_builder/tests/src/FunctionalJavascript/MoveBlockFormTest.php b/core/modules/layout_builder/tests/src/FunctionalJavascript/MoveBlockFormTest.php
index 3b857b10e5ba..f7b302e7355b 100644
--- a/core/modules/layout_builder/tests/src/FunctionalJavascript/MoveBlockFormTest.php
+++ b/core/modules/layout_builder/tests/src/FunctionalJavascript/MoveBlockFormTest.php
@@ -142,8 +142,10 @@ public function testMoveBlock() {
    *
    * @param string[] $expected_block_labels
    *   The expected block labels.
+   *
+   * @internal
    */
-  protected function assertBlockTable(array $expected_block_labels) {
+  protected function assertBlockTable(array $expected_block_labels): void {
     $page = $this->getSession()->getPage();
     $this->assertSession()->assertWaitOnAjaxRequest();
     $block_tds = $page->findAll('css', '.layout-builder-components-table__block-label');
@@ -202,8 +204,10 @@ protected function findRowHandle($block_label) {
    *   The region.
    * @param array $expected_block_selectors
    *   The block selectors.
+   *
+   * @internal
    */
-  protected function assertRegionBlocksOrder($section_delta, $region, array $expected_block_selectors) {
+  protected function assertRegionBlocksOrder(int $section_delta, string $region, array $expected_block_selectors): void {
     $page = $this->getSession()->getPage();
     $assert_session = $this->assertSession();
 
diff --git a/core/modules/layout_builder/tests/src/FunctionalJavascript/TestMultiWidthLayoutsTest.php b/core/modules/layout_builder/tests/src/FunctionalJavascript/TestMultiWidthLayoutsTest.php
index 2fd7cd7a7839..9ec01e7cb0d3 100644
--- a/core/modules/layout_builder/tests/src/FunctionalJavascript/TestMultiWidthLayoutsTest.php
+++ b/core/modules/layout_builder/tests/src/FunctionalJavascript/TestMultiWidthLayoutsTest.php
@@ -112,8 +112,10 @@ public function testWidthChange() {
    *
    * @param string $width_class
    *   The width class.
+   *
+   * @internal
    */
-  protected function assertWidthClassApplied($width_class) {
+  protected function assertWidthClassApplied(string $width_class): void {
     $this->assertNotEmpty($this->assertSession()->waitForElementVisible('css', ".{$width_class}[data-layout-delta=\"0\"]"));
   }
 
diff --git a/core/modules/layout_builder/tests/src/Unit/SectionTest.php b/core/modules/layout_builder/tests/src/Unit/SectionTest.php
index 2e21947de9dd..7e3c5b130280 100644
--- a/core/modules/layout_builder/tests/src/Unit/SectionTest.php
+++ b/core/modules/layout_builder/tests/src/Unit/SectionTest.php
@@ -188,8 +188,10 @@ public function testInsertComponentInvalidDelta() {
    *   The expected sections.
    * @param \Drupal\layout_builder\Section $section
    *   The section storage to check.
+   *
+   * @internal
    */
-  protected function assertComponents(array $expected, Section $section) {
+  protected function assertComponents(array $expected, Section $section): void {
     $result = $section->getComponents();
     $this->assertEquals($expected, $result);
     $this->assertSame(array_keys($expected), array_keys($result));
diff --git a/core/modules/link/tests/src/Functional/LinkFieldTest.php b/core/modules/link/tests/src/Functional/LinkFieldTest.php
index 2e4044abfa93..80b03928006a 100644
--- a/core/modules/link/tests/src/Functional/LinkFieldTest.php
+++ b/core/modules/link/tests/src/Functional/LinkFieldTest.php
@@ -211,8 +211,10 @@ public function testURLValidation() {
    *   The field name.
    * @param array $valid_entries
    *   An array of valid URL entries.
+   *
+   * @internal
    */
-  protected function assertValidEntries($field_name, array $valid_entries) {
+  protected function assertValidEntries(string $field_name, array $valid_entries): void {
     foreach ($valid_entries as $uri => $string) {
       $edit = [
         "{$field_name}[0][uri]" => $uri,
@@ -233,8 +235,10 @@ protected function assertValidEntries($field_name, array $valid_entries) {
    *   The field name.
    * @param array $invalid_entries
    *   An array of invalid URL entries.
+   *
+   * @internal
    */
-  protected function assertInvalidEntries($field_name, array $invalid_entries) {
+  protected function assertInvalidEntries(string $field_name, array $invalid_entries): void {
     foreach ($invalid_entries as $invalid_value => $error_message) {
       $edit = [
         "{$field_name}[0][uri]" => $invalid_value,
diff --git a/core/modules/link/tests/src/Functional/LinkFieldUITest.php b/core/modules/link/tests/src/Functional/LinkFieldUITest.php
index 7045a04fa3d7..177fa62a8ac1 100644
--- a/core/modules/link/tests/src/Functional/LinkFieldUITest.php
+++ b/core/modules/link/tests/src/Functional/LinkFieldUITest.php
@@ -218,8 +218,10 @@ public function runFieldUIItem($cardinality, $link_type, $title, $label, $field_
    *   The name of the field to check.
    * @param string $text
    *   The text to check.
+   *
+   * @internal
    */
-  protected function assertFieldContainsRawText($field_name, $text) {
+  protected function assertFieldContainsRawText(string $field_name, string $text): void {
     $this->assertTrue((bool) preg_match('/' . preg_quote($text, '/') . '/ui', $this->getFieldHtml($field_name)));
   }
 
@@ -230,8 +232,10 @@ protected function assertFieldContainsRawText($field_name, $text) {
    *   The name of the field to check.
    * @param string $text
    *   The text to check.
+   *
+   * @internal
    */
-  protected function assertNoFieldContainsRawText($field_name, $text) {
+  protected function assertNoFieldContainsRawText(string $field_name, string $text): void {
     $this->assertFalse((bool) preg_match('/' . preg_quote($text, '/') . '/ui', $this->getFieldHtml($field_name)));
   }
 
diff --git a/core/modules/locale/tests/src/Functional/LocaleConfigTranslationTest.php b/core/modules/locale/tests/src/Functional/LocaleConfigTranslationTest.php
index b9f6f3bababb..886710312b58 100644
--- a/core/modules/locale/tests/src/Functional/LocaleConfigTranslationTest.php
+++ b/core/modules/locale/tests/src/Functional/LocaleConfigTranslationTest.php
@@ -247,8 +247,10 @@ public function testOptionalConfiguration() {
    * @param bool $optional
    *   Whether to assume a sample of the optional default configuration is
    *   present.
+   *
+   * @internal
    */
-  protected function assertNodeConfig($required, $optional) {
+  protected function assertNodeConfig(bool $required, bool $optional): void {
     // Check the required default configuration in node module.
     $string = $this->storage->findString(['source' => 'Make content sticky', 'context' => '', 'type' => 'configuration']);
     if ($required) {
diff --git a/core/modules/locale/tests/src/Kernel/LocaleConfigSubscriberTest.php b/core/modules/locale/tests/src/Kernel/LocaleConfigSubscriberTest.php
index 9084e1d52979..f059508eed3a 100644
--- a/core/modules/locale/tests/src/Kernel/LocaleConfigSubscriberTest.php
+++ b/core/modules/locale/tests/src/Kernel/LocaleConfigSubscriberTest.php
@@ -386,8 +386,10 @@ protected function deleteLocaleTranslationData($config_name, $key, $source_value
    *   The configuration name.
    * @param string $langcode
    *   The language code.
+   *
+   * @internal
    */
-  protected function assertNoConfigOverride($config_name, $langcode) {
+  protected function assertNoConfigOverride(string $config_name, string $langcode): void {
     $config_langcode = $this->configFactory->getEditable($config_name)->get('langcode');
     $override = $this->languageManager->getLanguageConfigOverride($langcode, $config_name);
     $this->assertNotEquals($langcode, $config_langcode);
@@ -401,12 +403,14 @@ protected function assertNoConfigOverride($config_name, $langcode) {
    *   The configuration name.
    * @param string $key
    *   The configuration key.
-   * @param string $value
+   * @param string|array $value
    *   The configuration value.
    * @param string $langcode
    *   The language code.
+   *
+   * @internal
    */
-  protected function assertConfigOverride($config_name, $key, $value, $langcode) {
+  protected function assertConfigOverride(string $config_name, string $key, $value, string $langcode): void {
     $config_langcode = $this->configFactory->getEditable($config_name)->get('langcode');
     $override = $this->languageManager->getLanguageConfigOverride($langcode, $config_name);
     $this->assertNotEquals($langcode, $config_langcode);
@@ -424,8 +428,10 @@ protected function assertConfigOverride($config_name, $key, $value, $langcode) {
    *   The configuration value.
    * @param string $langcode
    *   The language code.
+   *
+   * @internal
    */
-  protected function assertActiveConfig($config_name, $key, $value, $langcode) {
+  protected function assertActiveConfig(string $config_name, string $key, string $value, string $langcode): void {
     $config = $this->configFactory->getEditable($config_name);
     $this->assertEquals($langcode, $config->get('langcode'));
     $this->assertSame($value, $config->get($key));
@@ -438,8 +444,10 @@ protected function assertActiveConfig($config_name, $key, $value, $langcode) {
    *   The configuration name.
    * @param string $langcode
    *   The language code.
+   *
+   * @internal
    */
-  protected function assertNoTranslation($config_name, $langcode) {
+  protected function assertNoTranslation(string $config_name, string $langcode): void {
     $strings = $this->stringStorage->getTranslations([
       'type' => 'configuration',
       'name' => $config_name,
@@ -461,8 +469,10 @@ protected function assertNoTranslation($config_name, $langcode) {
    * @param bool $customized
    *   Whether or not the string should be asserted to be customized or not
    *   customized.
+   *
+   * @internal
    */
-  protected function assertTranslation($config_name, $translation, $langcode, $customized = TRUE) {
+  protected function assertTranslation(string $config_name, $translation, string $langcode, bool $customized = TRUE): void {
     // Make sure a string exists.
     $strings = $this->stringStorage->getTranslations([
       'type' => 'configuration',
diff --git a/core/modules/media/tests/src/Functional/MediaRevisionTest.php b/core/modules/media/tests/src/Functional/MediaRevisionTest.php
index f3361c76b49f..d3c89fc72a3d 100644
--- a/core/modules/media/tests/src/Functional/MediaRevisionTest.php
+++ b/core/modules/media/tests/src/Functional/MediaRevisionTest.php
@@ -190,8 +190,10 @@ protected function createMediaRevision(MediaInterface $media) {
    *   The entity in question.
    * @param int $expected_revisions
    *   The expected number of revisions.
+   *
+   * @internal
    */
-  protected function assertRevisionCount(EntityInterface $entity, $expected_revisions) {
+  protected function assertRevisionCount(EntityInterface $entity, int $expected_revisions): void {
     $entity_type = $entity->getEntityType();
 
     $count = $this->container
diff --git a/core/modules/media/tests/src/Functional/MediaUiFunctionalTest.php b/core/modules/media/tests/src/Functional/MediaUiFunctionalTest.php
index 828f2e0317b1..5446c3a3ca7e 100644
--- a/core/modules/media/tests/src/Functional/MediaUiFunctionalTest.php
+++ b/core/modules/media/tests/src/Functional/MediaUiFunctionalTest.php
@@ -475,8 +475,10 @@ public function testMediaCreateRedirect() {
    *   A list of the help texts to check.
    * @param string $selector
    *   (optional) The selector to search.
+   *
+   * @internal
    */
-  public function assertHelpTexts(array $texts, $selector = '') {
+  public function assertHelpTexts(array $texts, string $selector = ''): void {
     $assert_session = $this->assertSession();
     foreach ($texts as $text) {
       // We only want to escape single quotes, so use str_replace() rather than
@@ -496,8 +498,10 @@ public function assertHelpTexts(array $texts, $selector = '') {
    *
    * @param string[] $texts
    *   A list of the help texts to check.
+   *
+   * @internal
    */
-  public function assertNoHelpTexts(array $texts) {
+  public function assertNoHelpTexts(array $texts): void {
     $assert_session = $this->assertSession();
     foreach ($texts as $text) {
       $assert_session->pageTextNotContains($text);
@@ -514,8 +518,10 @@ public function assertNoHelpTexts(array $texts) {
    * @param string[] $attributes
    *   An associative array of any expected attributes, keyed by the
    *   attribute name.
+   *
+   * @internal
    */
-  protected function assertHelpLink(NodeElement $element, $text, array $attributes = []) {
+  protected function assertHelpLink(NodeElement $element, string $text, array $attributes = []): void {
     // Find all the links inside the element.
     $link = $element->findLink($text);
 
@@ -532,8 +538,10 @@ protected function assertHelpLink(NodeElement $element, $text, array $attributes
    *   The element to search.
    * @param string $text
    *   The link text.
+   *
+   * @internal
    */
-  protected function assertNoHelpLink(NodeElement $element, $text) {
+  protected function assertNoHelpLink(NodeElement $element, string $text): void {
     $assert_session = $this->assertSession();
     // Assert that the link and its text are not present anywhere on the page.
     $assert_session->elementNotExists('named', ['link', $text], $element);
diff --git a/core/modules/media/tests/src/FunctionalJavascript/CKEditorIntegrationTest.php b/core/modules/media/tests/src/FunctionalJavascript/CKEditorIntegrationTest.php
index d192edcde704..5785a13a680d 100644
--- a/core/modules/media/tests/src/FunctionalJavascript/CKEditorIntegrationTest.php
+++ b/core/modules/media/tests/src/FunctionalJavascript/CKEditorIntegrationTest.php
@@ -1415,11 +1415,13 @@ protected function leaveSourceMode() {
    *
    * @param string $attribute
    *   The attribute to check.
-   * @param mixed $value
+   * @param string|null $value
    *   Either a string value or if NULL, asserts that <drupal-media> element
    *   doesn't have the attribute.
+   *
+   * @internal
    */
-  protected function assertSourceAttributeSame($attribute, $value) {
+  protected function assertSourceAttributeSame(string $attribute, ?string $value): void {
     $this->assertNotEmpty($drupal_media = $this->getDrupalMediaFromSource());
     if ($value === NULL) {
       $this->assertFalse($drupal_media->hasAttribute($attribute));
@@ -1524,8 +1526,10 @@ protected function openContextMenu($instance_id = 'edit-body-0-value') {
    *
    * @param string $label
    *   The `aria-label` attribute value of the context menu item.
+   *
+   * @internal
    */
-  protected function assertContextMenuItemExists($label) {
+  protected function assertContextMenuItemExists(string $label): void {
     $this->assertSession()->elementExists('xpath', '//a[@aria-label="' . $label . '"]');
   }
 
@@ -1534,8 +1538,10 @@ protected function assertContextMenuItemExists($label) {
    *
    * @param string $label
    *   The `aria-label` attribute value of the context menu item.
+   *
+   * @internal
    */
-  protected function assertContextMenuItemNotExists($label) {
+  protected function assertContextMenuItemNotExists(string $label): void {
     $this->assertSession()->elementNotExists('xpath', '//a[@aria-label="' . $label . '"]');
   }
 
diff --git a/core/modules/media/tests/src/FunctionalJavascript/MediaSourceImageTest.php b/core/modules/media/tests/src/FunctionalJavascript/MediaSourceImageTest.php
index e4a0f942c4e0..9f17c9245e2d 100644
--- a/core/modules/media/tests/src/FunctionalJavascript/MediaSourceImageTest.php
+++ b/core/modules/media/tests/src/FunctionalJavascript/MediaSourceImageTest.php
@@ -159,8 +159,10 @@ public function testMediaImageSource() {
    *
    * @param string $media_type_id
    *   The media type ID.
+   *
+   * @internal
    */
-  protected function assertViewDisplayConfigured($media_type_id) {
+  protected function assertViewDisplayConfigured(string $media_type_id): void {
     $assert_session = $this->assertSession();
     $type = MediaType::load($media_type_id);
     $display = EntityViewDisplay::load('media.' . $media_type_id . '.' . EntityDisplayRepositoryInterface::DEFAULT_DISPLAY_MODE);
diff --git a/core/modules/media/tests/src/Kernel/MediaAccessControlHandlerTest.php b/core/modules/media/tests/src/Kernel/MediaAccessControlHandlerTest.php
index 59fa8af6ace9..f6d00a3da6d8 100644
--- a/core/modules/media/tests/src/Kernel/MediaAccessControlHandlerTest.php
+++ b/core/modules/media/tests/src/Kernel/MediaAccessControlHandlerTest.php
@@ -92,8 +92,10 @@ public function testCreateAccess(array $permissions, AccessResultInterface $expe
    *   Expected cache tags.
    * @param \Drupal\Core\Access\AccessResultInterface $actual
    *   The actual access result.
+   *
+   * @internal
    */
-  protected function assertAccess(AccessResultInterface $expected_access_result, array $expected_cache_contexts, array $expected_cache_tags, AccessResultInterface $actual) {
+  protected function assertAccess(AccessResultInterface $expected_access_result, array $expected_cache_contexts, array $expected_cache_tags, AccessResultInterface $actual): void {
     $this->assertSame($expected_access_result->isAllowed(), $actual->isAllowed());
     $this->assertSame($expected_access_result->isForbidden(), $actual->isForbidden());
     $this->assertSame($expected_access_result->isNeutral(), $actual->isNeutral());
diff --git a/core/modules/media_library/tests/src/Functional/MediaLibraryDisplayModeTest.php b/core/modules/media_library/tests/src/Functional/MediaLibraryDisplayModeTest.php
index b24dcc6903b8..e83c5e31831b 100644
--- a/core/modules/media_library/tests/src/Functional/MediaLibraryDisplayModeTest.php
+++ b/core/modules/media_library/tests/src/Functional/MediaLibraryDisplayModeTest.php
@@ -222,8 +222,10 @@ public function testDisplayModes() {
    * @param bool $has_source_field
    *   Whether the media library form display should contain the source field or
    *   not.
+   *
+   * @internal
    */
-  protected function assertFormDisplay($type_id, $has_name, $has_source_field) {
+  protected function assertFormDisplay(string $type_id, bool $has_name, bool $has_source_field): void {
     // These components are added by default and invisible.
     $components = [
       'revision_log_message',
@@ -254,8 +256,10 @@ protected function assertFormDisplay($type_id, $has_name, $has_source_field) {
    *   The media type ID.
    * @param string $image_style
    *   The ID of the image style that should be configured for the thumbnail.
+   *
+   * @internal
    */
-  protected function assertViewDisplay($type_id, $image_style) {
+  protected function assertViewDisplay(string $type_id, string $image_style): void {
     $view_display = EntityViewDisplay::load('media.' . $type_id . '.media_library');
     $this->assertInstanceOf(EntityViewDisplay::class, $view_display);
     // Assert the media library view display contains only the thumbnail.
diff --git a/core/modules/media_library/tests/src/FunctionalJavascript/ContentModerationTest.php b/core/modules/media_library/tests/src/FunctionalJavascript/ContentModerationTest.php
index 07b8f514f19c..dd21529b76eb 100644
--- a/core/modules/media_library/tests/src/FunctionalJavascript/ContentModerationTest.php
+++ b/core/modules/media_library/tests/src/FunctionalJavascript/ContentModerationTest.php
@@ -312,8 +312,10 @@ public function testWidget() {
 
   /**
    * Asserts all media items are visible.
+   *
+   * @internal
    */
-  protected function assertAllMedia() {
+  protected function assertAllMedia(): void {
     $assert_session = $this->assertSession();
     $assert_session->pageTextContains('Hoglet');
     $assert_session->pageTextContains('Panda');
@@ -322,8 +324,10 @@ protected function assertAllMedia() {
 
   /**
    * Asserts only published media items are visible.
+   *
+   * @internal
    */
-  protected function assertOnlyPublishedMedia() {
+  protected function assertOnlyPublishedMedia(): void {
     $assert_session = $this->assertSession();
     $assert_session->pageTextNotContains('Hoglet');
     $assert_session->pageTextContains('Panda');
diff --git a/core/modules/media_library/tests/src/Kernel/MediaLibraryAccessTest.php b/core/modules/media_library/tests/src/Kernel/MediaLibraryAccessTest.php
index b8fa3d268c2c..7ed7e1975c10 100644
--- a/core/modules/media_library/tests/src/Kernel/MediaLibraryAccessTest.php
+++ b/core/modules/media_library/tests/src/Kernel/MediaLibraryAccessTest.php
@@ -412,7 +412,7 @@ public function testAddFormAccess(): void {
    * @param string[] $expected_cache_contexts
    *   (optional) The expected cache contexts attached to the access result.
    */
-  private function assertAccess(AccessResult $access_result, $is_allowed, $expected_reason = NULL, array $expected_cache_tags = [], array $expected_cache_contexts = []) {
+  private function assertAccess(AccessResult $access_result, bool $is_allowed, string $expected_reason = NULL, array $expected_cache_tags = [], array $expected_cache_contexts = []): void {
     $this->assertSame($is_allowed, $access_result->isAllowed());
     if ($access_result instanceof AccessResultReasonInterface && isset($expected_reason)) {
       $this->assertSame($expected_reason, $access_result->getReason());
diff --git a/core/modules/media_library/tests/src/Kernel/MediaLibraryWidgetTest.php b/core/modules/media_library/tests/src/Kernel/MediaLibraryWidgetTest.php
index e5fc54ff9e20..57e3ef47f652 100644
--- a/core/modules/media_library/tests/src/Kernel/MediaLibraryWidgetTest.php
+++ b/core/modules/media_library/tests/src/Kernel/MediaLibraryWidgetTest.php
@@ -4,10 +4,12 @@
 
 use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\Form\FormState;
+use Drupal\Core\Session\AccountInterface;
 use Drupal\entity_test\Entity\EntityTest;
 use Drupal\entity_test\Entity\EntityTestRev;
 use Drupal\KernelTests\KernelTestBase;
 use Drupal\media\Entity\MediaType;
+use Drupal\media_library\MediaLibraryState;
 use Drupal\Tests\user\Traits\UserCreationTrait;
 
 /**
@@ -128,8 +130,10 @@ public function testRevisionableWidgetAccess() {
    *   The media library state.
    *
    * @throws \Exception
+   *
+   * @internal
    */
-  protected function assertMediaLibraryStateAccess($access, $user, $state) {
+  protected function assertMediaLibraryStateAccess(bool $access, AccountInterface $user, MediaLibraryState $state): void {
     $ui_builder = $this->container->get('media_library.ui_builder');
     $access_result = $ui_builder->checkAccess($user, $state);
     $this->assertEquals($access, $access_result->isAllowed());
diff --git a/core/modules/menu_link_content/tests/src/Kernel/MenuLinksTest.php b/core/modules/menu_link_content/tests/src/Kernel/MenuLinksTest.php
index 61279cb7a76c..894bb59993d1 100644
--- a/core/modules/menu_link_content/tests/src/Kernel/MenuLinksTest.php
+++ b/core/modules/menu_link_content/tests/src/Kernel/MenuLinksTest.php
@@ -120,8 +120,10 @@ public function createLinkHierarchy($module = 'menu_test') {
 
   /**
    * Assert that at set of links is properly parented.
+   *
+   * @internal
    */
-  public function assertMenuLinkParents($links, $expected_hierarchy) {
+  public function assertMenuLinkParents(array $links, array $expected_hierarchy): void {
     foreach ($expected_hierarchy as $id => $parent) {
       /** @var \Drupal\Core\Menu\MenuLinkInterface $menu_link_plugin  */
       $menu_link_plugin = $this->menuLinkManager->createInstance($links[$id]);
diff --git a/core/modules/menu_link_content/tests/src/Kernel/Migrate/d6/MigrateMenuLinkTest.php b/core/modules/menu_link_content/tests/src/Kernel/Migrate/d6/MigrateMenuLinkTest.php
index bc72be37598d..c21a085fd5b0 100644
--- a/core/modules/menu_link_content/tests/src/Kernel/Migrate/d6/MigrateMenuLinkTest.php
+++ b/core/modules/menu_link_content/tests/src/Kernel/Migrate/d6/MigrateMenuLinkTest.php
@@ -53,7 +53,7 @@ protected function setUp(): void {
    *   The expected title of the link.
    * @param string $menu
    *   The expected ID of the menu to which the link will belong.
-   * @param string $description
+   * @param string|null $description
    *   The link's expected description.
    * @param bool $enabled
    *   Whether the link is enabled.
@@ -66,10 +66,9 @@ protected function setUp(): void {
    * @param int $weight
    *   The expected weight of the link.
    *
-   * @return \Drupal\menu_link_content\MenuLinkContentInterface
-   *   The menu link content.
+   * @internal
    */
-  protected function assertEntity($id, $title, $menu, $description, $enabled, $expanded, array $attributes, $uri, $weight) {
+  protected function assertEntity(string $id, string $title, string $menu, ?string $description, bool $enabled, bool $expanded, array $attributes, string $uri, int $weight): void {
     /** @var \Drupal\menu_link_content\MenuLinkContentInterface $menu_link */
     $menu_link = MenuLinkContent::load($id);
     $this->assertInstanceOf(MenuLinkContentInterface::class, $menu_link);
@@ -81,7 +80,6 @@ protected function assertEntity($id, $title, $menu, $description, $enabled, $exp
     $this->assertSame($attributes, $menu_link->link->options);
     $this->assertSame($uri, $menu_link->link->uri);
     $this->assertSame($weight, $menu_link->getWeight());
-    return $menu_link;
   }
 
   /**
diff --git a/core/modules/migrate/tests/src/Kernel/HighWaterTest.php b/core/modules/migrate/tests/src/Kernel/HighWaterTest.php
index f45a662758f1..0793ea3652e2 100644
--- a/core/modules/migrate/tests/src/Kernel/HighWaterTest.php
+++ b/core/modules/migrate/tests/src/Kernel/HighWaterTest.php
@@ -267,8 +267,10 @@ public function testHighWaterUpdate() {
    *
    * @param string $title
    *   Title of the node.
+   *
+   * @internal
    */
-  protected function assertNodeExists($title) {
+  protected function assertNodeExists(string $title): void {
     self::assertTrue($this->nodeExists($title));
   }
 
@@ -277,8 +279,10 @@ protected function assertNodeExists($title) {
    *
    * @param string $title
    *   Title of the node.
+   *
+   * @internal
    */
-  protected function assertNodeDoesNotExist($title) {
+  protected function assertNodeDoesNotExist(string $title): void {
     self::assertFalse($this->nodeExists($title));
   }
 
diff --git a/core/modules/migrate/tests/src/Kernel/MigrateEntityContentBaseTest.php b/core/modules/migrate/tests/src/Kernel/MigrateEntityContentBaseTest.php
index 1123737bcfa5..b5fb3ec25024 100644
--- a/core/modules/migrate/tests/src/Kernel/MigrateEntityContentBaseTest.php
+++ b/core/modules/migrate/tests/src/Kernel/MigrateEntityContentBaseTest.php
@@ -67,8 +67,10 @@ protected function setUp(): void {
    *   The expected default translation language code.
    * @param string[] $others
    *   The expected other translation language codes.
+   *
+   * @internal
    */
-  protected function assertTranslations($id, $default, $others = []) {
+  protected function assertTranslations(int $id, string $default, array $others = []): void {
     $entity = $this->storage->load($id);
     $this->assertNotEmpty($entity, "Entity exists");
     $this->assertEquals($default, $entity->language()->getId(), "Entity default translation");
diff --git a/core/modules/migrate/tests/src/Kernel/TrackChangesTest.php b/core/modules/migrate/tests/src/Kernel/TrackChangesTest.php
index 04d45b8c04d6..1f8f80c1afbd 100644
--- a/core/modules/migrate/tests/src/Kernel/TrackChangesTest.php
+++ b/core/modules/migrate/tests/src/Kernel/TrackChangesTest.php
@@ -153,8 +153,10 @@ public function testTrackChanges() {
    *   Property to evaluate.
    * @param string $value
    *   Value to evaluate.
+   *
+   * @internal
    */
-  protected function assertTermExists($property, $value) {
+  protected function assertTermExists(string $property, string $value): void {
     self::assertTrue($this->termExists($property, $value));
   }
 
@@ -165,8 +167,10 @@ protected function assertTermExists($property, $value) {
    *   Property to evaluate.
    * @param string $value
    *   Value to evaluate.
+   *
+   * @internal
    */
-  protected function assertTermDoesNotExist($property, $value) {
+  protected function assertTermDoesNotExist(string $property, string $value): void {
     self::assertFalse($this->termExists($property, $value));
   }
 
diff --git a/core/modules/migrate/tests/src/Unit/process/FileCopyTest.php b/core/modules/migrate/tests/src/Unit/process/FileCopyTest.php
index dc7cce130bfa..72d55143b45d 100644
--- a/core/modules/migrate/tests/src/Unit/process/FileCopyTest.php
+++ b/core/modules/migrate/tests/src/Unit/process/FileCopyTest.php
@@ -48,10 +48,12 @@ public function providerFileProcessBaseConstructor() {
    *
    * @param array $configuration
    *   The plugin configuration.
-   * @param $expected
+   * @param int $expected
    *   The expected value of the plugin configuration.
+   *
+   * @internal
    */
-  protected function assertPlugin($configuration, $expected) {
+  protected function assertPlugin(array $configuration, int $expected): void {
     $stream_wrapper_manager = $this->prophesize(StreamWrapperManagerInterface::class)->reveal();
     $file_system = $this->prophesize(FileSystemInterface::class)->reveal();
     $download_plugin = $this->prophesize(MigrateProcessInterface::class)->reveal();
diff --git a/core/modules/migrate_drupal/tests/src/Kernel/Plugin/migrate/DestinationCategoryTest.php b/core/modules/migrate_drupal/tests/src/Kernel/Plugin/migrate/DestinationCategoryTest.php
index eb07400d312a..900a374d4910 100644
--- a/core/modules/migrate_drupal/tests/src/Kernel/Plugin/migrate/DestinationCategoryTest.php
+++ b/core/modules/migrate_drupal/tests/src/Kernel/Plugin/migrate/DestinationCategoryTest.php
@@ -67,8 +67,10 @@ public function testD7Categories() {
    *
    * @param \Drupal\migrate\Plugin\MigrationInterface[] $migrations
    *   The migrations.
+   *
+   * @internal
    */
-  protected function assertCategories($migrations) {
+  protected function assertCategories(array $migrations): void {
     foreach ($migrations as $id => $migration) {
       $object_classes = class_parents($migration->getDestinationPlugin());
       $object_classes[] = get_class($migration->getDestinationPlugin());
diff --git a/core/modules/migrate_drupal/tests/src/Kernel/Plugin/migrate/source/ContentEntityTest.php b/core/modules/migrate_drupal/tests/src/Kernel/Plugin/migrate/source/ContentEntityTest.php
index 34a486053512..73cad339dc48 100644
--- a/core/modules/migrate_drupal/tests/src/Kernel/Plugin/migrate/source/ContentEntityTest.php
+++ b/core/modules/migrate_drupal/tests/src/Kernel/Plugin/migrate/source/ContentEntityTest.php
@@ -186,8 +186,10 @@ protected function setUp(): void {
    *   The source plugin.
    * @param array $configuration
    *   The source plugin configuration (Nope, no getter available).
+   *
+   * @internal
    */
-  protected function assertIds(MigrateSourceInterface $source, array $configuration) {
+  protected function assertIds(MigrateSourceInterface $source, array $configuration): void {
     $ids = $source->getIds();
     [, $entity_type_id] = explode(PluginBase::DERIVATIVE_SEPARATOR, $source->getPluginId());
     $entity_type = \Drupal::entityTypeManager()->getDefinition($entity_type_id);
diff --git a/core/modules/migrate_drupal_ui/tests/src/Functional/MigrateUpgradeFormStepsTest.php b/core/modules/migrate_drupal_ui/tests/src/Functional/MigrateUpgradeFormStepsTest.php
index 1d86b61ef8b3..f25d28e11d8f 100644
--- a/core/modules/migrate_drupal_ui/tests/src/Functional/MigrateUpgradeFormStepsTest.php
+++ b/core/modules/migrate_drupal_ui/tests/src/Functional/MigrateUpgradeFormStepsTest.php
@@ -127,8 +127,10 @@ public function testMigrateUpgradeReviewPage() {
    *   The WebAssert object.
    * @param string $expected
    *   The expected response text.
+   *
+   * @internal
    */
-  protected function assertFirstForm(WebAssert $session, $expected) {
+  protected function assertFirstForm(WebAssert $session, string $expected): void {
     $paths = [
       '',
       '/incremental',
diff --git a/core/modules/migrate_drupal_ui/tests/src/Functional/d6/Upgrade6Test.php b/core/modules/migrate_drupal_ui/tests/src/Functional/d6/Upgrade6Test.php
index 31feae3cccf5..4ee6cda5a7f6 100644
--- a/core/modules/migrate_drupal_ui/tests/src/Functional/d6/Upgrade6Test.php
+++ b/core/modules/migrate_drupal_ui/tests/src/Functional/d6/Upgrade6Test.php
@@ -210,8 +210,10 @@ public function testUpgradeAndIncremental() {
 
   /**
    * Tests that follow-up migrations have been run successfully.
+   *
+   * @internal
    */
-  protected function assertFollowUpMigrationResults() {
+  protected function assertFollowUpMigrationResults(): void {
     $node = Node::load(10);
     $this->assertSame('12', $node->get('field_reference')->target_id);
     $this->assertSame('12', $node->get('field_reference_2')->target_id);
diff --git a/core/modules/migrate_drupal_ui/tests/src/Functional/d7/Upgrade7Test.php b/core/modules/migrate_drupal_ui/tests/src/Functional/d7/Upgrade7Test.php
index 7f1a26fd93fa..864c5dd8e477 100644
--- a/core/modules/migrate_drupal_ui/tests/src/Functional/d7/Upgrade7Test.php
+++ b/core/modules/migrate_drupal_ui/tests/src/Functional/d7/Upgrade7Test.php
@@ -234,8 +234,10 @@ public function testUpgradeAndIncremental() {
 
   /**
    * Tests that follow-up migrations have been run successfully.
+   *
+   * @internal
    */
-  protected function assertFollowUpMigrationResults() {
+  protected function assertFollowUpMigrationResults(): void {
     $node = Node::load(2);
     $this->assertSame('4', $node->get('field_reference')->target_id);
     $this->assertSame('6', $node->get('field_reference_2')->target_id);
diff --git a/core/modules/node/tests/src/Functional/NodeAccessBaseTableTest.php b/core/modules/node/tests/src/Functional/NodeAccessBaseTableTest.php
index a20379f16822..ac042c114582 100644
--- a/core/modules/node/tests/src/Functional/NodeAccessBaseTableTest.php
+++ b/core/modules/node/tests/src/Functional/NodeAccessBaseTableTest.php
@@ -207,12 +207,14 @@ public function testNodeAccessBasic() {
   /**
    * Checks taxonomy/term listings to ensure only accessible nodes are listed.
    *
-   * @param $is_admin
+   * @param bool $is_admin
    *   A boolean indicating whether the current user is an administrator. If
    *   TRUE, all nodes should be listed. If FALSE, only public nodes and the
    *   user's own private nodes should be listed.
+   *
+   * @internal
    */
-  protected function assertTaxonomyPage($is_admin) {
+  protected function assertTaxonomyPage(bool $is_admin): void {
     foreach ([$this->publicTid, $this->privateTid] as $tid_is_private => $tid) {
       $this->drupalGet("taxonomy/term/$tid");
       $this->nidsVisible = [];
diff --git a/core/modules/node/tests/src/Functional/NodeAccessGrantsCacheContextTest.php b/core/modules/node/tests/src/Functional/NodeAccessGrantsCacheContextTest.php
index e647190921fc..746a750fe39b 100644
--- a/core/modules/node/tests/src/Functional/NodeAccessGrantsCacheContextTest.php
+++ b/core/modules/node/tests/src/Functional/NodeAccessGrantsCacheContextTest.php
@@ -76,8 +76,10 @@ protected function setUp(): void {
    *
    * @param array $expected
    *   Expected values, keyed by user ID, expected cache contexts as values.
+   *
+   * @internal
    */
-  protected function assertUserCacheContext(array $expected) {
+  protected function assertUserCacheContext(array $expected): void {
     foreach ($expected as $uid => $context) {
       if ($uid > 0) {
         $this->drupalLogin($this->userMapping[$uid]);
diff --git a/core/modules/node/tests/src/Functional/NodeDisplayConfigurableTest.php b/core/modules/node/tests/src/Functional/NodeDisplayConfigurableTest.php
index dc788da0a76f..c85042d625c3 100644
--- a/core/modules/node/tests/src/Functional/NodeDisplayConfigurableTest.php
+++ b/core/modules/node/tests/src/Functional/NodeDisplayConfigurableTest.php
@@ -114,8 +114,10 @@ public function testDisplayConfigurable(string $theme, string $metadata_region,
    *   The region of the node html content where meta data is expected.
    * @param bool $field_classes
    *   If TRUE, check for field--name-XXX classes.
+   *
+   * @internal
    */
-  protected function assertNodeHtml(NodeInterface $node, UserInterface $user, bool $is_inline, string $metadata_region, bool $field_classes) {
+  protected function assertNodeHtml(NodeInterface $node, UserInterface $user, bool $is_inline, string $metadata_region, bool $field_classes): void {
     $assert = $this->assertSession();
 
     $html_element = $is_inline ? 'span' : 'div';
diff --git a/core/modules/node/tests/src/Functional/NodeTestBase.php b/core/modules/node/tests/src/Functional/NodeTestBase.php
index 6705134a22fb..44dc2faec0eb 100644
--- a/core/modules/node/tests/src/Functional/NodeTestBase.php
+++ b/core/modules/node/tests/src/Functional/NodeTestBase.php
@@ -56,6 +56,8 @@ protected function setUp() {
    *   The node object to check.
    * @param \Drupal\Core\Session\AccountInterface $account
    *   The user account for which to check access.
+   *
+   * @internal
    */
   public function assertNodeAccess(array $ops, NodeInterface $node, AccountInterface $account) {
     foreach ($ops as $op => $result) {
@@ -75,8 +77,10 @@ public function assertNodeAccess(array $ops, NodeInterface $node, AccountInterfa
    * @param string|null $langcode
    *   (optional) The language code indicating which translation of the node
    *   to check. If NULL, the untranslated (fallback) access is checked.
+   *
+   * @internal
    */
-  public function assertNodeCreateAccess($bundle, $result, AccountInterface $account, $langcode = NULL) {
+  public function assertNodeCreateAccess(string $bundle, bool $result, AccountInterface $account, ?string $langcode = NULL) {
     $this->assertEquals($this->accessHandler->createAccess($bundle, $account, ['langcode' => $langcode]), $result, $this->nodeAccessAssertMessage('create', $result, $langcode));
   }
 
diff --git a/core/modules/node/tests/src/Functional/Views/FrontPageTest.php b/core/modules/node/tests/src/Functional/Views/FrontPageTest.php
index bf1cc6ac20d7..1ee1b6606dce 100644
--- a/core/modules/node/tests/src/Functional/Views/FrontPageTest.php
+++ b/core/modules/node/tests/src/Functional/Views/FrontPageTest.php
@@ -166,8 +166,10 @@ public function testFrontPage() {
    *   An array of nids which should not be part of the resultset.
    * @param string $message
    *   (optional) A custom message to display with the assertion.
+   *
+   * @internal
    */
-  protected function assertNotInResultSet(ViewExecutable $view, array $not_expected_nids, $message = '') {
+  protected function assertNotInResultSet(ViewExecutable $view, array $not_expected_nids, string $message = ''): void {
     $found_nids = array_filter($view->result, function ($row) use ($not_expected_nids) {
       return in_array($row->nid, $not_expected_nids);
     });
diff --git a/core/modules/node/tests/src/Functional/Views/NodeFieldFilterTest.php b/core/modules/node/tests/src/Functional/Views/NodeFieldFilterTest.php
index 33105bebc3b8..e94a11ecb3ac 100644
--- a/core/modules/node/tests/src/Functional/Views/NodeFieldFilterTest.php
+++ b/core/modules/node/tests/src/Functional/Views/NodeFieldFilterTest.php
@@ -97,8 +97,10 @@ public function testFilters() {
    *   that translation should be shown on the given page.
    * @param string $message
    *   Message suffix to display.
+   *
+   * @internal
    */
-  protected function assertPageCounts($path, $counts, $message) {
+  protected function assertPageCounts(string $path, array $counts, string $message): void {
     // Disable read more links.
     \Drupal::service('entity_display.repository')
       ->getViewDisplay('node', 'page', 'teaser')
diff --git a/core/modules/node/tests/src/Functional/Views/NodeIntegrationTest.php b/core/modules/node/tests/src/Functional/Views/NodeIntegrationTest.php
index dec8d923967f..ea0cfe411acc 100644
--- a/core/modules/node/tests/src/Functional/Views/NodeIntegrationTest.php
+++ b/core/modules/node/tests/src/Functional/Views/NodeIntegrationTest.php
@@ -59,8 +59,10 @@ public function testNodeViewTypeArgument() {
    *
    * @param array $expected_nids
    *   An array of node IDs.
+   *
+   * @internal
    */
-  protected function assertNids(array $expected_nids = []) {
+  protected function assertNids(array $expected_nids = []): void {
     $result = $this->xpath('//span[@class="field-content"]');
     $nids = [];
     foreach ($result as $element) {
diff --git a/core/modules/node/tests/src/Functional/Views/NodeLanguageTest.php b/core/modules/node/tests/src/Functional/Views/NodeLanguageTest.php
index 986f59cbc09f..c5bd79ccb953 100644
--- a/core/modules/node/tests/src/Functional/Views/NodeLanguageTest.php
+++ b/core/modules/node/tests/src/Functional/Views/NodeLanguageTest.php
@@ -281,8 +281,10 @@ public function testNativeLanguageField() {
    *
    * @param bool $native
    *   (optional) Whether to assert the language name in its native form.
+   *
+   * @internal
    */
-  protected function assertLanguageNames($native = FALSE) {
+  protected function assertLanguageNames(bool $native = FALSE): void {
     $this->drupalGet('test-language');
     if ($native) {
       $this->assertSession()->pageTextContains('Français');
diff --git a/core/modules/node/tests/src/Kernel/Migrate/d6/MigrateNodeCompleteTest.php b/core/modules/node/tests/src/Kernel/Migrate/d6/MigrateNodeCompleteTest.php
index 298df46b55f9..324feb7cd707 100644
--- a/core/modules/node/tests/src/Kernel/Migrate/d6/MigrateNodeCompleteTest.php
+++ b/core/modules/node/tests/src/Kernel/Migrate/d6/MigrateNodeCompleteTest.php
@@ -96,8 +96,10 @@ public function testNodeCompleteMigration() {
    *   An array of revision data matching a node_field_revision table row.
    * @param array $data
    *   An array of revision data.
+   *
+   * @internal
    */
-  protected function assertRevision(array $revision, array $data) {
+  protected function assertRevision(array $revision, array $data): void {
     /** @var  \Drupal\node\NodeInterface $actual */
     $actual = $this->nodeStorage->loadRevision($revision['vid'])
       ->getTranslation($revision['langcode']);
diff --git a/core/modules/node/tests/src/Kernel/Migrate/d6/MigrateNodeRevisionTest.php b/core/modules/node/tests/src/Kernel/Migrate/d6/MigrateNodeRevisionTest.php
index d975e9e4b8fa..ed3bc55add43 100644
--- a/core/modules/node/tests/src/Kernel/Migrate/d6/MigrateNodeRevisionTest.php
+++ b/core/modules/node/tests/src/Kernel/Migrate/d6/MigrateNodeRevisionTest.php
@@ -42,19 +42,21 @@ protected function setUp(): void {
    *   The revision language.
    * @param string $title
    *   The expected title.
-   * @param string $log
+   * @param string|null $log
    *   The revision log message.
    * @param int $timestamp
    *   The revision's time stamp.
+   *
+   * @internal
    */
-  protected function assertRevision($id, $langcode, $title, $log, $timestamp) {
+  protected function assertRevision(int $id, string $langcode, string $title, ?string $log, int $timestamp): void {
     /** @var  \Drupal\node\NodeInterface $revision */
     $revision = $this->nodeStorage->loadRevision($id)
       ->getTranslation($langcode);
     $this->assertInstanceOf(NodeInterface::class, $revision);
     $this->assertSame($title, $revision->getTitle());
     $this->assertSame($log, $revision->revision_log->value);
-    $this->assertSame($timestamp, $revision->getRevisionCreationTime());
+    $this->assertSame($timestamp, (int) $revision->getRevisionCreationTime());
   }
 
   /**
@@ -73,27 +75,27 @@ public function testNodeRevision() {
     $this->assertSame('modified rev 3', $node->revision_log->value);
     $this->assertSame('1420861423', $node->getRevisionCreationTime());
 
-    $this->assertRevision(1, 'und', 'Test title', NULL, '1390095702');
-    $this->assertRevision(3, 'und', 'Test title rev 3', NULL, '1420718386');
-    $this->assertRevision(4, 'und', 'Test page title rev 4', NULL, '1390095701');
-    $this->assertRevision(5, 'und', 'Test title rev 2', 'modified rev 2', '1390095703');
-    $this->assertRevision(6, 'und', 'Node 4', NULL, '1390095701');
-    $this->assertRevision(7, 'und', 'Node 5', NULL, '1390095701');
-    $this->assertRevision(8, 'und', 'Node 6', NULL, '1390095701');
-    $this->assertRevision(9, 'und', 'Node 7', NULL, '1390095701');
-    $this->assertRevision(10, 'und', 'Node 8', NULL, '1390095701');
-    $this->assertRevision(11, 'und', 'Node 9', NULL, '1390095701');
-    $this->assertRevision(12, 'und', 'Once upon a time', NULL, '1444671588');
-    $this->assertRevision(13, 'en', 'The Real McCoy', NULL, '1444238808');
-    $this->assertRevision(15, 'zu', 'Abantu zulu', NULL, '1444238808');
-    $this->assertRevision(17, 'und', 'United Federation of Planets', NULL, '1493066668');
-    $this->assertRevision(18, 'und', 'Klingon Empire', NULL, '1493066677');
-    $this->assertRevision(19, 'und', 'Romulan Empire', NULL, '1493066684');
-    $this->assertRevision(20, 'und', 'Ferengi Commerce Authority', NULL, '1493066693');
-    $this->assertRevision(21, 'und', 'Ambassador Sarek', NULL, '1494966544');
-    $this->assertRevision(22, 'und', 'New Forum Topic', NULL, '1501955771');
-    $this->assertRevision(2001, 'und', 'Test title rev 3', 'modified rev 3', '1420861423');
-    $this->assertRevision(2002, 'en', 'John Smith - EN', NULL, '1534014650');
+    $this->assertRevision(1, 'und', 'Test title', NULL, 1390095702);
+    $this->assertRevision(3, 'und', 'Test title rev 3', NULL, 1420718386);
+    $this->assertRevision(4, 'und', 'Test page title rev 4', NULL, 1390095701);
+    $this->assertRevision(5, 'und', 'Test title rev 2', 'modified rev 2', 1390095703);
+    $this->assertRevision(6, 'und', 'Node 4', NULL, 1390095701);
+    $this->assertRevision(7, 'und', 'Node 5', NULL, 1390095701);
+    $this->assertRevision(8, 'und', 'Node 6', NULL, 1390095701);
+    $this->assertRevision(9, 'und', 'Node 7', NULL, 1390095701);
+    $this->assertRevision(10, 'und', 'Node 8', NULL, 1390095701);
+    $this->assertRevision(11, 'und', 'Node 9', NULL, 1390095701);
+    $this->assertRevision(12, 'und', 'Once upon a time', NULL, 1444671588);
+    $this->assertRevision(13, 'en', 'The Real McCoy', NULL, 1444238808);
+    $this->assertRevision(15, 'zu', 'Abantu zulu', NULL, 1444238808);
+    $this->assertRevision(17, 'und', 'United Federation of Planets', NULL, 1493066668);
+    $this->assertRevision(18, 'und', 'Klingon Empire', NULL, 1493066677);
+    $this->assertRevision(19, 'und', 'Romulan Empire', NULL, 1493066684);
+    $this->assertRevision(20, 'und', 'Ferengi Commerce Authority', NULL, 1493066693);
+    $this->assertRevision(21, 'und', 'Ambassador Sarek', NULL, 1494966544);
+    $this->assertRevision(22, 'und', 'New Forum Topic', NULL, 1501955771);
+    $this->assertRevision(2001, 'und', 'Test title rev 3', 'modified rev 3', 1420861423);
+    $this->assertRevision(2002, 'en', 'John Smith - EN', NULL, 1534014650);
 
     // Test that the revision translations are not migrated and there should not
     // be a revision with id of 2003.
diff --git a/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeCompleteTest.php b/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeCompleteTest.php
index 1d38c9710445..3f5039c9a9c3 100644
--- a/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeCompleteTest.php
+++ b/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeCompleteTest.php
@@ -194,8 +194,10 @@ public function testRollbackNodeComplete() {
    *   An array of revision data matching a node_field_revision table row.
    * @param array $data
    *   An array of revision data.
+   *
+   * @internal
    */
-  protected function assertRevision(array $revision, array $data) {
+  protected function assertRevision(array $revision, array $data): void {
     /** @var  \Drupal\node\NodeInterface $actual */
     $actual = $this->nodeStorage->loadRevision($revision['vid'])
       ->getTranslation($revision['langcode']);
diff --git a/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeRevisionTest.php b/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeRevisionTest.php
index 50cabf5f185f..04656656c2ac 100644
--- a/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeRevisionTest.php
+++ b/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeRevisionTest.php
@@ -92,30 +92,32 @@ protected function getFileMigrationInfo() {
    *   The revision language.
    * @param string $title
    *   The expected title.
-   * @param string $log
+   * @param string|null $log
    *   The revision log message.
    * @param int $timestamp
    *   The revision's time stamp.
+   *
+   * @internal
    */
-  protected function assertRevision($id, $langcode, $title, $log, $timestamp) {
+  protected function assertRevision(int $id, string $langcode, string $title, ?string $log, int $timestamp): void {
     $revision = $this->nodeStorage->loadRevision($id);
     $this->assertInstanceOf(NodeInterface::class, $revision);
     $this->assertSame($title, $revision->getTitle());
     $this->assertSame($langcode, $revision->language()->getId());
     $this->assertSame($log, $revision->revision_log->value);
-    $this->assertSame($timestamp, $revision->getRevisionCreationTime());
+    $this->assertSame($timestamp, (int) $revision->getRevisionCreationTime());
   }
 
   /**
    * Tests the migration of node revisions with translated nodes.
    */
   public function testNodeRevisions() {
-    $this->assertRevision(1, 'en', 'An English Node', NULL, '1441032132');
-    $this->assertRevision(2, 'en', 'The thing about Deep Space 9 (1st rev)', 'DS9 1st rev', '1564543588');
-    $this->assertRevision(4, 'is', 'is - The thing about Firefly (1st rev)', 'is - Firefly 1st rev', '1478755274');
-    $this->assertRevision(6, 'en', 'Comments are closed :-(', NULL, '1504715414');
-    $this->assertRevision(7, 'en', 'Comments are open :-)', NULL, '1504715432');
-    $this->assertRevision(8, 'en', 'The number 47', NULL, '1552126363');
+    $this->assertRevision(1, 'en', 'An English Node', NULL, 1441032132);
+    $this->assertRevision(2, 'en', 'The thing about Deep Space 9 (1st rev)', 'DS9 1st rev', 1564543588);
+    $this->assertRevision(4, 'is', 'is - The thing about Firefly (1st rev)', 'is - Firefly 1st rev', 1478755274);
+    $this->assertRevision(6, 'en', 'Comments are closed :-(', NULL, 1504715414);
+    $this->assertRevision(7, 'en', 'Comments are open :-)', NULL, 1504715432);
+    $this->assertRevision(8, 'en', 'The number 47', NULL, 1552126363);
 
     // Test that the revision translation are not migrated and there should not
     // be a revision with id of 9.
diff --git a/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeTest.php b/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeTest.php
index 0c62e6251dec..f91b9f720796 100644
--- a/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeTest.php
+++ b/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeTest.php
@@ -103,8 +103,10 @@ protected function getFileMigrationInfo() {
    *   Whether the node is expected to be promoted to the front page.
    * @param bool $sticky
    *   Whether the node is expected to be sticky.
+   *
+   * @internal
    */
-  protected function assertEntity($id, $type, $langcode, $title, $uid, $status, $created, $changed, $promoted, $sticky) {
+  protected function assertEntity(string $id, string $type, string $langcode, string $title, int $uid, bool $status, int $created, int $changed, bool $promoted, bool $sticky): void {
     /** @var \Drupal\node\NodeInterface $node */
     $node = Node::load($id);
     $this->assertInstanceOf(NodeInterface::class, $node);
@@ -130,12 +132,14 @@ protected function assertEntity($id, $type, $langcode, $title, $uid, $status, $c
    *   The expected title.
    * @param int $uid
    *   The revision author ID.
-   * @param string $log
+   * @param string|null $log
    *   The revision log message.
    * @param int $timestamp
    *   The revision's time stamp.
+   *
+   * @internal
    */
-  protected function assertRevision($id, $title, $uid, $log, $timestamp) {
+  protected function assertRevision(int $id, string $title, int $uid, ?string $log, int $timestamp): void {
     $revision = \Drupal::entityTypeManager()->getStorage('node')->loadRevision($id);
     $this->assertInstanceOf(NodeInterface::class, $revision);
     $this->assertEquals($title, $revision->getTitle());
diff --git a/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeTitleLabelTest.php b/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeTitleLabelTest.php
index e0c6773c4cef..9b79ea1092a9 100644
--- a/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeTitleLabelTest.php
+++ b/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeTitleLabelTest.php
@@ -30,8 +30,10 @@ protected function setUp(): void {
    *   The override ID.
    * @param string $label
    *   The label's expected (overridden) value.
+   *
+   * @internal
    */
-  protected function assertEntity($id, $label) {
+  protected function assertEntity(string $id, string $label): void {
     $override = BaseFieldOverride::load($id);
     $this->assertInstanceOf(BaseFieldOverride::class, $override);
     /** @var \Drupal\Core\Field\Entity\BaseFieldOverride $override */
diff --git a/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeTypeTest.php b/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeTypeTest.php
index 94a579c8703b..70f2a26e1b52 100644
--- a/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeTypeTest.php
+++ b/core/modules/node/tests/src/Kernel/Migrate/d7/MigrateNodeTypeTest.php
@@ -45,14 +45,16 @@ protected function setUp(): void {
    *   If submission information is displayed.
    * @param bool $new_revision
    *   If this is a new revision.
-   * @param array $expected_available_menus
+   * @param array|null $expected_available_menus
    *   The expected menus.
-   * @param string $expected_parent
+   * @param string|null $expected_parent
    *   The expected menu parents.
    * @param string|null $body_label
    *   (optional) The label for the body field.
+   *
+   * @internal
    */
-  protected function assertEntity($id, $label, $description, $help, $display_submitted, $new_revision, $expected_available_menus, $expected_parent, $body_label = NULL) {
+  protected function assertEntity(string $id, string $label, string $description, string $help, bool $display_submitted, bool $new_revision, ?array $expected_available_menus, ?string $expected_parent, ?string $body_label = NULL): void {
     /** @var \Drupal\node\NodeTypeInterface $entity */
     $entity = NodeType::load($id);
     $this->assertInstanceOf(NodeTypeInterface::class, $entity);
diff --git a/core/modules/node/tests/src/Kernel/NodeAccessTestBase.php b/core/modules/node/tests/src/Kernel/NodeAccessTestBase.php
index 3ee8ba16f323..32eca5d6ba2b 100644
--- a/core/modules/node/tests/src/Kernel/NodeAccessTestBase.php
+++ b/core/modules/node/tests/src/Kernel/NodeAccessTestBase.php
@@ -91,6 +91,8 @@ protected function setUp() {
    *   The node object to check.
    * @param \Drupal\Core\Session\AccountInterface $account
    *   The user account for which to check access.
+   *
+   * @internal
    */
   public function assertNodeAccess(array $ops, NodeInterface $node, AccountInterface $account) {
     foreach ($ops as $op => $result) {
@@ -111,8 +113,10 @@ public function assertNodeAccess(array $ops, NodeInterface $node, AccountInterfa
    * @param string|null $langcode
    *   (optional) The language code indicating which translation of the node
    *   to check. If NULL, the untranslated (fallback) access is checked.
+   *
+   * @internal
    */
-  public function assertNodeCreateAccess($bundle, $result, AccountInterface $account, $langcode = NULL) {
+  public function assertNodeCreateAccess(string $bundle, bool $result, AccountInterface $account, ?string $langcode = NULL) {
     $this->assertEquals($result, $this->accessHandler->createAccess($bundle, $account, [
       'langcode' => $langcode,
     ]), $this->nodeAccessAssertMessage('create', $result, $langcode));
diff --git a/core/modules/options/tests/src/Functional/OptionsFieldUITest.php b/core/modules/options/tests/src/Functional/OptionsFieldUITest.php
index e3d732464eee..23e965bd4174 100644
--- a/core/modules/options/tests/src/Functional/OptionsFieldUITest.php
+++ b/core/modules/options/tests/src/Functional/OptionsFieldUITest.php
@@ -306,16 +306,18 @@ protected function createOptionsField($type) {
   /**
    * Tests a string input for the 'allowed values' form element.
    *
-   * @param $input_string
+   * @param string $input_string
    *   The input string, in the pipe-linefeed format expected by the form
    *   element.
-   * @param $result
+   * @param array|string $result
    *   Either an expected resulting array in
    *   $field->getSetting('allowed_values'), or an expected error message.
-   * @param $message
+   * @param string $message
    *   Message to display.
+   *
+   * @internal
    */
-  public function assertAllowedValuesInput($input_string, $result, $message) {
+  public function assertAllowedValuesInput(string $input_string, $result, string $message): void {
     $edit = ['settings[allowed_values]' => $input_string];
     $this->drupalGet($this->adminPath);
     $this->submitForm($edit, 'Save field settings');
diff --git a/core/modules/path/tests/src/Functional/PathContentModerationTest.php b/core/modules/path/tests/src/Functional/PathContentModerationTest.php
index dbc9b0f788cd..46e9a92d2e01 100644
--- a/core/modules/path/tests/src/Functional/PathContentModerationTest.php
+++ b/core/modules/path/tests/src/Functional/PathContentModerationTest.php
@@ -234,8 +234,10 @@ public function testTranslatedModeratedNodeAlias() {
    *
    * @param string[] $paths
    *   An array of paths to check for.
+   *
+   * @internal
    */
-  public function assertPathsAreAccessible(array $paths) {
+  public function assertPathsAreAccessible(array $paths): void {
     foreach ($paths as $path) {
       $this->drupalGet($path);
       $this->assertSession()->statusCodeEquals(200);
diff --git a/core/modules/path/tests/src/Kernel/Migrate/d6/MigrateUrlAliasTest.php b/core/modules/path/tests/src/Kernel/Migrate/d6/MigrateUrlAliasTest.php
index 43bc7e72d312..065d229f1fba 100644
--- a/core/modules/path/tests/src/Kernel/Migrate/d6/MigrateUrlAliasTest.php
+++ b/core/modules/path/tests/src/Kernel/Migrate/d6/MigrateUrlAliasTest.php
@@ -58,8 +58,10 @@ protected function setUp(): void {
    *   The path conditions.
    * @param \Drupal\path_alias\PathAliasInterface $path_alias
    *   The path alias.
+   *
+   * @internal
    */
-  private function assertPath($pid, $conditions, PathAliasInterface $path_alias) {
+  private function assertPath(int $pid, array $conditions, PathAliasInterface $path_alias): void {
     $this->assertSame($pid, (int) $path_alias->id());
     $this->assertSame($conditions['alias'], $path_alias->getAlias());
     $this->assertSame($conditions['langcode'], $path_alias->get('langcode')->value);
diff --git a/core/modules/path_alias/tests/src/Functional/UrlAlterFunctionalTest.php b/core/modules/path_alias/tests/src/Functional/UrlAlterFunctionalTest.php
index cfac219e1da9..9accbe0435fb 100644
--- a/core/modules/path_alias/tests/src/Functional/UrlAlterFunctionalTest.php
+++ b/core/modules/path_alias/tests/src/Functional/UrlAlterFunctionalTest.php
@@ -93,12 +93,14 @@ public function testUrlAlter() {
   /**
    * Assert that an outbound path is altered to an expected value.
    *
-   * @param $original
+   * @param string $original
    *   A string with the original path that is run through generateFrommPath().
-   * @param $final
+   * @param string $final
    *   A string with the expected result after generateFrommPath().
+   *
+   * @internal
    */
-  protected function assertUrlOutboundAlter($original, $final) {
+  protected function assertUrlOutboundAlter(string $original, string $final): void {
     // Test outbound altering.
     $result = $this->container->get('path_processor_manager')->processOutbound($original);
     $this->assertSame($final, $result, new FormattableMarkup('Altered outbound URL %original, expected %final, and got %result.', ['%original' => $original, '%final' => $final, '%result' => $result]));
@@ -107,12 +109,14 @@ protected function assertUrlOutboundAlter($original, $final) {
   /**
    * Assert that an inbound path is altered to an expected value.
    *
-   * @param $original
+   * @param string $original
    *   The original path before it has been altered by inbound URL processing.
-   * @param $final
+   * @param string $final
    *   A string with the expected result.
+   *
+   * @internal
    */
-  protected function assertUrlInboundAlter($original, $final) {
+  protected function assertUrlInboundAlter(string $original, string $final): void {
     // Test inbound altering.
     $result = $this->container->get('path_alias.manager')->getPathByAlias($original);
     $this->assertSame($final, $result, new FormattableMarkup('Altered inbound URL %original, expected %final, and got %result.', ['%original' => $original, '%final' => $final, '%result' => $result]));
diff --git a/core/modules/quickedit/tests/src/Functional/QuickEditEndPointAccessTest.php b/core/modules/quickedit/tests/src/Functional/QuickEditEndPointAccessTest.php
index 1cb90adf40db..dbff08aa289f 100644
--- a/core/modules/quickedit/tests/src/Functional/QuickEditEndPointAccessTest.php
+++ b/core/modules/quickedit/tests/src/Functional/QuickEditEndPointAccessTest.php
@@ -76,8 +76,10 @@ public function testEndPointAccess() {
    *   The URL to check.
    * @param array $body
    *   The payload to send with the request.
+   *
+   * @internal
    */
-  protected function assertAccessIsBlocked($url, array $body) {
+  protected function assertAccessIsBlocked(string $url, array $body): void {
     $client = $this->getHttpClient();
     $message = ['message' => "The 'access in-place editing' permission is required."];
 
diff --git a/core/modules/quickedit/tests/src/FunctionalJavascript/LayoutBuilderQuickEditTest.php b/core/modules/quickedit/tests/src/FunctionalJavascript/LayoutBuilderQuickEditTest.php
index daa5a192c4d9..05744d77eafc 100644
--- a/core/modules/quickedit/tests/src/FunctionalJavascript/LayoutBuilderQuickEditTest.php
+++ b/core/modules/quickedit/tests/src/FunctionalJavascript/LayoutBuilderQuickEditTest.php
@@ -214,14 +214,14 @@ protected function enableLayouts($path) {
   /**
    * {@inheritdoc}
    */
-  protected function assertEntityInstanceFieldStates($entity_type_id, $entity_id, $entity_instance_id, array $expected_field_states) {
+  protected function assertEntityInstanceFieldStates($entity_type_id, $entity_id, $entity_instance_id, array $expected_field_states): void {
     parent::assertEntityInstanceFieldStates($entity_type_id, $entity_id, $entity_instance_id, $this->replaceLayoutBuilderFieldIdKeys($expected_field_states));
   }
 
   /**
    * {@inheritdoc}
    */
-  protected function assertEntityInstanceFieldMarkup($expected_field_attributes) {
+  protected function assertEntityInstanceFieldMarkup($expected_field_attributes): void {
     if (func_num_args() === 4) {
       $expected_field_attributes = func_get_arg(3);
       @trigger_error('Calling ' . __METHOD__ . '() with 4 arguments is deprecated in drupal:9.1.0 and will throw an error in drupal:10.0.0. See https://www.drupal.org/project/drupal/issues/3037436', E_USER_DEPRECATED);
@@ -327,7 +327,7 @@ protected function disableLayoutBuilder($path) {
    * @param string[] $fields
    *   The fields test.
    */
-  private function assertQuickEditInit(array $fields) {
+  private function assertQuickEditInit(array $fields): void {
     $this->assertNotEmpty($fields);
     $node = $this->article;
     $this->drupalGet('node/' . $node->id());
diff --git a/core/modules/rdf/tests/src/Functional/StandardProfileTest.php b/core/modules/rdf/tests/src/Functional/StandardProfileTest.php
index 7b9d268f2ad1..7148aa38d2c2 100644
--- a/core/modules/rdf/tests/src/Functional/StandardProfileTest.php
+++ b/core/modules/rdf/tests/src/Functional/StandardProfileTest.php
@@ -338,8 +338,10 @@ protected function doTermRdfaTests() {
    *   The word to use in the test assertion message.
    *
    * @throws \Drupal\Core\Entity\EntityMalformedException
+   *
+   * @internal
    */
-  protected function assertRdfaCommonNodeProperties(NodeInterface $node, $message_prefix) {
+  protected function assertRdfaCommonNodeProperties(NodeInterface $node, string $message_prefix): void {
     $this->drupalGet($node->toUrl());
     $uri = $node->toUrl('canonical', ['absolute' => TRUE])->toString();
 
@@ -390,8 +392,10 @@ protected function assertRdfaCommonNodeProperties(NodeInterface $node, $message_
    *
    * @param string $message_prefix
    *   The word to use in the test assertion message.
+   *
+   * @internal
    */
-  protected function assertRdfaArticleProperties($message_prefix) {
+  protected function assertRdfaArticleProperties(string $message_prefix): void {
     // Tags.
     $expected_value = [
       'type' => 'uri',
@@ -415,8 +419,10 @@ protected function assertRdfaArticleProperties($message_prefix) {
 
   /**
    * Tests output for comment properties on nodes in full page view mode.
+   *
+   * @internal
    */
-  protected function assertRdfaNodeCommentProperties() {
+  protected function assertRdfaNodeCommentProperties(): void {
 
     $this->drupalGet($this->article->toUrl());
     // Relationship between node and comment.
diff --git a/core/modules/rdf/tests/src/Kernel/Migrate/d7/MigrateRdfMappingTest.php b/core/modules/rdf/tests/src/Kernel/Migrate/d7/MigrateRdfMappingTest.php
index 59c2157e86c9..bad3a45e4166 100644
--- a/core/modules/rdf/tests/src/Kernel/Migrate/d7/MigrateRdfMappingTest.php
+++ b/core/modules/rdf/tests/src/Kernel/Migrate/d7/MigrateRdfMappingTest.php
@@ -49,8 +49,10 @@ protected function setUp(): void {
    *   The expected RDF types.
    * @param array[] $field_mappings
    *   The expected RDF field mappings.
+   *
+   * @internal
    */
-  protected function assertRdfMapping($entity_type, $bundle, $types, $field_mappings) {
+  protected function assertRdfMapping(string $entity_type, string $bundle, array $types, array $field_mappings): void {
     $rdf_mapping = rdf_get_mapping($entity_type, $bundle);
     $this->assertInstanceOf(RdfMappingInterface::class, $rdf_mapping);
     $this->assertSame($types, $rdf_mapping->getBundleMapping());
diff --git a/core/modules/responsive_image/tests/src/Functional/ResponsiveImageFieldDisplayTest.php b/core/modules/responsive_image/tests/src/Functional/ResponsiveImageFieldDisplayTest.php
index b56b027fece9..ba2708ceda6e 100644
--- a/core/modules/responsive_image/tests/src/Functional/ResponsiveImageFieldDisplayTest.php
+++ b/core/modules/responsive_image/tests/src/Functional/ResponsiveImageFieldDisplayTest.php
@@ -469,7 +469,7 @@ public function testResponsiveImageFieldFormattersOneSource() {
    * @param string $link_type
    *   The link type to test. Either 'file' or 'content'.
    */
-  private function assertResponsiveImageFieldFormattersLink($link_type) {
+  private function assertResponsiveImageFieldFormattersLink(string $link_type): void {
     $field_name = mb_strtolower($this->randomMachineName());
     $field_settings = ['alt_field_required' => 0];
     $this->createImageField($field_name, 'article', ['uri_scheme' => 'public'], $field_settings);
diff --git a/core/modules/search/tests/src/Functional/SearchAdminThemeTest.php b/core/modules/search/tests/src/Functional/SearchAdminThemeTest.php
index 10f35c8ccd86..5f6c12ea7e8c 100644
--- a/core/modules/search/tests/src/Functional/SearchAdminThemeTest.php
+++ b/core/modules/search/tests/src/Functional/SearchAdminThemeTest.php
@@ -93,8 +93,10 @@ public function testSearchUsingAdminTheme() {
    *
    * @param bool $is_admin
    *   TRUE to test for administrative theme, FALSE otherwise.
+   *
+   * @internal
    */
-  protected function assertAdminTheme($is_admin) {
+  protected function assertAdminTheme(bool $is_admin): void {
     if ($is_admin) {
       $this->assertSession()->responseContains('core/themes/' . $this->adminTheme);
     }
diff --git a/core/modules/search/tests/src/Functional/SearchCommentTest.php b/core/modules/search/tests/src/Functional/SearchCommentTest.php
index d0148ca933e7..b07904e922e3 100644
--- a/core/modules/search/tests/src/Functional/SearchCommentTest.php
+++ b/core/modules/search/tests/src/Functional/SearchCommentTest.php
@@ -307,8 +307,10 @@ public function setRolePermissions($rid, $access_comments = FALSE, $search_conte
 
   /**
    * Update search index and search for comment.
+   *
+   * @internal
    */
-  public function assertCommentAccess($assume_access, $message) {
+  public function assertCommentAccess(bool $assume_access, string $message): void {
     // Invoke search index update.
     \Drupal::service('search.index')->markForReindex('node_search', $this->node->id());
     $this->cronRun();
diff --git a/core/modules/search/tests/src/Functional/SearchConfigSettingsFormTest.php b/core/modules/search/tests/src/Functional/SearchConfigSettingsFormTest.php
index 35d0fd16cd01..a5d4a7f71c68 100644
--- a/core/modules/search/tests/src/Functional/SearchConfigSettingsFormTest.php
+++ b/core/modules/search/tests/src/Functional/SearchConfigSettingsFormTest.php
@@ -408,17 +408,17 @@ protected function verifySearchPageOperations($id, $edit, $delete, $disable, $en
   /**
    * Checks that the default search page matches expectations.
    *
-   * @param string $expected
+   * @param string|false $expected
    *   The expected search page.
    * @param string $message
    *   (optional) A message to display with the assertion.
-   * @param string $group
-   *   (optional) The group this message is in.
+   *
+   * @internal
    */
-  protected function assertDefaultSearch($expected, $message = '', $group = 'Other') {
+  protected function assertDefaultSearch($expected, string $message = ''): void {
     /** @var \Drupal\search\SearchPageRepositoryInterface $search_page_repository */
     $search_page_repository = \Drupal::service('search.search_page_repository');
-    $this->assertSame($expected, $search_page_repository->getDefaultSearchPage(), $message, $group);
+    $this->assertSame($expected, $search_page_repository->getDefaultSearchPage(), $message);
   }
 
   /**
diff --git a/core/modules/search/tests/src/Functional/SearchMultilingualEntityTest.php b/core/modules/search/tests/src/Functional/SearchMultilingualEntityTest.php
index 7fcefbe50f5d..a8dbc5d130ba 100644
--- a/core/modules/search/tests/src/Functional/SearchMultilingualEntityTest.php
+++ b/core/modules/search/tests/src/Functional/SearchMultilingualEntityTest.php
@@ -284,8 +284,10 @@ public function testMultilingualSearch() {
    *   Count of total items to verify.
    * @param string $message
    *   Message to use, something like "after updating the search index".
+   *
+   * @internal
    */
-  protected function assertIndexCounts($remaining, $total, $message) {
+  protected function assertIndexCounts(int $remaining, int $total, string $message): void {
     // Check status via plugin method call.
     $status = $this->plugin->indexStatus();
     $this->assertEquals($remaining, $status['remaining'], 'Remaining items ' . $message . ' is ' . $remaining);
@@ -320,8 +322,10 @@ protected function assertIndexCounts($remaining, $total, $message) {
    *   Count of "foo" items to assert.
    * @param string $message
    *   Message suffix to use.
+   *
+   * @internal
    */
-  protected function assertDatabaseCounts($count_node, $count_foo, $message) {
+  protected function assertDatabaseCounts(int $count_node, int $count_foo, string $message): void {
     // Count number of distinct nodes by ID.
     $connection = Database::getConnection();
     $results = $connection->select('search_dataset', 'i')
diff --git a/core/modules/search/tests/src/Kernel/Migrate/d7/MigrateSearchPageTest.php b/core/modules/search/tests/src/Kernel/Migrate/d7/MigrateSearchPageTest.php
index 16106e75302f..d3e8ee38ea98 100644
--- a/core/modules/search/tests/src/Kernel/Migrate/d7/MigrateSearchPageTest.php
+++ b/core/modules/search/tests/src/Kernel/Migrate/d7/MigrateSearchPageTest.php
@@ -31,8 +31,10 @@ class MigrateSearchPageTest extends MigrateDrupal7TestBase {
    *   The expected status of the search page.
    * @param array $expected_config
    *   An array of expected configuration for the search page.
+   *
+   * @internal
    */
-  protected function assertEntity($id, $path, $status = FALSE, array $expected_config = NULL) {
+  protected function assertEntity(string $id, string $path, bool $status = FALSE, array $expected_config = NULL): void {
     /** @var \Drupal\search\Entity\SearchPage $search_page */
     $search_page = SearchPage::load($id);
     $this->assertSame($id, $search_page->id());
diff --git a/core/modules/serialization/tests/src/Unit/Normalizer/EntityReferenceFieldItemNormalizerTest.php b/core/modules/serialization/tests/src/Unit/Normalizer/EntityReferenceFieldItemNormalizerTest.php
index 617dce5271d7..459ad5da43a6 100644
--- a/core/modules/serialization/tests/src/Unit/Normalizer/EntityReferenceFieldItemNormalizerTest.php
+++ b/core/modules/serialization/tests/src/Unit/Normalizer/EntityReferenceFieldItemNormalizerTest.php
@@ -427,8 +427,10 @@ public function testDenormalizeWithId() {
    *
    * @param array $data
    *   The data to denormalize.
+   *
+   * @internal
    */
-  protected function assertDenormalize(array $data) {
+  protected function assertDenormalize(array $data): void {
     $this->fieldItem->getParent()
       ->willReturn($this->prophesize(FieldItemListInterface::class)->reveal());
     $this->fieldItem->getFieldDefinition()->willReturn($this->fieldDefinition->reveal());
diff --git a/core/modules/settings_tray/tests/src/FunctionalJavascript/OverriddenConfigurationTest.php b/core/modules/settings_tray/tests/src/FunctionalJavascript/OverriddenConfigurationTest.php
index cfe5c1566bb2..8d17f3a65270 100644
--- a/core/modules/settings_tray/tests/src/FunctionalJavascript/OverriddenConfigurationTest.php
+++ b/core/modules/settings_tray/tests/src/FunctionalJavascript/OverriddenConfigurationTest.php
@@ -156,8 +156,10 @@ public function testOverriddenBlock() {
    *   The overridden block.
    * @param string $override_text
    *   The override text that should appear in the block.
+   *
+   * @internal
    */
-  protected function assertOverriddenBlockDisabled(Block $overridden_block, $override_text) {
+  protected function assertOverriddenBlockDisabled(Block $overridden_block, string $override_text): void {
     $web_assert = $this->assertSession();
     $page = $this->getSession()->getPage();
     $block_selector = $this->getBlockSelector($overridden_block);
diff --git a/core/modules/shortcut/tests/src/Functional/ShortcutLinksTest.php b/core/modules/shortcut/tests/src/Functional/ShortcutLinksTest.php
index a3029053f4e2..4dc879b389fd 100644
--- a/core/modules/shortcut/tests/src/Functional/ShortcutLinksTest.php
+++ b/core/modules/shortcut/tests/src/Functional/ShortcutLinksTest.php
@@ -462,20 +462,13 @@ public function testShortcutBlockAccess() {
    *   (optional) A message to display with the assertion. Do not translate
    *   messages: use new FormattableMarkup() to embed variables in the message text, not
    *   t(). If left blank, a default message will be displayed.
-   * @param string $group
-   *   (optional) The group this message is in, which is displayed in a column
-   *   in test output. Use 'Debug' to indicate this is debugging output. Do not
-   *   translate this string. Defaults to 'Other'; most tests do not override
-   *   this default.
    *
-   * @return bool
-   *   TRUE if the assertion succeeded.
+   * @internal
    */
-  protected function assertShortcutQuickLink($label, $index = 0, $message = '', $group = 'Other') {
+  protected function assertShortcutQuickLink(string $label, int $index = 0, string $message = ''): void {
     $links = $this->xpath('//a[normalize-space()=:label]', [':label' => $label]);
     $message = ($message ? $message : new FormattableMarkup('Shortcut quick link with label %label found.', ['%label' => $label]));
     $this->assertArrayHasKey($index, $links, $message);
-    return TRUE;
   }
 
 }
diff --git a/core/modules/shortcut/tests/src/Kernel/Migrate/d7/MigrateShortcutSetTest.php b/core/modules/shortcut/tests/src/Kernel/Migrate/d7/MigrateShortcutSetTest.php
index 61b438abbc5e..c932114e6e96 100644
--- a/core/modules/shortcut/tests/src/Kernel/Migrate/d7/MigrateShortcutSetTest.php
+++ b/core/modules/shortcut/tests/src/Kernel/Migrate/d7/MigrateShortcutSetTest.php
@@ -54,8 +54,10 @@ public function testShortcutSetMigration() {
    *   The expected shortcut set label.
    * @param int $expected_size
    *   The number of shortcuts expected to be in the set.
+   *
+   * @internal
    */
-  protected function assertEntity($id, $label, $expected_size) {
+  protected function assertEntity(string $id, string $label, int $expected_size): void {
     $shortcut_set = ShortcutSet::load($id);
     $this->assertInstanceOf(ShortcutSetInterface::class, $shortcut_set);
     /** @var \Drupal\shortcut\ShortcutSetInterface $shortcut_set */
diff --git a/core/modules/shortcut/tests/src/Kernel/Migrate/d7/MigrateShortcutTest.php b/core/modules/shortcut/tests/src/Kernel/Migrate/d7/MigrateShortcutTest.php
index 6e1b4fefe03e..bf9d9bbf1b3b 100644
--- a/core/modules/shortcut/tests/src/Kernel/Migrate/d7/MigrateShortcutTest.php
+++ b/core/modules/shortcut/tests/src/Kernel/Migrate/d7/MigrateShortcutTest.php
@@ -48,13 +48,15 @@ protected function setUp(): void {
    *   The expected weight of the shortcut.
    * @param string $url
    *   The expected URL of the shortcut.
+   *
+   * @internal
    */
-  protected function assertEntity($id, $title, $weight, $url) {
+  protected function assertEntity(int $id, string $title, int $weight, string $url): void {
     $shortcut = Shortcut::load($id);
     $this->assertInstanceOf(ShortcutInterface::class, $shortcut);
     /** @var \Drupal\shortcut\ShortcutInterface $shortcut */
     $this->assertSame($title, $shortcut->getTitle());
-    $this->assertSame($weight, $shortcut->getWeight());
+    $this->assertSame($weight, (int) $shortcut->getWeight());
     $this->assertSame($url, $shortcut->getUrl()->toString());
   }
 
@@ -63,10 +65,10 @@ protected function assertEntity($id, $title, $weight, $url) {
    */
   public function testShortcutMigration() {
     // Check if the 4 shortcuts were migrated correctly.
-    $this->assertEntity(1, 'Add content', '-20', '/node/add');
-    $this->assertEntity(2, 'Find content', '-19', '/admin/content');
-    $this->assertEntity(3, 'Help', '-49', '/admin/help');
-    $this->assertEntity(4, 'People', '-50', '/admin/people');
+    $this->assertEntity(1, 'Add content', -20, '/node/add');
+    $this->assertEntity(2, 'Find content', -19, '/admin/content');
+    $this->assertEntity(3, 'Help', -49, '/admin/help');
+    $this->assertEntity(4, 'People', -50, '/admin/people');
   }
 
 }
diff --git a/core/modules/statistics/tests/src/Kernel/Migrate/d6/MigrateNodeCounterTest.php b/core/modules/statistics/tests/src/Kernel/Migrate/d6/MigrateNodeCounterTest.php
index 7e31b6a308f9..f42079f74a73 100644
--- a/core/modules/statistics/tests/src/Kernel/Migrate/d6/MigrateNodeCounterTest.php
+++ b/core/modules/statistics/tests/src/Kernel/Migrate/d6/MigrateNodeCounterTest.php
@@ -77,8 +77,10 @@ public function testStatisticsSettings() {
    *   The expected day count.
    * @param int $timestamp
    *   The expected timestamp.
+   *
+   * @internal
    */
-  protected function assertNodeCounter($nid, $total_count, $day_count, $timestamp) {
+  protected function assertNodeCounter(int $nid, int $total_count, int $day_count, int $timestamp): void {
     /** @var \Drupal\statistics\StatisticsViewsResult $statistics */
     $statistics = $this->container->get('statistics.storage.node')->fetchView($nid);
     $this->assertSame($total_count, $statistics->getTotalCount());
diff --git a/core/modules/statistics/tests/src/Kernel/Migrate/d7/MigrateNodeCounterTest.php b/core/modules/statistics/tests/src/Kernel/Migrate/d7/MigrateNodeCounterTest.php
index f2041654f285..7f8c319831e5 100644
--- a/core/modules/statistics/tests/src/Kernel/Migrate/d7/MigrateNodeCounterTest.php
+++ b/core/modules/statistics/tests/src/Kernel/Migrate/d7/MigrateNodeCounterTest.php
@@ -68,8 +68,10 @@ public function testStatisticsSettings() {
    *   The expected day count.
    * @param int $timestamp
    *   The expected timestamp.
+   *
+   * @internal
    */
-  protected function assertNodeCounter($nid, $total_count, $day_count, $timestamp) {
+  protected function assertNodeCounter(int $nid, int $total_count, int $day_count, int $timestamp): void {
     /** @var \Drupal\statistics\StatisticsViewsResult $statistics */
     $statistics = $this->container->get('statistics.storage.node')->fetchView($nid);
     $this->assertSame($total_count, $statistics->getTotalCount());
diff --git a/core/modules/system/tests/src/Functional/Ajax/FrameworkTest.php b/core/modules/system/tests/src/Functional/Ajax/FrameworkTest.php
index 402ac866622e..de95fb576168 100644
--- a/core/modules/system/tests/src/Functional/Ajax/FrameworkTest.php
+++ b/core/modules/system/tests/src/Functional/Ajax/FrameworkTest.php
@@ -107,12 +107,14 @@ public function testAJAXRenderError() {
    * the actual command contains additional settings that aren't part of
    * $needle.
    *
-   * @param $haystack
+   * @param array $haystack
    *   An array of rendered Ajax commands returned by the server.
-   * @param $needle
+   * @param array $needle
    *   Array of info we're expecting in one of those commands.
+   *
+   * @internal
    */
-  protected function assertCommand($haystack, $needle) {
+  protected function assertCommand(array $haystack, array $needle): void {
     $found = FALSE;
     foreach ($haystack as $command) {
       // If the command has additional settings that we're not testing for, do
diff --git a/core/modules/system/tests/src/Functional/Batch/ProcessingTest.php b/core/modules/system/tests/src/Functional/Batch/ProcessingTest.php
index e624e4c1decf..430883e7cbd1 100644
--- a/core/modules/system/tests/src/Functional/Batch/ProcessingTest.php
+++ b/core/modules/system/tests/src/Functional/Batch/ProcessingTest.php
@@ -221,16 +221,13 @@ public function testBatchLargePercentage() {
    * Triggers a pass if the texts were found in order in the raw content.
    *
    * @param $texts
-   *   Array of raw strings to look for .
-   * @param $message
-   *   Message to display.
+   *   Array of raw strings to look for.
    *
-   * @return
-   *   TRUE on pass, FALSE on fail.
+   * @internal
    */
-  public function assertBatchMessages($texts, $message) {
+  public function assertBatchMessages(array $texts): void {
     $pattern = '|' . implode('.*', $texts) . '|s';
-    return $this->assertSession()->responseMatches($pattern);
+    $this->assertSession()->responseMatches($pattern);
   }
 
   /**
diff --git a/core/modules/system/tests/src/Functional/Cache/SessionExistsCacheContextTest.php b/core/modules/system/tests/src/Functional/Cache/SessionExistsCacheContextTest.php
index e7561716cbb4..dca3999efc59 100644
--- a/core/modules/system/tests/src/Functional/Cache/SessionExistsCacheContextTest.php
+++ b/core/modules/system/tests/src/Functional/Cache/SessionExistsCacheContextTest.php
@@ -62,8 +62,10 @@ public function testCacheContext() {
 
   /**
    * Asserts whether a session cookie is present on the client or not.
+   *
+   * @internal
    */
-  public function assertSessionCookieOnClient($expected_present) {
+  public function assertSessionCookieOnClient(bool $expected_present): void {
     $this->assertEquals($expected_present, (bool) $this->getSession()->getCookie($this->getSessionName()), 'Session cookie exists.');
   }
 
diff --git a/core/modules/system/tests/src/Functional/Common/NoJavaScriptAnonymousTest.php b/core/modules/system/tests/src/Functional/Common/NoJavaScriptAnonymousTest.php
index 148d025e8dfe..4e064969f8fd 100644
--- a/core/modules/system/tests/src/Functional/Common/NoJavaScriptAnonymousTest.php
+++ b/core/modules/system/tests/src/Functional/Common/NoJavaScriptAnonymousTest.php
@@ -47,8 +47,10 @@ public function testNoJavaScript() {
 
   /**
    * Passes if no JavaScript is found on the page.
+   *
+   * @internal
    */
-  protected function assertNoJavaScript() {
+  protected function assertNoJavaScript(): void {
     // Ensure drupalSettings is not set.
     $settings = $this->getDrupalSettings();
     $this->assertTrue(empty($settings), 'drupalSettings is not set.');
diff --git a/core/modules/system/tests/src/Functional/Entity/EntityReferenceSelection/EntityReferenceSelectionAccessTest.php b/core/modules/system/tests/src/Functional/Entity/EntityReferenceSelection/EntityReferenceSelectionAccessTest.php
index 1ab19c710c1b..8f6a4fcaa34c 100644
--- a/core/modules/system/tests/src/Functional/Entity/EntityReferenceSelection/EntityReferenceSelectionAccessTest.php
+++ b/core/modules/system/tests/src/Functional/Entity/EntityReferenceSelection/EntityReferenceSelectionAccessTest.php
@@ -91,8 +91,10 @@ protected function setUp(): void {
    *   An array of tests to run.
    * @param string $handler_name
    *   The name of the entity type selection handler being tested.
+   *
+   * @internal
    */
-  protected function assertReferenceable(array $selection_options, $tests, $handler_name) {
+  protected function assertReferenceable(array $selection_options, array $tests, string $handler_name): void {
     $handler = \Drupal::service('plugin.manager.entity_reference_selection')->getInstance($selection_options);
 
     foreach ($tests as $test) {
diff --git a/core/modules/system/tests/src/Functional/Form/ConfirmFormTest.php b/core/modules/system/tests/src/Functional/Form/ConfirmFormTest.php
index 5be7c331889d..1cd9a8eb7482 100644
--- a/core/modules/system/tests/src/Functional/Form/ConfirmFormTest.php
+++ b/core/modules/system/tests/src/Functional/Form/ConfirmFormTest.php
@@ -79,13 +79,13 @@ public function testConfirmFormWithExternalDestination() {
    *   The url to check for.
    * @param string $message
    *   The assert message.
-   * @param string $group
-   *   The assertion group.
+   *
+   * @internal
    */
-  public function assertCancelLinkUrl(Url $url, $message = '', $group = 'Other') {
+  public function assertCancelLinkUrl(Url $url, string $message = ''): void {
     $links = $this->xpath('//a[@href=:url]', [':url' => $url->toString()]);
     $message = ($message ? $message : new FormattableMarkup('Cancel link with URL %url found.', ['%url' => $url->toString()]));
-    $this->assertTrue(isset($links[0]), $message, $group);
+    $this->assertTrue(isset($links[0]), $message);
   }
 
 }
diff --git a/core/modules/system/tests/src/Functional/Form/FormTest.php b/core/modules/system/tests/src/Functional/Form/FormTest.php
index 860ff8dd0077..7c4eddd2fd38 100644
--- a/core/modules/system/tests/src/Functional/Form/FormTest.php
+++ b/core/modules/system/tests/src/Functional/Form/FormTest.php
@@ -790,8 +790,10 @@ public function testDisabledElements() {
 
   /**
    * Assert that the values submitted to a form matches the default values of the elements.
+   *
+   * @internal
    */
-  public function assertFormValuesDefault($values, $form) {
+  public function assertFormValuesDefault(array $values, array $form): void {
     foreach (Element::children($form) as $key) {
       if (isset($form[$key]['#default_value'])) {
         if (isset($form[$key]['#expected_value'])) {
diff --git a/core/modules/system/tests/src/Functional/Mail/HtmlToTextTest.php b/core/modules/system/tests/src/Functional/Mail/HtmlToTextTest.php
index ca1af095f3ba..ecb9e2605470 100644
--- a/core/modules/system/tests/src/Functional/Mail/HtmlToTextTest.php
+++ b/core/modules/system/tests/src/Functional/Mail/HtmlToTextTest.php
@@ -41,18 +41,20 @@ protected function stringToHtml($text) {
   /**
    * Helper function to test \Drupal\Core\Mail\MailFormatHelper::htmlToText().
    *
-   * @param $html
+   * @param string $html
    *   The source HTML string to be converted.
-   * @param $text
+   * @param string $text
    *   The expected result of converting $html to text.
-   * @param $message
+   * @param string $message
    *   A text message to display in the assertion message.
-   * @param $allowed_tags
+   * @param array|null $allowed_tags
    *   (optional) An array of allowed tags, or NULL to default to the full
    *   set of tags supported by
    *   \Drupal\Core\Mail\MailFormatHelper::htmlToText().
+   *
+   * @internal
    */
-  protected function assertHtmlToText($html, $text, $message, $allowed_tags = NULL) {
+  protected function assertHtmlToText(string $html, string $text, string $message, ?array $allowed_tags = NULL): void {
     preg_match_all('/<([a-z0-6]+)/', mb_strtolower($html), $matches);
     $tested_tags = implode(', ', array_unique($matches[1]));
     $message .= ' (' . $tested_tags . ')';
diff --git a/core/modules/system/tests/src/Functional/Menu/LocalActionTest.php b/core/modules/system/tests/src/Functional/Menu/LocalActionTest.php
index fcea5966ad92..f4ca2ab86ef8 100644
--- a/core/modules/system/tests/src/Functional/Menu/LocalActionTest.php
+++ b/core/modules/system/tests/src/Functional/Menu/LocalActionTest.php
@@ -70,8 +70,10 @@ public function testLocalAction() {
    *
    * @param array $actions
    *   A list of expected action link titles, keyed by the hrefs.
+   *
+   * @internal
    */
-  protected function assertLocalAction(array $actions) {
+  protected function assertLocalAction(array $actions): void {
     $elements = $this->xpath('//a[contains(@class, :class)]', [
       ':class' => 'button-action',
     ]);
diff --git a/core/modules/system/tests/src/Functional/Menu/LocalTasksTest.php b/core/modules/system/tests/src/Functional/Menu/LocalTasksTest.php
index 7c74f5aaedf8..c9ddfb282402 100644
--- a/core/modules/system/tests/src/Functional/Menu/LocalTasksTest.php
+++ b/core/modules/system/tests/src/Functional/Menu/LocalTasksTest.php
@@ -51,8 +51,10 @@ protected function setUp(): void {
    * @param int $level
    *   (optional) The local tasks level to assert; 0 for primary, 1 for
    *   secondary. Defaults to 0.
+   *
+   * @internal
    */
-  protected function assertLocalTasks(array $routes, $level = 0) {
+  protected function assertLocalTasks(array $routes, int $level = 0): void {
     $elements = $this->xpath('//*[contains(@class, :class)]//a', [
       ':class' => $level == 0 ? 'tabs primary' : 'tabs secondary',
     ]);
@@ -71,15 +73,14 @@ protected function assertLocalTasks(array $routes, $level = 0) {
    * @param string $title
    *   The expected title.
    *
-   * @return bool
-   *   TRUE if the local task exists on the page.
+   * @internal
    */
-  protected function assertLocalTaskAppears($title) {
+  protected function assertLocalTaskAppears(string $title): void {
     // SimpleXML gives us the unescaped text, not the actual escaped markup,
     // so use a pattern instead to check the raw content.
     // This behavior is a bug in libxml, see
     // https://bugs.php.net/bug.php?id=49437.
-    return $this->assertSession()->responseMatches('@<a [^>]*>' . preg_quote($title, '@') . '</a>@');
+    $this->assertSession()->responseMatches('@<a [^>]*>' . preg_quote($title, '@') . '</a>@');
   }
 
   /**
@@ -88,8 +89,10 @@ protected function assertLocalTaskAppears($title) {
    * @param int $level
    *   (optional) The local tasks level to assert; 0 for primary, 1 for
    *   secondary. Defaults to 0.
+   *
+   * @internal
    */
-  protected function assertNoLocalTasks($level = 0) {
+  protected function assertNoLocalTasks(int $level = 0): void {
     $elements = $this->xpath('//*[contains(@class, :class)]//a', [
       ':class' => $level == 0 ? 'tabs primary' : 'tabs secondary',
     ]);
diff --git a/core/modules/system/tests/src/Functional/Module/InstallUninstallTest.php b/core/modules/system/tests/src/Functional/Module/InstallUninstallTest.php
index 9b6a3cb856f3..11030908cc23 100644
--- a/core/modules/system/tests/src/Functional/Module/InstallUninstallTest.php
+++ b/core/modules/system/tests/src/Functional/Module/InstallUninstallTest.php
@@ -231,8 +231,10 @@ public function testInstallUninstall() {
    *
    * @param string $name
    *   Name of the module to check.
+   *
+   * @internal
    */
-  protected function assertModuleNotInstalled($name) {
+  protected function assertModuleNotInstalled(string $name): void {
     $this->assertModules([$name], FALSE);
     $this->assertModuleTablesDoNotExist($name);
   }
@@ -242,8 +244,10 @@ protected function assertModuleNotInstalled($name) {
    *
    * @param string $name
    *   Name of the module to check.
+   *
+   * @internal
    */
-  protected function assertModuleSuccessfullyInstalled($name) {
+  protected function assertModuleSuccessfullyInstalled(string $name): void {
     $this->assertModules([$name], TRUE);
     $this->assertModuleTablesExist($name);
     $this->assertModuleConfig($name);
@@ -257,8 +261,10 @@ protected function assertModuleSuccessfullyInstalled($name) {
    * @param string $package
    *   (optional) The package of the module to uninstall. Defaults
    *   to 'Core'.
+   *
+   * @internal
    */
-  protected function assertSuccessfulUninstall($module, $package = 'Core') {
+  protected function assertSuccessfulUninstall(string $module, string $package = 'Core'): void {
     $edit = [];
     $edit['uninstall[' . $module . ']'] = TRUE;
     $this->drupalGet('admin/modules/uninstall');
@@ -286,8 +292,10 @@ protected function assertSuccessfulUninstall($module, $package = 'Core') {
    *
    * @param string $module
    *   The module that got installed.
+   *
+   * @internal
    */
-  protected function assertInstallModuleUpdates($module) {
+  protected function assertInstallModuleUpdates(string $module): void {
     /** @var \Drupal\Core\Update\UpdateRegistry $post_update_registry */
     $post_update_registry = \Drupal::service('update.post_update_registry');
     $all_update_functions = $post_update_registry->getPendingUpdateFunctions();
@@ -323,8 +331,10 @@ protected function assertInstallModuleUpdates($module) {
    *
    * @param string $module
    *   The module that got installed.
+   *
+   * @internal
    */
-  protected function assertUninstallModuleUpdates($module) {
+  protected function assertUninstallModuleUpdates(string $module): void {
     /** @var \Drupal\Core\Update\UpdateRegistry $post_update_registry */
     $post_update_registry = \Drupal::service('update.post_update_registry');
     $all_update_functions = $post_update_registry->getPendingUpdateFunctions();
@@ -350,8 +360,10 @@ protected function assertUninstallModuleUpdates($module) {
    *   Machine name of the module to verify.
    * @param string $name
    *   Human-readable name of the module to verify.
+   *
+   * @internal
    */
-  protected function assertHelp($module, $name) {
+  protected function assertHelp(string $module, string $name): void {
     $this->drupalGet('admin/help/' . $module);
     $this->assertSession()->statusCodeEquals(200);
     $this->assertSession()->pageTextContains($name . ' module');
diff --git a/core/modules/system/tests/src/Functional/Pager/PagerTest.php b/core/modules/system/tests/src/Functional/Pager/PagerTest.php
index cc570726c37b..d6f09f2174bb 100644
--- a/core/modules/system/tests/src/Functional/Pager/PagerTest.php
+++ b/core/modules/system/tests/src/Functional/Pager/PagerTest.php
@@ -216,8 +216,10 @@ public function testPagerEllipsis() {
    *
    * @param int $current_page
    *   The current pager page the internal browser is on.
+   *
+   * @internal
    */
-  protected function assertPagerItems($current_page) {
+  protected function assertPagerItems(int $current_page): void {
     $elements = $this->xpath('//ul[contains(@class, :class)]/li', [':class' => 'pager__items']);
     $this->assertNotEmpty($elements, 'Pager found.');
 
@@ -319,8 +321,10 @@ protected function assertPagerItems($current_page) {
    *   The class to assert.
    * @param string $message
    *   (optional) A verbose message to output.
+   *
+   * @internal
    */
-  protected function assertClass(NodeElement $element, $class, $message = NULL) {
+  protected function assertClass(NodeElement $element, string $class, string $message = NULL): void {
     if (!isset($message)) {
       $message = "Class .$class found.";
     }
@@ -336,8 +340,10 @@ protected function assertClass(NodeElement $element, $class, $message = NULL) {
    *   The class to assert.
    * @param string $message
    *   (optional) A verbose message to output.
+   *
+   * @internal
    */
-  protected function assertNoClass(NodeElement $element, $class, $message = NULL) {
+  protected function assertNoClass(NodeElement $element, string $class, string $message = NULL): void {
     if (!isset($message)) {
       $message = "Class .$class not found.";
     }
diff --git a/core/modules/system/tests/src/Functional/Render/HtmlResponseAttachmentsTest.php b/core/modules/system/tests/src/Functional/Render/HtmlResponseAttachmentsTest.php
index 9921fe04a900..a66e3d023260 100644
--- a/core/modules/system/tests/src/Functional/Render/HtmlResponseAttachmentsTest.php
+++ b/core/modules/system/tests/src/Functional/Render/HtmlResponseAttachmentsTest.php
@@ -101,8 +101,10 @@ public function testRenderCachedBlock() {
 
   /**
    * Helper function to make assertions about added HTTP headers.
+   *
+   * @internal
    */
-  protected function assertTeapotHeaders() {
+  protected function assertTeapotHeaders(): void {
     $this->assertSession()->responseHeaderEquals('X-Test-Teapot', 'Teapot Mode Active');
     $this->assertSession()->responseHeaderEquals('X-Test-Teapot-Replace', 'Teapot replaced');
     $this->assertSession()->responseHeaderEquals('X-Test-Teapot-No-Replace', 'This value is not replaced');
@@ -110,8 +112,10 @@ protected function assertTeapotHeaders() {
 
   /**
    * Helper function to make assertions about the presence of an RSS feed.
+   *
+   * @internal
    */
-  protected function assertFeed() {
+  protected function assertFeed(): void {
     // Discover the DOM element for the feed link.
     $test_meta = $this->xpath('//head/link[@href="test://url"]');
     $this->assertCount(1, $test_meta, 'Link has URL.');
@@ -135,8 +139,10 @@ protected function assertFeed() {
 
   /**
    * Helper function to make assertions about HTML head elements.
+   *
+   * @internal
    */
-  protected function assertHead() {
+  protected function assertHead(): void {
     // Discover the DOM element for the meta link.
     $test_meta = $this->xpath('//head/meta[@test-attribute="testvalue"]');
     $this->assertCount(1, $test_meta, 'There\'s only one test attribute.');
diff --git a/core/modules/system/tests/src/Functional/SecurityAdvisories/SecurityAdvisoryTest.php b/core/modules/system/tests/src/Functional/SecurityAdvisories/SecurityAdvisoryTest.php
index 4d6cb3928cc6..c96f119d5f41 100644
--- a/core/modules/system/tests/src/Functional/SecurityAdvisories/SecurityAdvisoryTest.php
+++ b/core/modules/system/tests/src/Functional/SecurityAdvisories/SecurityAdvisoryTest.php
@@ -217,6 +217,8 @@ public function testPsa(): void {
    *   The expected links' text.
    * @param int $error_or_warning
    *   Whether the links are a warning or an error. Should be one of the REQUIREMENT_* constants.
+   *
+   * @internal
    */
   private function assertAdminPageLinks(array $expected_link_texts, int $error_or_warning): void {
     $assert = $this->assertSession();
@@ -241,6 +243,8 @@ private function assertAdminPageLinks(array $expected_link_texts, int $error_or_
    *   The expected links' text.
    * @param int $error_or_warning
    *   Whether the links are a warning or an error. Should be one of the REQUIREMENT_* constants.
+   *
+   * @internal
    */
   private function assertStatusReportLinks(array $expected_link_texts, int $error_or_warning): void {
     $this->drupalGet(Url::fromRoute('system.status'));
@@ -260,6 +264,8 @@ private function assertStatusReportLinks(array $expected_link_texts, int $error_
    *   The advisory links.
    * @param array $routes
    *   The routes to test.
+   *
+   * @internal
    */
   private function assertAdvisoriesNotDisplayed(array $links, array $routes = ['system.status', 'system.admin']): void {
     foreach ($routes as $route) {
@@ -281,6 +287,8 @@ private function assertAdvisoriesNotDisplayed(array $links, array $routes = ['sy
    *   The expected error messages.
    *
    * @see \Drupal\advisory_feed_test\TestSystemLoggerChannel::log()
+   *
+   * @internal
    */
   protected function assertServiceAdvisoryLoggedErrors(array $expected_messages): void {
     $state = $this->container->get('state');
diff --git a/core/modules/system/tests/src/Functional/Session/SessionAuthenticationTest.php b/core/modules/system/tests/src/Functional/Session/SessionAuthenticationTest.php
index 55219cd376f5..5b7c31c92f87 100644
--- a/core/modules/system/tests/src/Functional/Session/SessionAuthenticationTest.php
+++ b/core/modules/system/tests/src/Functional/Session/SessionAuthenticationTest.php
@@ -103,8 +103,10 @@ public function testBasicAuthSession() {
    *   A response object containing the session values and the user ID.
    * @param string $expected
    *   The expected session value.
+   *
+   * @internal
    */
-  protected function assertSessionData($response, $expected) {
+  protected function assertSessionData(string $response, string $expected): void {
     $response = json_decode($response, TRUE);
     $this->assertEquals(['test_value' => $expected], $response['session'], 'The session data matches the expected value.');
 
diff --git a/core/modules/system/tests/src/Functional/Session/SessionHttpsTest.php b/core/modules/system/tests/src/Functional/Session/SessionHttpsTest.php
index 0b679ad373e5..8b123f0882a7 100644
--- a/core/modules/system/tests/src/Functional/Session/SessionHttpsTest.php
+++ b/core/modules/system/tests/src/Functional/Session/SessionHttpsTest.php
@@ -254,12 +254,14 @@ protected function getPathFromLocationHeader(ResponseInterface $response, $https
   /**
    * Tests that there exists a session with two specific session IDs.
    *
-   * @param $sid
+   * @param string $sid
    *   The insecure session ID to search for.
-   * @param $assertion_text
+   * @param string $assertion_text
    *   The text to display when we perform the assertion.
+   *
+   * @internal
    */
-  protected function assertSessionIds($sid, $assertion_text) {
+  protected function assertSessionIds(string $sid, string $assertion_text): void {
     $this->assertNotEmpty(\Drupal::database()->select('sessions', 's')->fields('s', ['timestamp'])->condition('sid', Crypt::hashBase64($sid))->execute()->fetchField(), $assertion_text);
   }
 
diff --git a/core/modules/system/tests/src/Functional/Session/SessionTest.php b/core/modules/system/tests/src/Functional/Session/SessionTest.php
index b07b8cb55b97..10c8f55b4704 100644
--- a/core/modules/system/tests/src/Functional/Session/SessionTest.php
+++ b/core/modules/system/tests/src/Functional/Session/SessionTest.php
@@ -372,8 +372,10 @@ public function sessionReset() {
 
   /**
    * Assert whether the SimpleTest browser sent a session cookie.
+   *
+   * @internal
    */
-  public function assertSessionCookie($sent) {
+  public function assertSessionCookie(bool $sent): void {
     if ($sent) {
       $this->assertNotEmpty($this->getSessionCookies()->count(), 'Session cookie was sent.');
     }
@@ -384,8 +386,10 @@ public function assertSessionCookie($sent) {
 
   /**
    * Assert whether $_SESSION is empty at the beginning of the request.
+   *
+   * @internal
    */
-  public function assertSessionEmpty($empty) {
+  public function assertSessionEmpty(bool $empty): void {
     if ($empty) {
       $this->assertSession()->responseHeaderEquals('X-Session-Empty', '1');
     }
diff --git a/core/modules/system/tests/src/Functional/System/ErrorHandlerTest.php b/core/modules/system/tests/src/Functional/System/ErrorHandlerTest.php
index 5d97125dd57c..26daf6ec1c9d 100644
--- a/core/modules/system/tests/src/Functional/System/ErrorHandlerTest.php
+++ b/core/modules/system/tests/src/Functional/System/ErrorHandlerTest.php
@@ -150,16 +150,20 @@ public function testExceptionHandler() {
 
   /**
    * Helper function: assert that the error message is found.
+   *
+   * @internal
    */
-  public function assertErrorMessage(array $error) {
+  public function assertErrorMessage(array $error): void {
     $message = new FormattableMarkup('%type: @message in %function (line ', $error);
     $this->assertSession()->responseContains($message);
   }
 
   /**
    * Helper function: assert that the error message is not found.
+   *
+   * @internal
    */
-  public function assertNoErrorMessage(array $error) {
+  public function assertNoErrorMessage(array $error): void {
     $message = new FormattableMarkup('%type: @message in %function (line ', $error);
     $this->assertSession()->responseNotContains($message);
   }
@@ -169,8 +173,10 @@ public function assertNoErrorMessage(array $error) {
    *
    * Ensures that no messages div exists, which proves that no messages were
    * generated by the error handler, not even an empty one.
+   *
+   * @internal
    */
-  protected function assertNoMessages() {
+  protected function assertNoMessages(): void {
     $this->assertSession()->elementNotExists('xpath', '//div[contains(@class, "messages")]');
   }
 
diff --git a/core/modules/system/tests/src/Functional/System/HtaccessTest.php b/core/modules/system/tests/src/Functional/System/HtaccessTest.php
index 092f57ac7020..e932fa3b348c 100644
--- a/core/modules/system/tests/src/Functional/System/HtaccessTest.php
+++ b/core/modules/system/tests/src/Functional/System/HtaccessTest.php
@@ -139,8 +139,10 @@ public function testFileAccess() {
    *   Path to file. Without leading slash.
    * @param int $response_code
    *   The expected response code. For example: 200, 403 or 404.
+   *
+   * @internal
    */
-  protected function assertFileAccess($path, $response_code) {
+  protected function assertFileAccess(string $path, int $response_code): void {
     $this->assertFileExists(\Drupal::root() . '/' . $path);
     $this->drupalGet($path);
     $this->assertEquals($response_code, $this->getSession()->getStatusCode(), "Response code to $path should be $response_code");
diff --git a/core/modules/system/tests/src/Functional/System/ThemeTest.php b/core/modules/system/tests/src/Functional/System/ThemeTest.php
index ca1c94eaf14a..6859bf697ecd 100644
--- a/core/modules/system/tests/src/Functional/System/ThemeTest.php
+++ b/core/modules/system/tests/src/Functional/System/ThemeTest.php
@@ -509,7 +509,7 @@ public function testThemeSettingsNoLogoNoFavicon() {
    * @param string $expected_text
    *   The expected incompatibility text.
    */
-  private function assertThemeIncompatibleText($theme_name, $expected_text) {
+  private function assertThemeIncompatibleText(string $theme_name, string $expected_text): void {
     $this->assertSession()->elementExists('css', ".theme-info:contains(\"$theme_name\") .incompatible:contains(\"$expected_text\")");
   }
 
diff --git a/core/modules/system/tests/src/Functional/Theme/ThemeUiTest.php b/core/modules/system/tests/src/Functional/Theme/ThemeUiTest.php
index 39fce07d4c25..98388dbd1462 100644
--- a/core/modules/system/tests/src/Functional/Theme/ThemeUiTest.php
+++ b/core/modules/system/tests/src/Functional/Theme/ThemeUiTest.php
@@ -285,8 +285,10 @@ public function providerTestThemeInstallWithModuleDependencies() {
    *   The modules listed as being required to install the theme.
    * @param string $theme_name
    *   The name of the theme.
+   *
+   * @internal
    */
-  protected function assertUninstallableTheme(array $expected_requires_list_items, $theme_name) {
+  protected function assertUninstallableTheme(array $expected_requires_list_items, string $theme_name): void {
     $theme_container = $this->getSession()->getPage()->find('css', "h3:contains(\"$theme_name\")")->getParent();
     $requires_list_items = $theme_container->findAll('css', '.theme-info__requires li');
     $this->assertSameSize($expected_requires_list_items, $requires_list_items);
diff --git a/core/modules/system/tests/src/Functional/Theme/TwigRegistryLoaderTest.php b/core/modules/system/tests/src/Functional/Theme/TwigRegistryLoaderTest.php
index e123f7e05153..d2eab6684343 100644
--- a/core/modules/system/tests/src/Functional/Theme/TwigRegistryLoaderTest.php
+++ b/core/modules/system/tests/src/Functional/Theme/TwigRegistryLoaderTest.php
@@ -37,8 +37,10 @@ protected function setUp(): void {
 
   /**
    * Checks to see if a value is a Twig template.
+   *
+   * @internal
    */
-  public function assertTwigTemplate($value, $message = '') {
+  public function assertTwigTemplate($value, string $message = ''): void {
     $this->assertInstanceOf(TemplateWrapper::class, $value, $message);
   }
 
diff --git a/core/modules/system/tests/src/Functional/Theme/TwigTransTest.php b/core/modules/system/tests/src/Functional/Theme/TwigTransTest.php
index cb292abf31d7..35078dc72716 100644
--- a/core/modules/system/tests/src/Functional/Theme/TwigTransTest.php
+++ b/core/modules/system/tests/src/Functional/Theme/TwigTransTest.php
@@ -123,8 +123,10 @@ public function testEmptyTwigTransTags() {
 
   /**
    * Asserts Twig trans tags.
+   *
+   * @internal
    */
-  protected function assertTwigTransTags() {
+  protected function assertTwigTransTags(): void {
     // Assert that {% trans "Hello sun." %} is translated correctly.
     $this->assertSession()->pageTextContains('OH HAI SUNZ');
 
diff --git a/core/modules/system/tests/src/Functional/UpdateSystem/UpdateScriptTest.php b/core/modules/system/tests/src/Functional/UpdateSystem/UpdateScriptTest.php
index c6b31078c247..63286e8fb772 100644
--- a/core/modules/system/tests/src/Functional/UpdateSystem/UpdateScriptTest.php
+++ b/core/modules/system/tests/src/Functional/UpdateSystem/UpdateScriptTest.php
@@ -803,8 +803,10 @@ public function getSystemSchema() {
    *   The extension type, either 'module' or 'theme'.
    * @param string $extension_machine_name
    *   The extension machine name.
+   *
+   * @internal
    */
-  protected function assertInstalledExtensionConfig($extension_type, $extension_machine_name) {
+  protected function assertInstalledExtensionConfig(string $extension_type, string $extension_machine_name): void {
     $extension_config = $this->container->get('config.factory')->getEditable('core.extension');
     $this->assertSame(0, $extension_config->get("$extension_type.$extension_machine_name"));
   }
@@ -820,8 +822,10 @@ protected function assertInstalledExtensionConfig($extension_type, $extension_ma
    *   The extension machine name.
    *
    * @throws \Behat\Mink\Exception\ResponseTextException
+   *
+   * @internal
    */
-  protected function assertUpdateWithNoError($unexpected_error_text, $extension_type, $extension_machine_name) {
+  protected function assertUpdateWithNoError(string $unexpected_error_text, string $extension_type, string $extension_machine_name): void {
     $assert_session = $this->assertSession();
     $this->drupalGet($this->statusReportUrl);
     $this->assertSession()->pageTextNotContains($unexpected_error_text);
@@ -845,8 +849,10 @@ protected function assertUpdateWithNoError($unexpected_error_text, $extension_ty
    *
    * @throws \Behat\Mink\Exception\ExpectationException
    * @throws \Behat\Mink\Exception\ResponseTextException
+   *
+   * @internal
    */
-  protected function assertErrorOnUpdate($expected_error_text, $extension_type, $extension_machine_name) {
+  protected function assertErrorOnUpdate(string $expected_error_text, string $extension_type, string $extension_machine_name): void {
     $assert_session = $this->assertSession();
     $this->drupalGet($this->statusReportUrl);
     $this->assertSession()->pageTextContains($expected_error_text);
diff --git a/core/modules/system/tests/src/FunctionalJavascript/OffCanvasTest.php b/core/modules/system/tests/src/FunctionalJavascript/OffCanvasTest.php
index 348c11addef1..c4f6a047aaac 100644
--- a/core/modules/system/tests/src/FunctionalJavascript/OffCanvasTest.php
+++ b/core/modules/system/tests/src/FunctionalJavascript/OffCanvasTest.php
@@ -150,8 +150,10 @@ public function testNarrowWidth() {
    *   The index of the link to test.
    * @param string $position
    *   The position of the dialog to test.
+   *
+   * @internal
    */
-  protected function assertOffCanvasDialog($link_index, $position) {
+  protected function assertOffCanvasDialog(int $link_index, string $position): void {
     $page = $this->getSession()->getPage();
     $web_assert = $this->assertSession();
     $link_text = "Open $position panel $link_index";
diff --git a/core/modules/system/tests/src/Kernel/Common/FormElementsRenderTest.php b/core/modules/system/tests/src/Kernel/Common/FormElementsRenderTest.php
index 9c8330455629..f5f79c1d2a24 100644
--- a/core/modules/system/tests/src/Kernel/Common/FormElementsRenderTest.php
+++ b/core/modules/system/tests/src/Kernel/Common/FormElementsRenderTest.php
@@ -139,8 +139,10 @@ public function testDrupalRenderFormElements() {
 
   /**
    * Tests that elements are rendered properly.
+   *
+   * @internal
    */
-  protected function assertRenderedElement(array $element, $xpath, array $xpath_args = []) {
+  protected function assertRenderedElement(array $element, string $xpath, array $xpath_args = []): void {
     $this->render($element);
 
     $xpath = $this->buildXPathQuery($xpath, $xpath_args);
diff --git a/core/modules/system/tests/src/Kernel/Common/PageRenderTest.php b/core/modules/system/tests/src/Kernel/Common/PageRenderTest.php
index 6c4e263ccf00..a7842b480a87 100644
--- a/core/modules/system/tests/src/Kernel/Common/PageRenderTest.php
+++ b/core/modules/system/tests/src/Kernel/Common/PageRenderTest.php
@@ -36,8 +36,10 @@ public function testHookPageAlter() {
    *   The module whose invalid logic in its hooks to enable.
    * @param string $hook
    *   The page render hook to assert expected exceptions for.
+   *
+   * @internal
    */
-  public function assertPageRenderHookExceptions($module, $hook) {
+  public function assertPageRenderHookExceptions(string $module, string $hook): void {
     $html_renderer = \Drupal::getContainer()->get('main_content_renderer.html');
 
     // Assert a valid hook implementation doesn't trigger an exception.
diff --git a/core/modules/system/tests/src/Kernel/Entity/ConfigEntityImportTest.php b/core/modules/system/tests/src/Kernel/Entity/ConfigEntityImportTest.php
index 81356bb92264..a970c30257c1 100644
--- a/core/modules/system/tests/src/Kernel/Entity/ConfigEntityImportTest.php
+++ b/core/modules/system/tests/src/Kernel/Entity/ConfigEntityImportTest.php
@@ -254,8 +254,10 @@ protected function checkSinglePluginConfigSync(EntityWithPluginCollectionInterfa
    *   The original data stored in the config object.
    * @param array $custom_data
    *   The new data to store in the config object.
+   *
+   * @internal
    */
-  public function assertConfigUpdateImport($name, $original_data, $custom_data) {
+  public function assertConfigUpdateImport(string $name, array $original_data, array $custom_data): void {
     $this->container->get('config.storage.sync')->write($name, $custom_data);
 
     // Verify the active configuration still returns the default values.
diff --git a/core/modules/system/tests/src/Kernel/Extension/ModuleHandlerTest.php b/core/modules/system/tests/src/Kernel/Extension/ModuleHandlerTest.php
index ff33361d4f45..8ca75e106582 100644
--- a/core/modules/system/tests/src/Kernel/Extension/ModuleHandlerTest.php
+++ b/core/modules/system/tests/src/Kernel/Extension/ModuleHandlerTest.php
@@ -58,10 +58,12 @@ public function testModuleList() {
    *
    * @param array $expected_values
    *   The expected values, sorted by weight and module name.
-   * @param $condition
+   * @param string $condition
    *   The condition being tested, such as 'After adding a module'.
+   *
+   * @internal
    */
-  protected function assertModuleList(array $expected_values, $condition) {
+  protected function assertModuleList(array $expected_values, string $condition): void {
     $expected_values = array_values(array_unique($expected_values));
     $enabled_modules = array_keys($this->container->get('module_handler')->getModuleList());
     $this->assertEquals($expected_values, $enabled_modules, new FormattableMarkup('@condition: extension handler returns correct results', ['@condition' => $condition]));
diff --git a/core/modules/system/tests/src/Kernel/Migrate/d7/MigrateMenuTest.php b/core/modules/system/tests/src/Kernel/Migrate/d7/MigrateMenuTest.php
index b0cd4ff2a906..d4aac6d578ab 100644
--- a/core/modules/system/tests/src/Kernel/Migrate/d7/MigrateMenuTest.php
+++ b/core/modules/system/tests/src/Kernel/Migrate/d7/MigrateMenuTest.php
@@ -24,7 +24,7 @@ protected function setUp(): void {
   /**
    * Asserts various aspects of a menu.
    *
-   * @param $id
+   * @param string $id
    *   The menu ID.
    * @param string $language
    *   The menu language.
@@ -32,8 +32,10 @@ protected function setUp(): void {
    *   The menu label.
    * @param $description
    *   The menu description.
+   *
+   * @internal
    */
-  protected function assertEntity($id, $language, $label, $description) {
+  protected function assertEntity(string $id, string $language, string $label, string $description): void {
     $navigation_menu = Menu::load($id);
     $this->assertSame($id, $navigation_menu->id());
     $this->assertSame($language, $navigation_menu->language()->getId());
diff --git a/core/modules/system/tests/src/Kernel/SecurityAdvisories/SecurityAdvisoriesFetcherTest.php b/core/modules/system/tests/src/Kernel/SecurityAdvisories/SecurityAdvisoriesFetcherTest.php
index 294b90dbb281..70a11c4d63b3 100644
--- a/core/modules/system/tests/src/Kernel/SecurityAdvisories/SecurityAdvisoriesFetcherTest.php
+++ b/core/modules/system/tests/src/Kernel/SecurityAdvisories/SecurityAdvisoriesFetcherTest.php
@@ -730,6 +730,8 @@ protected function setTestFeedResponses(array $responses): void {
    *
    * @param string[] $expected_messages
    *   The expected error messages.
+   *
+   * @internal
    */
   protected function assertServiceAdvisoryLoggedErrors(array $expected_messages): void {
     $this->assertSame($expected_messages, $this->logErrorMessages);
diff --git a/core/modules/system/tests/src/Kernel/Theme/TwigNamespaceTest.php b/core/modules/system/tests/src/Kernel/Theme/TwigNamespaceTest.php
index 40c476f0b5a3..f758ddd287c9 100644
--- a/core/modules/system/tests/src/Kernel/Theme/TwigNamespaceTest.php
+++ b/core/modules/system/tests/src/Kernel/Theme/TwigNamespaceTest.php
@@ -37,8 +37,10 @@ protected function setUp(): void {
 
   /**
    * Checks to see if a value is a twig template.
+   *
+   * @internal
    */
-  public function assertTwigTemplate($value, $message = '') {
+  public function assertTwigTemplate($value, string $message = ''): void {
     $this->assertInstanceOf(TemplateWrapper::class, $value, $message);
   }
 
diff --git a/core/modules/taxonomy/tests/src/Functional/TermAccessTest.php b/core/modules/taxonomy/tests/src/Functional/TermAccessTest.php
index 39a4c5d3c877..a07f0bd69c60 100644
--- a/core/modules/taxonomy/tests/src/Functional/TermAccessTest.php
+++ b/core/modules/taxonomy/tests/src/Functional/TermAccessTest.php
@@ -110,14 +110,16 @@ public function testTermAccess() {
    *
    * @param \Drupal\taxonomy\TermInterface $term
    *   A taxonomy term entity.
-   * @param $access_operation
+   * @param string $access_operation
    *   The entity operation, e.g. 'view', 'edit', 'delete', etc.
    * @param bool $access_allowed
    *   Whether the current use has access to the given operation or not.
    * @param string $access_reason
    *   (optional) The reason of the access result.
+   *
+   * @internal
    */
-  protected function assertTermAccess(TermInterface $term, $access_operation, $access_allowed, $access_reason = '') {
+  protected function assertTermAccess(TermInterface $term, string $access_operation, bool $access_allowed, string $access_reason = ''): void {
     $access_result = $term->access($access_operation, NULL, TRUE);
     $this->assertSame($access_allowed, $access_result->isAllowed());
 
diff --git a/core/modules/taxonomy/tests/src/Functional/TermParentsTest.php b/core/modules/taxonomy/tests/src/Functional/TermParentsTest.php
index 88d3033cf942..ef0d06ff245e 100644
--- a/core/modules/taxonomy/tests/src/Functional/TermParentsTest.php
+++ b/core/modules/taxonomy/tests/src/Functional/TermParentsTest.php
@@ -282,8 +282,10 @@ protected function createTerm($name, array $parent_ids = []) {
    * @param bool $selected
    *   (optional) Whether or not the option should be selected. Defaults to
    *   FALSE.
+   *
+   * @internal
    */
-  protected function assertParentOption($option, $selected = FALSE) {
+  protected function assertParentOption(string $option, bool $selected = FALSE): void {
     $option = $this->assertSession()->optionExists('Parent terms', $option);
     if ($selected) {
       $this->assertTrue($option->hasAttribute('selected'));
@@ -298,8 +300,10 @@ protected function assertParentOption($option, $selected = FALSE) {
    *
    * @param \Drupal\taxonomy\TermInterface $term
    *   The term to check.
+   *
+   * @internal
    */
-  protected function assertParentsUnchanged(TermInterface $term) {
+  protected function assertParentsUnchanged(TermInterface $term): void {
     $saved_term = $this->termStorage->load($term->id());
 
     $expected = $term->get('parent')->getValue();
diff --git a/core/modules/taxonomy/tests/src/Functional/Views/RelationshipNodeTermDataTest.php b/core/modules/taxonomy/tests/src/Functional/Views/RelationshipNodeTermDataTest.php
index 61f90cb5013e..e79e77fc7705 100644
--- a/core/modules/taxonomy/tests/src/Functional/Views/RelationshipNodeTermDataTest.php
+++ b/core/modules/taxonomy/tests/src/Functional/Views/RelationshipNodeTermDataTest.php
@@ -94,8 +94,10 @@ public function testTag() {
    *   The View to check for the term access tag.
    * @param bool $hasTag
    *   The expected existence of taxonomy_term_access tag.
+   *
+   * @internal
    */
-  protected function assertQueriesTermAccessTag(ViewExecutable $view, $hasTag) {
+  protected function assertQueriesTermAccessTag(ViewExecutable $view, bool $hasTag): void {
     $main_query = $view->build_info['query'];
     $count_query = $view->build_info['count_query'];
 
diff --git a/core/modules/taxonomy/tests/src/Functional/Views/TaxonomyFieldFilterTest.php b/core/modules/taxonomy/tests/src/Functional/Views/TaxonomyFieldFilterTest.php
index dafa38e2241c..2f47bae8fb72 100644
--- a/core/modules/taxonomy/tests/src/Functional/Views/TaxonomyFieldFilterTest.php
+++ b/core/modules/taxonomy/tests/src/Functional/Views/TaxonomyFieldFilterTest.php
@@ -146,8 +146,10 @@ public function testFilters() {
    *   that translation should be shown on the given page.
    * @param string $message
    *   Message suffix to display.
+   *
+   * @internal
    */
-  protected function assertPageCounts($path, $counts, $message) {
+  protected function assertPageCounts(string $path, array $counts, string $message): void {
     // Get the text of the page.
     $this->drupalGet($path);
     $text = $this->getTextContent();
diff --git a/core/modules/taxonomy/tests/src/Functional/Views/TaxonomyTermFilterDepthTest.php b/core/modules/taxonomy/tests/src/Functional/Views/TaxonomyTermFilterDepthTest.php
index 79f9829555e8..481a4c69d336 100644
--- a/core/modules/taxonomy/tests/src/Functional/Views/TaxonomyTermFilterDepthTest.php
+++ b/core/modules/taxonomy/tests/src/Functional/Views/TaxonomyTermFilterDepthTest.php
@@ -137,8 +137,10 @@ public function testTermWithDepthFilter() {
    *   The depth to search.
    * @param array $expected
    *   The expected views result.
+   *
+   * @internal
    */
-  protected function assertTermWithDepthResult($tid, $depth, array $expected) {
+  protected function assertTermWithDepthResult(int $tid, int $depth, array $expected): void {
     $this->view->destroy();
     $this->view->initDisplay();
     $filters = $this->view->displayHandlers->get('default')
diff --git a/core/modules/taxonomy/tests/src/Kernel/Migrate/d6/MigrateTermLocalizedTranslationTest.php b/core/modules/taxonomy/tests/src/Kernel/Migrate/d6/MigrateTermLocalizedTranslationTest.php
index 3b66a94fb445..c2afbe1f336c 100644
--- a/core/modules/taxonomy/tests/src/Kernel/Migrate/d6/MigrateTermLocalizedTranslationTest.php
+++ b/core/modules/taxonomy/tests/src/Kernel/Migrate/d6/MigrateTermLocalizedTranslationTest.php
@@ -60,9 +60,9 @@ protected function setUp(): void {
    *   The label the migrated entity should have.
    * @param string $expected_vid
    *   The parent vocabulary the migrated entity should have.
-   * @param string $expected_description
+   * @param string|null $expected_description
    *   The description the migrated entity should have.
-   * @param string $expected_format
+   * @param string|null $expected_format
    *   The format the migrated entity should have.
    * @param int $expected_weight
    *   The weight the migrated entity should have.
@@ -72,8 +72,10 @@ protected function setUp(): void {
    *   The value the migrated entity field should have.
    * @param int $expected_term_reference_tid
    *   The term reference ID the migrated entity field should have.
+   *
+   * @internal
    */
-  protected function assertEntity($id, $expected_language, $expected_label, $expected_vid, $expected_description = '', $expected_format = NULL, $expected_weight = 0, array $expected_parents = [], $expected_field_integer_value = NULL, $expected_term_reference_tid = NULL) {
+  protected function assertEntity(int $id, string $expected_language, string $expected_label, string $expected_vid, ?string $expected_description = '', ?string $expected_format = NULL, int $expected_weight = 0, array $expected_parents = [], int $expected_field_integer_value = NULL, int $expected_term_reference_tid = NULL): void {
     /** @var \Drupal\taxonomy\TermInterface $entity */
     $entity = Term::load($id);
     $this->assertInstanceOf(TermInterface::class, $entity);
@@ -82,7 +84,7 @@ protected function assertEntity($id, $expected_language, $expected_label, $expec
     $this->assertSame($expected_vid, $entity->bundle());
     $this->assertSame($expected_description, $entity->getDescription());
     $this->assertSame($expected_format, $entity->getFormat());
-    $this->assertSame($expected_weight, $entity->getWeight());
+    $this->assertSame($expected_weight, (int) $entity->getWeight());
     $this->assertHierarchy($expected_vid, $id, $expected_parents);
   }
 
@@ -95,8 +97,10 @@ protected function assertEntity($id, $expected_language, $expected_label, $expec
    *   ID of the term to check.
    * @param array $parent_ids
    *   The expected parent term IDs.
+   *
+   * @internal
    */
-  protected function assertHierarchy($vid, $tid, array $parent_ids) {
+  protected function assertHierarchy(string $vid, int $tid, array $parent_ids): void {
     if (!isset($this->treeData[$vid])) {
       $tree = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadTree($vid);
       $this->treeData[$vid] = [];
@@ -114,8 +118,8 @@ protected function assertHierarchy($vid, $tid, array $parent_ids) {
    * Tests the Drupal 6 i18n localized taxonomy term to Drupal 8 migration.
    */
   public function testTranslatedLocalizedTaxonomyTerms() {
-    $this->assertEntity(14, 'en', 'Talos IV', 'vocabulary_name_much_longer_th', 'The home of Captain Christopher Pike.', NULL, '0', []);
-    $this->assertEntity(15, 'en', 'Vulcan', 'vocabulary_name_much_longer_th', NULL, NULL, '0', []);
+    $this->assertEntity(14, 'en', 'Talos IV', 'vocabulary_name_much_longer_th', 'The home of Captain Christopher Pike.', NULL, 0, []);
+    $this->assertEntity(15, 'en', 'Vulcan', 'vocabulary_name_much_longer_th', NULL, NULL, 0, []);
 
     /** @var \Drupal\taxonomy\TermInterface $entity */
     $entity = Term::load(14);
diff --git a/core/modules/taxonomy/tests/src/Kernel/Migrate/d7/MigrateTaxonomyTermTest.php b/core/modules/taxonomy/tests/src/Kernel/Migrate/d7/MigrateTaxonomyTermTest.php
index e9f7f89f8fd5..39c91d517bba 100644
--- a/core/modules/taxonomy/tests/src/Kernel/Migrate/d7/MigrateTaxonomyTermTest.php
+++ b/core/modules/taxonomy/tests/src/Kernel/Migrate/d7/MigrateTaxonomyTermTest.php
@@ -56,7 +56,7 @@ protected function setUp(): void {
   /**
    * Validate a migrated term contains the expected values.
    *
-   * @param $id
+   * @param int $id
    *   Entity ID to load and check.
    * @param string $expected_language
    *   The language code for this term.
@@ -64,9 +64,9 @@ protected function setUp(): void {
    *   The label the migrated entity should have.
    * @param $expected_vid
    *   The parent vocabulary the migrated entity should have.
-   * @param string $expected_description
+   * @param string|null $expected_description
    *   The description the migrated entity should have.
-   * @param string $expected_format
+   * @param string|null $expected_format
    *   The format the migrated entity should have.
    * @param int $expected_weight
    *   The weight the migrated entity should have.
@@ -78,8 +78,10 @@ protected function setUp(): void {
    *   The term reference id the migrated entity field should have.
    * @param bool $expected_container_flag
    *   The term should be a container entity.
+   *
+   * @internal
    */
-  protected function assertEntity($id, $expected_language, $expected_label, $expected_vid, $expected_description = '', $expected_format = NULL, $expected_weight = 0, array $expected_parents = [], $expected_field_integer_value = NULL, $expected_term_reference_tid = NULL, $expected_container_flag = 0) {
+  protected function assertEntity(int $id, string $expected_language, string $expected_label, string $expected_vid, ?string $expected_description = '', ?string $expected_format = NULL, int $expected_weight = 0, array $expected_parents = [], int $expected_field_integer_value = NULL, int $expected_term_reference_tid = NULL, bool $expected_container_flag = FALSE): void {
     /** @var \Drupal\taxonomy\TermInterface $entity */
     $entity = Term::load($id);
     $this->assertInstanceOf(TermInterface::class, $entity);
@@ -88,7 +90,7 @@ protected function assertEntity($id, $expected_language, $expected_label, $expec
     $this->assertEquals($expected_vid, $entity->bundle());
     $this->assertEquals($expected_description, $entity->getDescription());
     $this->assertEquals($expected_format, $entity->getFormat());
-    $this->assertEquals($expected_weight, $entity->getWeight());
+    $this->assertEquals($expected_weight, (int) $entity->getWeight());
     $this->assertEquals($expected_parents, $this->getParentIDs($id));
     $this->assertHierarchy($expected_vid, $id, $expected_parents);
     if (!is_null($expected_field_integer_value)) {
@@ -228,7 +230,7 @@ protected function getParentIDs($tid) {
    * @param array $parent_ids
    *   The expected parent term IDs.
    */
-  protected function assertHierarchy($vid, $tid, array $parent_ids) {
+  protected function assertHierarchy(string $vid, int $tid, array $parent_ids): void {
     if (!isset($this->treeData[$vid])) {
       $tree = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadTree($vid);
       $this->treeData[$vid] = [];
diff --git a/core/modules/taxonomy/tests/src/Kernel/Migrate/d7/MigrateTaxonomyTermTranslationTest.php b/core/modules/taxonomy/tests/src/Kernel/Migrate/d7/MigrateTaxonomyTermTranslationTest.php
index c85a52f6d1db..bd37bf6e319d 100644
--- a/core/modules/taxonomy/tests/src/Kernel/Migrate/d7/MigrateTaxonomyTermTranslationTest.php
+++ b/core/modules/taxonomy/tests/src/Kernel/Migrate/d7/MigrateTaxonomyTermTranslationTest.php
@@ -71,9 +71,9 @@ protected function setUp(): void {
    *   The label the migrated entity should have.
    * @param string $expected_vid
    *   The parent vocabulary the migrated entity should have.
-   * @param string $expected_description
+   * @param string|null $expected_description
    *   The description the migrated entity should have.
-   * @param string $expected_format
+   * @param string|null $expected_format
    *   The format the migrated entity should have.
    * @param int $expected_weight
    *   The weight the migrated entity should have.
@@ -83,8 +83,10 @@ protected function setUp(): void {
    *   The value the migrated entity field should have.
    * @param int $expected_term_reference_tid
    *   The term reference ID the migrated entity field should have.
+   *
+   * @internal
    */
-  protected function assertEntity($id, $expected_language, $expected_label, $expected_vid, $expected_description = '', $expected_format = NULL, $expected_weight = 0, array $expected_parents = [], $expected_field_integer_value = NULL, $expected_term_reference_tid = NULL) {
+  protected function assertEntity(int $id, string $expected_language, string $expected_label, string $expected_vid, ?string $expected_description = '', ?string $expected_format = NULL, int $expected_weight = 0, array $expected_parents = [], int $expected_field_integer_value = NULL, int $expected_term_reference_tid = NULL): void {
     /** @var \Drupal\taxonomy\TermInterface $entity */
     $entity = Term::load($id);
     $this->assertInstanceOf(TermInterface::class, $entity);
@@ -93,7 +95,7 @@ protected function assertEntity($id, $expected_language, $expected_label, $expec
     $this->assertSame($expected_vid, $entity->bundle());
     $this->assertSame($expected_description, $entity->getDescription());
     $this->assertSame($expected_format, $entity->getFormat());
-    $this->assertSame($expected_weight, $entity->getWeight());
+    $this->assertSame($expected_weight, (int) $entity->getWeight());
     $this->assertHierarchy($expected_vid, $id, $expected_parents);
   }
 
@@ -106,8 +108,10 @@ protected function assertEntity($id, $expected_language, $expected_label, $expec
    *   ID of the term to check.
    * @param array $parent_ids
    *   The expected parent term IDs.
+   *
+   * @internal
    */
-  protected function assertHierarchy($vid, $tid, array $parent_ids) {
+  protected function assertHierarchy(string $vid, int $tid, array $parent_ids): void {
     if (!isset($this->treeData[$vid])) {
       $tree = \Drupal::entityTypeManager()
         ->getStorage('taxonomy_term')
diff --git a/core/modules/taxonomy/tests/src/Kernel/Migrate/d7/MigrateTaxonomyVocabularyTest.php b/core/modules/taxonomy/tests/src/Kernel/Migrate/d7/MigrateTaxonomyVocabularyTest.php
index ef8d3eda6df3..979d5b5ac1fb 100644
--- a/core/modules/taxonomy/tests/src/Kernel/Migrate/d7/MigrateTaxonomyVocabularyTest.php
+++ b/core/modules/taxonomy/tests/src/Kernel/Migrate/d7/MigrateTaxonomyVocabularyTest.php
@@ -29,7 +29,7 @@ protected function setUp(): void {
   /**
    * Validate a migrated vocabulary contains the expected values.
    *
-   * @param $id
+   * @param string $id
    *   Entity ID to load and check.
    * @param $expected_label
    *   The label the migrated entity should have.
@@ -37,14 +37,16 @@ protected function setUp(): void {
    *   The description the migrated entity should have.
    * @param $expected_weight
    *   The weight the migrated entity should have.
+   *
+   * @internal
    */
-  protected function assertEntity($id, $expected_label, $expected_description, $expected_weight) {
+  protected function assertEntity(string $id, string $expected_label, string $expected_description, int $expected_weight): void {
     /** @var \Drupal\taxonomy\VocabularyInterface $entity */
     $entity = Vocabulary::load($id);
     $this->assertInstanceOf(VocabularyInterface::class, $entity);
     $this->assertSame($expected_label, $entity->label());
     $this->assertSame($expected_description, $entity->getDescription());
-    $this->assertSame($expected_weight, $entity->get('weight'));
+    $this->assertSame($expected_weight, (int) $entity->get('weight'));
   }
 
   /**
diff --git a/core/modules/taxonomy/tests/src/Kernel/Migrate/d7/MigrateTermLocalizedTranslationTest.php b/core/modules/taxonomy/tests/src/Kernel/Migrate/d7/MigrateTermLocalizedTranslationTest.php
index 5c011bf93680..fb0d80b1b5ac 100644
--- a/core/modules/taxonomy/tests/src/Kernel/Migrate/d7/MigrateTermLocalizedTranslationTest.php
+++ b/core/modules/taxonomy/tests/src/Kernel/Migrate/d7/MigrateTermLocalizedTranslationTest.php
@@ -68,8 +68,10 @@ protected function setUp(): void {
    *   The value the migrated entity field should have.
    * @param int $expected_term_reference_tid
    *   The term reference ID the migrated entity field should have.
+   *
+   * @internal
    */
-  protected function assertEntity($id, $expected_language, $expected_label, $expected_vid, $expected_description = '', $expected_format = NULL, $expected_weight = 0, array $expected_parents = [], $expected_field_integer_value = NULL, $expected_term_reference_tid = NULL) {
+  protected function assertEntity(int $id, string $expected_language, string $expected_label, string $expected_vid, string $expected_description = '', string $expected_format = NULL, int $expected_weight = 0, array $expected_parents = [], int $expected_field_integer_value = NULL, int $expected_term_reference_tid = NULL): void {
     /** @var \Drupal\taxonomy\TermInterface $entity */
     $entity = Term::load($id);
     $this->assertInstanceOf(TermInterface::class, $entity);
@@ -78,7 +80,7 @@ protected function assertEntity($id, $expected_language, $expected_label, $expec
     $this->assertSame($expected_vid, $entity->bundle());
     $this->assertSame($expected_description, $entity->getDescription());
     $this->assertSame($expected_format, $entity->getFormat());
-    $this->assertSame($expected_weight, $entity->getWeight());
+    $this->assertSame($expected_weight, (int) $entity->getWeight());
     $this->assertHierarchy($expected_vid, $id, $expected_parents);
   }
 
@@ -91,8 +93,10 @@ protected function assertEntity($id, $expected_language, $expected_label, $expec
    *   ID of the term to check.
    * @param array $parent_ids
    *   The expected parent term IDs.
+   *
+   * @internal
    */
-  protected function assertHierarchy($vid, $tid, array $parent_ids) {
+  protected function assertHierarchy(string $vid, int $tid, array $parent_ids): void {
     if (!isset($this->treeData[$vid])) {
       $tree = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadTree($vid);
       $this->treeData[$vid] = [];
@@ -110,9 +114,9 @@ protected function assertHierarchy($vid, $tid, array $parent_ids) {
    * Tests the Drupal 6 i18n localized taxonomy term to Drupal 8 migration.
    */
   public function testTranslatedLocalizedTaxonomyTerms() {
-    $this->assertEntity(19, 'en', 'Jupiter Station', 'vocablocalized', 'Holographic research.', 'filtered_html', '0', []);
-    $this->assertEntity(20, 'en', 'DS9', 'vocablocalized', 'Terok Nor', 'filtered_html', '0', []);
-    $this->assertEntity(25, 'en', 'Emissary', 'vocablocalized2', 'Pilot episode', 'filtered_html', '0', []);
+    $this->assertEntity(19, 'en', 'Jupiter Station', 'vocablocalized', 'Holographic research.', 'filtered_html', 0, []);
+    $this->assertEntity(20, 'en', 'DS9', 'vocablocalized', 'Terok Nor', 'filtered_html', 0, []);
+    $this->assertEntity(25, 'en', 'Emissary', 'vocablocalized2', 'Pilot episode', 'filtered_html', 0, []);
 
     /** @var \Drupal\taxonomy\TermInterface $entity */
     $entity = Term::load(19);
diff --git a/core/modules/taxonomy/tests/src/Kernel/TaxonomyQueryAlterTest.php b/core/modules/taxonomy/tests/src/Kernel/TaxonomyQueryAlterTest.php
index 444bb85a86ba..02683a629122 100644
--- a/core/modules/taxonomy/tests/src/Kernel/TaxonomyQueryAlterTest.php
+++ b/core/modules/taxonomy/tests/src/Kernel/TaxonomyQueryAlterTest.php
@@ -134,8 +134,10 @@ protected function setupQueryTagTestHooks() {
    * @param int $expected_specific_invocations
    *   The number of times the tag-specific query_alter hooks are expected to
    *   have been invoked.
+   *
+   * @internal
    */
-  protected function assertQueryTagTestResult($expected_generic_invocations, $expected_specific_invocations) {
+  protected function assertQueryTagTestResult(int $expected_generic_invocations, int $expected_specific_invocations): void {
     $state = $this->container->get('state');
     $this->assertEquals($expected_generic_invocations, $state->get('taxonomy_test_query_alter'));
     $this->assertEquals($expected_specific_invocations, $state->get('taxonomy_test_query_term_access_alter'));
diff --git a/core/modules/taxonomy/tests/src/Kernel/Views/TaxonomyTermArgumentDepthTest.php b/core/modules/taxonomy/tests/src/Kernel/Views/TaxonomyTermArgumentDepthTest.php
index 1a04055ef579..bd03bb13bc26 100644
--- a/core/modules/taxonomy/tests/src/Kernel/Views/TaxonomyTermArgumentDepthTest.php
+++ b/core/modules/taxonomy/tests/src/Kernel/Views/TaxonomyTermArgumentDepthTest.php
@@ -178,6 +178,8 @@ public function testTermWithDepthFilter(): void {
    *   The depth to search.
    * @param bool $break_phrase
    *   Whether to break the argument up into multiple terms.
+   *
+   * @internal
    */
   protected function assertTermWithDepthResult(array $expected, $tid, int $depth, bool $break_phrase = FALSE): void {
     $this->view->destroy();
diff --git a/core/modules/taxonomy/tests/src/Kernel/Views/TaxonomyTermFilterDepthTest.php b/core/modules/taxonomy/tests/src/Kernel/Views/TaxonomyTermFilterDepthTest.php
index f679633af8be..51c7c5300984 100644
--- a/core/modules/taxonomy/tests/src/Kernel/Views/TaxonomyTermFilterDepthTest.php
+++ b/core/modules/taxonomy/tests/src/Kernel/Views/TaxonomyTermFilterDepthTest.php
@@ -155,6 +155,8 @@ public function testTermWithDepthFilter(): void {
    *   The term ID or IDs to filter on.
    * @param int $depth
    *   The depth to search.
+   *
+   * @internal
    */
   protected function assertTermWithDepthResult(array $expected, $tid, int $depth): void {
     $this->view->destroy();
diff --git a/core/modules/text/tests/src/FunctionalJavascript/TextareaWithSummaryTest.php b/core/modules/text/tests/src/FunctionalJavascript/TextareaWithSummaryTest.php
index 2c51a91ea498..12f8b9dc2135 100644
--- a/core/modules/text/tests/src/FunctionalJavascript/TextareaWithSummaryTest.php
+++ b/core/modules/text/tests/src/FunctionalJavascript/TextareaWithSummaryTest.php
@@ -40,8 +40,10 @@ protected function setUp(): void {
 
   /**
    * Helper to test toggling the summary area.
+   *
+   * @internal
    */
-  protected function assertSummaryToggle() {
+  protected function assertSummaryToggle(): void {
     $this->drupalGet('node/add/page');
     $widget = $this->getSession()->getPage()->findById('edit-body-wrapper');
     $summary_field = $widget->findField('edit-body-0-summary');
diff --git a/core/modules/text/tests/src/Kernel/TextSummaryTest.php b/core/modules/text/tests/src/Kernel/TextSummaryTest.php
index c1e79d241578..5537e74acc0c 100644
--- a/core/modules/text/tests/src/Kernel/TextSummaryTest.php
+++ b/core/modules/text/tests/src/Kernel/TextSummaryTest.php
@@ -238,8 +238,10 @@ public function testInvalidFilterFormat() {
 
   /**
    * Calls text_summary() and asserts that the expected teaser is returned.
+   *
+   * @internal
    */
-  public function assertTextSummary($text, $expected, $format = NULL, $size = NULL) {
+  public function assertTextSummary(string $text, string $expected, ?string $format = NULL, int $size = NULL): void {
     $summary = text_summary($text, $format, $size);
     $this->assertSame($expected, $summary, new FormattableMarkup('<pre style="white-space: pre-wrap">@actual</pre> is identical to <pre style="white-space: pre-wrap">@expected</pre>', ['@actual' => $summary, '@expected' => $expected]));
   }
diff --git a/core/modules/toolbar/tests/src/Functional/ToolbarAdminMenuTest.php b/core/modules/toolbar/tests/src/Functional/ToolbarAdminMenuTest.php
index 65975d1e25ba..2b2ef5a3c99c 100644
--- a/core/modules/toolbar/tests/src/Functional/ToolbarAdminMenuTest.php
+++ b/core/modules/toolbar/tests/src/Functional/ToolbarAdminMenuTest.php
@@ -453,8 +453,10 @@ private function getSubtreesHash() {
   /**
    * Asserts the subtrees hash on a fresh page GET is different from the hash
    * from the previous page GET.
+   *
+   * @internal
    */
-  private function assertDifferentHash() {
+  private function assertDifferentHash(): void {
     // Request a new page to refresh the drupalSettings object.
     $this->drupalGet('test-page');
     $this->assertSession()->statusCodeEquals(200);
diff --git a/core/modules/toolbar/tests/src/Functional/ToolbarCacheContextsTest.php b/core/modules/toolbar/tests/src/Functional/ToolbarCacheContextsTest.php
index 5de4c2d8b62d..c7ff8b304f48 100644
--- a/core/modules/toolbar/tests/src/Functional/ToolbarCacheContextsTest.php
+++ b/core/modules/toolbar/tests/src/Functional/ToolbarCacheContextsTest.php
@@ -107,8 +107,10 @@ public function testToolbarCacheContextsCaller() {
    *   Expected cache contexts for both users.
    * @param string $message
    *   (optional) A verbose message to output.
+   *
+   * @internal
    */
-  protected function assertToolbarCacheContexts(array $cache_contexts, $message = NULL) {
+  protected function assertToolbarCacheContexts(array $cache_contexts, string $message = NULL): void {
     // Default cache contexts that should exist on all test cases.
     $default_cache_contexts = [
       'languages:language_interface',
diff --git a/core/modules/tour/tests/src/FunctionalJavascript/TourLegacyTest.php b/core/modules/tour/tests/src/FunctionalJavascript/TourLegacyTest.php
index f33a80f5f7d3..eefdc4d52c9d 100644
--- a/core/modules/tour/tests/src/FunctionalJavascript/TourLegacyTest.php
+++ b/core/modules/tour/tests/src/FunctionalJavascript/TourLegacyTest.php
@@ -92,8 +92,10 @@ public function testTourTipMarkup(string $path, string $theme = NULL) {
    *   The expected position of the nub arrow.
    * @param string $joyride_content_container_name
    *   For identifying classnames specific to a tip type.
+   *
+   * @internal
    */
-  private function assertToolTipMarkup($index, $nub_position, $joyride_content_container_name = 'body') {
+  private function assertToolTipMarkup(int $index, string $nub_position, string $joyride_content_container_name = 'body'): void {
     $assert_session = $this->assertSession();
     $tip = $assert_session->waitForElementVisible('css', ".joyride-tip-guide[data-index=\"$index\"]");
     $this->assertNotNull($tip, 'The tour tip element is present.');
diff --git a/core/modules/tracker/tests/src/Functional/TrackerTest.php b/core/modules/tracker/tests/src/Functional/TrackerTest.php
index 4c01a0d06dc1..b3515564535a 100644
--- a/core/modules/tracker/tests/src/Functional/TrackerTest.php
+++ b/core/modules/tracker/tests/src/Functional/TrackerTest.php
@@ -474,8 +474,10 @@ public function testTrackerAdminUnpublish() {
    *   data-history-node-last-comment-timestamp attribute.
    * @param bool $library_is_present
    *   Whether the drupal.tracker-history library should be present or not.
+   *
+   * @internal
    */
-  public function assertHistoryMetadata($node_id, $node_timestamp, $node_last_comment_timestamp, $library_is_present = TRUE) {
+  public function assertHistoryMetadata(int $node_id, int $node_timestamp, int $node_last_comment_timestamp, bool $library_is_present = TRUE): void {
     $settings = $this->getDrupalSettings();
     $this->assertSame($library_is_present, isset($settings['ajaxPageState']) && in_array('tracker/history', explode(',', $settings['ajaxPageState']['libraries'])), 'drupal.tracker-history library is present.');
     $this->assertCount(1, $this->xpath('//table/tbody/tr/td[@data-history-node-id="' . $node_id . '" and @data-history-node-timestamp="' . $node_timestamp . '"]'), 'Tracker table cell contains the data-history-node-id and data-history-node-timestamp attributes for the node.');
diff --git a/core/modules/update/tests/src/Functional/UpdateContribTest.php b/core/modules/update/tests/src/Functional/UpdateContribTest.php
index 3b07f69161d2..30898f0c2d9d 100644
--- a/core/modules/update/tests/src/Functional/UpdateContribTest.php
+++ b/core/modules/update/tests/src/Functional/UpdateContribTest.php
@@ -871,8 +871,10 @@ public function testNonStandardVersionStrings() {
    *   The expected release title.
    * @param bool $is_compatible
    *   If the update is compatible with the installed version of Drupal.
+   *
+   * @internal
    */
-  protected function assertCoreCompatibilityMessage($version, $expected_range, $expected_release_title, $is_compatible = TRUE) {
+  protected function assertCoreCompatibilityMessage(string $version, string $expected_range, string $expected_release_title, bool $is_compatible = TRUE): void {
     $update_element = $this->findUpdateElementByLabel($expected_release_title);
     $this->assertTrue($update_element->hasLink($version));
     $compatibility_details = $update_element->find('css', '.project-update__compatibility-details details');
diff --git a/core/modules/user/tests/src/Functional/RestRegisterUserTest.php b/core/modules/user/tests/src/Functional/RestRegisterUserTest.php
index 7bcdf26583cc..302944f924ed 100644
--- a/core/modules/user/tests/src/Functional/RestRegisterUserTest.php
+++ b/core/modules/user/tests/src/Functional/RestRegisterUserTest.php
@@ -256,7 +256,7 @@ protected function setUpAuthorization($method) {
   /**
    * {@inheritdoc}
    */
-  protected function assertNormalizationEdgeCases($method, Url $url, array $request_options) {}
+  protected function assertNormalizationEdgeCases($method, Url $url, array $request_options): void {}
 
   /**
    * {@inheritdoc}
diff --git a/core/modules/user/tests/src/Functional/UserLoginHttpTest.php b/core/modules/user/tests/src/Functional/UserLoginHttpTest.php
index 87c68c2c718d..7751707a1398 100644
--- a/core/modules/user/tests/src/Functional/UserLoginHttpTest.php
+++ b/core/modules/user/tests/src/Functional/UserLoginHttpTest.php
@@ -325,12 +325,14 @@ public function testGlobalLoginFloodControl() {
    *   The response object.
    * @param int $expected_code
    *   The expected status code.
-   * @param mixed $expected_body
+   * @param string $expected_body
    *   The expected response body.
+   *
+   * @internal
    */
-  protected function assertHttpResponse(ResponseInterface $response, $expected_code, $expected_body) {
+  protected function assertHttpResponse(ResponseInterface $response, int $expected_code, string $expected_body): void {
     $this->assertEquals($expected_code, $response->getStatusCode());
-    $this->assertEquals($expected_body, (string) $response->getBody());
+    $this->assertEquals($expected_body, $response->getBody());
   }
 
   /**
@@ -344,8 +346,10 @@ protected function assertHttpResponse(ResponseInterface $response, $expected_cod
    *   The expected message encoded in response.
    * @param string $format
    *   The format that the response is encoded in.
+   *
+   * @internal
    */
-  protected function assertHttpResponseWithMessage(ResponseInterface $response, $expected_code, $expected_message, $format = 'json') {
+  protected function assertHttpResponseWithMessage(ResponseInterface $response, int $expected_code, string $expected_message, string $format = 'json'): void {
     $this->assertEquals($expected_code, $response->getStatusCode());
     $this->assertEquals($expected_message, $this->getResultValue($response, 'message', $format));
   }
diff --git a/core/modules/user/tests/src/Functional/UserLoginTest.php b/core/modules/user/tests/src/Functional/UserLoginTest.php
index 778f1744853c..cbc3b29cbeb4 100644
--- a/core/modules/user/tests/src/Functional/UserLoginTest.php
+++ b/core/modules/user/tests/src/Functional/UserLoginTest.php
@@ -188,15 +188,16 @@ public function testCookiesNotAccepted() {
    *
    * @param \Drupal\user\Entity\User $account
    *   A user object with name and passRaw attributes for the login attempt.
-   * @param mixed $flood_trigger
+   * @param string $flood_trigger
    *   (optional) Whether or not to expect that the flood control mechanism
    *    will be triggered. Defaults to NULL.
    *   - Set to 'user' to expect a 'too many failed logins error.
-   *   - Set to any value to expect an error for too many failed logins per IP
-   *   .
+   *   - Set to any value to expect an error for too many failed logins per IP.
    *   - Set to NULL to expect a failed login.
+   *
+   * @internal
    */
-  public function assertFailedLogin($account, $flood_trigger = NULL) {
+  public function assertFailedLogin(User $account, string $flood_trigger = NULL): void {
     $database = \Drupal::database();
     $edit = [
       'name' => $account->getAccountName(),
diff --git a/core/modules/user/tests/src/Functional/UserPasswordResetTest.php b/core/modules/user/tests/src/Functional/UserPasswordResetTest.php
index 775f2806c1d3..e984c466edd0 100644
--- a/core/modules/user/tests/src/Functional/UserPasswordResetTest.php
+++ b/core/modules/user/tests/src/Functional/UserPasswordResetTest.php
@@ -486,8 +486,10 @@ public function testUserResetPasswordUserFloodControlIsCleared() {
 
   /**
    * Helper function to make assertions about a valid password reset.
+   *
+   * @internal
    */
-  public function assertValidPasswordReset($name) {
+  public function assertValidPasswordReset(string $name): void {
     $this->assertSession()->pageTextContains("If $name is a valid account, an email will be sent with instructions to reset your password.");
     $this->assertMail('to', $this->account->getEmail(), 'Password e-mail sent to user.');
     $subject = 'Replacement login information for ' . $this->account->getAccountName() . ' at Drupal';
@@ -499,8 +501,10 @@ public function assertValidPasswordReset($name) {
    *
    * @param string $name
    *   The user name.
+   *
+   * @internal
    */
-  public function assertNoValidPasswordReset($name) {
+  public function assertNoValidPasswordReset(string $name): void {
     // This message is the same as the valid reset for privacy reasons.
     $this->assertSession()->pageTextContains("If $name is a valid account, an email will be sent with instructions to reset your password.");
     // The difference is that no email is sent.
@@ -509,15 +513,19 @@ public function assertNoValidPasswordReset($name) {
 
   /**
    * Makes assertions about a password reset triggering IP flood control.
+   *
+   * @internal
    */
-  public function assertPasswordIpFlood() {
+  public function assertPasswordIpFlood(): void {
     $this->assertSession()->pageTextContains('Too many password recovery requests from your IP address. It is temporarily blocked. Try again later or contact the site administrator.');
   }
 
   /**
    * Makes assertions about a password reset not triggering IP flood control.
+   *
+   * @internal
    */
-  public function assertNoPasswordIpFlood() {
+  public function assertNoPasswordIpFlood(): void {
     $this->assertSession()->pageTextNotContains('Too many password recovery requests from your IP address. It is temporarily blocked. Try again later or contact the site administrator.');
   }
 
diff --git a/core/modules/user/tests/src/Functional/UserRegistrationTest.php b/core/modules/user/tests/src/Functional/UserRegistrationTest.php
index 4575ee9ba8e8..bd4d375b8963 100644
--- a/core/modules/user/tests/src/Functional/UserRegistrationTest.php
+++ b/core/modules/user/tests/src/Functional/UserRegistrationTest.php
@@ -397,8 +397,10 @@ public function testRegistrationWithUserFields() {
 
   /**
    * Asserts the presence of cache tags on registration form with user fields.
+   *
+   * @internal
    */
-  protected function assertRegistrationFormCacheTagsWithUserFields() {
+  protected function assertRegistrationFormCacheTagsWithUserFields(): void {
     $this->assertSession()->responseHeaderContains('X-Drupal-Cache-Tags', 'config:core.entity_form_display.user.user.register');
     $this->assertSession()->responseHeaderContains('X-Drupal-Cache-Tags', 'config:field.field.user.user.test_user_field');
     $this->assertSession()->responseHeaderContains('X-Drupal-Cache-Tags', 'config:field.storage.user.test_user_field');
diff --git a/core/modules/user/tests/src/Kernel/Migrate/d6/MigrateUserPictureD6FileTest.php b/core/modules/user/tests/src/Kernel/Migrate/d6/MigrateUserPictureD6FileTest.php
index ffeb2442ba7a..d31525e02088 100644
--- a/core/modules/user/tests/src/Kernel/Migrate/d6/MigrateUserPictureD6FileTest.php
+++ b/core/modules/user/tests/src/Kernel/Migrate/d6/MigrateUserPictureD6FileTest.php
@@ -51,12 +51,12 @@ public function testUserPictures() {
 
     // Tests the D6 user pictures migration in combination with D6 file.
     $this->setUpMigratedFiles();
-    $this->assertEntity(1, 'image-test.jpg', '1901', 'public://image-test.jpg', 'image/jpeg', '2');
-    $this->assertEntity(2, 'image-test.png', '125', 'public://image-test.png', 'image/png', '8');
-    $this->assertEntity(3, 'Image1.png', '39325', 'public://image-1.png', 'image/png', '1');
-    $this->assertEntity(4, 'Image2.jpg', '1831', 'public://image-2.jpg', 'image/jpeg', '1');
-    $this->assertEntity(5, 'Image-test.gif', '183', 'public://image-test.gif', 'image/jpeg', '1');
-    $this->assertEntity(6, 'html-1.txt', '24', 'public://html-1.txt', 'text/plain', '1');
+    $this->assertEntity(1, 'image-test.jpg', 1901, 'public://image-test.jpg', 'image/jpeg', 2);
+    $this->assertEntity(2, 'image-test.png', 125, 'public://image-test.png', 'image/png', 8);
+    $this->assertEntity(3, 'Image1.png', 39325, 'public://image-1.png', 'image/png', 1);
+    $this->assertEntity(4, 'Image2.jpg', 1831, 'public://image-2.jpg', 'image/jpeg', 1);
+    $this->assertEntity(5, 'Image-test.gif', 183, 'public://image-test.gif', 'image/jpeg', 1);
+    $this->assertEntity(6, 'html-1.txt', 24, 'public://html-1.txt', 'text/plain', 1);
   }
 
   /**
@@ -74,16 +74,18 @@ public function testUserPictures() {
    *   The expected MIME type.
    * @param int $uid
    *   The expected file owner ID.
+   *
+   * @internal
    */
-  protected function assertEntity($fid, $name, $size, $uri, $type, $uid) {
+  protected function assertEntity(int $fid, string $name, int $size, string $uri, string $type, int $uid): void {
     /** @var \Drupal\file\FileInterface $file */
     $file = File::load($fid);
     $this->assertInstanceOf(FileInterface::class, $file);
     $this->assertSame($name, $file->getFilename());
-    $this->assertSame($size, $file->getSize());
+    $this->assertSame($size, (int) $file->getSize());
     $this->assertSame($uri, $file->getFileUri());
     $this->assertSame($type, $file->getMimeType());
-    $this->assertSame($uid, $file->getOwnerId());
+    $this->assertSame($uid, (int) $file->getOwnerId());
   }
 
 }
diff --git a/core/modules/user/tests/src/Kernel/Migrate/d6/MigrateUserRoleTest.php b/core/modules/user/tests/src/Kernel/Migrate/d6/MigrateUserRoleTest.php
index cab4de4a5e5f..ea6f946358ae 100644
--- a/core/modules/user/tests/src/Kernel/Migrate/d6/MigrateUserRoleTest.php
+++ b/core/modules/user/tests/src/Kernel/Migrate/d6/MigrateUserRoleTest.php
@@ -33,8 +33,10 @@ protected function setUp(): void {
    *   The original numeric ID of the role in the source database.
    * @param \Drupal\migrate\Plugin\MigrateIdMapInterface $id_map
    *   The map table plugin.
+   *
+   * @internal
    */
-  protected function assertRole($id, array $permissions, $lookupId, MigrateIdMapInterface $id_map) {
+  protected function assertRole(string $id, array $permissions, int $lookupId, MigrateIdMapInterface $id_map): void {
     /** @var \Drupal\user\RoleInterface $role */
     $role = Role::load($id);
     $this->assertInstanceOf(RoleInterface::class, $role);
@@ -49,8 +51,10 @@ protected function assertRole($id, array $permissions, $lookupId, MigrateIdMapIn
    *
    * @param \Drupal\migrate\Plugin\MigrateIdMapInterface $id_map
    *   The map table plugin.
+   *
+   * @internal
    */
-  protected function assertRoles(MigrateIdMapInterface $id_map) {
+  protected function assertRoles(MigrateIdMapInterface $id_map): void {
 
     // The permissions for each role are found in the two tables in the Drupal 6
     // source database. One is the permission table and the other is the
diff --git a/core/modules/user/tests/src/Kernel/Migrate/d7/MigrateUserRoleTest.php b/core/modules/user/tests/src/Kernel/Migrate/d7/MigrateUserRoleTest.php
index 9b3495028efe..4d7fcd66b737 100644
--- a/core/modules/user/tests/src/Kernel/Migrate/d7/MigrateUserRoleTest.php
+++ b/core/modules/user/tests/src/Kernel/Migrate/d7/MigrateUserRoleTest.php
@@ -29,10 +29,12 @@ protected function setUp(): void {
    *   The role ID.
    * @param string $label
    *   The role's expected label.
-   * @param int|null $original_rid
+   * @param int $original_rid
    *   The original (integer) ID of the role, to check permissions.
+   *
+   * @internal
    */
-  protected function assertEntity($id, $label, $original_rid) {
+  protected function assertEntity(string $id, string $label, int $original_rid): void {
     /** @var \Drupal\user\RoleInterface $entity */
     $entity = Role::load($id);
     $this->assertInstanceOf(RoleInterface::class, $entity);
diff --git a/core/modules/user/tests/src/Kernel/Migrate/d7/MigrateUserTest.php b/core/modules/user/tests/src/Kernel/Migrate/d7/MigrateUserTest.php
index 655b460f47ae..f8c533bc6efd 100644
--- a/core/modules/user/tests/src/Kernel/Migrate/d7/MigrateUserTest.php
+++ b/core/modules/user/tests/src/Kernel/Migrate/d7/MigrateUserTest.php
@@ -79,24 +79,26 @@ protected function setUp(): void {
    *   The user's initial email address.
    * @param string[] $roles
    *   Role IDs the user account is expected to have.
-   * @param int $field_integer
+   * @param array|null $field_integer
    *   The value of the integer field.
    * @param int|false $field_file_target_id
    *   (optional) The target ID of the file field.
    * @param bool $has_picture
    *   (optional) Whether the user is expected to have a picture attached.
+   *
+   * @internal
    */
-  protected function assertEntity($id, $label, $mail, $password, $created, $access, $login, $blocked, $entity_langcode, $prefered_langcode, $timezone, $init, $roles, $field_integer, $field_file_target_id = FALSE, $has_picture = FALSE) {
+  protected function assertEntity(string $id, string $label, string $mail, string $password, int $created, int $access, int $login, bool $blocked, string $entity_langcode, string $prefered_langcode, string $timezone, string $init, array $roles, ?array $field_integer, $field_file_target_id = FALSE, bool $has_picture = FALSE): void {
     /** @var \Drupal\user\UserInterface $user */
     $user = User::load($id);
     $this->assertInstanceOf(UserInterface::class, $user);
     $this->assertSame($label, $user->label());
     $this->assertSame($mail, $user->getEmail());
     $this->assertSame($password, $user->getPassword());
-    $this->assertSame($created, $user->getCreatedTime());
-    $this->assertSame($access, $user->getLastAccessedTime());
-    $this->assertSame($login, $user->getLastLoginTime());
-    $this->assertNotSame($blocked, $user->isBlocked());
+    $this->assertSame($created, (int) $user->getCreatedTime());
+    $this->assertSame($access, (int) $user->getLastAccessedTime());
+    $this->assertSame($login, (int) $user->getLastLoginTime());
+    $this->assertNotSame($blocked, (bool) $user->isBlocked());
 
     // Ensure the user's langcode, preferred_langcode and
     // preferred_admin_langcode are valid.
diff --git a/core/modules/user/tests/src/Kernel/UserAccountFormFieldsTest.php b/core/modules/user/tests/src/Kernel/UserAccountFormFieldsTest.php
index 00c75cd60457..1aabea79a8a5 100644
--- a/core/modules/user/tests/src/Kernel/UserAccountFormFieldsTest.php
+++ b/core/modules/user/tests/src/Kernel/UserAccountFormFieldsTest.php
@@ -89,8 +89,10 @@ public function testUserEditForm() {
    *
    * @param array $elements
    *   A form array section that contains the user account form elements.
+   *
+   * @internal
    */
-  protected function assertFieldOrder(array $elements) {
+  protected function assertFieldOrder(array $elements): void {
     $name_index = 0;
     $name_weight = 0;
     $pass_index = 0;
diff --git a/core/modules/user/tests/src/Kernel/UserValidationTest.php b/core/modules/user/tests/src/Kernel/UserValidationTest.php
index 73886da53eae..579b8b4be0de 100644
--- a/core/modules/user/tests/src/Kernel/UserValidationTest.php
+++ b/core/modules/user/tests/src/Kernel/UserValidationTest.php
@@ -198,8 +198,10 @@ public function testValidation() {
    *   (optional) The number of expected violations. Defaults to 1.
    * @param int $expected_index
    *   (optional) The index at which to expect the violation. Defaults to 0.
+   *
+   * @internal
    */
-  protected function assertLengthViolation(EntityInterface $entity, $field_name, $length, $count = 1, $expected_index = 0) {
+  protected function assertLengthViolation(EntityInterface $entity, string $field_name, int $length, int $count = 1, int $expected_index = 0): void {
     $violations = $entity->validate();
     $this->assertCount($count, $violations, "Violation found when $field_name is too long.");
     $this->assertEquals("{$field_name}.0.value", $violations[$expected_index]->getPropertyPath());
@@ -214,8 +216,10 @@ protected function assertLengthViolation(EntityInterface $entity, $field_name, $
    *   The entity object to validate.
    * @param string $field_name
    *   The name of the field to verify.
+   *
+   * @internal
    */
-  protected function assertAllowedValuesViolation(EntityInterface $entity, $field_name) {
+  protected function assertAllowedValuesViolation(EntityInterface $entity, string $field_name): void {
     $violations = $entity->validate();
     $this->assertCount(1, $violations, "Allowed values violation for $field_name found.");
     $this->assertEquals($field_name === 'langcode' ? "{$field_name}.0" : "{$field_name}.0.value", $violations[0]->getPropertyPath());
diff --git a/core/modules/user/tests/src/Unit/PermissionHandlerTest.php b/core/modules/user/tests/src/Unit/PermissionHandlerTest.php
index 36d9254229dc..369b4f299a24 100644
--- a/core/modules/user/tests/src/Unit/PermissionHandlerTest.php
+++ b/core/modules/user/tests/src/Unit/PermissionHandlerTest.php
@@ -332,8 +332,10 @@ public function testPermissionsYamlStaticAndCallback() {
    *
    * @param array $actual_permissions
    *   The actual permissions
+   *
+   * @internal
    */
-  protected function assertPermissions(array $actual_permissions) {
+  protected function assertPermissions(array $actual_permissions): void {
     $this->assertCount(4, $actual_permissions);
     $this->assertEquals('single_description', $actual_permissions['access_module_a']['title']);
     $this->assertEquals('module_a', $actual_permissions['access_module_a']['provider']);
diff --git a/core/modules/user/tests/src/Unit/UserAccessControlHandlerTest.php b/core/modules/user/tests/src/Unit/UserAccessControlHandlerTest.php
index 2e29bb43e16a..0767c5ca6a50 100644
--- a/core/modules/user/tests/src/Unit/UserAccessControlHandlerTest.php
+++ b/core/modules/user/tests/src/Unit/UserAccessControlHandlerTest.php
@@ -135,8 +135,10 @@ protected function setUp(): void {
 
   /**
    * Asserts correct field access grants for a field.
+   *
+   * @internal
    */
-  public function assertFieldAccess($field, $viewer, $target, $view, $edit) {
+  public function assertFieldAccess(string $field, string $viewer, string $target, bool $view, bool $edit): void {
     $field_definition = $this->createMock('Drupal\Core\Field\FieldDefinitionInterface');
     $field_definition->expects($this->any())
       ->method('getName')
diff --git a/core/modules/views/tests/src/Functional/Entity/FieldEntityTranslationTest.php b/core/modules/views/tests/src/Functional/Entity/FieldEntityTranslationTest.php
index 5a3ed15f306e..c6ef36937125 100644
--- a/core/modules/views/tests/src/Functional/Entity/FieldEntityTranslationTest.php
+++ b/core/modules/views/tests/src/Functional/Entity/FieldEntityTranslationTest.php
@@ -168,8 +168,10 @@ public function testTranslationRows() {
    *
    * @param array $expected
    *   The expected rows of the result.
+   *
+   * @internal
    */
-  protected function assertRows($expected = []) {
+  protected function assertRows(array $expected = []): void {
     $actual = [];
     $rows = $this->cssSelect('div.views-row');
     foreach ($rows as $row) {
diff --git a/core/modules/views/tests/src/Functional/Entity/FieldRenderedEntityTranslationTest.php b/core/modules/views/tests/src/Functional/Entity/FieldRenderedEntityTranslationTest.php
index f61145fe9cc7..f6e063f450da 100644
--- a/core/modules/views/tests/src/Functional/Entity/FieldRenderedEntityTranslationTest.php
+++ b/core/modules/views/tests/src/Functional/Entity/FieldRenderedEntityTranslationTest.php
@@ -287,8 +287,10 @@ public function testTranslationRows() {
    *
    * @param array $expected
    *   The expected rows of the result.
+   *
+   * @internal
    */
-  protected function assertRows(array $expected = []) {
+  protected function assertRows(array $expected = []): void {
     $actual = [];
     $rows = $this->cssSelect('div.views-row');
     foreach ($rows as $row) {
diff --git a/core/modules/views/tests/src/Functional/Handler/FieldWebTest.php b/core/modules/views/tests/src/Functional/Handler/FieldWebTest.php
index 520db9cadcf9..3baa6f3943f0 100644
--- a/core/modules/views/tests/src/Functional/Handler/FieldWebTest.php
+++ b/core/modules/views/tests/src/Functional/Handler/FieldWebTest.php
@@ -141,10 +141,10 @@ protected function clickSortLoadIdsFromOutput() {
    *   The value to search for.
    * @param string $message
    *   The message to display along with the assertion.
-   * @param string $group
-   *   The type of assertion - examples are "Browser", "PHP".
+   *
+   * @internal
    */
-  protected function assertSubString($haystack, $needle, $message = '', $group = 'Other') {
+  protected function assertSubString(string $haystack, string $needle, string $message = ''): void {
     $this->assertStringContainsString($needle, $haystack, $message);
   }
 
@@ -157,10 +157,10 @@ protected function assertSubString($haystack, $needle, $message = '', $group = '
    *   The value to search for.
    * @param string $message
    *   The message to display along with the assertion.
-   * @param string $group
-   *   The type of assertion - examples are "Browser", "PHP".
+   *
+   * @internal
    */
-  protected function assertNotSubString($haystack, $needle, $message = '', $group = 'Other') {
+  protected function assertNotSubString(string $haystack, string $needle, string $message = ''): void {
     $this->assertStringNotContainsString($needle, $haystack, $message);
   }
 
diff --git a/core/modules/views/tests/src/Functional/Plugin/DisplayPageWebTest.php b/core/modules/views/tests/src/Functional/Plugin/DisplayPageWebTest.php
index 38f371799b45..6fc75547dee1 100644
--- a/core/modules/views/tests/src/Functional/Plugin/DisplayPageWebTest.php
+++ b/core/modules/views/tests/src/Functional/Plugin/DisplayPageWebTest.php
@@ -152,8 +152,10 @@ public function testPagePaths() {
    *
    * @param string $path
    *   Path that will be set as the view page display path.
+   *
+   * @internal
    */
-  public function assertPagePath($path) {
+  public function assertPagePath(string $path): void {
     $view = Views::getView('test_page_display_path');
     $view->initDisplay('page_1');
     $view->displayHandlers->get('page_1')->overrideOption('path', $path);
diff --git a/core/modules/views/tests/src/Functional/Plugin/ExposedFormTest.php b/core/modules/views/tests/src/Functional/Plugin/ExposedFormTest.php
index 92381e1da74c..ea733a5b4a30 100644
--- a/core/modules/views/tests/src/Functional/Plugin/ExposedFormTest.php
+++ b/core/modules/views/tests/src/Functional/Plugin/ExposedFormTest.php
@@ -414,8 +414,10 @@ public function testExposedSortAndItemsPerPage() {
    *
    * @param int[] $ids
    *   The ids to check.
+   *
+   * @internal
    */
-  protected function assertIds(array $ids) {
+  protected function assertIds(array $ids): void {
     $elements = $this->cssSelect('div.view-test-exposed-form-sort-items-per-page div.views-row span.field-content');
     $actual_ids = [];
     foreach ($elements as $element) {
@@ -492,8 +494,10 @@ public function testExposedFilterPagination() {
    *
    * @param array $bundles
    *   Bundles of nodes.
+   *
+   * @internal
    */
-  protected function assertNodesExist(array $bundles) {
+  protected function assertNodesExist(array $bundles): void {
     foreach ($this->nodes as $node) {
       if (in_array($node->bundle(), $bundles)) {
         $this->assertSession()->pageTextContains($node->label());
diff --git a/core/modules/views/tests/src/Functional/SearchIntegrationTest.php b/core/modules/views/tests/src/Functional/SearchIntegrationTest.php
index 70dc2b6bb880..569c9ef11b23 100644
--- a/core/modules/views/tests/src/Functional/SearchIntegrationTest.php
+++ b/core/modules/views/tests/src/Functional/SearchIntegrationTest.php
@@ -144,15 +144,13 @@ public function testSearchIntegration() {
    * @param string $label
    *   Link label to assert.
    *
-   * @return bool
-   *   TRUE if the assertion succeeded.
+   * @internal
    */
-  protected function assertOneLink($label) {
+  protected function assertOneLink(string $label): void {
     $xpath = $this->assertSession()->buildXPathQuery('//a[normalize-space(text())=:label]', [
       ':label' => $label,
     ]);
     $this->assertSession()->elementsCount('xpath', $xpath, 1);
-    return TRUE;
   }
 
 }
diff --git a/core/modules/views/tests/src/FunctionalJavascript/PaginationAJAXTest.php b/core/modules/views/tests/src/FunctionalJavascript/PaginationAJAXTest.php
index ff7f60357ac0..f96b468e3ca1 100644
--- a/core/modules/views/tests/src/FunctionalJavascript/PaginationAJAXTest.php
+++ b/core/modules/views/tests/src/FunctionalJavascript/PaginationAJAXTest.php
@@ -136,8 +136,10 @@ public function testBasicPagination() {
 
   /**
    * Assert that assets are not loaded twice on a page.
+   *
+   * @internal
    */
-  protected function assertNoDuplicateAssetsOnPage() {
+  protected function assertNoDuplicateAssetsOnPage(): void {
     /** @var \Behat\Mink\Element\NodeElement[] $scripts */
     $scripts = $this->getSession()->getPage()->findAll('xpath', '//script');
     $script_src = [];
diff --git a/core/modules/views/tests/src/Kernel/CacheableMetadataCalculationTest.php b/core/modules/views/tests/src/Kernel/CacheableMetadataCalculationTest.php
index 338223709ab0..fa47eca31b88 100644
--- a/core/modules/views/tests/src/Kernel/CacheableMetadataCalculationTest.php
+++ b/core/modules/views/tests/src/Kernel/CacheableMetadataCalculationTest.php
@@ -95,8 +95,10 @@ public function testCacheableMetadataCalculation() {
    * @param bool $expected_result
    *   TRUE if it is expected that the cacheability metadata has been
    *   calculated. FALSE otherwise.
+   *
+   * @internal
    */
-  protected function assertCacheableMetadataHasBeenCalculated($expected_result) {
+  protected function assertCacheableMetadataHasBeenCalculated(bool $expected_result): void {
     $this->state->resetCache();
     $this->assertEquals($expected_result, $this->state->get('views_test_cacheable_metadata_has_been_accessed'));
   }
diff --git a/core/modules/views/tests/src/Kernel/Entity/EntityViewsDataTest.php b/core/modules/views/tests/src/Kernel/Entity/EntityViewsDataTest.php
index 6bab4cfdbdec..372a4c4add80 100644
--- a/core/modules/views/tests/src/Kernel/Entity/EntityViewsDataTest.php
+++ b/core/modules/views/tests/src/Kernel/Entity/EntityViewsDataTest.php
@@ -637,18 +637,22 @@ public function testRevisionTableFields() {
    *   The views data to check.
    * @param string $field_name
    *   The entity field name.
+   *
+   * @internal
    */
-  protected function assertViewsDataField($data, $field_name) {
+  protected function assertViewsDataField(array $data, string $field_name): void {
     $this->assertEquals($field_name, $data['entity field']);
   }
 
   /**
    * Tests views data for a string field.
    *
-   * @param $data
+   * @param array $data
    *   The views data to check.
+   *
+   * @internal
    */
-  protected function assertStringField($data) {
+  protected function assertStringField(array $data): void {
     $this->assertEquals('field', $data['field']['id']);
     $this->assertEquals('string', $data['filter']['id']);
     $this->assertEquals('string', $data['argument']['id']);
@@ -658,10 +662,12 @@ protected function assertStringField($data) {
   /**
    * Tests views data for a URI field.
    *
-   * @param $data
+   * @param array $data
    *   The views data to check.
+   *
+   * @internal
    */
-  protected function assertUriField($data) {
+  protected function assertUriField(array $data): void {
     $this->assertEquals('field', $data['field']['id']);
     $this->assertEquals('string', $data['field']['default_formatter']);
     $this->assertEquals('string', $data['filter']['id']);
@@ -672,12 +678,14 @@ protected function assertUriField($data) {
   /**
    * Tests views data for a long text field.
    *
-   * @param $data
+   * @param array $data
    *   The views data for the table this field is in.
-   * @param $field_name
+   * @param string $field_name
    *   The name of the field being checked.
+   *
+   * @internal
    */
-  protected function assertLongTextField($data, $field_name) {
+  protected function assertLongTextField(array $data, string $field_name): void {
     $value_field = $data[$field_name . '__value'];
     $this->assertEquals('field', $value_field['field']['id']);
     $this->assertEquals($field_name . '__format', $value_field['field']['format']);
@@ -693,8 +701,10 @@ protected function assertLongTextField($data, $field_name) {
    *
    * @param array $data
    *   The views data to check.
+   *
+   * @internal
    */
-  protected function assertUuidField($data) {
+  protected function assertUuidField(array $data): void {
     // @todo Can we provide additional support for UUIDs in views?
     $this->assertEquals('field', $data['field']['id']);
     $this->assertFalse($data['field']['click sortable']);
@@ -708,8 +718,10 @@ protected function assertUuidField($data) {
    *
    * @param array $data
    *   The views data to check.
+   *
+   * @internal
    */
-  protected function assertNumericField($data) {
+  protected function assertNumericField(array $data): void {
     $this->assertEquals('field', $data['field']['id']);
     $this->assertEquals('numeric', $data['filter']['id']);
     $this->assertEquals('numeric', $data['argument']['id']);
@@ -721,8 +733,10 @@ protected function assertNumericField($data) {
    *
    * @param array $data
    *   The views data to check.
+   *
+   * @internal
    */
-  protected function assertLanguageField($data) {
+  protected function assertLanguageField(array $data): void {
     $this->assertEquals('field', $data['field']['id']);
     $this->assertEquals('language', $data['filter']['id']);
     $this->assertEquals('language', $data['argument']['id']);
@@ -731,8 +745,10 @@ protected function assertLanguageField($data) {
 
   /**
    * Tests views data for an entity reference field.
+   *
+   * @internal
    */
-  protected function assertEntityReferenceField($data) {
+  protected function assertEntityReferenceField(array $data): void {
     $this->assertEquals('field', $data['field']['id']);
     $this->assertEquals('numeric', $data['filter']['id']);
     $this->assertEquals('numeric', $data['argument']['id']);
@@ -741,8 +757,10 @@ protected function assertEntityReferenceField($data) {
 
   /**
    * Tests views data for a bundle field.
+   *
+   * @internal
    */
-  protected function assertBundleField($data) {
+  protected function assertBundleField(array $data): void {
     $this->assertEquals('field', $data['field']['id']);
     $this->assertEquals('bundle', $data['filter']['id']);
     $this->assertEquals('string', $data['argument']['id']);
diff --git a/core/modules/views/tests/src/Kernel/Entity/LatestRevisionFilterTest.php b/core/modules/views/tests/src/Kernel/Entity/LatestRevisionFilterTest.php
index 1b47f80b4e47..41606428b747 100644
--- a/core/modules/views/tests/src/Kernel/Entity/LatestRevisionFilterTest.php
+++ b/core/modules/views/tests/src/Kernel/Entity/LatestRevisionFilterTest.php
@@ -126,8 +126,10 @@ public function testLatestRevisionFilter() {
    *   An executed View.
    * @param array $not_expected_revision_ids
    *   An array of revision IDs which should not be part of the result set.
+   *
+   * @internal
    */
-  protected function assertNotInResultSet(ViewExecutable $view, array $not_expected_revision_ids) {
+  protected function assertNotInResultSet(ViewExecutable $view, array $not_expected_revision_ids): void {
     $found_revision_ids = array_filter($view->result, function ($row) use ($not_expected_revision_ids) {
       return in_array($row->vid, $not_expected_revision_ids);
     });
diff --git a/core/modules/views/tests/src/Kernel/Entity/RowEntityRenderersTest.php b/core/modules/views/tests/src/Kernel/Entity/RowEntityRenderersTest.php
index d373072d09ed..42eaa3b12d77 100644
--- a/core/modules/views/tests/src/Kernel/Entity/RowEntityRenderersTest.php
+++ b/core/modules/views/tests/src/Kernel/Entity/RowEntityRenderersTest.php
@@ -241,10 +241,10 @@ protected function checkLanguageRenderers($display, $values) {
    *   An array of expected title translation values, one for each result row.
    * @param string $message
    *   (optional) A message to display with the assertion.
-   * @param string $group
-   *   (optional) The group this message is in.
+   *
+   * @internal
    */
-  protected function assertTranslations($display, $renderer_id, array $expected, $message = '', $group = 'Other') {
+  protected function assertTranslations(string $display, string $renderer_id, array $expected, string $message = ''): void {
     $view = Views::getView('test_entity_row_renderers');
     $view->storage->invalidateCaches();
     $view->setDisplay($display);
@@ -267,7 +267,7 @@ protected function assertTranslations($display, $renderer_id, array $expected, $
       }
     }
 
-    $this->assertTrue($result, $message, $group);
+    $this->assertTrue($result, $message);
   }
 
 }
diff --git a/core/modules/views/tests/src/Kernel/EventSubscriber/ViewsEntitySchemaSubscriberIntegrationTest.php b/core/modules/views/tests/src/Kernel/EventSubscriber/ViewsEntitySchemaSubscriberIntegrationTest.php
index 9c25d3aead6d..b22c6b1c3b3e 100644
--- a/core/modules/views/tests/src/Kernel/EventSubscriber/ViewsEntitySchemaSubscriberIntegrationTest.php
+++ b/core/modules/views/tests/src/Kernel/EventSubscriber/ViewsEntitySchemaSubscriberIntegrationTest.php
@@ -548,8 +548,10 @@ protected function getUpdatedViewAndDisplay($revision = FALSE) {
    *
    * @param string[] $updated_view_ids
    *   An array of view IDs.
+   *
+   * @internal
    */
-  protected function assertUpdatedViews($updated_view_ids) {
+  protected function assertUpdatedViews(array $updated_view_ids): void {
     $all_view_ids = array_keys($this->entityTypeManager->getStorage('view')->loadMultiple());
 
     $view_save_count = \Drupal::state()->get('views_test_data.view_save_count', []);
diff --git a/core/modules/views/tests/src/Kernel/Handler/AreaDisplayLinkTest.php b/core/modules/views/tests/src/Kernel/Handler/AreaDisplayLinkTest.php
index 82caa80f19bf..659e1490efb7 100644
--- a/core/modules/views/tests/src/Kernel/Handler/AreaDisplayLinkTest.php
+++ b/core/modules/views/tests/src/Kernel/Handler/AreaDisplayLinkTest.php
@@ -302,8 +302,10 @@ public function testAreaDisplayLink() {
    *   The view to check.
    * @param string $display_link_id
    *   The display link ID to check the options for.
+   *
+   * @internal
    */
-  protected function assertFormOptions(ViewExecutable $view, $display_link_id) {
+  protected function assertFormOptions(ViewExecutable $view, string $display_link_id): void {
     $form = [];
     $form_state = new FormState();
     $view->display_handler->getHandler('header', $display_link_id)->buildOptionsForm($form, $form_state);
@@ -319,8 +321,10 @@ protected function assertFormOptions(ViewExecutable $view, $display_link_id) {
    *   The view to check.
    * @param string $display_id
    *   The display ID to check the links for.
+   *
+   * @internal
    */
-  protected function assertRenderedDisplayLinks(ViewExecutable $view, $display_id) {
+  protected function assertRenderedDisplayLinks(ViewExecutable $view, string $display_id): void {
     $page_1_active = $display_id === 'page_1' ? ' is-active' : '';
     $page_2_active = $display_id === 'page_2' ? ' is-active' : '';
 
@@ -368,8 +372,10 @@ protected function renderDisplayLink(ViewExecutable $view, $display_link_id) {
    *
    * @param \Drupal\views\ViewExecutable $view
    *   The view to check.
+   *
+   * @internal
    */
-  protected function assertNoWarningMessages(ViewExecutable $view) {
+  protected function assertNoWarningMessages(ViewExecutable $view): void {
     $messenger = $this->container->get('messenger');
 
     $view->validate();
@@ -385,8 +391,10 @@ protected function assertNoWarningMessages(ViewExecutable $view) {
    *   An array of options that should be unequal.
    *
    * @throws \Exception
+   *
+   * @internal
    */
-  protected function assertWarningMessages(ViewExecutable $view, array $unequal_options) {
+  protected function assertWarningMessages(ViewExecutable $view, array $unequal_options): void {
     $messenger = $this->container->get('messenger');
 
     // Create a list of options to check.
diff --git a/core/modules/views/tests/src/Kernel/Handler/FieldDateTest.php b/core/modules/views/tests/src/Kernel/Handler/FieldDateTest.php
index 5ce5e83c8325..cd584e685983 100644
--- a/core/modules/views/tests/src/Kernel/Handler/FieldDateTest.php
+++ b/core/modules/views/tests/src/Kernel/Handler/FieldDateTest.php
@@ -3,6 +3,7 @@
 namespace Drupal\Tests\views\Kernel\Handler;
 
 use Drupal\Tests\views\Kernel\ViewsKernelTestBase;
+use Drupal\views\ViewExecutable;
 use Drupal\views\Views;
 
 /**
@@ -142,14 +143,16 @@ public function testFieldDate() {
   /**
    * Asserts properly formatted display against 'created' field in view.
    *
-   * @param mixed $view
+   * @param \Drupal\views\ViewExecutable $view
    *   View to be tested.
    * @param array $map
    *   Data map.
-   * @param null $timezone
+   * @param string|null $timezone
    *   Optional timezone.
+   *
+   * @internal
    */
-  protected function assertRenderedDatesEqual($view, $map, $timezone = NULL) {
+  protected function assertRenderedDatesEqual(ViewExecutable $view, array $map, ?string $timezone = NULL): void {
     foreach ($map as $date_format => $expected_result) {
       $view->field['created']->options['date_format'] = $date_format;
       if (isset($timezone)) {
@@ -167,12 +170,14 @@ protected function assertRenderedDatesEqual($view, $map, $timezone = NULL) {
   /**
    * Asserts properly formatted display against 'destroyed' field in view.
    *
-   * @param mixed $view
+   * @param \Drupal\views\ViewExecutable $view
    *   View to be tested.
    * @param array $map
    *   Data map.
+   *
+   * @internal
    */
-  protected function assertRenderedFutureDatesEqual($view, $map) {
+  protected function assertRenderedFutureDatesEqual(ViewExecutable $view, array $map): void {
     foreach ($map as $format => $result) {
       $view->field['destroyed']->options['date_format'] = $format;
       $view_result = $view->field['destroyed']->advancedRender($view->result[0]);
diff --git a/core/modules/views/tests/src/Kernel/Handler/FieldKernelTest.php b/core/modules/views/tests/src/Kernel/Handler/FieldKernelTest.php
index 4f910234e9ae..fa37204e0a00 100644
--- a/core/modules/views/tests/src/Kernel/Handler/FieldKernelTest.php
+++ b/core/modules/views/tests/src/Kernel/Handler/FieldKernelTest.php
@@ -104,13 +104,10 @@ public function testQuery() {
    *   messages: use \Drupal\Component\Render\FormattableMarkup to embed
    *   variables in the message text, not t(). If left blank, a default message
    *   will be displayed.
-   * @param string $group
-   *   (optional) The group this message is in, which is displayed in a column
-   *   in test output. Use 'Debug' to indicate this is debugging output. Do not
-   *   translate this string. Defaults to 'Other'; most tests do not override
-   *   this default.
+   *
+   * @internal
    */
-  protected function assertSubString($haystack, $needle, $message = '', $group = 'Other') {
+  protected function assertSubString(string $haystack, string $needle, string $message = ''): void {
     $this->assertStringContainsString($needle, $haystack, $message);
   }
 
@@ -126,13 +123,10 @@ protected function assertSubString($haystack, $needle, $message = '', $group = '
    *   messages: use \Drupal\Component\Render\FormattableMarkup to embed
    *   variables in the message text, not t(). If left blank, a default message
    *   will be displayed.
-   * @param string $group
-   *   (optional) The group this message is in, which is displayed in a column
-   *   in test output. Use 'Debug' to indicate this is debugging output. Do not
-   *   translate this string. Defaults to 'Other'; most tests do not override
-   *   this default.
+   *
+   * @internal
    */
-  protected function assertNotSubString($haystack, $needle, $message = '', $group = 'Other') {
+  protected function assertNotSubString(string $haystack, string $needle, string $message = ''): void {
     $this->assertStringNotContainsString($needle, $haystack, $message);
   }
 
diff --git a/core/modules/views/tests/src/Kernel/Handler/FieldRenderedEntityTest.php b/core/modules/views/tests/src/Kernel/Handler/FieldRenderedEntityTest.php
index 241c65cec516..1c598edcb29e 100644
--- a/core/modules/views/tests/src/Kernel/Handler/FieldRenderedEntityTest.php
+++ b/core/modules/views/tests/src/Kernel/Handler/FieldRenderedEntityTest.php
@@ -142,8 +142,10 @@ public function testRenderedEntityWithoutField() {
    *
    * @param array $build
    *   The render array
+   *
+   * @internal
    */
-  protected function assertCacheabilityMetadata($build) {
+  protected function assertCacheabilityMetadata(array $build): void {
     $this->assertEqualsCanonicalizing([
       'config:core.entity_view_display.entity_test.entity_test.foobar',
       'config:views.view.test_field_entity_test_rendered',
@@ -168,8 +170,10 @@ protected function assertCacheabilityMetadata($build) {
    *
    * @param \Drupal\views\Entity\View $storage
    *   The view storage.
+   *
+   * @internal
    */
-  protected function assertConfigDependencies(View $storage) {
+  protected function assertConfigDependencies(View $storage): void {
     $storage->calculateDependencies();
     $this->assertEquals([
       'config' => ['core.entity_view_mode.entity_test.foobar'],
diff --git a/core/modules/views/tests/src/Kernel/ModuleTest.php b/core/modules/views/tests/src/Kernel/ModuleTest.php
index f59370d62d0f..8113f573d061 100644
--- a/core/modules/views/tests/src/Kernel/ModuleTest.php
+++ b/core/modules/views/tests/src/Kernel/ModuleTest.php
@@ -8,6 +8,7 @@
 use Drupal\views\Plugin\views\field\Broken as BrokenField;
 use Drupal\views\Plugin\views\filter\Broken as BrokenFilter;
 use Drupal\views\Plugin\views\filter\Standard;
+use Drupal\views\Plugin\views\ViewsHandlerInterface;
 use Drupal\views\Views;
 
 /**
@@ -334,8 +335,10 @@ protected function formatViewOptions(array $views = []) {
 
   /**
    * Ensure that a certain handler is an instance of a certain table/field.
+   *
+   * @internal
    */
-  public function assertInstanceHandler($handler, $table, $field, $id) {
+  public function assertInstanceHandler(ViewsHandlerInterface $handler, string $table, string $field, string $id): void {
     $table_data = $this->container->get('views.views_data')->get($table);
     $field_data = $table_data[$field][$id];
 
diff --git a/core/modules/views/tests/src/Kernel/Plugin/StyleGridTest.php b/core/modules/views/tests/src/Kernel/Plugin/StyleGridTest.php
index 521ab74ed43e..69f940ed05ed 100644
--- a/core/modules/views/tests/src/Kernel/Plugin/StyleGridTest.php
+++ b/core/modules/views/tests/src/Kernel/Plugin/StyleGridTest.php
@@ -50,8 +50,10 @@ public function testGrid() {
    *   The alignment of the grid to test.
    * @param int $columns
    *   The number of columns in the grid to test.
+   *
+   * @internal
    */
-  protected function assertGrid(ViewExecutable $view, $alignment, $columns) {
+  protected function assertGrid(ViewExecutable $view, string $alignment, int $columns): void {
     $view->setDisplay('default');
     $view->initStyle();
     $view->initHandlers();
diff --git a/core/modules/views/tests/src/Kernel/PluginInstanceTest.php b/core/modules/views/tests/src/Kernel/PluginInstanceTest.php
index 5858ae115f25..315fae720372 100644
--- a/core/modules/views/tests/src/Kernel/PluginInstanceTest.php
+++ b/core/modules/views/tests/src/Kernel/PluginInstanceTest.php
@@ -93,8 +93,10 @@ public function testPluginInstances() {
    *
    * @param bool $test_deprecated
    *   Indicates if deprecated plugins should be tested or skipped.
+   *
+   * @internal
    */
-  protected function assertPluginInstances($test_deprecated) {
+  protected function assertPluginInstances(bool $test_deprecated): void {
     foreach ($this->definitions as $type => $plugins) {
       // Get a plugin manager for this type.
       $manager = $this->container->get("plugin.manager.views.$type");
diff --git a/core/modules/views/tests/src/Kernel/RenderCacheIntegrationTest.php b/core/modules/views/tests/src/Kernel/RenderCacheIntegrationTest.php
index ed1fa20e285b..2ed8125a3b3f 100644
--- a/core/modules/views/tests/src/Kernel/RenderCacheIntegrationTest.php
+++ b/core/modules/views/tests/src/Kernel/RenderCacheIntegrationTest.php
@@ -87,8 +87,10 @@ public function testFieldBasedViewCacheTagsWithCachePluginTime() {
    *
    * @param bool $do_assert_views_caches
    *   Whether to check Views' result & output caches.
+   *
+   * @internal
    */
-  protected function assertCacheTagsForFieldBasedView($do_assert_views_caches) {
+  protected function assertCacheTagsForFieldBasedView(bool $do_assert_views_caches): void {
     $view = Views::getview('entity_test_fields');
 
     // Empty result (no entities yet).
@@ -229,8 +231,10 @@ public function testEntityBasedViewCacheTagsWithCachePluginTime() {
 
   /**
    * Tests cache tags on output & result cache items for an entity-based view.
+   *
+   * @internal
    */
-  protected function assertCacheTagsForEntityBasedView($do_assert_views_caches) {
+  protected function assertCacheTagsForEntityBasedView(bool $do_assert_views_caches): void {
     $view = Views::getview('entity_test_row');
 
     // Empty result (no entities yet).
diff --git a/core/modules/views/tests/src/Kernel/ViewExecutableTest.php b/core/modules/views/tests/src/Kernel/ViewExecutableTest.php
index 92e4b51d2590..5fa97a3928cf 100644
--- a/core/modules/views/tests/src/Kernel/ViewExecutableTest.php
+++ b/core/modules/views/tests/src/Kernel/ViewExecutableTest.php
@@ -362,8 +362,10 @@ public function testDestroy() {
    *
    * @param \Drupal\views\ViewExecutable $view
    *   The view executable.
+   *
+   * @internal
    */
-  protected function assertViewDestroy(ViewExecutable $view) {
+  protected function assertViewDestroy(ViewExecutable $view): void {
     $reflection = new \ReflectionClass($view);
     $defaults = $reflection->getDefaultProperties();
     // The storage and user should remain.
diff --git a/core/modules/views/tests/src/Unit/Controller/ViewAjaxControllerTest.php b/core/modules/views/tests/src/Unit/Controller/ViewAjaxControllerTest.php
index f0e3ba9ce91e..c0dff398575f 100644
--- a/core/modules/views/tests/src/Unit/Controller/ViewAjaxControllerTest.php
+++ b/core/modules/views/tests/src/Unit/Controller/ViewAjaxControllerTest.php
@@ -437,8 +437,10 @@ protected function getCommands(ViewAjaxResponse $response) {
    *   The response object.
    * @param int $position
    *   The position where the view content command is expected.
+   *
+   * @internal
    */
-  protected function assertViewResultCommand(ViewAjaxResponse $response, $position = 0) {
+  protected function assertViewResultCommand(ViewAjaxResponse $response, int $position = 0): void {
     $commands = $this->getCommands($response);
     $this->assertEquals('insert', $commands[$position]['command']);
     $this->assertEquals('View result', $commands[$position]['data']);
diff --git a/core/modules/views_ui/tests/src/Functional/ExposedFormUITest.php b/core/modules/views_ui/tests/src/Functional/ExposedFormUITest.php
index 5cd30b04aed9..219951d15544 100644
--- a/core/modules/views_ui/tests/src/Functional/ExposedFormUITest.php
+++ b/core/modules/views_ui/tests/src/Functional/ExposedFormUITest.php
@@ -294,19 +294,15 @@ public function testGroupedFilterAdminUiErrors() {
    *
    * @param string $message
    *   The assert message.
-   * @param string $group
-   *   The assertion group.
    *
-   * @return bool
-   *   Result of the assertion.
+   * @internal
    */
-  protected function assertNoGroupedFilterErrors($message = '', $group = 'Other') {
+  protected function assertNoGroupedFilterErrors(string $message = ''): void {
     foreach ($this->groupFormUiErrors as $error) {
       if (empty($message)) {
-        return $this->assertSession()->responseNotContains($error);
+        $this->assertSession()->responseNotContains($error);
       }
     }
-    return TRUE;
   }
 
   /**
diff --git a/core/modules/views_ui/tests/src/Functional/HandlerTest.php b/core/modules/views_ui/tests/src/Functional/HandlerTest.php
index e20089a77c43..e5235989fca6 100644
--- a/core/modules/views_ui/tests/src/Functional/HandlerTest.php
+++ b/core/modules/views_ui/tests/src/Functional/HandlerTest.php
@@ -294,8 +294,10 @@ public function testErrorMissingHelp() {
    *   The field name.
    * @param string $entity_type
    *   The entity type to which the field belongs.
+   *
+   * @internal
    */
-  public function assertNoDuplicateField($field_name, $entity_type) {
+  public function assertNoDuplicateField(string $field_name, string $entity_type): void {
     $elements = $this->xpath('//td[.=:entity_type]/preceding-sibling::td[@class="title" and .=:title]', [':title' => $field_name, ':entity_type' => $entity_type]);
     $this->assertCount(1, $elements, $field_name . ' appears just once in ' . $entity_type . '.');
   }
diff --git a/core/modules/views_ui/tests/src/Functional/RearrangeFieldsTest.php b/core/modules/views_ui/tests/src/Functional/RearrangeFieldsTest.php
index bd57872746ca..4aea55c68196 100644
--- a/core/modules/views_ui/tests/src/Functional/RearrangeFieldsTest.php
+++ b/core/modules/views_ui/tests/src/Functional/RearrangeFieldsTest.php
@@ -40,12 +40,14 @@ protected function getViewFields($view_name = 'test_view', $display_id = 'defaul
   /**
    * Check if the fields are in the correct order.
    *
-   * @param $view_name
+   * @param string $view_name
    *   The name of the view.
-   * @param $fields
+   * @param array $fields
    *   Array of field names.
+   *
+   * @internal
    */
-  protected function assertFieldOrder($view_name, $fields) {
+  protected function assertFieldOrder(string $view_name, array $fields): void {
     $this->drupalGet('admin/structure/views/nojs/rearrange/' . $view_name . '/default/field');
 
     foreach ($fields as $idx => $field) {
diff --git a/core/modules/views_ui/tests/src/FunctionalJavascript/PreviewTest.php b/core/modules/views_ui/tests/src/FunctionalJavascript/PreviewTest.php
index 43eab572b48b..9ca8b80a65e2 100644
--- a/core/modules/views_ui/tests/src/FunctionalJavascript/PreviewTest.php
+++ b/core/modules/views_ui/tests/src/FunctionalJavascript/PreviewTest.php
@@ -282,8 +282,10 @@ protected function clickPreviewLinkAJAX(NodeElement $element, $row_count) {
    *
    * @param int $row_count
    *   The expected number of rows in the preview.
+   *
+   * @internal
    */
-  protected function assertPreviewAJAX($row_count) {
+  protected function assertPreviewAJAX(int $row_count): void {
     $elements = $this->getSession()->getPage()->findAll('css', '.view-content .views-row');
     $this->assertCount($row_count, $elements, 'Expected items found on page.');
   }
@@ -297,8 +299,10 @@ protected function assertPreviewAJAX($row_count) {
    *   The class to assert.
    * @param string $message
    *   (optional) A verbose message to output.
+   *
+   * @internal
    */
-  protected function assertClass(NodeElement $element, $class, $message = NULL) {
+  protected function assertClass(NodeElement $element, string $class, string $message = ''): void {
     if (!isset($message)) {
       $message = "Class .$class found.";
     }
diff --git a/core/modules/workspaces/tests/src/Functional/PathWorkspacesTest.php b/core/modules/workspaces/tests/src/Functional/PathWorkspacesTest.php
index e97c77820541..8cd3a7163854 100644
--- a/core/modules/workspaces/tests/src/Functional/PathWorkspacesTest.php
+++ b/core/modules/workspaces/tests/src/Functional/PathWorkspacesTest.php
@@ -305,8 +305,10 @@ public function testPathAliasesWithTranslation() {
    *
    * @param string[] $paths
    *   An array of paths to check for.
+   *
+   * @internal
    */
-  protected function assertAccessiblePaths(array $paths) {
+  protected function assertAccessiblePaths(array $paths): void {
     foreach ($paths as $path) {
       $this->drupalGet($path);
       $this->assertSession()->statusCodeEquals(200);
@@ -318,8 +320,10 @@ protected function assertAccessiblePaths(array $paths) {
    *
    * @param string[] $paths
    *   An array of paths to check for.
+   *
+   * @internal
    */
-  protected function assertNotAccessiblePaths(array $paths) {
+  protected function assertNotAccessiblePaths(array $paths): void {
     foreach ($paths as $path) {
       $this->drupalGet($path);
       $this->assertSession()->statusCodeEquals(404);
diff --git a/core/modules/workspaces/tests/src/Kernel/WorkspaceIntegrationTest.php b/core/modules/workspaces/tests/src/Kernel/WorkspaceIntegrationTest.php
index dd32a2682b48..3c86921cf603 100644
--- a/core/modules/workspaces/tests/src/Kernel/WorkspaceIntegrationTest.php
+++ b/core/modules/workspaces/tests/src/Kernel/WorkspaceIntegrationTest.php
@@ -753,8 +753,10 @@ public function testExecuteInWorkspaceContext() {
    *   An array of expected values, as defined in ::testWorkspaces().
    * @param string $entity_type_id
    *   The ID of the entity type that is being tested.
+   *
+   * @internal
    */
-  protected function assertWorkspaceStatus(array $expected, $entity_type_id) {
+  protected function assertWorkspaceStatus(array $expected, string $entity_type_id): void {
     $expected = $this->flattenExpectedValues($expected, $entity_type_id);
 
     $entity_keys = $this->entityTypeManager->getDefinition($entity_type_id)->getKeys();
@@ -823,8 +825,10 @@ protected function assertWorkspaceStatus(array $expected, $entity_type_id) {
    *   An array of expected values, as defined in ::testWorkspaces().
    * @param string $entity_type_id
    *   The ID of the entity type to check.
+   *
+   * @internal
    */
-  protected function assertEntityLoad(array $expected_values, $entity_type_id) {
+  protected function assertEntityLoad(array $expected_values, string $entity_type_id): void {
     // Filter the expected values so we can check only the default revisions.
     $expected_default_revisions = array_filter($expected_values, function ($expected_value) {
       return $expected_value['default_revision'] === TRUE;
@@ -875,8 +879,10 @@ protected function assertEntityLoad(array $expected_values, $entity_type_id) {
    *   An array of expected values, as defined in ::testWorkspaces().
    * @param string $entity_type_id
    *   The ID of the entity type to check.
+   *
+   * @internal
    */
-  protected function assertEntityRevisionLoad(array $expected_values, $entity_type_id) {
+  protected function assertEntityRevisionLoad(array $expected_values, string $entity_type_id): void {
     $entity_keys = $this->entityTypeManager->getDefinition($entity_type_id)->getKeys();
     $id_key = $entity_keys['id'];
     $revision_key = $entity_keys['revision'];
@@ -901,8 +907,10 @@ protected function assertEntityRevisionLoad(array $expected_values, $entity_type
    *   An array of expected values, as defined in ::testWorkspaces().
    * @param string $entity_type_id
    *   The ID of the entity type to check.
+   *
+   * @internal
    */
-  protected function assertEntityQuery(array $expected_values, $entity_type_id) {
+  protected function assertEntityQuery(array $expected_values, string $entity_type_id): void {
     $storage = $this->entityTypeManager->getStorage($entity_type_id);
     $entity_keys = $this->entityTypeManager->getDefinition($entity_type_id)->getKeys();
     $id_key = $entity_keys['id'];
diff --git a/core/profiles/demo_umami/modules/demo_umami_content/tests/src/Functional/UninstallDefaultContentTest.php b/core/profiles/demo_umami/modules/demo_umami_content/tests/src/Functional/UninstallDefaultContentTest.php
index 205575be3a9c..b7235cf77066 100644
--- a/core/profiles/demo_umami/modules/demo_umami_content/tests/src/Functional/UninstallDefaultContentTest.php
+++ b/core/profiles/demo_umami/modules/demo_umami_content/tests/src/Functional/UninstallDefaultContentTest.php
@@ -85,7 +85,7 @@ public function testReinstall() {
    * @param \Drupal\Core\Entity\EntityStorageInterface $node_storage
    *   Node storage.
    */
-  protected function assertRecipesImported(EntityStorageInterface $node_storage) {
+  protected function assertRecipesImported(EntityStorageInterface $node_storage): void {
     $count = $node_storage->getQuery()
       ->accessCheck(FALSE)
       ->condition('type', 'recipe')
@@ -104,7 +104,7 @@ protected function assertRecipesImported(EntityStorageInterface $node_storage) {
    * @param \Drupal\Core\Entity\EntityStorageInterface $node_storage
    *   Node storage.
    */
-  protected function assertArticlesImported(EntityStorageInterface $node_storage) {
+  protected function assertArticlesImported(EntityStorageInterface $node_storage): void {
     $count = $node_storage->getQuery()
       ->accessCheck(FALSE)
       ->condition('type', 'article')
@@ -123,7 +123,7 @@ protected function assertArticlesImported(EntityStorageInterface $node_storage)
    * @param \Drupal\Core\Entity\EntityStorageInterface $block_storage
    *   Block storage.
    */
-  protected function assertImportedCustomBlock(EntityStorageInterface $block_storage) {
+  protected function assertImportedCustomBlock(EntityStorageInterface $block_storage): void {
     $assert = $this->assertSession();
     foreach ($this->expectedBlocks() as $block_info) {
       $this->drupalGet($block_info['path']);
diff --git a/core/profiles/demo_umami/tests/src/Functional/DemoUmamiProfileTest.php b/core/profiles/demo_umami/tests/src/Functional/DemoUmamiProfileTest.php
index be483fd9c03a..89f6a6a20ead 100644
--- a/core/profiles/demo_umami/tests/src/Functional/DemoUmamiProfileTest.php
+++ b/core/profiles/demo_umami/tests/src/Functional/DemoUmamiProfileTest.php
@@ -67,7 +67,7 @@ public function testConfig() {
    * @param \Drupal\Core\Config\StorageInterface $active_config_storage
    *   The active configuration storage.
    */
-  protected function assertDefaultConfig(StorageInterface $default_config_storage, StorageInterface $active_config_storage) {
+  protected function assertDefaultConfig(StorageInterface $default_config_storage, StorageInterface $active_config_storage): void {
     /** @var \Drupal\Core\Config\ConfigManagerInterface $config_manager */
     $config_manager = $this->container->get('config.manager');
 
diff --git a/core/profiles/standard/tests/src/FunctionalJavascript/StandardJavascriptTest.php b/core/profiles/standard/tests/src/FunctionalJavascript/StandardJavascriptTest.php
index 7a9370a90dcc..cec79deacf50 100644
--- a/core/profiles/standard/tests/src/FunctionalJavascript/StandardJavascriptTest.php
+++ b/core/profiles/standard/tests/src/FunctionalJavascript/StandardJavascriptTest.php
@@ -50,7 +50,7 @@ public function testBigPipe() {
    * @param int $expected_count
    *   The expected number of BigPipe placeholders.
    */
-  protected function assertBigPipePlaceholderReplacementCount($expected_count) {
+  protected function assertBigPipePlaceholderReplacementCount($expected_count): void {
     $web_assert = $this->assertSession();
     $web_assert->waitForElement('css', 'script[data-big-pipe-event="stop"]');
     $page = $this->getSession()->getPage();
diff --git a/core/tests/Drupal/BuildTests/Composer/Template/ComposerProjectTemplatesTest.php b/core/tests/Drupal/BuildTests/Composer/Template/ComposerProjectTemplatesTest.php
index 04c5ff9bc007..a80a9482bb8d 100644
--- a/core/tests/Drupal/BuildTests/Composer/Template/ComposerProjectTemplatesTest.php
+++ b/core/tests/Drupal/BuildTests/Composer/Template/ComposerProjectTemplatesTest.php
@@ -259,8 +259,10 @@ public function testTemplateCreateProject($project, $package_dir, $docroot_dir)
    *   The expected version.
    * @param string $dir
    *   The path to the site root.
+   *
+   * @internal
    */
-  protected function assertDrupalVersion($expectedVersion, $dir) {
+  protected function assertDrupalVersion(string $expectedVersion, string $dir): void {
     $drupal_php_path = $dir . '/core/lib/Drupal.php';
     $this->assertFileExists($drupal_php_path);
 
diff --git a/core/tests/Drupal/FunctionalJavascriptTests/Ajax/AjaxTest.php b/core/tests/Drupal/FunctionalJavascriptTests/Ajax/AjaxTest.php
index efeb61676905..87ec2d210874 100644
--- a/core/tests/Drupal/FunctionalJavascriptTests/Ajax/AjaxTest.php
+++ b/core/tests/Drupal/FunctionalJavascriptTests/Ajax/AjaxTest.php
@@ -162,8 +162,10 @@ public function testInsertAjaxResponse() {
    *   Expected result.
    * @param string $script
    *   Script for additional theming.
+   *
+   * @internal
    */
-  public function assertInsert($render_type, $expected, $script = '') {
+  public function assertInsert(string $render_type, string $expected, string $script = ''): void {
     // Check insert to block element.
     $this->drupalGet('ajax-test/insert-block-wrapper');
     $this->getSession()->executeScript($script);
@@ -192,8 +194,10 @@ public function assertInsert($render_type, $expected, $script = '') {
    *
    * @param string $expected
    *   A needle text.
+   *
+   * @internal
    */
-  protected function assertWaitPageContains($expected) {
+  protected function assertWaitPageContains(string $expected): void {
     $page = $this->getSession()->getPage();
     $this->assertTrue($page->waitFor(10, function () use ($page, $expected) {
       // Clear content from empty styles and "processed" classes after effect.
diff --git a/core/tests/Drupal/FunctionalJavascriptTests/Ajax/CommandsTest.php b/core/tests/Drupal/FunctionalJavascriptTests/Ajax/CommandsTest.php
index 11e318551755..5f4b48bf8bd7 100644
--- a/core/tests/Drupal/FunctionalJavascriptTests/Ajax/CommandsTest.php
+++ b/core/tests/Drupal/FunctionalJavascriptTests/Ajax/CommandsTest.php
@@ -145,8 +145,10 @@ public function testAjaxCommands() {
    *
    * @param string $text
    *   A needle text.
+   *
+   * @internal
    */
-  protected function assertWaitPageContains($text) {
+  protected function assertWaitPageContains(string $text): void {
     $page = $this->getSession()->getPage();
     $page->waitFor(10, function () use ($page, $text) {
       return stripos($page->getContent(), $text) !== FALSE;
diff --git a/core/tests/Drupal/FunctionalJavascriptTests/Ajax/MessageCommandTest.php b/core/tests/Drupal/FunctionalJavascriptTests/Ajax/MessageCommandTest.php
index a0c1d57cbb8b..03c6b3af15b6 100644
--- a/core/tests/Drupal/FunctionalJavascriptTests/Ajax/MessageCommandTest.php
+++ b/core/tests/Drupal/FunctionalJavascriptTests/Ajax/MessageCommandTest.php
@@ -109,8 +109,10 @@ protected function waitForMessageRemoved($message, $selector = '[data-drupal-mes
    *
    * @param string $expected_message
    *   The text expected to be present in #drupal-live-announce.
+   *
+   * @internal
    */
-  protected function assertAnnounceContains($expected_message) {
+  protected function assertAnnounceContains(string $expected_message): void {
     $assert_session = $this->assertSession();
     $this->assertNotEmpty($assert_session->waitForElement('css', "#drupal-live-announce:contains('$expected_message')"));
   }
@@ -120,8 +122,10 @@ protected function assertAnnounceContains($expected_message) {
    *
    * @param string $expected_message
    *   The text expected to be absent from #drupal-live-announce.
+   *
+   * @internal
    */
-  protected function assertAnnounceNotContains($expected_message) {
+  protected function assertAnnounceNotContains(string $expected_message): void {
     $assert_session = $this->assertSession();
     $this->assertEmpty($assert_session->waitForElement('css', "#drupal-live-announce:contains('$expected_message')", 1000));
   }
diff --git a/core/tests/Drupal/FunctionalJavascriptTests/Core/JsMessageTest.php b/core/tests/Drupal/FunctionalJavascriptTests/Core/JsMessageTest.php
index e52149b74f9a..951330cbd48f 100644
--- a/core/tests/Drupal/FunctionalJavascriptTests/Core/JsMessageTest.php
+++ b/core/tests/Drupal/FunctionalJavascriptTests/Core/JsMessageTest.php
@@ -108,8 +108,10 @@ public function testAddRemoveMessages() {
    *   Expected messages.
    * @param string $messagesSelector
    *   The css selector for the containing messages element.
+   *
+   * @internal
    */
-  protected function assertCurrentMessages(array $expected_messages, $messagesSelector) {
+  protected function assertCurrentMessages(array $expected_messages, string $messagesSelector): void {
     $expected_messages = array_values($expected_messages);
     $current_messages = [];
     if ($message_divs = $this->getSession()->getPage()->findAll('css', "$messagesSelector .messages")) {
diff --git a/core/tests/Drupal/FunctionalJavascriptTests/TableDrag/TableDragTest.php b/core/tests/Drupal/FunctionalJavascriptTests/TableDrag/TableDragTest.php
index cf36dc19299f..4003ecf9e69e 100644
--- a/core/tests/Drupal/FunctionalJavascriptTests/TableDrag/TableDragTest.php
+++ b/core/tests/Drupal/FunctionalJavascriptTests/TableDrag/TableDragTest.php
@@ -156,8 +156,10 @@ public function testKeyboardAccessibility() {
    * @param array|null $structure
    *   The expected table structure. If this isn't specified or equals NULL,
    *   then the expected structure will be set by this method. Defaults to NULL.
+   *
+   * @internal
    */
-  protected function assertKeyboardAccessibility($drupal_path = 'tabledrag_test', $structure = NULL) {
+  protected function assertKeyboardAccessibility(string $drupal_path = 'tabledrag_test', ?array $structure = NULL): void {
     $expected_table = $structure ?: [
       ['id' => 1, 'weight' => 0, 'parent' => '', 'indentation' => 0, 'changed' => FALSE],
       ['id' => 2, 'weight' => 0, 'parent' => '', 'indentation' => 0, 'changed' => FALSE],
@@ -321,8 +323,10 @@ public function testTableDragChangedWarning() {
    *   When any of the given string is not found.
    *
    * @todo Remove this and use the WebAssert method when #2817657 is done.
+   *
+   * @internal
    */
-  protected function assertOrder(array $items) {
+  protected function assertOrder(array $items): void {
     $session = $this->getSession();
     $text = $session->getPage()->getHtml();
     $strings = [];
@@ -484,8 +488,10 @@ public function testNestedDraggableTables() {
    * @param bool $skip_missing
    *   Whether assertions done on missing elements value may be skipped or not.
    *   Defaults to FALSE.
+   *
+   * @internal
    */
-  protected function assertDraggableTable(array $structure, $table_id = 'tabledrag-test-table', $skip_missing = FALSE) {
+  protected function assertDraggableTable(array $structure, string $table_id = 'tabledrag-test-table', bool $skip_missing = FALSE): void {
     $rows = $this->getSession()->getPage()->findAll('xpath', "//table[@id='$table_id']/tbody/tr");
     $this->assertSession()->elementsCount('xpath', "//table[@id='$table_id']/tbody/tr", count($structure));
 
@@ -513,8 +519,10 @@ protected function assertDraggableTable(array $structure, $table_id = 'tabledrag
    * @param bool $skip_missing
    *   Whether assertions done on missing elements value may be skipped or not.
    *   Defaults to FALSE.
+   *
+   * @internal
    */
-  protected function assertTableRow(NodeElement $row, $id, $weight, $parent = '', $indentation = 0, $changed = FALSE, $skip_missing = FALSE) {
+  protected function assertTableRow(NodeElement $row, string $id, int $weight, string $parent = '', int $indentation = 0, ?bool $changed = FALSE, bool $skip_missing = FALSE): void {
     // Assert that the row position is correct by checking that the id
     // corresponds.
     $id_name = "table[$id][id]";
diff --git a/core/tests/Drupal/FunctionalTests/Bootstrap/UncaughtExceptionTest.php b/core/tests/Drupal/FunctionalTests/Bootstrap/UncaughtExceptionTest.php
index 21b02065b22b..06dde6ce8d09 100644
--- a/core/tests/Drupal/FunctionalTests/Bootstrap/UncaughtExceptionTest.php
+++ b/core/tests/Drupal/FunctionalTests/Bootstrap/UncaughtExceptionTest.php
@@ -282,8 +282,10 @@ public function testLoggerException() {
    *
    * @see \Drupal\simpletest\TestBase::prepareEnvironment()
    * @see \Drupal\Core\DrupalKernel::bootConfiguration()
+   *
+   * @internal
    */
-  protected function assertErrorLogged($error_message) {
+  protected function assertErrorLogged(string $error_message): void {
     $error_log_filename = DRUPAL_ROOT . '/' . $this->siteDirectory . '/error.log';
     $this->assertFileExists($error_log_filename);
 
@@ -310,8 +312,10 @@ protected function assertErrorLogged($error_message) {
    *
    * @see \Drupal\simpletest\TestBase::prepareEnvironment()
    * @see \Drupal\Core\DrupalKernel::bootConfiguration()
+   *
+   * @internal
    */
-  protected function assertNoErrorsLogged() {
+  protected function assertNoErrorsLogged(): void {
     // Since PHP only creates the error.log file when an actual error is
     // triggered, it is sufficient to check whether the file exists.
     $this->assertFileDoesNotExist(DRUPAL_ROOT . '/' . $this->siteDirectory . '/error.log');
diff --git a/core/tests/Drupal/KernelTests/Config/DefaultConfigTest.php b/core/tests/Drupal/KernelTests/Config/DefaultConfigTest.php
index d79ea5b0e0be..0de9040330c0 100644
--- a/core/tests/Drupal/KernelTests/Config/DefaultConfigTest.php
+++ b/core/tests/Drupal/KernelTests/Config/DefaultConfigTest.php
@@ -71,8 +71,10 @@ public function testThemeConfig($theme) {
    *   Extension name.
    * @param string $type
    *   Extension type, either 'module' or 'theme'.
+   *
+   * @internal
    */
-  protected function assertExtensionConfig(string $name, string $type) {
+  protected function assertExtensionConfig(string $name, string $type): void {
     // System and user are required in order to be able to install some of the
     // other modules. Therefore they are put into static::$modules, which though
     // doesn't install config files, so import those config files explicitly. Do
diff --git a/core/tests/Drupal/KernelTests/Core/Ajax/CommandsTest.php b/core/tests/Drupal/KernelTests/Core/Ajax/CommandsTest.php
index faf8cadb6fc4..487f3c6cd47b 100644
--- a/core/tests/Drupal/KernelTests/Core/Ajax/CommandsTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Ajax/CommandsTest.php
@@ -88,14 +88,16 @@ public function testEmptyInsertCommand() {
    * the actual command contains additional settings that aren't part of
    * $needle.
    *
-   * @param $haystack
+   * @param array $haystack
    *   An array of rendered Ajax commands returned by the server.
-   * @param $needle
+   * @param array $needle
    *   Array of info we're expecting in one of those commands.
-   * @param $message
+   * @param string $message
    *   An assertion message.
+   *
+   * @internal
    */
-  protected function assertCommand($haystack, $needle, $message) {
+  protected function assertCommand(array $haystack, array $needle, string $message): void {
     $found = FALSE;
     foreach ($haystack as $command) {
       // If the command has additional settings that we're not testing for, do
diff --git a/core/tests/Drupal/KernelTests/Core/Asset/LibraryDiscoveryIntegrationTest.php b/core/tests/Drupal/KernelTests/Core/Asset/LibraryDiscoveryIntegrationTest.php
index fd58a786a415..82d9d3c670ba 100644
--- a/core/tests/Drupal/KernelTests/Core/Asset/LibraryDiscoveryIntegrationTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Asset/LibraryDiscoveryIntegrationTest.php
@@ -262,25 +262,24 @@ protected function activateTheme($theme_name) {
    *   The extension in which the $library is defined.
    * @param string $library_name
    *   Name of the library.
-   * @param mixed $sub_key
+   * @param string $sub_key
    *   The library sub key where the given asset is defined.
    * @param string $message
    *   (optional) A message to display with the assertion.
    *
-   * @return bool
-   *   TRUE if the specified asset is found in the library.
+   * @internal
    */
-  protected function assertAssetInLibrary($asset, $extension, $library_name, $sub_key, $message = NULL) {
+  protected function assertAssetInLibrary(string $asset, string $extension, string $library_name, string $sub_key, string $message = NULL): void {
     if (!isset($message)) {
       $message = sprintf('Asset %s found in library "%s/%s"', $asset, $extension, $library_name);
     }
     $library = $this->libraryDiscovery->getLibraryByName($extension, $library_name);
     foreach ($library[$sub_key] as $definition) {
       if ($asset == $definition['data']) {
-        return TRUE;
+        return;
       }
     }
-    return $this->fail($message);
+    $this->fail($message);
   }
 
   /**
@@ -292,25 +291,23 @@ protected function assertAssetInLibrary($asset, $extension, $library_name, $sub_
    *   The extension in which the $library_name is defined.
    * @param string $library_name
    *   Name of the library.
-   * @param mixed $sub_key
+   * @param string $sub_key
    *   The library sub key where the given asset is defined.
    * @param string $message
    *   (optional) A message to display with the assertion.
    *
-   * @return bool
-   *   TRUE if the specified asset is not found in the library.
+   * @internal
    */
-  protected function assertNoAssetInLibrary($asset, $extension, $library_name, $sub_key, $message = NULL) {
+  protected function assertNoAssetInLibrary(string $asset, string $extension, string $library_name, string $sub_key, string $message = NULL): void {
     if (!isset($message)) {
       $message = sprintf('Asset %s not found in library "%s/%s"', $asset, $extension, $library_name);
     }
     $library = $this->libraryDiscovery->getLibraryByName($extension, $library_name);
     foreach ($library[$sub_key] as $definition) {
       if ($asset == $definition['data']) {
-        return $this->fail($message);
+        $this->fail($message);
       }
     }
-    return TRUE;
   }
 
 }
diff --git a/core/tests/Drupal/KernelTests/Core/Config/ConfigDiffTest.php b/core/tests/Drupal/KernelTests/Core/Config/ConfigDiffTest.php
index 06fda37ec7a9..120cf77de8a6 100644
--- a/core/tests/Drupal/KernelTests/Core/Config/ConfigDiffTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Config/ConfigDiffTest.php
@@ -151,8 +151,10 @@ public function testCollectionDiff() {
    * @param mixed $closing
    *   (optional) The closing value of the edit. If not supplied, assertion
    *   is skipped.
+   *
+   * @internal
    */
-  protected function assertYamlEdit(array $edits, $field, $type, $orig = NULL, $closing = NULL) {
+  protected function assertYamlEdit(array $edits, string $field, string $type, $orig = NULL, $closing = NULL): void {
     $match = FALSE;
     foreach ($edits as $edit) {
       // Choose which section to search for the field.
diff --git a/core/tests/Drupal/KernelTests/Core/Database/ConnectionUnitTest.php b/core/tests/Drupal/KernelTests/Core/Database/ConnectionUnitTest.php
index 67a81adbfbea..9b88592c73a1 100644
--- a/core/tests/Drupal/KernelTests/Core/Database/ConnectionUnitTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Database/ConnectionUnitTest.php
@@ -95,8 +95,10 @@ protected function getConnectionId() {
    *
    * @param int $id
    *   The connection ID to verify.
+   *
+   * @internal
    */
-  protected function assertConnection($id) {
+  protected function assertConnection(int $id): void {
     $list = $this->monitor->query($this->getQuery()['processlist'])->fetchAllKeyed(0, 0);
     $this->assertTrue(isset($list[$id]), new FormattableMarkup('Connection ID @id found.', ['@id' => $id]));
   }
@@ -106,8 +108,10 @@ protected function assertConnection($id) {
    *
    * @param int $id
    *   The connection ID to verify.
+   *
+   * @internal
    */
-  protected function assertNoConnection($id) {
+  protected function assertNoConnection(int $id): void {
     $list = $this->monitor->query($this->getQuery()['processlist'])->fetchAllKeyed(0, 0);
     $this->assertFalse(isset($list[$id]), new FormattableMarkup('Connection ID @id not found.', ['@id' => $id]));
   }
diff --git a/core/tests/Drupal/KernelTests/Core/Database/SchemaTest.php b/core/tests/Drupal/KernelTests/Core/Database/SchemaTest.php
index 039e916a33ab..bf73ba4609c8 100644
--- a/core/tests/Drupal/KernelTests/Core/Database/SchemaTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Database/SchemaTest.php
@@ -672,10 +672,12 @@ public function testSchemaAddFieldDefaultInitial() {
    * The addition test covers both defining a field of a given specification
    * when initially creating at table and extending an existing table.
    *
-   * @param $field_spec
+   * @param array $field_spec
    *   The schema specification of the field.
+   *
+   * @internal
    */
-  protected function assertFieldAdditionRemoval($field_spec) {
+  protected function assertFieldAdditionRemoval(array $field_spec): void {
     // Try creating the field on a new table.
     $table_name = 'test_table_' . ($this->counter++);
     $table_spec = [
@@ -737,8 +739,10 @@ protected function assertFieldAdditionRemoval($field_spec) {
 
   /**
    * Asserts that a newly added field has the correct characteristics.
+   *
+   * @internal
    */
-  protected function assertFieldCharacteristics($table_name, $field_name, $field_spec) {
+  protected function assertFieldCharacteristics(string $table_name, string $field_name, array $field_spec): void {
     // Check that the initial value has been registered.
     if (isset($field_spec['initial'])) {
       // There should be no row with a value different then $field_spec['initial'].
@@ -1007,14 +1011,16 @@ public function testSchemaChangeFieldDefaultInitial() {
   /**
    * Asserts that a field can be changed from one spec to another.
    *
-   * @param $old_spec
+   * @param array $old_spec
    *   The beginning field specification.
-   * @param $new_spec
+   * @param array $new_spec
    *   The ending field specification.
-   * @param $test_data
+   * @param mixed $test_data
    *   (optional) A test value to insert and test, if specified.
+   *
+   * @internal
    */
-  protected function assertFieldChange($old_spec, $new_spec, $test_data = NULL) {
+  protected function assertFieldChange(array $old_spec, array $new_spec, $test_data = NULL): void {
     $table_name = 'test_table_' . ($this->counter++);
     $table_spec = [
       'fields' => [
diff --git a/core/tests/Drupal/KernelTests/Core/Database/TransactionTest.php b/core/tests/Drupal/KernelTests/Core/Database/TransactionTest.php
index d55fe82cbdb1..e76618152a62 100644
--- a/core/tests/Drupal/KernelTests/Core/Database/TransactionTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Database/TransactionTest.php
@@ -316,12 +316,14 @@ protected function cleanUp() {
   /**
    * Asserts that a given row is present in the test table.
    *
-   * @param $name
+   * @param string $name
    *   The name of the row.
-   * @param $message
+   * @param string $message
    *   The message to log for the assertion.
+   *
+   * @internal
    */
-  public function assertRowPresent($name, $message = NULL) {
+  public function assertRowPresent(string $name, string $message = NULL): void {
     if (!isset($message)) {
       $message = new FormattableMarkup('Row %name is present.', ['%name' => $name]);
     }
@@ -332,12 +334,14 @@ public function assertRowPresent($name, $message = NULL) {
   /**
    * Asserts that a given row is absent from the test table.
    *
-   * @param $name
+   * @param string $name
    *   The name of the row.
-   * @param $message
+   * @param string $message
    *   The message to log for the assertion.
+   *
+   * @internal
    */
-  public function assertRowAbsent($name, $message = NULL) {
+  public function assertRowAbsent(string $name, string $message = NULL): void {
     if (!isset($message)) {
       $message = new FormattableMarkup('Row %name is absent.', ['%name' => $name]);
     }
diff --git a/core/tests/Drupal/KernelTests/Core/Datetime/Element/TimezoneTest.php b/core/tests/Drupal/KernelTests/Core/Datetime/Element/TimezoneTest.php
index 0e790af4c866..161f3b3edef3 100644
--- a/core/tests/Drupal/KernelTests/Core/Datetime/Element/TimezoneTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Datetime/Element/TimezoneTest.php
@@ -252,8 +252,10 @@ public function testDatelistTimezonePropertyProcessed() {
    *   The names of the default input elements used by this element type.
    *
    * @throws \Exception
+   *
+   * @internal
    */
-  protected function assertTimesUnderstoodCorrectly($elementType, array $inputs) {
+  protected function assertTimesUnderstoodCorrectly(string $elementType, array $inputs): void {
     $this->elementType = $elementType;
 
     // Simulate the form being saved, with the user adding the date for any
@@ -326,8 +328,10 @@ protected function assertTimesUnderstoodCorrectly($elementType, array $inputs) {
    *   The element type to test.
    *
    * @throws \Exception
+   *
+   * @internal
    */
-  public function assertDateTimezonePropertyProcessed($elementType) {
+  public function assertDateTimezonePropertyProcessed(string $elementType): void {
     $this->elementType = $elementType;
     // Simulate form being loaded and default values displayed to user.
     $form_state = new FormState();
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/BundleConstraintValidatorTest.php b/core/tests/Drupal/KernelTests/Core/Entity/BundleConstraintValidatorTest.php
index 3d755a55c160..bee4cd224e07 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/BundleConstraintValidatorTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/BundleConstraintValidatorTest.php
@@ -42,8 +42,10 @@ public function testValidation() {
    *
    * @param string|array $bundle
    *   Bundle/bundles to use as constraint option.
+   *
+   * @internal
    */
-  protected function assertValidation($bundle) {
+  protected function assertValidation($bundle): void {
     // Create a typed data definition with a Bundle constraint.
     $definition = DataDefinition::create('entity_reference')
       ->addConstraint('Bundle', $bundle);
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/ConfigEntityQueryTest.php b/core/tests/Drupal/KernelTests/Core/Entity/ConfigEntityQueryTest.php
index 667bae835334..c40a4bebdeb9 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/ConfigEntityQueryTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/ConfigEntityQueryTest.php
@@ -726,8 +726,10 @@ public function testLookupKeys() {
    *
    * @param array $expected
    *   Array of expected entity IDs.
+   *
+   * @internal
    */
-  protected function assertResults($expected) {
+  protected function assertResults(array $expected): void {
     $expected_count = count($expected);
     $this->assertCount($expected_count, $this->queryResults);
     foreach ($expected as $value) {
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityAccessControlHandlerTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityAccessControlHandlerTest.php
index 269dc77eb56d..daa74a9aacca 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/EntityAccessControlHandlerTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityAccessControlHandlerTest.php
@@ -38,8 +38,10 @@ public function setUp(): void {
 
   /**
    * Asserts entity access correctly grants or denies access.
+   *
+   * @internal
    */
-  public function assertEntityAccess($ops, AccessibleInterface $object, AccountInterface $account = NULL) {
+  public function assertEntityAccess(array $ops, AccessibleInterface $object, AccountInterface $account = NULL): void {
     foreach ($ops as $op => $result) {
       $message = new FormattableMarkup("Entity access returns @result with operation '@op'.", [
         '@result' => !isset($result) ? 'null' : ($result ? 'true' : 'false'),
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityApiTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityApiTest.php
index 268cedd70575..ccc1f537affe 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/EntityApiTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityApiTest.php
@@ -46,8 +46,10 @@ public function testCRUD() {
    *   The entity type to run the tests with.
    * @param \Drupal\user\UserInterface $user1
    *   The user to run the tests with.
+   *
+   * @internal
    */
-  protected function assertCRUD($entity_type, UserInterface $user1) {
+  protected function assertCRUD(string $entity_type, UserInterface $user1): void {
     // Create some test entities.
     $entity = $this->container->get('entity_type.manager')
       ->getStorage($entity_type)
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityCrudHookTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityCrudHookTest.php
index 6f0ac63ac6b4..a77b0eb5fd92 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/EntityCrudHookTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityCrudHookTest.php
@@ -68,10 +68,12 @@ protected function setUp(): void {
    * Module entity_crud_hook_test implements all core entity CRUD hooks and
    * stores a message for each in $GLOBALS['entity_crud_hook_test'].
    *
-   * @param $messages
+   * @param array $messages
    *   An array of plain-text messages in the order they should appear.
+   *
+   * @internal
    */
-  protected function assertHookMessageOrder($messages) {
+  protected function assertHookMessageOrder(array $messages): void {
     $positions = [];
     foreach ($messages as $message) {
       // Verify that each message is found and record its position.
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityFieldDefaultValueTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityFieldDefaultValueTest.php
index c5e27218c2ab..93d07c4d23ab 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/EntityFieldDefaultValueTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityFieldDefaultValueTest.php
@@ -40,8 +40,10 @@ public function testDefaultValues() {
    *
    * @param string $entity_type_id
    *   The entity type to run the tests with.
+   *
+   * @internal
    */
-  protected function assertDefaultValues($entity_type_id) {
+  protected function assertDefaultValues(string $entity_type_id): void {
     $entity = $this->container->get('entity_type.manager')
       ->getStorage($entity_type_id)
       ->create();
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityQueryAggregateTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityQueryAggregateTest.php
index 9a50a78fe6aa..275d9274a6a7 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/EntityQueryAggregateTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityQueryAggregateTest.php
@@ -626,8 +626,10 @@ public function testRepeatedExecution() {
    * @param bool $sorted
    *   (optiOnal) Whether the array keys of the expected are sorted, defaults to
    *   FALSE.
+   *
+   * @internal
    */
-  protected function assertResults($expected, $sorted = FALSE) {
+  protected function assertResults(array $expected, bool $sorted = FALSE): void {
     $found = TRUE;
     $expected_keys = array_keys($expected);
     foreach ($this->queryResult as $key => $row) {
@@ -649,9 +651,11 @@ protected function assertResults($expected, $sorted = FALSE) {
    *
    * @param array $expected
    *   An array of the expected results.
+   *
+   * @internal
    */
-  protected function assertSortedResults($expected) {
-    return $this->assertResults($expected, TRUE);
+  protected function assertSortedResults(array $expected): void {
+    $this->assertResults($expected, TRUE);
   }
 
 }
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityQueryRelationshipTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityQueryRelationshipTest.php
index 54c4484c6ca0..b0983c757764 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/EntityQueryRelationshipTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityQueryRelationshipTest.php
@@ -224,8 +224,10 @@ public function testInvalidSpecifier() {
    *
    * @param array $expected
    *   A list of indexes in the $this->entities array.
+   *
+   * @internal
    */
-  protected function assertResults($expected) {
+  protected function assertResults(array $expected): void {
     $expected_count = count($expected);
     $this->assertCount($expected_count, $this->queryResults);
     foreach ($expected as $key) {
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityQueryTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityQueryTest.php
index 176413cf6988..bf35a517f3cb 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/EntityQueryTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityQueryTest.php
@@ -720,7 +720,10 @@ public function testDelta() {
 
   }
 
-  protected function assertResult() {
+  /**
+   * @internal
+   */
+  protected function assertResult(): void {
     $assert = [];
     $expected = func_get_args();
     if ($expected && is_array($expected[0])) {
@@ -732,16 +735,21 @@ protected function assertResult() {
     $this->assertSame($assert, $this->queryResults);
   }
 
-  protected function assertRevisionResult($keys, $expected) {
+  /**
+   * @internal
+   */
+  protected function assertRevisionResult(array $keys, array $expected): void {
     $assert = [];
     foreach ($expected as $key => $binary) {
       $assert[$keys[$key]] = strval($binary);
     }
     $this->assertSame($assert, $this->queryResults);
-    return $assert;
   }
 
-  protected function assertBundleOrder($order) {
+  /**
+   * @internal
+   */
+  protected function assertBundleOrder(string $order): void {
     // This loop is for bundle1 entities.
     for ($i = 1; $i <= 15; $i += 2) {
       $ok = TRUE;
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityReferenceFieldTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityReferenceFieldTest.php
index 9258c4acf70e..c3005afd879d 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/EntityReferenceFieldTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityReferenceFieldTest.php
@@ -331,10 +331,12 @@ public function testAutocreateApi() {
    *
    * @param \Drupal\Core\Entity\EntityInterface $entity
    *   The referencing entity.
-   * @param $setter_callback
+   * @param callable $setter_callback
    *   A callback setting the target entity on the referencing entity.
+   *
+   * @internal
    */
-  protected function assertUserAutocreate(EntityInterface $entity, $setter_callback) {
+  protected function assertUserAutocreate(EntityInterface $entity, callable $setter_callback): void {
     $storage = $this->entityTypeManager->getStorage('user');
     $user_id = $this->generateRandomEntityId();
     $user = $storage->create(['uid' => $user_id, 'name' => $this->randomString()]);
@@ -350,10 +352,12 @@ protected function assertUserAutocreate(EntityInterface $entity, $setter_callbac
    *
    * @param \Drupal\Core\Entity\EntityInterface $entity
    *   The referencing entity.
-   * @param $setter_callback
+   * @param callable $setter_callback
    *   A callback setting the target entity on the referencing entity.
+   *
+   * @internal
    */
-  protected function assertUserRoleAutocreate(EntityInterface $entity, $setter_callback) {
+  protected function assertUserRoleAutocreate(EntityInterface $entity, callable $setter_callback): void {
     $storage = $this->entityTypeManager->getStorage('user_role');
     $role_id = $this->generateRandomEntityId(TRUE);
     $role = $storage->create(['id' => $role_id, 'label' => $this->randomString()]);
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityRepositoryTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityRepositoryTest.php
index 5bebe5d370c0..bd36cad7b0c3 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/EntityRepositoryTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityRepositoryTest.php
@@ -300,8 +300,10 @@ protected function doTestLanguageFallback($method_name) {
    *   An entity object or NULL.
    * @param string $expected_entity_type_id
    *   The expected entity type ID.
+   *
+   * @internal
    */
-  protected function assertEntityType($entity, $expected_entity_type_id) {
+  protected function assertEntityType(?object $entity, string $expected_entity_type_id): void {
     $this->assertInstanceOf(EntityTest::class, $entity);
     $this->assertEquals($expected_entity_type_id, $entity->getEntityTypeId());
   }
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityUUIDTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityUUIDTest.php
index f9b7b328aa37..86f116702b39 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/EntityUUIDTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityUUIDTest.php
@@ -35,8 +35,10 @@ public function testCRUD() {
    *
    * @param string $entity_type
    *   The entity type to run the tests with.
+   *
+   * @internal
    */
-  protected function assertCRUD($entity_type) {
+  protected function assertCRUD(string $entity_type): void {
     // Verify that no UUID is auto-generated when passing one for creation.
     $uuid_service = $this->container->get('uuid');
     $uuid = $uuid_service->generate();
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/FieldTranslationSqlStorageTest.php b/core/tests/Drupal/KernelTests/Core/Entity/FieldTranslationSqlStorageTest.php
index 3559c03a8941..0cfff0994fac 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/FieldTranslationSqlStorageTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/FieldTranslationSqlStorageTest.php
@@ -70,8 +70,10 @@ public function testFieldSqlStorage() {
    *   The entity fields are attached to.
    * @param string $message
    *   (optional) A message to display with the assertion.
+   *
+   * @internal
    */
-  protected function assertFieldStorageLangcode(FieldableEntityInterface $entity, $message = '') {
+  protected function assertFieldStorageLangcode(FieldableEntityInterface $entity, string $message = ''): void {
     $status = TRUE;
     $entity_type = $entity->getEntityTypeId();
     $id = $entity->id();
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/FieldableEntityDefinitionUpdateTest.php b/core/tests/Drupal/KernelTests/Core/Entity/FieldableEntityDefinitionUpdateTest.php
index 7cb95a4afd83..ffeea5316653 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/FieldableEntityDefinitionUpdateTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/FieldableEntityDefinitionUpdateTest.php
@@ -381,8 +381,10 @@ protected function insertData($revisionable, $translatable) {
    *   Whether the entity type was revisionable prior to the update.
    * @param bool $translatable
    *   Whether the entity type was translatable prior to the update.
+   *
+   * @internal
    */
-  protected function assertEntityData($revisionable, $translatable) {
+  protected function assertEntityData(bool $revisionable, bool $translatable): void {
     $entities = $this->entityTypeManager->getStorage($this->entityTypeId)->loadMultiple();
     $this->assertCount(3, $entities);
     foreach ($entities as $entity_id => $entity) {
@@ -456,8 +458,10 @@ protected function assertEntityData($revisionable, $translatable) {
    * @param bool $new_base_field
    *   (optional) Whether a new base field was added as part of the update.
    *   Defaults to FALSE.
+   *
+   * @internal
    */
-  protected function assertEntityTypeSchema($revisionable, $translatable, $new_base_field = FALSE) {
+  protected function assertEntityTypeSchema(bool $revisionable, bool $translatable, bool $new_base_field = FALSE): void {
     // Check whether the 'new_base_field' field has been installed correctly.
     $field_storage_definition = $this->entityDefinitionUpdateManager->getFieldStorageDefinition('new_base_field', $this->entityTypeId);
     if ($new_base_field) {
@@ -485,8 +489,10 @@ protected function assertEntityTypeSchema($revisionable, $translatable, $new_bas
 
   /**
    * Asserts the revisionable characteristics of an entity type.
+   *
+   * @internal
    */
-  protected function assertRevisionable() {
+  protected function assertRevisionable(): void {
     /** @var \Drupal\Core\Entity\ContentEntityTypeInterface $entity_type */
     $entity_type = $this->entityDefinitionUpdateManager->getEntityType($this->entityTypeId);
     $this->assertTrue($entity_type->isRevisionable());
@@ -524,8 +530,10 @@ protected function assertRevisionable() {
 
   /**
    * Asserts the translatable characteristics of an entity type.
+   *
+   * @internal
    */
-  protected function assertTranslatable() {
+  protected function assertTranslatable(): void {
     /** @var \Drupal\Core\Entity\ContentEntityTypeInterface $entity_type */
     $entity_type = $this->entityDefinitionUpdateManager->getEntityType($this->entityTypeId);
     $this->assertTrue($entity_type->isTranslatable());
@@ -553,8 +561,10 @@ protected function assertTranslatable() {
 
   /**
    * Asserts the revisionable / translatable characteristics of an entity type.
+   *
+   * @internal
    */
-  protected function assertRevisionableAndTranslatable() {
+  protected function assertRevisionableAndTranslatable(): void {
     $this->assertRevisionable();
     $this->assertTranslatable();
 
@@ -599,8 +609,10 @@ protected function assertRevisionableAndTranslatable() {
 
   /**
    * Asserts that an entity type is neither revisionable nor translatable.
+   *
+   * @internal
    */
-  protected function assertNonRevisionableAndNonTranslatable() {
+  protected function assertNonRevisionableAndNonTranslatable(): void {
     /** @var \Drupal\Core\Entity\ContentEntityTypeInterface $entity_type */
     $entity_type = $this->entityDefinitionUpdateManager->getEntityType($this->entityTypeId);
     $this->assertFalse($entity_type->isRevisionable());
@@ -618,8 +630,10 @@ protected function assertNonRevisionableAndNonTranslatable() {
    *
    * @param bool $revisionable
    *   Whether the entity type is revisionable or not.
+   *
+   * @internal
    */
-  protected function assertBundleFieldSchema($revisionable) {
+  protected function assertBundleFieldSchema(bool $revisionable): void {
     $entity_type_id = 'entity_test_update';
     $field_storage_definition = $this->entityFieldManager->getFieldStorageDefinitions($entity_type_id)['new_bundle_field'];
     $database_schema = $this->database->schema();
@@ -635,8 +649,10 @@ protected function assertBundleFieldSchema($revisionable) {
 
   /**
    * Asserts that the backup tables have been kept after a successful update.
+   *
+   * @internal
    */
-  protected function assertBackupTables() {
+  protected function assertBackupTables(): void {
     $backups = \Drupal::keyValue('entity.update_backup')->getAll();
     $backup = reset($backups);
 
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/RevisionableContentEntityBaseTest.php b/core/tests/Drupal/KernelTests/Core/Entity/RevisionableContentEntityBaseTest.php
index bc38a47d66eb..15d56e68d604 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/RevisionableContentEntityBaseTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/RevisionableContentEntityBaseTest.php
@@ -166,8 +166,10 @@ public function testWasDefaultRevision() {
    *   The number of items expected to be in revisions related tables.
    * @param \Drupal\Core\Entity\EntityTypeInterface $definition
    *   The definition and metadata of the entity being tested.
+   *
+   * @internal
    */
-  protected function assertItemsTableCount($count, EntityTypeInterface $definition) {
+  protected function assertItemsTableCount(int $count, EntityTypeInterface $definition): void {
     $connection = Database::getConnection();
     $this->assertEquals(1, (int) $connection->select($definition->getBaseTable())->countQuery()->execute()->fetchField());
     $this->assertEquals(1, (int) $connection->select($definition->getDataTable())->countQuery()->execute()->fetchField());
diff --git a/core/tests/Drupal/KernelTests/Core/Field/FieldItemTest.php b/core/tests/Drupal/KernelTests/Core/Field/FieldItemTest.php
index 15ab322db081..36f1f9cc8397 100644
--- a/core/tests/Drupal/KernelTests/Core/Field/FieldItemTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Field/FieldItemTest.php
@@ -83,10 +83,12 @@ public function testSaveWorkflow() {
    *
    * @param \Drupal\entity_test\Entity\EntityTest $entity
    *   The test entity.
-   * @param $expected_value
+   * @param string $expected_value
    *   The expected field item value.
+   *
+   * @internal
    */
-  protected function assertSavedFieldItemValue(EntityTest $entity, $expected_value) {
+  protected function assertSavedFieldItemValue(EntityTest $entity, string $expected_value): void {
     $entity->setNewRevision(TRUE);
     $entity->save();
     $base_field_expected_value = str_replace($this->fieldName, 'field_test_item', $expected_value);
diff --git a/core/tests/Drupal/KernelTests/Core/File/HtaccessTest.php b/core/tests/Drupal/KernelTests/Core/File/HtaccessTest.php
index b9f59efbd8bc..e49ff3b4c39c 100644
--- a/core/tests/Drupal/KernelTests/Core/File/HtaccessTest.php
+++ b/core/tests/Drupal/KernelTests/Core/File/HtaccessTest.php
@@ -97,8 +97,10 @@ public function testHtaccessSave() {
    *   The URI of the file to check.
    * @param int $expected
    *   The expected file permissions; e.g., 0444.
+   *
+   * @internal
    */
-  protected function assertFilePermissions($uri, $expected) {
+  protected function assertFilePermissions(string $uri, int $expected): void {
     $actual = fileperms($uri) & 0777;
     $this->assertSame($actual, $expected, new FormattableMarkup('@uri file permissions @actual are identical to @expected.', [
       '@uri' => $uri,
diff --git a/core/tests/Drupal/KernelTests/Core/Menu/MenuTreeStorageTest.php b/core/tests/Drupal/KernelTests/Core/Menu/MenuTreeStorageTest.php
index ea400d607a61..0704cec75d24 100644
--- a/core/tests/Drupal/KernelTests/Core/Menu/MenuTreeStorageTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Menu/MenuTreeStorageTest.php
@@ -412,8 +412,10 @@ protected function moveMenuLink($id, $new_parent) {
    *   An ordered array of the IDs of the menu links that are the parents.
    * @param array $children
    *   Array of child IDs that are visible (enabled == 1).
+   *
+   * @internal
    */
-  protected function assertMenuLink($id, array $expected_properties, array $parents = [], array $children = []) {
+  protected function assertMenuLink(string $id, array $expected_properties, array $parents = [], array $children = []): void {
     $query = $this->connection->select('menu_tree');
     $query->fields('menu_tree');
     $query->condition('id', $id);
diff --git a/core/tests/Drupal/KernelTests/Core/Render/Element/RenderElementTypesTest.php b/core/tests/Drupal/KernelTests/Core/Render/Element/RenderElementTypesTest.php
index b589d0e5f699..73c8c010e7c5 100644
--- a/core/tests/Drupal/KernelTests/Core/Render/Element/RenderElementTypesTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Render/Element/RenderElementTypesTest.php
@@ -34,8 +34,10 @@ protected function setUp(): void {
    *   The expected markup.
    * @param string $message
    *   Assertion message.
+   *
+   * @internal
    */
-  protected function assertElements(array $elements, $expected_html, $message) {
+  protected function assertElements(array $elements, string $expected_html, string $message): void {
     $actual_html = (string) \Drupal::service('renderer')->renderRoot($elements);
     $this->assertSame($expected_html, $actual_html, Html::escape($message));
   }
diff --git a/core/tests/Drupal/Tests/Component/Datetime/DateTimePlusTest.php b/core/tests/Drupal/Tests/Component/Datetime/DateTimePlusTest.php
index a2c80f893497..95120187bf7d 100644
--- a/core/tests/Drupal/Tests/Component/Datetime/DateTimePlusTest.php
+++ b/core/tests/Drupal/Tests/Component/Datetime/DateTimePlusTest.php
@@ -193,8 +193,10 @@ public function testDateTimestamp($input, array $initial, array $transform) {
    *   @see testTimestamp()
    * @param array $transform
    *   @see testTimestamp()
+   *
+   * @internal
    */
-  public function assertDateTimestamp($date, $input, $initial, $transform) {
+  public function assertDateTimestamp(DateTimePlus $date, string $input, array $initial, array $transform): void {
     // Check format.
     $value = $date->format($initial['format']);
     $this->assertEquals($initial['expected_date'], $value, sprintf("Test new DateTimePlus(%s, %s): should be %s, found %s.", $input, $initial['timezone'], $initial['expected_date'], $value));
diff --git a/core/tests/Drupal/Tests/Component/DrupalComponentTest.php b/core/tests/Drupal/Tests/Component/DrupalComponentTest.php
index 9876f7985d39..74cd216fe55c 100644
--- a/core/tests/Drupal/Tests/Component/DrupalComponentTest.php
+++ b/core/tests/Drupal/Tests/Component/DrupalComponentTest.php
@@ -41,7 +41,7 @@ public function testNoCoreInComponentTests() {
    *
    * @dataProvider \Drupal\Tests\Component\DrupalComponentTest::getComponents
    */
-  public function testComponentLicence($component_path) {
+  public function testComponentLicense($component_path) {
     $this->assertFileExists($component_path . DIRECTORY_SEPARATOR . 'LICENSE.txt');
     $this->assertSame('e84dac1d9fbb5a4a69e38654ce644cea769aa76b', hash_file('sha1', $component_path . DIRECTORY_SEPARATOR . 'LICENSE.txt'));
   }
@@ -90,8 +90,10 @@ protected function findPhpClasses($dir) {
    *
    * @param string $class_path
    *   The full path to the class that should be checked.
+   *
+   * @internal
    */
-  protected function assertNoCoreUsage($class_path) {
+  protected function assertNoCoreUsage(string $class_path): void {
     $contents = file_get_contents($class_path);
     preg_match_all('/^.*Drupal\\\Core.*$/m', $contents, $matches);
     $matches = array_filter($matches[0], function ($line) {
diff --git a/core/tests/Drupal/Tests/Component/Graph/GraphTest.php b/core/tests/Drupal/Tests/Component/Graph/GraphTest.php
index aacd9b59203a..2773d46ba309 100644
--- a/core/tests/Drupal/Tests/Component/Graph/GraphTest.php
+++ b/core/tests/Drupal/Tests/Component/Graph/GraphTest.php
@@ -103,12 +103,14 @@ protected function normalizeGraph($graph) {
   /**
    * Verify expected paths in a graph.
    *
-   * @param $graph
+   * @param array $graph
    *   A graph array processed by \Drupal\Component\Graph\Graph::searchAndSort()
-   * @param $expected_paths
+   * @param array $expected_paths
    *   An associative array containing vertices with their expected paths.
+   *
+   * @internal
    */
-  protected function assertPaths($graph, $expected_paths) {
+  protected function assertPaths(array $graph, array $expected_paths): void {
     foreach ($expected_paths as $vertex => $paths) {
       // Build an array with keys = $paths and values = TRUE.
       $expected = array_fill_keys($paths, TRUE);
@@ -120,13 +122,15 @@ protected function assertPaths($graph, $expected_paths) {
   /**
    * Verify expected reverse paths in a graph.
    *
-   * @param $graph
+   * @param array $graph
    *   A graph array processed by \Drupal\Component\Graph\Graph::searchAndSort()
-   * @param $expected_reverse_paths
+   * @param array $expected_reverse_paths
    *   An associative array containing vertices with their expected reverse
    *   paths.
+   *
+   * @internal
    */
-  protected function assertReversePaths($graph, $expected_reverse_paths) {
+  protected function assertReversePaths(array $graph, array $expected_reverse_paths): void {
     foreach ($expected_reverse_paths as $vertex => $paths) {
       // Build an array with keys = $paths and values = TRUE.
       $expected = array_fill_keys($paths, TRUE);
@@ -138,12 +142,14 @@ protected function assertReversePaths($graph, $expected_reverse_paths) {
   /**
    * Verify expected components in a graph.
    *
-   * @param $graph
+   * @param array $graph
    *   A graph array processed by \Drupal\Component\Graph\Graph::searchAndSort().
-   * @param $expected_components
+   * @param array $expected_components
    *   An array containing of components defined as a list of their vertices.
+   *
+   * @internal
    */
-  protected function assertComponents($graph, $expected_components) {
+  protected function assertComponents(array $graph, array $expected_components): void {
     $unassigned_vertices = array_fill_keys(array_keys($graph), TRUE);
     foreach ($expected_components as $component) {
       $result_components = [];
@@ -159,12 +165,14 @@ protected function assertComponents($graph, $expected_components) {
   /**
    * Verify expected order in a graph.
    *
-   * @param $graph
+   * @param array $graph
    *   A graph array processed by \Drupal\Component\Graph\Graph::searchAndSort()
-   * @param $expected_orders
+   * @param array $expected_orders
    *   An array containing lists of vertices in their expected order.
+   *
+   * @internal
    */
-  protected function assertWeights($graph, $expected_orders) {
+  protected function assertWeights(array $graph, array $expected_orders): void {
     foreach ($expected_orders as $order) {
       $previous_vertex = array_shift($order);
       foreach ($order as $vertex) {
diff --git a/core/tests/Drupal/Tests/Component/Utility/SortArrayTest.php b/core/tests/Drupal/Tests/Component/Utility/SortArrayTest.php
index ce8588a6e728..413991ff5e01 100644
--- a/core/tests/Drupal/Tests/Component/Utility/SortArrayTest.php
+++ b/core/tests/Drupal/Tests/Component/Utility/SortArrayTest.php
@@ -314,8 +314,10 @@ public function providerSortByTitleProperty() {
    *   Expected comparison function return value.
    * @param int $result
    *   Actual comparison function return value.
+   *
+   * @internal
    */
-  protected function assertBothNegativePositiveOrZero($expected, $result) {
+  protected function assertBothNegativePositiveOrZero(int $expected, int $result): void {
     $this->assertIsNumeric($expected);
     $this->assertIsNumeric($result);
     $message = "Numbers should be both negative, both positive or both zero. Expected: $expected, actual: $result";
diff --git a/core/tests/Drupal/Tests/Component/Utility/XssTest.php b/core/tests/Drupal/Tests/Component/Utility/XssTest.php
index b0c434da5d7a..9ecffc195eca 100644
--- a/core/tests/Drupal/Tests/Component/Utility/XssTest.php
+++ b/core/tests/Drupal/Tests/Component/Utility/XssTest.php
@@ -594,10 +594,10 @@ public function providerTestFilterXssAdminNotNormalized() {
    *   Lowercase, plain text to look for.
    * @param string $message
    *   (optional) Message to display if failed. Defaults to an empty string.
-   * @param string $group
-   *   (optional) The group this message belongs to. Defaults to 'Other'.
+   *
+   * @internal
    */
-  protected function assertNormalized($haystack, $needle, $message = '', $group = 'Other') {
+  protected function assertNormalized(string $haystack, string $needle, string $message = ''): void {
     $this->assertStringContainsString($needle, strtolower(Html::decodeEntities($haystack)), $message);
   }
 
@@ -616,10 +616,10 @@ protected function assertNormalized($haystack, $needle, $message = '', $group =
    *   Lowercase, plain text to look for.
    * @param string $message
    *   (optional) Message to display if failed. Defaults to an empty string.
-   * @param string $group
-   *   (optional) The group this message belongs to. Defaults to 'Other'.
+   *
+   * @internal
    */
-  protected function assertNotNormalized($haystack, $needle, $message = '', $group = 'Other') {
+  protected function assertNotNormalized(string $haystack, string $needle, string $message = ''): void {
     $this->assertStringNotContainsString($needle, strtolower(Html::decodeEntities($haystack)), $message);
   }
 
diff --git a/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/Functional/ScaffoldTest.php b/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/Functional/ScaffoldTest.php
index 0fd2cfed5b36..12868c0facea 100644
--- a/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/Functional/ScaffoldTest.php
+++ b/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/Functional/ScaffoldTest.php
@@ -356,8 +356,10 @@ public function testDrupalDrupalFileWasAppended($fixture_name, $is_link, $scaffo
    *   The path to the System-under-Test's docroot.
    * @param bool $is_link
    *   Whether or not symlinking is used.
+   *
+   * @internal
    */
-  protected function assertDefaultSettingsFromScaffoldOverride($docroot, $is_link) {
+  protected function assertDefaultSettingsFromScaffoldOverride(string $docroot, bool $is_link): void {
     $this->assertScaffoldedFile($docroot . '/sites/default/default.settings.php', $is_link, 'scaffolded from the scaffold-override-fixture');
   }
 
@@ -366,8 +368,10 @@ protected function assertDefaultSettingsFromScaffoldOverride($docroot, $is_link)
    *
    * @param string $docroot
    *   The path to the System-under-Test's docroot.
+   *
+   * @internal
    */
-  protected function assertHtaccessExcluded($docroot) {
+  protected function assertHtaccessExcluded(string $docroot): void {
     // Ensure that the .htaccess.txt file was not written, as our
     // top-level composer.json excludes it from the files to scaffold.
     $this->assertFileDoesNotExist($docroot . '/.htaccess');
@@ -384,8 +388,10 @@ protected function assertHtaccessExcluded($docroot) {
    *   The path to the System-under-Test's docroot.
    * @param bool $is_link
    *   Whether or not symlinking is used.
+   *
+   * @internal
    */
-  protected function assertCommonDrupalAssetsWereScaffolded($docroot, $is_link) {
+  protected function assertCommonDrupalAssetsWereScaffolded(string $docroot, bool $is_link): void {
     // Assert scaffold files are written in the correct locations.
     $this->assertScaffoldedFile($docroot . '/.csslintrc', $is_link, 'Test version of .csslintrc from drupal/core.');
     $this->assertScaffoldedFile($docroot . '/.editorconfig', $is_link, 'Test version of .editorconfig from drupal/core.');
@@ -408,8 +414,10 @@ protected function assertCommonDrupalAssetsWereScaffolded($docroot, $is_link) {
    *   Location of the doc root, where autoload.php should be written.
    * @param bool $relocated_docroot
    *   Whether the document root is relocated or now.
+   *
+   * @internal
    */
-  protected function assertAutoloadFileCorrect($docroot, $relocated_docroot = FALSE) {
+  protected function assertAutoloadFileCorrect(string $docroot, bool $relocated_docroot = FALSE): void {
     $autoload_path = $docroot . '/autoload.php';
 
     // Ensure that the autoload.php file was written.
diff --git a/core/tests/Drupal/Tests/Core/Access/AccessResultTest.php b/core/tests/Drupal/Tests/Core/Access/AccessResultTest.php
index 8eef0c87f305..dbe8008b00e9 100644
--- a/core/tests/Drupal/Tests/Core/Access/AccessResultTest.php
+++ b/core/tests/Drupal/Tests/Core/Access/AccessResultTest.php
@@ -45,7 +45,10 @@ protected function setUp(): void {
     \Drupal::setContainer($container);
   }
 
-  protected function assertDefaultCacheability(AccessResult $access) {
+  /**
+   * @internal
+   */
+  protected function assertDefaultCacheability(AccessResult $access): void {
     $this->assertSame([], $access->getCacheContexts());
     $this->assertSame([], $access->getCacheTags());
     $this->assertSame(Cache::PERMANENT, $access->getCacheMaxAge());
diff --git a/core/tests/Drupal/Tests/Core/Common/TagsTest.php b/core/tests/Drupal/Tests/Core/Common/TagsTest.php
index 3c3058f9655b..ad2fba9322f3 100644
--- a/core/tests/Drupal/Tests/Core/Common/TagsTest.php
+++ b/core/tests/Drupal/Tests/Core/Common/TagsTest.php
@@ -43,8 +43,10 @@ public function testImplodeTags() {
 
   /**
    * Helper function: asserts that the ending array of tags is what we wanted.
+   *
+   * @internal
    */
-  protected function assertTags($tags) {
+  protected function assertTags(array $tags): void {
     $original = $this->validTags;
     foreach ($tags as $tag) {
       $key = array_search($tag, $original);
diff --git a/core/tests/Drupal/Tests/Core/Config/ConfigTest.php b/core/tests/Drupal/Tests/Core/Config/ConfigTest.php
index 0fba72d8fc1b..d7b6ee5f0e80 100644
--- a/core/tests/Drupal/Tests/Core/Config/ConfigTest.php
+++ b/core/tests/Drupal/Tests/Core/Config/ConfigTest.php
@@ -581,8 +581,10 @@ public function nestedDataProvider() {
    *
    * @param array $data
    *   Config data to be checked.
+   *
+   * @internal
    */
-  public function assertConfigDataEquals($data) {
+  public function assertConfigDataEquals(array $data): void {
     foreach ($data as $key => $value) {
       $this->assertEquals($value, $this->config->get($key));
     }
@@ -595,8 +597,10 @@ public function assertConfigDataEquals($data) {
    *   Config data to be checked.
    * @param bool $apply_overrides
    *   Apply any overrides to the original data.
+   *
+   * @internal
    */
-  public function assertOriginalConfigDataEquals($data, $apply_overrides) {
+  public function assertOriginalConfigDataEquals(array $data, bool $apply_overrides): void {
     foreach ($data as $key => $value) {
       $config_value = $this->config->getOriginal($key, $apply_overrides);
       $this->assertEquals($value, $config_value);
@@ -632,8 +636,10 @@ public function testSafeStringHandling() {
    *   The original data.
    * @param array $overridden_data
    *   The overridden data.
+   *
+   * @internal
    */
-  protected function assertOverriddenKeys(array $data, array $overridden_data) {
+  protected function assertOverriddenKeys(array $data, array $overridden_data): void {
     if (empty($overridden_data)) {
       $this->assertFalse($this->config->hasOverrides());
     }
diff --git a/core/tests/Drupal/Tests/Core/Controller/ControllerResolverTest.php b/core/tests/Drupal/Tests/Core/Controller/ControllerResolverTest.php
index b9b63e0b18fe..bbd4f5ce4aee 100644
--- a/core/tests/Drupal/Tests/Core/Controller/ControllerResolverTest.php
+++ b/core/tests/Drupal/Tests/Core/Controller/ControllerResolverTest.php
@@ -180,10 +180,12 @@ public function testGetControllerFromDefinitionNotCallable() {
    * @param string|null $class
    *   Either the name of the class the controller represents, or NULL if it is
    *   not an object.
-   * @param mixed $output
+   * @param string|null $output
    *   The output expected for this controller.
+   *
+   * @internal
    */
-  protected function assertCallableController($controller, $class, $output) {
+  protected function assertCallableController(callable $controller, ?string $class, ?string $output): void {
     if ($class) {
       $this->assertIsObject($controller[0]);
       $this->assertInstanceOf($class, $controller[0]);
diff --git a/core/tests/Drupal/Tests/Core/Entity/Access/EntityFormDisplayAccessControlHandlerTest.php b/core/tests/Drupal/Tests/Core/Entity/Access/EntityFormDisplayAccessControlHandlerTest.php
index b262aa898720..154a1b0c618e 100644
--- a/core/tests/Drupal/Tests/Core/Entity/Access/EntityFormDisplayAccessControlHandlerTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/Access/EntityFormDisplayAccessControlHandlerTest.php
@@ -202,8 +202,10 @@ protected function setUp(): void {
    *   A list of allowed operations.
    * @param \Drupal\Core\Session\AccountInterface $user
    *   The account to use for get access.
+   *
+   * @internal
    */
-  public function assertAllowOperations(array $allow_operations, AccountInterface $user) {
+  public function assertAllowOperations(array $allow_operations, AccountInterface $user): void {
     foreach (['view', 'update', 'delete'] as $operation) {
       $expected = in_array($operation, $allow_operations);
       $actual = $this->accessControlHandler->access($this->entity, $operation, $user);
diff --git a/core/tests/Drupal/Tests/Core/Entity/EntityTypeTest.php b/core/tests/Drupal/Tests/Core/Entity/EntityTypeTest.php
index a05fe7cac13a..3ffe645995cc 100644
--- a/core/tests/Drupal/Tests/Core/Entity/EntityTypeTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/EntityTypeTest.php
@@ -484,8 +484,10 @@ public function testConstraintMethods() {
    *
    * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
    *   The entity type.
+   *
+   * @internal
    */
-  protected function assertNoPublicProperties(EntityTypeInterface $entity_type) {
+  protected function assertNoPublicProperties(EntityTypeInterface $entity_type): void {
     $reflection = new \ReflectionObject($entity_type);
     $this->assertEmpty($reflection->getProperties(\ReflectionProperty::IS_PUBLIC));
   }
diff --git a/core/tests/Drupal/Tests/Core/Entity/EntityUrlTest.php b/core/tests/Drupal/Tests/Core/Entity/EntityUrlTest.php
index 0084e4ecba1a..865779dc090c 100644
--- a/core/tests/Drupal/Tests/Core/Entity/EntityUrlTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/EntityUrlTest.php
@@ -460,8 +460,10 @@ protected function getEntity($class, array $values, array $methods = []) {
    *   Whether or not the URL is expected to have a language option.
    * @param \Drupal\Core\Url $url
    *   The URL option to make the assertions on.
+   *
+   * @internal
    */
-  protected function assertUrl($expected_route_name, array $expected_route_parameters, $entity, $has_language, Url $url) {
+  protected function assertUrl(string $expected_route_name, array $expected_route_parameters, $entity, bool $has_language, Url $url): void {
     $this->assertEquals($expected_route_name, $url->getRouteName());
     $this->assertEquals($expected_route_parameters, $url->getRouteParameters());
     $this->assertEquals($this->entityTypeId, $url->getOption('entity_type'));
diff --git a/core/tests/Drupal/Tests/Core/File/FileSystemTest.php b/core/tests/Drupal/Tests/Core/File/FileSystemTest.php
index 465c60adb4f7..aa4ec558a8a1 100644
--- a/core/tests/Drupal/Tests/Core/File/FileSystemTest.php
+++ b/core/tests/Drupal/Tests/Core/File/FileSystemTest.php
@@ -138,8 +138,10 @@ public function providerTestBasename() {
    *   The URI to test.
    * @param string $message
    *   An optional error message.
+   *
+   * @internal
    */
-  protected function assertFilePermissions($expected_mode, $uri, $message = '') {
+  protected function assertFilePermissions(int $expected_mode, string $uri, string $message = ''): void {
     // Mask out all but the last three octets.
     $actual_mode = fileperms($uri) & 0777;
 
diff --git a/core/tests/Drupal/Tests/Core/Form/EventSubscriber/FormAjaxSubscriberTest.php b/core/tests/Drupal/Tests/Core/Form/EventSubscriber/FormAjaxSubscriberTest.php
index ee723020f64a..1f51ed6f40a5 100644
--- a/core/tests/Drupal/Tests/Core/Form/EventSubscriber/FormAjaxSubscriberTest.php
+++ b/core/tests/Drupal/Tests/Core/Form/EventSubscriber/FormAjaxSubscriberTest.php
@@ -51,6 +51,13 @@ class FormAjaxSubscriberTest extends UnitTestCase {
    */
   protected $messenger;
 
+  /**
+   * The event used to derive the response.
+   *
+   * @var \Symfony\Component\HttpKernel\Event\ExceptionEvent
+   */
+  protected $event = NULL;
+
   /**
    * {@inheritdoc}
    */
@@ -84,9 +91,9 @@ public function testOnException() {
       ->with($request, $expected_form, $form_state, $commands)
       ->willReturn($response);
 
-    $event = $this->assertResponseFromException($request, $exception, $response);
-    $this->assertTrue($event->isAllowingCustomResponseCode());
-    $this->assertSame(200, $event->getResponse()->getStatusCode());
+    $this->assertResponseFromException($request, $exception, $response);
+    $this->assertTrue($this->event->isAllowingCustomResponseCode());
+    $this->assertSame(200, $this->event->getResponse()->getStatusCode());
   }
 
   /**
@@ -109,9 +116,9 @@ public function testOnExceptionNewBuildId() {
       ->with($request, $expected_form, $form_state, $commands)
       ->willReturn($response);
 
-    $event = $this->assertResponseFromException($request, $exception, $response);
-    $this->assertTrue($event->isAllowingCustomResponseCode());
-    $this->assertSame(200, $event->getResponse()->getStatusCode());
+    $this->assertResponseFromException($request, $exception, $response);
+    $this->assertTrue($this->event->isAllowingCustomResponseCode());
+    $this->assertSame(200, $this->event->getResponse()->getStatusCode());
   }
 
   /**
@@ -146,8 +153,8 @@ public function testOnExceptionResponseBuilderException() {
       ->with($request, $expected_form, $form_state, $commands)
       ->willThrowException($expected_exception);
 
-    $event = $this->assertResponseFromException($request, $exception, NULL);
-    $this->assertSame($expected_exception, $event->getThrowable());
+    $this->assertResponseFromException($request, $exception, NULL);
+    $this->assertSame($expected_exception, $this->event->getThrowable());
   }
 
   /**
@@ -256,15 +263,13 @@ public function testOnExceptionNestedWrongException() {
    * @param \Symfony\Component\HttpFoundation\Response|null $expected_response
    *   The response expected to be set on the event.
    *
-   * @return \Symfony\Component\HttpKernel\Event\ExceptionEvent
-   *   The event used to derive the response.
+   * @internal
    */
-  protected function assertResponseFromException(Request $request, \Exception $exception, $expected_response) {
-    $event = new ExceptionEvent($this->httpKernel, $request, HttpKernelInterface::MASTER_REQUEST, $exception);
-    $this->subscriber->onException($event);
+  protected function assertResponseFromException(Request $request, \Exception $exception, ?Response $expected_response): void {
+    $this->event = new ExceptionEvent($this->httpKernel, $request, HttpKernelInterface::MASTER_REQUEST, $exception);
+    $this->subscriber->onException($this->event);
 
-    $this->assertSame($expected_response, $event->getResponse());
-    return $event;
+    $this->assertSame($expected_response, $this->event->getResponse());
   }
 
 }
diff --git a/core/tests/Drupal/Tests/Core/Plugin/Context/EntityContextDefinitionIsSatisfiedTest.php b/core/tests/Drupal/Tests/Core/Plugin/Context/EntityContextDefinitionIsSatisfiedTest.php
index 39d4f5b5f870..7f9a23df2221 100644
--- a/core/tests/Drupal/Tests/Core/Plugin/Context/EntityContextDefinitionIsSatisfiedTest.php
+++ b/core/tests/Drupal/Tests/Core/Plugin/Context/EntityContextDefinitionIsSatisfiedTest.php
@@ -89,8 +89,10 @@ protected function setUp(): void {
    *   The context definition to check.
    * @param mixed $value
    *   (optional) The value to set on the context, defaults to NULL.
+   *
+   * @internal
    */
-  protected function assertRequirementIsSatisfied($expected, ContextDefinition $requirement, ContextDefinition $definition, $value = NULL) {
+  protected function assertRequirementIsSatisfied(bool $expected, ContextDefinition $requirement, ContextDefinition $definition, $value = NULL): void {
     $context = new EntityContext($definition, $value);
     $this->assertSame($expected, $requirement->isSatisfiedBy($context));
   }
diff --git a/core/tests/Drupal/Tests/Core/Render/RendererPlaceholdersTest.php b/core/tests/Drupal/Tests/Core/Render/RendererPlaceholdersTest.php
index a6626959fa5e..f9006bb3db5e 100644
--- a/core/tests/Drupal/Tests/Core/Render/RendererPlaceholdersTest.php
+++ b/core/tests/Drupal/Tests/Core/Render/RendererPlaceholdersTest.php
@@ -554,8 +554,10 @@ protected function generatePlaceholderElement() {
    *   rendered.
    * @param array $expected_data
    *   A render array with the expected values.
+   *
+   * @internal
    */
-  protected function assertPlaceholderRenderCache($cid_parts, array $bubbled_cache_contexts, array $expected_data) {
+  protected function assertPlaceholderRenderCache($cid_parts, array $bubbled_cache_contexts, array $expected_data): void {
     if ($cid_parts !== FALSE) {
       if ($bubbled_cache_contexts) {
         // Verify render cached placeholder.
diff --git a/core/tests/Drupal/Tests/Core/Render/RendererTest.php b/core/tests/Drupal/Tests/Core/Render/RendererTest.php
index 8938dd44e641..ac69590e8bac 100644
--- a/core/tests/Drupal/Tests/Core/Render/RendererTest.php
+++ b/core/tests/Drupal/Tests/Core/Render/RendererTest.php
@@ -731,10 +731,12 @@ public function providerAccessValues() {
    *
    * @param array $build
    *   A render array with either #access or #access_callback.
-   * @param bool $access
+   * @param \Drupal\Core\Access\AccessResultInterface|bool $access
    *   Whether the render array is accessible or not.
+   *
+   * @internal
    */
-  protected function assertAccess($build, $access) {
+  protected function assertAccess(array $build, $access): void {
     $sensitive_content = $this->randomContextValue();
     $build['#markup'] = $sensitive_content;
     if (($access instanceof AccessResultInterface && $access->isAllowed()) || $access === TRUE) {
diff --git a/core/tests/Drupal/Tests/Core/Routing/UrlGeneratorTest.php b/core/tests/Drupal/Tests/Core/Routing/UrlGeneratorTest.php
index 108eb7f71649..bd3268d86d96 100644
--- a/core/tests/Drupal/Tests/Core/Routing/UrlGeneratorTest.php
+++ b/core/tests/Drupal/Tests/Core/Routing/UrlGeneratorTest.php
@@ -529,18 +529,20 @@ public function testGenerateWithPathProcessorChangingQueryParameter() {
   /**
    * Asserts \Drupal\Core\Routing\UrlGenerator::generateFromRoute()'s output.
    *
-   * @param $route_name
+   * @param string $route_name
    *   The route name to test.
    * @param array $route_parameters
    *   The route parameters to test.
    * @param array $options
    *   The options to test.
-   * @param $expected_url
+   * @param string $expected_url
    *   The expected generated URL string.
    * @param \Drupal\Core\Render\BubbleableMetadata $expected_bubbleable_metadata
    *   The expected generated bubbleable metadata.
+   *
+   * @internal
    */
-  protected function assertGenerateFromRoute($route_name, array $route_parameters, array $options, $expected_url, BubbleableMetadata $expected_bubbleable_metadata) {
+  protected function assertGenerateFromRoute(string $route_name, array $route_parameters, array $options, string $expected_url, BubbleableMetadata $expected_bubbleable_metadata): void {
     // First, test with $collect_cacheability_metadata set to the default value.
     $url = $this->generator->generateFromRoute($route_name, $route_parameters, $options);
     $this->assertSame($expected_url, $url);
diff --git a/core/tests/Drupal/Tests/Core/Security/RequestSanitizerTest.php b/core/tests/Drupal/Tests/Core/Security/RequestSanitizerTest.php
index 03450142e002..7cfc554cd3ec 100644
--- a/core/tests/Drupal/Tests/Core/Security/RequestSanitizerTest.php
+++ b/core/tests/Drupal/Tests/Core/Security/RequestSanitizerTest.php
@@ -357,8 +357,10 @@ public function errorHandler($errno, $errstr) {
    *   The error message.
    * @param int $errno
    *   The severity level of the error.
+   *
+   * @internal
    */
-  protected function assertError($errstr, $errno) {
+  protected function assertError(string $errstr, int $errno): void {
     foreach ($this->errors as $error) {
       if ($error['errstr'] === $errstr && $error['errno'] === $errno) {
         return;
diff --git a/core/tests/Drupal/Tests/Core/Template/AttributeTest.php b/core/tests/Drupal/Tests/Core/Template/AttributeTest.php
index b48b59668594..c05a4bfbe3ce 100644
--- a/core/tests/Drupal/Tests/Core/Template/AttributeTest.php
+++ b/core/tests/Drupal/Tests/Core/Template/AttributeTest.php
@@ -382,8 +382,10 @@ public function providerTestAttributeValues() {
    *   The CSS class to check.
    * @param string $html
    *   The HTML snippet to check.
+   *
+   * @internal
    */
-  protected function assertClass($class, $html) {
+  protected function assertClass(string $class, string $html): void {
     $xpath = "//*[@class='$class']";
     self::assertTrue((bool) $this->getXPathResultCount($xpath, $html));
   }
@@ -395,8 +397,10 @@ protected function assertClass($class, $html) {
    *   The CSS class to check.
    * @param string $html
    *   The HTML snippet to check.
+   *
+   * @internal
    */
-  protected function assertNoClass($class, $html) {
+  protected function assertNoClass(string $class, string $html): void {
     $xpath = "//*[@class='$class']";
     self::assertFalse((bool) $this->getXPathResultCount($xpath, $html));
   }
@@ -408,8 +412,10 @@ protected function assertNoClass($class, $html) {
    *   The CSS ID to check.
    * @param string $html
    *   The HTML snippet to check.
+   *
+   * @internal
    */
-  protected function assertID($id, $html) {
+  protected function assertID(string $id, string $html): void {
     $xpath = "//*[@id='$id']";
     self::assertTrue((bool) $this->getXPathResultCount($xpath, $html));
   }
@@ -421,8 +427,10 @@ protected function assertID($id, $html) {
    *   The CSS ID to check.
    * @param string $html
    *   The HTML snippet to check.
+   *
+   * @internal
    */
-  protected function assertNoID($id, $html) {
+  protected function assertNoID(string $id, string $html): void {
     $xpath = "//*[@id='$id']";
     self::assertFalse((bool) $this->getXPathResultCount($xpath, $html));
   }
diff --git a/core/tests/Drupal/Tests/Core/Utility/LinkGeneratorTest.php b/core/tests/Drupal/Tests/Core/Utility/LinkGeneratorTest.php
index cc466edd644a..540442693af8 100644
--- a/core/tests/Drupal/Tests/Core/Utility/LinkGeneratorTest.php
+++ b/core/tests/Drupal/Tests/Core/Utility/LinkGeneratorTest.php
@@ -650,8 +650,10 @@ public function testGenerateTwice() {
    *   The HTML to check.
    * @param int $count
    *   How many times the link should be present in the HTML. Defaults to 1.
+   *
+   * @internal
    */
-  public static function assertLink(array $properties, MarkupInterface $html, $count = 1) {
+  public static function assertLink(array $properties, MarkupInterface $html, int $count = 1): void {
     // Provide default values.
     $properties += ['attributes' => []];
 
@@ -686,10 +688,9 @@ public static function assertLink(array $properties, MarkupInterface $html, $cou
    * @param string $html
    *   The HTML snippet to check.
    *
-   * @return int
-   *   The number of results that are found.
+   * @internal
    */
-  protected function assertNoXPathResults($query, $html) {
+  protected function assertNoXPathResults(string $query, string $html): void {
     $document = new \DOMDocument();
     $document->loadHTML($html);
     $xpath = new \DOMXPath($document);
-- 
GitLab


From f6ffe6aec6a8050e3f3b3398e9180d6c72002c0f Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Mon, 22 Nov 2021 16:44:08 +0000
Subject: [PATCH 53/69] Issue #3250629 by paulocs, longwave:
 MockBuilder::setMethods is deprecated in PHPUnit8 and removed from PHPUnit10

(cherry picked from commit 588951bbf20cf44fd6bc423dfc00f78147c4b9d4)
---
 .../tests/Drupal/Tests/Component/Plugin/Context/ContextTest.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/core/tests/Drupal/Tests/Component/Plugin/Context/ContextTest.php b/core/tests/Drupal/Tests/Component/Plugin/Context/ContextTest.php
index 192331c99372..f9656cfc5e00 100644
--- a/core/tests/Drupal/Tests/Component/Plugin/Context/ContextTest.php
+++ b/core/tests/Drupal/Tests/Component/Plugin/Context/ContextTest.php
@@ -103,7 +103,7 @@ public function providerHasContextValue() {
    */
   public function testHasContextValue($has_context_value, $default_value): void {
     $mock_definition = $this->getMockBuilder('Drupal\Component\Plugin\Context\ContextDefinitionInterface')
-      ->setMethods(['getDefaultValue'])
+      ->onlyMethods(['getDefaultValue'])
       ->getMockForAbstractClass();
 
     $mock_definition->expects($this->atLeastOnce())
-- 
GitLab


From af165d2a372f527a8eeefaf4941f67f209e914f1 Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Mon, 22 Nov 2021 16:46:38 +0000
Subject: [PATCH 54/69] Issue #3250587 by lauriii, bnjmnm:
 \Drupal\Tests\ckeditor5\FunctionalJavascript\CKEditor5Test::testEditorFileReferenceIntegration
 fails on PostgreSQL

(cherry picked from commit 40a0e8a2a75fd4e94d0ecf160127d4871247e109)
---
 .../tests/src/FunctionalJavascript/CKEditor5Test.php         | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5Test.php b/core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5Test.php
index deb37c9455fb..f68274ddc67b 100644
--- a/core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5Test.php
+++ b/core/modules/ckeditor5/tests/src/FunctionalJavascript/CKEditor5Test.php
@@ -381,7 +381,10 @@ public function testEditorFileReferenceIntegration() {
     $this->assertNotEmpty($image_upload_field = $page->find('css', '.ck-file-dialog-button input[type="file"]'));
     $image = $this->getTestFiles('image')[0];
     $image_upload_field->attachFile($this->container->get('file_system')->realpath($image->uri));
-    $assert_session->assertWaitOnAjaxRequest();
+    // Wait until preview for the image has rendered to ensure that the image
+    // upload has completed and the image has been downcast.
+    // @see https://www.drupal.org/project/drupal/issues/3250587
+    $this->assertNotEmpty($assert_session->waitForElement('css', '.ck-content img[data-entity-uuid]'));
     $page->pressButton('Save');
 
     $uploaded_image = File::load(1);
-- 
GitLab


From 4b233f806f3d3add5ae4605e913f0908b76bd824 Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Mon, 22 Nov 2021 16:50:36 +0000
Subject: [PATCH 55/69] Issue #3250482 by quietone, daffie: The docblock of
 \Drupal\views\Plugin\views\cache\CachePluginBase::cacheSetMaxAge() is wrong

(cherry picked from commit 266fe1a75d31eae2fdd5c91e058c250dfba04fdd)
---
 .../views/src/Plugin/views/cache/CachePluginBase.php  | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/core/modules/views/src/Plugin/views/cache/CachePluginBase.php b/core/modules/views/src/Plugin/views/cache/CachePluginBase.php
index 8cbb2fd3439f..4fe6c872c406 100644
--- a/core/modules/views/src/Plugin/views/cache/CachePluginBase.php
+++ b/core/modules/views/src/Plugin/views/cache/CachePluginBase.php
@@ -81,13 +81,14 @@ protected function cacheExpire($type) {
   }
 
   /**
-   * Determine expiration time in the cache table of the cache type
-   * or CACHE_PERMANENT if item shouldn't be removed automatically from cache.
+   * Determine cache expiration time.
    *
-   * Plugins must override this to implement expiration in the cache table.
+   * Plugins must override this to implement expiration in the cache table. The
+   * default is CACHE_PERMANENT, indicating that the item will not be removed
+   * automatically from cache.
    *
-   * @param $type
-   *   The cache type, either 'query', 'result'.
+   * @param string $type
+   *   The cache type.
    */
   protected function cacheSetMaxAge($type) {
     return Cache::PERMANENT;
-- 
GitLab


From b2b0f12b0f7c9ac6adb63baae7300963bd8211aa Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Mon, 22 Nov 2021 17:07:32 +0000
Subject: [PATCH 56/69] Issue #3247414 by anagomes, Beakerboy: Incorrect
 docblock types for $statementClass and $statementWrapperClass properties in
 Connection

(cherry picked from commit da17876671ae476b4ab892c032cd88fd648fc25f)
---
 core/lib/Drupal/Core/Database/Connection.php | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/core/lib/Drupal/Core/Database/Connection.php b/core/lib/Drupal/Core/Database/Connection.php
index 4f28e5b669a7..67c601d3db0e 100644
--- a/core/lib/Drupal/Core/Database/Connection.php
+++ b/core/lib/Drupal/Core/Database/Connection.php
@@ -73,7 +73,7 @@ abstract class Connection {
   /**
    * The name of the Statement class for this connection.
    *
-   * @var string
+   * @var string|null
    *
    * @deprecated in drupal:9.1.0 and is removed from drupal:10.0.0. Database
    *   drivers should use or extend StatementWrapper instead, and encapsulate
@@ -86,7 +86,7 @@ abstract class Connection {
   /**
    * The name of the StatementWrapper class for this connection.
    *
-   * @var string
+   * @var string|null
    */
   protected $statementWrapperClass = NULL;
 
-- 
GitLab


From 59d8ab1f0439082de46f840d544e3118e207ef46 Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Mon, 22 Nov 2021 17:11:24 +0000
Subject: [PATCH 57/69] Issue #3184619 by neclimdul, quietone: Fix unreachable
 logic in UrlGenerator::getRoute

(cherry picked from commit 3730c17b80906332adb9218d302fc64c8d75e328)
---
 core/lib/Drupal/Core/Routing/UrlGenerator.php | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/core/lib/Drupal/Core/Routing/UrlGenerator.php b/core/lib/Drupal/Core/Routing/UrlGenerator.php
index c4276a3d224c..f56736ab267c 100644
--- a/core/lib/Drupal/Core/Routing/UrlGenerator.php
+++ b/core/lib/Drupal/Core/Routing/UrlGenerator.php
@@ -7,7 +7,6 @@
 use Symfony\Component\HttpFoundation\RequestStack;
 use Symfony\Component\Routing\RequestContext as SymfonyRequestContext;
 use Symfony\Component\Routing\Route as SymfonyRoute;
-use Symfony\Component\Routing\Exception\RouteNotFoundException;
 use Drupal\Component\Utility\UrlHelper;
 use Drupal\Core\PathProcessor\OutboundPathProcessorInterface;
 use Drupal\Core\RouteProcessor\OutboundRouteProcessorInterface;
@@ -423,8 +422,8 @@ protected function getRoute($name) {
     if ($name instanceof SymfonyRoute) {
       $route = $name;
     }
-    elseif (NULL === $route = clone $this->provider->getRouteByName($name)) {
-      throw new RouteNotFoundException(sprintf('Route "%s" does not exist.', $name));
+    else {
+      $route = clone $this->provider->getRouteByName($name);
     }
     return $route;
   }
-- 
GitLab


From d4bf8fb744402ec29d818f9eb90f1f66b78abd45 Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Tue, 23 Nov 2021 09:35:28 +0000
Subject: [PATCH 58/69] Issue #3250743 by alexpott, longwave: [PHP 8.1]
 NumberFieldTest fails

---
 .../field/tests/src/Functional/Number/NumberFieldTest.php       | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/core/modules/field/tests/src/Functional/Number/NumberFieldTest.php b/core/modules/field/tests/src/Functional/Number/NumberFieldTest.php
index 98253c179f95..f9ff9fb3e9ab 100644
--- a/core/modules/field/tests/src/Functional/Number/NumberFieldTest.php
+++ b/core/modules/field/tests/src/Functional/Number/NumberFieldTest.php
@@ -430,7 +430,7 @@ public function testCreateNumberDecimalField() {
    *
    * @internal
    */
-  public function assertSetMinimumValue(FieldConfigInterface $field, int $minimum_value): void {
+  public function assertSetMinimumValue(FieldConfigInterface $field, $minimum_value): void {
     $field_configuration_url = 'entity_test/structure/entity_test/fields/entity_test.entity_test.' . $field->getName();
 
     // Set the minimum value.
-- 
GitLab


From f51543629d6ece1690e5dbf5d52cf59ac52abeae Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Tue, 23 Nov 2021 13:56:41 +0000
Subject: [PATCH 59/69] Issue #3061074 by longwave, cilefen, chr.fritsch,
 acbramley, jungle, larowlan: egulias/EmailValidator prior to 2.1.22 allows
 addresses with a space in the domain part

(cherry picked from commit b9a61af92ad9e56bcae8391ea5911f8ec635f108)
---
 composer.lock                                             | 8 +++-----
 core/composer.json                                        | 2 +-
 .../Drupal/Tests/Component/Utility/EmailValidatorTest.php | 1 +
 3 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/composer.lock b/composer.lock
index cb861893d50e..32fdc160be76 100644
--- a/composer.lock
+++ b/composer.lock
@@ -535,14 +535,14 @@
             "dist": {
                 "type": "path",
                 "url": "core",
-                "reference": "60f96b86b97f28bf6a18f9a7e392f56caea5eba3"
+                "reference": "a986b9e62a8273bbdb670ac6e8829ff8e69d9cec"
             },
             "require": {
                 "asm89/stack-cors": "^1.1",
                 "composer/semver": "^3.0",
                 "doctrine/annotations": "^1.12",
                 "doctrine/reflection": "^1.1",
-                "egulias/email-validator": "^2.0",
+                "egulias/email-validator": "^2.1.22",
                 "ext-date": "*",
                 "ext-dom": "*",
                 "ext-filter": "*",
@@ -5521,9 +5521,6 @@
             "require": {
                 "php": "^7.1 || ^8.0"
             },
-            "replace": {
-                "myclabs/deep-copy": "self.version"
-            },
             "require-dev": {
                 "doctrine/collections": "^1.0",
                 "doctrine/common": "^2.6",
@@ -6968,6 +6965,7 @@
                     "type": "github"
                 }
             ],
+            "abandoned": true,
             "time": "2020-11-30T07:30:19+00:00"
         },
         {
diff --git a/core/composer.json b/core/composer.json
index d83b166ca13d..5d316e470d7e 100644
--- a/core/composer.json
+++ b/core/composer.json
@@ -40,7 +40,7 @@
         "symfony-cmf/routing": "^2.1",
         "laminas/laminas-feed": "^2.12",
         "stack/builder": "^1.0",
-        "egulias/email-validator": "^2.0",
+        "egulias/email-validator": "^2.1.22",
         "masterminds/html5": "^2.1",
         "symfony/psr-http-message-bridge": "^2.0",
         "laminas/laminas-diactoros": "^2.1",
diff --git a/core/tests/Drupal/Tests/Component/Utility/EmailValidatorTest.php b/core/tests/Drupal/Tests/Component/Utility/EmailValidatorTest.php
index fc657794b7cd..26318ebe380b 100644
--- a/core/tests/Drupal/Tests/Component/Utility/EmailValidatorTest.php
+++ b/core/tests/Drupal/Tests/Component/Utility/EmailValidatorTest.php
@@ -25,6 +25,7 @@ public function testIsValid() {
     $validator = new EmailValidator();
     $this->assertTrue($validator->isValid('example@example.com'));
     $this->assertFalse($validator->isValid('example@example.com@'));
+    $this->assertFalse($validator->isValid('example@example .com'));
   }
 
   /**
-- 
GitLab


From 88adf9c13caf5450c2909c36f0feff7782f96329 Mon Sep 17 00:00:00 2001
From: Lauri Eskola <lauri.eskola@acquia.com>
Date: Fri, 19 Nov 2021 16:53:59 +0200
Subject: [PATCH 60/69] Issue #3032275 by alexpott, dww, bendeguz.csirmaz,
 tedbow: Create a fault-tolerant method for interacting with links and fields
 in Javascript tests

(cherry picked from commit 7ff9cbf0ffe5ad5e48e2610e9924d0f20f474061)
---
 .../BlockFormMessagesTest.php                 | 44 ++--------
 .../LayoutBuilderDisableInteractionsTest.php  |  4 +-
 .../js-interaction-test-blocker-element.css   | 13 +++
 .../js_interaction_test.trigger_link.es6.js   | 38 ++++++++
 .../js/js_interaction_test.trigger_link.js    | 28 ++++++
 .../js_interaction_test.info.yml              |  5 ++
 .../js_interaction_test.libraries.yml         | 10 +++
 .../js_interaction_test.routing.yml           |  6 ++
 .../src/Controller/JSInteractionTestForm.php  | 88 +++++++++++++++++++
 .../DrupalSelenium2Driver.php                 | 80 +++++++++++++++++
 .../FunctionalJavascriptTests/JSWebAssert.php | 17 ++++
 .../Tests/JSInteractionTest.php               | 60 +++++++++++++
 12 files changed, 353 insertions(+), 40 deletions(-)
 create mode 100644 core/modules/system/tests/modules/js_interaction_test/css/js-interaction-test-blocker-element.css
 create mode 100644 core/modules/system/tests/modules/js_interaction_test/js/js_interaction_test.trigger_link.es6.js
 create mode 100644 core/modules/system/tests/modules/js_interaction_test/js/js_interaction_test.trigger_link.js
 create mode 100644 core/modules/system/tests/modules/js_interaction_test/js_interaction_test.info.yml
 create mode 100644 core/modules/system/tests/modules/js_interaction_test/js_interaction_test.libraries.yml
 create mode 100644 core/modules/system/tests/modules/js_interaction_test/js_interaction_test.routing.yml
 create mode 100644 core/modules/system/tests/modules/js_interaction_test/src/Controller/JSInteractionTestForm.php
 create mode 100644 core/tests/Drupal/FunctionalJavascriptTests/Tests/JSInteractionTest.php

diff --git a/core/modules/layout_builder/tests/src/FunctionalJavascript/BlockFormMessagesTest.php b/core/modules/layout_builder/tests/src/FunctionalJavascript/BlockFormMessagesTest.php
index c5e7c0cb4543..54e7e4e9b43c 100644
--- a/core/modules/layout_builder/tests/src/FunctionalJavascript/BlockFormMessagesTest.php
+++ b/core/modules/layout_builder/tests/src/FunctionalJavascript/BlockFormMessagesTest.php
@@ -2,10 +2,8 @@
 
 namespace Drupal\Tests\layout_builder\FunctionalJavascript;
 
-use Behat\Mink\Element\NodeElement;
 use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
 use Drupal\Tests\contextual\FunctionalJavascript\ContextualLinkClickTrait;
-use WebDriver\Exception\UnknownError;
 
 /**
  * Tests that messages appear in the off-canvas dialog with configuring blocks.
@@ -59,14 +57,14 @@ public function testValidationMessage() {
     // Enable layout builder.
     $this->drupalGet($field_ui_prefix . '/display/default');
     $this->submitForm(['layout[enabled]' => TRUE], 'Save');
-    $this->clickElementWhenClickable($page->findLink('Manage layout'));
+    $page->findLink('Manage layout')->click();
     $assert_session->addressEquals($field_ui_prefix . '/display/default/layout');
-    $this->clickElementWhenClickable($page->findLink('Add block'));
+    $page->findLink('Add block')->click();
     $this->assertNotEmpty($assert_session->waitForElementVisible('css', '#drupal-off-canvas .block-categories'));
-    $this->clickElementWhenClickable($page->findLink('Powered by Drupal'));
+    $page->findLink('Powered by Drupal')->click();
     $this->assertNotEmpty($assert_session->waitForElementVisible('css', '#drupal-off-canvas [name="settings[label]"]'));
     $page->findField('Title')->setValue('');
-    $this->clickElementWhenClickable($page->findButton('Add block'));
+    $page->findButton('Add block')->click();
     $this->assertMessagesDisplayed();
     $page->findField('Title')->setValue('New title');
     $page->pressButton('Add block');
@@ -76,7 +74,7 @@ public function testValidationMessage() {
     $assert_session->assertNoElementAfterWait('css', '#drupal-off-canvas');
     $assert_session->assertWaitOnAjaxRequest();
     $this->drupalGet($this->getUrl());
-    $this->clickElementWhenClickable($page->findButton('Save layout'));
+    $page->findButton('Save layout')->click();
     $this->assertNotEmpty($assert_session->waitForElement('css', 'div:contains("The layout has been saved")'));
 
     // Ensure that message are displayed when configuring an existing block.
@@ -85,7 +83,7 @@ public function testValidationMessage() {
     $this->clickContextualLink($block_css_locator, 'Configure', TRUE);
     $this->assertNotEmpty($assert_session->waitForElementVisible('css', '#drupal-off-canvas [name="settings[label]"]'));
     $page->findField('Title')->setValue('');
-    $this->clickElementWhenClickable($page->findButton('Update'));
+    $page->findButton('Update')->click();
     $this->assertMessagesDisplayed();
   }
 
@@ -108,34 +106,4 @@ protected function assertMessagesDisplayed(): void {
     $this->assertGreaterThan(4, count($top_form_elements));
   }
 
-  /**
-   * Attempts to click an element until it is in a clickable state.
-   *
-   * @param \Behat\Mink\Element\NodeElement $element
-   *   The element to click.
-   * @param int $timeout
-   *   (Optional) Timeout in milliseconds, defaults to 10000.
-   *
-   * @todo Replace this method with general solution for random click() test
-   *   failures in https://www.drupal.org/node/3032275.
-   */
-  protected function clickElementWhenClickable(NodeElement $element, $timeout = 10000) {
-    $page = $this->getSession()->getPage();
-
-    $result = $page->waitFor($timeout / 1000, function () use ($element) {
-      try {
-        $element->click();
-        return TRUE;
-      }
-      catch (UnknownError $exception) {
-        if (strstr($exception->getMessage(), 'not clickable') === FALSE) {
-          // Rethrow any unexpected UnknownError exceptions.
-          throw $exception;
-        }
-        return NULL;
-      }
-    });
-    $this->assertTrue($result);
-  }
-
 }
diff --git a/core/modules/layout_builder/tests/src/FunctionalJavascript/LayoutBuilderDisableInteractionsTest.php b/core/modules/layout_builder/tests/src/FunctionalJavascript/LayoutBuilderDisableInteractionsTest.php
index 083b9682a3dc..e83099c1dbc9 100644
--- a/core/modules/layout_builder/tests/src/FunctionalJavascript/LayoutBuilderDisableInteractionsTest.php
+++ b/core/modules/layout_builder/tests/src/FunctionalJavascript/LayoutBuilderDisableInteractionsTest.php
@@ -6,6 +6,7 @@
 use Drupal\block_content\Entity\BlockContent;
 use Drupal\block_content\Entity\BlockContentType;
 use Drupal\Component\Render\FormattableMarkup;
+use Drupal\FunctionalJavascriptTests\JSWebAssert;
 use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
 use Drupal\Tests\contextual\FunctionalJavascript\ContextualLinkClickTrait;
 
@@ -183,8 +184,7 @@ protected function assertElementUnclickable(NodeElement $element): void {
       $this->fail(new FormattableMarkup("@tag_name was clickable when it shouldn't have been", ['@tag_name' => $tag_name]));
     }
     catch (\Exception $e) {
-      // cspell:ignore interactable
-      $this->assertMatchesRegularExpression('/(is not clickable at point|element not interactable)/', $e->getMessage());
+      $this->assertTrue(JSWebAssert::isExceptionNotClickable($e));
     }
   }
 
diff --git a/core/modules/system/tests/modules/js_interaction_test/css/js-interaction-test-blocker-element.css b/core/modules/system/tests/modules/js_interaction_test/css/js-interaction-test-blocker-element.css
new file mode 100644
index 000000000000..ac0e3e4e3845
--- /dev/null
+++ b/core/modules/system/tests/modules/js_interaction_test/css/js-interaction-test-blocker-element.css
@@ -0,0 +1,13 @@
+.blocker-element {
+  /* Position the box over the target. */
+  position: relative;
+  z-index: 1;
+  top: -30px;
+  left: -5px;
+  /* Size the box to cover the target. */
+  width: 500px;
+  height: 40px;
+  opacity: 0.5;
+  /* Make the blocker element visible. */
+  background-color: black;
+}
diff --git a/core/modules/system/tests/modules/js_interaction_test/js/js_interaction_test.trigger_link.es6.js b/core/modules/system/tests/modules/js_interaction_test/js/js_interaction_test.trigger_link.es6.js
new file mode 100644
index 000000000000..bd47c33c00b6
--- /dev/null
+++ b/core/modules/system/tests/modules/js_interaction_test/js/js_interaction_test.trigger_link.es6.js
@@ -0,0 +1,38 @@
+/**
+ * @file
+ *  Testing behavior for JSInteractionTest.
+ */
+
+(({ behaviors }) => {
+  /**
+   * @type {Drupal~behavior}
+   *
+   * @prop {Drupal~behaviorAttach} attach
+   *   Attaches the click listener on the trigger link.
+   */
+  behaviors.js_interaction_test_trigger_link = {
+    attach() {
+      const removeBlockerTrigger = once(
+        'remove-blocker-trigger',
+        '.remove-blocker-trigger',
+      ).shift();
+      removeBlockerTrigger.addEventListener('click', (event) => {
+        event.preventDefault();
+        setTimeout(() => {
+          document.querySelector('.blocker-element').remove();
+        }, 100);
+      });
+
+      const enableFieldTrigger = once(
+        'enable-field-trigger',
+        '.enable-field-trigger',
+      ).shift();
+      enableFieldTrigger.addEventListener('click', (event) => {
+        event.preventDefault();
+        setTimeout(() => {
+          document.querySelector('input[name="target_field"]').disabled = false;
+        }, 100);
+      });
+    },
+  };
+})(Drupal);
diff --git a/core/modules/system/tests/modules/js_interaction_test/js/js_interaction_test.trigger_link.js b/core/modules/system/tests/modules/js_interaction_test/js/js_interaction_test.trigger_link.js
new file mode 100644
index 000000000000..c6b1618bb300
--- /dev/null
+++ b/core/modules/system/tests/modules/js_interaction_test/js/js_interaction_test.trigger_link.js
@@ -0,0 +1,28 @@
+/**
+* DO NOT EDIT THIS FILE.
+* See the following change record for more information,
+* https://www.drupal.org/node/2815083
+* @preserve
+**/
+
+(function (_ref) {
+  var behaviors = _ref.behaviors;
+  behaviors.js_interaction_test_trigger_link = {
+    attach: function attach() {
+      var removeBlockerTrigger = once('remove-blocker-trigger', '.remove-blocker-trigger').shift();
+      removeBlockerTrigger.addEventListener('click', function (event) {
+        event.preventDefault();
+        setTimeout(function () {
+          document.querySelector('.blocker-element').remove();
+        }, 100);
+      });
+      var enableFieldTrigger = once('enable-field-trigger', '.enable-field-trigger').shift();
+      enableFieldTrigger.addEventListener('click', function (event) {
+        event.preventDefault();
+        setTimeout(function () {
+          document.querySelector('input[name="target_field"]').disabled = false;
+        }, 100);
+      });
+    }
+  };
+})(Drupal);
\ No newline at end of file
diff --git a/core/modules/system/tests/modules/js_interaction_test/js_interaction_test.info.yml b/core/modules/system/tests/modules/js_interaction_test/js_interaction_test.info.yml
new file mode 100644
index 000000000000..406dee9d6258
--- /dev/null
+++ b/core/modules/system/tests/modules/js_interaction_test/js_interaction_test.info.yml
@@ -0,0 +1,5 @@
+name: 'JS Interaction Test'
+type: module
+description: 'Module for testing fault-tolerant interactions in JavaScript tests.'
+package: Testing
+version: VERSION
diff --git a/core/modules/system/tests/modules/js_interaction_test/js_interaction_test.libraries.yml b/core/modules/system/tests/modules/js_interaction_test/js_interaction_test.libraries.yml
new file mode 100644
index 000000000000..c6d526a36f50
--- /dev/null
+++ b/core/modules/system/tests/modules/js_interaction_test/js_interaction_test.libraries.yml
@@ -0,0 +1,10 @@
+js_interaction_test:
+  version: VERSION
+  js:
+    js/js_interaction_test.trigger_link.js: {}
+  css:
+    theme:
+      css/js-interaction-test-blocker-element.css: {}
+  dependencies:
+    - core/drupal
+    - core/once
diff --git a/core/modules/system/tests/modules/js_interaction_test/js_interaction_test.routing.yml b/core/modules/system/tests/modules/js_interaction_test/js_interaction_test.routing.yml
new file mode 100644
index 000000000000..36f7c119c494
--- /dev/null
+++ b/core/modules/system/tests/modules/js_interaction_test/js_interaction_test.routing.yml
@@ -0,0 +1,6 @@
+js_interaction_test.js_interaction_test:
+  path: '/js_interaction_test'
+  defaults:
+    _form: '\Drupal\js_interaction_test\Controller\JSInteractionTestForm'
+  requirements:
+    _access: 'TRUE'
diff --git a/core/modules/system/tests/modules/js_interaction_test/src/Controller/JSInteractionTestForm.php b/core/modules/system/tests/modules/js_interaction_test/src/Controller/JSInteractionTestForm.php
new file mode 100644
index 000000000000..1439ec16b4ed
--- /dev/null
+++ b/core/modules/system/tests/modules/js_interaction_test/src/Controller/JSInteractionTestForm.php
@@ -0,0 +1,88 @@
+<?php
+
+namespace Drupal\js_interaction_test\Controller;
+
+use Drupal\Core\Form\FormBase;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Url;
+
+/**
+ * Controller for testing fault tolerant JavaScript interactions.
+ */
+class JSInteractionTestForm extends FormBase {
+
+  /**
+   * @inheritDoc
+   */
+  public function getFormId() {
+    return __CLASS__;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitForm(array &$form, FormStateInterface $form_state) {
+    // No-op.
+  }
+
+  /**
+   * Creates the test form.
+   *
+   * The form provides:
+   * - A link that is obstructed (blocked) by another element.
+   * - A link that, when clicked, removes the blocking element after some time.
+   * - A field that is disabled.
+   * - A link that, when clicked, enables the field after some time.
+   *
+   * @param array $form
+   *   An associative array containing the structure of the form.
+   * @param \Drupal\Core\Form\FormStateInterface $form_state
+   *   The current state of the form.
+   *
+   * @return array
+   *   The form structure.
+   */
+  public function buildForm(array $form, FormStateInterface $form_state) {
+    return [
+      'target_link' => [
+        '#type' => 'link',
+        '#url' => Url::fromRoute('<current>'),
+        '#title' => $this->t('Target link'),
+      ],
+      'blocker_element' => [
+        '#type' => 'html_tag',
+        '#tag' => 'div',
+        '#attributes' => [
+          'class' => ['blocker-element'],
+        ],
+      ],
+      'remove_blocker_trigger' => [
+        '#type' => 'link',
+        '#url' => Url::fromRoute('<current>'),
+        '#title' => $this->t('Remove Blocker Trigger'),
+        '#attributes' => [
+          'class' => ['remove-blocker-trigger'],
+        ],
+      ],
+      'target_field' => [
+        '#type' => 'textfield',
+        '#maxlength' => 20,
+        '#disabled' => TRUE,
+      ],
+      'enable_field_trigger' => [
+        '#type' => 'link',
+        '#url' => Url::fromRoute('<current>'),
+        '#title' => $this->t('Enable Field Trigger'),
+        '#attributes' => [
+          'class' => ['enable-field-trigger'],
+        ],
+      ],
+      '#attached' => [
+        'library' => [
+          'js_interaction_test/js_interaction_test',
+        ],
+      ],
+    ];
+  }
+
+}
diff --git a/core/tests/Drupal/FunctionalJavascriptTests/DrupalSelenium2Driver.php b/core/tests/Drupal/FunctionalJavascriptTests/DrupalSelenium2Driver.php
index 76d1416056a9..a8110451d82f 100644
--- a/core/tests/Drupal/FunctionalJavascriptTests/DrupalSelenium2Driver.php
+++ b/core/tests/Drupal/FunctionalJavascriptTests/DrupalSelenium2Driver.php
@@ -4,6 +4,7 @@
 
 use Behat\Mink\Driver\Selenium2Driver;
 use Behat\Mink\Exception\DriverException;
+use WebDriver\Exception;
 use WebDriver\Exception\UnknownError;
 use WebDriver\ServiceFactory;
 
@@ -134,4 +135,83 @@ public function uploadFileAndGetRemoteFilePath($path) {
     return $remotePath;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function click($xpath) {
+    /** @var \Exception $not_clickable_exception */
+    $not_clickable_exception = NULL;
+    $result = $this->waitFor(10, function () use (&$not_clickable_exception, $xpath) {
+      try {
+        parent::click($xpath);
+        return TRUE;
+      }
+      catch (Exception $exception) {
+        if (!JSWebAssert::isExceptionNotClickable($exception)) {
+          // Rethrow any unexpected exceptions.
+          throw $exception;
+        }
+        $not_clickable_exception = $exception;
+        return NULL;
+      }
+    });
+    if ($result !== TRUE) {
+      throw $not_clickable_exception;
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setValue($xpath, $value) {
+    /** @var \Exception $not_clickable_exception */
+    $not_clickable_exception = NULL;
+    $result = $this->waitFor(10, function () use (&$not_clickable_exception, $xpath, $value) {
+      try {
+        parent::setValue($xpath, $value);
+        return TRUE;
+      }
+      catch (Exception $exception) {
+        if (!JSWebAssert::isExceptionNotClickable($exception) && !str_contains($exception->getMessage(), 'invalid element state')) {
+          // Rethrow any unexpected exceptions.
+          throw $exception;
+        }
+        $not_clickable_exception = $exception;
+        return NULL;
+      }
+    });
+    if ($result !== TRUE) {
+      throw $not_clickable_exception;
+    }
+  }
+
+  /**
+   * Waits for a callback to return a truthy result and returns it.
+   *
+   * @param int|float $timeout
+   *   Maximal allowed waiting time in seconds.
+   * @param callable $callback
+   *   Callback, which result is both used as waiting condition and returned.
+   *   Will receive reference to `this driver` as first argument.
+   *
+   * @return mixed
+   *   The result of the callback.
+   */
+  private function waitFor($timeout, callable $callback) {
+    $start = microtime(TRUE);
+    $end = $start + $timeout;
+
+    do {
+      $result = call_user_func($callback, $this);
+
+      if ($result) {
+        break;
+      }
+
+      usleep(10000);
+    } while (microtime(TRUE) < $end);
+
+    return $result;
+  }
+
 }
diff --git a/core/tests/Drupal/FunctionalJavascriptTests/JSWebAssert.php b/core/tests/Drupal/FunctionalJavascriptTests/JSWebAssert.php
index 3cbb7f1ae39b..52b48aaf0b00 100644
--- a/core/tests/Drupal/FunctionalJavascriptTests/JSWebAssert.php
+++ b/core/tests/Drupal/FunctionalJavascriptTests/JSWebAssert.php
@@ -8,8 +8,11 @@
 use Behat\Mink\Exception\ElementNotFoundException;
 use Behat\Mink\Exception\UnsupportedDriverActionException;
 use Drupal\Tests\WebAssert;
+use WebDriver\Exception;
 use WebDriver\Exception\CurlExec;
 
+// cspell:ignore interactable
+
 /**
  * Defines a class with methods for asserting presence of elements during tests.
  */
@@ -506,4 +509,18 @@ public function assertNoElementAfterWait($selector_type, $selector, $timeout = 1
     throw new ElementHtmlException($message, $this->session->getDriver(), $node);
   }
 
+  /**
+   * Determines if an exception is due to an element not being clickable.
+   *
+   * @param \WebDriver\Exception $exception
+   *   The exception to check.
+   *
+   * @return bool
+   *   TRUE if the exception is due to an element not being clickable,
+   *   interactable or visible.
+   */
+  public static function isExceptionNotClickable(Exception $exception): bool {
+    return (bool) preg_match('/not (clickable|interactable|visible)/', $exception->getMessage());
+  }
+
 }
diff --git a/core/tests/Drupal/FunctionalJavascriptTests/Tests/JSInteractionTest.php b/core/tests/Drupal/FunctionalJavascriptTests/Tests/JSInteractionTest.php
new file mode 100644
index 000000000000..80d2286a6df0
--- /dev/null
+++ b/core/tests/Drupal/FunctionalJavascriptTests/Tests/JSInteractionTest.php
@@ -0,0 +1,60 @@
+<?php
+
+namespace Drupal\FunctionalJavascriptTests\Tests;
+
+use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
+use WebDriver\Exception;
+
+/**
+ * Tests fault tolerant interactions.
+ *
+ * @group javascript
+ */
+class JSInteractionTest extends WebDriverTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'stark';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = [
+    'js_interaction_test',
+  ];
+
+  /**
+   * Assert an exception is thrown when the blocker element is never removed.
+   */
+  public function testNotClickable() {
+    $this->expectException(Exception::class);
+    $this->drupalGet('/js_interaction_test');
+    $this->assertSession()->elementExists('named', ['link', 'Target link'])->click();
+  }
+
+  /**
+   * Assert an exception is thrown when the field is never enabled.
+   */
+  public function testFieldValueNotSettable() {
+    $this->expectException(Exception::class);
+    $this->drupalGet('/js_interaction_test');
+    $this->assertSession()->fieldExists('target_field')->setValue('Test');
+  }
+
+  /**
+   * Assert no exception is thrown when elements become interactive.
+   */
+  public function testElementsInteraction() {
+    $this->drupalGet('/js_interaction_test');
+    // Remove blocking element after 100 ms.
+    $this->clickLink('Remove Blocker Trigger');
+    $this->clickLink('Target link');
+
+    // Enable field after 100 ms.
+    $this->clickLink('Enable Field Trigger');
+    $this->assertSession()->fieldExists('target_field')->setValue('Test');
+    $this->assertSession()->fieldValueEquals('target_field', 'Test');
+  }
+
+}
-- 
GitLab


From 2ed1f629f61cba5df497436e099687f26860c9b5 Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Wed, 24 Nov 2021 12:27:30 +0000
Subject: [PATCH 61/69] Issue #3251000 by alexpott, andypost: Update
 dependencies for 9.1.x/9.2.x/9.3.x/9.4.x

(cherry picked from commit 1b9983e8d4c2504a8d4265b19edeb264801053cf)
---
 composer.lock                                 | 270 +++++++++---------
 .../Metapackage/CoreRecommended/composer.json |  38 +--
 .../PinnedDevDependencies/composer.json       |   4 +-
 .../Template/ComposerProjectTemplatesTest.php |   2 +-
 4 files changed, 161 insertions(+), 153 deletions(-)

diff --git a/composer.lock b/composer.lock
index 32fdc160be76..93c23e965dc1 100644
--- a/composer.lock
+++ b/composer.lock
@@ -2207,16 +2207,16 @@
         },
         {
             "name": "symfony/console",
-            "version": "v4.4.33",
+            "version": "v4.4.34",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "8dbd23ef7a8884051482183ddee8d9061b5feed0"
+                "reference": "329b3a75cc6b16d435ba1b1a41df54a53382a3f0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/8dbd23ef7a8884051482183ddee8d9061b5feed0",
-                "reference": "8dbd23ef7a8884051482183ddee8d9061b5feed0",
+                "url": "https://api.github.com/repos/symfony/console/zipball/329b3a75cc6b16d435ba1b1a41df54a53382a3f0",
+                "reference": "329b3a75cc6b16d435ba1b1a41df54a53382a3f0",
                 "shasum": ""
             },
             "require": {
@@ -2277,7 +2277,7 @@
             "description": "Eases the creation of beautiful and testable command line interfaces",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/console/tree/v4.4.33"
+                "source": "https://github.com/symfony/console/tree/v4.4.34"
             },
             "funding": [
                 {
@@ -2293,7 +2293,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-10-25T16:36:08+00:00"
+            "time": "2021-11-04T12:23:33+00:00"
         },
         {
             "name": "symfony/debug",
@@ -2365,16 +2365,16 @@
         },
         {
             "name": "symfony/dependency-injection",
-            "version": "v4.4.33",
+            "version": "v4.4.34",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/dependency-injection.git",
-                "reference": "ad364e599a4059db29c0aa424537e6ba668f54e6"
+                "reference": "117d7f132ed7efbd535ec947709d49bec1b9d24b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/ad364e599a4059db29c0aa424537e6ba668f54e6",
-                "reference": "ad364e599a4059db29c0aa424537e6ba668f54e6",
+                "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/117d7f132ed7efbd535ec947709d49bec1b9d24b",
+                "reference": "117d7f132ed7efbd535ec947709d49bec1b9d24b",
                 "shasum": ""
             },
             "require": {
@@ -2431,7 +2431,7 @@
             "description": "Allows you to standardize and centralize the way objects are constructed in your application",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/dependency-injection/tree/v4.4.33"
+                "source": "https://github.com/symfony/dependency-injection/tree/v4.4.34"
             },
             "funding": [
                 {
@@ -2447,20 +2447,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-10-17T07:04:24+00:00"
+            "time": "2021-11-15T14:42:25+00:00"
         },
         {
             "name": "symfony/deprecation-contracts",
-            "version": "v2.4.0",
+            "version": "v2.5.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/deprecation-contracts.git",
-                "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627"
+                "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627",
-                "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627",
+                "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8",
+                "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8",
                 "shasum": ""
             },
             "require": {
@@ -2469,7 +2469,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "2.4-dev"
+                    "dev-main": "2.5-dev"
                 },
                 "thanks": {
                     "name": "symfony/contracts",
@@ -2498,7 +2498,7 @@
             "description": "A generic function and convention to trigger deprecation notices",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0"
+                "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.0"
             },
             "funding": [
                 {
@@ -2514,20 +2514,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-03-23T23:28:01+00:00"
+            "time": "2021-07-12T14:48:14+00:00"
         },
         {
             "name": "symfony/error-handler",
-            "version": "v4.4.30",
+            "version": "v4.4.34",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/error-handler.git",
-                "reference": "51f98f7aa99f00f3b1da6bafe934e67ae6ba6dc5"
+                "reference": "17785c374645def1e884d8ec49976c156c61db4d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/error-handler/zipball/51f98f7aa99f00f3b1da6bafe934e67ae6ba6dc5",
-                "reference": "51f98f7aa99f00f3b1da6bafe934e67ae6ba6dc5",
+                "url": "https://api.github.com/repos/symfony/error-handler/zipball/17785c374645def1e884d8ec49976c156c61db4d",
+                "reference": "17785c374645def1e884d8ec49976c156c61db4d",
                 "shasum": ""
             },
             "require": {
@@ -2566,7 +2566,7 @@
             "description": "Provides tools to manage errors and ease debugging PHP code",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/error-handler/tree/v4.4.30"
+                "source": "https://github.com/symfony/error-handler/tree/v4.4.34"
             },
             "funding": [
                 {
@@ -2582,20 +2582,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-08-27T17:42:48+00:00"
+            "time": "2021-11-12T14:57:39+00:00"
         },
         {
             "name": "symfony/event-dispatcher",
-            "version": "v4.4.30",
+            "version": "v4.4.34",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/event-dispatcher.git",
-                "reference": "2fe81680070043c4c80e7cedceb797e34f377bac"
+                "reference": "1a024b45369c9d55d76b6b8a241bd20c9ea1cbd8"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/2fe81680070043c4c80e7cedceb797e34f377bac",
-                "reference": "2fe81680070043c4c80e7cedceb797e34f377bac",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/1a024b45369c9d55d76b6b8a241bd20c9ea1cbd8",
+                "reference": "1a024b45369c9d55d76b6b8a241bd20c9ea1cbd8",
                 "shasum": ""
             },
             "require": {
@@ -2650,7 +2650,7 @@
             "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/event-dispatcher/tree/v4.4.30"
+                "source": "https://github.com/symfony/event-dispatcher/tree/v4.4.34"
             },
             "funding": [
                 {
@@ -2666,20 +2666,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-08-04T20:31:23+00:00"
+            "time": "2021-11-15T14:42:25+00:00"
         },
         {
             "name": "symfony/event-dispatcher-contracts",
-            "version": "v1.1.9",
+            "version": "v1.1.11",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/event-dispatcher-contracts.git",
-                "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7"
+                "reference": "01e9a4efac0ee33a05dfdf93b346f62e7d0e998c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/84e23fdcd2517bf37aecbd16967e83f0caee25a7",
-                "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/01e9a4efac0ee33a05dfdf93b346f62e7d0e998c",
+                "reference": "01e9a4efac0ee33a05dfdf93b346f62e7d0e998c",
                 "shasum": ""
             },
             "require": {
@@ -2692,7 +2692,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.1-dev"
+                    "dev-main": "1.1-dev"
                 },
                 "thanks": {
                     "name": "symfony/contracts",
@@ -2729,7 +2729,7 @@
                 "standards"
             ],
             "support": {
-                "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v1.1.9"
+                "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v1.1.11"
             },
             "funding": [
                 {
@@ -2745,20 +2745,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2020-07-06T13:19:58+00:00"
+            "time": "2021-03-23T15:25:38+00:00"
         },
         {
             "name": "symfony/http-client-contracts",
-            "version": "v2.4.0",
+            "version": "v2.5.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/http-client-contracts.git",
-                "reference": "7e82f6084d7cae521a75ef2cb5c9457bbda785f4"
+                "reference": "ec82e57b5b714dbb69300d348bd840b345e24166"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/7e82f6084d7cae521a75ef2cb5c9457bbda785f4",
-                "reference": "7e82f6084d7cae521a75ef2cb5c9457bbda785f4",
+                "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/ec82e57b5b714dbb69300d348bd840b345e24166",
+                "reference": "ec82e57b5b714dbb69300d348bd840b345e24166",
                 "shasum": ""
             },
             "require": {
@@ -2770,7 +2770,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "2.4-dev"
+                    "dev-main": "2.5-dev"
                 },
                 "thanks": {
                     "name": "symfony/contracts",
@@ -2807,7 +2807,7 @@
                 "standards"
             ],
             "support": {
-                "source": "https://github.com/symfony/http-client-contracts/tree/v2.4.0"
+                "source": "https://github.com/symfony/http-client-contracts/tree/v2.5.0"
             },
             "funding": [
                 {
@@ -2823,20 +2823,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-04-11T23:07:08+00:00"
+            "time": "2021-11-03T09:24:47+00:00"
         },
         {
             "name": "symfony/http-foundation",
-            "version": "v4.4.33",
+            "version": "v4.4.34",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/http-foundation.git",
-                "reference": "b9a91102f548e0111f4996e8c622fb1d1d479850"
+                "reference": "f4cbbb6fc428588ce8373802461e7fe84e6809ab"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b9a91102f548e0111f4996e8c622fb1d1d479850",
-                "reference": "b9a91102f548e0111f4996e8c622fb1d1d479850",
+                "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f4cbbb6fc428588ce8373802461e7fe84e6809ab",
+                "reference": "f4cbbb6fc428588ce8373802461e7fe84e6809ab",
                 "shasum": ""
             },
             "require": {
@@ -2875,7 +2875,7 @@
             "description": "Defines an object-oriented layer for the HTTP specification",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/http-foundation/tree/v4.4.33"
+                "source": "https://github.com/symfony/http-foundation/tree/v4.4.34"
             },
             "funding": [
                 {
@@ -2891,20 +2891,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-10-07T15:31:35+00:00"
+            "time": "2021-11-04T12:23:33+00:00"
         },
         {
             "name": "symfony/http-kernel",
-            "version": "v4.4.33",
+            "version": "v4.4.35",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/http-kernel.git",
-                "reference": "6f1fcca1154f782796549f4f4e5090bae9525c0e"
+                "reference": "fb793f1381c34b79a43596a532a6a49bd729c9db"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6f1fcca1154f782796549f4f4e5090bae9525c0e",
-                "reference": "6f1fcca1154f782796549f4f4e5090bae9525c0e",
+                "url": "https://api.github.com/repos/symfony/http-kernel/zipball/fb793f1381c34b79a43596a532a6a49bd729c9db",
+                "reference": "fb793f1381c34b79a43596a532a6a49bd729c9db",
                 "shasum": ""
             },
             "require": {
@@ -2979,7 +2979,7 @@
             "description": "Provides a structured process for converting a Request into a Response",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/http-kernel/tree/v4.4.33"
+                "source": "https://github.com/symfony/http-kernel/tree/v4.4.35"
             },
             "funding": [
                 {
@@ -2995,25 +2995,25 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-10-29T08:14:01+00:00"
+            "time": "2021-11-24T08:40:10+00:00"
         },
         {
             "name": "symfony/mime",
-            "version": "v5.4.0-BETA1",
+            "version": "v5.4.0-RC1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/mime.git",
-                "reference": "d75d8cd9aa5ad257ed1b958f042c7a2d7cf505d5"
+                "reference": "d4365000217b67c01acff407573906ff91bcfb34"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/mime/zipball/d75d8cd9aa5ad257ed1b958f042c7a2d7cf505d5",
-                "reference": "d75d8cd9aa5ad257ed1b958f042c7a2d7cf505d5",
+                "url": "https://api.github.com/repos/symfony/mime/zipball/d4365000217b67c01acff407573906ff91bcfb34",
+                "reference": "d4365000217b67c01acff407573906ff91bcfb34",
                 "shasum": ""
             },
             "require": {
                 "php": ">=7.2.5",
-                "symfony/deprecation-contracts": "^2.1",
+                "symfony/deprecation-contracts": "^2.1|^3",
                 "symfony/polyfill-intl-idn": "^1.10",
                 "symfony/polyfill-mbstring": "^1.0",
                 "symfony/polyfill-php80": "^1.16"
@@ -3062,7 +3062,7 @@
                 "mime-type"
             ],
             "support": {
-                "source": "https://github.com/symfony/mime/tree/v5.4.0-BETA1"
+                "source": "https://github.com/symfony/mime/tree/v5.4.0-RC1"
             },
             "funding": [
                 {
@@ -3078,7 +3078,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-11-04T16:48:04+00:00"
+            "time": "2021-11-23T10:19:22+00:00"
         },
         {
             "name": "symfony/polyfill-ctype",
@@ -3575,16 +3575,16 @@
         },
         {
             "name": "symfony/process",
-            "version": "v4.4.30",
+            "version": "v4.4.35",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/process.git",
-                "reference": "13d3161ef63a8ec21eeccaaf9a4d7f784a87a97d"
+                "reference": "c2098705326addae6e6742151dfade47ac71da1b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/process/zipball/13d3161ef63a8ec21eeccaaf9a4d7f784a87a97d",
-                "reference": "13d3161ef63a8ec21eeccaaf9a4d7f784a87a97d",
+                "url": "https://api.github.com/repos/symfony/process/zipball/c2098705326addae6e6742151dfade47ac71da1b",
+                "reference": "c2098705326addae6e6742151dfade47ac71da1b",
                 "shasum": ""
             },
             "require": {
@@ -3617,7 +3617,7 @@
             "description": "Executes commands in sub-processes",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/process/tree/v4.4.30"
+                "source": "https://github.com/symfony/process/tree/v4.4.35"
             },
             "funding": [
                 {
@@ -3633,7 +3633,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-08-04T20:31:23+00:00"
+            "time": "2021-11-22T22:36:24+00:00"
         },
         {
             "name": "symfony/psr-http-message-bridge",
@@ -3725,16 +3725,16 @@
         },
         {
             "name": "symfony/routing",
-            "version": "v4.4.30",
+            "version": "v4.4.34",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/routing.git",
-                "reference": "9ddf033927ad9f30ba2bfd167a7b342cafa13e8e"
+                "reference": "fc9dda0c8496f8ef0a89805c2eabfc43b8cef366"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/routing/zipball/9ddf033927ad9f30ba2bfd167a7b342cafa13e8e",
-                "reference": "9ddf033927ad9f30ba2bfd167a7b342cafa13e8e",
+                "url": "https://api.github.com/repos/symfony/routing/zipball/fc9dda0c8496f8ef0a89805c2eabfc43b8cef366",
+                "reference": "fc9dda0c8496f8ef0a89805c2eabfc43b8cef366",
                 "shasum": ""
             },
             "require": {
@@ -3794,7 +3794,7 @@
                 "url"
             ],
             "support": {
-                "source": "https://github.com/symfony/routing/tree/v4.4.30"
+                "source": "https://github.com/symfony/routing/tree/v4.4.34"
             },
             "funding": [
                 {
@@ -3810,20 +3810,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-08-04T21:41:01+00:00"
+            "time": "2021-11-04T12:23:33+00:00"
         },
         {
             "name": "symfony/serializer",
-            "version": "v4.4.33",
+            "version": "v4.4.35",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/serializer.git",
-                "reference": "5cb0dc3028e0f32888fed2d467b7762824fef843"
+                "reference": "1b2ae02cb1b923987947e013688c51954a80b751"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/serializer/zipball/5cb0dc3028e0f32888fed2d467b7762824fef843",
-                "reference": "5cb0dc3028e0f32888fed2d467b7762824fef843",
+                "url": "https://api.github.com/repos/symfony/serializer/zipball/1b2ae02cb1b923987947e013688c51954a80b751",
+                "reference": "1b2ae02cb1b923987947e013688c51954a80b751",
                 "shasum": ""
             },
             "require": {
@@ -3888,7 +3888,7 @@
             "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/serializer/tree/v4.4.33"
+                "source": "https://github.com/symfony/serializer/tree/v4.4.35"
             },
             "funding": [
                 {
@@ -3904,25 +3904,29 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-09-27T18:46:41+00:00"
+            "time": "2021-11-24T08:12:42+00:00"
         },
         {
             "name": "symfony/service-contracts",
-            "version": "v2.4.0",
+            "version": "v2.5.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/service-contracts.git",
-                "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb"
+                "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb",
-                "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb",
+                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc",
+                "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc",
                 "shasum": ""
             },
             "require": {
                 "php": ">=7.2.5",
-                "psr/container": "^1.1"
+                "psr/container": "^1.1",
+                "symfony/deprecation-contracts": "^2.1"
+            },
+            "conflict": {
+                "ext-psr": "<1.1|>=2"
             },
             "suggest": {
                 "symfony/service-implementation": ""
@@ -3930,7 +3934,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "2.4-dev"
+                    "dev-main": "2.5-dev"
                 },
                 "thanks": {
                     "name": "symfony/contracts",
@@ -3967,7 +3971,7 @@
                 "standards"
             ],
             "support": {
-                "source": "https://github.com/symfony/service-contracts/tree/v2.4.0"
+                "source": "https://github.com/symfony/service-contracts/tree/v2.5.0"
             },
             "funding": [
                 {
@@ -3983,20 +3987,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-04-01T10:43:52+00:00"
+            "time": "2021-11-04T16:48:04+00:00"
         },
         {
             "name": "symfony/translation",
-            "version": "v4.4.32",
+            "version": "v4.4.34",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/translation.git",
-                "reference": "db0ba1e85280d8ff11e38d53c70f8814d4d740f5"
+                "reference": "26d330720627b234803595ecfc0191eeabc65190"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/translation/zipball/db0ba1e85280d8ff11e38d53c70f8814d4d740f5",
-                "reference": "db0ba1e85280d8ff11e38d53c70f8814d4d740f5",
+                "url": "https://api.github.com/repos/symfony/translation/zipball/26d330720627b234803595ecfc0191eeabc65190",
+                "reference": "26d330720627b234803595ecfc0191eeabc65190",
                 "shasum": ""
             },
             "require": {
@@ -4056,7 +4060,7 @@
             "description": "Provides tools to internationalize your application",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/translation/tree/v4.4.32"
+                "source": "https://github.com/symfony/translation/tree/v4.4.34"
             },
             "funding": [
                 {
@@ -4072,20 +4076,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-08-26T05:57:13+00:00"
+            "time": "2021-11-04T12:23:33+00:00"
         },
         {
             "name": "symfony/translation-contracts",
-            "version": "v2.4.0",
+            "version": "v2.5.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/translation-contracts.git",
-                "reference": "95c812666f3e91db75385749fe219c5e494c7f95"
+                "reference": "d28150f0f44ce854e942b671fc2620a98aae1b1e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/95c812666f3e91db75385749fe219c5e494c7f95",
-                "reference": "95c812666f3e91db75385749fe219c5e494c7f95",
+                "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/d28150f0f44ce854e942b671fc2620a98aae1b1e",
+                "reference": "d28150f0f44ce854e942b671fc2620a98aae1b1e",
                 "shasum": ""
             },
             "require": {
@@ -4097,7 +4101,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "2.4-dev"
+                    "dev-main": "2.5-dev"
                 },
                 "thanks": {
                     "name": "symfony/contracts",
@@ -4134,7 +4138,7 @@
                 "standards"
             ],
             "support": {
-                "source": "https://github.com/symfony/translation-contracts/tree/v2.4.0"
+                "source": "https://github.com/symfony/translation-contracts/tree/v2.5.0"
             },
             "funding": [
                 {
@@ -4150,20 +4154,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-03-23T23:28:01+00:00"
+            "time": "2021-08-17T14:20:01+00:00"
         },
         {
             "name": "symfony/validator",
-            "version": "v4.4.33",
+            "version": "v4.4.35",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/validator.git",
-                "reference": "ff0397aa280de38a631660f5aa8067cfbc519e11"
+                "reference": "629f420d8350634fd8ed686d4472c1f10044b265"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/validator/zipball/ff0397aa280de38a631660f5aa8067cfbc519e11",
-                "reference": "ff0397aa280de38a631660f5aa8067cfbc519e11",
+                "url": "https://api.github.com/repos/symfony/validator/zipball/629f420d8350634fd8ed686d4472c1f10044b265",
+                "reference": "629f420d8350634fd8ed686d4472c1f10044b265",
                 "shasum": ""
             },
             "require": {
@@ -4240,7 +4244,7 @@
             "description": "Provides tools to validate values",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/validator/tree/v4.4.33"
+                "source": "https://github.com/symfony/validator/tree/v4.4.35"
             },
             "funding": [
                 {
@@ -4256,11 +4260,11 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-10-28T08:11:47+00:00"
+            "time": "2021-11-22T21:43:32+00:00"
         },
         {
             "name": "symfony/var-dumper",
-            "version": "v5.4.0-BETA2",
+            "version": "v5.4.0-RC1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/var-dumper.git",
@@ -4329,7 +4333,7 @@
                 "dump"
             ],
             "support": {
-                "source": "https://github.com/symfony/var-dumper/tree/v5.4.0-BETA2"
+                "source": "https://github.com/symfony/var-dumper/tree/v5.4.0-RC1"
             },
             "funding": [
                 {
@@ -4349,16 +4353,16 @@
         },
         {
             "name": "symfony/yaml",
-            "version": "v4.4.29",
+            "version": "v4.4.34",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/yaml.git",
-                "reference": "3abcc4db06d4e776825eaa3ed8ad924d5bc7432a"
+                "reference": "2c309e258adeb9970229042be39b360d34986fad"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/yaml/zipball/3abcc4db06d4e776825eaa3ed8ad924d5bc7432a",
-                "reference": "3abcc4db06d4e776825eaa3ed8ad924d5bc7432a",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/2c309e258adeb9970229042be39b360d34986fad",
+                "reference": "2c309e258adeb9970229042be39b360d34986fad",
                 "shasum": ""
             },
             "require": {
@@ -4400,7 +4404,7 @@
             "description": "Loads and dumps YAML files",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/yaml/tree/v4.4.29"
+                "source": "https://github.com/symfony/yaml/tree/v4.4.34"
             },
             "funding": [
                 {
@@ -4416,7 +4420,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-07-27T16:19:30+00:00"
+            "time": "2021-11-18T18:49:23+00:00"
         },
         {
             "name": "twig/twig",
@@ -4930,23 +4934,24 @@
         },
         {
             "name": "composer/spdx-licenses",
-            "version": "1.5.5",
+            "version": "1.5.6",
             "source": {
                 "type": "git",
                 "url": "https://github.com/composer/spdx-licenses.git",
-                "reference": "de30328a7af8680efdc03e396aad24befd513200"
+                "reference": "a30d487169d799745ca7280bc90fdfa693536901"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/de30328a7af8680efdc03e396aad24befd513200",
-                "reference": "de30328a7af8680efdc03e396aad24befd513200",
+                "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/a30d487169d799745ca7280bc90fdfa693536901",
+                "reference": "a30d487169d799745ca7280bc90fdfa693536901",
                 "shasum": ""
             },
             "require": {
                 "php": "^5.3.2 || ^7.0 || ^8.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 7"
+                "phpstan/phpstan": "^0.12.55",
+                "symfony/phpunit-bridge": "^4.2 || ^5"
             },
             "type": "library",
             "extra": {
@@ -4989,7 +4994,7 @@
             "support": {
                 "irc": "irc://irc.freenode.org/composer",
                 "issues": "https://github.com/composer/spdx-licenses/issues",
-                "source": "https://github.com/composer/spdx-licenses/tree/1.5.5"
+                "source": "https://github.com/composer/spdx-licenses/tree/1.5.6"
             },
             "funding": [
                 {
@@ -5005,7 +5010,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2020-12-03T16:04:16+00:00"
+            "time": "2021-11-18T10:14:14+00:00"
         },
         {
             "name": "composer/xdebug-handler",
@@ -5521,6 +5526,9 @@
             "require": {
                 "php": "^7.1 || ^8.0"
             },
+            "replace": {
+                "myclabs/deep-copy": "self.version"
+            },
             "require-dev": {
                 "doctrine/collections": "^1.0",
                 "doctrine/common": "^2.6",
@@ -7708,21 +7716,21 @@
         },
         {
             "name": "symfony/phpunit-bridge",
-            "version": "v5.4.0-BETA2",
+            "version": "v5.4.0-RC1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/phpunit-bridge.git",
-                "reference": "0f925f6512356879d79954a5442dca83658ae279"
+                "reference": "abc162ab677ce0e6a2763c4016a2502077f1477c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/0f925f6512356879d79954a5442dca83658ae279",
-                "reference": "0f925f6512356879d79954a5442dca83658ae279",
+                "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/abc162ab677ce0e6a2763c4016a2502077f1477c",
+                "reference": "abc162ab677ce0e6a2763c4016a2502077f1477c",
                 "shasum": ""
             },
             "require": {
                 "php": ">=7.1.3",
-                "symfony/deprecation-contracts": "^2.1"
+                "symfony/deprecation-contracts": "^2.1|^3"
             },
             "conflict": {
                 "phpunit/phpunit": "<7.5|9.1.2"
@@ -7771,7 +7779,7 @@
             "description": "Provides utilities for PHPUnit, especially user deprecation notices management",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/phpunit-bridge/tree/v5.4.0-BETA2"
+                "source": "https://github.com/symfony/phpunit-bridge/tree/v5.4.0-RC1"
             },
             "funding": [
                 {
@@ -7787,7 +7795,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2021-11-12T11:42:37+00:00"
+            "time": "2021-11-23T10:19:22+00:00"
         },
         {
             "name": "theseer/tokenizer",
diff --git a/composer/Metapackage/CoreRecommended/composer.json b/composer/Metapackage/CoreRecommended/composer.json
index 743923090dd0..b7392b02dad9 100644
--- a/composer/Metapackage/CoreRecommended/composer.json
+++ b/composer/Metapackage/CoreRecommended/composer.json
@@ -34,33 +34,33 @@
         "ralouphie/getallheaders": "3.0.3",
         "stack/builder": "v1.0.6",
         "symfony-cmf/routing": "2.3.4",
-        "symfony/console": "v4.4.33",
+        "symfony/console": "v4.4.34",
         "symfony/debug": "v4.4.31",
-        "symfony/dependency-injection": "v4.4.33",
-        "symfony/deprecation-contracts": "v2.4.0",
-        "symfony/error-handler": "v4.4.30",
-        "symfony/event-dispatcher": "v4.4.30",
-        "symfony/event-dispatcher-contracts": "v1.1.9",
-        "symfony/http-client-contracts": "v2.4.0",
-        "symfony/http-foundation": "v4.4.33",
-        "symfony/http-kernel": "v4.4.33",
-        "symfony/mime": "v5.4.0-BETA1",
+        "symfony/dependency-injection": "v4.4.34",
+        "symfony/deprecation-contracts": "v2.5.0",
+        "symfony/error-handler": "v4.4.34",
+        "symfony/event-dispatcher": "v4.4.34",
+        "symfony/event-dispatcher-contracts": "v1.1.11",
+        "symfony/http-client-contracts": "v2.5.0",
+        "symfony/http-foundation": "v4.4.34",
+        "symfony/http-kernel": "v4.4.35",
+        "symfony/mime": "v5.4.0-RC1",
         "symfony/polyfill-ctype": "v1.23.0",
         "symfony/polyfill-iconv": "v1.23.0",
         "symfony/polyfill-intl-idn": "v1.23.0",
         "symfony/polyfill-intl-normalizer": "v1.23.0",
         "symfony/polyfill-mbstring": "v1.23.1",
         "symfony/polyfill-php80": "v1.23.1",
-        "symfony/process": "v4.4.30",
+        "symfony/process": "v4.4.35",
         "symfony/psr-http-message-bridge": "v2.1.2",
-        "symfony/routing": "v4.4.30",
-        "symfony/serializer": "v4.4.33",
-        "symfony/service-contracts": "v2.4.0",
-        "symfony/translation": "v4.4.32",
-        "symfony/translation-contracts": "v2.4.0",
-        "symfony/validator": "v4.4.33",
-        "symfony/var-dumper": "v5.4.0-BETA2",
-        "symfony/yaml": "v4.4.29",
+        "symfony/routing": "v4.4.34",
+        "symfony/serializer": "v4.4.35",
+        "symfony/service-contracts": "v2.5.0",
+        "symfony/translation": "v4.4.34",
+        "symfony/translation-contracts": "v2.5.0",
+        "symfony/validator": "v4.4.35",
+        "symfony/var-dumper": "v5.4.0-RC1",
+        "symfony/yaml": "v4.4.34",
         "twig/twig": "v2.14.7",
         "typo3/phar-stream-wrapper": "v3.1.7"
     }
diff --git a/composer/Metapackage/PinnedDevDependencies/composer.json b/composer/Metapackage/PinnedDevDependencies/composer.json
index a3e1ab67fcfe..56ac0a0800f8 100644
--- a/composer/Metapackage/PinnedDevDependencies/composer.json
+++ b/composer/Metapackage/PinnedDevDependencies/composer.json
@@ -13,7 +13,7 @@
         "composer/ca-bundle": "1.3.1",
         "composer/composer": "2.1.12",
         "composer/metadata-minifier": "1.0.0",
-        "composer/spdx-licenses": "1.5.5",
+        "composer/spdx-licenses": "1.5.6",
         "composer/xdebug-handler": "2.0.2",
         "doctrine/instantiator": "1.4.0",
         "drupal/coder": "8.3.13",
@@ -58,7 +58,7 @@
         "symfony/filesystem": "v4.4.27",
         "symfony/finder": "v4.4.30",
         "symfony/lock": "v4.4.33",
-        "symfony/phpunit-bridge": "v5.4.0-BETA2",
+        "symfony/phpunit-bridge": "v5.4.0-RC1",
         "theseer/tokenizer": "1.2.1",
         "webmozart/assert": "1.10.0"
     }
diff --git a/core/tests/Drupal/BuildTests/Composer/Template/ComposerProjectTemplatesTest.php b/core/tests/Drupal/BuildTests/Composer/Template/ComposerProjectTemplatesTest.php
index a80a9482bb8d..0b5fd13d1ae4 100644
--- a/core/tests/Drupal/BuildTests/Composer/Template/ComposerProjectTemplatesTest.php
+++ b/core/tests/Drupal/BuildTests/Composer/Template/ComposerProjectTemplatesTest.php
@@ -32,7 +32,7 @@ class ComposerProjectTemplatesTest extends BuildTestBase {
    *
    * @see https://getcomposer.org/doc/04-schema.md#minimum-stability
    */
-  protected const MINIMUM_STABILITY = 'beta';
+  protected const MINIMUM_STABILITY = 'RC';
 
   /**
    * The order of stability strings from least stable to most stable.
-- 
GitLab


From 43e9d14a6b5a159d1653b24eb4627f9fdeb016e6 Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Wed, 24 Nov 2021 14:08:17 +0000
Subject: [PATCH 62/69] Drupal 9.3.0-beta3

---
 composer.lock                                         | 11 ++++-------
 composer/Metapackage/CoreRecommended/composer.json    |  2 +-
 .../Metapackage/PinnedDevDependencies/composer.json   |  2 +-
 composer/Template/LegacyProject/composer.json         |  2 +-
 composer/Template/RecommendedProject/composer.json    |  2 +-
 core/lib/Drupal.php                                   |  2 +-
 6 files changed, 9 insertions(+), 12 deletions(-)

diff --git a/composer.lock b/composer.lock
index 93c23e965dc1..b0032b638939 100644
--- a/composer.lock
+++ b/composer.lock
@@ -531,7 +531,7 @@
         },
         {
             "name": "drupal/core",
-            "version": "9.3.x-dev",
+            "version": "9.3.0-beta3",
             "dist": {
                 "type": "path",
                 "url": "core",
@@ -788,7 +788,7 @@
         },
         {
             "name": "drupal/core-project-message",
-            "version": "9.3.x-dev",
+            "version": "9.3.0-beta3",
             "dist": {
                 "type": "path",
                 "url": "composer/Plugin/ProjectMessage",
@@ -821,7 +821,7 @@
         },
         {
             "name": "drupal/core-vendor-hardening",
-            "version": "9.3.x-dev",
+            "version": "9.3.0-beta3",
             "dist": {
                 "type": "path",
                 "url": "composer/Plugin/VendorHardening",
@@ -7909,9 +7909,6 @@
     "aliases": [],
     "minimum-stability": "dev",
     "stability-flags": {
-        "drupal/core": 20,
-        "drupal/core-project-message": 20,
-        "drupal/core-vendor-hardening": 20,
         "symfony/phpunit-bridge": 10,
         "symfony/var-dumper": 10
     },
@@ -7922,5 +7919,5 @@
     "platform-overrides": {
         "php": "7.3.0"
     },
-    "plugin-api-version": "2.1.0"
+    "plugin-api-version": "2.0.0"
 }
diff --git a/composer/Metapackage/CoreRecommended/composer.json b/composer/Metapackage/CoreRecommended/composer.json
index b7392b02dad9..f46d9ade2f9a 100644
--- a/composer/Metapackage/CoreRecommended/composer.json
+++ b/composer/Metapackage/CoreRecommended/composer.json
@@ -7,7 +7,7 @@
         "webflo/drupal-core-strict": "*"
     },
     "require": {
-        "drupal/core": "9.3.x-dev",
+        "drupal/core": "9.3.0-beta3",
         "asm89/stack-cors": "1.3.0",
         "composer/semver": "3.2.6",
         "doctrine/annotations": "1.13.2",
diff --git a/composer/Metapackage/PinnedDevDependencies/composer.json b/composer/Metapackage/PinnedDevDependencies/composer.json
index 56ac0a0800f8..d888a325cf51 100644
--- a/composer/Metapackage/PinnedDevDependencies/composer.json
+++ b/composer/Metapackage/PinnedDevDependencies/composer.json
@@ -7,7 +7,7 @@
         "webflo/drupal-core-require-dev": "*"
     },
     "require": {
-        "drupal/core": "9.3.x-dev",
+        "drupal/core": "9.3.0-beta3",
         "behat/mink": "v1.9.0",
         "behat/mink-selenium2-driver": "v1.5.0",
         "composer/ca-bundle": "1.3.1",
diff --git a/composer/Template/LegacyProject/composer.json b/composer/Template/LegacyProject/composer.json
index 1b1a2af337ab..afc7c7f0dcf1 100644
--- a/composer/Template/LegacyProject/composer.json
+++ b/composer/Template/LegacyProject/composer.json
@@ -27,7 +27,7 @@
     "conflict": {
         "drupal/drupal": "*"
     },
-    "minimum-stability": "dev",
+    "minimum-stability": "beta",
     "prefer-stable": true,
     "config": {
         "sort-packages": true
diff --git a/composer/Template/RecommendedProject/composer.json b/composer/Template/RecommendedProject/composer.json
index 99e9f55f2394..8b2984364d5f 100644
--- a/composer/Template/RecommendedProject/composer.json
+++ b/composer/Template/RecommendedProject/composer.json
@@ -26,7 +26,7 @@
     "conflict": {
         "drupal/drupal": "*"
     },
-    "minimum-stability": "dev",
+    "minimum-stability": "beta",
     "prefer-stable": true,
     "config": {
         "sort-packages": true
diff --git a/core/lib/Drupal.php b/core/lib/Drupal.php
index 4ffa6c6f0b0b..c17322d28f1d 100644
--- a/core/lib/Drupal.php
+++ b/core/lib/Drupal.php
@@ -75,7 +75,7 @@ class Drupal {
   /**
    * The current system version.
    */
-  const VERSION = '9.3.0-dev';
+  const VERSION = '9.3.0-beta3';
 
   /**
    * Core API compatibility.
-- 
GitLab


From 6c607c1d3c728fac9be19685b270f46cef713e52 Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Wed, 24 Nov 2021 14:08:18 +0000
Subject: [PATCH 63/69] Back to dev.

---
 composer.lock                                         | 11 +++++++----
 composer/Metapackage/CoreRecommended/composer.json    |  2 +-
 .../Metapackage/PinnedDevDependencies/composer.json   |  2 +-
 composer/Template/LegacyProject/composer.json         |  2 +-
 composer/Template/RecommendedProject/composer.json    |  2 +-
 core/lib/Drupal.php                                   |  2 +-
 6 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/composer.lock b/composer.lock
index b0032b638939..93c23e965dc1 100644
--- a/composer.lock
+++ b/composer.lock
@@ -531,7 +531,7 @@
         },
         {
             "name": "drupal/core",
-            "version": "9.3.0-beta3",
+            "version": "9.3.x-dev",
             "dist": {
                 "type": "path",
                 "url": "core",
@@ -788,7 +788,7 @@
         },
         {
             "name": "drupal/core-project-message",
-            "version": "9.3.0-beta3",
+            "version": "9.3.x-dev",
             "dist": {
                 "type": "path",
                 "url": "composer/Plugin/ProjectMessage",
@@ -821,7 +821,7 @@
         },
         {
             "name": "drupal/core-vendor-hardening",
-            "version": "9.3.0-beta3",
+            "version": "9.3.x-dev",
             "dist": {
                 "type": "path",
                 "url": "composer/Plugin/VendorHardening",
@@ -7909,6 +7909,9 @@
     "aliases": [],
     "minimum-stability": "dev",
     "stability-flags": {
+        "drupal/core": 20,
+        "drupal/core-project-message": 20,
+        "drupal/core-vendor-hardening": 20,
         "symfony/phpunit-bridge": 10,
         "symfony/var-dumper": 10
     },
@@ -7919,5 +7922,5 @@
     "platform-overrides": {
         "php": "7.3.0"
     },
-    "plugin-api-version": "2.0.0"
+    "plugin-api-version": "2.1.0"
 }
diff --git a/composer/Metapackage/CoreRecommended/composer.json b/composer/Metapackage/CoreRecommended/composer.json
index f46d9ade2f9a..b7392b02dad9 100644
--- a/composer/Metapackage/CoreRecommended/composer.json
+++ b/composer/Metapackage/CoreRecommended/composer.json
@@ -7,7 +7,7 @@
         "webflo/drupal-core-strict": "*"
     },
     "require": {
-        "drupal/core": "9.3.0-beta3",
+        "drupal/core": "9.3.x-dev",
         "asm89/stack-cors": "1.3.0",
         "composer/semver": "3.2.6",
         "doctrine/annotations": "1.13.2",
diff --git a/composer/Metapackage/PinnedDevDependencies/composer.json b/composer/Metapackage/PinnedDevDependencies/composer.json
index d888a325cf51..56ac0a0800f8 100644
--- a/composer/Metapackage/PinnedDevDependencies/composer.json
+++ b/composer/Metapackage/PinnedDevDependencies/composer.json
@@ -7,7 +7,7 @@
         "webflo/drupal-core-require-dev": "*"
     },
     "require": {
-        "drupal/core": "9.3.0-beta3",
+        "drupal/core": "9.3.x-dev",
         "behat/mink": "v1.9.0",
         "behat/mink-selenium2-driver": "v1.5.0",
         "composer/ca-bundle": "1.3.1",
diff --git a/composer/Template/LegacyProject/composer.json b/composer/Template/LegacyProject/composer.json
index afc7c7f0dcf1..1b1a2af337ab 100644
--- a/composer/Template/LegacyProject/composer.json
+++ b/composer/Template/LegacyProject/composer.json
@@ -27,7 +27,7 @@
     "conflict": {
         "drupal/drupal": "*"
     },
-    "minimum-stability": "beta",
+    "minimum-stability": "dev",
     "prefer-stable": true,
     "config": {
         "sort-packages": true
diff --git a/composer/Template/RecommendedProject/composer.json b/composer/Template/RecommendedProject/composer.json
index 8b2984364d5f..99e9f55f2394 100644
--- a/composer/Template/RecommendedProject/composer.json
+++ b/composer/Template/RecommendedProject/composer.json
@@ -26,7 +26,7 @@
     "conflict": {
         "drupal/drupal": "*"
     },
-    "minimum-stability": "beta",
+    "minimum-stability": "dev",
     "prefer-stable": true,
     "config": {
         "sort-packages": true
diff --git a/core/lib/Drupal.php b/core/lib/Drupal.php
index c17322d28f1d..4ffa6c6f0b0b 100644
--- a/core/lib/Drupal.php
+++ b/core/lib/Drupal.php
@@ -75,7 +75,7 @@ class Drupal {
   /**
    * The current system version.
    */
-  const VERSION = '9.3.0-beta3';
+  const VERSION = '9.3.0-dev';
 
   /**
    * Core API compatibility.
-- 
GitLab


From 1c12e9b30606e31adc3316b0292656c9eab9faf2 Mon Sep 17 00:00:00 2001
From: Stefanos Petrakis <stefanos.petrakis@gmail.com>
Date: Wed, 24 Nov 2021 18:07:56 +0200
Subject: [PATCH 64/69] 3075230-15.patch
 https://www.drupal.org/project/drupal/issues/3075230#comment-13975596

---
 .../LayoutBuilderContentModerationIntegrationTest.php  |  1 +
 core/modules/menu_ui/menu_ui.module                    | 10 +++++++++-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/core/modules/content_moderation/tests/src/Functional/LayoutBuilderContentModerationIntegrationTest.php b/core/modules/content_moderation/tests/src/Functional/LayoutBuilderContentModerationIntegrationTest.php
index 70a5b2a33c2f..5af6de2041a5 100644
--- a/core/modules/content_moderation/tests/src/Functional/LayoutBuilderContentModerationIntegrationTest.php
+++ b/core/modules/content_moderation/tests/src/Functional/LayoutBuilderContentModerationIntegrationTest.php
@@ -100,6 +100,7 @@ public function testLayoutModeration() {
       'title' => 'bar',
       'menu_name' => 'main',
       'description' => 'view bar',
+      'link_enabled' => TRUE,
       'parent' => '',
     ]);
 
diff --git a/core/modules/menu_ui/menu_ui.module b/core/modules/menu_ui/menu_ui.module
index ad49bf10f701..7cc3c3d389e8 100644
--- a/core/modules/menu_ui/menu_ui.module
+++ b/core/modules/menu_ui/menu_ui.module
@@ -108,8 +108,8 @@ function _menu_ui_node_save(NodeInterface $node, array $values) {
       'link' => ['uri' => 'entity:node/' . $node->id()],
       'langcode' => $node->language()->getId(),
     ]);
-    $entity->enabled->value = 1;
   }
+  $entity->enabled->value = $values['link_enabled'] ?? 1;
   $entity->title->value = trim($values['title']);
   $entity->description->value = trim($values['description']);
   $entity->menu_name->value = $values['menu_name'];
@@ -174,6 +174,7 @@ function menu_ui_get_menu_link_defaults(NodeInterface $node) {
         'menu_name' => $menu_link->getMenuName(),
         'parent' => $menu_link->getParentId(),
         'weight' => $menu_link->getWeight(),
+        'enabled' => $menu_link->isEnabled(),
       ];
     }
   }
@@ -296,6 +297,13 @@ function menu_ui_form_node_form_alter(&$form, FormStateInterface $form_state) {
     '#description' => t('Menu links with lower weights are displayed before links with higher weights.'),
   ];
 
+  $form['menu']['link']['link_enabled'] = [
+    '#type' => 'checkbox',
+    '#title' => t('Enabled'),
+    '#description' => t('A flag for whether the link should be enabled in menus or hidden.'),
+    '#default_value' => $defaults['enabled'] ?? 1,
+  ];
+
   foreach (array_keys($form['actions']) as $action) {
     if ($action != 'preview' && isset($form['actions'][$action]['#type']) && $form['actions'][$action]['#type'] === 'submit') {
       $form['actions'][$action]['#submit'][] = 'menu_ui_form_node_form_submit';
-- 
GitLab


From 8b767b2ca09af72f05759e3beae5efcf83055789 Mon Sep 17 00:00:00 2001
From: Stefanos Petrakis <stefanos.petrakis@gmail.com>
Date: Wed, 24 Nov 2021 18:09:42 +0200
Subject: [PATCH 65/69] 3075230-17.patch
 https://www.drupal.org/project/drupal/issues/3075230#comment-14133737

---
 core/modules/menu_ui/menu_ui.module | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/core/modules/menu_ui/menu_ui.module b/core/modules/menu_ui/menu_ui.module
index 7cc3c3d389e8..505162420036 100644
--- a/core/modules/menu_ui/menu_ui.module
+++ b/core/modules/menu_ui/menu_ui.module
@@ -195,6 +195,7 @@ function menu_ui_get_menu_link_defaults(NodeInterface $node) {
       'menu_name' => $menu_name,
       'parent' => '',
       'weight' => 0,
+      'enabled' => $node_type->getThirdPartySetting('menu_ui', 'link', 0)
     ];
   }
   return $defaults;
@@ -397,6 +398,11 @@ function menu_ui_form_node_type_form_alter(&$form, FormStateInterface $form_stat
   ];
   $options_cacheability->applyTo($form['menu']['menu_parent']);
 
+  $form['menu']['link_enabled'] = [
+    '#type' => 'checkbox',
+    '#title' => t('Enable menu link (default)'),
+    '#default_value' => $type->getThirdPartySetting('menu_ui', 'link_enabled', 1),
+  ];
   $form['#validate'][] = 'menu_ui_form_node_type_form_validate';
   $form['#entity_builders'][] = 'menu_ui_form_node_type_form_builder';
 }
@@ -429,6 +435,7 @@ function menu_ui_form_node_type_form_validate(&$form, FormStateInterface $form_s
 function menu_ui_form_node_type_form_builder($entity_type, NodeTypeInterface $type, &$form, FormStateInterface $form_state) {
   $type->setThirdPartySetting('menu_ui', 'available_menus', array_values(array_filter($form_state->getValue('menu_options'))));
   $type->setThirdPartySetting('menu_ui', 'parent', $form_state->getValue('menu_parent'));
+  $type->setThirdPartySetting('menu_ui', 'link_enabled', $form_state->getValue('link_enabled'));
 }
 
 /**
-- 
GitLab


From 092730300e09e4e29982d0f1f51ccf897a43f2f0 Mon Sep 17 00:00:00 2001
From: Stefanos Petrakis <stefanos.petrakis@gmail.com>
Date: Wed, 24 Nov 2021 18:39:52 +0200
Subject: [PATCH 66/69] 3075230-29.patch
 https://www.drupal.org/project/drupal/issues/3075230#comment-14196823

---
 ...uilderContentModerationIntegrationTest.php |  1 -
 .../menu_ui/config/schema/menu_ui.schema.yml  |  3 +
 core/modules/menu_ui/menu_ui.admin.es6.js     |  8 ++-
 core/modules/menu_ui/menu_ui.admin.js         | 10 +++-
 core/modules/menu_ui/menu_ui.module           |  2 +-
 .../MenuUiContentModerationTest.php           |  3 +
 .../tests/src/Functional/MenuUiNodeTest.php   | 57 +++++++++++++++++++
 7 files changed, 79 insertions(+), 5 deletions(-)

diff --git a/core/modules/content_moderation/tests/src/Functional/LayoutBuilderContentModerationIntegrationTest.php b/core/modules/content_moderation/tests/src/Functional/LayoutBuilderContentModerationIntegrationTest.php
index 5af6de2041a5..70a5b2a33c2f 100644
--- a/core/modules/content_moderation/tests/src/Functional/LayoutBuilderContentModerationIntegrationTest.php
+++ b/core/modules/content_moderation/tests/src/Functional/LayoutBuilderContentModerationIntegrationTest.php
@@ -100,7 +100,6 @@ public function testLayoutModeration() {
       'title' => 'bar',
       'menu_name' => 'main',
       'description' => 'view bar',
-      'link_enabled' => TRUE,
       'parent' => '',
     ]);
 
diff --git a/core/modules/menu_ui/config/schema/menu_ui.schema.yml b/core/modules/menu_ui/config/schema/menu_ui.schema.yml
index 69af435fa1cf..8eec8d13d926 100644
--- a/core/modules/menu_ui/config/schema/menu_ui.schema.yml
+++ b/core/modules/menu_ui/config/schema/menu_ui.schema.yml
@@ -21,3 +21,6 @@ node.type.*.third_party.menu_ui:
     parent:
       type: string
       label: 'Parent'
+    link_enabled:
+      type: boolean
+      label: 'Enable menu link'
diff --git a/core/modules/menu_ui/menu_ui.admin.es6.js b/core/modules/menu_ui/menu_ui.admin.es6.js
index 69b0d6843e3a..c46fdfd244e5 100644
--- a/core/modules/menu_ui/menu_ui.admin.es6.js
+++ b/core/modules/menu_ui/menu_ui.admin.es6.js
@@ -27,13 +27,19 @@
    * Function to set the options of the menu parent item dropdown.
    */
   Drupal.menuUiUpdateParentList = function () {
-    const $menu = $('#edit-menu');
+    const $menu = $('#edit-menu-options');
+    const $linkEnabled = $('#edit-link-enabled');
     const values = [];
 
     $menu.find('input:checked').each(function () {
       // Get the names of all checked menus.
       values.push(Drupal.checkPlain($(this).val()));
     });
+    // Uncheck and hide link enabled checkbox if no menus selected.
+    if (values.length === 0) {
+      $linkEnabled.prop('checked', false);
+    }
+    $linkEnabled.closest('div').attr('hidden', values.length === 0);
 
     $.ajax({
       url: `${window.location.protocol}//${window.location.host}${Drupal.url(
diff --git a/core/modules/menu_ui/menu_ui.admin.js b/core/modules/menu_ui/menu_ui.admin.js
index 62442f0b2e43..325ceb3f13f0 100644
--- a/core/modules/menu_ui/menu_ui.admin.js
+++ b/core/modules/menu_ui/menu_ui.admin.js
@@ -19,11 +19,17 @@
   };
 
   Drupal.menuUiUpdateParentList = function () {
-    var $menu = $('#edit-menu');
+    const $menu = $('#edit-menu-options');
+    const $linkEnabled = $('#edit-link-enabled');
     var values = [];
     $menu.find('input:checked').each(function () {
       values.push(Drupal.checkPlain($(this).val()));
     });
+
+    // Uncheck and hide link enabled checkbox if no menus selected.
+    if (values.length === 0) {
+      $linkEnabled.prop('checked', false);
+    }
     $.ajax({
       url: "".concat(window.location.protocol, "//").concat(window.location.host).concat(Drupal.url('admin/structure/menu/parents')),
       type: 'POST',
@@ -44,4 +50,4 @@
       }
     });
   };
-})(jQuery, Drupal);
\ No newline at end of file
+})(jQuery, Drupal);
diff --git a/core/modules/menu_ui/menu_ui.module b/core/modules/menu_ui/menu_ui.module
index 505162420036..8488275484a0 100644
--- a/core/modules/menu_ui/menu_ui.module
+++ b/core/modules/menu_ui/menu_ui.module
@@ -195,7 +195,7 @@ function menu_ui_get_menu_link_defaults(NodeInterface $node) {
       'menu_name' => $menu_name,
       'parent' => '',
       'weight' => 0,
-      'enabled' => $node_type->getThirdPartySetting('menu_ui', 'link', 0)
+      'enabled' => $node_type->getThirdPartySetting('menu_ui', 'link_enabled', (int) !empty($menu_name)),
     ];
   }
   return $defaults;
diff --git a/core/modules/menu_ui/tests/src/Functional/MenuUiContentModerationTest.php b/core/modules/menu_ui/tests/src/Functional/MenuUiContentModerationTest.php
index 2491150a6f5a..a1bff3de2a6e 100644
--- a/core/modules/menu_ui/tests/src/Functional/MenuUiContentModerationTest.php
+++ b/core/modules/menu_ui/tests/src/Functional/MenuUiContentModerationTest.php
@@ -85,6 +85,7 @@ public function testMenuUiWithPendingRevisions() {
     // Add a menu link and save a new default (published) revision.
     $edit = [
       'menu[enabled]' => 1,
+      'menu[link_enabled]' => 1,
       'menu[title]' => 'Test menu link',
       'moderation_state[0][state]' => 'published',
     ];
@@ -120,6 +121,7 @@ public function testMenuUiWithPendingRevisions() {
     // Try to delete the menu link and save a new non-default (draft) revision.
     $edit = [
       'menu[enabled]' => 0,
+      'menu[link_enabled]' => 0,
       'moderation_state[0][state]' => 'draft',
     ];
     $this->drupalGet('node/' . $node->id() . '/edit');
@@ -170,6 +172,7 @@ public function testMenuUiWithPendingRevisions() {
     // and ensure it's not immediately published.
     $edit = [
       'menu[enabled]' => 1,
+      'menu[link_enabled]' => 1,
       'menu[title]' => 'Second test menu link',
       'moderation_state[0][state]' => 'draft',
     ];
diff --git a/core/modules/menu_ui/tests/src/Functional/MenuUiNodeTest.php b/core/modules/menu_ui/tests/src/Functional/MenuUiNodeTest.php
index 01efbcf016fe..8e4e4bedcc7c 100644
--- a/core/modules/menu_ui/tests/src/Functional/MenuUiNodeTest.php
+++ b/core/modules/menu_ui/tests/src/Functional/MenuUiNodeTest.php
@@ -64,6 +64,35 @@ protected function setUp(): void {
     $this->drupalLogin($this->editor);
   }
 
+  /**
+   * Test correct configuring of default enabling link setting by content type.
+   */
+  public function testContentTypeLinkEnableConfiguration() {
+    // Check that unconfigured content type defaults to enabled links.
+    $this->drupalGet('/node/add/page');
+    $this->assertSession()->checkboxChecked('menu[link_enabled]');
+
+    // Configure menu links to be disabled.
+    $edit = [
+      'menu_options[main]' => 1,
+      'menu_parent' => 'main:',
+      'link_enabled' => FALSE,
+    ];
+    $this->drupalGet('admin/structure/types/manage/page');
+    $this->submitForm($edit, 'Save content type');
+    $this->assertSession()->pageTextContains('The content type Basic page has been updated.');
+    $this->drupalGet('/node/add/page');
+    $this->assertSession()->checkboxNotChecked('menu[link_enabled]');
+
+    // Configure menu links to be enabled.
+    $edit['link_enabled'] = TRUE;
+    $this->drupalGet('admin/structure/types/manage/page');
+    $this->submitForm($edit, 'Save content type');
+    $this->assertSession()->pageTextContains('The content type Basic page has been updated.');
+    $this->drupalGet('/node/add/page');
+    $this->assertSession()->checkboxChecked('menu[link_enabled]');
+  }
+
   /**
    * Tests creating, editing, deleting menu links via node form widget.
    */
@@ -121,6 +150,7 @@ public function testMenuNodeFormWidget() {
       'menu_options[main]' => 1,
       'menu_options[tools]' => 1,
       'menu_parent' => 'main:',
+      'link_enabled' => TRUE,
     ];
     $this->drupalGet('admin/structure/types/manage/page');
     $this->submitForm($edit, 'Save content type');
@@ -131,6 +161,7 @@ public function testMenuNodeFormWidget() {
       'title[0][value]' => $node_title,
       'menu[enabled]' => 1,
       'menu[title]' => 'Test preview',
+      'menu[link_enabled]' => 1,
     ];
     $this->drupalGet('node/add/page');
     $this->submitForm($edit, 'Preview');
@@ -174,6 +205,7 @@ public function testMenuNodeFormWidget() {
       'menu[enabled]' => 1,
       'menu[title]' => $node_title,
       'status[value]' => FALSE,
+      'menu[link_enabled]' => 1,
     ];
     $this->drupalGet('node/' . $node->id() . '/edit');
     $this->submitForm($edit, 'Save');
@@ -186,13 +218,34 @@ public function testMenuNodeFormWidget() {
     $this->drupalGet('test-page');
     $this->assertSession()->linkExists($node_title, 0, 'Found a menu link with the node published');
 
+    // Assert that link is not enabled / does not exist in the rendered menu
+    // if link_enabled option is disabled.
+    $edit['menu[link_enabled]'] = 0;
+    $this->drupalGet('node/' . $node->id() . '/edit');
+    $this->submitForm($edit, 'Save');
+    $this->drupalGet('test-page');
+    $this->assertSession()->linkNotExists($node_title, 'Found no menu link with the node menu link disabled');
+    // If we go to main menu we shall see the disabled menu link.
+    $this->drupalGet('admin/structure/menu/manage/main');
+    $this->assertSession()->checkboxNotChecked("Enable $node_title menu link");
+    // Re-enable link via node form and check menu.
+    $edit['menu[link_enabled]'] = 1;
+    $this->drupalGet('node/' . $node->id() . '/edit');
+    $this->submitForm($edit, 'Save');
+    $this->drupalGet('test-page');
+    // If we go to main menu we shall see the enabled menu link.
+    $this->drupalGet('admin/structure/menu/manage/main');
+    $this->assertSession()->checkboxChecked("Enable $node_title menu link");
+
     // Log back in as normal user.
     $this->drupalLogin($this->editor);
+
     // Edit the node and create a menu link.
     $edit = [
       'menu[enabled]' => 1,
       'menu[title]' => $node_title,
       'menu[weight]' => 17,
+      'menu[link_enabled]' => 1,
     ];
     $this->drupalGet('node/' . $node->id() . '/edit');
     $this->submitForm($edit, 'Save');
@@ -216,6 +269,8 @@ public function testMenuNodeFormWidget() {
     $link->set('enabled', FALSE);
     $link->save();
     $this->drupalGet($node->toUrl('edit-form'));
+    // Remove this submission value as it will re-enable menu link on save.
+    unset($edit['menu[link_enabled]']);
     $this->submitForm($edit, 'Save');
     $link = MenuLinkContent::load($link_id);
     $this->assertFalse($link->isEnabled(), 'Saving a node with a disabled menu link keeps the menu link disabled.');
@@ -335,6 +390,7 @@ public function testMultilingualMenuNodeFormWidget() {
       'menu[enabled]' => 1,
       'menu[title]' => $node_title,
       'menu[weight]' => 17,
+      'menu[link_enabled]' => 1,
     ];
     $options = ['language' => $languages[$langcodes[0]]];
     $url = $node->toUrl('edit-form', $options);
@@ -346,6 +402,7 @@ public function testMultilingualMenuNodeFormWidget() {
       'menu[enabled]' => 1,
       'menu[title]' => $translated_node_title,
       'menu[weight]' => 17,
+      'menu[link_enabled]' => 1,
     ];
     $options = ['language' => $languages[$langcodes[1]]];
     $url = $node->toUrl('edit-form', $options);
-- 
GitLab


From 49d71738fbf60092a12f498fd3df889b6939ac9d Mon Sep 17 00:00:00 2001
From: Stefanos Petrakis <stefanos.petrakis@gmail.com>
Date: Wed, 24 Nov 2021 20:03:02 +0200
Subject: [PATCH 67/69] Fixing ES6 is not updated yarn run build:js -- --file
 modules/menu_ui/menu_ui.admin.es6.js

---
 core/modules/menu_ui/menu_ui.admin.js | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/core/modules/menu_ui/menu_ui.admin.js b/core/modules/menu_ui/menu_ui.admin.js
index 325ceb3f13f0..650cafcb23d5 100644
--- a/core/modules/menu_ui/menu_ui.admin.js
+++ b/core/modules/menu_ui/menu_ui.admin.js
@@ -19,17 +19,18 @@
   };
 
   Drupal.menuUiUpdateParentList = function () {
-    const $menu = $('#edit-menu-options');
-    const $linkEnabled = $('#edit-link-enabled');
+    var $menu = $('#edit-menu-options');
+    var $linkEnabled = $('#edit-link-enabled');
     var values = [];
     $menu.find('input:checked').each(function () {
       values.push(Drupal.checkPlain($(this).val()));
     });
 
-    // Uncheck and hide link enabled checkbox if no menus selected.
     if (values.length === 0) {
       $linkEnabled.prop('checked', false);
     }
+
+    $linkEnabled.closest('div').attr('hidden', values.length === 0);
     $.ajax({
       url: "".concat(window.location.protocol, "//").concat(window.location.host).concat(Drupal.url('admin/structure/menu/parents')),
       type: 'POST',
@@ -50,4 +51,4 @@
       }
     });
   };
-})(jQuery, Drupal);
+})(jQuery, Drupal);
\ No newline at end of file
-- 
GitLab


From dcdd2a33ff69cc718dfe5bd572d07677dc9786bb Mon Sep 17 00:00:00 2001
From: Ravi Shankar <ravi.s@opensenselabs.com>
Date: Thu, 24 Mar 2022 07:45:02 +0530
Subject: [PATCH 68/69] Removed leading '/' in the URL.

---
 core/modules/menu_ui/menu_ui.admin.es6.js                   | 2 +-
 core/modules/menu_ui/menu_ui.module                         | 2 +-
 .../modules/menu_ui/tests/src/Functional/MenuUiNodeTest.php | 6 +++---
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/core/modules/menu_ui/menu_ui.admin.es6.js b/core/modules/menu_ui/menu_ui.admin.es6.js
index c46fdfd244e5..bd037d9b5fdd 100644
--- a/core/modules/menu_ui/menu_ui.admin.es6.js
+++ b/core/modules/menu_ui/menu_ui.admin.es6.js
@@ -35,8 +35,8 @@
       // Get the names of all checked menus.
       values.push(Drupal.checkPlain($(this).val()));
     });
-    // Uncheck and hide link enabled checkbox if no menus selected.
     if (values.length === 0) {
+      // Uncheck and hide link enabled checkbox if no menus selected.
       $linkEnabled.prop('checked', false);
     }
     $linkEnabled.closest('div').attr('hidden', values.length === 0);
diff --git a/core/modules/menu_ui/menu_ui.module b/core/modules/menu_ui/menu_ui.module
index 8488275484a0..eaf9a3d66345 100644
--- a/core/modules/menu_ui/menu_ui.module
+++ b/core/modules/menu_ui/menu_ui.module
@@ -301,7 +301,7 @@ function menu_ui_form_node_form_alter(&$form, FormStateInterface $form_state) {
   $form['menu']['link']['link_enabled'] = [
     '#type' => 'checkbox',
     '#title' => t('Enabled'),
-    '#description' => t('A flag for whether the link should be enabled in menus or hidden.'),
+    '#description' => t('A flag for whether the link should be visible in menus or hidden.'),
     '#default_value' => $defaults['enabled'] ?? 1,
   ];
 
diff --git a/core/modules/menu_ui/tests/src/Functional/MenuUiNodeTest.php b/core/modules/menu_ui/tests/src/Functional/MenuUiNodeTest.php
index 8e4e4bedcc7c..f3d2630487ee 100644
--- a/core/modules/menu_ui/tests/src/Functional/MenuUiNodeTest.php
+++ b/core/modules/menu_ui/tests/src/Functional/MenuUiNodeTest.php
@@ -69,7 +69,7 @@ protected function setUp(): void {
    */
   public function testContentTypeLinkEnableConfiguration() {
     // Check that unconfigured content type defaults to enabled links.
-    $this->drupalGet('/node/add/page');
+    $this->drupalGet('node/add/page');
     $this->assertSession()->checkboxChecked('menu[link_enabled]');
 
     // Configure menu links to be disabled.
@@ -81,7 +81,7 @@ public function testContentTypeLinkEnableConfiguration() {
     $this->drupalGet('admin/structure/types/manage/page');
     $this->submitForm($edit, 'Save content type');
     $this->assertSession()->pageTextContains('The content type Basic page has been updated.');
-    $this->drupalGet('/node/add/page');
+    $this->drupalGet('node/add/page');
     $this->assertSession()->checkboxNotChecked('menu[link_enabled]');
 
     // Configure menu links to be enabled.
@@ -89,7 +89,7 @@ public function testContentTypeLinkEnableConfiguration() {
     $this->drupalGet('admin/structure/types/manage/page');
     $this->submitForm($edit, 'Save content type');
     $this->assertSession()->pageTextContains('The content type Basic page has been updated.');
-    $this->drupalGet('/node/add/page');
+    $this->drupalGet('node/add/page');
     $this->assertSession()->checkboxChecked('menu[link_enabled]');
   }
 
-- 
GitLab


From 84af65f3fca355bb9233f2efc57ca0bf1884075d Mon Sep 17 00:00:00 2001
From: Stefanos Petrakis <stefanos.petrakis@gmail.com>
Date: Fri, 21 Oct 2022 14:03:34 +0200
Subject: [PATCH 69/69] Adding changes from patch #48

---
 .../Functional/LayoutBuilderContentModerationIntegrationTest.php | 1 +
 1 file changed, 1 insertion(+)

diff --git a/core/modules/content_moderation/tests/src/Functional/LayoutBuilderContentModerationIntegrationTest.php b/core/modules/content_moderation/tests/src/Functional/LayoutBuilderContentModerationIntegrationTest.php
index 70a5b2a33c2f..5af6de2041a5 100644
--- a/core/modules/content_moderation/tests/src/Functional/LayoutBuilderContentModerationIntegrationTest.php
+++ b/core/modules/content_moderation/tests/src/Functional/LayoutBuilderContentModerationIntegrationTest.php
@@ -100,6 +100,7 @@ public function testLayoutModeration() {
       'title' => 'bar',
       'menu_name' => 'main',
       'description' => 'view bar',
+      'link_enabled' => TRUE,
       'parent' => '',
     ]);
 
-- 
GitLab